From f5f46b29a297cc232ed48f5ac822a3a7b30e88b6 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Wed, 7 Aug 2024 16:23:57 +0800 Subject: [PATCH 01/45] copy contracts folder --- contracts/A1.sol | 82 +++ contracts/A20.sol | 98 +++ contracts/A6.sol | 140 ++++ contracts/DynamicAssertion.sol | 30 +- contracts/ProxyDynamicAssertion.sol | 85 +++ contracts/libraries/AssertionLogic.sol | 202 +++--- contracts/libraries/Http.sol | 511 ++++++++------ contracts/libraries/Identities.sol | 440 ++++++------ contracts/libraries/Json.sol | 153 +++++ contracts/libraries/Logging.sol | 71 ++ contracts/libraries/StringShift.sol | 121 ++++ contracts/libraries/Utils.sol | 299 ++++----- contracts/mocks/MockHttpGetI64.sol | 63 ++ contracts/mocks/MockHttpGetString.sol | 90 +++ contracts/mocks/MockIdentityToString.sol | 53 ++ contracts/mocks/MockParseDecimal.sol | 56 ++ contracts/tests/Get.sol | 37 + contracts/tests/GetBool.sol | 36 +- contracts/tests/GetI64.sol | 34 +- contracts/tests/GetString.sol | 34 +- contracts/tests/HexToNumber.sol | 10 +- contracts/tests/IdentityToString.sol | 12 +- contracts/tests/JsonTest.sol | 51 ++ contracts/tests/LoggingTest.sol | 27 + contracts/tests/ParseDecimal.sol | 12 +- contracts/tests/ParseInt.sol | 6 +- contracts/tests/Post.sol | 42 ++ contracts/tests/PostBool.sol | 42 +- contracts/tests/PostI64.sol | 42 +- contracts/tests/PostString.sol | 52 +- contracts/tests/ToHex.sol | 10 +- .../token_holding_amount/AchainableClient.sol | 134 ++++ .../BlockchainInfoClient.sol | 70 +- contracts/token_holding_amount/Btc.sol | 58 ++ contracts/token_holding_amount/Constants.sol | 17 +- .../token_holding_amount/GeniidataClient.sol | 81 ++- .../token_holding_amount/MoralisClient.sol | 274 ++++++++ .../token_holding_amount/NoderealClient.sol | 110 +-- .../TokenHoldingAmount.sol | 327 ++++----- .../token_holding_amount/TokenMapping.sol | 631 ++++++++---------- .../token_holding_amount/TokenQueryLogic.sol | 184 ++--- .../token_holding_amount/brc20/BRC20.sol | 48 ++ contracts/token_holding_amount/brc20/Btcs.sol | 38 +- contracts/token_holding_amount/brc20/Cats.sol | 36 +- contracts/token_holding_amount/brc20/Long.sol | 38 +- contracts/token_holding_amount/brc20/Mmss.sol | 38 +- contracts/token_holding_amount/brc20/Ordi.sol | 36 +- contracts/token_holding_amount/brc20/Rats.sol | 38 +- contracts/token_holding_amount/brc20/Sats.sol | 38 +- contracts/token_holding_amount/erc20/Ada.sol | 51 +- contracts/token_holding_amount/erc20/Amp.sol | 60 +- contracts/token_holding_amount/erc20/Atom.sol | 58 +- contracts/token_holding_amount/erc20/Bch.sol | 59 +- contracts/token_holding_amount/erc20/Bean.sol | 54 +- contracts/token_holding_amount/erc20/Bnb.sol | 60 +- contracts/token_holding_amount/erc20/Comp.sol | 60 +- contracts/token_holding_amount/erc20/Cro.sol | 59 +- contracts/token_holding_amount/erc20/Crv.sol | 60 +- contracts/token_holding_amount/erc20/Cvx.sol | 53 +- contracts/token_holding_amount/erc20/Dai.sol | 70 +- contracts/token_holding_amount/erc20/Doge.sol | 49 +- contracts/token_holding_amount/erc20/Dydx.sol | 60 +- contracts/token_holding_amount/erc20/Etc.sol | 51 +- contracts/token_holding_amount/erc20/Eth.sol | 74 +- contracts/token_holding_amount/erc20/Fil.sol | 52 +- contracts/token_holding_amount/erc20/Grt.sol | 60 +- contracts/token_holding_amount/erc20/Gtc.sol | 60 +- contracts/token_holding_amount/erc20/Gusd.sol | 60 +- contracts/token_holding_amount/erc20/Imx.sol | 56 +- contracts/token_holding_amount/erc20/Inj.sol | 52 +- contracts/token_holding_amount/erc20/Leo.sol | 51 +- contracts/token_holding_amount/erc20/Link.sol | 65 +- contracts/token_holding_amount/erc20/Lit.sol | 66 +- .../token_holding_amount/erc20/Matic.sol | 66 +- contracts/token_holding_amount/erc20/Mcrt.sol | 58 +- contracts/token_holding_amount/erc20/Nfp.sol | 60 +- .../token_holding_amount/erc20/People.sol | 60 +- contracts/token_holding_amount/erc20/Shib.sol | 55 +- contracts/token_holding_amount/erc20/Sol.sol | 71 +- .../token_holding_amount/erc20/SpaceId.sol | 65 +- contracts/token_holding_amount/erc20/Ton.sol | 65 +- contracts/token_holding_amount/erc20/Trx.sol | 65 +- contracts/token_holding_amount/erc20/Tusd.sol | 59 +- contracts/token_holding_amount/erc20/Uni.sol | 63 +- contracts/token_holding_amount/erc20/Usdc.sol | 63 +- contracts/token_holding_amount/erc20/Usdd.sol | 59 +- contracts/token_holding_amount/erc20/Usdt.sol | 66 +- contracts/token_holding_amount/erc20/Wbtc.sol | 75 +-- 88 files changed, 4553 insertions(+), 2934 deletions(-) create mode 100644 contracts/A1.sol create mode 100644 contracts/A20.sol create mode 100644 contracts/A6.sol create mode 100644 contracts/ProxyDynamicAssertion.sol create mode 100644 contracts/libraries/Json.sol create mode 100644 contracts/libraries/Logging.sol create mode 100644 contracts/libraries/StringShift.sol create mode 100644 contracts/mocks/MockHttpGetI64.sol create mode 100644 contracts/mocks/MockHttpGetString.sol create mode 100644 contracts/mocks/MockIdentityToString.sol create mode 100644 contracts/mocks/MockParseDecimal.sol create mode 100644 contracts/tests/Get.sol create mode 100644 contracts/tests/JsonTest.sol create mode 100644 contracts/tests/LoggingTest.sol create mode 100644 contracts/tests/Post.sol create mode 100644 contracts/token_holding_amount/AchainableClient.sol create mode 100644 contracts/token_holding_amount/Btc.sol create mode 100644 contracts/token_holding_amount/MoralisClient.sol create mode 100644 contracts/token_holding_amount/brc20/BRC20.sol diff --git a/contracts/A1.sol b/contracts/A1.sol new file mode 100644 index 0000000..1d4d33f --- /dev/null +++ b/contracts/A1.sol @@ -0,0 +1,82 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "./libraries/AssertionLogic.sol"; +import "./libraries/Identities.sol"; +import "./DynamicAssertion.sol"; + +contract A1 is DynamicAssertion { + function execute( + Identity[] memory identities, + string[] memory /*secrets*/, + bytes memory /*params*/ + ) + public + override + returns ( + string memory, + string memory, + string[] memory, + string memory, + bool + ) + { + string + memory description = "You've identified at least one account/address in both Web2 and Web3."; + string memory assertion_type = "Basic Identity Verification"; + schema_url = "https://raw.githubusercontent.com/litentry/vc-jsonschema/main/dist/schemas/1-basic-identity-verification/1-0-0.json"; + + bool result; + + bool has_web3_identity = false; + bool has_web2_identity = false; + + for (uint256 i = 0; i < identities.length; i++) { + if (Identities.is_web2(identities[i])) { + has_web2_identity = true; + } else if (Identities.is_web3(identities[i])) { + has_web3_identity = true; + } + } + result = has_web2_identity && has_web3_identity; + + AssertionLogic.CompositeCondition memory cc = AssertionLogic + .CompositeCondition(new AssertionLogic.Condition[](2), true); + AssertionLogic.andOp( + cc, + 0, + "$has_web2_account", + AssertionLogic.Op.Equal, + "true" + ); + AssertionLogic.andOp( + cc, + 1, + "$has_web3_account", + AssertionLogic.Op.Equal, + "true" + ); + + string[] memory assertions = new string[](1); + assertions[0] = AssertionLogic.toString(cc); + + return (description, assertion_type, assertions, schema_url, result); + } +} diff --git a/contracts/A20.sol b/contracts/A20.sol new file mode 100644 index 0000000..10b49dd --- /dev/null +++ b/contracts/A20.sol @@ -0,0 +1,98 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "./libraries/AssertionLogic.sol"; +import "./libraries/Http.sol"; +import "./libraries/Identities.sol"; +import "./libraries/Logging.sol"; +import "./libraries/Utils.sol"; +import "./DynamicAssertion.sol"; + +contract A20 is DynamicAssertion { + function execute( + Identity[] memory identities, + string[] memory /*secrets*/, + bytes memory /*params*/ + ) + public + override + returns ( + string memory, + string memory, + string[] memory, + string memory, + bool + ) + { + Logging.info("begin generate VC for A20"); + string + memory description = "The user is an early bird user of the IdentityHub EVM version and has generated at least 1 credential during 2023 Aug 14th ~ Aug 21st."; + string memory assertion_type = "IDHub EVM Version Early Bird"; + schema_url = "https://raw.githubusercontent.com/litentry/vc-jsonschema/main/dist/schemas/12-idhub-evm-version-early-bird/1-0-0.json"; + + bool result = false; + for (uint256 i = 0; i < identities.length; i++) { + if (Identities.is_web3(identities[i])) { + (bool success, string memory res) = Utils.toHex( + identities[i].value + ); + if (success) { + if (!success) { + continue; + } + string memory url = string( + abi.encodePacked( + "https://archive-test.litentry.io/events/does-user-joined-evm-campaign?account=", + // below url is used for test against mock server + // "http://localhost:19527/events/does-user-joined-evm-campaign?account=", + res + ) + ); + string memory jsonPointer = "/hasJoined"; + HttpHeader[] memory headers = new HttpHeader[](0); + + (bool get_success, bool get_result) = Http.GetBool( + url, + jsonPointer, + headers + ); + if (get_success) { + result = get_result; + } + } + + if (result) { + break; + } + } + } + + Logging.info("begin create assertion for A20"); + AssertionLogic.Condition memory condition = AssertionLogic.Condition( + "$has_joined", + AssertionLogic.Op.Equal, + "true" + ); + string[] memory assertions = new string[](1); + assertions[0] = AssertionLogic.toString(condition); + + return (description, assertion_type, assertions, schema_url, result); + } +} diff --git a/contracts/A6.sol b/contracts/A6.sol new file mode 100644 index 0000000..5247ac4 --- /dev/null +++ b/contracts/A6.sol @@ -0,0 +1,140 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "@openzeppelin/contracts/utils/Strings.sol"; +import "./libraries/AssertionLogic.sol"; +import "./libraries/Http.sol"; +import "./libraries/Identities.sol"; +import "./DynamicAssertion.sol"; + +contract A6 is DynamicAssertion { + function execute( + Identity[] memory identities, + string[] memory secrets, + bytes memory /*params*/ + ) + public + override + returns ( + string memory, + string memory, + string[] memory, + string memory, + bool + ) + { + string + memory description = "The range of the user's Twitter follower count"; + string memory assertion_type = "Twitter Follower Amount"; + schema_url = "https://raw.githubusercontent.com/litentry/vc-jsonschema/main/dist/schemas/6-twitter-follower-amount/1-1-1.json"; + + bool result; + + int64 sum = 0; + + for (uint256 i = 0; i < identities.length; i++) { + if (Identities.is_twitter(identities[i])) { + string memory url = string( + abi.encodePacked( + "https://api.twitter.com/2/users/by/username/", + // below url is used for test against mock server + // "http://localhost:19528/2/users/by/username/", + string(identities[i].value), + "?user.fields=public_metrics" + ) + ); + + HttpHeader[] memory headers = prepareHeaders(secrets[0]); + + (bool get_success, int64 followers_count) = Http.GetI64( + url, + "/data/public_metrics/followers_count", + headers + ); + + if (get_success) { + sum += followers_count; + } + } + } + + int64 min = 0; + int64 max = 0; + + if (sum >= 0 && sum <= 1) { + min = 0; + max = 1; + } else if (sum > 1 && sum <= 100) { + min = 1; + max = 100; + } else if (sum > 100 && sum <= 1000) { + min = 100; + max = 1000; + } else if (sum > 1000 && sum <= 10000) { + min = 1000; + max = 10000; + } else if (sum > 10000 && sum <= 100000) { + min = 10000; + max = 100000; + } else if (sum > 100000) { + min = 100000; + max = 9223372036854775807; + } + result = min != 0; + + string memory variable = "$total_followers"; + AssertionLogic.CompositeCondition memory cc = AssertionLogic + .CompositeCondition(new AssertionLogic.Condition[](2), true); + AssertionLogic.andOp( + cc, + 0, + variable, + AssertionLogic.Op.GreaterThan, + Strings.toString(min) + ); + AssertionLogic.andOp( + cc, + 1, + variable, + AssertionLogic.Op.LessEq, + Strings.toString(max) + ); + + string[] memory assertions = new string[](1); + assertions[0] = AssertionLogic.toString(cc); + + return (description, assertion_type, assertions, schema_url, result); + } + + function prepareHeaders( + string memory apiKey + ) private pure returns (HttpHeader[] memory) { + HttpHeader[] memory headers = new HttpHeader[](1); + // we expect first secret to be twitter api key + headers[0] = HttpHeader("authorization", prepareAuthHeader(apiKey)); + return headers; + } + + function prepareAuthHeader( + string memory apiKey + ) private pure returns (string memory) { + return string(abi.encodePacked("Bearer ", apiKey)); + } +} diff --git a/contracts/DynamicAssertion.sol b/contracts/DynamicAssertion.sol index e3f04a8..c641908 100644 --- a/contracts/DynamicAssertion.sol +++ b/contracts/DynamicAssertion.sol @@ -21,20 +21,20 @@ pragma solidity ^0.8.8; import "./libraries/Identities.sol"; abstract contract DynamicAssertion { - string schema_url; + string schema_url; - function execute( - Identity[] memory identities, - string[] memory secrets, - bytes memory params - ) - public - virtual - returns ( - string memory, - string memory, - string[] memory, - string memory, - bool - ); + function execute( + Identity[] memory identities, + string[] memory secrets, + bytes memory params + ) + public + virtual + returns ( + string memory, + string memory, + string[] memory, + string memory, + bool + ); } diff --git a/contracts/ProxyDynamicAssertion.sol b/contracts/ProxyDynamicAssertion.sol new file mode 100644 index 0000000..1deb710 --- /dev/null +++ b/contracts/ProxyDynamicAssertion.sol @@ -0,0 +1,85 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "./libraries/Identities.sol"; + +interface IDynamicAssertion { + function execute( + Identity[] memory identities, + string[] memory secrets, + bytes memory params + ) + external + returns ( + string memory description, + string memory assertionType, + string[] memory assertions, + string memory schemaUrl, + bool result + ); +} + +// This proxy is for test purpose. +contract ProxyDynamicAssertion { + address private target; + + event DynamicAssertionGenerated( + string description, + string assertionType, + string[] assertions, + string schemaUrl, + bool result + ); + + constructor(address _target) { + target = _target; + } + + function execute( + Identity[] memory identities, + string[] memory secrets, + bytes memory params + ) + public + returns ( + string memory description, + string memory assertionType, + string[] memory assertions, + string memory schemaUrl, + bool result + ) + { + IDynamicAssertion dynamicAssertion = IDynamicAssertion(target); + ( + description, + assertionType, + assertions, + schemaUrl, + result + ) = dynamicAssertion.execute(identities, secrets, params); + emit DynamicAssertionGenerated( + description, + assertionType, + assertions, + schemaUrl, + result + ); + } +} diff --git a/contracts/libraries/AssertionLogic.sol b/contracts/libraries/AssertionLogic.sol index 6c279ef..d075384 100644 --- a/contracts/libraries/AssertionLogic.sol +++ b/contracts/libraries/AssertionLogic.sol @@ -19,117 +19,117 @@ pragma solidity ^0.8.8; library AssertionLogic { - enum Op { - GreaterThan, - LessThan, - GreaterEq, - LessEq, - Equal, - NotEq - } + enum Op { + GreaterThan, + LessThan, + GreaterEq, + LessEq, + Equal, + NotEq + } - struct Condition { - string src; - Op op; - string dst; - } + struct Condition { + string src; + Op op; + string dst; + } - struct CompositeCondition { - Condition[] conditions; - bool isAnd; // true for 'And', false for 'Or' - } + struct CompositeCondition { + Condition[] conditions; + bool isAnd; // true for 'And', false for 'Or' + } - function addCondition( - CompositeCondition memory cc, - uint256 i, - string memory src, - Op op, - string memory dst - ) internal pure { - cc.conditions[i] = Condition(src, op, dst); - } + function addCondition( + CompositeCondition memory cc, + uint256 i, + string memory src, + Op op, + string memory dst + ) internal pure { + cc.conditions[i] = Condition(src, op, dst); + } - function andOp( - CompositeCondition memory cc, - uint256 i, - string memory src, - Op op, - string memory dst - ) internal pure returns (CompositeCondition memory) { - addCondition(cc, i, src, op, dst); - cc.isAnd = true; - return cc; - } + function andOp( + CompositeCondition memory cc, + uint256 i, + string memory src, + Op op, + string memory dst + ) internal pure returns (CompositeCondition memory) { + addCondition(cc, i, src, op, dst); + cc.isAnd = true; + return cc; + } - function orOp( - CompositeCondition memory cc, - uint256 i, - string memory src, - Op op, - string memory dst - ) internal pure returns (CompositeCondition memory) { - addCondition(cc, i, src, op, dst); - cc.isAnd = false; - return cc; - } + function orOp( + CompositeCondition memory cc, + uint256 i, + string memory src, + Op op, + string memory dst + ) internal pure returns (CompositeCondition memory) { + addCondition(cc, i, src, op, dst); + cc.isAnd = false; + return cc; + } - function toString( - CompositeCondition memory cc - ) internal pure returns (string memory) { - string memory result = "{"; + function toString( + CompositeCondition memory cc + ) internal pure returns (string memory) { + string memory result = "{"; - if (cc.conditions.length > 0) { - result = string( - abi.encodePacked(result, cc.isAnd ? '"and":[' : '"or":[') - ); - for (uint256 i = 0; i < cc.conditions.length; i++) { - if (i > 0) { - result = string(abi.encodePacked(result, ",")); - } - result = string( - abi.encodePacked(result, toString(cc.conditions[i])) - ); - } - result = string(abi.encodePacked(result, "]")); - } + if (cc.conditions.length > 0) { + result = string( + abi.encodePacked(result, cc.isAnd ? '"and":[' : '"or":[') + ); + for (uint256 i = 0; i < cc.conditions.length; i++) { + if (i > 0) { + result = string(abi.encodePacked(result, ",")); + } + result = string( + abi.encodePacked(result, toString(cc.conditions[i])) + ); + } + result = string(abi.encodePacked(result, "]")); + } - result = string(abi.encodePacked(result, "}")); + result = string(abi.encodePacked(result, "}")); - return result; - } + return result; + } - function toString( - Condition memory condition - ) internal pure returns (string memory) { - return - string( - abi.encodePacked( - '{"src":"', - condition.src, - '","op":"', - operatorToString(condition.op), - '","dst":"', - condition.dst, - '"}' - ) - ); - } + function toString( + Condition memory condition + ) internal pure returns (string memory) { + return + string( + abi.encodePacked( + '{"src":"', + condition.src, + '","op":"', + operatorToString(condition.op), + '","dst":"', + condition.dst, + '"}' + ) + ); + } - function operatorToString(Op op) internal pure returns (string memory) { - if (op == Op.Equal) { - return "=="; - } else if (op == Op.GreaterThan) { - return ">"; - } else if (op == Op.LessThan) { - return "<"; - } else if (op == Op.GreaterEq) { - return ">="; - } else if (op == Op.LessEq) { - return "<="; - } else if (op == Op.NotEq) { - return "!="; - } + function operatorToString(Op op) internal pure returns (string memory) { + if (op == Op.Equal) { + return "=="; + } else if (op == Op.GreaterThan) { + return ">"; + } else if (op == Op.LessThan) { + return "<"; + } else if (op == Op.GreaterEq) { + return ">="; + } else if (op == Op.LessEq) { + return "<="; + } else if (op == Op.NotEq) { + return "!="; + } - revert("Unsupported operator"); - } + revert("Unsupported operator"); + } } diff --git a/contracts/libraries/Http.sol b/contracts/libraries/Http.sol index 688874e..091c338 100644 --- a/contracts/libraries/Http.sol +++ b/contracts/libraries/Http.sol @@ -19,229 +19,296 @@ pragma solidity ^0.8.8; struct HttpHeader { - string name; - string value; + string name; + string value; } library Http { - function GetI64( - string memory url, - string memory jsonPointer, - HttpHeader[] memory headers - ) internal returns (bool, int64) { - bool success; - int64 value; - - bytes memory encoded_params = abi.encode(url, jsonPointer, headers); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x03E8, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x40 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := mload(add(memPtr, 0x20)) - mstore(0x40, add(memPtr, 0x40)) - } - - return (success, value); - } - - function GetBool( - string memory url, - string memory jsonPointer, - HttpHeader[] memory headers - ) internal returns (bool, bool) { - bool success; - bool value; - - bytes memory encoded_params = abi.encode(url, jsonPointer, headers); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x03E9, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x40 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := mload(add(memPtr, 0x20)) - mstore(0x40, add(memPtr, 0x40)) - } - - return (success, value); - } - - function GetString( - string memory url, - string memory jsonPointer, - HttpHeader[] memory headers - ) internal returns (bool, string memory) { - bool success; - string memory value; - - bytes memory encoded_params = abi.encode(url, jsonPointer, headers); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x03EA, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x1000 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := add(memPtr, 0x40) - mstore(0x40, add(memPtr, 0x1000)) - } - - return (success, value); - } - - function PostI64( - string memory url, - string memory jsonPointer, - string memory payload, - HttpHeader[] memory headers - ) internal returns (bool, int64) { - bool success; - int64 value; - - bytes memory encoded_params = abi.encode( - url, - jsonPointer, - payload, - headers - ); - uint256 encoded_params_len = encoded_params.length; - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x03EB, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x40 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := mload(add(memPtr, 0x20)) - mstore(0x40, add(memPtr, 0x40)) - } - - return (success, value); - } - - function PostBool( - string memory url, - string memory jsonPointer, - string memory payload, - HttpHeader[] memory headers - ) internal returns (bool, bool) { - bool success; - bool value; - - bytes memory encoded_params = abi.encode( - url, - jsonPointer, - payload, - headers - ); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x03EC, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x40 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := mload(add(memPtr, 0x20)) - mstore(0x40, add(memPtr, 0x40)) - } - - return (success, value); - } - - function PostString( - string memory url, - string memory jsonPointer, - string memory payload, - HttpHeader[] memory headers - ) internal returns (bool, string memory) { - bool success; - string memory value; - - bytes memory encoded_params = abi.encode( - url, - jsonPointer, - payload, - headers - ); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x03ED, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x1000 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := add(memPtr, 0x40) - mstore(0x40, add(memPtr, 0x1000)) - } - - return (success, value); - } + function GetI64( + string memory url, + string memory jsonPointer, + HttpHeader[] memory headers + ) internal returns (bool, int64) { + bool success; + int64 value; + + bytes memory encoded_params = abi.encode(url, jsonPointer, headers); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x03E8, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x40 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x40)) + } + + return (success, value); + } + + function GetBool( + string memory url, + string memory jsonPointer, + HttpHeader[] memory headers + ) internal returns (bool, bool) { + bool success; + bool value; + + bytes memory encoded_params = abi.encode(url, jsonPointer, headers); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x03E9, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x40 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x40)) + } + + return (success, value); + } + + function GetString( + string memory url, + string memory jsonPointer, + HttpHeader[] memory headers + ) internal returns (bool, string memory) { + bool success; + string memory value; + + bytes memory encoded_params = abi.encode(url, jsonPointer, headers); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x03EA, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x1000 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := add(memPtr, 0x40) + mstore(0x40, add(memPtr, 0x1000)) + } + + return (success, value); + } + + function Get( + string memory url, + HttpHeader[] memory headers + ) internal returns (bool, string memory) { + bool success; + string memory value; + + bytes memory encoded_params = abi.encode(url, headers); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x03EE, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x1000 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := add(memPtr, 0x40) + mstore(0x40, add(memPtr, 0x1000)) + } + + return (success, value); + } + + function PostI64( + string memory url, + string memory jsonPointer, + string memory payload, + HttpHeader[] memory headers + ) internal returns (bool, int64) { + bool success; + int64 value; + + bytes memory encoded_params = abi.encode( + url, + jsonPointer, + payload, + headers + ); + uint256 encoded_params_len = encoded_params.length; + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x03EB, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x40 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x40)) + } + + return (success, value); + } + + function PostBool( + string memory url, + string memory jsonPointer, + string memory payload, + HttpHeader[] memory headers + ) internal returns (bool, bool) { + bool success; + bool value; + + bytes memory encoded_params = abi.encode( + url, + jsonPointer, + payload, + headers + ); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x03EC, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x40 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x40)) + } + + return (success, value); + } + + function PostString( + string memory url, + string memory jsonPointer, + string memory payload, + HttpHeader[] memory headers + ) internal returns (bool, string memory) { + bool success; + string memory value; + + bytes memory encoded_params = abi.encode( + url, + jsonPointer, + payload, + headers + ); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x03ED, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x1000 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := add(memPtr, 0x40) + mstore(0x40, add(memPtr, 0x1000)) + } + + return (success, value); + } + + function Post( + string memory url, + string memory payload, + HttpHeader[] memory headers + ) internal returns (bool, string memory) { + bool success; + string memory value; + + bytes memory encoded_params = abi.encode(url, payload, headers); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x03EF, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x1000 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := add(memPtr, 0x40) + mstore(0x40, add(memPtr, 0x1000)) + } + + return (success, value); + } } diff --git a/contracts/libraries/Identities.sol b/contracts/libraries/Identities.sol index 1873617..ab1aedd 100644 --- a/contracts/libraries/Identities.sol +++ b/contracts/libraries/Identities.sol @@ -19,233 +19,233 @@ pragma solidity ^0.8.8; struct Identity { - uint32 identity_type; - bytes value; - uint32[] networks; + uint32 identity_type; + bytes value; + uint32[] networks; } library IdentityTypes { - // web2 - uint32 public constant Twitter = 0; - uint32 public constant Discord = 1; - uint32 public constant Github = 2; - - // web3 - uint32 public constant Substrate = 3; - uint32 public constant Evm = 4; - uint32 public constant Bitcoin = 5; - uint32 public constant Solana = 6; + // web2 + uint32 public constant Twitter = 0; + uint32 public constant Discord = 1; + uint32 public constant Github = 2; + + // web3 + uint32 public constant Substrate = 3; + uint32 public constant Evm = 4; + uint32 public constant Bitcoin = 5; + uint32 public constant Solana = 6; } library Web3Networks { - // substrate - uint32 public constant Polkadot = 0; - uint32 public constant Kusama = 1; - uint32 public constant Litentry = 2; - uint32 public constant Litmus = 3; - uint32 public constant LitentryRococo = 4; - uint32 public constant Khala = 5; - uint32 public constant SubstrateTestnet = 6; - - // evm - uint32 public constant Ethereum = 7; - uint32 public constant Bsc = 8; - uint32 public constant Polygon = 14; - uint32 public constant Arbitrum = 15; - uint32 public constant Solana = 16; - uint32 public constant Combo = 17; - - // btc - uint32 public constant BitcoinP2tr = 9; - uint32 public constant BitcoinP2pkh = 10; - uint32 public constant BitcoinP2sh = 11; - uint32 public constant BitcoinP2wpkh = 12; - uint32 public constant BitcoinP2wsh = 13; + // substrate + uint32 public constant Polkadot = 0; + uint32 public constant Kusama = 1; + uint32 public constant Litentry = 2; + uint32 public constant Litmus = 3; + uint32 public constant LitentryRococo = 4; + uint32 public constant Khala = 5; + uint32 public constant SubstrateTestnet = 6; + + // evm + uint32 public constant Ethereum = 7; + uint32 public constant Bsc = 8; + uint32 public constant Polygon = 14; + uint32 public constant Arbitrum = 15; + uint32 public constant Solana = 16; + uint32 public constant Combo = 17; + + // btc + uint32 public constant BitcoinP2tr = 9; + uint32 public constant BitcoinP2pkh = 10; + uint32 public constant BitcoinP2sh = 11; + uint32 public constant BitcoinP2wpkh = 12; + uint32 public constant BitcoinP2wsh = 13; } library Identities { - function from( - uint32 identity_type, - bytes memory value, - uint32[] memory networks - ) internal pure returns (Identity memory) { - return (Identity(identity_type, value, networks)); - } - - function is_web3( - Identity memory identity_type - ) internal pure returns (bool) { - return (is_substrate(identity_type) || - is_evm(identity_type) || - is_bitcoin(identity_type)); - } - - function is_web2( - Identity memory identity_type - ) internal pure returns (bool) { - return (is_twitter(identity_type) || - is_discord(identity_type) || - is_github(identity_type)); - } - - function is_twitter(Identity memory identity) internal pure returns (bool) { - return is_of_type(identity, IdentityTypes.Twitter); - } - - function is_discord(Identity memory identity) internal pure returns (bool) { - return is_of_type(identity, IdentityTypes.Discord); - } - - function is_github(Identity memory identity) internal pure returns (bool) { - return is_of_type(identity, IdentityTypes.Github); - } - - function is_substrate( - Identity memory identity - ) internal pure returns (bool) { - return is_of_type(identity, IdentityTypes.Substrate); - } - - function is_evm(Identity memory identity) internal pure returns (bool) { - return is_of_type(identity, IdentityTypes.Evm); - } - - function is_bitcoin(Identity memory identity) internal pure returns (bool) { - return is_of_type(identity, IdentityTypes.Bitcoin); - } - - function is_solana(Identity memory identity) internal pure returns (bool) { - return is_of_type(identity, IdentityTypes.Solana); - } - - function is_of_type( - Identity memory identity, - uint32 identity_type - ) internal pure returns (bool) { - if (identity.identity_type == identity_type) { - return (true); - } else { - return (false); - } - } - - function has_polkadot_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Polkadot); - } - - function has_kusama_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Kusama); - } - - function has_litentry_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Litentry); - } - - function has_litmus_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Litmus); - } - - function has_litentry_rococo_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.LitentryRococo); - } - - function has_khala_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Khala); - } - - function has_substrate_testnet_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.SubstrateTestnet); - } - - function has_ethereum_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Ethereum); - } - - function has_bsc_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Bsc); - } - - function has_bitcoin_p2tr_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.BitcoinP2tr); - } - - function has_bitcoin_p2pkh_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.BitcoinP2pkh); - } - - function has_bitcoin_p2sh_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.BitcoinP2sh); - } - - function has_bitcoin_p2wpkh_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.BitcoinP2wpkh); - } - - function has_bitcoin_p2wsh_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.BitcoinP2wsh); - } - - function has_polygon_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Polygon); - } - - function has_arbitrum_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Arbitrum); - } - - function has_solana_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Solana); - } - - function has_combo_network( - Identity memory identity_type - ) internal pure returns (bool) { - return has_network(identity_type, Web3Networks.Combo); - } - - function has_network( - Identity memory identity_type, - uint32 network - ) internal pure returns (bool) { - for (uint256 i = 0; i < identity_type.networks.length; i++) { - if (identity_type.networks[i] == network) { - return (true); - } - } - return (false); - } + function from( + uint32 identity_type, + bytes memory value, + uint32[] memory networks + ) internal pure returns (Identity memory) { + return (Identity(identity_type, value, networks)); + } + + function is_web3( + Identity memory identity_type + ) internal pure returns (bool) { + return (is_substrate(identity_type) || + is_evm(identity_type) || + is_bitcoin(identity_type)); + } + + function is_web2( + Identity memory identity_type + ) internal pure returns (bool) { + return (is_twitter(identity_type) || + is_discord(identity_type) || + is_github(identity_type)); + } + + function is_twitter(Identity memory identity) internal pure returns (bool) { + return is_of_type(identity, IdentityTypes.Twitter); + } + + function is_discord(Identity memory identity) internal pure returns (bool) { + return is_of_type(identity, IdentityTypes.Discord); + } + + function is_github(Identity memory identity) internal pure returns (bool) { + return is_of_type(identity, IdentityTypes.Github); + } + + function is_substrate( + Identity memory identity + ) internal pure returns (bool) { + return is_of_type(identity, IdentityTypes.Substrate); + } + + function is_evm(Identity memory identity) internal pure returns (bool) { + return is_of_type(identity, IdentityTypes.Evm); + } + + function is_bitcoin(Identity memory identity) internal pure returns (bool) { + return is_of_type(identity, IdentityTypes.Bitcoin); + } + + function is_solana(Identity memory identity) internal pure returns (bool) { + return is_of_type(identity, IdentityTypes.Solana); + } + + function is_of_type( + Identity memory identity, + uint32 identity_type + ) internal pure returns (bool) { + if (identity.identity_type == identity_type) { + return (true); + } else { + return (false); + } + } + + function has_polkadot_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Polkadot); + } + + function has_kusama_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Kusama); + } + + function has_litentry_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Litentry); + } + + function has_litmus_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Litmus); + } + + function has_litentry_rococo_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.LitentryRococo); + } + + function has_khala_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Khala); + } + + function has_substrate_testnet_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.SubstrateTestnet); + } + + function has_ethereum_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Ethereum); + } + + function has_bsc_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Bsc); + } + + function has_bitcoin_p2tr_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.BitcoinP2tr); + } + + function has_bitcoin_p2pkh_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.BitcoinP2pkh); + } + + function has_bitcoin_p2sh_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.BitcoinP2sh); + } + + function has_bitcoin_p2wpkh_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.BitcoinP2wpkh); + } + + function has_bitcoin_p2wsh_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.BitcoinP2wsh); + } + + function has_polygon_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Polygon); + } + + function has_arbitrum_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Arbitrum); + } + + function has_solana_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Solana); + } + + function has_combo_network( + Identity memory identity_type + ) internal pure returns (bool) { + return has_network(identity_type, Web3Networks.Combo); + } + + function has_network( + Identity memory identity_type, + uint32 network + ) internal pure returns (bool) { + for (uint256 i = 0; i < identity_type.networks.length; i++) { + if (identity_type.networks[i] == network) { + return (true); + } + } + return (false); + } } diff --git a/contracts/libraries/Json.sol b/contracts/libraries/Json.sol new file mode 100644 index 0000000..754d1cd --- /dev/null +++ b/contracts/libraries/Json.sol @@ -0,0 +1,153 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +library Json { + function getString( + string memory json, + string memory pointer + ) internal returns (bool, string memory) { + bool success; + string memory value; + bytes memory encoded_params = abi.encode(json, pointer); + + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x044C, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x1000 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := add(memPtr, 0x40) + mstore(0x40, add(memPtr, 0x1000)) + } + + return (success, value); + } + + function getI64( + string memory json, + string memory pointer + ) internal returns (bool, int64) { + bool success; + int64 value; + + bytes memory encoded_params = abi.encode(json, pointer); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x044D, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x40 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x40)) + } + + return (success, value); + } + + function getBool( + string memory json, + string memory pointer + ) internal returns (bool, bool) { + bool success; + bool value; + + bytes memory encoded_params = abi.encode(json, pointer); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x044E, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x40 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x40)) + } + + return (success, value); + } + + function getArrayLen( + string memory json, + string memory pointer + ) internal returns (bool, int64) { + bool success; + int64 value; + + bytes memory encoded_params = abi.encode(json, pointer); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x044F, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x40 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x40)) + } + + return (success, value); + } +} diff --git a/contracts/libraries/Logging.sol b/contracts/libraries/Logging.sol new file mode 100644 index 0000000..999c1d9 --- /dev/null +++ b/contracts/libraries/Logging.sol @@ -0,0 +1,71 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +enum LoggingLevel { + Debug, + Info, + Warn, + Err, + Fatal +} + +library Logging { + function debug(string memory message) internal { + log(LoggingLevel.Debug, message); + } + + function info(string memory message) internal { + log(LoggingLevel.Info, message); + } + + function warn(string memory message) internal { + log(LoggingLevel.Warn, message); + } + + function fatal(string memory message) internal { + log(LoggingLevel.Fatal, message); + } + + function error(string memory message) internal { + log(LoggingLevel.Err, message); + } + + function log(LoggingLevel level, string memory message) internal { + bytes memory encoded_params = abi.encode(level, message); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x041A, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x40 + ) + ) { + revert(0, 0) + } + } + } +} diff --git a/contracts/libraries/StringShift.sol b/contracts/libraries/StringShift.sol new file mode 100644 index 0000000..dc6e03e --- /dev/null +++ b/contracts/libraries/StringShift.sol @@ -0,0 +1,121 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/Strings.sol"; +import "@openzeppelin/contracts/utils/math/Math.sol"; + +library StringShift { + /** + * @dev Converts a uint256 input to a string and shifts the decimal point to the left by the specified number of places. + * @param value The uint256 parameter to be processed. + * @param decimal The number of decimal places to shift. + * @return The processed string. + */ + function toShiftedString( + uint256 value, + uint256 decimal + ) internal pure returns (string memory) { + // Convert uint256 to string + + if (value == 0) { + return "0"; + } else { + string memory str = Strings.toString(value); + + // Calculate the position to insert the decimal point + uint256 len = bytes(str).length; + uint256 digit = Math.log10(decimal); + + if (len <= digit) { + // If the length is less than or equal to the number of digits, pad with leading zeros and add '0.' + string memory leadingZeros = new string(digit - len); + for (uint256 i = 0; i < digit - len; i++) { + leadingZeros = string(abi.encodePacked("0", leadingZeros)); + } + str = string(abi.encodePacked("0.", leadingZeros, str)); + } else { + // Otherwise, insert the decimal point at the correct position + str = string( + abi.encodePacked( + substring(str, 0, len - digit), + ".", + substring(str, len - digit, len) + ) + ); + } + + // Remove trailing zeros after the decimal point + str = removeTrailingZeros(str); + + return str; + } + } + + /** + * @dev Extracts a substring from a given string. + * @param str The original string. + * @param start The starting position of the original string. + * @param end The ending position of the original string. + * @return The extracted substring. + */ + function substring( + string memory str, + uint256 start, + uint256 end + ) internal pure returns (string memory) { + bytes memory strBytes = bytes(str); + bytes memory result = new bytes(end - start); + for (uint256 i = start; i < end; i++) { + result[i - start] = strBytes[i]; + } + return string(result); + } + + /** + * @dev Removes trailing zeros after the decimal point in a string. + * @param str The input string. + * @return The processed string with trailing zeros removed. + */ + function removeTrailingZeros( + string memory str + ) internal pure returns (string memory) { + bytes memory strBytes = bytes(str); + uint256 len = strBytes.length; + + // Traverse from the end to find the position of the first non-zero character + uint256 newLen = len; + while (newLen > 0 && strBytes[newLen - 1] == "0") { + newLen--; + } + + // If the last character is a decimal point, remove it as well + if (newLen > 0 && strBytes[newLen - 1] == ".") { + newLen--; + } + + // Create a new byte array and copy the content + bytes memory trimmedBytes = new bytes(newLen); + for (uint256 i = 0; i < newLen; i++) { + trimmedBytes[i] = strBytes[i]; + } + + return string(trimmedBytes); + } +} diff --git a/contracts/libraries/Utils.sol b/contracts/libraries/Utils.sol index 42dbbb7..70b8ea7 100644 --- a/contracts/libraries/Utils.sol +++ b/contracts/libraries/Utils.sol @@ -19,157 +19,150 @@ pragma solidity ^0.8.8; library Utils { - function toHex( - bytes memory bytes_value - ) internal returns (bool success, string memory value) { - bytes memory encoded_params = abi.encode(bytes_value); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x041B, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x1000 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := add(memPtr, 0x40) - mstore(0x40, add(memPtr, 0x1000)) - } - - return (success, value); - } - - function identityToString( - uint32 network_type, - bytes memory identity_value - ) internal returns (bool success, string memory value) { - bytes memory encoded_params = abi.encode(network_type, identity_value); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x041C, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x1000 - ) - ) { - revert(0, 0) - } - success := memPtr - value := add(memPtr, 0x40) - mstore(0x40, add(memPtr, 0x1000)) - } - - return (success, value); - } - - function hexToNumber( - string memory string_value - ) internal returns (bool success, uint256 value) { - bytes memory encoded_params = abi.encode(string_value); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x041D, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x82 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := mload(add(memPtr, 0x20)) - mstore(0x40, add(memPtr, 0x82)) - } - - return (success, value); - } - - function parseDecimal( - string memory string_value, - uint8 decimals - ) internal returns (bool success, uint256 value) { - bytes memory encoded_params = abi.encode(string_value, decimals); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x041E, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x82 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := mload(add(memPtr, 0x20)) - mstore(0x40, add(memPtr, 0x82)) - } - - return (success, value); - } - - function parseInt( - string memory string_value - ) internal returns (bool success, uint256 value) { - bytes memory encoded_params = abi.encode(string_value); - uint256 encoded_params_len = encoded_params.length; - - assembly { - let memPtr := mload(0x40) - if iszero( - call( - not(0), - 0x041F, - 0, - add(encoded_params, 0x20), - encoded_params_len, - memPtr, - 0x82 - ) - ) { - revert(0, 0) - } - success := mload(memPtr) - value := mload(add(memPtr, 0x20)) - mstore(0x40, add(memPtr, 0x82)) - } - - return (success, value); - } - - function isStringsEqual( - string memory a, - string memory b - ) internal pure returns (bool) { - return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)); - } + function toHex( + bytes memory bytes_value + ) internal returns (bool success, string memory value) { + bytes memory encoded_params = abi.encode(bytes_value); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x041B, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x1000 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := add(memPtr, 0x40) + mstore(0x40, add(memPtr, 0x1000)) + } + + return (success, value); + } + + function identityToString( + uint32 network_type, + bytes memory identity_value + ) internal returns (bool success, string memory value) { + bytes memory encoded_params = abi.encode(network_type, identity_value); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x041C, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x1000 + ) + ) { + revert(0, 0) + } + success := memPtr + value := add(memPtr, 0x40) + mstore(0x40, add(memPtr, 0x1000)) + } + + return (success, value); + } + + function hexToNumber( + string memory string_value + ) internal returns (bool success, uint256 value) { + bytes memory encoded_params = abi.encode(string_value); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x041D, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x82 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x82)) + } + + return (success, value); + } + + function parseDecimal( + string memory string_value, + uint8 decimals + ) internal returns (bool success, uint256 value) { + bytes memory encoded_params = abi.encode(string_value, decimals); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x041E, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x82 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x82)) + } + + return (success, value); + } + + function parseInt( + string memory string_value + ) internal returns (bool success, uint256 value) { + bytes memory encoded_params = abi.encode(string_value); + uint256 encoded_params_len = encoded_params.length; + + assembly { + let memPtr := mload(0x40) + if iszero( + call( + not(0), + 0x041F, + 0, + add(encoded_params, 0x20), + encoded_params_len, + memPtr, + 0x82 + ) + ) { + revert(0, 0) + } + success := mload(memPtr) + value := mload(add(memPtr, 0x20)) + mstore(0x40, add(memPtr, 0x82)) + } + + return (success, value); + } } diff --git a/contracts/mocks/MockHttpGetI64.sol b/contracts/mocks/MockHttpGetI64.sol new file mode 100644 index 0000000..52994dd --- /dev/null +++ b/contracts/mocks/MockHttpGetI64.sol @@ -0,0 +1,63 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "@openzeppelin/contracts/utils/Strings.sol"; +import { HttpHeader } from "../libraries/Http.sol"; + +import "hardhat/console.sol"; + +contract MockHttpGetI64 { + receive() external payable {} + + fallback() external payable { + (string memory url, string memory jsonPointer, ) = abi.decode( + msg.data, + (string, string, HttpHeader[]) + ); + + bool success = true; + uint256 value = 0; + + if ( + Strings.equal( + url, + "https://blockchain.info/multiaddr?active=bc1pg6qjsrxwg9cvqx0gxstl0t74ynhs2528t7rp0u7acl6etwn5t6vswxrzpa&n=0" + ) + ) { + // 0.1(decimal is 8) + value = 10000000; + } else if ( + Strings.equal( + url, + "https://blockchain.info/multiaddr?active=bc1pqdk57wus42wuh989k3v700n6w584andwg7pvxnrd69ag3rs94cfq40qx2y&n=0" + ) + ) { + value = 0; + } + + console.log("http_get_i64>", url, jsonPointer, value); + + bytes memory encodedResult = abi.encode(success, value); + + assembly { + return(add(encodedResult, 0x20), mload(encodedResult)) + } + } +} diff --git a/contracts/mocks/MockHttpGetString.sol b/contracts/mocks/MockHttpGetString.sol new file mode 100644 index 0000000..dac141d --- /dev/null +++ b/contracts/mocks/MockHttpGetString.sol @@ -0,0 +1,90 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "@openzeppelin/contracts/utils/Strings.sol"; +import { HttpHeader } from "../libraries/Http.sol"; + +import "hardhat/console.sol"; + +contract MockHttpGetString { + receive() external payable {} + + fallback() external payable { + (string memory url, string memory jsonPointer, ) = abi.decode( + msg.data, + (string, string, HttpHeader[]) + ); + + bool success = true; + string memory value = "0"; + + if ( + Strings.equal( + url, + "https://api.geniidata.com/api/1/brc20/balance?tick=ordi&address=1DtMsV2JDUVccDU5V5zdV4mdBf5KRHaJ7Z" + ) + ) { + value = "0.1"; + } else if ( + Strings.equal( + url, + "https://api.geniidata.com/api/1/brc20/balance?tick=ordi&address=17dUgEh3jSnGrNmtMaPrVHvVgjNiqkHHhb" + ) + ) { + value = "1"; + } else if ( + Strings.equal( + url, + "https://api.geniidata.com/api/1/brc20/balance?tick=ordi&address=1BCtecRbWLi1NYzfj9CNszJhCh3c2LXGPd" + ) + ) { + value = "1.1"; + } else if ( + Strings.equal( + url, + "https://api.geniidata.com/api/1/brc20/balance?tick=ordi&address=1MWAjD8eSqHro35WVcWV3N3VGfyzCsiMVM" + ) + ) { + value = "600.1"; + } else if ( + Strings.equal( + url, + "https://api.geniidata.com/api/1/brc20/balance?tick=ordi&address=parse_decimal_fail" + ) + ) { + value = "parse_decimal_fail"; + } else if ( + Strings.equal( + url, + "https://api.geniidata.com/api/1/brc20/balance?tick=ordi&address=httt_get_string_fail" + ) + ) { + success = false; + } + + console.log("http_get_string>>", url, jsonPointer, value); + + bytes memory encodedResult = abi.encode(success, value); + + assembly { + return(add(encodedResult, 0x20), mload(encodedResult)) + } + } +} diff --git a/contracts/mocks/MockIdentityToString.sol b/contracts/mocks/MockIdentityToString.sol new file mode 100644 index 0000000..8f92450 --- /dev/null +++ b/contracts/mocks/MockIdentityToString.sol @@ -0,0 +1,53 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "@openzeppelin/contracts/utils/Strings.sol"; +import "../libraries/Identities.sol"; + +import "hardhat/console.sol"; + +contract MockIdentityToString { + receive() external payable {} + + fallback() external payable { + (uint32 network_type, bytes memory identity_value) = abi.decode( + msg.data, + (uint32, bytes) + ); + console.log( + "identity_to_string>>", + network_type, + string(identity_value) + ); + + bool success = true; + string memory value = string(identity_value); + + if (Strings.equal(value, "identity_to_string_fail")) { + success = false; + } + + bytes memory encodedResult = abi.encode(success, value); + + assembly { + return(add(encodedResult, 0x20), mload(encodedResult)) + } + } +} diff --git a/contracts/mocks/MockParseDecimal.sol b/contracts/mocks/MockParseDecimal.sol new file mode 100644 index 0000000..933b59f --- /dev/null +++ b/contracts/mocks/MockParseDecimal.sol @@ -0,0 +1,56 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "@openzeppelin/contracts/utils/Strings.sol"; +import "hardhat/console.sol"; + +contract MockParseDecimal { + receive() external payable {} + + fallback() external payable { + (string memory stringValue, uint8 decimals) = abi.decode( + msg.data, + (string, uint8) + ); + + bool success = true; + uint256 value = 0; + + if (Strings.equal(stringValue, "0.1") && decimals == 18) { + value = 1 * 10 ** 17; + } else if (Strings.equal(stringValue, "1") && decimals == 18) { + value = 1 * 10 ** 18; + } else if (Strings.equal(stringValue, "1.1") && decimals == 18) { + value = 11 * 10 ** 17; + } else if (Strings.equal(stringValue, "600.1") && decimals == 18) { + value = 6001 * 10 ** 17; + } else if (Strings.equal(stringValue, "parse_decimal_fail")) { + success = false; + } + + console.log("parse_decimal>>", stringValue, decimals, value); + + bytes memory encodedResult = abi.encode(success, value); + + assembly { + return(add(encodedResult, 0x20), mload(encodedResult)) + } + } +} diff --git a/contracts/tests/Get.sol b/contracts/tests/Get.sol new file mode 100644 index 0000000..e9a6f19 --- /dev/null +++ b/contracts/tests/Get.sol @@ -0,0 +1,37 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "../libraries/Http.sol"; + +contract Get { + function callGet(string memory url) public returns (bool, string memory) { + HttpHeader[] memory headers = new HttpHeader[](0); + return Http.Get(url, headers); + } + + function callGetTwiceAndReturnSecondResult( + string memory firstUrl, + string memory secondUrl + ) public returns (bool, string memory) { + HttpHeader[] memory headers = new HttpHeader[](0); + Http.Get(firstUrl, headers); + return Http.Get(secondUrl, headers); + } +} diff --git a/contracts/tests/GetBool.sol b/contracts/tests/GetBool.sol index b43c1d8..04714a5 100644 --- a/contracts/tests/GetBool.sol +++ b/contracts/tests/GetBool.sol @@ -21,23 +21,23 @@ pragma solidity ^0.8.8; import "../libraries/Http.sol"; contract GetI64 { - function callGetBool( - string memory url, - string memory jsonPointer - ) public returns (bool, bool) { - HttpHeader[] memory headers = new HttpHeader[](0); - return Http.GetBool(url, jsonPointer, headers); - } + function callGetBool( + string memory url, + string memory jsonPointer + ) public returns (bool, bool) { + HttpHeader[] memory headers = new HttpHeader[](0); + return Http.GetBool(url, jsonPointer, headers); + } - function callGetBoolTwiceAndReturnSecondResult( - string memory firstUrl, - string memory firstJsonPointer, - string memory secondUrl, - string memory secondJsonPointer - ) public returns (bool, bool) { - HttpHeader[] memory headers = new HttpHeader[](0); - Http.GetBool(firstUrl, firstJsonPointer, headers); - (firstUrl, firstJsonPointer, headers); - return Http.GetBool(secondUrl, secondJsonPointer, headers); - } + function callGetBoolTwiceAndReturnSecondResult( + string memory firstUrl, + string memory firstJsonPointer, + string memory secondUrl, + string memory secondJsonPointer + ) public returns (bool, bool) { + HttpHeader[] memory headers = new HttpHeader[](0); + Http.GetBool(firstUrl, firstJsonPointer, headers); + (firstUrl, firstJsonPointer, headers); + return Http.GetBool(secondUrl, secondJsonPointer, headers); + } } diff --git a/contracts/tests/GetI64.sol b/contracts/tests/GetI64.sol index 70b2243..2d16eb5 100644 --- a/contracts/tests/GetI64.sol +++ b/contracts/tests/GetI64.sol @@ -21,22 +21,22 @@ pragma solidity ^0.8.8; import "../libraries/Http.sol"; contract GetI64 { - function callGetI64( - string memory url, - string memory jsonPointer - ) public returns (bool, int64) { - HttpHeader[] memory headers = new HttpHeader[](0); - return Http.GetI64(url, jsonPointer, headers); - } + function callGetI64( + string memory url, + string memory jsonPointer + ) public returns (bool, int64) { + HttpHeader[] memory headers = new HttpHeader[](0); + return Http.GetI64(url, jsonPointer, headers); + } - function callGetI64TwiceAndReturnSecondResult( - string memory firstUrl, - string memory firstJsonPointer, - string memory secondUrl, - string memory secondJsonPointer - ) public returns (bool, int64) { - HttpHeader[] memory headers = new HttpHeader[](0); - Http.GetI64(firstUrl, firstJsonPointer, headers); - return Http.GetI64(secondUrl, secondJsonPointer, headers); - } + function callGetI64TwiceAndReturnSecondResult( + string memory firstUrl, + string memory firstJsonPointer, + string memory secondUrl, + string memory secondJsonPointer + ) public returns (bool, int64) { + HttpHeader[] memory headers = new HttpHeader[](0); + Http.GetI64(firstUrl, firstJsonPointer, headers); + return Http.GetI64(secondUrl, secondJsonPointer, headers); + } } diff --git a/contracts/tests/GetString.sol b/contracts/tests/GetString.sol index 1abaa59..fc6748b 100644 --- a/contracts/tests/GetString.sol +++ b/contracts/tests/GetString.sol @@ -21,22 +21,22 @@ pragma solidity ^0.8.8; import "../libraries/Http.sol"; contract GetString { - function callGetString( - string memory url, - string memory jsonPointer - ) public returns (bool, string memory) { - HttpHeader[] memory headers = new HttpHeader[](0); - return Http.GetString(url, jsonPointer, headers); - } + function callGetString( + string memory url, + string memory jsonPointer + ) public returns (bool, string memory) { + HttpHeader[] memory headers = new HttpHeader[](0); + return Http.GetString(url, jsonPointer, headers); + } - function callGetStringTwiceAndReturnSecondResult( - string memory firstUrl, - string memory firstJsonPointer, - string memory secondUrl, - string memory secondJsonPointer - ) public returns (bool, string memory) { - HttpHeader[] memory headers = new HttpHeader[](0); - Http.GetI64(firstUrl, firstJsonPointer, headers); - return Http.GetString(secondUrl, secondJsonPointer, headers); - } + function callGetStringTwiceAndReturnSecondResult( + string memory firstUrl, + string memory firstJsonPointer, + string memory secondUrl, + string memory secondJsonPointer + ) public returns (bool, string memory) { + HttpHeader[] memory headers = new HttpHeader[](0); + Http.GetI64(firstUrl, firstJsonPointer, headers); + return Http.GetString(secondUrl, secondJsonPointer, headers); + } } diff --git a/contracts/tests/HexToNumber.sol b/contracts/tests/HexToNumber.sol index 91487cc..c7038bf 100644 --- a/contracts/tests/HexToNumber.sol +++ b/contracts/tests/HexToNumber.sol @@ -21,9 +21,9 @@ pragma solidity ^0.8.8; import "../libraries/Utils.sol"; contract HexToNumber { - function callHexToNumber( - string memory text - ) public returns (bool, uint256) { - return Utils.hexToNumber(text); - } + function callHexToNumber( + string memory text + ) public returns (bool, uint256) { + return Utils.hexToNumber(text); + } } diff --git a/contracts/tests/IdentityToString.sol b/contracts/tests/IdentityToString.sol index aab8874..f934dd8 100644 --- a/contracts/tests/IdentityToString.sol +++ b/contracts/tests/IdentityToString.sol @@ -21,10 +21,10 @@ pragma solidity ^0.8.8; import "../libraries/Utils.sol"; contract IdentityToString { - function callIdentityToString( - uint32 network_type, - bytes memory identity_value - ) public returns (bool, string memory) { - return Utils.identityToString(network_type, identity_value); - } + function callIdentityToString( + uint32 network_type, + bytes memory identity_value + ) public returns (bool, string memory) { + return Utils.identityToString(network_type, identity_value); + } } diff --git a/contracts/tests/JsonTest.sol b/contracts/tests/JsonTest.sol new file mode 100644 index 0000000..259b0b1 --- /dev/null +++ b/contracts/tests/JsonTest.sol @@ -0,0 +1,51 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "../libraries/Json.sol"; + +contract JsonTest { + function callGetString( + string memory json, + string memory pointer + ) public returns (bool, string memory) { + return Json.getString(json, pointer); + } + + function callGetI64( + string memory json, + string memory pointer + ) public returns (bool, int64) { + return Json.getI64(json, pointer); + } + + function callGetBool( + string memory json, + string memory pointer + ) public returns (bool, bool) { + return Json.getBool(json, pointer); + } + + function callGetArrayLen( + string memory json, + string memory pointer + ) public returns (bool, int64) { + return Json.getArrayLen(json, pointer); + } +} diff --git a/contracts/tests/LoggingTest.sol b/contracts/tests/LoggingTest.sol new file mode 100644 index 0000000..0bf8f5e --- /dev/null +++ b/contracts/tests/LoggingTest.sol @@ -0,0 +1,27 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "../libraries/Logging.sol"; + +contract LoggingTest { + function callLogging(uint8 level, string memory message) public { + Logging.log(LoggingLevel(level), message); + } +} diff --git a/contracts/tests/ParseDecimal.sol b/contracts/tests/ParseDecimal.sol index be1d7d0..e741df9 100644 --- a/contracts/tests/ParseDecimal.sol +++ b/contracts/tests/ParseDecimal.sol @@ -21,10 +21,10 @@ pragma solidity ^0.8.8; import "../libraries/Utils.sol"; contract ParseDecimal { - function callParseDecimal( - string memory text, - uint8 decimals - ) public returns (bool, uint256) { - return Utils.parseDecimal(text, decimals); - } + function callParseDecimal( + string memory text, + uint8 decimals + ) public returns (bool, uint256) { + return Utils.parseDecimal(text, decimals); + } } diff --git a/contracts/tests/ParseInt.sol b/contracts/tests/ParseInt.sol index 413c896..bc2dc94 100644 --- a/contracts/tests/ParseInt.sol +++ b/contracts/tests/ParseInt.sol @@ -21,7 +21,7 @@ pragma solidity ^0.8.8; import "../libraries/Utils.sol"; contract ParseInt { - function callParseInt(string memory text) public returns (bool, uint256) { - return Utils.parseInt(text); - } + function callParseInt(string memory text) public returns (bool, uint256) { + return Utils.parseInt(text); + } } diff --git a/contracts/tests/Post.sol b/contracts/tests/Post.sol new file mode 100644 index 0000000..f677698 --- /dev/null +++ b/contracts/tests/Post.sol @@ -0,0 +1,42 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "../libraries/Http.sol"; + +contract Post { + function callPost( + string memory url, + string memory payload + ) public returns (bool, string memory) { + HttpHeader[] memory headers = new HttpHeader[](0); + return Http.Post(url, payload, headers); + } + + function callPostTwiceAndReturnSecondResult( + string memory firstUrl, + string memory firstPayload, + string memory secondUrl, + string memory secondPayload + ) public returns (bool, string memory) { + HttpHeader[] memory headers = new HttpHeader[](0); + Http.Post(firstUrl, firstPayload, headers); + return Http.Post(secondUrl, secondPayload, headers); + } +} diff --git a/contracts/tests/PostBool.sol b/contracts/tests/PostBool.sol index baf8b65..825da42 100644 --- a/contracts/tests/PostBool.sol +++ b/contracts/tests/PostBool.sol @@ -21,26 +21,26 @@ pragma solidity ^0.8.8; import "../libraries/Http.sol"; contract PostBool { - function callPostBool( - string memory url, - string memory jsonPointer, - string memory payload - ) public returns (bool, bool) { - HttpHeader[] memory headers = new HttpHeader[](0); - return Http.PostBool(url, jsonPointer, payload, headers); - } + function callPostBool( + string memory url, + string memory jsonPointer, + string memory payload + ) public returns (bool, bool) { + HttpHeader[] memory headers = new HttpHeader[](0); + return Http.PostBool(url, jsonPointer, payload, headers); + } - function callPostBoolTwiceAndReturnSecondResult( - string memory firstUrl, - string memory firstJsonPointer, - string memory firstPayload, - string memory secondUrl, - string memory secondJsonPointer, - string memory secondPayload - ) public returns (bool, bool) { - HttpHeader[] memory headers = new HttpHeader[](0); - Http.PostBool(firstUrl, firstJsonPointer, firstPayload, headers); - return - Http.PostBool(secondUrl, secondJsonPointer, secondPayload, headers); - } + function callPostBoolTwiceAndReturnSecondResult( + string memory firstUrl, + string memory firstJsonPointer, + string memory firstPayload, + string memory secondUrl, + string memory secondJsonPointer, + string memory secondPayload + ) public returns (bool, bool) { + HttpHeader[] memory headers = new HttpHeader[](0); + Http.PostBool(firstUrl, firstJsonPointer, firstPayload, headers); + return + Http.PostBool(secondUrl, secondJsonPointer, secondPayload, headers); + } } diff --git a/contracts/tests/PostI64.sol b/contracts/tests/PostI64.sol index 2ee6b4f..fcd0012 100644 --- a/contracts/tests/PostI64.sol +++ b/contracts/tests/PostI64.sol @@ -21,26 +21,26 @@ pragma solidity ^0.8.8; import "../libraries/Http.sol"; contract PostI64 { - function callPostI64( - string memory url, - string memory jsonPointer, - string memory payload - ) public returns (bool, int64) { - HttpHeader[] memory headers = new HttpHeader[](0); - return Http.PostI64(url, jsonPointer, payload, headers); - } + function callPostI64( + string memory url, + string memory jsonPointer, + string memory payload + ) public returns (bool, int64) { + HttpHeader[] memory headers = new HttpHeader[](0); + return Http.PostI64(url, jsonPointer, payload, headers); + } - function callPostI64TwiceAndReturnSecondResult( - string memory firstUrl, - string memory firstJsonPointer, - string memory firstPayload, - string memory secondUrl, - string memory secondJsonPointer, - string memory secondPayload - ) public returns (bool, int64) { - HttpHeader[] memory headers = new HttpHeader[](0); - Http.PostI64(firstUrl, firstJsonPointer, firstPayload, headers); - return - Http.PostI64(secondUrl, secondJsonPointer, secondPayload, headers); - } + function callPostI64TwiceAndReturnSecondResult( + string memory firstUrl, + string memory firstJsonPointer, + string memory firstPayload, + string memory secondUrl, + string memory secondJsonPointer, + string memory secondPayload + ) public returns (bool, int64) { + HttpHeader[] memory headers = new HttpHeader[](0); + Http.PostI64(firstUrl, firstJsonPointer, firstPayload, headers); + return + Http.PostI64(secondUrl, secondJsonPointer, secondPayload, headers); + } } diff --git a/contracts/tests/PostString.sol b/contracts/tests/PostString.sol index 7681ac8..195222a 100644 --- a/contracts/tests/PostString.sol +++ b/contracts/tests/PostString.sol @@ -21,31 +21,31 @@ pragma solidity ^0.8.8; import "../libraries/Http.sol"; contract PostString { - function callPostString( - string memory url, - string memory jsonPointer, - string memory payload - ) public returns (bool, string memory) { - HttpHeader[] memory headers = new HttpHeader[](0); - return Http.PostString(url, jsonPointer, payload, headers); - } + function callPostString( + string memory url, + string memory jsonPointer, + string memory payload + ) public returns (bool, string memory) { + HttpHeader[] memory headers = new HttpHeader[](0); + return Http.PostString(url, jsonPointer, payload, headers); + } - function callPostStringTwiceAndReturnSecondResult( - string memory firstUrl, - string memory firstJsonPointer, - string memory firstPayload, - string memory secondUrl, - string memory secondJsonPointer, - string memory secondPayload - ) public returns (bool, string memory) { - HttpHeader[] memory headers = new HttpHeader[](0); - Http.PostString(firstUrl, firstJsonPointer, firstPayload, headers); - return - Http.PostString( - secondUrl, - secondJsonPointer, - secondPayload, - headers - ); - } + function callPostStringTwiceAndReturnSecondResult( + string memory firstUrl, + string memory firstJsonPointer, + string memory firstPayload, + string memory secondUrl, + string memory secondJsonPointer, + string memory secondPayload + ) public returns (bool, string memory) { + HttpHeader[] memory headers = new HttpHeader[](0); + Http.PostString(firstUrl, firstJsonPointer, firstPayload, headers); + return + Http.PostString( + secondUrl, + secondJsonPointer, + secondPayload, + headers + ); + } } diff --git a/contracts/tests/ToHex.sol b/contracts/tests/ToHex.sol index 9ad8e61..63c1c84 100644 --- a/contracts/tests/ToHex.sol +++ b/contracts/tests/ToHex.sol @@ -21,9 +21,9 @@ pragma solidity ^0.8.8; import "../libraries/Utils.sol"; contract ToHex { - function callToHex( - string memory text - ) public returns (bool, string memory) { - return Utils.toHex(bytes(text)); - } + function callToHex( + string memory text + ) public returns (bool, string memory) { + return Utils.toHex(bytes(text)); + } } diff --git a/contracts/token_holding_amount/AchainableClient.sol b/contracts/token_holding_amount/AchainableClient.sol new file mode 100644 index 0000000..49fec0c --- /dev/null +++ b/contracts/token_holding_amount/AchainableClient.sol @@ -0,0 +1,134 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "@openzeppelin/contracts/utils/Strings.sol"; +import "../libraries/Http.sol"; +import "../libraries/Json.sol"; + +struct DisplayItem { + string text; + bool result; +} + +struct Response { + string name; + bool result; + DisplayItem[] display; +} + +library AchainableClient { + function queryHoldingAmount( + string memory url, + string memory key, + string memory account, + string memory chain + ) internal returns (bool success, Response memory) { + HttpHeader[] memory headers = new HttpHeader[](1); + headers[0] = HttpHeader("authorization", key); + + string memory payload = string( + abi.encodePacked( + '{"name": "Balance over {amount}", "address": "', + account, + '", "params": {"chain": "', + chain, + '", "amount": "0"}, "includeMetadata": false }' + ) + ); + + (bool amountSuccess, string memory amountResponse) = Http.Post( + url, + payload, + headers + ); + + if (amountSuccess) { + (bool nameSuccess, string memory name) = Json.getString( + amountResponse, + "/name" + ); + (bool resultSuccess, bool result) = Json.getBool( + amountResponse, + "/result" + ); + + if (!nameSuccess || !resultSuccess) { + return (false, Response("", false, new DisplayItem[](0))); + } + + ( + bool displaysParseSuccess, + DisplayItem[] memory displays + ) = parseDisplayItems(amountResponse); + + if (!displaysParseSuccess) { + return (false, Response("", false, new DisplayItem[](0))); + } else { + return (true, Response(name, result, displays)); + } + } else { + return (false, Response("", false, new DisplayItem[](0))); + } + } + + function parseDisplayItems( + string memory response + ) private returns (bool, DisplayItem[] memory) { + (bool displayLenSuccess, int64 displayLen) = Json.getArrayLen( + response, + "/display" + ); + + if (!displayLenSuccess) { + return (false, new DisplayItem[](0)); + } + + DisplayItem[] memory displays = new DisplayItem[]( + uint256(int256(displayLen)) + ); + + for (uint256 i = 0; i < uint256(int256(displayLen)); i++) { + (bool textSuccess, string memory text) = Json.getString( + response, + string( + abi.encodePacked("/display/", Strings.toString(i), "/text") + ) + ); + + (bool displayResultSuccess, bool displayResult) = Json.getBool( + response, + string( + abi.encodePacked( + "/display/", + Strings.toString(i), + "/result" + ) + ) + ); + + if (!textSuccess || !displayResultSuccess) { + return (false, new DisplayItem[](0)); + } else { + displays[i] = DisplayItem(text, displayResult); + } + } + return (true, displays); + } +} diff --git a/contracts/token_holding_amount/BlockchainInfoClient.sol b/contracts/token_holding_amount/BlockchainInfoClient.sol index 540a9b5..fc6ba04 100644 --- a/contracts/token_holding_amount/BlockchainInfoClient.sol +++ b/contracts/token_holding_amount/BlockchainInfoClient.sol @@ -20,30 +20,52 @@ pragma solidity ^0.8.8; import "../libraries/Http.sol"; import "../libraries/Utils.sol"; +import "../libraries/Identities.sol"; library BlockchainInfoClient { - function getMultiAddress( - string memory url, - string[] memory accounts - ) internal returns (bool, int64) { - string memory activeQueryParam = ""; - - for (uint256 i = 0; i < accounts.length; i++) { - activeQueryParam = string( - abi.encodePacked(activeQueryParam, accounts[i]) - ); - if (i != accounts.length - 1) { - activeQueryParam = string( - abi.encodePacked(activeQueryParam, "|") - ); - } - } - - url = string( - abi.encodePacked(url, "?active=", activeQueryParam, "&n=", "0") - ); - - HttpHeader[] memory headers = new HttpHeader[](0); - return Http.GetI64(url, "/wallet/final_balance", headers); - } + function getMultiAddress( + string[] memory accounts + ) internal returns (bool, int64) { + string memory url = "https://blockchain.info/multiaddr"; + string memory activeQueryParam = ""; + + for (uint256 i = 0; i < accounts.length; i++) { + activeQueryParam = string( + abi.encodePacked(activeQueryParam, accounts[i]) + ); + if (i != accounts.length - 1) { + activeQueryParam = string( + abi.encodePacked(activeQueryParam, "|") + ); + } + } + + url = string( + abi.encodePacked(url, "?active=", activeQueryParam, "&n=", "0") + ); + + HttpHeader[] memory headers = new HttpHeader[](0); + return Http.GetI64(url, "/wallet/final_balance", headers); + } + + function isSupportedNetwork(uint32 network) internal pure returns (bool) { + return + network == Web3Networks.BitcoinP2tr || + network == Web3Networks.BitcoinP2pkh || + network == Web3Networks.BitcoinP2sh || + network == Web3Networks.BitcoinP2wpkh || + network == Web3Networks.BitcoinP2wsh; + } + + function getTokenBalance( + string[] memory accounts + ) internal returns (uint256) { + (bool balanceSuccess, int64 balance) = BlockchainInfoClient + .getMultiAddress(accounts); + if (balanceSuccess) { + return uint256(uint64(balance)); + } else { + return 0; + } + } } diff --git a/contracts/token_holding_amount/Btc.sol b/contracts/token_holding_amount/Btc.sol new file mode 100644 index 0000000..10325c6 --- /dev/null +++ b/contracts/token_holding_amount/Btc.sol @@ -0,0 +1,58 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; +import "./Constants.sol"; +import { BRC20 } from "./brc20/BRC20.sol"; +library Btc { + function getTokenRanges() internal pure returns (uint256[] memory) { + // [0.0, 0.001, 0.1, 0.3, 0.6, 1.0, 2.0, 5.0, 10.0, 15.0, 25.0, 30.0, 40.0, 50.0]; + // all ranges multiplied by decimals_factor(1000). + uint256[] memory ranges = new uint256[](14); + ranges[0] = 0; + ranges[1] = 1; + ranges[2] = 100; + ranges[3] = 300; + ranges[4] = 600; + ranges[5] = 1000; + ranges[6] = 2000; + ranges[7] = 5000; + ranges[8] = 10000; + ranges[9] = 15000; + ranges[10] = 25000; + ranges[11] = 30000; + ranges[12] = 40000; + ranges[13] = 50000; + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + uint32[] memory networks = BRC20.getDefaultTokenNetworks(); + TokenInfo[] memory tokenInfoList = new TokenInfo[](networks.length); + for (uint i = 0; i < networks.length; i++) { + tokenInfoList[i] = TokenInfo( + networks[i], + "", + DataProviderTypes.BlockchainInfoClient, + 8 + ); + } + + return tokenInfoList; + } +} diff --git a/contracts/token_holding_amount/Constants.sol b/contracts/token_holding_amount/Constants.sol index 1d2abea..bd8164a 100644 --- a/contracts/token_holding_amount/Constants.sol +++ b/contracts/token_holding_amount/Constants.sol @@ -18,6 +18,21 @@ pragma solidity ^0.8.8; +struct TokenInfo { + uint32 network; + string tokenAddress; + uint8 dataprovierType; + uint8 decimals; +} + library Constants { - uint256 constant decimals_factor = 1000; + uint256 constant decimals_factor = 1000; +} + +library DataProviderTypes { + uint8 public constant AchainableClient = 0; + uint8 public constant BlockchainInfoClient = 1; + uint8 public constant GeniidataClient = 2; + uint8 public constant MoralisClient = 3; + uint8 public constant NoderealClient = 4; } diff --git a/contracts/token_holding_amount/GeniidataClient.sol b/contracts/token_holding_amount/GeniidataClient.sol index 4b564ed..e25bb9a 100644 --- a/contracts/token_holding_amount/GeniidataClient.sol +++ b/contracts/token_holding_amount/GeniidataClient.sol @@ -19,43 +19,54 @@ pragma solidity ^0.8.8; import "../libraries/Http.sol"; +import "../libraries/Identities.sol"; import "../libraries/Utils.sol"; + library GeniidataClient { - function getTokenBalance( - string[] memory secrets, - string memory url, - string memory identityString, - string memory tokenName, - uint8 tokenDecimals - ) internal returns (uint256) { - string memory encodePackedUrl = string( - abi.encodePacked( - url, - "?tick=", - tokenName, - "&address=", - identityString - ) - ); - HttpHeader[] memory headers = new HttpHeader[](1); - headers[0] = HttpHeader("api-key", secrets[1]); + function getTokenBalance( + string memory secret, + string memory identityString, + string memory tokenName, + uint8 tokenDecimals + ) internal returns (uint256) { + string memory encodePackedUrl = string( + abi.encodePacked( + // test against mock server => "http://localhost:19529/api/1/brc20/balance" + "https://api.geniidata.com/api/1/brc20/balance", + "?tick=", + tokenName, + "&address=", + identityString + ) + ); + HttpHeader[] memory headers = new HttpHeader[](1); + headers[0] = HttpHeader("api-key", secret); + + // https://geniidata.readme.io/reference/get-brc20-tick-list-copy + (bool success, string memory value) = Http.GetString( + encodePackedUrl, + "/data/list/0/available_balance", + headers + ); - // https://geniidata.readme.io/reference/get-brc20-tick-list-copy - (bool success, string memory value) = Http.GetString( - encodePackedUrl, - "/data/list/0/available_balance", - headers - ); + if (success) { + (bool parseDecimalSuccess, uint256 result) = Utils.parseDecimal( + value, + tokenDecimals + ); + if (parseDecimalSuccess) { + return result; + } + } + return 0; + } - if (success) { - (bool parseDecimalSuccess, uint256 result) = Utils.parseDecimal( - value, - tokenDecimals - ); - if (parseDecimalSuccess) { - return result; - } - } - return 0; - } + function isSupportedNetwork(uint32 network) internal pure returns (bool) { + return + network == Web3Networks.BitcoinP2tr || + network == Web3Networks.BitcoinP2pkh || + network == Web3Networks.BitcoinP2sh || + network == Web3Networks.BitcoinP2wpkh || + network == Web3Networks.BitcoinP2wsh; + } } diff --git a/contracts/token_holding_amount/MoralisClient.sol b/contracts/token_holding_amount/MoralisClient.sol new file mode 100644 index 0000000..b54e145 --- /dev/null +++ b/contracts/token_holding_amount/MoralisClient.sol @@ -0,0 +1,274 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "@openzeppelin/contracts/utils/Strings.sol"; +import "../libraries/Http.sol"; +import "../libraries/Json.sol"; +import "../libraries/Identities.sol"; +import "../libraries/Utils.sol"; +struct SolanaTokenBalance { + string mint; + string amount; +} + +struct EvmTokenBalance { + string tokenAddress; + string balance; +} + +library MoralisClient { + function getSolanaNativeBalance( + uint32 network, + string memory apiKey, + string memory account + ) internal returns (bool, string memory) { + string memory url = string( + abi.encodePacked(getNetworkUrl(network), "/", account, "/balance") + ); + + HttpHeader[] memory headers = new HttpHeader[](1); + headers[0] = HttpHeader("X-API-Key", apiKey); + (bool balanceSuccess, string memory balanceResponse) = Http.Get( + url, + headers + ); + if (balanceSuccess) { + (bool solanaSuccess, string memory solana) = Json.getString( + balanceResponse, + "/solana" + ); + if (solanaSuccess) { + return (solanaSuccess, solana); + } else { + return (false, ""); + } + } else { + return (false, ""); + } + } + + function getSolanaTokensBalance( + uint32 network, + string memory apiKey, + string memory account + ) internal returns (bool, SolanaTokenBalance[] memory) { + string memory url = string( + abi.encodePacked(getNetworkUrl(network), "/", account, "/tokens") + ); + HttpHeader[] memory headers = new HttpHeader[](1); + headers[0] = HttpHeader("X-API-Key", apiKey); + (bool tokensSuccess, string memory tokensResponse) = Http.Get( + url, + headers + ); + if (tokensSuccess) { + (bool arrayLenSuccess, int64 arrayLen) = Json.getArrayLen( + tokensResponse, + "" + ); + if (arrayLenSuccess) { + SolanaTokenBalance[] memory balances = new SolanaTokenBalance[]( + uint256(int256(arrayLen)) + ); + for (uint256 i = 0; i < uint256(int256(arrayLen)); i++) { + (bool mintSuccess, string memory mint) = Json.getString( + tokensResponse, + string( + abi.encodePacked("/", Strings.toString(i), "/mint") + ) + ); + (bool amountSuccess, string memory amount) = Json.getString( + tokensResponse, + string( + abi.encodePacked( + "/", + Strings.toString(i), + "/amount" + ) + ) + ); + if (!mintSuccess || !amountSuccess) { + return (false, new SolanaTokenBalance[](0)); + } else { + balances[i] = SolanaTokenBalance(mint, amount); + } + } + return (true, balances); + } else { + return (false, new SolanaTokenBalance[](0)); + } + } else { + return (false, new SolanaTokenBalance[](0)); + } + } + + function getErcTokensBalance( + uint32 network, + string memory apiKey, + string memory account, + string memory chain, + string[] memory tokenAddresses + ) internal returns (bool, EvmTokenBalance[] memory) { + string memory url = string( + abi.encodePacked( + getNetworkUrl(network), + "/", + account, + "/erc20", + "?chain=", + chain + ) + ); + HttpHeader[] memory headers = new HttpHeader[](1); + headers[0] = HttpHeader("X-API-Key", apiKey); + if (tokenAddresses.length > 0) { + url = string(abi.encodePacked(url, "&")); + } + for (uint256 i = 0; i < tokenAddresses.length; i++) { + url = string( + abi.encodePacked( + url, + "token_addresses[", + Strings.toString(i), + "]=", + tokenAddresses[i] + ) + ); + if (i != tokenAddresses.length - 1) { + url = string(abi.encodePacked(url, "&")); + } + } + (bool tokensSuccess, string memory tokensResponse) = Http.Get( + url, + headers + ); + if (tokensSuccess) { + (bool arrayLenSuccess, int64 arrayLen) = Json.getArrayLen( + tokensResponse, + "" + ); + if (arrayLenSuccess) { + EvmTokenBalance[] memory balances = new EvmTokenBalance[]( + uint256(int256(arrayLen)) + ); + for (uint256 i = 0; i < uint256(int256(arrayLen)); i++) { + ( + bool tokenAddressSuccess, + string memory tokenAddress + ) = Json.getString( + tokensResponse, + string( + abi.encodePacked( + "/", + Strings.toString(i), + "/token_address" + ) + ) + ); + (bool balanceSuccess, string memory balance) = Json + .getString( + tokensResponse, + string( + abi.encodePacked( + "/", + Strings.toString(i), + "/balance" + ) + ) + ); + if (!tokenAddressSuccess || !balanceSuccess) { + return (false, new EvmTokenBalance[](0)); + } else { + balances[i] = EvmTokenBalance(tokenAddress, balance); + } + } + return (true, balances); + } else { + return (false, new EvmTokenBalance[](0)); + } + } else { + return (false, new EvmTokenBalance[](0)); + } + } + function isSupportedNetwork(uint32 network) internal pure returns (bool) { + return network == Web3Networks.Solana; + } + + function getNetworkUrl( + uint32 network + ) internal pure returns (string memory url) { + if (network == Web3Networks.Solana) { + url = "https://solana-gateway.moralis.io/account/mainnet"; + } else if (network == Web3Networks.Ethereum) { + url = "https://deep-index.moralis.io/api/v2.2"; + } + } + + function getTokenBalance( + uint32 network, + string memory apiKey, + string memory account, + string memory tokenContractAddress, + uint8 tokenDecimals + ) internal returns (uint256) { + if (Strings.equal(tokenContractAddress, "Native Token")) { + (bool success, string memory solanaTokenBalance) = MoralisClient + .getSolanaNativeBalance(network, apiKey, account); + + if (success) { + (bool parsedStatus, uint256 parsedAmount) = Utils.parseDecimal( + solanaTokenBalance, + tokenDecimals + ); + if (parsedStatus) { + return parsedAmount; + } + return 0; + } + } else { + ( + bool success, + SolanaTokenBalance[] memory solanaTokenBalance + ) = MoralisClient.getSolanaTokensBalance(network, apiKey, account); + + if (success) { + for (uint i = 0; i < solanaTokenBalance.length; i++) { + if ( + Strings.equal( + solanaTokenBalance[i].mint, + tokenContractAddress + ) + ) { + (bool parsedStatus, uint256 parsedAmount) = Utils + .parseDecimal( + solanaTokenBalance[i].amount, + tokenDecimals + ); + if (parsedStatus) { + return parsedAmount; + } + return 0; + } + } + } + } + return 0; + } +} diff --git a/contracts/token_holding_amount/NoderealClient.sol b/contracts/token_holding_amount/NoderealClient.sol index c1efb6c..821946e 100644 --- a/contracts/token_holding_amount/NoderealClient.sol +++ b/contracts/token_holding_amount/NoderealClient.sol @@ -18,57 +18,71 @@ pragma solidity ^0.8.8; +import "@openzeppelin/contracts/utils/Strings.sol"; import "../libraries/Http.sol"; +import "../libraries/Identities.sol"; import "../libraries/Utils.sol"; library NoderealClient { - function getTokenBalance( - string memory url, - string[] memory secrets, - string memory tokenContractAddress, - string memory account - ) internal returns (bool, uint256) { - HttpHeader[] memory headers = new HttpHeader[](0); - string memory request; + function getTokenBalance( + uint32 network, + string memory secret, + string memory tokenContractAddress, + string memory account + ) internal returns (bool, uint256) { + HttpHeader[] memory headers = new HttpHeader[](0); + string memory request; - string memory encodePackedUrl = string( - abi.encodePacked(url, secrets[0]) - ); - if ( - keccak256(bytes(tokenContractAddress)) == keccak256("Native Token") - ) { - // Use eth_getBalance method - request = string( - abi.encodePacked( - '{"jsonrpc": "2.0", "method": "eth_getBalance", "id": 1, "params": ["', - account, - '", "latest"]}' - ) - ); - } else if (bytes(tokenContractAddress).length == 42) { - // Use nr_getTokenBalance20 method - request = string( - abi.encodePacked( - '{"jsonrpc": "2.0", "method": "nr_getTokenBalance20", "id": 1, "params": ["', - tokenContractAddress, - '","', - account, - '", "latest"]}' - ) - ); - } else { - return (false, 0); - } - (bool result, string memory balance) = Http.PostString( - encodePackedUrl, - "/result", - request, - headers - ); - if (result) { - return Utils.hexToNumber(balance); - } else { - return (false, 0); - } - } + string memory encodePackedUrl = string( + abi.encodePacked(getNetworkUrl(network), secret) + ); + if (Strings.equal(tokenContractAddress, "Native Token")) { + // Use eth_getBalance method + request = string( + abi.encodePacked( + '{"jsonrpc": "2.0", "method": "eth_getBalance", "id": 1, "params": ["', + account, + '", "latest"]}' + ) + ); + } else if (bytes(tokenContractAddress).length == 42) { + // Use nr_getTokenBalance20 method + request = string( + abi.encodePacked( + '{"jsonrpc": "2.0", "method": "nr_getTokenBalance20", "id": 1, "params": ["', + tokenContractAddress, + '","', + account, + '", "latest"]}' + ) + ); + } else { + return (false, 0); + } + (bool result, string memory balance) = Http.PostString( + encodePackedUrl, + "/result", + request, + headers + ); + if (result) { + return Utils.hexToNumber(balance); + } else { + return (false, 0); + } + } + + function isSupportedNetwork(uint32 network) internal pure returns (bool) { + return network == Web3Networks.Bsc || network == Web3Networks.Ethereum; + } + + function getNetworkUrl( + uint32 network + ) internal pure returns (string memory url) { + if (network == Web3Networks.Bsc) { + url = "https://bsc-mainnet.nodereal.io/v1/"; + } else if (network == Web3Networks.Ethereum) { + url = "https://eth-mainnet.nodereal.io/v1/"; + } + } } diff --git a/contracts/token_holding_amount/TokenHoldingAmount.sol b/contracts/token_holding_amount/TokenHoldingAmount.sol index c310542..0369cd2 100644 --- a/contracts/token_holding_amount/TokenHoldingAmount.sol +++ b/contracts/token_holding_amount/TokenHoldingAmount.sol @@ -18,173 +18,174 @@ pragma solidity ^0.8.8; -// import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.9.0/contracts/utils/Strings.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; import "../libraries/AssertionLogic.sol"; import "../libraries/Identities.sol"; import "../DynamicAssertion.sol"; import "./Constants.sol"; +import "../libraries/StringShift.sol"; + abstract contract TokenHoldingAmount is DynamicAssertion { - mapping(string => string) internal tokenNames; - mapping(string => uint256[]) internal tokenRanges; - function execute( - Identity[] memory identities, - string[] memory secrets, - bytes memory params - ) - public - override - returns ( - string memory, - string memory, - string[] memory, - string memory, - bool - ) - { - string - memory description = "The amount of a particular token you are holding"; - string memory assertion_type = "Token Holding Amount"; - schema_url = "https://raw.githubusercontent.com/litentry/vc-jsonschema/main/dist/schemas/25-token-holding-amount/1-1-0.json"; - - string memory tokenLowercaseName = abi.decode(params, (string)); - - if ( - keccak256(abi.encodePacked(tokenNames[tokenLowercaseName])) == - keccak256(abi.encodePacked("")) - ) { - revert("Token not supported or not found"); - } - - uint256 balance = queryTotalBalance( - identities, - secrets, - tokenNames[tokenLowercaseName] - ); - - (uint256 index, uint256 min, int256 max) = calculateRange( - balance, - tokenRanges[tokenLowercaseName] - ); - - string[] memory assertions = assembleAssertions( - min, - max, - tokenNames[tokenLowercaseName] - ); - - bool result = index > 0 || balance > 0; - - return (description, assertion_type, assertions, schema_url, result); - } - - function queryTotalBalance( - Identity[] memory identities, - string[] memory secrets, - string memory tokenName - ) internal virtual returns (uint256) { - uint256 total_balance = 0; - uint256 identitiesLength = identities.length; - - for (uint256 i = 0; i < identitiesLength; i++) { - Identity memory identity = identities[i]; - uint256 networksLength = identity.networks.length; - for (uint32 j = 0; j < networksLength; j++) { - uint32 network = identity.networks[j]; - if (isSupportedNetwork(network)) { - total_balance += queryBalance( - identity, - network, - secrets, - tokenName - ); - } - } - } - - return total_balance; - } - - function calculateRange( - uint256 balance, - uint256[] memory ranges - ) private pure returns (uint256, uint256, int256) { - uint256 index = ranges.length - 1; - uint256 min = 0; - int256 max = 0; - - for (uint32 i = 1; i < ranges.length; i++) { - if ( - balance * Constants.decimals_factor < - ranges[i] * 10 ** getTokenDecimals() - ) { - index = i - 1; - break; - } - } - - if (index == ranges.length - 1) { - min = ranges[index]; - max = -1; - } else { - min = ranges[index]; - max = int256(ranges[index + 1]); - } - - return (index, min, max); - } - - function assembleAssertions( - uint256 min, - int256 max, - string memory tokenName - ) private pure returns (string[] memory) { - string memory variable = "$holding_amount"; - AssertionLogic.CompositeCondition memory cc = AssertionLogic - .CompositeCondition( - new AssertionLogic.Condition[](max > 0 ? 3 : 2), - true - ); - AssertionLogic.andOp( - cc, - 0, - "$token", - AssertionLogic.Op.Equal, - tokenName - ); - AssertionLogic.andOp( - cc, - 1, - variable, - AssertionLogic.Op.GreaterEq, - Strings.toString(min / Constants.decimals_factor) - ); - if (max > 0) { - AssertionLogic.andOp( - cc, - 2, - variable, - AssertionLogic.Op.LessThan, - Strings.toString(uint256(max) / Constants.decimals_factor) - ); - } - - string[] memory assertions = new string[](1); - assertions[0] = AssertionLogic.toString(cc); - - return assertions; - } - - function getTokenDecimals() internal pure virtual returns (uint8); - - function isSupportedNetwork( - uint32 network - ) internal pure virtual returns (bool); - - function queryBalance( - Identity memory identity, - uint32 network, - string[] memory secrets, - string memory tokenName - ) internal virtual returns (uint256); + mapping(string => uint256[]) internal tokenRanges; + function execute( + Identity[] memory identities, + string[] memory secrets, + bytes memory params + ) + public + override + returns ( + string memory, + string memory, + string[] memory, + string memory, + bool + ) + { + string + memory description = "The amount of a particular token you are holding"; + string memory assertion_type = "Token Holding Amount"; + schema_url = "https://raw.githubusercontent.com/litentry/vc-jsonschema/main/dist/schemas/25-token-holding-amount/1-1-3.json"; + + string memory tokenLowercaseName = abi.decode(params, (string)); + + require( + tokenRanges[tokenLowercaseName].length > 0, + "Token not supported or not found" + ); + + uint256 balance = queryTotalBalance( + identities, + secrets, + tokenLowercaseName + ); + + (uint256 index, uint256 min, int256 max) = calculateRange( + balance, + tokenRanges[tokenLowercaseName] + ); + + string[] memory assertions = assembleAssertions( + min, + max, + tokenLowercaseName + ); + + bool result = index > 0 || balance > 0; + + return (description, assertion_type, assertions, schema_url, result); + } + + function queryTotalBalance( + Identity[] memory identities, + string[] memory secrets, + string memory tokenName + ) internal virtual returns (uint256) { + uint256 total_balance = 0; + uint256 identitiesLength = identities.length; + + for (uint256 i = 0; i < identitiesLength; i++) { + Identity memory identity = identities[i]; + uint256 networksLength = identity.networks.length; + for (uint32 j = 0; j < networksLength; j++) { + uint32 network = identity.networks[j]; + if (isSupportedNetwork(tokenName, network)) { + total_balance += queryBalance( + identity, + network, + secrets, + tokenName + ); + } + } + } + + return total_balance; + } + + function calculateRange( + uint256 balance, + uint256[] memory ranges + ) private view returns (uint256, uint256, int256) { + uint256 index = ranges.length - 1; + uint256 min = 0; + int256 max = 0; + + for (uint32 i = 1; i < ranges.length; i++) { + if ( + balance * Constants.decimals_factor < + ranges[i] * 10 ** getTokenDecimals() + ) { + index = i - 1; + break; + } + } + + if (index == ranges.length - 1) { + min = ranges[index]; + max = -1; + } else { + min = ranges[index]; + max = int256(ranges[index + 1]); + } + return (index, min, max); + } + + function assembleAssertions( + uint256 min, + int256 max, + string memory tokenName + ) private pure returns (string[] memory) { + string memory variable = "$holding_amount"; + AssertionLogic.CompositeCondition memory cc = AssertionLogic + .CompositeCondition( + new AssertionLogic.Condition[](max > 0 ? 3 : 2), + true + ); + AssertionLogic.andOp( + cc, + 0, + "$token", + AssertionLogic.Op.Equal, + tokenName + ); + AssertionLogic.andOp( + cc, + 1, + variable, + AssertionLogic.Op.GreaterEq, + StringShift.toShiftedString(min, Constants.decimals_factor) + ); + if (max > 0) { + AssertionLogic.andOp( + cc, + 2, + variable, + AssertionLogic.Op.LessThan, + StringShift.toShiftedString( + uint256(max), + Constants.decimals_factor + ) + ); + } + + string[] memory assertions = new string[](1); + assertions[0] = AssertionLogic.toString(cc); + + return assertions; + } + + function getTokenDecimals() internal view virtual returns (uint8); + + function isSupportedNetwork( + string memory tokenName, + uint32 network + ) internal view virtual returns (bool); + + function queryBalance( + Identity memory identity, + uint32 network, + string[] memory secrets, + string memory tokenName + ) internal virtual returns (uint256); } diff --git a/contracts/token_holding_amount/TokenMapping.sol b/contracts/token_holding_amount/TokenMapping.sol index dfce614..4dc19bb 100644 --- a/contracts/token_holding_amount/TokenMapping.sol +++ b/contracts/token_holding_amount/TokenMapping.sol @@ -29,6 +29,7 @@ import { Mmss } from "./brc20/Mmss.sol"; import { Ordi } from "./brc20/Ordi.sol"; import { Rats } from "./brc20/Rats.sol"; import { Sats } from "./brc20/Sats.sol"; +import { BRC20 } from "./brc20/BRC20.sol"; // erc20 import { Ada } from "./erc20/Ada.sol"; @@ -70,355 +71,285 @@ import { Usdt } from "./erc20/Usdt.sol"; import { Wbtc } from "./erc20//Wbtc.sol"; import { Cvx } from "./erc20/Cvx.sol"; import { Usdd } from "./erc20/Usdd.sol"; + +// btc +import { Btc } from "./Btc.sol"; contract TokenMapping is TokenQueryLogic { - constructor() { - // btcs - tokenNames["btcs"] = Btcs.getTokenName(); - tokenRanges["btcs"] = Btcs.getTokenRanges(); - tokenNetworks["btcs"] = Btcs.getTokenNetworks(); - - // cats - tokenNames["cats"] = Cats.getTokenName(); - tokenRanges["cats"] = Cats.getTokenRanges(); - tokenNetworks["cats"] = Cats.getTokenNetworks(); - - // long - tokenNames["long"] = Long.getTokenName(); - tokenRanges["long"] = Long.getTokenRanges(); - tokenNetworks["long"] = Long.getTokenNetworks(); - - // long - tokenNames["mmss"] = Mmss.getTokenName(); - tokenRanges["mmss"] = Mmss.getTokenRanges(); - tokenNetworks["mmss"] = Mmss.getTokenNetworks(); - - // ordi - tokenNames["ordi"] = Ordi.getTokenName(); - tokenRanges["ordi"] = Ordi.getTokenRanges(); - tokenNetworks["ordi"] = Ordi.getTokenNetworks(); - - // rats - tokenNames["rats"] = Rats.getTokenName(); - tokenRanges["rats"] = Rats.getTokenRanges(); - tokenNetworks["rats"] = Rats.getTokenNetworks(); - - // sats - tokenNames["sats"] = Sats.getTokenName(); - tokenRanges["sats"] = Sats.getTokenRanges(); - tokenNetworks["sats"] = Sats.getTokenNetworks(); - - // ada - tokenNames["ada"] = Ada.getTokenName(); - tokenRanges["ada"] = Ada.getTokenRanges(); - tokenNetworks["ada"] = Ada.getTokenNetworks(); - tokenAddresses["ada"][Web3Networks.Bsc] = Ada.getTokenBscAddress(); - tokenAddresses["ada"][Web3Networks.Ethereum] = Ada - .getTokenEthereumAddress(); - - // amp - tokenNames["amp"] = Amp.getTokenName(); - tokenRanges["amp"] = Amp.getTokenRanges(); - tokenNetworks["amp"] = Amp.getTokenNetworks(); - tokenAddresses["amp"][Web3Networks.Bsc] = Amp.getTokenBscAddress(); - tokenAddresses["amp"][Web3Networks.Ethereum] = Amp - .getTokenEthereumAddress(); - - // atom - tokenNames["atom"] = Atom.getTokenName(); - tokenRanges["atom"] = Atom.getTokenRanges(); - tokenNetworks["atom"] = Atom.getTokenNetworks(); - tokenAddresses["atom"][Web3Networks.Bsc] = Atom.getTokenBscAddress(); - tokenAddresses["atom"][Web3Networks.Ethereum] = Atom - .getTokenEthereumAddress(); - - // bch - tokenNames["bch"] = Bch.getTokenName(); - tokenRanges["bch"] = Bch.getTokenRanges(); - tokenNetworks["bch"] = Bch.getTokenNetworks(); - tokenAddresses["bch"][Web3Networks.Bsc] = Bch.getTokenBscAddress(); - tokenAddresses["bch"][Web3Networks.Ethereum] = Bch - .getTokenEthereumAddress(); - - // bean - tokenNames["bean"] = Bean.getTokenName(); - tokenRanges["bean"] = Bean.getTokenRanges(); - tokenNetworks["bean"] = Bean.getTokenNetworks(); - tokenAddresses["bean"][Web3Networks.Bsc] = Bean.getTokenBscAddress(); - tokenAddresses["bean"][Web3Networks.Ethereum] = Bean - .getTokenEthereumAddress(); - - // bnb - tokenNames["bnb"] = Bnb.getTokenName(); - tokenRanges["bnb"] = Bnb.getTokenRanges(); - tokenNetworks["bnb"] = Bnb.getTokenNetworks(); - tokenAddresses["bnb"][Web3Networks.Bsc] = Bnb.getTokenBscAddress(); - tokenAddresses["bnb"][Web3Networks.Ethereum] = Bnb - .getTokenEthereumAddress(); - - // comp - tokenNames["comp"] = Comp.getTokenName(); - tokenRanges["comp"] = Comp.getTokenRanges(); - tokenNetworks["comp"] = Comp.getTokenNetworks(); - tokenAddresses["comp"][Web3Networks.Bsc] = Comp.getTokenBscAddress(); - tokenAddresses["comp"][Web3Networks.Ethereum] = Comp - .getTokenEthereumAddress(); - - // cro - tokenNames["cro"] = Cro.getTokenName(); - tokenRanges["cro"] = Cro.getTokenRanges(); - tokenNetworks["cro"] = Cro.getTokenNetworks(); - tokenAddresses["cro"][Web3Networks.Bsc] = Cro.getTokenBscAddress(); - tokenAddresses["cro"][Web3Networks.Ethereum] = Cro - .getTokenEthereumAddress(); - - // crv - tokenNames["crv"] = Crv.getTokenName(); - tokenRanges["crv"] = Crv.getTokenRanges(); - tokenNetworks["crv"] = Crv.getTokenNetworks(); - tokenAddresses["crv"][Web3Networks.Bsc] = Crv.getTokenBscAddress(); - tokenAddresses["crv"][Web3Networks.Ethereum] = Crv - .getTokenEthereumAddress(); - - // cvx - tokenNames["cvx"] = Cvx.getTokenName(); - tokenRanges["cvx"] = Cvx.getTokenRanges(); - tokenNetworks["cvx"] = Cvx.getTokenNetworks(); - tokenAddresses["cvx"][Web3Networks.Bsc] = Cvx.getTokenBscAddress(); - tokenAddresses["cvx"][Web3Networks.Ethereum] = Cvx - .getTokenEthereumAddress(); - - // dai - tokenNames["dai"] = Dai.getTokenName(); - tokenRanges["dai"] = Dai.getTokenRanges(); - tokenNetworks["dai"] = Dai.getTokenNetworks(); - tokenAddresses["dai"][Web3Networks.Bsc] = Dai.getTokenBscAddress(); - tokenAddresses["dai"][Web3Networks.Ethereum] = Dai - .getTokenEthereumAddress(); - - // doge - tokenNames["doge"] = Doge.getTokenName(); - tokenRanges["doge"] = Doge.getTokenRanges(); - tokenNetworks["doge"] = Doge.getTokenNetworks(); - tokenAddresses["doge"][Web3Networks.Bsc] = Doge.getTokenBscAddress(); - tokenAddresses["doge"][Web3Networks.Ethereum] = Doge - .getTokenEthereumAddress(); - - // dydx - tokenNames["dydx"] = Dydx.getTokenName(); - tokenRanges["dydx"] = Dydx.getTokenRanges(); - tokenNetworks["dydx"] = Dydx.getTokenNetworks(); - tokenAddresses["dydx"][Web3Networks.Bsc] = Dydx.getTokenBscAddress(); - tokenAddresses["dydx"][Web3Networks.Ethereum] = Dydx - .getTokenEthereumAddress(); - - // etc - tokenNames["etc"] = Etc.getTokenName(); - tokenRanges["etc"] = Etc.getTokenRanges(); - tokenNetworks["etc"] = Etc.getTokenNetworks(); - tokenAddresses["etc"][Web3Networks.Bsc] = Etc.getTokenBscAddress(); - tokenAddresses["etc"][Web3Networks.Ethereum] = Etc - .getTokenEthereumAddress(); - - // eth - tokenNames["eth"] = Eth.getTokenName(); - tokenRanges["eth"] = Eth.getTokenRanges(); - tokenNetworks["eth"] = Eth.getTokenNetworks(); - tokenAddresses["eth"][Web3Networks.Bsc] = Eth.getTokenBscAddress(); - tokenAddresses["eth"][Web3Networks.Ethereum] = Eth - .getTokenEthereumAddress(); - - // fil - tokenNames["fil"] = Fil.getTokenName(); - tokenRanges["fil"] = Fil.getTokenRanges(); - tokenNetworks["fil"] = Fil.getTokenNetworks(); - tokenAddresses["fil"][Web3Networks.Bsc] = Fil.getTokenBscAddress(); - tokenAddresses["fil"][Web3Networks.Ethereum] = Fil - .getTokenEthereumAddress(); - - // grt - tokenNames["grt"] = Grt.getTokenName(); - tokenRanges["grt"] = Grt.getTokenRanges(); - tokenNetworks["grt"] = Grt.getTokenNetworks(); - tokenAddresses["grt"][Web3Networks.Bsc] = Grt.getTokenBscAddress(); - tokenAddresses["grt"][Web3Networks.Ethereum] = Grt - .getTokenEthereumAddress(); - - // gtc - tokenNames["gtc"] = Gtc.getTokenName(); - tokenRanges["gtc"] = Gtc.getTokenRanges(); - tokenNetworks["gtc"] = Gtc.getTokenNetworks(); - tokenAddresses["gtc"][Web3Networks.Bsc] = Gtc.getTokenBscAddress(); - tokenAddresses["gtc"][Web3Networks.Ethereum] = Gtc - .getTokenEthereumAddress(); - - // gusd - tokenNames["gusd"] = Gusd.getTokenName(); - tokenRanges["gusd"] = Gusd.getTokenRanges(); - tokenNetworks["gusd"] = Gusd.getTokenNetworks(); - tokenAddresses["gusd"][Web3Networks.Bsc] = Gusd.getTokenBscAddress(); - tokenAddresses["gusd"][Web3Networks.Ethereum] = Gusd - .getTokenEthereumAddress(); - - // imx - tokenNames["imx"] = Imx.getTokenName(); - tokenRanges["imx"] = Imx.getTokenRanges(); - tokenNetworks["imx"] = Imx.getTokenNetworks(); - tokenAddresses["imx"][Web3Networks.Bsc] = Imx.getTokenBscAddress(); - tokenAddresses["imx"][Web3Networks.Ethereum] = Imx - .getTokenEthereumAddress(); - - // inj - tokenNames["inj"] = Inj.getTokenName(); - tokenRanges["inj"] = Inj.getTokenRanges(); - tokenNetworks["inj"] = Inj.getTokenNetworks(); - tokenAddresses["inj"][Web3Networks.Bsc] = Inj.getTokenBscAddress(); - tokenAddresses["inj"][Web3Networks.Ethereum] = Inj - .getTokenEthereumAddress(); - - // leo - tokenNames["leo"] = Leo.getTokenName(); - tokenRanges["leo"] = Leo.getTokenRanges(); - tokenNetworks["leo"] = Leo.getTokenNetworks(); - tokenAddresses["leo"][Web3Networks.Bsc] = Leo.getTokenBscAddress(); - tokenAddresses["leo"][Web3Networks.Ethereum] = Leo - .getTokenEthereumAddress(); - - // link - tokenNames["link"] = Link.getTokenName(); - tokenRanges["link"] = Link.getTokenRanges(); - tokenNetworks["link"] = Link.getTokenNetworks(); - tokenAddresses["link"][Web3Networks.Bsc] = Link.getTokenBscAddress(); - tokenAddresses["link"][Web3Networks.Ethereum] = Link - .getTokenEthereumAddress(); - - // lit - tokenNames["lit"] = Lit.getTokenName(); - tokenRanges["lit"] = Lit.getTokenRanges(); - tokenNetworks["lit"] = Lit.getTokenNetworks(); - tokenAddresses["lit"][Web3Networks.Bsc] = Lit.getTokenBscAddress(); - tokenAddresses["lit"][Web3Networks.Ethereum] = Lit - .getTokenEthereumAddress(); - - // matic - tokenNames["matic"] = Matic.getTokenName(); - tokenRanges["matic"] = Matic.getTokenRanges(); - tokenNetworks["matic"] = Matic.getTokenNetworks(); - tokenAddresses["matic"][Web3Networks.Bsc] = Matic.getTokenBscAddress(); - tokenAddresses["matic"][Web3Networks.Ethereum] = Matic - .getTokenEthereumAddress(); - - // mcrt - tokenNames["mcrt"] = Mcrt.getTokenName(); - tokenRanges["mcrt"] = Mcrt.getTokenRanges(); - tokenNetworks["mcrt"] = Mcrt.getTokenNetworks(); - tokenAddresses["mcrt"][Web3Networks.Bsc] = Mcrt.getTokenBscAddress(); - tokenAddresses["mcrt"][Web3Networks.Ethereum] = Mcrt - .getTokenEthereumAddress(); - - // nfp - tokenNames["nfp"] = Nfp.getTokenName(); - tokenRanges["nfp"] = Nfp.getTokenRanges(); - tokenNetworks["nfp"] = Nfp.getTokenNetworks(); - tokenAddresses["nfp"][Web3Networks.Bsc] = Nfp.getTokenBscAddress(); - tokenAddresses["nfp"][Web3Networks.Ethereum] = Nfp - .getTokenEthereumAddress(); - - // people - tokenNames["people"] = People.getTokenName(); - tokenRanges["people"] = People.getTokenRanges(); - tokenNetworks["people"] = People.getTokenNetworks(); - tokenAddresses["people"][Web3Networks.Bsc] = People - .getTokenBscAddress(); - tokenAddresses["people"][Web3Networks.Ethereum] = People - .getTokenEthereumAddress(); - - // shib - tokenNames["shib"] = Shib.getTokenName(); - tokenRanges["shib"] = Shib.getTokenRanges(); - tokenNetworks["shib"] = Shib.getTokenNetworks(); - tokenAddresses["shib"][Web3Networks.Bsc] = Shib.getTokenBscAddress(); - tokenAddresses["shib"][Web3Networks.Ethereum] = Shib - .getTokenEthereumAddress(); - - // sol - tokenNames["sol"] = Sol.getTokenName(); - tokenRanges["sol"] = Sol.getTokenRanges(); - tokenNetworks["sol"] = Sol.getTokenNetworks(); - tokenAddresses["sol"][Web3Networks.Bsc] = Sol.getTokenBscAddress(); - tokenAddresses["sol"][Web3Networks.Ethereum] = Sol - .getTokenEthereumAddress(); - - // spaceid - tokenNames["spaceid"] = SpaceId.getTokenName(); - tokenRanges["spaceid"] = SpaceId.getTokenRanges(); - tokenNetworks["spaceid"] = SpaceId.getTokenNetworks(); - tokenAddresses["spaceid"][Web3Networks.Bsc] = SpaceId - .getTokenBscAddress(); - tokenAddresses["spaceid"][Web3Networks.Ethereum] = SpaceId - .getTokenEthereumAddress(); - - // ton - tokenNames["ton"] = Ton.getTokenName(); - tokenRanges["ton"] = Ton.getTokenRanges(); - tokenNetworks["ton"] = Ton.getTokenNetworks(); - tokenAddresses["ton"][Web3Networks.Bsc] = Ton.getTokenBscAddress(); - tokenAddresses["ton"][Web3Networks.Ethereum] = Ton - .getTokenEthereumAddress(); - - // trx - tokenNames["trx"] = Trx.getTokenName(); - tokenRanges["trx"] = Trx.getTokenRanges(); - tokenNetworks["trx"] = Trx.getTokenNetworks(); - tokenAddresses["trx"][Web3Networks.Bsc] = Trx.getTokenBscAddress(); - tokenAddresses["trx"][Web3Networks.Ethereum] = Trx - .getTokenEthereumAddress(); - - // tusd - tokenNames["tusd"] = Tusd.getTokenName(); - tokenRanges["tusd"] = Tusd.getTokenRanges(); - tokenNetworks["tusd"] = Tusd.getTokenNetworks(); - tokenAddresses["tusd"][Web3Networks.Bsc] = Tusd.getTokenBscAddress(); - tokenAddresses["tusd"][Web3Networks.Ethereum] = Tusd - .getTokenEthereumAddress(); - - // uni - tokenNames["uni"] = Uni.getTokenName(); - tokenRanges["uni"] = Uni.getTokenRanges(); - tokenNetworks["uni"] = Uni.getTokenNetworks(); - tokenAddresses["uni"][Web3Networks.Bsc] = Uni.getTokenBscAddress(); - tokenAddresses["uni"][Web3Networks.Ethereum] = Uni - .getTokenEthereumAddress(); - - // usdc - tokenNames["usdc"] = Usdc.getTokenName(); - tokenRanges["usdc"] = Usdc.getTokenRanges(); - tokenNetworks["usdc"] = Usdc.getTokenNetworks(); - tokenAddresses["usdc"][Web3Networks.Bsc] = Usdc.getTokenBscAddress(); - tokenAddresses["usdc"][Web3Networks.Ethereum] = Usdc - .getTokenEthereumAddress(); - - // usdd - tokenNames["usdd"] = Usdd.getTokenName(); - tokenRanges["usdd"] = Usdd.getTokenRanges(); - tokenNetworks["usdd"] = Usdd.getTokenNetworks(); - tokenAddresses["usdd"][Web3Networks.Bsc] = Usdd.getTokenBscAddress(); - tokenAddresses["usdd"][Web3Networks.Ethereum] = Usdd - .getTokenEthereumAddress(); - - // usdt - tokenNames["usdt"] = Usdt.getTokenName(); - tokenRanges["usdt"] = Usdt.getTokenRanges(); - tokenNetworks["usdt"] = Usdt.getTokenNetworks(); - tokenAddresses["usdt"][Web3Networks.Bsc] = Usdt.getTokenBscAddress(); - tokenAddresses["usdt"][Web3Networks.Ethereum] = Usdt - .getTokenEthereumAddress(); - - // wbtc - tokenNames["wbtc"] = Wbtc.getTokenName(); - tokenRanges["wbtc"] = Wbtc.getTokenRanges(); - tokenNetworks["wbtc"] = Wbtc.getTokenNetworks(); - tokenAddresses["wbtc"][Web3Networks.Bsc] = Wbtc.getTokenBscAddress(); - tokenAddresses["wbtc"][Web3Networks.Ethereum] = Wbtc - .getTokenEthereumAddress(); - } + constructor() { + // btcs + tokenRanges["btcs"] = Btcs.getTokenRanges(); + for (uint8 i = 0; i < BRC20.getBrc20TokenInfo().length; i++) { + tokenInfo["btcs"].push(BRC20.getBrc20TokenInfo()[i]); + } + + // cats + tokenRanges["cats"] = Cats.getTokenRanges(); + for (uint8 i = 0; i < BRC20.getBrc20TokenInfo().length; i++) { + tokenInfo["cats"].push(BRC20.getBrc20TokenInfo()[i]); + } + + // long + tokenRanges["long"] = Long.getTokenRanges(); + for (uint8 i = 0; i < BRC20.getBrc20TokenInfo().length; i++) { + tokenInfo["long"].push(BRC20.getBrc20TokenInfo()[i]); + } + + // mmss + tokenRanges["mmss"] = Mmss.getTokenRanges(); + for (uint8 i = 0; i < BRC20.getBrc20TokenInfo().length; i++) { + tokenInfo["mmss"].push(BRC20.getBrc20TokenInfo()[i]); + } + + // ordi + tokenRanges["ordi"] = Ordi.getTokenRanges(); + for (uint8 i = 0; i < BRC20.getBrc20TokenInfo().length; i++) { + tokenInfo["ordi"].push(BRC20.getBrc20TokenInfo()[i]); + } + + // rats + tokenRanges["rats"] = Rats.getTokenRanges(); + for (uint8 i = 0; i < BRC20.getBrc20TokenInfo().length; i++) { + tokenInfo["rats"].push(BRC20.getBrc20TokenInfo()[i]); + } + + // sats + tokenRanges["sats"] = Sats.getTokenRanges(); + for (uint8 i = 0; i < BRC20.getBrc20TokenInfo().length; i++) { + tokenInfo["sats"].push(BRC20.getBrc20TokenInfo()[i]); + } + + // Btc + tokenRanges["btc"] = Btc.getTokenRanges(); + for (uint8 i = 0; i < Btc.getTokenInfo().length; i++) { + tokenInfo["btc"].push(Btc.getTokenInfo()[i]); + } + + // ada + tokenRanges["ada"] = Ada.getTokenRanges(); + for (uint8 i = 0; i < Ada.getTokenInfo().length; i++) { + tokenInfo["ada"].push(Ada.getTokenInfo()[i]); + } + + // amp + tokenRanges["amp"] = Amp.getTokenRanges(); + for (uint8 i = 0; i < Amp.getTokenInfo().length; i++) { + tokenInfo["amp"].push(Amp.getTokenInfo()[i]); + } + + // atom + tokenRanges["atom"] = Atom.getTokenRanges(); + for (uint8 i = 0; i < Atom.getTokenInfo().length; i++) { + tokenInfo["atom"].push(Atom.getTokenInfo()[i]); + } + + // bch + tokenRanges["bch"] = Bch.getTokenRanges(); + for (uint8 i = 0; i < Bch.getTokenInfo().length; i++) { + tokenInfo["bch"].push(Bch.getTokenInfo()[i]); + } + + // bean + tokenRanges["bean"] = Bean.getTokenRanges(); + for (uint8 i = 0; i < Bean.getTokenInfo().length; i++) { + tokenInfo["bean"].push(Bean.getTokenInfo()[i]); + } + + // bnb + tokenRanges["bnb"] = Bnb.getTokenRanges(); + for (uint8 i = 0; i < Bnb.getTokenInfo().length; i++) { + tokenInfo["bnb"].push(Bnb.getTokenInfo()[i]); + } + + // comp + tokenRanges["comp"] = Comp.getTokenRanges(); + for (uint8 i = 0; i < Comp.getTokenInfo().length; i++) { + tokenInfo["comp"].push(Comp.getTokenInfo()[i]); + } + + // cro + tokenRanges["cro"] = Cro.getTokenRanges(); + for (uint8 i = 0; i < Cro.getTokenInfo().length; i++) { + tokenInfo["cro"].push(Cro.getTokenInfo()[i]); + } + + // crv + tokenRanges["crv"] = Crv.getTokenRanges(); + for (uint8 i = 0; i < Crv.getTokenInfo().length; i++) { + tokenInfo["crv"].push(Crv.getTokenInfo()[i]); + } + + // dai + tokenRanges["dai"] = Dai.getTokenRanges(); + for (uint8 i = 0; i < Dai.getTokenInfo().length; i++) { + tokenInfo["dai"].push(Dai.getTokenInfo()[i]); + } + + // doge + tokenRanges["doge"] = Doge.getTokenRanges(); + for (uint8 i = 0; i < Doge.getTokenInfo().length; i++) { + tokenInfo["doge"].push(Doge.getTokenInfo()[i]); + } + + // dydx + tokenRanges["dydx"] = Dydx.getTokenRanges(); + for (uint8 i = 0; i < Dydx.getTokenInfo().length; i++) { + tokenInfo["dydx"].push(Dydx.getTokenInfo()[i]); + } + + // etc + tokenRanges["etc"] = Etc.getTokenRanges(); + for (uint8 i = 0; i < Etc.getTokenInfo().length; i++) { + tokenInfo["etc"].push(Etc.getTokenInfo()[i]); + } + + // eth + tokenRanges["eth"] = Eth.getTokenRanges(); + for (uint8 i = 0; i < Eth.getTokenInfo().length; i++) { + tokenInfo["eth"].push(Eth.getTokenInfo()[i]); + } + + // fil + tokenRanges["fil"] = Fil.getTokenRanges(); + for (uint8 i = 0; i < Fil.getTokenInfo().length; i++) { + tokenInfo["fil"].push(Fil.getTokenInfo()[i]); + } + + // grt + tokenRanges["grt"] = Grt.getTokenRanges(); + for (uint8 i = 0; i < Grt.getTokenInfo().length; i++) { + tokenInfo["grt"].push(Grt.getTokenInfo()[i]); + } + + // gtc + tokenRanges["gtc"] = Gtc.getTokenRanges(); + for (uint8 i = 0; i < Gtc.getTokenInfo().length; i++) { + tokenInfo["gtc"].push(Gtc.getTokenInfo()[i]); + } + + // gusd + tokenRanges["gusd"] = Gusd.getTokenRanges(); + for (uint8 i = 0; i < Gusd.getTokenInfo().length; i++) { + tokenInfo["gusd"].push(Gusd.getTokenInfo()[i]); + } + + // imx + tokenRanges["imx"] = Imx.getTokenRanges(); + for (uint8 i = 0; i < Imx.getTokenInfo().length; i++) { + tokenInfo["imx"].push(Imx.getTokenInfo()[i]); + } + + // inj + tokenRanges["inj"] = Inj.getTokenRanges(); + for (uint8 i = 0; i < Inj.getTokenInfo().length; i++) { + tokenInfo["inj"].push(Inj.getTokenInfo()[i]); + } + + // leo + tokenRanges["leo"] = Leo.getTokenRanges(); + for (uint8 i = 0; i < Leo.getTokenInfo().length; i++) { + tokenInfo["leo"].push(Leo.getTokenInfo()[i]); + } + + // link + tokenRanges["link"] = Link.getTokenRanges(); + for (uint8 i = 0; i < Link.getTokenInfo().length; i++) { + tokenInfo["link"].push(Link.getTokenInfo()[i]); + } + + // lit + tokenRanges["lit"] = Lit.getTokenRanges(); + for (uint8 i = 0; i < Lit.getTokenInfo().length; i++) { + tokenInfo["lit"].push(Lit.getTokenInfo()[i]); + } + + // matic + tokenRanges["matic"] = Matic.getTokenRanges(); + for (uint8 i = 0; i < Matic.getTokenInfo().length; i++) { + tokenInfo["matic"].push(Matic.getTokenInfo()[i]); + } + + // mcrt + tokenRanges["mcrt"] = Mcrt.getTokenRanges(); + for (uint8 i = 0; i < Mcrt.getTokenInfo().length; i++) { + tokenInfo["mcrt"].push(Mcrt.getTokenInfo()[i]); + } + + // nfp + tokenRanges["nfp"] = Nfp.getTokenRanges(); + for (uint8 i = 0; i < Nfp.getTokenInfo().length; i++) { + tokenInfo["nfp"].push(Nfp.getTokenInfo()[i]); + } + + // people + tokenRanges["people"] = People.getTokenRanges(); + for (uint8 i = 0; i < People.getTokenInfo().length; i++) { + tokenInfo["people"].push(People.getTokenInfo()[i]); + } + + // shib + tokenRanges["shib"] = Shib.getTokenRanges(); + for (uint8 i = 0; i < Shib.getTokenInfo().length; i++) { + tokenInfo["shib"].push(Shib.getTokenInfo()[i]); + } + + // sol + tokenRanges["sol"] = Sol.getTokenRanges(); + for (uint8 i = 0; i < Sol.getTokenInfo().length; i++) { + tokenInfo["sol"].push(Sol.getTokenInfo()[i]); + } + + // spaceid + tokenRanges["spaceid"] = SpaceId.getTokenRanges(); + for (uint8 i = 0; i < SpaceId.getTokenInfo().length; i++) { + tokenInfo["spaceid"].push(SpaceId.getTokenInfo()[i]); + } + + // ton + tokenRanges["ton"] = Ton.getTokenRanges(); + for (uint8 i = 0; i < Ton.getTokenInfo().length; i++) { + tokenInfo["ton"].push(Ton.getTokenInfo()[i]); + } + + // trx + tokenRanges["trx"] = Trx.getTokenRanges(); + for (uint8 i = 0; i < Trx.getTokenInfo().length; i++) { + tokenInfo["trx"].push(Trx.getTokenInfo()[i]); + } + + // tusd + tokenRanges["tusd"] = Tusd.getTokenRanges(); + for (uint8 i = 0; i < Tusd.getTokenInfo().length; i++) { + tokenInfo["tusd"].push(Tusd.getTokenInfo()[i]); + } + + // uni + tokenRanges["uni"] = Uni.getTokenRanges(); + for (uint8 i = 0; i < Uni.getTokenInfo().length; i++) { + tokenInfo["uni"].push(Uni.getTokenInfo()[i]); + } + + // usdc + tokenRanges["usdc"] = Usdc.getTokenRanges(); + for (uint8 i = 0; i < Usdc.getTokenInfo().length; i++) { + tokenInfo["usdc"].push(Usdc.getTokenInfo()[i]); + } + + // usdd + tokenRanges["usdd"] = Usdd.getTokenRanges(); + for (uint8 i = 0; i < Usdd.getTokenInfo().length; i++) { + tokenInfo["usdd"].push(Usdd.getTokenInfo()[i]); + } + + // usdt + tokenRanges["usdt"] = Usdt.getTokenRanges(); + for (uint8 i = 0; i < Usdt.getTokenInfo().length; i++) { + tokenInfo["usdt"].push(Usdt.getTokenInfo()[i]); + } + + // wbtc + tokenRanges["wbtc"] = Wbtc.getTokenRanges(); + for (uint8 i = 0; i < Wbtc.getTokenInfo().length; i++) { + tokenInfo["wbtc"].push(Wbtc.getTokenInfo()[i]); + } + } } diff --git a/contracts/token_holding_amount/TokenQueryLogic.sol b/contracts/token_holding_amount/TokenQueryLogic.sol index df385aa..5c3a446 100644 --- a/contracts/token_holding_amount/TokenQueryLogic.sol +++ b/contracts/token_holding_amount/TokenQueryLogic.sol @@ -18,97 +18,125 @@ pragma solidity ^0.8.8; +import "@openzeppelin/contracts/utils/Strings.sol"; import "../libraries/Identities.sol"; import "../libraries/Utils.sol"; import { TokenHoldingAmount } from "./TokenHoldingAmount.sol"; import { NoderealClient } from "./NoderealClient.sol"; import { GeniidataClient } from "./GeniidataClient.sol"; +import { BlockchainInfoClient } from "./BlockchainInfoClient.sol"; +import "./MoralisClient.sol"; +import "./Constants.sol"; abstract contract TokenQueryLogic is TokenHoldingAmount { - mapping(uint32 => string) internal networkUrls; - mapping(uint32 => bool) private queriedNetworks; - mapping(string => mapping(uint32 => string)) tokenAddresses; - mapping(string => string) internal tokenBscAddress; - mapping(string => string) internal tokenEthereumAddress; - mapping(string => uint32[]) internal tokenNetworks; + mapping(string => TokenInfo[]) internal tokenInfo; + uint8 tokenDecimals; - constructor() { - networkUrls[Web3Networks.Bsc] = "https://bsc-mainnet.nodereal.io/v1/"; // test against mock server => "http://localhost:19530/nodereal_jsonrpc/" - networkUrls[ - Web3Networks.Ethereum - ] = "https://eth-mainnet.nodereal.io/v1/"; // test against mock server => "http://localhost:19530/nodereal_jsonrpc/" + function getTokenDecimals() internal view override returns (uint8) { + return tokenDecimals; + } - networkUrls[ - Web3Networks.BitcoinP2tr - ] = "https://api.geniidata.com/api/1/brc20/balance"; // test against mock server => "http://localhost:19529/api/1/brc20/balance" - // Add more networks as needed - } + function queryBalance( + Identity memory identity, + uint32 network, + string[] memory secrets, + string memory tokenName + ) internal override returns (uint256) { + (bool identityToStringSuccess, string memory identityString) = Utils + .identityToString(network, identity.value); - function getTokenDecimals() internal pure override returns (uint8) { - return 18; - } + if (identityToStringSuccess) { + uint256 totalBalance = 0; - function queryBalance( - Identity memory identity, - uint32 network, - string[] memory secrets, - string memory tokenName - ) internal override returns (uint256) { - (bool identityToStringSuccess, string memory identityString) = Utils - .identityToString(network, identity.value); + ( + string memory tokenContractAddress, + uint8 dataproviderType, + uint8 decimals + ) = getTokenInfo(tokenName, network); + tokenDecimals = decimals; - if (identityToStringSuccess) { - string memory url; - uint32[] memory networks = tokenNetworks[tokenName]; - uint256 totalBalance = 0; + if ( + dataproviderType == DataProviderTypes.GeniidataClient && + GeniidataClient.isSupportedNetwork(network) + ) { + uint256 balance = GeniidataClient.getTokenBalance( + secrets[0], + identityString, + tokenName, + getTokenDecimals() + ); - for (uint32 i = 0; i < networks.length; i++) { - // Check if this network has been queried - url = networkUrls[networks[i]]; + totalBalance += balance; + } else if ( + dataproviderType == DataProviderTypes.NoderealClient && + NoderealClient.isSupportedNetwork(network) + ) { + (bool success, uint256 balance) = NoderealClient + .getTokenBalance( + network, + secrets[1], + tokenContractAddress, + identityString + ); + if (success) { + totalBalance += balance; + } + } else if ( + dataproviderType == DataProviderTypes.MoralisClient && + MoralisClient.isSupportedNetwork(network) + ) { + uint256 balance = MoralisClient.getTokenBalance( + network, + secrets[2], + identityString, + tokenContractAddress, + getTokenDecimals() + ); + totalBalance += balance; + } else if ( + dataproviderType == DataProviderTypes.BlockchainInfoClient && + BlockchainInfoClient.isSupportedNetwork(network) + ) { + string[] memory accounts = new string[](1); + accounts[0] = identityString; + uint256 balance = BlockchainInfoClient.getTokenBalance( + accounts + ); + totalBalance += balance; + } + return totalBalance; + } + return 0; + } - if (!queriedNetworks[networks[i]]) { - string memory _tokenContractAddress = tokenAddresses[ - tokenName - ][networks[i]]; - if (networks[i] == Web3Networks.BitcoinP2tr) { - uint256 balance = GeniidataClient.getTokenBalance( - secrets, - url, - identityString, - tokenName, - getTokenDecimals() - ); - totalBalance += balance; - } else if ( - networks[i] == Web3Networks.Bsc || - networks[i] == Web3Networks.Ethereum - ) { - (bool success, uint256 balance) = NoderealClient - .getTokenBalance( - url, - secrets, - _tokenContractAddress, - identityString - ); - if (success) { - totalBalance += balance; - } - } - // Mark this network as queried - queriedNetworks[networks[i]] = true; - } - } - return totalBalance; - } - return 0; - } + function isSupportedNetwork( + string memory tokenName, + uint32 network + ) internal view override returns (bool) { + TokenInfo[] memory infoArray = tokenInfo[tokenName]; + for (uint32 i = 0; i < infoArray.length; i++) { + if (network == infoArray[i].network) { + return true; + } + } + return false; + } - function isSupportedNetwork( - uint32 network - ) internal pure override returns (bool) { - return - network == Web3Networks.Bsc || - network == Web3Networks.Ethereum || - network == Web3Networks.BitcoinP2tr; - } + function getTokenInfo( + string memory tokenName, + uint32 network + ) internal view returns (string memory, uint8, uint8) { + string memory tokenAddress; + uint8 dataProviderType; + uint8 decimals; + for (uint i = 0; i < tokenInfo[tokenName].length; i++) { + if (tokenInfo[tokenName][i].network == network) { + tokenAddress = tokenInfo[tokenName][i].tokenAddress; + dataProviderType = tokenInfo[tokenName][i].dataprovierType; + decimals = tokenInfo[tokenName][i].decimals; + return (tokenAddress, dataProviderType, decimals); + } + } + revert("TokenInfo not found"); + } } diff --git a/contracts/token_holding_amount/brc20/BRC20.sol b/contracts/token_holding_amount/brc20/BRC20.sol new file mode 100644 index 0000000..9d95155 --- /dev/null +++ b/contracts/token_holding_amount/brc20/BRC20.sol @@ -0,0 +1,48 @@ +// Copyright 2020-2024 Trust Computing GmbH. +// This file is part of Litentry. +// +// Litentry is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Litentry is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Litentry. If not, see . + +// SPDX-License-Identifier: GPL-3.0-or-later + +pragma solidity ^0.8.8; + +import "../Constants.sol"; +import "../../libraries/Identities.sol"; + +library BRC20 { + function getDefaultTokenNetworks() internal pure returns (uint32[] memory) { + uint32[] memory networks = new uint32[](5); + networks[0] = Web3Networks.BitcoinP2tr; + networks[1] = Web3Networks.BitcoinP2pkh; + networks[2] = Web3Networks.BitcoinP2sh; + networks[3] = Web3Networks.BitcoinP2wpkh; + networks[4] = Web3Networks.BitcoinP2wsh; + return networks; + } + function getBrc20TokenInfo() internal pure returns (TokenInfo[] memory) { + uint32[] memory networks = BRC20.getDefaultTokenNetworks(); + TokenInfo[] memory tokenInfoList = new TokenInfo[](networks.length); + for (uint i = 0; i < networks.length; i++) { + tokenInfoList[i] = TokenInfo( + networks[i], + "", + DataProviderTypes.GeniidataClient, + 18 + ); + } + + return tokenInfoList; + } +} diff --git a/contracts/token_holding_amount/brc20/Btcs.sol b/contracts/token_holding_amount/brc20/Btcs.sol index 2f3b309..a2eebc6 100644 --- a/contracts/token_holding_amount/brc20/Btcs.sol +++ b/contracts/token_holding_amount/brc20/Btcs.sol @@ -18,30 +18,22 @@ pragma solidity ^0.8.8; -import "../Constants.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; +import "./BRC20.sol"; library Btcs { - function getTokenName() internal pure returns (string memory) { - return "btcs"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 5 * Constants.decimals_factor; - ranges[3] = 20 * Constants.decimals_factor; - ranges[4] = 50 * Constants.decimals_factor; - ranges[5] = 100 * Constants.decimals_factor; - ranges[6] = 200 * Constants.decimals_factor; - ranges[7] = 500 * Constants.decimals_factor; - ranges[8] = 800 * Constants.decimals_factor; - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](1); - networks[0] = Web3Networks.BitcoinP2tr; - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](9); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 100 * Constants.decimals_factor; + ranges[6] = 200 * Constants.decimals_factor; + ranges[7] = 500 * Constants.decimals_factor; + ranges[8] = 800 * Constants.decimals_factor; + return ranges; + } } diff --git a/contracts/token_holding_amount/brc20/Cats.sol b/contracts/token_holding_amount/brc20/Cats.sol index 0a4b5cb..341dba8 100644 --- a/contracts/token_holding_amount/brc20/Cats.sol +++ b/contracts/token_holding_amount/brc20/Cats.sol @@ -18,29 +18,21 @@ pragma solidity ^0.8.8; -import "../Constants.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; +import "./BRC20.sol"; library Cats { - function getTokenName() internal pure returns (string memory) { - return "cats"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](8); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 10000 * Constants.decimals_factor; - ranges[3] = 50000 * Constants.decimals_factor; - ranges[4] = 100000 * Constants.decimals_factor; - ranges[5] = 200000 * Constants.decimals_factor; - ranges[6] = 500000 * Constants.decimals_factor; - ranges[7] = 800000 * Constants.decimals_factor; - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](1); - networks[0] = Web3Networks.BitcoinP2tr; - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](8); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 10000 * Constants.decimals_factor; + ranges[3] = 50000 * Constants.decimals_factor; + ranges[4] = 100000 * Constants.decimals_factor; + ranges[5] = 200000 * Constants.decimals_factor; + ranges[6] = 500000 * Constants.decimals_factor; + ranges[7] = 800000 * Constants.decimals_factor; + return ranges; + } } diff --git a/contracts/token_holding_amount/brc20/Long.sol b/contracts/token_holding_amount/brc20/Long.sol index 60fbef5..8ab8bd7 100644 --- a/contracts/token_holding_amount/brc20/Long.sol +++ b/contracts/token_holding_amount/brc20/Long.sol @@ -18,30 +18,22 @@ pragma solidity ^0.8.8; -import "../Constants.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; +import "./BRC20.sol"; library Long { - function getTokenName() internal pure returns (string memory) { - return "long"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 20 * Constants.decimals_factor; - ranges[3] = 50 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 1000 * Constants.decimals_factor; - ranges[7] = 2000 * Constants.decimals_factor; - ranges[8] = 3000 * Constants.decimals_factor; - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](1); - networks[0] = Web3Networks.BitcoinP2tr; - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](9); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 20 * Constants.decimals_factor; + ranges[3] = 50 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; + ranges[8] = 3000 * Constants.decimals_factor; + return ranges; + } } diff --git a/contracts/token_holding_amount/brc20/Mmss.sol b/contracts/token_holding_amount/brc20/Mmss.sol index 37dc394..d80ba66 100644 --- a/contracts/token_holding_amount/brc20/Mmss.sol +++ b/contracts/token_holding_amount/brc20/Mmss.sol @@ -18,30 +18,22 @@ pragma solidity ^0.8.8; -import "../Constants.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; +import "./BRC20.sol"; library Mmss { - function getTokenName() internal pure returns (string memory) { - return "mmss"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 20 * Constants.decimals_factor; - ranges[3] = 50 * Constants.decimals_factor; - ranges[4] = 100 * Constants.decimals_factor; - ranges[5] = 200 * Constants.decimals_factor; - ranges[6] = 500 * Constants.decimals_factor; - ranges[7] = 1000 * Constants.decimals_factor; - ranges[8] = 2000 * Constants.decimals_factor; - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](1); - networks[0] = Web3Networks.BitcoinP2tr; - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](9); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 20 * Constants.decimals_factor; + ranges[3] = 50 * Constants.decimals_factor; + ranges[4] = 100 * Constants.decimals_factor; + ranges[5] = 200 * Constants.decimals_factor; + ranges[6] = 500 * Constants.decimals_factor; + ranges[7] = 1000 * Constants.decimals_factor; + ranges[8] = 2000 * Constants.decimals_factor; + return ranges; + } } diff --git a/contracts/token_holding_amount/brc20/Ordi.sol b/contracts/token_holding_amount/brc20/Ordi.sol index a9e5200..2ef68dd 100644 --- a/contracts/token_holding_amount/brc20/Ordi.sol +++ b/contracts/token_holding_amount/brc20/Ordi.sol @@ -18,29 +18,21 @@ pragma solidity ^0.8.8; -import "../Constants.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; +import "./BRC20.sol"; library Ordi { - function getTokenName() internal pure returns (string memory) { - return "ordi"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](8); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 5 * Constants.decimals_factor; - ranges[3] = 20 * Constants.decimals_factor; - ranges[4] = 50 * Constants.decimals_factor; - ranges[5] = 100 * Constants.decimals_factor; - ranges[6] = 200 * Constants.decimals_factor; - ranges[7] = 500 * Constants.decimals_factor; - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](1); - networks[0] = Web3Networks.BitcoinP2tr; - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](8); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 100 * Constants.decimals_factor; + ranges[6] = 200 * Constants.decimals_factor; + ranges[7] = 500 * Constants.decimals_factor; + return ranges; + } } diff --git a/contracts/token_holding_amount/brc20/Rats.sol b/contracts/token_holding_amount/brc20/Rats.sol index 9ea1bd8..bb0c770 100644 --- a/contracts/token_holding_amount/brc20/Rats.sol +++ b/contracts/token_holding_amount/brc20/Rats.sol @@ -18,30 +18,22 @@ pragma solidity ^0.8.8; -import "../Constants.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; +import "./BRC20.sol"; library Rats { - function getTokenName() internal pure returns (string memory) { - return "rats"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 40000 * Constants.decimals_factor; - ranges[3] = 200000 * Constants.decimals_factor; - ranges[4] = 1000000 * Constants.decimals_factor; - ranges[5] = 2000000 * Constants.decimals_factor; - ranges[6] = 4000000 * Constants.decimals_factor; - ranges[7] = 10000000 * Constants.decimals_factor; - ranges[8] = 2000000 * Constants.decimals_factor; - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](1); - networks[0] = Web3Networks.BitcoinP2tr; - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](9); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 40000 * Constants.decimals_factor; + ranges[3] = 200000 * Constants.decimals_factor; + ranges[4] = 1000000 * Constants.decimals_factor; + ranges[5] = 2000000 * Constants.decimals_factor; + ranges[6] = 4000000 * Constants.decimals_factor; + ranges[7] = 10000000 * Constants.decimals_factor; + ranges[8] = 2000000 * Constants.decimals_factor; + return ranges; + } } diff --git a/contracts/token_holding_amount/brc20/Sats.sol b/contracts/token_holding_amount/brc20/Sats.sol index 27f6772..2c2530d 100644 --- a/contracts/token_holding_amount/brc20/Sats.sol +++ b/contracts/token_holding_amount/brc20/Sats.sol @@ -18,30 +18,22 @@ pragma solidity ^0.8.8; -import "../Constants.sol"; import "../../libraries/Identities.sol"; +import "../Constants.sol"; +import "./BRC20.sol"; library Sats { - function getTokenName() internal pure returns (string memory) { - return "sats"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 40000000 * Constants.decimals_factor; - ranges[3] = 200000000 * Constants.decimals_factor; - ranges[4] = 500000000 * Constants.decimals_factor; - ranges[5] = 1000000000 * Constants.decimals_factor; - ranges[6] = 2000000000 * Constants.decimals_factor; - ranges[7] = 4000000000 * Constants.decimals_factor; - ranges[8] = 6000000000 * Constants.decimals_factor; - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](1); - networks[0] = Web3Networks.BitcoinP2tr; - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](9); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 40000000 * Constants.decimals_factor; + ranges[3] = 200000000 * Constants.decimals_factor; + ranges[4] = 500000000 * Constants.decimals_factor; + ranges[5] = 1000000000 * Constants.decimals_factor; + ranges[6] = 2000000000 * Constants.decimals_factor; + ranges[7] = 4000000000 * Constants.decimals_factor; + ranges[8] = 6000000000 * Constants.decimals_factor; + return ranges; + } } diff --git a/contracts/token_holding_amount/erc20/Ada.sol b/contracts/token_holding_amount/erc20/Ada.sol index 36e21a3..227b9b9 100644 --- a/contracts/token_holding_amount/erc20/Ada.sol +++ b/contracts/token_holding_amount/erc20/Ada.sol @@ -19,35 +19,28 @@ pragma solidity ^0.8.8; import "../../libraries/Identities.sol"; import "../Constants.sol"; -library Ada { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x3EE2200Efb3400fAbB9AacF31297cBdD1d435D47"; - } - - function getTokenEthereumAddress() internal pure returns (string memory) { - return ""; - } - function getTokenName() internal pure returns (string memory) { - return "ada"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](7); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1000 * Constants.decimals_factor; - ranges[2] = 5000 * Constants.decimals_factor; - ranges[3] = 20000 * Constants.decimals_factor; - ranges[4] = 50000 * Constants.decimals_factor; - ranges[5] = 100000 * Constants.decimals_factor; - ranges[6] = 300000 * Constants.decimals_factor; +library Ada { + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](7); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1000 * Constants.decimals_factor; + ranges[2] = 5000 * Constants.decimals_factor; + ranges[3] = 20000 * Constants.decimals_factor; + ranges[4] = 50000 * Constants.decimals_factor; + ranges[5] = 100000 * Constants.decimals_factor; + ranges[6] = 300000 * Constants.decimals_factor; - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - return networks; - } + return ranges; + } + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0x3EE2200Efb3400fAbB9AacF31297cBdD1d435D47", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Amp.sol b/contracts/token_holding_amount/erc20/Amp.sol index 71547c6..86e8604 100644 --- a/contracts/token_holding_amount/erc20/Amp.sol +++ b/contracts/token_holding_amount/erc20/Amp.sol @@ -21,38 +21,30 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Amp { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xff20817765cb7f73d4bde2e66e067e58d11095c2"; - } - - function getTokenName() internal pure returns (string memory) { - return "amp"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xff20817765cb7f73d4bde2e66e067e58d11095c2", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Atom.sol b/contracts/token_holding_amount/erc20/Atom.sol index 7b3680c..83d48d0 100644 --- a/contracts/token_holding_amount/erc20/Atom.sol +++ b/contracts/token_holding_amount/erc20/Atom.sol @@ -22,34 +22,32 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Atom { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x0eb3a705fc54725037cc9e008bdede697f62f335"; - } - - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x8D983cb9388EaC77af0474fA441C4815500Cb7BB"; - } - - function getTokenName() internal pure returns (string memory) { - return "atom"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 5 * Constants.decimals_factor; - ranges[3] = 20 * Constants.decimals_factor; - ranges[4] = 50 * Constants.decimals_factor; - ranges[5] = 80 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](6); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 80 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x8D983cb9388EaC77af0474fA441C4815500Cb7BB", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x0eb3a705fc54725037cc9e008bdede697f62f335", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Bch.sol b/contracts/token_holding_amount/erc20/Bch.sol index b5e00e0..daf90ca 100644 --- a/contracts/token_holding_amount/erc20/Bch.sol +++ b/contracts/token_holding_amount/erc20/Bch.sol @@ -22,37 +22,30 @@ import "../Constants.sol"; import "../../libraries/Identities.sol"; library Bch { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x8fF795a6F4D97E7887C79beA79aba5cc76444aDf"; - } - - function getTokenEthereumAddress() internal pure returns (string memory) { - return ""; - } - function getTokenName() internal pure returns (string memory) { - return "bch"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](6); - - // all ranges multiplied by decimals_factor(1000). - // pub const BCH_AMOUNT_RANGE: [f64; 6] = [0.0, 0.1, 0.5, 2.0, 6.0, 12.0]; - - ranges[0] = 0; - ranges[1] = 100; - ranges[2] = 500; - ranges[3] = 2000; - ranges[4] = 6000; - ranges[5] = 12000; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](6); + + // all ranges multiplied by decimals_factor(1000). + // pub const BCH_AMOUNT_RANGE: [f64; 6] = [0.0, 0.1, 0.5, 2.0, 6.0, 12.0]; + + ranges[0] = 0; + ranges[1] = 100; + ranges[2] = 500; + ranges[3] = 2000; + ranges[4] = 6000; + ranges[5] = 12000; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0x8fF795a6F4D97E7887C79beA79aba5cc76444aDf", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Bean.sol b/contracts/token_holding_amount/erc20/Bean.sol index df88fe1..108a427 100644 --- a/contracts/token_holding_amount/erc20/Bean.sol +++ b/contracts/token_holding_amount/erc20/Bean.sol @@ -20,32 +20,36 @@ pragma solidity ^0.8.8; import "../../libraries/Identities.sol"; import "../Constants.sol"; - +struct TokenNetwork { + uint32 id; + string tokenAddress; +} library Bean { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x07da81e9a684ab87fad7206b3bc8d0866f48cc7c"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xba7b9936a965fac23bb7a8190364fa60622b3cff"; - } - function getTokenName() internal pure returns (string memory) { - return "bean"; - } - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](5); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1500 * Constants.decimals_factor; - ranges[2] = 5000 * Constants.decimals_factor; - ranges[3] = 10000 * Constants.decimals_factor; - ranges[4] = 50000 * Constants.decimals_factor; + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](5); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1500 * Constants.decimals_factor; + ranges[2] = 5000 * Constants.decimals_factor; + ranges[3] = 10000 * Constants.decimals_factor; + ranges[4] = 50000 * Constants.decimals_factor; - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; + return ranges; + } - return networks; - } + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0x07da81e9a684ab87fad7206b3bc8d0866f48cc7c", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Ethereum, + "0xba7b9936a965fac23bb7a8190364fa60622b3cff", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Bnb.sol b/contracts/token_holding_amount/erc20/Bnb.sol index 9c5a523..cf6977a 100644 --- a/contracts/token_holding_amount/erc20/Bnb.sol +++ b/contracts/token_holding_amount/erc20/Bnb.sol @@ -22,36 +22,36 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Bnb { - function getTokenBscAddress() internal pure returns (string memory) { - return "Native Token"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xb8c77482e45f1f44de1745f52c74426c631bdd52"; - } - function getTokenName() internal pure returns (string memory) { - return "bnb"; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; + return ranges; + } - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "Native Token", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Ethereum, + "0xb8c77482e45f1f44de1745f52c74426c631bdd52", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Comp.sol b/contracts/token_holding_amount/erc20/Comp.sol index 0d3d105..2a8f1db 100644 --- a/contracts/token_holding_amount/erc20/Comp.sol +++ b/contracts/token_holding_amount/erc20/Comp.sol @@ -22,37 +22,31 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Comp { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xc00e94cb662c3520282e6f5717214004a7f26888"; - } - - function getTokenName() internal pure returns (string memory) { - return "comp"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xc00e94cb662c3520282e6f5717214004a7f26888", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Cro.sol b/contracts/token_holding_amount/erc20/Cro.sol index fbbdc70..6a61ab2 100644 --- a/contracts/token_holding_amount/erc20/Cro.sol +++ b/contracts/token_holding_amount/erc20/Cro.sol @@ -22,34 +22,33 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Cro { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b"; - } - - function getTokenName() internal pure returns (string memory) { - return "cro"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](7); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1000 * Constants.decimals_factor; - ranges[2] = 5000 * Constants.decimals_factor; - ranges[3] = 20000 * Constants.decimals_factor; - ranges[4] = 50000 * Constants.decimals_factor; - ranges[5] = 100000 * Constants.decimals_factor; - ranges[6] = 300000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](7); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1000 * Constants.decimals_factor; + ranges[2] = 5000 * Constants.decimals_factor; + ranges[3] = 20000 * Constants.decimals_factor; + ranges[4] = 50000 * Constants.decimals_factor; + ranges[5] = 100000 * Constants.decimals_factor; + ranges[6] = 300000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Solana, + "DvjMYMVeXgKxaixGKpzQThLoG98nc7HSU7eanzsdCboA", + DataProviderTypes.MoralisClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Crv.sol b/contracts/token_holding_amount/erc20/Crv.sol index d994331..3ed3b7a 100644 --- a/contracts/token_holding_amount/erc20/Crv.sol +++ b/contracts/token_holding_amount/erc20/Crv.sol @@ -22,37 +22,31 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Crv { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xdac17f958d2ee523a2206206994597c13d831ec7"; - } - - function getTokenName() internal pure returns (string memory) { - return "crv"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xdac17f958d2ee523a2206206994597c13d831ec7", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Cvx.sol b/contracts/token_holding_amount/erc20/Cvx.sol index dace723..276b4b9 100644 --- a/contracts/token_holding_amount/erc20/Cvx.sol +++ b/contracts/token_holding_amount/erc20/Cvx.sol @@ -22,36 +22,31 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Cvx { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b"; - } - function getTokenName() internal pure returns (string memory) { - return "cvx"; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; + return ranges; + } - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x4e3fbd56cd56c3e72c1403e103b45db9da5b9d2b", + DataProviderTypes.NoderealClient, + 18 + ); - return networks; - } + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Dai.sol b/contracts/token_holding_amount/erc20/Dai.sol index 3ba6f18..5104bd7 100644 --- a/contracts/token_holding_amount/erc20/Dai.sol +++ b/contracts/token_holding_amount/erc20/Dai.sol @@ -22,36 +22,42 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Dai { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x6b175474e89094c44da98b954eedeac495271d0f"; - } - - function getTokenName() internal pure returns (string memory) { - return "dai"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 10 * Constants.decimals_factor; - ranges[2] = 30 * Constants.decimals_factor; - ranges[3] = 80 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 1000 * Constants.decimals_factor; - ranges[7] = 2000 * Constants.decimals_factor; - ranges[8] = 5000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](9); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; + ranges[8] = 5000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](3); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x6b175474e89094c44da98b954eedeac495271d0f", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x1af3f329e8be154074d8769d1ffa4ee058b1dbc3", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[2] = TokenInfo( + Web3Networks.Solana, + "EjmyN6qEC1Tf1JxiG1ae7UTJhUxSwk1TCWNWqxWV4J6o", + DataProviderTypes.MoralisClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Doge.sol b/contracts/token_holding_amount/erc20/Doge.sol index 8e34521..03597f2 100644 --- a/contracts/token_holding_amount/erc20/Doge.sol +++ b/contracts/token_holding_amount/erc20/Doge.sol @@ -21,34 +21,27 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Doge { - function getTokenBscAddress() internal pure returns (string memory) { - return "0xba2ae424d960c26247dd6c32edc70b295c744c43"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return ""; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](7); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1000 * Constants.decimals_factor; + ranges[2] = 5000 * Constants.decimals_factor; + ranges[3] = 20000 * Constants.decimals_factor; + ranges[4] = 50000 * Constants.decimals_factor; + ranges[5] = 100000 * Constants.decimals_factor; + ranges[6] = 300000 * Constants.decimals_factor; - function getTokenName() internal pure returns (string memory) { - return "doge"; - } + return ranges; + } - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](7); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1000 * Constants.decimals_factor; - ranges[2] = 5000 * Constants.decimals_factor; - ranges[3] = 20000 * Constants.decimals_factor; - ranges[4] = 50000 * Constants.decimals_factor; - ranges[5] = 100000 * Constants.decimals_factor; - ranges[6] = 300000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0xba2ae424d960c26247dd6c32edc70b295c744c43", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Dydx.sol b/contracts/token_holding_amount/erc20/Dydx.sol index ade6482..287ae96 100644 --- a/contracts/token_holding_amount/erc20/Dydx.sol +++ b/contracts/token_holding_amount/erc20/Dydx.sol @@ -22,37 +22,31 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Dydx { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x92d6c1e31e14520e676a687f0a93788b716beff5"; - } - - function getTokenName() internal pure returns (string memory) { - return "dydx"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x92d6c1e31e14520e676a687f0a93788b716beff5", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Etc.sol b/contracts/token_holding_amount/erc20/Etc.sol index 6afa9e1..622da18 100644 --- a/contracts/token_holding_amount/erc20/Etc.sol +++ b/contracts/token_holding_amount/erc20/Etc.sol @@ -22,33 +22,26 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Etc { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x3d6545b08693dae087e957cb1180ee38b9e3c25e"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return ""; - } - - function getTokenName() internal pure returns (string memory) { - return "etc"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 5 * Constants.decimals_factor; - ranges[3] = 20 * Constants.decimals_factor; - ranges[4] = 50 * Constants.decimals_factor; - ranges[5] = 80 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](6); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 80 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0x3d6545b08693dae087e957cb1180ee38b9e3c25e", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Eth.sol b/contracts/token_holding_amount/erc20/Eth.sol index 04c04d1..dd00315 100644 --- a/contracts/token_holding_amount/erc20/Eth.sol +++ b/contracts/token_holding_amount/erc20/Eth.sol @@ -19,42 +19,42 @@ pragma solidity ^0.8.8; import "../../libraries/Identities.sol"; - +import "../Constants.sol"; library Eth { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x2170ed0880ac9a755fd29b2688956bd959f933f8"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "Native Token"; - } - - function getTokenName() internal pure returns (string memory) { - return "eth"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - - // all ranges multiplied by decimals_factor(1000). - // pub const ETH_AMOUNT_RANGE: [f64; 10] = [0.0, 0.01, 0.05, 0.2, 0.6, 1.2, 3.0, 8.0, 20.0, 50.0]; - ranges[0] = 0; - ranges[1] = 10; - ranges[2] = 50; - ranges[3] = 200; - ranges[4] = 600; - ranges[5] = 1200; - ranges[6] = 3000; - ranges[7] = 8000; - ranges[8] = 20000; - ranges[9] = 50000; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + + // all ranges multiplied by decimals_factor(1000). + // pub const ETH_AMOUNT_RANGE: [f64; 10] = [0.0, 0.01, 0.05, 0.2, 0.6, 1.2, 3.0, 8.0, 20.0, 50.0]; + ranges[0] = 0; + ranges[1] = 10; + ranges[2] = 50; + ranges[3] = 200; + ranges[4] = 600; + ranges[5] = 1200; + ranges[6] = 3000; + ranges[7] = 8000; + ranges[8] = 20000; + ranges[9] = 50000; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "Native Token", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x2170ed0880ac9a755fd29b2688956bd959f933f8", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Fil.sol b/contracts/token_holding_amount/erc20/Fil.sol index 66f0187..132401d 100644 --- a/contracts/token_holding_amount/erc20/Fil.sol +++ b/contracts/token_holding_amount/erc20/Fil.sol @@ -22,33 +22,27 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Fil { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x0d8ce2a99bb6e3b7db580ed848240e4a0f9ae153"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return ""; - } - - function getTokenName() internal pure returns (string memory) { - return "fil"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 10 * Constants.decimals_factor; - ranges[2] = 30 * Constants.decimals_factor; - ranges[3] = 80 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](6); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0x0d8ce2a99bb6e3b7db580ed848240e4a0f9ae153", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Grt.sol b/contracts/token_holding_amount/erc20/Grt.sol index 488afad..07c5c92 100644 --- a/contracts/token_holding_amount/erc20/Grt.sol +++ b/contracts/token_holding_amount/erc20/Grt.sol @@ -21,37 +21,37 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Grt { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x52ce071bd9b1c4b00a0b92d298c512478cad67e8"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xc944e90c64b2c07662a292be6244bdf05cda44a7"; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; - function getTokenName() internal pure returns (string memory) { - return "grt"; - } + return ranges; + } - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xc944e90c64b2c07662a292be6244bdf05cda44a7", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x52ce071bd9b1c4b00a0b92d298c512478cad67e8", + DataProviderTypes.NoderealClient, + 18 + ); - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Gtc.sol b/contracts/token_holding_amount/erc20/Gtc.sol index 2e7e3f2..69a8d5a 100644 --- a/contracts/token_holding_amount/erc20/Gtc.sol +++ b/contracts/token_holding_amount/erc20/Gtc.sol @@ -22,37 +22,31 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Gtc { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xde30da39c46104798bb5aa3fe8b9e0e1f348163f"; - } - - function getTokenName() internal pure returns (string memory) { - return "gtc"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xde30da39c46104798bb5aa3fe8b9e0e1f348163f", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Gusd.sol b/contracts/token_holding_amount/erc20/Gusd.sol index fdb4e12..821b741 100644 --- a/contracts/token_holding_amount/erc20/Gusd.sol +++ b/contracts/token_holding_amount/erc20/Gusd.sol @@ -22,37 +22,31 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Gusd { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd"; - } - - function getTokenName() internal pure returns (string memory) { - return "gusd"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x056fd409e1d7a124bd7017459dfea2f387b6d5cd", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Imx.sol b/contracts/token_holding_amount/erc20/Imx.sol index bd03d62..0172d9a 100644 --- a/contracts/token_holding_amount/erc20/Imx.sol +++ b/contracts/token_holding_amount/erc20/Imx.sol @@ -22,35 +22,29 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Imx { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xf57e7e7c23978c3caec3c3548e3d615c346e79ff"; - } - - function getTokenName() internal pure returns (string memory) { - return "imx"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](8); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 10 * Constants.decimals_factor; - ranges[2] = 30 * Constants.decimals_factor; - ranges[3] = 80 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 1000 * Constants.decimals_factor; - ranges[7] = 2000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](8); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xf57e7e7c23978c3caec3c3548e3d615c346e79ff", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Inj.sol b/contracts/token_holding_amount/erc20/Inj.sol index fd39b68..81d90b2 100644 --- a/contracts/token_holding_amount/erc20/Inj.sol +++ b/contracts/token_holding_amount/erc20/Inj.sol @@ -22,33 +22,27 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Inj { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b"; - } - - function getTokenName() internal pure returns (string memory) { - return "inj"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 5 * Constants.decimals_factor; - ranges[3] = 20 * Constants.decimals_factor; - ranges[4] = 50 * Constants.decimals_factor; - ranges[5] = 80 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](6); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 5 * Constants.decimals_factor; + ranges[3] = 20 * Constants.decimals_factor; + ranges[4] = 50 * Constants.decimals_factor; + ranges[5] = 80 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xa0b73e1ff0b80914ab6fe0444e65848c4c34450b", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Leo.sol b/contracts/token_holding_amount/erc20/Leo.sol index 6de696e..4896ca7 100644 --- a/contracts/token_holding_amount/erc20/Leo.sol +++ b/contracts/token_holding_amount/erc20/Leo.sol @@ -22,33 +22,26 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Leo { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3"; - } - - function getTokenName() internal pure returns (string memory) { - return "leo"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 10 * Constants.decimals_factor; - ranges[2] = 30 * Constants.decimals_factor; - ranges[3] = 80 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](6); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x2af5d2ad76741191d15dfe7bf6ac92d4bd912ca3", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Link.sol b/contracts/token_holding_amount/erc20/Link.sol index b66846b..b25cf56 100644 --- a/contracts/token_holding_amount/erc20/Link.sol +++ b/contracts/token_holding_amount/erc20/Link.sol @@ -22,37 +22,36 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Link { - function getTokenBscAddress() internal pure returns (string memory) { - return "0xf8a0bf9cf54bb92f17374d9e9a321e6a111a51bd"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x514910771af9ca656af840dff83e8264ecf986ca"; - } - - function getTokenName() internal pure returns (string memory) { - return "link"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0xf8a0bf9cf54bb92f17374d9e9a321e6a111a51bd", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Ethereum, + "0x514910771af9ca656af840dff83e8264ecf986ca", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Lit.sol b/contracts/token_holding_amount/erc20/Lit.sol index 955bbd1..3514d26 100644 --- a/contracts/token_holding_amount/erc20/Lit.sol +++ b/contracts/token_holding_amount/erc20/Lit.sol @@ -22,37 +22,37 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Lit { - function getTokenBscAddress() internal pure returns (string memory) { - return "0xb59490ab09a0f526cc7305822ac65f2ab12f9723"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xb59490ab09a0f526cc7305822ac65f2ab12f9723"; - } - - function getTokenName() internal pure returns (string memory) { - return "lit"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0xb59490ab09a0f526cc7305822ac65f2ab12f9723", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Ethereum, + "0xb59490ab09a0f526cc7305822ac65f2ab12f9723", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Matic.sol b/contracts/token_holding_amount/erc20/Matic.sol index c6ca4f0..fbc3881 100644 --- a/contracts/token_holding_amount/erc20/Matic.sol +++ b/contracts/token_holding_amount/erc20/Matic.sol @@ -22,37 +22,37 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Matic { - function getTokenBscAddress() internal pure returns (string memory) { - return "0xcc42724c6683b7e57334c4e856f4c9965ed682bd"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0"; - } - - function getTokenName() internal pure returns (string memory) { - return "matic"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0xcc42724c6683b7e57334c4e856f4c9965ed682bd", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Ethereum, + "0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Mcrt.sol b/contracts/token_holding_amount/erc20/Mcrt.sol index 47e8e76..4ddedc5 100644 --- a/contracts/token_holding_amount/erc20/Mcrt.sol +++ b/contracts/token_holding_amount/erc20/Mcrt.sol @@ -22,32 +22,38 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Mcrt { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x4b8285aB433D8f69CB48d5Ad62b415ed1a221e4f"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xde16ce60804a881e9f8c4ebb3824646edecd478d"; - } - function getTokenName() internal pure returns (string memory) { - return "mcrt"; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](6); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 2000 * Constants.decimals_factor; + ranges[2] = 10000 * Constants.decimals_factor; + ranges[3] = 50000 * Constants.decimals_factor; + ranges[4] = 150000 * Constants.decimals_factor; + ranges[5] = 500000 * Constants.decimals_factor; - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](6); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 2000 * Constants.decimals_factor; - ranges[2] = 10000 * Constants.decimals_factor; - ranges[3] = 50000 * Constants.decimals_factor; - ranges[4] = 150000 * Constants.decimals_factor; - ranges[5] = 500000 * Constants.decimals_factor; + return ranges; + } - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](3); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xde16ce60804a881e9f8c4ebb3824646edecd478d", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x4b8285aB433D8f69CB48d5Ad62b415ed1a221e4f", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[2] = TokenInfo( + Web3Networks.Solana, + "FADm4QuSUF1K526LvTjvbJjKzeeipP6bj5bSzp3r6ipq", + DataProviderTypes.MoralisClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Nfp.sol b/contracts/token_holding_amount/erc20/Nfp.sol index 6c726f5..cad423d 100644 --- a/contracts/token_holding_amount/erc20/Nfp.sol +++ b/contracts/token_holding_amount/erc20/Nfp.sol @@ -22,37 +22,31 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Nfp { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x75e8ddb518bb757b4282cd5b83bb70d4101d12fb"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return ""; - } - - function getTokenName() internal pure returns (string memory) { - return "nfp"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Bsc, + "0x75e8ddb518bb757b4282cd5b83bb70d4101d12fb", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/People.sol b/contracts/token_holding_amount/erc20/People.sol index 63d24c4..bd9b3a3 100644 --- a/contracts/token_holding_amount/erc20/People.sol +++ b/contracts/token_holding_amount/erc20/People.sol @@ -22,37 +22,31 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library People { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x7a58c0be72be218b41c608b7fe7c5bb630736c71"; - } - - function getTokenName() internal pure returns (string memory) { - return "people"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x7a58c0be72be218b41c608b7fe7c5bb630736c71", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Shib.sol b/contracts/token_holding_amount/erc20/Shib.sol index 0345085..e58e8d0 100644 --- a/contracts/token_holding_amount/erc20/Shib.sol +++ b/contracts/token_holding_amount/erc20/Shib.sol @@ -22,35 +22,28 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Shib { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce"; - } - - function getTokenName() internal pure returns (string memory) { - return "shib"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](8); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 400000 * Constants.decimals_factor; - ranges[2] = 2000000 * Constants.decimals_factor; - ranges[3] = 10000000 * Constants.decimals_factor; - ranges[4] = 20000000 * Constants.decimals_factor; - ranges[5] = 40000000 * Constants.decimals_factor; - ranges[6] = 100000000 * Constants.decimals_factor; - ranges[7] = 200000000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](8); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 400000 * Constants.decimals_factor; + ranges[2] = 2000000 * Constants.decimals_factor; + ranges[3] = 10000000 * Constants.decimals_factor; + ranges[4] = 20000000 * Constants.decimals_factor; + ranges[5] = 40000000 * Constants.decimals_factor; + ranges[6] = 100000000 * Constants.decimals_factor; + ranges[7] = 200000000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x95ad61b0a150d79219dcf64e1e6cc01f0b64c4ce", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Sol.sol b/contracts/token_holding_amount/erc20/Sol.sol index 79a69b8..0feb8d9 100644 --- a/contracts/token_holding_amount/erc20/Sol.sol +++ b/contracts/token_holding_amount/erc20/Sol.sol @@ -22,37 +22,42 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Sol { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x570a5d26f7765ecb712c0924e4de545b89fd43df"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x5288738df1aeb0894713de903e1d0c001eeb7644"; - } - - function getTokenName() internal pure returns (string memory) { - return "sol"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](3); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x5288738df1aeb0894713de903e1d0c001eeb7644", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x570a5d26f7765ecb712c0924e4de545b89fd43df", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[2] = TokenInfo( + Web3Networks.Solana, + "Native Token", + DataProviderTypes.MoralisClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/SpaceId.sol b/contracts/token_holding_amount/erc20/SpaceId.sol index 8579e1f..27e9a6f 100644 --- a/contracts/token_holding_amount/erc20/SpaceId.sol +++ b/contracts/token_holding_amount/erc20/SpaceId.sol @@ -22,37 +22,36 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library SpaceId { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x2dff88a56767223a5529ea5960da7a3f5f766406"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x2dff88a56767223a5529ea5960da7a3f5f766406"; - } - - function getTokenName() internal pure returns (string memory) { - return "spaceid"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x2dff88a56767223a5529ea5960da7a3f5f766406", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x2dff88a56767223a5529ea5960da7a3f5f766406", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Ton.sol b/contracts/token_holding_amount/erc20/Ton.sol index 1bb62a4..952a834 100644 --- a/contracts/token_holding_amount/erc20/Ton.sol +++ b/contracts/token_holding_amount/erc20/Ton.sol @@ -22,37 +22,36 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Ton { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x76a797a59ba2c17726896976b7b3747bfd1d220f"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x582d872a1b094fc48f5de31d3b73f2d9be47def1"; - } - - function getTokenName() internal pure returns (string memory) { - return "ton"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x582d872a1b094fc48f5de31d3b73f2d9be47def1", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x76a797a59ba2c17726896976b7b3747bfd1d220f", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Trx.sol b/contracts/token_holding_amount/erc20/Trx.sol index 0329108..b0b8928 100644 --- a/contracts/token_holding_amount/erc20/Trx.sol +++ b/contracts/token_holding_amount/erc20/Trx.sol @@ -22,37 +22,36 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Trx { - function getTokenBscAddress() internal pure returns (string memory) { - return "0xCE7de646e7208a4Ef112cb6ed5038FA6cC6b12e3"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x50327c6c5a14dcade707abad2e27eb517df87ab5"; - } - - function getTokenName() internal pure returns (string memory) { - return "trx"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x50327c6c5a14dcade707abad2e27eb517df87ab5", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0xCE7de646e7208a4Ef112cb6ed5038FA6cC6b12e3", + DataProviderTypes.NoderealClient, + 18 + ); + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Tusd.sol b/contracts/token_holding_amount/erc20/Tusd.sol index cc26b63..9cc54d7 100644 --- a/contracts/token_holding_amount/erc20/Tusd.sol +++ b/contracts/token_holding_amount/erc20/Tusd.sol @@ -22,36 +22,37 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Tusd { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x0000000000085d4780b73119b644ae5ecd22b376"; - } - function getTokenName() internal pure returns (string memory) { - return "tusd"; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; + return ranges; + } - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x0000000000085d4780b73119b644ae5ecd22b376", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x40af3827F39D0EAcBF4A168f8D4ee67c121D11c9", + DataProviderTypes.NoderealClient, + 18 + ); - return networks; - } + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Uni.sol b/contracts/token_holding_amount/erc20/Uni.sol index 9a5c0ef..94aa3ef 100644 --- a/contracts/token_holding_amount/erc20/Uni.sol +++ b/contracts/token_holding_amount/erc20/Uni.sol @@ -22,35 +22,42 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Uni { - function getTokenBscAddress() internal pure returns (string memory) { - return "0xbf5140a22578168fd562dccf235e5d43a02ce9b1"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984"; - } - function getTokenName() internal pure returns (string memory) { - return "uni"; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](9); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; + ranges[8] = 5000 * Constants.decimals_factor; - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 10 * Constants.decimals_factor; - ranges[2] = 30 * Constants.decimals_factor; - ranges[3] = 80 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 1000 * Constants.decimals_factor; - ranges[7] = 2000 * Constants.decimals_factor; - ranges[8] = 5000 * Constants.decimals_factor; + return ranges; + } - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](3); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x1f9840a85d5af5bf1d1762f925bdaddc4201f984", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0xbf5140a22578168fd562dccf235e5d43a02ce9b1", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[2] = TokenInfo( + Web3Networks.Solana, + "8FU95xFJhUUkyyCLU13HSzDLs7oC4QZdXQHL6SCeab36", + DataProviderTypes.MoralisClient, + 18 + ); - return networks; - } + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Usdc.sol b/contracts/token_holding_amount/erc20/Usdc.sol index 6fc3e50..628fbe0 100644 --- a/contracts/token_holding_amount/erc20/Usdc.sol +++ b/contracts/token_holding_amount/erc20/Usdc.sol @@ -6,35 +6,42 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Usdc { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"; - } - function getTokenName() internal pure returns (string memory) { - return "usdc"; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](9); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 10 * Constants.decimals_factor; + ranges[2] = 30 * Constants.decimals_factor; + ranges[3] = 80 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 1000 * Constants.decimals_factor; + ranges[7] = 2000 * Constants.decimals_factor; + ranges[8] = 5000 * Constants.decimals_factor; - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](9); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 10 * Constants.decimals_factor; - ranges[2] = 30 * Constants.decimals_factor; - ranges[3] = 80 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 1000 * Constants.decimals_factor; - ranges[7] = 2000 * Constants.decimals_factor; - ranges[8] = 5000 * Constants.decimals_factor; + return ranges; + } - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](3); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[2] = TokenInfo( + Web3Networks.Solana, + "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", + DataProviderTypes.MoralisClient, + 18 + ); - return networks; - } + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Usdd.sol b/contracts/token_holding_amount/erc20/Usdd.sol index 8543184..cf003c6 100644 --- a/contracts/token_holding_amount/erc20/Usdd.sol +++ b/contracts/token_holding_amount/erc20/Usdd.sol @@ -22,36 +22,37 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Usdd { - function getTokenBscAddress() internal pure returns (string memory) { - return "0xd17479997f34dd9156deef8f95a52d81d265be9c"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x0c10bf8fcb7bf5412187a595ab97a3609160b5c6"; - } - function getTokenName() internal pure returns (string memory) { - return "usdd"; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; + return ranges; + } - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x0c10bf8fcb7bf5412187a595ab97a3609160b5c6", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0xd17479997f34dd9156deef8f95a52d81d265be9c", + DataProviderTypes.NoderealClient, + 18 + ); - return networks; - } + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Usdt.sol b/contracts/token_holding_amount/erc20/Usdt.sol index acdb77a..00688ef 100644 --- a/contracts/token_holding_amount/erc20/Usdt.sol +++ b/contracts/token_holding_amount/erc20/Usdt.sol @@ -22,37 +22,37 @@ import "../../libraries/Identities.sol"; import "../Constants.sol"; library Usdt { - function getTokenBscAddress() internal pure returns (string memory) { - return "0x55d398326f99059ff775485246999027b3197955"; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0xdac17f958d2ee523a2206206994597c13d831ec7"; - } - - function getTokenName() internal pure returns (string memory) { - return "usdt"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](10); - ranges[0] = 0 * Constants.decimals_factor; - ranges[1] = 1 * Constants.decimals_factor; - ranges[2] = 50 * Constants.decimals_factor; - ranges[3] = 100 * Constants.decimals_factor; - ranges[4] = 200 * Constants.decimals_factor; - ranges[5] = 500 * Constants.decimals_factor; - ranges[6] = 800 * Constants.decimals_factor; - ranges[7] = 1200 * Constants.decimals_factor; - ranges[8] = 1600 * Constants.decimals_factor; - ranges[9] = 3000 * Constants.decimals_factor; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](10); + ranges[0] = 0 * Constants.decimals_factor; + ranges[1] = 1 * Constants.decimals_factor; + ranges[2] = 50 * Constants.decimals_factor; + ranges[3] = 100 * Constants.decimals_factor; + ranges[4] = 200 * Constants.decimals_factor; + ranges[5] = 500 * Constants.decimals_factor; + ranges[6] = 800 * Constants.decimals_factor; + ranges[7] = 1200 * Constants.decimals_factor; + ranges[8] = 1600 * Constants.decimals_factor; + ranges[9] = 3000 * Constants.decimals_factor; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](2); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0xdac17f958d2ee523a2206206994597c13d831ec7", + DataProviderTypes.NoderealClient, + 18 + ); + tokenInfoList[1] = TokenInfo( + Web3Networks.Bsc, + "0x55d398326f99059ff775485246999027b3197955", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } diff --git a/contracts/token_holding_amount/erc20/Wbtc.sol b/contracts/token_holding_amount/erc20/Wbtc.sol index c6e3600..e34c393 100644 --- a/contracts/token_holding_amount/erc20/Wbtc.sol +++ b/contracts/token_holding_amount/erc20/Wbtc.sol @@ -19,45 +19,40 @@ pragma solidity ^0.8.8; import "../../libraries/Identities.sol"; - +import "../Constants.sol"; library Wbtc { - function getTokenBscAddress() internal pure returns (string memory) { - return ""; - } - function getTokenEthereumAddress() internal pure returns (string memory) { - return "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"; - } - function getTokenName() internal pure returns (string memory) { - return "wbtc"; - } - - function getTokenRanges() internal pure returns (uint256[] memory) { - uint256[] memory ranges = new uint256[](14); - - // all ranges multiplied by decimals_factor(1000). - // pub const BTC_AMOUNT_RANGE: [f64; 14] =[0.0, 0.001, 0.1, 0.3, 0.6, 1.0, 2.0, 5.0, 10.0, 15.0, 25.0, 30.0, 40.0, 50.0]; - ranges[0] = 0; - ranges[1] = 1; - ranges[2] = 100; - ranges[3] = 300; - ranges[4] = 600; - ranges[5] = 1000; - ranges[6] = 2000; - ranges[7] = 5000; - ranges[8] = 10000; - ranges[9] = 15000; - ranges[10] = 25000; - ranges[11] = 30000; - ranges[12] = 40000; - ranges[13] = 50000; - - return ranges; - } - function getTokenNetworks() internal pure returns (uint32[] memory) { - uint32[] memory networks = new uint32[](2); - networks[0] = Web3Networks.Ethereum; - networks[1] = Web3Networks.Bsc; - - return networks; - } + function getTokenRanges() internal pure returns (uint256[] memory) { + uint256[] memory ranges = new uint256[](14); + + // all ranges multiplied by decimals_factor(1000). + // pub const BTC_AMOUNT_RANGE: [f64; 14] =[0.0, 0.001, 0.1, 0.3, 0.6, 1.0, 2.0, 5.0, 10.0, 15.0, 25.0, 30.0, 40.0, 50.0]; + ranges[0] = 0; + ranges[1] = 1; + ranges[2] = 100; + ranges[3] = 300; + ranges[4] = 600; + ranges[5] = 1000; + ranges[6] = 2000; + ranges[7] = 5000; + ranges[8] = 10000; + ranges[9] = 15000; + ranges[10] = 25000; + ranges[11] = 30000; + ranges[12] = 40000; + ranges[13] = 50000; + + return ranges; + } + + function getTokenInfo() internal pure returns (TokenInfo[] memory) { + TokenInfo[] memory tokenInfoList = new TokenInfo[](1); + tokenInfoList[0] = TokenInfo( + Web3Networks.Ethereum, + "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599", + DataProviderTypes.NoderealClient, + 18 + ); + + return tokenInfoList; + } } From bdf6693c7cbe428183320a9452e3b97a2c193e43 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Wed, 7 Aug 2024 16:24:41 +0800 Subject: [PATCH 02/45] copy tests --- tests/token-holding-amount.ts | 433 ++++++++++++++++++++++++++++++++++ tests/utils/helper.ts | 121 ++++++++++ 2 files changed, 554 insertions(+) create mode 100644 tests/token-holding-amount.ts create mode 100644 tests/utils/helper.ts diff --git a/tests/token-holding-amount.ts b/tests/token-holding-amount.ts new file mode 100644 index 0000000..d422acb --- /dev/null +++ b/tests/token-holding-amount.ts @@ -0,0 +1,433 @@ +import { expect } from 'chai' +import { ethers } from 'hardhat' +import { loadFixture } from '@nomicfoundation/hardhat-network-helpers' +import { + assembleSchemaUrl, + deployContract, + deployMockContract, + expectAssertionResult, + IdentityType, + Web3Network, + Op, +} from './utils/helper' + +describe('TokenHoldingAmount', () => { + const deployFixture = async () => { + await deployMockContract('MockHttpGetString') + await deployMockContract('MockHttpGetI64') + await deployMockContract('MockIdentityToString') + await deployMockContract('MockParseDecimal') + return await deployContract('TokenMapping') + } + + const expectResult = async ( + contract: any, + val: any, + assertion: any, + result: boolean + ) => { + await expectAssertionResult(contract, val, { + tokenType: 'Token Holding Amount', + tokenDesc: 'The amount of a particular token you are holding', + schemaUrl: assembleSchemaUrl('25-token-holding-amount/1-1-3.json'), + assertions: [assertion], + result, + }) + } + + const generateParams = (token: string) => + ethers.AbiCoder.defaultAbiCoder().encode(['string'], [token]) + + describe('BRC20', () => { + const secrets = ['0x12345', '0x12345'] + + const expectOrdiFalseResult = (contract: any, val: any) => + expectResult( + contract, + val, + { + and: [ + { + src: '$token', + op: Op.EQ, + dst: 'ordi', + }, + { + src: '$holding_amount', + op: Op.GTE, + dst: '0', + }, + { + src: '$holding_amount', + op: Op.LT, + dst: '1', + }, + ], + }, + false + ) + + it('should return result false when amount = 0', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes( + '13MG12FZ2bDzWrLy2pQGvpq6LdYjw2sfmy' + ), + networks: [Web3Network.BitcoinP2sh], + }, + ], + // secrets + secrets, + // params + generateParams('ordi') + ) + await expectOrdiFalseResult(TokenMapping, val) + }) + + it('should return result true when amount < 1', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes( + '1DtMsV2JDUVccDU5V5zdV4mdBf5KRHaJ7Z' + ), + networks: [Web3Network.BitcoinP2tr], + }, + ], + // secrets + secrets, + // params + generateParams('ordi') + ) + await expectResult( + TokenMapping, + val, + { + and: [ + { + src: '$token', + op: Op.EQ, + dst: 'ordi', + }, + { + src: '$holding_amount', + op: Op.GTE, + dst: '0', + }, + { + src: '$holding_amount', + op: Op.LT, + dst: '1', + }, + ], + }, + true + ) + }) + + it('should return result true when amount = 1', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes( + '17dUgEh3jSnGrNmtMaPrVHvVgjNiqkHHhb' + ), + networks: [Web3Network.BitcoinP2tr], + }, + ], + // secrets + secrets, + // params + generateParams('ordi') + ) + await expectResult( + TokenMapping, + val, + { + and: [ + { + src: '$token', + op: Op.EQ, + dst: 'ordi', + }, + { + src: '$holding_amount', + op: Op.GTE, + dst: '1', + }, + { + src: '$holding_amount', + op: Op.LT, + dst: '5', + }, + ], + }, + true + ) + }) + + it('should return result true when amount > 1', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes( + '1BCtecRbWLi1NYzfj9CNszJhCh3c2LXGPd' + ), + networks: [Web3Network.BitcoinP2wsh], + }, + ], + // secrets + secrets, + // params + generateParams('ordi') + ) + await expectResult( + TokenMapping, + val, + { + and: [ + { + src: '$token', + op: Op.EQ, + dst: 'ordi', + }, + { + src: '$holding_amount', + op: Op.GTE, + dst: '1', + }, + { + src: '$holding_amount', + op: Op.LT, + dst: '5', + }, + ], + }, + true + ) + }) + + it('should return result true when amount > 500', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes( + '1MWAjD8eSqHro35WVcWV3N3VGfyzCsiMVM' + ), + networks: [Web3Network.BitcoinP2pkh], + }, + ], + // secrets + ['0x12345', '0x12345'], + // params + generateParams('ordi') + ) + await expectResult( + TokenMapping, + val, + { + and: [ + { + src: '$token', + op: Op.EQ, + dst: 'ordi', + }, + { + src: '$holding_amount', + op: Op.GTE, + dst: '500', + }, + ], + }, + true + ) + }) + + it('should return result false if fail to call identity_to_string', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes('identity_to_string_fail'), + networks: [Web3Network.BitcoinP2sh], + }, + ], + // secrets + secrets, + // params + generateParams('ordi') + ) + await expectOrdiFalseResult(TokenMapping, val) + }) + + it('should return result false if fail to call http_get_string', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes('httt_get_string_fail'), + networks: [Web3Network.BitcoinP2sh], + }, + ], + // secrets + secrets, + // params + generateParams('ordi') + ) + await expectOrdiFalseResult(TokenMapping, val) + }) + + it('should return result false if fail to call parse_decimal_fail', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes('parse_decimal_fail'), + networks: [Web3Network.BitcoinP2sh], + }, + ], + // secrets + secrets, + // params + generateParams('ordi') + ) + await expectOrdiFalseResult(TokenMapping, val) + }) + + it('should throw eror if token name not exist', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes( + '17fQAnS9FSUw5zBYY26DURYE4PXiemNKgb' + ), + networks: [Web3Network.BitcoinP2sh], + }, + ], + // secrets + secrets, + // params + generateParams('not_exist_token_name') + ) + await expect(val).to.be.rejectedWith( + Error, + `VM Exception while processing transaction: reverted with reason string 'Token not supported or not found'` + ) + }) + }) + + describe('Btc', () => { + const secrets = ['0x12345', '0x12345'] + it('should return result false when amount = 0', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes( + 'bc1pqdk57wus42wuh989k3v700n6w584andwg7pvxnrd69ag3rs94cfq40qx2y' + ), + networks: [Web3Network.BitcoinP2wpkh], + }, + ], + // secrets + secrets, + // params + generateParams('btc') + ) + expectResult( + TokenMapping, + val, + { + and: [ + { + src: '$token', + op: Op.EQ, + dst: 'btc', + }, + { + src: '$holding_amount', + op: Op.GTE, + dst: '0', + }, + { + src: '$holding_amount', + op: Op.LT, + dst: '0.001', + }, + ], + }, + false + ) + }) + it('should return result true when amount < 0.3', async () => { + const { TokenMapping } = await loadFixture(deployFixture) + const val = TokenMapping.execute( + // identities + [ + { + identity_type: IdentityType.Bitcoin, + value: ethers.toUtf8Bytes( + 'bc1pg6qjsrxwg9cvqx0gxstl0t74ynhs2528t7rp0u7acl6etwn5t6vswxrzpa' + ), + networks: [Web3Network.BitcoinP2wpkh], + }, + ], + // secrets + secrets, + // params + generateParams('btc') + ) + await expectResult( + TokenMapping, + val, + { + and: [ + { + src: '$token', + op: Op.EQ, + dst: 'btc', + }, + { + src: '$holding_amount', + op: Op.GTE, + dst: '0.1', + }, + { + src: '$holding_amount', + op: Op.LT, + dst: '0.3', + }, + ], + }, + true + ) + }) + }) +}) diff --git a/tests/utils/helper.ts b/tests/utils/helper.ts new file mode 100644 index 0000000..7fd51e8 --- /dev/null +++ b/tests/utils/helper.ts @@ -0,0 +1,121 @@ +import { ethers } from 'hardhat' +import { expect } from 'chai' + +export const ASSERTION_GENERATED_EVENT_NAME = 'DynamicAssertionGenerated' + +export enum IdentityType { + // web2 + Twitter = 0, + Discord = 1, + Github = 2, + + // web3 + Substrate = 3, + Evm = 4, + Bitcoin = 5, + Solana = 6, +} + +export enum Web3Network { + // substrate + Polkadot = 0, + Kusama = 1, + Litentry = 2, + Litmus = 3, + LitentryRococo = 4, + Khala = 5, + SubstrateTestnet = 6, + + // evm + Ethereum = 7, + Bsc = 8, + Polygon = 14, + Arbitrum = 15, + Solana = 16, + Combo = 17, + + // btc + BitcoinP2tr = 9, + BitcoinP2pkh = 10, + BitcoinP2sh = 11, + BitcoinP2wpkh = 12, + BitcoinP2wsh = 13, +} + +export enum Op { + GT = '>', + GTE = '>=', + EQ = '==', + LT = '<', + LTE = '<=', + NE = '!=', +} + +export enum PrecompileAddresses { + HTTP_GET_STRING = '0x00000000000000000000000000000000000003EA', + IDENTITY_TO_STRING = '0x000000000000000000000000000000000000041C', + PARSE_DECIMAL = '0x000000000000000000000000000000000000041E', + HTTP_GET_I64 = '0x00000000000000000000000000000000000003E8', +} + +const mockContractAddressMapping: { [key: string]: string } = { + MockHttpGetString: PrecompileAddresses.HTTP_GET_STRING, + MockHttpGetI64: PrecompileAddresses.HTTP_GET_I64, + MockIdentityToString: PrecompileAddresses.IDENTITY_TO_STRING, + MockParseDecimal: PrecompileAddresses.PARSE_DECIMAL, +} + +export async function deployMockContract( + contractName: string, + contractAddress?: string +): Promise { + const Contract = await ethers.getContractFactory(contractName) + const contract = await Contract.deploy() + + const _contractAddress = + mockContractAddressMapping[contractName] ?? contractAddress ?? '' + await ethers.provider.send('hardhat_setCode', [ + _contractAddress, + await ethers.provider.getCode(contract.target), + ]) +} + +export async function deployContract(contract: string) { + const SourceContract = await ethers.getContractFactory(contract) + const sourceContract = await SourceContract.deploy() + + const ProxyContract = await ethers.getContractFactory( + 'ProxyDynamicAssertion' + ) + const proxyContract = await ProxyContract.deploy(sourceContract.target) + + return { [contract]: proxyContract } +} + +export function assembleSchemaUrl(path: string) { + return `https://raw.githubusercontent.com/litentry/vc-jsonschema/main/dist/schemas/${path}` +} + +type ExpectResult = { + tokenType: string + tokenDesc: string + schemaUrl: string + assertions: any[] + result: boolean +} + +export const expectAssertionResult = async ( + contract: any, + val: any, + expectResult: ExpectResult +) => { + await expect(val) + .to.emit(contract, ASSERTION_GENERATED_EVENT_NAME) + .withArgs( + expectResult.tokenDesc, + expectResult.tokenType, + expectResult.assertions.map((a: any) => JSON.stringify(a)), + expectResult.schemaUrl, + expectResult.result + ) +} From 0d01a7755bc29966978ccb49094f200b0b2b4188 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Wed, 7 Aug 2024 16:25:37 +0800 Subject: [PATCH 03/45] copy configuration --- .gitignore | 19 ++++++++---- .prettierignore | 3 +- .prettierrc | 40 ++++++++++++------------- README.md | 76 +++++++++++++++++++++++++---------------------- hardhat.config.ts | 26 +++++++++------- package.json | 43 +++++++++++++++------------ test/contracts.ts | 27 ----------------- tsconfig.json | 18 +++++------ 8 files changed, 124 insertions(+), 128 deletions(-) delete mode 100644 test/contracts.ts diff --git a/.gitignore b/.gitignore index e8c12ff..2542df1 100644 --- a/.gitignore +++ b/.gitignore @@ -2,16 +2,23 @@ node_modules .env # Hardhat files -/cache -/artifacts +cache +artifacts # TypeChain files -/typechain -/typechain-types +typechain +typechain-types # solidity-coverage files -/coverage -/coverage.json +coverage +coverage.json # Hardhat Ignition default folder for deployments against a local node ignition/deployments/chain-31337 + +.deps +!*.sol + +# Remix +compiler_config.json +remix-compiler.config.js diff --git a/.prettierignore b/.prettierignore index 8187acd..2765909 100644 --- a/.prettierignore +++ b/.prettierignore @@ -4,4 +4,5 @@ node_modules .env .idea typechain-types -coverage \ No newline at end of file +coverage +pnpm-lock.yaml diff --git a/.prettierrc b/.prettierrc index dd11f48..0ba9a58 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,22 +1,22 @@ { - "plugins": ["prettier-plugin-solidity"], - "trailingComma": "es5", - "tabWidth": 4, - "semi": false, - "singleQuote": false, - "useTabs": true, - "printWidth": 80, - "overrides": [ - { - "files": "*.sol", - "options": { - "parser": "solidity-parse", - "printWidth": 80, - "tabWidth": 4, - "useTabs": true, - "singleQuote": false, - "bracketSpacing": true - } - } - ] + "plugins": ["prettier-plugin-solidity"], + "trailingComma": "es5", + "tabWidth": 4, + "semi": false, + "singleQuote": true, + "useTabs": false, + "printWidth": 80, + "overrides": [ + { + "files": "*.sol", + "options": { + "parser": "solidity-parse", + "printWidth": 80, + "tabWidth": 4, + "useTabs": false, + "singleQuote": false, + "bracketSpacing": true + } + } + ] } diff --git a/README.md b/README.md index 99c941b..eae39a2 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,59 @@ -![Logo](https://avatars.githubusercontent.com/u/51339301?s=200&v=4) +## Description -## Litentry Dynamic Assertion Contracts +Dynamic VC assertion contract written by solidity, using [Hardhat](https://hardhat.org) for compile and test. -This repo is the contracts part separated from the [litentry-parachain](https://github.com/litentry/litentry-parachain). +## Environment setup -## System Requirements +- Install [nvm](https://github.com/nvm-sh/nvm) +- Inside the repository, run `nvm use` to set the correct Node version. + - If the version is not installed, run `nvm install`. -- Node.js -- Typescript -- [Hardhat](https://hardhat.org/hardhat-runner/docs/getting-started#overview) -- Solidity +## Installation -## Configuration +```shell +nvm use +corepack enable pnpm +pnpm install +``` -- [Solidity versions](https://hardhat.org/hardhat-runner/docs/advanced/multiple-solidity-versions) -- [Configuration Variables](https://hardhat.org/hardhat-runner/docs/config#configuration) +## Usage -## Getting started +### Compile -1. Install Node V18 +1. Using hardhat. -2. Clone this repo +```shell +pnpm compile +``` -3. Switch to the right Node.js version using NVM. +After compiled, the contract bytecode will generate in file `artifacts/contracts/**/{contractName}.sol/{contractName}.json`, e.g. the bytecode of A1 is in the file `artifacts/contracts/A1.sol/A1.json`. - ```typescript - # From the repo's root - nvm use - ``` +2. Using [Remix IDE](https://remix.ethereum.org). -4. Install dependencies with `npm` +Should use the `dynamic` as your project root path in Remix IDE as below: - ```typescript - # From the repo's root - npm install - ``` +```shell +remixd -s your_repo_path/tee-worker/litentry/core/assertion-build/src/dynamic --remix-ide https://remix.ethereum.org +``` -5. Compile contracts +If you have not install remixd before, rub below script to install it. - ```typescript - # From the repo's root - npm run compile or npx hardhat compile - ``` +```shell +npm install -g @remix-project/remixd +``` - [Compiled directory structure](https://hardhat.org/hardhat-runner/docs/advanced/artifacts#directory-structure) +### Testing -6. Run ts-tests +- Test all: `pnpm test`. - ```typescript - # From the repo's root - npm run test:all or npx hardhat test - ``` +```shell +pnpm test +``` - [More tesing contracts details](https://hardhat.org/hardhat-runner/docs/guides/test-contracts) +- Test single file: `pnpm test {testFilePath}`. + +Example: + +```shell +pnpm test tests/token-holding-amount.ts +``` diff --git a/hardhat.config.ts b/hardhat.config.ts index bfcb16b..b9be3e1 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,13 +1,19 @@ -import { HardhatUserConfig } from "hardhat/config" -import "@nomicfoundation/hardhat-toolbox" - -const config = { - solidity: "0.8.11", - networks: { - hardhat: { - allowUnlimitedContractSize: true, - }, - }, +import { HardhatUserConfig } from 'hardhat/config' +import '@nomicfoundation/hardhat-toolbox' +const config: HardhatUserConfig = { + solidity: '0.8.11', + paths: { + tests: './tests', + }, + networks: { + hardhat: { + allowUnlimitedContractSize: true, + accounts: { + accountsBalance: '1000000000000000000000', + }, + blockGasLimit: 1000000000, + }, + }, } export default config diff --git a/package.json b/package.json index f9318cd..9a835ef 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,26 @@ { - "name": "@litentry/contracts", - "description": "Litentry Dynamic Assertion Contracts", - "license": "MIT", - "author": "Litentry Dev Team", - "scripts": { - "clean": "npx hardhat clean", - "compile": "hardhat compile", - "fmt": "prettier --write --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --write .", - "fmt-check": "prettier --check --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --check .", - "test:all": "npx hardhat test" - }, - "devDependencies": { - "@nomicfoundation/hardhat-toolbox": "^5.0.0", - "@openzeppelin/contracts": "^4.9.0", - "hardhat": "^2.22.5", - "prettier": "^3.3.1", - "prettier-plugin-solidity": "^1.3.1" - }, - "packageManager": "npm@10.5.0" + "name": "@litentry/contracts", + "description": "Litentry Dynamic Assertion Contracts", + "license": "MIT", + "author": "Litentry Dev Team", + "scripts": { + "clean": "npx hardhat clean", + "compile": "hardhat compile", + "format": "prettier --write --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --write .", + "check-format": "prettier --check --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --check .", + "test": "npx hardhat test" + }, + "devDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.6", + "@nomicfoundation/hardhat-network-helpers": "^1.0.11", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@openzeppelin/contracts": "^4.9.6", + "@types/chai-as-promised": "^7.1.8", + "chai-as-promised": "^8.0.0", + "ethers": "^6.13.1", + "hardhat": "^2.22.6", + "prettier": "^3.3.3", + "prettier-plugin-solidity": "^1.3.1" + }, + "packageManager": "pnpm@8.7.6" } diff --git a/test/contracts.ts b/test/contracts.ts deleted file mode 100644 index 11a6cf1..0000000 --- a/test/contracts.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { ethers, network } from "hardhat" -import { expect } from "chai" -// todo: add more tests -describe("contracts", () => { - it("should return the bytecode of the contracts", async () => { - const TokenMapping = await ethers.getContractFactory("TokenMapping") - const tokenMapping = await TokenMapping.deploy() - - const identities = [ - { - identity_type: 4, - value: "0xf7764F15Fd4F695fAD8dDd3e84F5293E6866FEFE", - networks: [7, 8], - }, - ] - - const secrets = [ - "0x23875d191b5cf587d54763ec32be12e64fdb2fe286ae32bd593d461c1d97a5389a1eae28845e3771ba49ed80e20aa4698f7c096156f91d2356f399e0a2e8789f63046fde437cb0ac9ba83e0dd6c1cb676d8411b94e91457870e37d4c8ca627ff04eb7daa1269044c64347bcf2d4619f27affb99fbd74d48fd31a7b4098655312fd69f1473fe3252a07f7080a0c41b5907e008d1456b2fcd73ce61273f131cd0ca5d632ea66c0bb4e8b6518d7cd3aea6300ab2ab995eccaafe73014302e848e023785463d2e5beb9050070f08213606166da439f5f5727b78ab557b41a3863512d23cf216e69d0e48a104354f4641150f84af53a6195a9c5439b7b40786876726a7972d74254b7160d2e484cb5f682eb74e83e94cf4500207bc256b99e5b7f916e0199d522e5ed8802760630e77d60dc7fa543beaffcd92623799ca5eecd7a7a0dde76e781a4ec76dea878fb0e3b67d192d0296ef7841abec0feefa5b5f3cfd73aa9759a1d2dc57b38f9c84ff590a9ecc48dbdb810d697fec159e0d1e124d6151", - ] - - const params = - "0x000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000036574630000000000000000000000000000000000000000000000000000000000" - const tx = await tokenMapping.execute(identities, secrets, params) - - await tx.wait() - }) -}) diff --git a/tsconfig.json b/tsconfig.json index 0e79616..74e6b64 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,11 +1,11 @@ { - "compilerOptions": { - "target": "es2020", - "module": "commonjs", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "resolveJsonModule": true - } + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + } } From 0f0d2e6c06a453ac566dc8690392b77b9730a7b5 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Wed, 7 Aug 2024 16:30:04 +0800 Subject: [PATCH 04/45] update lock file --- pnpm-lock.yaml | 3925 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3925 insertions(+) create mode 100644 pnpm-lock.yaml diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..287a3df --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3925 @@ +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +devDependencies: + '@nomicfoundation/hardhat-ethers': + specifier: ^3.0.6 + version: 3.0.6(ethers@6.13.2)(hardhat@2.22.7) + '@nomicfoundation/hardhat-network-helpers': + specifier: ^1.0.11 + version: 1.0.11(hardhat@2.22.7) + '@nomicfoundation/hardhat-toolbox': + specifier: ^5.0.0 + version: 5.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.7)(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition-ethers@0.15.5)(@nomicfoundation/hardhat-network-helpers@1.0.11)(@nomicfoundation/hardhat-verify@2.0.9)(@typechain/ethers-v6@0.5.1)(@typechain/hardhat@9.1.0)(@types/chai@4.3.17)(@types/mocha@10.0.7)(@types/node@22.1.0)(chai@4.5.0)(ethers@6.13.2)(hardhat-gas-reporter@1.0.10)(hardhat@2.22.7)(solidity-coverage@0.8.12)(ts-node@10.9.2)(typechain@8.3.2)(typescript@5.5.4) + '@openzeppelin/contracts': + specifier: ^4.9.6 + version: 4.9.6 + '@types/chai-as-promised': + specifier: ^7.1.8 + version: 7.1.8 + chai-as-promised: + specifier: ^8.0.0 + version: 8.0.0(chai@4.5.0) + ethers: + specifier: ^6.13.1 + version: 6.13.2 + hardhat: + specifier: ^2.22.6 + version: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + prettier: + specifier: ^3.3.3 + version: 3.3.3 + prettier-plugin-solidity: + specifier: ^1.3.1 + version: 1.3.1(prettier@3.3.3) + +packages: + + /@adraffy/ens-normalize@1.10.1: + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + dev: true + + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@ethereumjs/rlp@4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + 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.2.1 + 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.6.1: + resolution: {integrity: sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==} + 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/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 + + /@fastify/busboy@2.1.1: + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + dev: true + + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: 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.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: true + + /@noble/curves@1.4.2: + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + dependencies: + '@noble/hashes': 1.4.0 + dev: true + + /@noble/hashes@1.2.0: + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + dev: true + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: true + + /@noble/hashes@1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + 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.1 + dev: true + + /@nomicfoundation/edr-darwin-arm64@0.5.2: + resolution: {integrity: sha512-Gm4wOPKhbDjGTIRyFA2QUAPfCXA1AHxYOKt3yLSGJkQkdy9a5WW+qtqKeEKHc/+4wpJSLtsGQfpzyIzggFfo/A==} + engines: {node: '>= 18'} + dev: true + + /@nomicfoundation/edr-darwin-x64@0.5.2: + resolution: {integrity: sha512-ClyABq2dFCsrYEED3/UIO0c7p4H1/4vvlswFlqUyBpOkJccr75qIYvahOSJRM62WgUFRhbSS0OJXFRwc/PwmVg==} + engines: {node: '>= 18'} + dev: true + + /@nomicfoundation/edr-linux-arm64-gnu@0.5.2: + resolution: {integrity: sha512-HWMTVk1iOabfvU2RvrKLDgtFjJZTC42CpHiw2h6rfpsgRqMahvIlx2jdjWYzFNy1jZKPTN1AStQ/91MRrg5KnA==} + engines: {node: '>= 18'} + dev: true + + /@nomicfoundation/edr-linux-arm64-musl@0.5.2: + resolution: {integrity: sha512-CwsQ10xFx/QAD5y3/g5alm9+jFVuhc7uYMhrZAu9UVF+KtVjeCvafj0PaVsZ8qyijjqVuVsJ8hD1x5ob7SMcGg==} + engines: {node: '>= 18'} + dev: true + + /@nomicfoundation/edr-linux-x64-gnu@0.5.2: + resolution: {integrity: sha512-CWVCEdhWJ3fmUpzWHCRnC0/VLBDbqtqTGTR6yyY1Ep3S3BOrHEAvt7h5gx85r2vLcztisu2vlDq51auie4IU1A==} + engines: {node: '>= 18'} + dev: true + + /@nomicfoundation/edr-linux-x64-musl@0.5.2: + resolution: {integrity: sha512-+aJDfwhkddy2pP5u1ISg3IZVAm0dO836tRlDTFWtvvSMQ5hRGqPcWwlsbobhDQsIxhPJyT7phL0orCg5W3WMeA==} + engines: {node: '>= 18'} + dev: true + + /@nomicfoundation/edr-win32-x64-msvc@0.5.2: + resolution: {integrity: sha512-CcvvuA3sAv7liFNPsIR/68YlH6rrybKzYttLlMr80d4GKJjwJ5OKb3YgE6FdZZnOfP19HEHhsLcE0DPLtY3r0w==} + engines: {node: '>= 18'} + dev: true + + /@nomicfoundation/edr@0.5.2: + resolution: {integrity: sha512-hW/iLvUQZNTVjFyX/I40rtKvvDOqUEyIi96T28YaLfmPL+3LW2lxmYLUXEJ6MI14HzqxDqrLyhf6IbjAa2r3Dw==} + engines: {node: '>= 18'} + dependencies: + '@nomicfoundation/edr-darwin-arm64': 0.5.2 + '@nomicfoundation/edr-darwin-x64': 0.5.2 + '@nomicfoundation/edr-linux-arm64-gnu': 0.5.2 + '@nomicfoundation/edr-linux-arm64-musl': 0.5.2 + '@nomicfoundation/edr-linux-x64-gnu': 0.5.2 + '@nomicfoundation/edr-linux-x64-musl': 0.5.2 + '@nomicfoundation/edr-win32-x64-msvc': 0.5.2 + dev: true + + /@nomicfoundation/ethereumjs-common@4.0.4: + resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==} + dependencies: + '@nomicfoundation/ethereumjs-util': 9.0.4 + transitivePeerDependencies: + - c-kzg + dev: true + + /@nomicfoundation/ethereumjs-rlp@5.0.4: + resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==} + engines: {node: '>=18'} + hasBin: true + dev: true + + /@nomicfoundation/ethereumjs-tx@5.0.4: + resolution: {integrity: sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-rlp': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 + ethereum-cryptography: 0.1.3 + dev: true + + /@nomicfoundation/ethereumjs-util@9.0.4: + resolution: {integrity: sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.4 + ethereum-cryptography: 0.1.3 + dev: true + + /@nomicfoundation/hardhat-chai-matchers@2.0.7(@nomicfoundation/hardhat-ethers@3.0.6)(chai@4.5.0)(ethers@6.13.2)(hardhat@2.22.7): + resolution: {integrity: sha512-RQfsiTwdf0SP+DtuNYvm4921X6VirCQq0Xyh+mnuGlTwEFSPZ/o27oQC+l+3Y/l48DDU7+ZcYBR+Fp+Rp94LfQ==} + peerDependencies: + '@nomicfoundation/hardhat-ethers': ^3.0.0 + chai: ^4.2.0 + ethers: ^6.1.0 + hardhat: ^2.9.4 + dependencies: + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2)(hardhat@2.22.7) + '@types/chai-as-promised': 7.1.8 + chai: 4.5.0 + chai-as-promised: 7.1.2(chai@4.5.0) + deep-eql: 4.1.4 + ethers: 6.13.2 + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + ordinal: 1.0.3 + dev: true + + /@nomicfoundation/hardhat-ethers@3.0.6(ethers@6.13.2)(hardhat@2.22.7): + resolution: {integrity: sha512-/xzkFQAaHQhmIAYOQmvHBPwL+NkwLzT9gRZBsgWUYeV+E6pzXsBQsHfRYbAZ3XEYare+T7S+5Tg/1KDJgepSkA==} + peerDependencies: + ethers: ^6.1.0 + hardhat: ^2.0.0 + dependencies: + debug: 4.3.6(supports-color@8.1.1) + ethers: 6.13.2 + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + lodash.isequal: 4.5.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@nomicfoundation/hardhat-ignition-ethers@0.15.5(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition@0.15.5)(@nomicfoundation/ignition-core@0.15.5)(ethers@6.13.2)(hardhat@2.22.7): + resolution: {integrity: sha512-W6s1QN9CFxzSVZS6w9Jcj3WLaK32z2FP5MxNU2OKY1Fn9ZzLr+miXbUbWYuRHl6dxrrl6sE8cv33Cybv19pmCg==} + peerDependencies: + '@nomicfoundation/hardhat-ethers': ^3.0.4 + '@nomicfoundation/hardhat-ignition': ^0.15.5 + '@nomicfoundation/ignition-core': ^0.15.5 + ethers: ^6.7.0 + hardhat: ^2.18.0 + dependencies: + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2)(hardhat@2.22.7) + '@nomicfoundation/hardhat-ignition': 0.15.5(@nomicfoundation/hardhat-verify@2.0.9)(hardhat@2.22.7) + '@nomicfoundation/ignition-core': 0.15.5 + ethers: 6.13.2 + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + dev: true + + /@nomicfoundation/hardhat-ignition@0.15.5(@nomicfoundation/hardhat-verify@2.0.9)(hardhat@2.22.7): + resolution: {integrity: sha512-Y5nhFXFqt4owA6Ooag8ZBFDF2RAZElMXViknVIsi3m45pbQimS50ti6FU8HxfRkDnBARa40CIn7UGV0hrelzDw==} + peerDependencies: + '@nomicfoundation/hardhat-verify': ^2.0.1 + hardhat: ^2.18.0 + dependencies: + '@nomicfoundation/hardhat-verify': 2.0.9(hardhat@2.22.7) + '@nomicfoundation/ignition-core': 0.15.5 + '@nomicfoundation/ignition-ui': 0.15.5 + chalk: 4.1.2 + debug: 4.3.6(supports-color@8.1.1) + fs-extra: 10.1.0 + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + prompts: 2.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@nomicfoundation/hardhat-network-helpers@1.0.11(hardhat@2.22.7): + resolution: {integrity: sha512-uGPL7QSKvxrHRU69dx8jzoBvuztlLCtyFsbgfXIwIjnO3dqZRz2GNMHJoO3C3dIiUNM6jdNF4AUnoQKDscdYrA==} + peerDependencies: + hardhat: ^2.9.5 + dependencies: + ethereumjs-util: 7.1.5 + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + dev: true + + /@nomicfoundation/hardhat-toolbox@5.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.7)(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition-ethers@0.15.5)(@nomicfoundation/hardhat-network-helpers@1.0.11)(@nomicfoundation/hardhat-verify@2.0.9)(@typechain/ethers-v6@0.5.1)(@typechain/hardhat@9.1.0)(@types/chai@4.3.17)(@types/mocha@10.0.7)(@types/node@22.1.0)(chai@4.5.0)(ethers@6.13.2)(hardhat-gas-reporter@1.0.10)(hardhat@2.22.7)(solidity-coverage@0.8.12)(ts-node@10.9.2)(typechain@8.3.2)(typescript@5.5.4): + resolution: {integrity: sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==} + peerDependencies: + '@nomicfoundation/hardhat-chai-matchers': ^2.0.0 + '@nomicfoundation/hardhat-ethers': ^3.0.0 + '@nomicfoundation/hardhat-ignition-ethers': ^0.15.0 + '@nomicfoundation/hardhat-network-helpers': ^1.0.0 + '@nomicfoundation/hardhat-verify': ^2.0.0 + '@typechain/ethers-v6': ^0.5.0 + '@typechain/hardhat': ^9.0.0 + '@types/chai': ^4.2.0 + '@types/mocha': '>=9.1.0' + '@types/node': '>=18.0.0' + chai: ^4.2.0 + ethers: ^6.4.0 + hardhat: ^2.11.0 + hardhat-gas-reporter: ^1.0.8 + solidity-coverage: ^0.8.1 + ts-node: '>=8.0.0' + typechain: ^8.3.0 + typescript: '>=4.5.0' + dependencies: + '@nomicfoundation/hardhat-chai-matchers': 2.0.7(@nomicfoundation/hardhat-ethers@3.0.6)(chai@4.5.0)(ethers@6.13.2)(hardhat@2.22.7) + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2)(hardhat@2.22.7) + '@nomicfoundation/hardhat-ignition-ethers': 0.15.5(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition@0.15.5)(@nomicfoundation/ignition-core@0.15.5)(ethers@6.13.2)(hardhat@2.22.7) + '@nomicfoundation/hardhat-network-helpers': 1.0.11(hardhat@2.22.7) + '@nomicfoundation/hardhat-verify': 2.0.9(hardhat@2.22.7) + '@typechain/ethers-v6': 0.5.1(ethers@6.13.2)(typechain@8.3.2)(typescript@5.5.4) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.13.2)(hardhat@2.22.7)(typechain@8.3.2) + '@types/chai': 4.3.17 + '@types/mocha': 10.0.7 + '@types/node': 22.1.0 + chai: 4.5.0 + ethers: 6.13.2 + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat-gas-reporter: 1.0.10(hardhat@2.22.7) + solidity-coverage: 0.8.12(hardhat@2.22.7) + ts-node: 10.9.2(@types/node@22.1.0)(typescript@5.5.4) + typechain: 8.3.2(typescript@5.5.4) + typescript: 5.5.4 + dev: true + + /@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.7): + resolution: {integrity: sha512-7kD8hu1+zlnX87gC+UN4S0HTKBnIsDfXZ/pproq1gYsK94hgCk+exvzXbwR0X2giiY/RZPkqY9oKRi0Uev91hQ==} + peerDependencies: + hardhat: ^2.22.72.0.4 + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 + cbor: 8.1.0 + chalk: 2.4.2 + debug: 4.3.6(supports-color@8.1.1) + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + lodash.clonedeep: 4.5.0 + semver: 6.3.1 + table: 6.8.2 + undici: 5.28.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@nomicfoundation/ignition-core@0.15.5: + resolution: {integrity: sha512-FgvuoIXhakRSP524JzNQ4BviyzBBKpsFaOWubPZ4XACLT4/7vGqlJ/7DIn0D2NL2anQ2qs98/BNBY9WccXUX1Q==} + dependencies: + '@ethersproject/address': 5.6.1 + '@nomicfoundation/solidity-analyzer': 0.1.2 + cbor: 9.0.2 + debug: 4.3.6(supports-color@8.1.1) + ethers: 6.13.2 + fs-extra: 10.1.0 + immer: 10.0.2 + lodash: 4.17.21 + ndjson: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@nomicfoundation/ignition-ui@0.15.5: + resolution: {integrity: sha512-ZcE4rIn10qKahR4OqS8rl8NM2Fbg2QYiBXgMgj74ZI0++LlCcZgB5HyaBbX+lsnKHjTXtjYD3b+2mtg7jFbAMQ==} + dev: true + + /@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2: + resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} + engines: {node: '>= 12'} + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2: + resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==} + engines: {node: '>= 12'} + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2: + resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==} + engines: {node: '>= 12'} + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2: + resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==} + engines: {node: '>= 12'} + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2: + resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==} + engines: {node: '>= 12'} + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2: + resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==} + engines: {node: '>= 12'} + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2: + resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==} + engines: {node: '>= 12'} + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer@0.1.2: + resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} + engines: {node: '>= 12'} + optionalDependencies: + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.2 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 + dev: true + + /@openzeppelin/contracts@4.9.6: + resolution: {integrity: sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==} + dev: true + + /@scure/base@1.1.7: + resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} + 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.7 + dev: true + + /@scure/bip32@1.4.0: + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.7 + dev: true + + /@scure/bip39@1.1.1: + resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} + dependencies: + '@noble/hashes': 1.2.0 + '@scure/base': 1.1.7 + dev: true + + /@scure/bip39@1.3.0: + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.7 + 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 + + /@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.17.0: + resolution: {integrity: sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==} + dev: true + + /@solidity-parser/parser@0.18.0: + resolution: {integrity: sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==} + dev: true + + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@typechain/ethers-v6@0.5.1(ethers@6.13.2)(typechain@8.3.2)(typescript@5.5.4): + resolution: {integrity: sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==} + peerDependencies: + ethers: 6.x + typechain: ^8.3.2 + typescript: '>=4.7.0' + dependencies: + ethers: 6.13.2 + lodash: 4.17.21 + ts-essentials: 7.0.3(typescript@5.5.4) + typechain: 8.3.2(typescript@5.5.4) + typescript: 5.5.4 + dev: true + + /@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.13.2)(hardhat@2.22.7)(typechain@8.3.2): + resolution: {integrity: sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==} + peerDependencies: + '@typechain/ethers-v6': ^0.5.1 + ethers: ^6.1.0 + hardhat: ^2.9.9 + typechain: ^8.3.2 + dependencies: + '@typechain/ethers-v6': 0.5.1(ethers@6.13.2)(typechain@8.3.2)(typescript@5.5.4) + ethers: 6.13.2 + fs-extra: 9.1.0 + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + typechain: 8.3.2(typescript@5.5.4) + dev: true + + /@types/bn.js@4.11.6: + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + dependencies: + '@types/node': 22.1.0 + dev: true + + /@types/bn.js@5.1.5: + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + dependencies: + '@types/node': 22.1.0 + dev: true + + /@types/chai-as-promised@7.1.8: + resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==} + dependencies: + '@types/chai': 4.3.17 + dev: true + + /@types/chai@4.3.17: + resolution: {integrity: sha512-zmZ21EWzR71B4Sscphjief5djsLre50M6lI622OSySTmn9DB3j+C3kWroHfBQWXbOBwbgg/M8CG/hUxDLIloow==} + dev: true + + /@types/concat-stream@1.6.1: + resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} + dependencies: + '@types/node': 22.1.0 + dev: true + + /@types/form-data@0.0.33: + resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} + dependencies: + '@types/node': 22.1.0 + dev: true + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 22.1.0 + dev: true + + /@types/lru-cache@5.1.1: + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} + dev: true + + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true + + /@types/mocha@10.0.7: + resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==} + dev: true + + /@types/node@10.17.60: + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + dev: true + + /@types/node@18.15.13: + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + dev: true + + /@types/node@22.1.0: + resolution: {integrity: sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==} + dependencies: + undici-types: 6.13.0 + 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': 22.1.0 + dev: true + + /@types/prettier@2.7.3: + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + dev: true + + /@types/qs@6.9.15: + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + dev: true + + /@types/secp256k1@4.0.6: + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + dependencies: + '@types/node': 22.1.0 + dev: true + + /abbrev@1.0.9: + resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} + dev: true + + /acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 + dev: true + + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /adm-zip@0.4.16: + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} + dev: true + + /aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + dev: true + + /aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + dev: true + + /agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.6(supports-color@8.1.1) + 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@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + dev: true + + /amdefine@1.0.1: + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} + engines: {node: '>=0.4.2'} + requiresBuild: true + dev: true + optional: true + + /ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + dependencies: + string-width: 4.2.3 + 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@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 + + /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 + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /array-back@3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + dev: true + + /array-back@4.0.2: + resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} + engines: {node: '>=8'} + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + dev: true + + /asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async@1.5.2: + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} + 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 + + /axios@1.7.3: + resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==} + dependencies: + follow-redirects: 1.15.6(debug@4.3.6) + 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.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + dev: true + + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: true + + /blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + 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 + + /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: + 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.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.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.10 + 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-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true + + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: true + + /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.4 + set-function-length: 1.2.2 + 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 + + /cbor@8.1.0: + resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} + engines: {node: '>=12.19'} + dependencies: + nofilter: 3.1.0 + dev: true + + /cbor@9.0.2: + resolution: {integrity: sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==} + engines: {node: '>=16'} + dependencies: + nofilter: 3.1.0 + dev: true + + /chai-as-promised@7.1.2(chai@4.5.0): + resolution: {integrity: sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==} + peerDependencies: + chai: '>= 2.1.2 < 6' + dependencies: + chai: 4.5.0 + check-error: 1.0.3 + dev: true + + /chai-as-promised@8.0.0(chai@4.5.0): + resolution: {integrity: sha512-sMsGXTrS3FunP/wbqh/KxM8Kj/aLPXQGkNtvE5wPfSToq8wkkvBpTZo1LIiEVmC4BwkKpag+l5h/20lBMk6nUg==} + peerDependencies: + chai: '>= 2.1.2 < 6' + dependencies: + chai: 4.5.0 + check-error: 2.1.1 + dev: true + + /chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + 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 + + /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 + + /check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + 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.3 + 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 + + /ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + 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 + + /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-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@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 + + /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 + + /command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + dev: true + + /command-line-args@5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + find-replace: 3.0.0 + lodash.camelcase: 4.3.0 + typical: 4.0.0 + dev: true + + /command-line-usage@6.1.3: + resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} + engines: {node: '>=8.0.0'} + dependencies: + array-back: 4.0.2 + chalk: 2.4.2 + table-layout: 1.0.2 + typical: 5.2.0 + 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 + + /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 + + /cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: true + + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + 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 + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: true + + /death@1.1.0: + resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} + dev: true + + /debug@4.3.6(supports-color@8.1.1): + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + 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@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: true + + /deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.1.0 + 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 + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: 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 + + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dev: true + + /difflib@0.2.4: + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} + dependencies: + heap: 0.2.7 + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + 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 + + /elliptic@6.5.6: + resolution: {integrity: sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==} + 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 + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: 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 + + /env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + 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'} + dev: true + + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + 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 + + /escodegen@1.8.1: + resolution: {integrity: sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==} + engines: {node: '>=0.12.0'} + hasBin: true + dependencies: + esprima: 2.7.3 + estraverse: 1.9.3 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.2.0 + dev: true + + /esprima@2.7.3: + resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} + engines: {node: '>=0.10.0'} + hasBin: true + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /estraverse@1.9.3: + resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==} + engines: {node: '>=0.10.0'} + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + 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.7.3 + 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.7.0 + req-cwd: 2.0.0 + sha1: 1.1.1 + sync-request: 6.1.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: true + + /ethereum-bloom-filters@1.2.0: + resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==} + dependencies: + '@noble/hashes': 1.4.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.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + 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.6 + 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'} + 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@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 + + /ethers@6.13.2: + resolution: {integrity: sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + 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 + + /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 + + /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 + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + dev: true + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-replace@3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + dependencies: + array-back: 3.1.0 + 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@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@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /follow-redirects@1.15.6(debug@4.3.6): + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.6(supports-color@8.1.1) + 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 + + /fp-ts@1.19.3: + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + dev: true + + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + 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'} + 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 + + /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 + + /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.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.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + dev: true + + /get-port@3.2.0: + resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} + engines: {node: '>=4'} + dev: true + + /ghost-testrpc@0.0.2: + resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} + hasBin: true + dependencies: + chalk: 2.4.2 + node-emoji: 1.11.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@5.0.15: + resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + 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.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + deprecated: Glob versions prior to v9 are no longer supported + 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.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + 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'} + deprecated: Glob versions prior to v9 are no longer supported + 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-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + dependencies: + global-prefix: 3.0.0 + dev: true + + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + dev: true + + /globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + glob: 7.2.0 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.1 + dev: true + + /hardhat-gas-reporter@1.0.10(hardhat@2.22.7): + resolution: {integrity: sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==} + peerDependencies: + hardhat: ^2.0.2 + dependencies: + array-uniq: 1.0.3 + eth-gas-reporter: 0.2.27 + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + sha1: 1.1.1 + transitivePeerDependencies: + - '@codechecks/client' + - bufferutil + - debug + - utf-8-validate + dev: true + + /hardhat@2.22.7(ts-node@10.9.2)(typescript@5.5.4): + resolution: {integrity: sha512-nrXQAl+qUr75TsCLDo8P41YXLc+5U7qQMMCIrbbmy1/uQaVPncdjDrD5BR0CENvHRj7EBqO+JkofpozXoIfJKg==} + 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/edr': 0.5.2 + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-tx': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 + '@nomicfoundation/solidity-analyzer': 0.1.2 + '@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.6(supports-color@8.1.1) + 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.7 + io-ts: 1.10.4 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.7.0 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.8.26(debug@4.3.6) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + ts-node: 10.9.2(@types/node@22.1.0)(typescript@5.5.4) + tsort: 0.0.1 + typescript: 5.5.4 + undici: 5.28.4 + uuid: 8.3.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - c-kzg + - supports-color + - utf-8-validate + dev: true + + /has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + 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.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + 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.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + 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 + + /heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + 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 + + /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-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-response-object@3.0.2: + resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} + dependencies: + '@types/node': 10.17.60 + 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.6(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + 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 + + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + + /immer@10.0.2: + resolution: {integrity: sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==} + dev: true + + /immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + 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==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + 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 + + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: true + + /io-ts@1.10.4: + resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + dependencies: + fp-ts: 1.19.3 + dev: true + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + 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-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-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + 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 + + /jsonschema@1.4.1: + resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} + 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.1 + readable-stream: 3.6.2 + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: true + + /levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + 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@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + dev: true + + /lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: true + + /lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: 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 + + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + dev: true + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: 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 + + /memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + dev: true + + /micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + 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 + + /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.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 + + /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 + + /mnemonist@0.38.5: + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} + dependencies: + obliterator: 2.0.4 + dev: true + + /mocha@10.7.0: + resolution: {integrity: sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==} + engines: {node: '>= 14.0.0'} + hasBin: true + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.3.6(supports-color@8.1.1) + diff: 5.2.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.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + 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 + + /ndjson@2.0.0: + resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + json-stringify-safe: 5.0.1 + minimist: 1.2.8 + readable-stream: 3.6.2 + split2: 3.2.2 + through2: 4.0.2 + dev: true + + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + dev: true + + /node-emoji@1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + dependencies: + lodash: 4.17.21 + dev: true + + /node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + dev: true + + /nofilter@3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + dev: true + + /nopt@3.0.6: + resolution: {integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==} + hasBin: true + dependencies: + abbrev: 1.0.9 + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + 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 + + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + dev: true + + /obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + dev: true + + /ordinal@1.0.3: + resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} + dev: true + + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + 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@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@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-map@4.0.0: + 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'} + dev: true + + /parse-cache-control@1.0.1: + resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} + 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-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + 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 + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: true + + /prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-plugin-solidity@1.3.1(prettier@3.3.3): + resolution: {integrity: sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==} + engines: {node: '>=16'} + peerDependencies: + prettier: '>=2.3.0' + dependencies: + '@solidity-parser/parser': 0.17.0 + prettier: 3.3.3 + semver: 7.6.3 + solidity-comments-extractor: 0.0.8 + dev: true + + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: true + + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + dev: true + + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + + /qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.6 + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + 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 + + /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 + + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.17.0 + dev: true + + /recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + dependencies: + minimatch: 3.1.2 + dev: true + + /reduce-flatten@2.0.0: + resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} + engines: {node: '>=6'} + 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 + + /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@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + dev: true + + /resolve@1.1.7: + resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} + dev: true + + /resolve@1.17.0: + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} + dependencies: + path-parse: 1.0.7 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + 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-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 + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /sc-istanbul@0.4.6: + resolution: {integrity: sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==} + hasBin: true + dependencies: + abbrev: 1.0.9 + async: 1.5.2 + escodegen: 1.8.1 + esprima: 2.7.3 + glob: 5.0.15 + handlebars: 4.7.8 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + nopt: 3.0.6 + once: 1.4.0 + resolve: 1.1.7 + supports-color: 3.2.3 + which: 1.3.1 + wordwrap: 1.0.0 + 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.6 + node-addon-api: 2.0.2 + node-gyp-build: 4.8.1 + 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.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + dependencies: + randombytes: 2.1.0 + dev: true + + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + 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 + + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: 7.2.0 + interpret: 1.4.0 + rechoir: 0.6.2 + dev: true + + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + dev: true + + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + 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 + + /solc@0.8.26(debug@4.3.6): + resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} + engines: {node: '>=10.0.0'} + hasBin: true + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.6(debug@4.3.6) + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + dev: true + + /solidity-comments-extractor@0.0.8: + resolution: {integrity: sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==} + dev: true + + /solidity-coverage@0.8.12(hardhat@2.22.7): + resolution: {integrity: sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==} + hasBin: true + peerDependencies: + hardhat: ^2.11.0 + dependencies: + '@ethersproject/abi': 5.7.0 + '@solidity-parser/parser': 0.18.0 + chalk: 2.4.2 + death: 1.1.0 + difflib: 0.2.4 + fs-extra: 8.1.0 + ghost-testrpc: 0.0.2 + global-modules: 2.0.0 + globby: 10.0.2 + hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + jsonschema: 1.4.1 + lodash: 4.17.21 + mocha: 10.7.0 + node-emoji: 1.11.0 + pify: 4.0.1 + recursive-readdir: 2.2.3 + sc-istanbul: 0.4.6 + semver: 7.6.3 + shelljs: 0.8.5 + web3-utils: 1.10.4 + dev: 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.2.0: + resolution: {integrity: sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==} + engines: {node: '>=0.8.0'} + requiresBuild: true + dependencies: + amdefine: 1.0.1 + dev: true + optional: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + dependencies: + readable-stream: 3.6.2 + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + 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'} + dev: true + + /string-format@2.0.0: + resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} + 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_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@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-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-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + dependencies: + has-flag: 1.0.0 + dev: 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 + + /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-layout@1.0.2: + resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} + engines: {node: '>=8.0.0'} + dependencies: + array-back: 4.0.2 + deep-extend: 0.6.0 + typical: 5.2.0 + wordwrapjs: 4.0.1 + dev: true + + /table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + 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.15 + 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.13.0 + dev: true + + /through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + dependencies: + readable-stream: 3.6.2 + 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'} + 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 + + /ts-command-line-args@2.5.1: + resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} + hasBin: true + dependencies: + chalk: 4.1.2 + command-line-args: 5.2.1 + command-line-usage: 6.1.3 + string-format: 2.0.0 + dev: true + + /ts-essentials@7.0.3(typescript@5.5.4): + resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} + peerDependencies: + typescript: '>=3.7.0' + dependencies: + typescript: 5.5.4 + dev: true + + /ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.1.0 + acorn: 8.12.1 + acorn-walk: 8.3.3 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.5.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: true + + /tsort@0.0.1: + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} + dev: true + + /tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + dev: true + + /tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + dev: true + + /type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.1.2 + dev: true + + /type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + 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-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 + + /typechain@8.3.2(typescript@5.5.4): + resolution: {integrity: sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==} + hasBin: true + peerDependencies: + typescript: '>=4.3.0' + dependencies: + '@types/prettier': 2.7.3 + debug: 4.3.6(supports-color@8.1.1) + fs-extra: 7.0.1 + glob: 7.1.7 + js-sha3: 0.8.0 + lodash: 4.17.21 + mkdirp: 1.0.4 + prettier: 2.8.8 + ts-command-line-args: 2.5.1 + ts-essentials: 7.0.3(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true + + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /typical@4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + dev: true + + /typical@5.2.0: + resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} + engines: {node: '>=8'} + dev: true + + /uglify-js@3.19.1: + resolution: {integrity: sha512-y/2wiW+ceTYR2TSSptAhfnEtpLaQ4Ups5zrjB2d3kuVxHj16j/QJwPl5PvuGy9uARb39J0+iKxcRPvtpsx4A4A==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /undici-types@6.13.0: + resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} + dev: true + + /undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.1.1 + dev: true + + /universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + 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 + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: true + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /web3-utils@1.10.4: + resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethereumjs/util': 8.1.0 + bn.js: 5.2.1 + ethereum-bloom-filters: 1.2.0 + ethereum-cryptography: 2.2.1 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + dev: true + + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + 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 + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true + + /wordwrapjs@4.0.1: + resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} + engines: {node: '>=8.0.0'} + dependencies: + reduce-flatten: 2.0.0 + typical: 5.2.0 + dev: true + + /workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + 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 + + /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.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + 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@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + 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 + + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + 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.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true From a66e72f9ddfa39edc206804f0dc3b2efb97fd12b Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Thu, 8 Aug 2024 15:40:51 +0800 Subject: [PATCH 05/45] copy integration-tests utils from worker --- integration-tests/common/call.ts | 61 ++ integration-tests/common/common-types.ts | 47 ++ integration-tests/common/config.js | 4 + integration-tests/common/di-utils.ts | 534 ++++++++++++++++++ integration-tests/common/helpers.ts | 117 ++++ integration-tests/common/transactions.ts | 164 ++++++ integration-tests/common/utils/assertion.ts | 198 +++++++ integration-tests/common/utils/common.ts | 5 + integration-tests/common/utils/context.ts | 92 +++ integration-tests/common/utils/crypto.ts | 209 +++++++ .../common/utils/identity-helper.ts | 235 ++++++++ integration-tests/common/utils/index.ts | 15 + .../common/utils/integration-setup.ts | 45 ++ integration-tests/common/utils/storage.ts | 110 ++++ .../common/utils/type-creators.ts | 40 ++ integration-tests/common/utils/vc-helper.ts | 348 ++++++++++++ 16 files changed, 2224 insertions(+) create mode 100644 integration-tests/common/call.ts create mode 100644 integration-tests/common/common-types.ts create mode 100644 integration-tests/common/config.js create mode 100644 integration-tests/common/di-utils.ts create mode 100644 integration-tests/common/helpers.ts create mode 100644 integration-tests/common/transactions.ts create mode 100644 integration-tests/common/utils/assertion.ts create mode 100644 integration-tests/common/utils/common.ts create mode 100644 integration-tests/common/utils/context.ts create mode 100644 integration-tests/common/utils/crypto.ts create mode 100644 integration-tests/common/utils/identity-helper.ts create mode 100644 integration-tests/common/utils/index.ts create mode 100644 integration-tests/common/utils/integration-setup.ts create mode 100644 integration-tests/common/utils/storage.ts create mode 100644 integration-tests/common/utils/type-creators.ts create mode 100644 integration-tests/common/utils/vc-helper.ts diff --git a/integration-tests/common/call.ts b/integration-tests/common/call.ts new file mode 100644 index 0000000..bb56bd8 --- /dev/null +++ b/integration-tests/common/call.ts @@ -0,0 +1,61 @@ +import { ApiPromise } from '@polkadot/api'; +import { hexToU8a, compactStripLength, u8aToString } from '@polkadot/util'; +import WebSocketAsPromised from 'websocket-as-promised'; +import type { JsonRpcRequest } from './common-types'; +import type { WorkerRpcReturnValue } from '@litentry/parachain-api'; +import { Metadata, TypeRegistry } from '@polkadot/types'; +import type { Bytes } from '@polkadot/types-codec'; +import { createJsonRpcRequest } from './helpers'; +// TODO: +// - better place to put these constants? +// - maybe randomise it in test initialisation +// +// the aes key to encrypt an AES request +export const aesKey = '0x22fc82db5b606998ad45099b7978b5b4f9dd4ea6017e57370ac56141caaabd12'; + +// nonce to encrypt an AES request together with `aesKey` +export const keyNonce = '0x010101010101010101010101'; + +// send RPC request +export async function sendRequest( + wsClient: WebSocketAsPromised, + request: JsonRpcRequest, + api: ApiPromise +): Promise { + const rawRes = await wsClient.sendRequest(request, { requestId: request.id, timeout: 6000 }); + + const res = api.createType('WorkerRpcReturnValue', rawRes.result); + if (res.status.isError) { + console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)); + } + + // unfortunately, the res.value only contains the hash of top + if (res.status.isTrustedOperationStatus && res.status.asTrustedOperationStatus[0].isInvalid) { + console.log('Rpc trusted operation execution failed, hash: ', res.value); + } + + return res; +} + +// decode the returned bytes as string +// TODO: is it same as `String::decode` in rust? +// please note we shouldn't use toU8a(), which encodes the Bytes instead of converting +export function decodeRpcBytesAsString(value: Bytes): string { + return u8aToString(compactStripLength(hexToU8a(value.toHex()))[1]); +} + +export async function getSidechainMetadata( + wsClient: WebSocketAsPromised, + api: ApiPromise, + requestId: number +): Promise<{ sidechainMetaData: Metadata; sidechainRegistry: TypeRegistry }> { + const request = createJsonRpcRequest('state_getMetadata', Uint8Array.from([]), requestId); + + const resp = await sendRequest(wsClient, request, api); + + const sidechainRegistry = new TypeRegistry(); + const sidechainMetaData = new Metadata(sidechainRegistry, resp.value); + + sidechainRegistry.setMetadata(sidechainMetaData); + return { sidechainMetaData, sidechainRegistry }; +} diff --git a/integration-tests/common/common-types.ts b/integration-tests/common/common-types.ts new file mode 100644 index 0000000..5e29060 --- /dev/null +++ b/integration-tests/common/common-types.ts @@ -0,0 +1,47 @@ +import { ApiPromise } from '@litentry/parachain-api'; +import { KeyObject } from 'crypto'; +import WebSocketAsPromised from 'websocket-as-promised'; +import { Metadata, TypeRegistry } from '@polkadot/types'; +import { Wallet } from 'ethers'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { HexString } from '@polkadot/util/types'; +import { ECPairInterface } from 'ecpair'; +import { Keypair } from '@solana/web3.js'; +import { Signer } from './utils/crypto'; +// If there are types already defined in the client-api, please avoid redefining these types. +// Instead, make every effort to use the types that have been generated within the client-api. + +interface WalletType { + [walletName: string]: Signer; +} +export interface Wallets { + evm: WalletType; + substrate: WalletType; + bitcoin: WalletType; + solana: WalletType; +} +export type IntegrationTestContext = { + tee: WebSocketAsPromised; + api: ApiPromise; + teeShieldingKey: KeyObject; + mrEnclave: HexString; + web3Wallets: Wallets; + sidechainMetaData: Metadata; + sidechainRegistry: TypeRegistry; + chainIdentifier: number; + requestId: number; +}; + +export type Web3Wallets = { + substrateWallet: KeyringPair; + evmWallet: Wallet; + bitcoinWallet: ECPairInterface; + solanaWallet: Keypair; +}; + +export type JsonRpcRequest = { + jsonrpc: string; + method: string; + params: any; + id: number; +}; diff --git a/integration-tests/common/config.js b/integration-tests/common/config.js new file mode 100644 index 0000000..3dbb229 --- /dev/null +++ b/integration-tests/common/config.js @@ -0,0 +1,4 @@ +import dotenv from 'dotenv'; + +// eslint-disable-next-line @typescript-eslint/no-var-requires, no-undef +dotenv.config({ path: `.env.${process.env.NODE_ENV || 'local'}` }); diff --git a/integration-tests/common/di-utils.ts b/integration-tests/common/di-utils.ts new file mode 100644 index 0000000..97a8cc0 --- /dev/null +++ b/integration-tests/common/di-utils.ts @@ -0,0 +1,534 @@ +import { ApiPromise } from '@polkadot/api'; +import { u8aToHex, hexToU8a, compactAddLength, bufferToU8a, u8aConcat, stringToU8a } from '@polkadot/util'; +import { Codec } from '@polkadot/types/types'; +import { TypeRegistry } from '@polkadot/types'; +import { Bytes } from '@polkadot/types-codec'; +import { IntegrationTestContext, JsonRpcRequest } from './common-types'; +import type { + WorkerRpcReturnValue, + TrustedCallSigned, + Getter, + CorePrimitivesIdentity, + TrustedGetterSigned, + TrustedCall, +} from '@litentry/parachain-api'; +import { + encryptWithTeeShieldingKey, + Signer, + encryptWithAes, + sleep, + createLitentryMultiSignature, + decryptWithAes, +} from './utils'; +import { aesKey, decodeRpcBytesAsString, keyNonce } from './call'; +import { createPublicKey, KeyObject } from 'crypto'; +import WebSocketAsPromised from 'websocket-as-promised'; +import { H256, Index } from '@polkadot/types/interfaces'; +import { blake2AsHex, base58Encode, blake2AsU8a } from '@polkadot/util-crypto'; +import { createJsonRpcRequest, nextRequestId, stfErrorToString } from './helpers'; + +// Send the request to worker ws +// we should perform different actions based on the returned status: +// +// `Submitted`: +// the request is submitted to the top pool, we should start to subscribe to parachain headers to wait for async parachain event +// +// `InSidechainBlock` +// the request is included in a sidechain block: the state mutation of sidechain is done, the promise is resolved +// the corresponding parachain event should be emitted **around** that, it's not guaranteed if it's before or after this status +// due to block inclusion delays from the parachain +// +async function sendRequest( + wsClient: WebSocketAsPromised, + request: JsonRpcRequest, + api: ApiPromise, + onMessageReceived?: (res: WorkerRpcReturnValue) => void +): Promise { + const p = new Promise((resolve, reject) => + wsClient.onMessage.addListener((data) => { + const parsed = JSON.parse(data); + if (parsed.id !== request.id) { + return; + } + + if ('error' in parsed) { + const transaction = { request, response: parsed }; + console.log('Request failed: ' + JSON.stringify(transaction, null, 2)); + reject(new Error(parsed.error.message, { cause: transaction })); + } + + const result = parsed.result; + const res = api.createType('WorkerRpcReturnValue', result); + + if (res.status.isError) { + console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)); + } + + if (res.status.isTrustedOperationStatus && res.status.asTrustedOperationStatus[0].isInvalid) { + console.log('Rpc trusted operation execution failed, hash: ', res.value.toHex()); + const stfError = api.createType('StfError', res.value); + const msg = stfErrorToString(stfError); + console.log('TrustedOperationStatus error: ', msg); + } + // sending every response we receive from websocket + if (onMessageReceived) onMessageReceived(res); + + // resolve it once `do_watch` is false, meaning it's the final response + if (res.do_watch.isFalse) { + // TODO: maybe only remove this listener + wsClient.onMessage.removeAllListeners(); + resolve(res); + } else { + // `do_watch` is true means: hold on - there's still something coming + console.log('do_watch is true, continue watching ...'); + } + }) + ); + + wsClient.sendRequest(request); + return p; +} + +// TrustedCalls are defined in: +// https://github.com/litentry/litentry-parachain/blob/d4be11716fdb46021194bbe9fe791b15249a369e/tee-worker/app-libs/stf/src/trusted_call.rs#L61 +// +// About the signature, it's signed with `KeyringPair` here. +// In reality we need to get the user's signature on the `payload`. +export const createSignedTrustedCall = async ( + parachainApi: ApiPromise, + trustedCall: [string, string], + signer: Signer, + // hex-encoded mrenclave, retrieveable from parachain enclave registry + // TODO: do we have a RPC getter from the enclave? + mrenclave: string, + nonce: Codec, + params: any, + withWrappedBytes = false, + withPrefix = false +): Promise => { + const [variant, argType] = trustedCall; + const call: TrustedCall = parachainApi.createType('TrustedCall', { + [variant]: parachainApi.createType(argType, params), + }); + let payload: string = blake2AsHex( + u8aConcat( + call.toU8a(), + nonce.toU8a(), + hexToU8a(mrenclave), + hexToU8a(mrenclave) // should be shard, but it's the same as MRENCLAVE in our case + ), + 256 + ); + + if (withWrappedBytes) { + payload = `${payload}`; + } + + if (withPrefix) { + const prefix = getSignatureMessagePrefix(call); + const msg = prefix + payload; + payload = msg; + console.log('Signing message: ', payload); + } + + const signature = await createLitentryMultiSignature(parachainApi, { + signer, + payload, + }); + + return parachainApi.createType('TrustedCallSigned', { + call: call, + index: nonce, + signature: signature, + }); +}; + +// See TrustedCall.signature_message_prefix +function getSignatureMessagePrefix(call: TrustedCall): string { + if (call.isLinkIdentity) { + return "By linking your identity to our platform, you're taking a step towards a more integrated experience. Please be assured, this process is safe and involves no transactions of your assets. Token: "; + } + + if (call.isRequestBatchVc) { + const [, , assertions] = call.asRequestBatchVc; + const length = assertions.length; + + return `We are going to help you generate ${length} secure credential${ + length > 1 ? 's' : '' + }. Please be assured, this process is safe and involves no transactions of your assets. Token: `; + } + + return 'Token: '; +} + +export const createSignedTrustedGetter = async ( + parachainApi: ApiPromise, + trustedGetter: [string, string], + signer: Signer, + params: any +): Promise => { + const [variant, argType] = trustedGetter; + const getter = parachainApi.createType('TrustedGetter', { + [variant]: parachainApi.createType(argType, params), + }); + const payload = blake2AsU8a(getter.toU8a(), 256); + + let signature = await createLitentryMultiSignature(parachainApi, { + signer, + payload, + }); + + return parachainApi.createType('TrustedGetterSigned', { + getter, + signature, + }); +}; + +export const createPublicGetter = (parachainApi: ApiPromise, publicGetter: [string, string], params: any) => { + const [variant, argType] = publicGetter; + const getter = parachainApi.createType('PublicGetter', { + [variant]: parachainApi.createType(argType, params), + }); + + return getter; +}; + +export async function createSignedTrustedCallLinkIdentity( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + identity: string, + validationData: string, + web3networks: string, + aesKey: string, + hash: string, + options?: { withWrappedBytes?: boolean; withPrefix?: boolean } +) { + return createSignedTrustedCall( + parachainApi, + [ + 'link_identity', + '(LitentryIdentity, LitentryIdentity, LitentryIdentity, LitentryValidationData, Vec, Option, H256)', + ], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, validationData, web3networks, aesKey, hash], + options?.withWrappedBytes, + options?.withPrefix + ); +} + +export async function createSignedTrustedCallSetIdentityNetworks( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + identity: string, + web3networks: string, + aesKey: string, + hash: string +) { + return createSignedTrustedCall( + parachainApi, + [ + 'set_identity_networks', + '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Vec, Option, H256)', + ], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, web3networks, aesKey, hash] + ); +} + +export async function createSignedTrustedCallRequestVc( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + assertion: string, + aesKey: string, + hash: string, + options?: { withWrappedBytes?: boolean; withPrefix?: boolean } +) { + return await createSignedTrustedCall( + parachainApi, + ['request_vc', '(LitentryIdentity, LitentryIdentity, Assertion, Option, H256)'], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), assertion, aesKey, hash], + options?.withWrappedBytes, + options?.withPrefix + ); +} + +export async function createSignedTrustedCallRequestBatchVc( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + assertion: string, + aesKey: string, + hash: string, + options?: { withWrappedBytes?: boolean; withPrefix?: boolean } +) { + return await createSignedTrustedCall( + parachainApi, + [ + 'request_batch_vc', + '(LitentryIdentity, LitentryIdentity, BoundedVec>, Option, H256)', + ], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), assertion, aesKey, hash], + options?.withWrappedBytes, + options?.withPrefix + ); +} + +export async function createSignedTrustedCallDeactivateIdentity( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + identity: string, + aesKey: string, + hash: string +) { + return createSignedTrustedCall( + parachainApi, + ['deactivate_identity', '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)'], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, aesKey, hash] + ); +} +export async function createSignedTrustedCallActivateIdentity( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + identity: string, + aesKey: string, + hash: string +) { + return createSignedTrustedCall( + parachainApi, + ['activate_identity', '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)'], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, aesKey, hash] + ); +} + +export async function createSignedTrustedGetterIdGraph( + parachainApi: ApiPromise, + signer: Signer, + primeIdentity: CorePrimitivesIdentity +): Promise { + const getterSigned = await createSignedTrustedGetter( + parachainApi, + ['id_graph', '(LitentryIdentity)'], + signer, + primeIdentity.toHuman() + ); + return parachainApi.createType('Getter', { trusted: getterSigned }); +} + +export const getSidechainNonce = async ( + context: IntegrationTestContext, + primeIdentity: CorePrimitivesIdentity +): Promise => { + const request = createJsonRpcRequest( + 'author_getNextNonce', + [base58Encode(hexToU8a(context.mrEnclave)), primeIdentity.toHex()], + nextRequestId(context) + ); + const res = await sendRequest(context.tee, request, context.api); + const nonceHex = res.value.toHex(); + let nonce = 0; + + if (nonceHex) { + nonce = context.api.createType('Index', '0x' + nonceHex.slice(2)?.match(/../g)?.reverse().join('')).toNumber(); + } + + return context.api.createType('Index', nonce); +}; + +export const getIdGraphHash = async ( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + primeIdentity: CorePrimitivesIdentity +): Promise => { + const getterPublic = createPublicGetter( + context.api, + ['id_graph_hash', '(LitentryIdentity)'], + primeIdentity.toHuman() + ); + const getter = context.api.createType('Getter', { public: getterPublic }); + const res = await sendRsaRequestFromGetter(context, teeShieldingKey, getter); + const hash = context.api.createType('Option', hexToU8a(res.value.toHex())).unwrap(); + return context.api.createType('H256', hash); +}; + +export const sendRequestFromTrustedCall = async ( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + call: TrustedCallSigned, + isVcDirect = false, + onMessageReceived?: (res: WorkerRpcReturnValue) => void +) => { + // construct trusted operation + const trustedOperation = context.api.createType('TrustedOperation', { direct_call: call }); + console.log('trustedOperation: ', JSON.stringify(trustedOperation.toHuman(), null, 2)); + // create the request parameter + const requestParam = await createAesRequest( + context.api, + context.mrEnclave, + teeShieldingKey, + hexToU8a(aesKey), + trustedOperation.toU8a() + ); + const request = createJsonRpcRequest( + isVcDirect ? 'author_requestVc' : 'author_submitAndWatchAesRequest', + [u8aToHex(requestParam)], + nextRequestId(context) + ); + return sendRequest(context.tee, request, context.api, onMessageReceived); +}; + +/** @deprecated use `sendAesRequestFromGetter` instead */ +export const sendRsaRequestFromGetter = async ( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + getter: Getter +): Promise => { + // important: we don't create the `TrustedOperation` type here, but use `Getter` type directly + // this is what `state_executeGetter` expects in rust + const requestParam = await createRsaRequest(context.api, context.mrEnclave, teeShieldingKey, true, getter.toU8a()); + const request = createJsonRpcRequest('state_executeGetter', [u8aToHex(requestParam)], nextRequestId(context)); + // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec + // hopefully we will query correct state + await sleep(1); + return sendRequest(context.tee, request, context.api); +}; + +export const sendAesRequestFromGetter = async ( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + aesKey: Uint8Array, + getter: Getter +): Promise => { + // important: we don't create the `TrustedOperation` type here, but use `Getter` type directly + // this is what `state_executeAesGetter` expects in rust + const requestParam = await createAesRequest( + context.api, + context.mrEnclave, + teeShieldingKey, + aesKey, + getter.toU8a() + ); + const request = createJsonRpcRequest('state_executeAesGetter', [u8aToHex(requestParam)], nextRequestId(context)); + // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec + // hopefully we will query correct state + await sleep(1); + const res = await sendRequest(context.tee, request, context.api); + const aesOutput = context.api.createType('AesOutput', res.value); + const decryptedValue = decryptWithAes(u8aToHex(aesKey), aesOutput, 'hex'); + + return context.api.createType('WorkerRpcReturnValue', { + value: decryptedValue, + do_watch: res.do_watch, + status: res.status, + }); +}; + +// get TEE's shielding key directly via RPC +export const getTeeShieldingKey = async (context: IntegrationTestContext) => { + const request = createJsonRpcRequest('author_getShieldingKey', Uint8Array.from([]), nextRequestId(context)); + const res = await sendRequest(context.tee, request, context.api); + const k = JSON.parse(decodeRpcBytesAsString(res.value)) as { + n: Uint8Array; + e: Uint8Array; + }; + + return createPublicKey({ + key: { + alg: 'RSA-OAEP-256', + kty: 'RSA', + use: 'enc', + n: Buffer.from(k.n.reverse()).toString('base64url'), + e: Buffer.from(k.e.reverse()).toString('base64url'), + }, + format: 'jwk', + }); +}; + +// given an encoded trusted operation, construct a rsa request bytes that are sent in RPC request parameters +export const createRsaRequest = async ( + parachainApi: ApiPromise, + mrenclave: string, + teeShieldingKey: KeyObject, + isGetter: boolean, + top: Uint8Array +) => { + let payload; + if (isGetter) { + payload = compactAddLength(top); + } else { + payload = compactAddLength(bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, top))); + } + + return parachainApi.createType('RsaRequest', { shard: hexToU8a(mrenclave), payload }).toU8a(); +}; + +// given an encoded trusted operation, construct an aes request bytes that are sent in RPC request parameters +export const createAesRequest = async ( + parachainApi: ApiPromise, + mrenclave: string, + teeShieldingKey: KeyObject, + aesKey: Uint8Array, + top: Uint8Array +) => { + const encryptedAesKey = compactAddLength(bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, aesKey))); + return parachainApi + .createType('AesRequest', { + shard: hexToU8a(mrenclave), + key: encryptedAesKey, + payload: parachainApi + .createType('AesOutput', { + ciphertext: compactAddLength( + hexToU8a(encryptWithAes(u8aToHex(aesKey), hexToU8a(keyNonce), Buffer.from(top))) + ), + aad: hexToU8a('0x'), + nonce: hexToU8a(keyNonce), + }) + .toU8a(), + }) + .toU8a(); +}; + +export function decodeIdGraph(sidechainRegistry: TypeRegistry, value: Bytes) { + const idgraphBytes = sidechainRegistry.createType('Option', hexToU8a(value.toHex())); + return sidechainRegistry.createType( + 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', + idgraphBytes.unwrap() + ); +} + +export function getTopHash(parachainApi: ApiPromise, call: TrustedCallSigned) { + const trustedOperation = parachainApi.createType('TrustedOperation', { direct_call: call }); + return blake2AsHex(trustedOperation.toU8a()); +} diff --git a/integration-tests/common/helpers.ts b/integration-tests/common/helpers.ts new file mode 100644 index 0000000..cc0dc6d --- /dev/null +++ b/integration-tests/common/helpers.ts @@ -0,0 +1,117 @@ +import { xxhashAsU8a, blake2AsU8a } from '@polkadot/util-crypto'; +import { u8aConcat, u8aToU8a } from '@polkadot/util'; +import { Keyring } from '@polkadot/api'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { HexString } from '@polkadot/util/types'; +import './config'; +import { IntegrationTestContext, JsonRpcRequest } from './common-types'; +import { createHash, randomBytes } from 'crypto'; +import { ECPairFactory, ECPairInterface } from 'ecpair'; +import * as ecc from 'tiny-secp256k1'; +import { ethers, Wallet } from 'ethers'; +import { Keypair } from '@solana/web3.js'; +import { EthersSigner, PolkadotSigner, BitcoinSigner, SolanaSigner } from './utils/crypto'; +import { Wallets } from './common-types'; +import type { ErrorDetail, StfError } from '@litentry/parachain-api'; + +export function blake2128Concat(data: HexString | Uint8Array): Uint8Array { + return u8aConcat(blake2AsU8a(data, 128), u8aToU8a(data)); +} + +export function twox64Concat(data: HexString | Uint8Array): Uint8Array { + return u8aConcat(xxhashAsU8a(data, 64), u8aToU8a(data)); +} + +export function identity(data: HexString | Uint8Array): Uint8Array { + return u8aToU8a(data); +} + +export function createJsonRpcRequest(method: string, params: any, id: number): JsonRpcRequest { + return { + jsonrpc: '2.0', + method, + params, + id, + }; +} + +export function nextRequestId(context: IntegrationTestContext): number { + const nextId = context.requestId + 1; + context.requestId = nextId; + return nextId; +} + +export function randomEvmWallet(): Wallet { + return ethers.Wallet.createRandom(); +} +export function randomSubstrateWallet(): KeyringPair { + const keyring = new Keyring({ type: 'sr25519' }); + return keyring.addFromSeed(randomBytes(32)); +} + +export function randomBitcoinWallet(): ECPairInterface { + const ecPair = ECPairFactory(ecc); + const keyPair = ecPair.makeRandom(); + return keyPair; +} + +export function genesisSubstrateWallet(name: string): KeyringPair { + const keyring = new Keyring({ type: 'sr25519' }); + const keyPair = keyring.addFromUri(`//${name}`, { name }); + return keyPair; +} + +export function genesisSolanaWallet(name: string): Keypair { + let seed = createHash('sha256').update(name).digest(); + seed = seed.subarray(0, 32); + const keyPair = Keypair.fromSeed(seed); + return keyPair; +} + +export const createWeb3Wallets = (): Wallets => { + const wallets: Wallets = { + evm: {}, + substrate: {}, + bitcoin: {}, + solana: {}, + }; + const walletNames = ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve']; + for (const name of walletNames) { + wallets.evm[name] = new EthersSigner(randomEvmWallet()); + wallets.substrate[name] = new PolkadotSigner(genesisSubstrateWallet(name)); + wallets.bitcoin[name] = new BitcoinSigner(randomBitcoinWallet()); + wallets.solana[name] = new SolanaSigner(genesisSolanaWallet(name)); + } + + return wallets; +}; + +export function stfErrorToString(stfError: StfError): string { + if (stfError.isRequestVCFailed) { + const [_assertionIgnored, errorDetail] = stfError.asRequestVCFailed; + + return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}`; + } + + if ( + stfError.isActivateIdentityFailed || + stfError.isDeactivateIdentityFailed || + stfError.isSetIdentityNetworksFailed || + stfError.isLinkIdentityFailed || + stfError.isMissingPrivileges || + stfError.isRemoveIdentityFailed || + stfError.isDispatch + ) { + const errorDetail = stfError.value as ErrorDetail; + + return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}`; + } + + if (stfError.isInvalidNonce) { + const [nonce1, nonce2] = stfError.asInvalidNonce; + + return `${stfError.type}: [${nonce1?.toHuman()}, ${nonce2?.toHuman()}]`; + } + + return stfError.type; +} diff --git a/integration-tests/common/transactions.ts b/integration-tests/common/transactions.ts new file mode 100644 index 0000000..b8ee954 --- /dev/null +++ b/integration-tests/common/transactions.ts @@ -0,0 +1,164 @@ +import { hexToU8a } from '@polkadot/util'; +import type { IntegrationTestContext } from './common-types'; + +import { + AddressOrPair, + ApiPromise, + ApiTypes, + FrameSystemEventRecord, + Keyring, + SubmittableExtrinsic, +} from '@litentry/parachain-api'; + +// for DI-test +export const subscribeToEventsWithExtHash = async ( + requestIdentifier: string, + context: IntegrationTestContext +): Promise => { + return new Promise((resolve, reject) => { + let blocksToScan = 30; + /* + WARNING:The unsubscribe function is called inside the Promise callback, which is executed each time a new blockHeader is received. + `unsubscribe` is intended to unsubscribe a blockHeader if certain conditions are met. + If you use await, you will actually wait for this function to finish executing. + However, since it doesn't return a Promise, using await doesn't make sense and can lead to problematic code behaviour. + soooooo, don't use await here + */ + const unsubscribe = context.api.rpc.chain.subscribeNewHeads(async (blockHeader) => { + const shiftedApi = await context.api.at(blockHeader.hash); + + const allBlockEvents = await shiftedApi.query.system.events(); + const allExtrinsicEvents = allBlockEvents.filter(({ phase }) => phase.isApplyExtrinsic); + + const matchingEvent = allExtrinsicEvents.filter((eventRecord) => { + const eventData = eventRecord.event.data.toHuman(); + return ( + eventData != undefined && + typeof eventData === 'object' && + 'reqExtHash' in eventData && + eventData.reqExtHash === requestIdentifier + ); + }); + + if (matchingEvent.length == 0) { + blocksToScan -= 1; + if (blocksToScan < 1) { + reject(new Error(`timed out listening for reqExtHash: ${requestIdentifier} in parachain events`)); + (await unsubscribe)(); + } + return; + } + + resolve(matchingEvent); + (await unsubscribe)(); + }); + }); +}; + +// for II-test +export const subscribeToEvents = async ( + section: string, + method: string, + api: ApiPromise +): Promise => { + return new Promise((resolve, reject) => { + let blocksToScan = 15; + const unsubscribe = api.rpc.chain.subscribeNewHeads(async (blockHeader) => { + const shiftedApi = await api.at(blockHeader.hash); + + const allBlockEvents = await shiftedApi.query.system.events(); + const allExtrinsicEvents = allBlockEvents.filter(({ phase }) => phase.isApplyExtrinsic); + + const matchingEvent = allExtrinsicEvents.filter(({ event, phase }) => { + return event.section === section && event.method === method; + }); + + if (matchingEvent.length == 0) { + blocksToScan -= 1; + if (blocksToScan < 1) { + reject(new Error(`timed out listening for event ${section}.${method}`)); + (await unsubscribe)(); + } + return; + } + + resolve(matchingEvent); + (await unsubscribe)(); + }); + }); +}; + +export async function waitForBlock(api: ApiPromise, blockNumber: number, blocksToCheck = 5) { + let count = 0; + + return new Promise((resolve, reject) => { + const unsubscribe = api.rpc.chain.subscribeNewHeads(async (header) => { + console.log(`Chain is at block: #${header.number}`); + + if (header.number.toNumber() === blockNumber) { + (await unsubscribe)(); + resolve(); + } + + if (++count === blocksToCheck) { + (await unsubscribe)(); + reject(new Error(`Timeout: Block #${blockNumber} not reached within ${blocksToCheck} blocks.`)); + } + }); + }); +} + +export async function setAliceAsAdmin(api: ApiPromise) { + // Get keyring of Alice, who is also the sudo in dev chain spec + const keyring = new Keyring({ type: 'sr25519' }); + const alice = keyring.addFromUri('//Alice'); + + const tx = await sudoWrapperGC(api, api.tx.teebag.setAdmin('esqZdrqhgH8zy1wqYh1aLKoRyoRWLFbX9M62eKfaTAoK67pJ5')); + + console.log(`Setting Alice as Admin for Teebag`); + return signAndSend(tx, alice); +} + +export function signAndSend(tx: SubmittableExtrinsic, account: AddressOrPair) { + return new Promise<{ block: string }>(async (resolve, reject) => { + await tx.signAndSend(account, (result) => { + console.log(`Current status is ${result.status}`); + if (result.status.isInBlock) { + console.log(`Transaction included at blockHash ${result.status.asInBlock}`); + } else if (result.status.isFinalized) { + console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); + resolve({ + block: result.status.asFinalized.toString(), + }); + } else if (result.status.isInvalid) { + reject(`Transaction is ${result.status}`); + } + }); + }); +} + +// After removing the sudo module, we use `EnsureRootOrHalfCouncil` instead of `Sudo`, +// and there are only two council members in litmus-dev/rococo-dev/litentry-dev. +// So only `propose` is required, no vote. +// +// TODO: support to send the `vote extrinsic`, if the number of council members is greater than 2. +export async function sudoWrapperGC(api: ApiPromise, tx: SubmittableExtrinsic) { + const chain = (await api.rpc.system.chain()).toString().toLowerCase(); + if (chain != 'rococo-dev') { + const threshold = api.createType('Compact', 1); + const call = api.createType('Call', tx); + return api.tx.council.propose(threshold, call, api.createType('Compact', tx.length)); + } else { + return api.tx.sudo.sudo(tx); + } +} + +export async function setScheduledEnclave(api: ApiPromise, block: number, mrenclave: string) { + const keyring = new Keyring({ type: 'sr25519' }); + const alice = keyring.addFromUri('//Alice'); + + const tx = api.tx.teebag.setScheduledEnclave('Identity', block, hexToU8a(`0x${mrenclave}`)); + + console.log('Schedule Enclave Extrinsic sent'); + return signAndSend(tx, alice); +} diff --git a/integration-tests/common/utils/assertion.ts b/integration-tests/common/utils/assertion.ts new file mode 100644 index 0000000..fd2bf0a --- /dev/null +++ b/integration-tests/common/utils/assertion.ts @@ -0,0 +1,198 @@ +import { hexToU8a, u8aToHex } from '@polkadot/util'; +import { assert } from 'chai'; +import * as ed from '@noble/ed25519'; +import { parseIdGraph } from './identity-helper'; +import { CorePrimitivesIdentity } from '@litentry/parachain-api'; +import type { IntegrationTestContext } from '../common-types'; +import { getIdGraphHash } from '../di-utils'; +import type { HexString } from '@polkadot/util/types'; +import { aesKey } from '../call'; +import colors from 'colors'; +import { WorkerRpcReturnValue, StfError } from '@litentry/parachain-api'; +import { Bytes } from '@polkadot/types-codec'; +import { decryptWithAes } from './crypto'; +import { blake2AsHex } from '@polkadot/util-crypto'; +import { validateVcSchema } from '@litentry/vc-schema-validator'; +import { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; +import { KeyObject } from 'crypto'; +import * as base58 from 'micro-base58'; +import { fail } from 'assert'; + +export function assertIdGraph( + actual: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][], + expected: [CorePrimitivesIdentity, boolean][] +) { + assert.equal(actual.length, expected.length); + expected.forEach((expected, i) => { + assert.deepEqual( + actual[i][0].toJSON(), + expected[0].toJSON(), + 'event idGraph identity should be equal expectedIdentity' + ); + + const idGraphContext = actual[0][1]; + assert.isTrue(idGraphContext.linkBlock.toNumber() > 0, 'link_block should be greater than 0'); + assert.equal(idGraphContext.status.isActive, expected[1], 'isActive should be ' + expected[1]); + }); +} + +export async function assertIsInSidechainBlock(callType: string, res: WorkerRpcReturnValue) { + assert.isTrue( + res.status.isTrustedOperationStatus, + `${callType} should be trusted operation status, but is ${res.status.type}` + ); + const status = res.status.asTrustedOperationStatus; + console.log(res.toHuman()); + + assert.isTrue( + status[0].isSubmitted || status[0].isInSidechainBlock, + `${callType} should be submitted or in sidechain block, but is ${status[0].type}` + ); +} + +export function assertWorkerError( + context: IntegrationTestContext, + check: (returnValue: StfError) => void, + returnValue: WorkerRpcReturnValue +) { + const errValueDecoded = context.api.createType('StfError', returnValue.value); + check(errValueDecoded); +} + +// a common assertion for all DI requests that might mutate the IdGraph +// returns the `id_graph_hash` in the `returnValue` +export async function assertIdGraphMutationResult( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + identity: CorePrimitivesIdentity, + returnValue: WorkerRpcReturnValue, + resultType: + | 'LinkIdentityResult' + | 'DeactivateIdentityResult' + | 'ActivateIdentityResult' + | 'SetIdentityNetworksResult', + expectedIdGraph: [CorePrimitivesIdentity, boolean][] +): Promise { + const decodedResult = context.api.createType(resultType, returnValue.value); + assert.isNotNull(decodedResult.mutated_id_graph); + const idGraph = parseIdGraph(context.sidechainRegistry, decodedResult.mutated_id_graph, aesKey); + assertIdGraph(idGraph, expectedIdGraph); + const queriedIdGraphHash = (await getIdGraphHash(context, teeShieldingKey, identity)).toHex(); + assert.equal(u8aToHex(decodedResult.id_graph_hash), queriedIdGraphHash); + + console.log(colors.green('assertIdGraphMutationResult passed')); + return u8aToHex(decodedResult.id_graph_hash); +} + +export async function assertVc(context: IntegrationTestContext, subject: CorePrimitivesIdentity, data: Bytes) { + const results = context.api.createType('RequestVCResult', data); + // step 1 + // decryptWithAes function added 0x prefix + const vcPayload = results.vc_payload; + const decryptVcPayload = decryptWithAes(aesKey, vcPayload, 'utf-8').replace('0x', ''); + + /* DID format + did:litentry:substrate:0x12345... + did:litentry:evm:0x123456... + did:litentry:twitter:my_twitter_handle + */ + + // step 2 + // check credential subject's DID + const credentialSubjectId = JSON.parse(decryptVcPayload).credentialSubject.id; + const expectSubject = Object.entries(JSON.parse(subject.toString())); + + // step 3 + // convert to DID format + const expectDid = 'did:litentry:' + expectSubject[0][0] + ':' + expectSubject[0][1]; + assert.equal( + expectDid, + credentialSubjectId, + 'Check credentialSubject error: expectDid should be equal to credentialSubject id' + ); + + // step 4 + // extrac proof and vc without proof json + const vcPayloadJson = JSON.parse(decryptVcPayload); + console.log('credential: ', JSON.stringify(vcPayloadJson, null, 2)); + const { proof, ...vcWithoutProof } = vcPayloadJson; + + // step 5 + // check vc signature + const signature = Buffer.from(hexToU8a(`0x${proof.proofValue}`)); + const message = Buffer.from(JSON.stringify(vcWithoutProof)); + const vcPubkey = Buffer.from(hexToU8a(proof.verificationMethod)); + const signatureStatus = await ed.verify(signature, message, vcPubkey); + assert.isTrue(signatureStatus, 'Check Vc signature error: signature should be valid'); + + // step 6 + // lookup the teebag enclave regsitry to check mrenclave and vcPubkey + const parachainBlockHash = await context.api.query.system.blockHash(vcPayloadJson.parachainBlockNumber); + const apiAtVcIssuedBlock = await context.api.at(parachainBlockHash); + const enclaveAccount = trimPrefix(vcPayloadJson.issuer.id, 'did:litentry:substrate:'); + const registeredEnclave = (await apiAtVcIssuedBlock.query.teebag.enclaveRegistry(enclaveAccount)).unwrap(); + + assert.equal( + vcPayloadJson.issuer.mrenclave, + base58.encode(registeredEnclave.mrenclave), + "Check VC mrenclave: it should equal enclave's mrenclave from parachains enclave registry" + ); + + assert.equal( + proof.verificationMethod, + registeredEnclave.vcPubkey, + "Check VC pubkey: it should equal enclave's vcPubkey from parachains enclave registry" + ); + + // step 7 + // check runtime version is present + assert.deepEqual( + vcPayloadJson.issuer.runtimeVersion, + { parachain: 9191, sidechain: 109 }, + 'Check VC runtime version: it should equal the current defined versions' + ); + + // step 8 + // validate VC against schema + const schemaResult = await validateVcSchema(vcPayloadJson); + + if (schemaResult.errors) console.log('Schema Validation errors: ', schemaResult.errors); + + assert.isTrue(schemaResult.isValid, 'Check Vc payload error: vcPayload should be valid'); + + assert.equal( + vcWithoutProof.type[0], + 'VerifiableCredential', + 'Check Vc payload type error: vcPayload type should be VerifiableCredential' + ); + assert.equal( + proof.type, + 'Ed25519Signature2020', + 'Check Vc proof type error: proof type should be Ed25519Signature2020' + ); +} + +export async function assertIdGraphHash( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + identity: CorePrimitivesIdentity, + idGraph: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] +) { + const idGraphType = context.sidechainRegistry.createType( + 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', + idGraph + ); + const computedIdGraphHash = blake2AsHex(idGraphType.toU8a()); + console.log('computed id graph hash: ', computedIdGraphHash); + + const queriedIdGraphHash = (await getIdGraphHash(context, teeShieldingKey, identity)).toHex(); + console.log('queried id graph hash: ', queriedIdGraphHash); + assert.equal(computedIdGraphHash, queriedIdGraphHash); +} + +function trimPrefix(str: string, prefix: string): string { + if (str.startsWith(prefix)) { + return str.substring(prefix.length); + } + return str; +} diff --git a/integration-tests/common/utils/common.ts b/integration-tests/common/utils/common.ts new file mode 100644 index 0000000..a528596 --- /dev/null +++ b/integration-tests/common/utils/common.ts @@ -0,0 +1,5 @@ +export function sleep(secs: number) { + return new Promise((resolve) => { + setTimeout(resolve, secs * 1000); + }); +} diff --git a/integration-tests/common/utils/context.ts b/integration-tests/common/utils/context.ts new file mode 100644 index 0000000..cff8e1c --- /dev/null +++ b/integration-tests/common/utils/context.ts @@ -0,0 +1,92 @@ +import { WsProvider, ApiPromise } from '@litentry/parachain-api'; +import { cryptoWaitReady } from '@polkadot/util-crypto'; +import { hexToString } from '@polkadot/util'; +import WebSocketAsPromised from 'websocket-as-promised'; +import WebSocket from 'ws'; +import Options from 'websocket-as-promised/types/options'; +import { KeyObject } from 'crypto'; +import { getSidechainMetadata } from '../call'; +import { createWeb3Wallets } from '../helpers'; +import type { IntegrationTestContext } from '../common-types'; +import { identity, vc, trusted_operations, sidechain } from '@litentry/parachain-api'; +import crypto from 'crypto'; +import type { HexString } from '@polkadot/util/types'; +// maximum block number that we wait in listening events before we timeout +export const defaultListenTimeoutInBlockNumber = 15; + +export async function initWorkerConnection(endpoint: string): Promise { + const wsp = new WebSocketAsPromised(endpoint, ({ + createWebSocket: (url: any) => new WebSocket(url), + extractMessageData: (event: any) => event, + packMessage: (data: any) => JSON.stringify(data), + unpackMessage: (data: string | ArrayBuffer | Blob) => JSON.parse(data.toString()), + attachRequestId: (data: any, requestId: string | number) => Object.assign({ id: requestId }, data), + extractRequestId: (data: any) => data && data.id, // read requestId from message `id` field + })); + await wsp.open(); + return wsp; +} + +export async function initIntegrationTestContext( + workerEndpoint: string, + substrateEndpoint: string +): Promise { + const provider = new WsProvider(substrateEndpoint); + await cryptoWaitReady(); + + const web3Wallets = createWeb3Wallets(); + + const types = { ...identity.types, ...vc.types, ...trusted_operations.types, ...sidechain.types }; + + const api = await ApiPromise.create({ + provider, + types, + }); + + const chainIdentifier = api.registry.chainSS58 as number; + + const wsp = await initWorkerConnection(workerEndpoint); + const requestId = 1; + + const { sidechainMetaData, sidechainRegistry } = await getSidechainMetadata(wsp, api, requestId); + const { mrEnclave, teeShieldingKey } = await getEnclave(api); + return { + tee: wsp, + api, + teeShieldingKey, + mrEnclave, + web3Wallets, + sidechainMetaData, + sidechainRegistry, + chainIdentifier, + requestId, + }; +} + +export async function getEnclave(api: ApiPromise): Promise<{ + mrEnclave: HexString; + teeShieldingKey: KeyObject; +}> { + const enclaveIdentifier = api.createType('Vec', await api.query.teebag.enclaveIdentifier('Identity')); + const primaryEnclave = (await api.query.teebag.enclaveRegistry(enclaveIdentifier[0])).unwrap(); + + const shieldingPubkeyBytes = api.createType('Option', primaryEnclave.shieldingPubkey).unwrap(); + const shieldingPubkey = hexToString(shieldingPubkeyBytes.toHex()); + + const teeShieldingKey = crypto.createPublicKey({ + key: { + alg: 'RSA-OAEP-256', + kty: 'RSA', + use: 'enc', + n: Buffer.from(JSON.parse(shieldingPubkey).n.reverse()).toString('base64url'), + e: Buffer.from(JSON.parse(shieldingPubkey).e.reverse()).toString('base64url'), + }, + format: 'jwk', + }); + //@TODO mrEnclave should verify from storage + const mrEnclave = primaryEnclave.mrenclave.toHex(); + return { + mrEnclave, + teeShieldingKey, + }; +} diff --git a/integration-tests/common/utils/crypto.ts b/integration-tests/common/utils/crypto.ts new file mode 100644 index 0000000..f24f8e8 --- /dev/null +++ b/integration-tests/common/utils/crypto.ts @@ -0,0 +1,209 @@ +import type { HexString } from '@polkadot/util/types'; +import { bufferToU8a, hexToU8a, isString, stringToU8a, u8aToHex } from '@polkadot/util'; +import { KeyObject } from 'crypto'; +import { AesOutput, CorePrimitivesIdentity } from '@litentry/parachain-api'; +import crypto from 'crypto'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ethers } from 'ethers'; +import { blake2AsU8a } from '@polkadot/util-crypto'; +import { Keypair } from '@solana/web3.js'; +import nacl from 'tweetnacl'; +import { IntegrationTestContext } from './../common-types'; +import { buildIdentityHelper } from './identity-helper'; +import { ECPairInterface } from 'ecpair'; +import * as bitcoinMessage from 'bitcoinjs-message'; +import { isHexString } from 'ethers/lib/utils'; +export type KeypairType = 'ed25519' | 'sr25519' | 'ecdsa' | 'ethereum' | 'bitcoin'; + +export function encryptWithTeeShieldingKey(teeShieldingKey: KeyObject, plaintext: Uint8Array): Buffer { + return crypto.publicEncrypt( + { + key: teeShieldingKey, + padding: crypto.constants.RSA_PKCS1_OAEP_PADDING, + oaepHash: 'sha256', + }, + plaintext + ); +} + +// A lazy version without aad. Append the tag to be consistent with rust implementation +export function encryptWithAes(key: HexString, nonce: Uint8Array, cleartext: Buffer): HexString { + const secretKey = crypto.createSecretKey(hexToU8a(key)); + const cipher = crypto.createCipheriv('aes-256-gcm', secretKey, nonce, { + authTagLength: 16, + }); + let encrypted = cipher.update(cleartext.toString('hex'), 'hex', 'hex'); + encrypted += cipher.final('hex'); + encrypted += cipher.getAuthTag().toString('hex'); + return `0x${encrypted}`; +} + +export function decryptWithAes(key: HexString, aesOutput: AesOutput, type: 'hex' | 'utf-8'): HexString { + const secretKey = crypto.createSecretKey(hexToU8a(key)); + const tagSize = 16; + const ciphertext = aesOutput.ciphertext ? aesOutput.ciphertext : hexToU8a('0x'); + + const nonce = aesOutput.nonce ? aesOutput.nonce : hexToU8a('0x'); + const aad = aesOutput.aad ? aesOutput.aad : hexToU8a('0x'); + + // notice!!! extract author_tag from ciphertext + // maybe this code only works with rust aes encryption + const authorTag = ciphertext.subarray(ciphertext.length - tagSize); + + const decipher = crypto.createDecipheriv('aes-256-gcm', secretKey, nonce, { + authTagLength: tagSize, + }); + decipher.setAAD(aad); + decipher.setAuthTag(authorTag); + + const part1 = decipher.update(ciphertext.subarray(0, ciphertext.length - tagSize), undefined, type); + const part2 = decipher.final(type); + + return `0x${part1 + part2}`; +} + +export interface Signer { + getAddressRaw(): Uint8Array; + sign(message: HexString | string | Uint8Array): Promise; + type(): KeypairType; + getAddressInSubstrateFormat(): Uint8Array; + getIdentity(api: IntegrationTestContext): Promise; +} + +export class PolkadotSigner implements Signer { + keypair: KeyringPair; + + constructor(keypair: KeyringPair) { + this.keypair = keypair; + } + + getAddressRaw(): Uint8Array { + return this.keypair.addressRaw; + } + + sign(message: HexString | string | Uint8Array): Promise { + return new Promise((resolve) => resolve(this.keypair.sign(message))); + } + + type(): KeypairType { + return this.keypair.type; + } + + getAddressInSubstrateFormat(): Uint8Array { + return this.getAddressRaw(); + } + + getIdentity(context: IntegrationTestContext): Promise { + return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Substrate', context); + } +} + +export class EthersSigner implements Signer { + wallet: ethers.Wallet; + + constructor(wallet: ethers.Wallet) { + this.wallet = wallet; + } + + getAddressRaw(): Uint8Array { + return hexToU8a(this.wallet.address); + } + + sign(message: HexString | string | Uint8Array): Promise { + return this.wallet.signMessage(message).then((sig) => { + return hexToU8a(sig); + }); + } + + type(): KeypairType { + return 'ethereum'; + } + + getAddressInSubstrateFormat(): Uint8Array { + const prefix = stringToU8a('evm:'); + const address = this.getAddressRaw(); + const merged = new Uint8Array(prefix.length + address.length); + merged.set(prefix); + merged.set(address, 4); + return blake2AsU8a(merged, 256); + } + + getIdentity(context: IntegrationTestContext): Promise { + return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Evm', context); + } +} + +export class BitcoinSigner implements Signer { + keypair: ECPairInterface; + + constructor(keypair: ECPairInterface) { + this.keypair = keypair; + } + + getAddressRaw(): Uint8Array { + return bufferToU8a(this.keypair.publicKey); + } + + sign(message: HexString | string | Uint8Array): Promise { + return new Promise((resolve, reject) => { + if (isString(message)) { + // produce deterministic signatures + const sig = bitcoinMessage.sign(message, this.keypair.privateKey!, this.keypair.compressed); + resolve(sig); + } else { + reject('wrong message type'); + } + }); + } + + type(): KeypairType { + return 'bitcoin'; + } + + getAddressInSubstrateFormat(): Uint8Array { + return blake2AsU8a(this.getAddressRaw(), 256); + } + + getIdentity(context: IntegrationTestContext): Promise { + return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Bitcoin', context); + } +} + +export class SolanaSigner implements Signer { + keypair: Keypair; + + constructor(keypair: Keypair) { + this.keypair = keypair; + } + + getAddressRaw(): Uint8Array { + return this.keypair.publicKey.toBytes(); + } + + sign(message: HexString | string | Uint8Array): Promise { + return new Promise((resolve) => + resolve( + nacl.sign.detached( + isHexString(message) + ? hexToU8a(message as HexString) + : isString(message) + ? stringToU8a(message) + : message, + this.keypair.secretKey + ) + ) + ); + } + + type(): KeypairType { + return 'ed25519'; + } + + getAddressInSubstrateFormat(): Uint8Array { + return this.getAddressRaw(); + } + + getIdentity(context: IntegrationTestContext): Promise { + return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Solana', context); + } +} diff --git a/integration-tests/common/utils/identity-helper.ts b/integration-tests/common/utils/identity-helper.ts new file mode 100644 index 0000000..bad7d3c --- /dev/null +++ b/integration-tests/common/utils/identity-helper.ts @@ -0,0 +1,235 @@ +import { u8aToHex } from '@polkadot/util'; +import { blake2AsHex } from '@polkadot/util-crypto'; +import type { IntegrationTestContext } from '../common-types'; +import { AesOutput } from '@litentry/parachain-api'; +import { decryptWithAes, Signer } from './crypto'; +import { ethers } from 'ethers'; +import type { TypeRegistry } from '@polkadot/types'; +import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; +import type { LitentryValidationData, CorePrimitivesIdentity } from '@litentry/parachain-api'; +import type { HexString } from '@polkadot/util/types'; + +// blake2_256( + + ) +export function generateVerificationMessage( + context: IntegrationTestContext, + signer: CorePrimitivesIdentity, + identity: CorePrimitivesIdentity, + sidechainNonce: number, + options?: { prettifiedMessage?: boolean } +): string { + const _options = { prettifiedMessage: false, ...options }; + const encodedIdentity = context.api.createType('CorePrimitivesIdentity', identity).toU8a(); + const encodedWho = context.api.createType('CorePrimitivesIdentity', signer).toU8a(); + const encodedSidechainNonce = context.api.createType('Index', sidechainNonce); + const msg = Buffer.concat([encodedSidechainNonce.toU8a(), encodedWho, encodedIdentity]); + const hash = blake2AsHex(msg, 256); + + if (_options.prettifiedMessage) { + return `Token: ${hash}`; + } + + return hash; +} + +export async function buildIdentityHelper( + address: HexString | string, + type: CorePrimitivesIdentity['type'], + context: IntegrationTestContext +): Promise { + const identity = { + [type]: address, + }; + return context.api.createType('CorePrimitivesIdentity', identity); +} + +export function parseIdGraph( + sidechainRegistry: TypeRegistry, + idGraphOutput: AesOutput, + aesKey: HexString +): [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] { + const decryptedIdGraph = decryptWithAes(aesKey, idGraphOutput, 'hex'); + const idGraph: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] = + sidechainRegistry.createType( + 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', + decryptedIdGraph + ); + + return idGraph; +} + +type Web2ValidationConfig = + | { + identityType: 'Discord'; + context: IntegrationTestContext; + signerIdentitity: CorePrimitivesIdentity; + linkIdentity: CorePrimitivesIdentity; + verificationType: 'PublicMessage' | 'OAuth2'; + validationNonce: number; + } + | { + identityType: 'Twitter'; + context: IntegrationTestContext; + signerIdentitity: CorePrimitivesIdentity; + linkIdentity: CorePrimitivesIdentity; + verificationType: 'PublicTweet'; + validationNonce: number; + } + | { + identityType: 'Twitter'; + context: IntegrationTestContext; + signerIdentitity: CorePrimitivesIdentity; + linkIdentity: CorePrimitivesIdentity; + verificationType: 'OAuth2'; + validationNonce: number; + oauthState: string; + }; + +export async function buildWeb2Validation(config: Web2ValidationConfig): Promise { + const { context, signerIdentitity, linkIdentity, validationNonce } = config; + const msg = generateVerificationMessage(context, signerIdentitity, linkIdentity, validationNonce); + console.log(`post verification msg to ${config.identityType}:`, msg); + + if (config.identityType === 'Discord') { + const discordValidationData = { + Web2Validation: { + Discord: {}, + }, + }; + + if (config.verificationType === 'PublicMessage') { + discordValidationData.Web2Validation.Discord = { + PublicMessage: { + channel_id: `0x${Buffer.from('919848392035794945', 'utf8').toString('hex')}`, + message_id: `0x${Buffer.from('1', 'utf8').toString('hex')}`, + guild_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, + }, + }; + } else { + discordValidationData.Web2Validation.Discord = { + OAuth2: { + code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, + redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, + }, + }; + } + + return context.api.createType('LitentryValidationData', discordValidationData); + } else { + const twitterValidationData = { + Web2Validation: { + Twitter: {}, + }, + }; + + if (config.verificationType === 'PublicTweet') { + twitterValidationData.Web2Validation.Twitter = { + PublicTweet: { + tweet_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, + }, + }; + } else { + twitterValidationData.Web2Validation.Twitter = { + OAuth2: { + code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, + state: config.oauthState, + redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, + }, + }; + } + + return context.api.createType('LitentryValidationData', twitterValidationData); + } +} + +export async function buildValidations( + context: IntegrationTestContext, + signerIdentitity: CorePrimitivesIdentity, + linkIdentity: CorePrimitivesIdentity, + startingSidechainNonce: number, + network: 'ethereum' | 'substrate' | 'bitcoin' | 'solana', + signer?: Signer, + options?: { prettifiedMessage?: boolean } +): Promise { + const _options = { prettifiedMessage: false, ...options }; + const validationNonce = startingSidechainNonce++; + + const msg = generateVerificationMessage(context, signerIdentitity, linkIdentity, validationNonce); + if (network === 'ethereum') { + const evmValidationData = { + Web3Validation: { + Evm: { + message: '', + signature: { + Ethereum: '' as HexString, + }, + }, + }, + }; + evmValidationData.Web3Validation.Evm.message = msg; + const msgHash = ethers.utils.arrayify(msg); + const evmSignature = u8aToHex(await signer!.sign(msgHash)); + + evmValidationData!.Web3Validation.Evm.signature.Ethereum = evmSignature; + + return context.api.createType('LitentryValidationData', evmValidationData); + } + + if (network === 'substrate') { + const substrateValidationData = { + Web3Validation: { + Substrate: { + message: '', + signature: { + Sr25519: '' as HexString, + }, + }, + }, + }; + console.log('post verification msg to substrate: ', msg); + substrateValidationData.Web3Validation.Substrate.message = msg; + const substrateSignature = await signer!.sign(msg); + substrateValidationData!.Web3Validation.Substrate.signature.Sr25519 = u8aToHex(substrateSignature); + + return context.api.createType('LitentryValidationData', substrateValidationData); + } + + if (network === 'bitcoin') { + const bitcoinValidationData = { + Web3Validation: { + Bitcoin: { + message: '', + signature: { + Bitcoin: '' as HexString, + }, + }, + }, + }; + bitcoinValidationData.Web3Validation.Bitcoin.message = msg; + // we need to sign the hex string without `0x` prefix, the signature is base64-encoded string + const bitcoinSignature = await signer!.sign(msg.substring(2)); + bitcoinValidationData!.Web3Validation.Bitcoin.signature.Bitcoin = u8aToHex(bitcoinSignature); + + return context.api.createType('LitentryValidationData', bitcoinValidationData); + } + + if (network === 'solana') { + const solanaValidationData = { + Web3Validation: { + Solana: { + message: '', + signature: { + Ed25519: '' as HexString, + }, + }, + }, + }; + console.log('post verification msg to solana: ', msg); + solanaValidationData.Web3Validation.Solana.message = msg; + const solanaSignature = await signer!.sign(msg); + solanaValidationData!.Web3Validation.Solana.signature.Ed25519 = u8aToHex(solanaSignature); + + return context.api.createType('LitentryValidationData', solanaValidationData); + } + + throw new Error(`[buildValidation]: Unsupported network ${network}.`); +} diff --git a/integration-tests/common/utils/index.ts b/integration-tests/common/utils/index.ts new file mode 100644 index 0000000..77d2344 --- /dev/null +++ b/integration-tests/common/utils/index.ts @@ -0,0 +1,15 @@ +import '../config'; + +// in order to handle self-signed certificates we need to turn off the validation +// TODO add self signed certificate ?? +process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; + +export * from './assertion'; +export * from './common'; +export * from './context'; +export * from './crypto'; +export * from './identity-helper'; +export * from './integration-setup'; +export * from './storage'; +export * from './vc-helper'; +export * from './type-creators'; diff --git a/integration-tests/common/utils/integration-setup.ts b/integration-tests/common/utils/integration-setup.ts new file mode 100644 index 0000000..d398fff --- /dev/null +++ b/integration-tests/common/utils/integration-setup.ts @@ -0,0 +1,45 @@ +import { ApiPromise } from '@litentry/parachain-api'; +import { KeyObject } from 'crypto'; +import WebSocketAsPromised from 'websocket-as-promised'; +import type { IntegrationTestContext } from '../common-types'; +import type { Metadata, TypeRegistry } from '@polkadot/types'; +import type { HexString } from '@polkadot/util/types'; +import { initIntegrationTestContext } from './context'; + +export function describeLitentry(title: string, cb: (context: IntegrationTestContext) => void) { + describe(title, function () { + // Set timeout to 6000 seconds + this.timeout(6000000); + + const context: IntegrationTestContext = { + mrEnclave: '0x11' as HexString, + api: {} as ApiPromise, + tee: {} as WebSocketAsPromised, + teeShieldingKey: {} as KeyObject, + web3Wallets: {} as any, + sidechainMetaData: {} as Metadata, + sidechainRegistry: {} as TypeRegistry, + // default LitentryRococo + chainIdentifier: 42, + requestId: 0, + }; + + before('Starting Litentry(parachain&tee)', async function () { + //env url + + const tmp = await initIntegrationTestContext(process.env.WORKER_ENDPOINT!, process.env.NODE_ENDPOINT!); + context.mrEnclave = tmp.mrEnclave; + context.api = tmp.api; + context.tee = tmp.tee; + context.teeShieldingKey = tmp.teeShieldingKey; + context.web3Wallets = tmp.web3Wallets; + context.sidechainMetaData = tmp.sidechainMetaData; + context.sidechainRegistry = tmp.sidechainRegistry; + context.chainIdentifier = tmp.chainIdentifier; + }); + + after(() => Promise.resolve()); + + cb(context); + }); +} diff --git a/integration-tests/common/utils/storage.ts b/integration-tests/common/utils/storage.ts new file mode 100644 index 0000000..3720341 --- /dev/null +++ b/integration-tests/common/utils/storage.ts @@ -0,0 +1,110 @@ +import { u8aToHex, u8aConcat } from '@polkadot/util'; +import { xxhashAsU8a } from '@polkadot/util-crypto'; +import { StorageEntryMetadataV14, SiLookupTypeId, StorageHasherV14 } from '@polkadot/types/interfaces'; +import { sendRequest } from '../call'; +import { blake2128Concat, twox64Concat, identity, createJsonRpcRequest, nextRequestId } from '../helpers'; +import type { IntegrationTestContext } from '../common-types'; +import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; +import type { CorePrimitivesIdentity } from '@litentry/parachain-api'; +import type { HexString } from '@polkadot/util/types'; +import type { Metadata } from '@polkadot/types'; + +const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)); + +import * as base58 from 'micro-base58'; + +//sidechain storage utils +export function buildStorageEntry(metadata: Metadata, prefix: string, method: string): StorageEntryMetadataV14 | null { + for (const pallet of metadata.asV14.pallets) { + if (pallet.name.toString() == prefix) { + const storage = pallet.storage.unwrap(); + + for (const item of storage.items) { + if (item.name.toString() == method) { + return item; + } + } + } + } + return null; +} + +export function buildStorageKey( + metadata: Metadata, + prefix: string, + method: string, + keyTypeId?: SiLookupTypeId, + hashers?: Array, + input?: Array +): Uint8Array { + let storageKey = u8aConcat(xxhashAsU8a(prefix, 128), xxhashAsU8a(method, 128)); + if (keyTypeId && hashers && input) { + const keyTypeIds = + hashers.length === 1 ? [keyTypeId] : metadata.registry.lookup.getSiType(keyTypeId).def.asTuple; + for (let i = 0; i < keyTypeIds.length; i++) { + const theKeyTypeId = keyTypeIds[i]; + const theHasher = hashers[i].toString(); + const theKeyItem = input[i]; + // get the scale encoded input data by encoding the input + const theKeyType = metadata.registry.createLookupType(theKeyTypeId); + const theKeyItemEncoded = metadata.registry.createType(theKeyType, theKeyItem).toU8a(); + // apply hasher + let theKeyItemAppliedHasher; + if (theHasher == 'Blake2_128Concat') { + theKeyItemAppliedHasher = blake2128Concat(theKeyItemEncoded); + } else if (theHasher == 'Twox64Concat') { + theKeyItemAppliedHasher = twox64Concat(theKeyItemEncoded); + } else if (theHasher == 'Identity') { + theKeyItemAppliedHasher = identity(theKeyItemEncoded); + } else { + throw new Error(`The hasher ${theHasher} is not support.`); + } + storageKey = u8aConcat(storageKey, theKeyItemAppliedHasher); + } + } + return storageKey; +} +export async function buildStorageHelper( + metadata: Metadata, + prefix: string, + method: string, + ...input: Array +): Promise { + const storageEntry = buildStorageEntry(metadata, prefix, method); + if (!storageEntry) { + throw new Error('Can not find the storage entry from metadata'); + } + let storageKey; + + if (storageEntry.type.isPlain) { + storageKey = buildStorageKey(metadata, prefix, method); + } else if (storageEntry.type.isMap) { + const { hashers, key } = storageEntry.type.asMap; + if (input.length != hashers.length) { + throw new Error('The `input` param is not correct'); + } + storageKey = buildStorageKey(metadata, prefix, method, key, hashers, input); + } else { + throw new Error('Only support plain and map type'); + } + console.debug(`storage key: ${u8aToHex(storageKey)}`); + return u8aToHex(storageKey); +} + +export async function checkIdGraph( + context: IntegrationTestContext, + pallet: string, + method: string, + subject: CorePrimitivesIdentity, + identity: HexString +): Promise { + await sleep(6000); + const storageKey = await buildStorageHelper(context.sidechainMetaData, pallet, method, subject, identity); + + const base58mrEnclave = base58.encode(Buffer.from(context.mrEnclave.slice(2), 'hex')); + + const request = createJsonRpcRequest('state_getStorage', [base58mrEnclave, storageKey], nextRequestId(context)); + const resp = await sendRequest(context.tee, request, context.api); + const idGraph = context.sidechainRegistry.createType('PalletIdentityManagementTeeIdentityContext', resp.value); + return idGraph; +} diff --git a/integration-tests/common/utils/type-creators.ts b/integration-tests/common/utils/type-creators.ts new file mode 100644 index 0000000..8516ad4 --- /dev/null +++ b/integration-tests/common/utils/type-creators.ts @@ -0,0 +1,40 @@ +import { u8aToHex, hexToU8a, stringToU8a } from '@polkadot/util'; +import type { ApiPromise } from '@polkadot/api'; +import type { LitentryMultiSignature } from '@litentry/parachain-api'; +import type { Signer } from './crypto'; + +export async function createLitentryMultiSignature( + api: ApiPromise, + args: { signer: Signer; payload: Uint8Array | string } +): Promise { + const { signer, payload } = args; + const signerType = signer.type(); + + // Sign Bytes: + // For Bitcoin, sign as hex with no prefix; for other types, convert it to raw bytes + if (payload instanceof Uint8Array) { + const signature = await signer.sign(signerType === 'bitcoin' ? u8aToHex(payload).substring(2) : payload); + + return api.createType('LitentryMultiSignature', { + [signerType]: signature, + }); + } + + // Sign hex: + // Remove the prefix for bitcoin signature, and use raw bytes for other types + if (payload.startsWith('0x')) { + const signature = await signer.sign(signerType === 'bitcoin' ? payload.substring(2) : hexToU8a(payload)); + + return api.createType('LitentryMultiSignature', { + [signerType]: signature, + }); + } + + // Sign string: + // For Bitcoin, pass it as it is, for other types, convert it to raw bytes + const signature = await signer.sign(signerType === 'bitcoin' ? payload : stringToU8a(payload)); + + return api.createType('LitentryMultiSignature', { + [signerType]: signature, + }); +} diff --git a/integration-tests/common/utils/vc-helper.ts b/integration-tests/common/utils/vc-helper.ts new file mode 100644 index 0000000..2c3f4da --- /dev/null +++ b/integration-tests/common/utils/vc-helper.ts @@ -0,0 +1,348 @@ +// @todo move to a better place, and make it more generic, at least define the type +export const mockBatchAssertion = [ + { + description: 'request_batch_vc trial test', + assertion: [{ A7: '5' }, { A8: ['Litentry'] }, { A20: 'A20' }], + }, + { + description: 'Have identified at least one account/address in both Web2 and Web3.', + assertion: { + A1: 'A1', + }, + }, + { + description: 'The user is a member of Litentry Discord.', + assertion: { + A2: '807161594245152800', + }, + }, + + { + description: + 'Have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882', + assertion: { + A3: ['A3', 'A3', 'A3'], + }, + }, + { + description: 'The length of time a user continues to hold LIT token', + assertion: { + A4: '10', + }, + }, +]; + +// https://github.com/litentry/litentry-parachain/tree/dev/tee-worker/litentry/core/assertion-build/src +export const mockAssertions = [ + { + description: 'Have identified at least one account/address in both Web2 and Web3.', + assertion: { + A1: 'A1', + }, + }, + { + description: 'The user is a member of Litentry Discord.', + assertion: { + A2: '807161594245152800', + }, + }, + + { + description: + 'Have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882', + assertion: { + A3: ['A3', 'A3', 'A3'], + }, + }, + + // litentry-archive + { + description: + 'The user is an early bird user of the IdentityHub EVM version and has generated at least 1 credential during 2023 Aug 14th ~ Aug 21st.', + assertion: { + A20: 'A20', + }, + }, + + // Achainable + { + description: `A trader or liquidity provider of Uniswap V2 or V3 + Uniswap V2 Factory Contract: 0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f + Uniswap V3 Factory Contract: 0x1f98431c8ad98523631ae4a59f267346ea31f984`, + assertion: { + Achainable: { + Basic: { + name: 'Uniswap V2/V3 user', + chain: ['Ethereum'], + }, + }, + }, + }, + { + description: 'The number of ETH tokens hold > 0', + assertion: { + Achainable: { + Amount: { + name: 'Balance over {amount}', + chain: ['Ethereum'], + amount: '0', + }, + }, + }, + }, + { + description: 'The class of year that Ethereum account was created (must have on-chain records)', + assertion: { + Achainable: { + ClassOfYear: { + name: 'Account created between {dates}', + chain: ['Ethereum'], + }, + }, + }, + }, + { + description: 'A deployer of a smart contract on Ethereum', + assertion: { + Achainable: { + Amount: { + name: 'Created over {amount} contracts', + chain: ['Ethereum'], + amount: '0', + }, + }, + }, + }, + { + description: 'A deployer of a smart contract on Ethereum', + assertion: { + Achainable: { + AmountToken: { + name: 'LIT Holding Amount', + chain: ['Litentry', 'Litmus'], + amount: '0', + }, + }, + }, + }, + + { + description: 'The length of time a user continues to hold LIT token', + assertion: { + A4: '10', + }, + }, + { + description: "The range of the user's Twitter follower count", + assertion: { + A6: [], + }, + }, + { + description: 'The length of time a user continues to hold DOT token', + assertion: { + A7: '5', + }, + }, + { + description: + 'The range of number of transactions a user has made for a specific token on all supported networks(Litentry)', + assertion: { + A8: ['Litentry'], + }, + }, + { + description: 'The user has participated in any Polkadot on-chain governance events', + assertion: { + A14: [], + }, + }, + + // SORA + { + description: + 'Congratulations on your participation in our first quiz in collaboration with our partner, SORA. You have embarked on an exciting educational journey, exploring the world of DeFi & Web3 Identity, we truly appreciate your curiosity and dedication.', + assertion: { + GenericDiscordRole: { + SoraQuiz: 'Attendee', + }, + }, + }, + // VIP3 + { + description: 'VIP3 Silver Card Holder', + assertion: { + VIP3MembershipCard: 'Silver', + }, + }, + // BNB domain-nodereal + { + description: 'Holding a certain amount of bnb domain names', + assertion: { + BnbDomainHolding: 'BnbDomainHolding', + }, + }, + { + description: 'Holding a certain amount of 000-999.bnb domain names', + assertion: { + BnbDigitDomainClub: 'Bnb999ClubMember', + }, + }, + // OneBlock + { + description: 'A participant to the course co-created by OneBlock+ and Parity', + assertion: { + Oneblock: 'CourseCompletion', + }, + }, + // Geniidata + { + description: 'NFT holder', + assertion: { + Brc20AmountHolder: [], + }, + }, + + // NftHolder + { + description: 'You are a holder of a certain kind of NFT', + assertion: { + NftHolder: 'WeirdoGhostGang', + }, + }, + { + description: 'You are a holder of a certain kind of NFT', + assertion: { + NftHolder: 'Club3Sbt', + }, + }, + { + description: 'You are a holder of a certain kind of NFT', + assertion: { + NftHolder: 'MFan', + }, + }, + { + description: 'You are a holder of a certain kind of NFT', + assertion: { + NftHolder: 'Mvp', + }, + }, + + // TokenHoldingAmount + { + description: 'The amount of TRX you are holding', + assertion: { + TokenHoldingAmount: 'TRX', + }, + }, + { + description: 'The amount of BNB you are holding', + assertion: { + TokenHoldingAmount: 'BNB', + }, + }, + { + description: 'The amount of ETH you are holding', + assertion: { + TokenHoldingAmount: 'ETH', + }, + }, + { + description: 'The amount of LIT you are holding', + assertion: { + TokenHoldingAmount: 'LIT', + }, + }, + { + description: 'The amount of SOL you are holding', + assertion: { + TokenHoldingAmount: 'SOL', + }, + }, + { + description: 'The amount of NFP you are holding', + assertion: { + TokenHoldingAmount: 'NFP', + }, + }, + { + description: 'The amount of BTC you are holding', + assertion: { + TokenHoldingAmount: 'BTC', + }, + }, + { + description: 'The amount of SHIB you are holding', + assertion: { + TokenHoldingAmount: 'SHIB', + }, + }, + { + description: 'The amount of BEAN you are holding', + assertion: { + TokenHoldingAmount: 'BEAN', + }, + }, + { + description: 'The amount of AN you are holding', + assertion: { + TokenHoldingAmount: 'AN', + }, + }, + { + description: 'The amount of TUNA you are holding', + assertion: { + TokenHoldingAmount: 'TUNA', + }, + }, + + { + description: 'The amount of LIT you are staking', + assertion: { + LITStaking: 'LITStaking', + }, + }, + { + description: 'The amount of a Ton you are holding', + assertion: { + EVMAmountHolding: 'Ton', + }, + }, + + // PlatformUser + { + description: 'You are a user of platform KaratDao', + assertion: { + PlatformUser: 'KaratDao', + }, + }, + { + description: 'You are a user of platform MagicCraft', + assertion: { + PlatformUser: 'MagicCraftStaking', + }, + }, + { + description: 'You are a user of platform DarenMarket', + assertion: { + PlatformUser: 'DarenMarket', + }, + }, + + // CryptoSummary + { + description: 'Generate a summary of your on-chain identity', + assertion: { + CryptoSummary: [], + }, + }, + + // WeirdoGhostGangHolder + { + description: 'You are WeirdoGhostGang NFT holder', + assertion: { + WeirdoGhostGangHolder: [], + }, + }, +]; From b7572fc590b66365cf0da1e77235729753368a5b Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Thu, 8 Aug 2024 15:41:12 +0800 Subject: [PATCH 06/45] deploy scripts --- scripts/deploy.ts | 338 ++++++++++++++++++++++++++++++++++++++++++ scripts/run_deploy.sh | 62 ++++++++ 2 files changed, 400 insertions(+) create mode 100644 scripts/deploy.ts create mode 100755 scripts/run_deploy.sh diff --git a/scripts/deploy.ts b/scripts/deploy.ts new file mode 100644 index 0000000..34fa07d --- /dev/null +++ b/scripts/deploy.ts @@ -0,0 +1,338 @@ +import { ethers } from 'hardhat' +import WebSocket from 'ws' +import { all, getChain } from '@litentry/chaindata' +import { ApiPromise, WsProvider, Keyring } from '@polkadot/api' +import { compactStripLength, hexToU8a, u8aToString } from '@polkadot/util' +import crypto, { KeyObject } from 'crypto' + +// TODO use type from parachain-api instead +// parachain-api using es-module, dynamic using commonjs, cannot import es-module package in commonjs now. +const types = { + WorkerRpcReturnValue: { + value: 'Vec', + }, +} + +const chainIdPrefix = 'litentry-' + +const SUPPORTED_CHAINS: string[] = all.map((item) => + item.id.replace(chainIdPrefix, '') +) + +const CHAINS_WITHOUT_MNEMONIC = ['local', 'dev'] + +type DeployResult = { + success: boolean + // deploy related block hash + hashes: string[] +} + +function createWebSocket(endpoint: string): Promise { + return new Promise((resolve, reject) => { + const ws = new WebSocket(endpoint) + + ws.on('open', () => { + console.log('WebSocket connection opened.') + resolve(ws) + }) + + ws.on('error', (error) => { + reject(error) + }) + + ws.on('close', (code, reason) => { + console.log( + `WebSocket connection closed: ${code}${(reason ?? '').length > 0 ? ` ${reason}` : ''}.` + ) + }) + }) +} + +function sendRequest(ws: WebSocket, request: any): Promise { + return new Promise((resolve, reject) => { + const messageListener = (data: any) => { + try { + const parsed = JSON.parse(data) + if (parsed.id === request.id) { + ws.off('message', messageListener) + resolve(parsed) + } + } catch (error) { + reject(error) + } + } + + ws.on('message', messageListener) + + ws.send(JSON.stringify(request), (err) => { + if (err) { + reject(err) + } + }) + }) +} + +async function retrieveTeeShieldingKey(api: ApiPromise, endpoint: string) { + const ws = await createWebSocket(endpoint) + + const resp = await sendRequest(ws, { + jsonrpc: '2.0', + method: 'author_getShieldingKey', + params: Uint8Array.from([]), + id: new Date().getTime(), + }) + + const result = resp.result + const res: any = api.createType('WorkerRpcReturnValue', result) + + const key = JSON.parse( + u8aToString(compactStripLength(hexToU8a(res.value.toHex()))[1]) + ) as { + n: Uint8Array + e: Uint8Array + } + + ws.close() + + return crypto.createPublicKey({ + key: { + alg: 'RSA-OAEP-256', + kty: 'RSA', + use: 'enc', + n: Buffer.from(key.n.reverse()).toString('base64url'), + e: Buffer.from(key.e.reverse()).toString('base64url'), + }, + format: 'jwk', + }) +} + +const waitForDeploy = async (api: ApiPromise): Promise => { + return new Promise((resolve) => { + let blocksToScan = 15 + let deploySuccess = false + let relatedHashes: string[] = [] + const unsubscribe = api.rpc.chain.subscribeNewHeads( + async (blockHeader) => { + process.stdout.write('...') + const shiftedApi = await api.at(blockHeader.hash) + + const allBlockEvents = await shiftedApi.query.system.events() + + allBlockEvents + // @ts-ignore + .forEach( + // @ts-ignore + ({ event, phase }) => { + if (phase.isApplyExtrinsic) { + if ( + event.section === 'evmAssertions' || + (event.section === 'developerCommittee' && + event.method === 'MemberExecuted') + ) { + const blockHash = blockHeader.hash.toHuman() + if (!relatedHashes.includes(blockHash)) { + relatedHashes.push(blockHash) + } + console.log( + `\n${event.section}.${event.method}, ${blockHash}` + ) + if ( + event.section === 'evmAssertions' && + event.method === 'AssertionStored' + ) { + deploySuccess = true + } + } + } + } + ) + + if (!deploySuccess) { + blocksToScan -= 1 + if (blocksToScan < 1) { + console.log( + '\nTimed out listening for deploy result event' + ) + resolve({ + success: deploySuccess, + hashes: relatedHashes, + }) + ;(await unsubscribe)() + } + return + } + + resolve({ success: deploySuccess, hashes: relatedHashes }) + ;(await unsubscribe)() + } + ) + }) +} + +/** + * Generates a contract ID based on the provided contract byte code and secrets. + * + * Same contract byte code and secrets will get the same contractId, this can ensure dev/stg/prod has same contract ID. + * + * @param {string} contractByteCode - The byte codes of the contract. + * @param {string[]} secrets - An array of secret strings to be included in the hash. + * @returns {string} The generated contract ID. + */ +function generateContractId( + contractByteCode: string, + secrets: string[] +): string { + // Combine the contract byte codes and secrets into a single string + const data = contractByteCode + secrets.join(' ') + + // Create a SHA-256 hash of the combined data + const hash = crypto.createHash('sha256').update(data).digest('hex') + + // Take the first 40 characters of the hash to form the contract ID, prefixed with '0x' + const contractId = `0x${hash.slice(0, 40)}` + return contractId +} + +function genesisSubstrateWallet(name: string) { + const keyring = new Keyring({ type: 'sr25519' }) + const keyPair = keyring.addFromUri(`//${name}`, { name }) + return keyPair +} + +function getSenderWallet(mnemonic: string) { + const keyring = new Keyring({ type: 'sr25519', ss58Format: 42 }) + return keyring.addFromUri(mnemonic, { name: 'ss-sender' }, 'sr25519') +} + +/** + * Encrypts a plaintext buffer using the provided public key in segments. + * + * Same logic as: https://github.com/apache/incubator-teaclave-sgx-sdk/blob/master/sgx_crypto_helper/src/rsa3072.rs#L161-L179 + * + * @param {crypto.KeyLike} pubKey - The public key to use for encryption. + * @param {Uint8Array} plaintext - The plaintext buffer to encrypt. + * @returns {Buffer} The encrypted data. + */ +function encryptBuffer(pubKey: crypto.KeyLike, plaintext: Uint8Array): Buffer { + const bs = 384 // 3072 bits = 384 bytes + const bsPlain = bs - (2 * 256) / 8 - 2 // Maximum plaintext block size + const count = Math.ceil(plaintext.length / bsPlain) // Use Math.ceil to ensure proper chunk count + + const cipherText = Buffer.alloc(bs * count) + + for (let i = 0; i < count; i++) { + const plainSlice = plaintext.slice( + i * bsPlain, + Math.min((i + 1) * bsPlain, plaintext.length) + ) + const cipherSlice = crypto.publicEncrypt( + { + key: pubKey, + padding: crypto.constants.RSA_PKCS1_OAEP_PADDING, + oaepHash: 'sha256', + }, + plainSlice + ) + + cipherSlice.copy(cipherText, i * bs) + } + + return cipherText +} + +async function main() { + const chain = process.env.CHAIN as string + const contract = process.env.CONTRACT as string + const mnemonic = process.env.MNEMONIC as string + const secrets = ((process.env.SECRETS as string) ?? '') + .split('\n') + .filter((secret) => !!secret) + + if (!SUPPORTED_CHAINS.includes(chain)) { + throw new Error( + `Unsupported chain ${chain}, need be one of ${SUPPORTED_CHAINS}.` + ) + } + + // mnemonic is required for staging and prod chain. + const needUseMnemonic = !CHAINS_WITHOUT_MNEMONIC.includes(chain) + if (needUseMnemonic && (mnemonic ?? '').length === 0) { + throw new Error(`The mnemonic is required for ${chain} chain.`) + } + + const chainId = `${chainIdPrefix}${chain}` + const { rpcs, enclaveRpcs } = getChain(chainId) + + const api = await ApiPromise.create({ + provider: new WsProvider(rpcs[0].url), + types, + }) + + const encryptedSecrets: string[] = [] + if (secrets.length > 0) { + let teeShieldingKey: KeyObject + try { + teeShieldingKey = await retrieveTeeShieldingKey( + api, + enclaveRpcs[0].url + ) + } catch (e) { + throw new Error(`Fail to retrieve teeShieldingKey, error: ${e}`) + } + + secrets.forEach((secret) => { + const encodedSecret = api.createType('String', secret).toU8a() + // Some secrets are too large, so need using segment encryption. + const encryptedSecret = encryptBuffer( + teeShieldingKey, + encodedSecret + ) + encryptedSecrets.push(`0x${encryptedSecret.toString('hex')}`) + }) + } + + const ContractFactory = await ethers.getContractFactory(contract) + const contractId = generateContractId(ContractFactory.bytecode, secrets) + + console.log( + `Begin to deploying contract: ${contract}, to chain: ${chain}, contract id: ${contractId}` + ) + + const waitForDeployPromise = waitForDeploy(api) + + const proposal = api.tx.evmAssertions.createAssertion( + contractId, + ContractFactory.bytecode, + encryptedSecrets + ) + const alice = needUseMnemonic + ? getSenderWallet(mnemonic) + : genesisSubstrateWallet('Alice') + await api.tx.developerCommittee + .execute(proposal, proposal.encodedLength) + .signAndSend(alice) + + const result = await waitForDeployPromise + if (result.success) { + console.log( + `Success deploy contract: ${contract}, to chain: ${chain}, contract id: ${contractId}` + ) + console.log(`Check deployment result in these block details below:`) + } else if (result.hashes.length > 0) { + console.log( + 'Deploy failed, check the failure reason in these block details below:' + ) + } + result.hashes.forEach((hash) => { + console.log( + `https://polkadot.js.org/apps/?rpc=${rpcs[0].url}#/explorer/query/${hash}` + ) + }) +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error) + process.exit(1) + }) diff --git a/scripts/run_deploy.sh b/scripts/run_deploy.sh new file mode 100755 index 0000000..47f7e2a --- /dev/null +++ b/scripts/run_deploy.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# Default values +CHAIN_NAME="" +CONTRACT_NAME="" +MNEMONIC_VALUE="" +SECRET_VALUES=() + +# Parse command-line arguments +while [[ "$#" -gt 0 ]]; do + case $1 in + --chain) + CHAIN_NAME="$2"; shift 2 ;; + --contract) + CONTRACT_NAME="$2"; shift 2 ;; + --mnemonic) + MNEMONIC_VALUE="$2"; shift 2 ;; + --secrets) + shift + while [[ "$1" && "$1" != --* ]]; do + SECRET_VALUES+=("$1") + shift + done + ;; + *) + echo "Unknown parameter passed: $1" + exit 1 + ;; + esac +done + +# Check if parameters are provided +if [ -z "$CONTRACT_NAME" ]; then + echo "Error: --contract parameter is required" + exit 1 +fi + +if [ -z "$CHAIN_NAME" ]; then + echo "Error: --chain parameter is required" + exit 1 +fi + +# Set environment variables +export CHAIN=$CHAIN_NAME +export CONTRACT=$CONTRACT_NAME + +if [ -n "$MNEMONIC_VALUE" ]; then + export MNEMONIC=$MNEMONIC_VALUE +else + unset MNEMONIC +fi + +if [ ${#SECRET_VALUES[@]} -gt 0 ]; then + # Join array elements with line break for the environment variable + export SECRETS=$(IFS=$'\n'; echo ${SECRET_VALUES[*]}) +else + unset SECRETS +fi + + +# Run Hardhat script +npx hardhat run scripts/deploy.ts From 07e8021098985a844aa51eb36cb3055e407542aa Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Thu, 8 Aug 2024 15:41:57 +0800 Subject: [PATCH 07/45] update deps --- integration-tests/contracts.test.ts | 218 ++++ package.json | 41 +- pnpm-lock.yaml | 1861 ++++++++++++++++++++++++++- 3 files changed, 2116 insertions(+), 4 deletions(-) create mode 100644 integration-tests/contracts.test.ts diff --git a/integration-tests/contracts.test.ts b/integration-tests/contracts.test.ts new file mode 100644 index 0000000..adec702 --- /dev/null +++ b/integration-tests/contracts.test.ts @@ -0,0 +1,218 @@ +import { randomBytes, KeyObject } from 'crypto' +import { step } from 'mocha-steps' +import { buildValidations, initIntegrationTestContext } from './common/utils' +import { assertIsInSidechainBlock, assertVc } from './common/utils/assertion' +import { + getSidechainNonce, + getTeeShieldingKey, + sendRequestFromTrustedCall, + createSignedTrustedCallRequestVc, + createSignedTrustedCallLinkIdentity, +} from './common/di-utils' // @fixme move to a better place +import type { IntegrationTestContext } from './common/common-types' +import { aesKey } from './common/call' +import type { + CorePrimitivesIdentity, + LitentryValidationData, + Web3Network, +} from '@litentry/parachain-api' +import fs from 'fs' +import path from 'path' +import { assert } from 'chai' +import { genesisSubstrateWallet } from './common/helpers' +import { KeyringPair } from '@polkadot/keyring/types' +import { subscribeToEvents } from './common/transactions' +import { encryptWithTeeShieldingKey } from './common/utils/crypto' +import { ethers } from 'ethers' +import { sleep } from './common/utils' +import { Bytes, Vec } from '@polkadot/types-codec' + +describe('Test Vc (direct request)', function () { + let context: IntegrationTestContext = undefined as any + let teeShieldingKey: KeyObject = undefined as any + let aliceSubstrateIdentity: CorePrimitivesIdentity = undefined as any + + let alice: KeyringPair = undefined as any + let contractBytecode = undefined as any + const linkIdentityRequestParams: { + nonce: number + identity: CorePrimitivesIdentity + validation: LitentryValidationData + networks: Bytes | Vec + }[] = [] + this.timeout(6000000) + + before(async () => { + context = await initIntegrationTestContext( + process.env.WORKER_ENDPOINT!, // @fixme evil assertion; centralize env access + process.env.NODE_ENDPOINT! // @fixme evil assertion; centralize env access + ) + teeShieldingKey = await getTeeShieldingKey(context) + aliceSubstrateIdentity = + await context.web3Wallets.substrate.Alice.getIdentity(context) + alice = genesisSubstrateWallet('Alice') + }) + + step('loading tokenmapping contract bytecode', async function () { + const file = path.resolve( + './', + './contracts/token_holding_amount/TokenMapping.sol/TokenMapping.json' + ) + const data = fs.readFileSync(file, 'utf8') + contractBytecode = JSON.parse(data).bytecode + assert.isNotEmpty(contractBytecode) + }) + + step( + 'deploying tokenmapping contract via parachain pallet', + async function () { + const secretValue = 'my-secrets-value' + const secretEncoded = context.api + .createType('String', secretValue) + .toU8a() + const encryptedSecrets = encryptWithTeeShieldingKey( + teeShieldingKey, + secretEncoded + ) + + const secret = '0x' + encryptedSecrets.toString('hex') + + const assertionId = '0x0000000000000000000000000000000000000003' + const createAssertionEventsPromise = subscribeToEvents( + 'evmAssertions', + 'AssertionCreated', + context.api + ) + + const proposal = context.api.tx.evmAssertions.createAssertion( + assertionId, + contractBytecode, + [ + // At least three secrets are required here. + secret, + secret, + secret, + ] + ) + await context.api.tx.developerCommittee + .execute(proposal, proposal.encodedLength) + .signAndSend(alice) + + const event = (await createAssertionEventsPromise).map((e) => e) + assert.equal(event.length, 1) + } + ) + + step('linking identities (alice)', async function () { + let currentNonce = ( + await getSidechainNonce(context, aliceSubstrateIdentity) + ).toNumber() + const getNextNonce = () => currentNonce++ + const evmNonce = getNextNonce() + + const evmIdentity = + await context.web3Wallets.evm.Alice.getIdentity(context) + const evmValidation = await buildValidations( + context, + aliceSubstrateIdentity, + evmIdentity, + evmNonce, + 'ethereum', + context.web3Wallets.evm.Alice + ) + const evmNetworks = context.api.createType('Vec', [ + 'Ethereum', + 'Bsc', + ]) + linkIdentityRequestParams.push({ + nonce: evmNonce, + identity: evmIdentity, + validation: evmValidation, + networks: evmNetworks, + }) + + let counter = 0 + for (const { + nonce, + identity, + validation, + networks, + } of linkIdentityRequestParams) { + counter++ + const requestIdentifier = `0x${randomBytes(32).toString('hex')}` + const linkIdentityCall = await createSignedTrustedCallLinkIdentity( + context.api, + context.mrEnclave, + context.api.createType('Index', nonce), + context.web3Wallets.substrate.Alice, + aliceSubstrateIdentity, + identity.toHex(), + validation.toHex(), + networks.toHex(), + context.api.createType('Option', aesKey).toHex(), + requestIdentifier, + { + withWrappedBytes: false, + withPrefix: counter % 2 === 0, // alternate per entry + } + ) + + const res = await sendRequestFromTrustedCall( + context, + teeShieldingKey, + linkIdentityCall + ) + await assertIsInSidechainBlock('linkIdentityCall', res) + } + }) + + step('requesting VC for deployed contract', async function () { + await sleep(30) + const requestIdentifier = `0x${randomBytes(32).toString('hex')}` + const nonce = ( + await getSidechainNonce(context, aliceSubstrateIdentity) + ).toNumber() + + const abiCoder = new ethers.utils.AbiCoder() + const encodedData = abiCoder.encode(['string'], ['bnb']) + + const assertion = { + dynamic: context.api.createType('DynamicParams', [ + Uint8Array.from( + Buffer.from( + '0000000000000000000000000000000000000003', + 'hex' + ) + ), + encodedData, + true, + ]), + } + + const requestVcCall = await createSignedTrustedCallRequestVc( + context.api, + context.mrEnclave, + context.api.createType('Index', nonce), + context.web3Wallets.substrate.Alice, + aliceSubstrateIdentity, + context.api.createType('Assertion', assertion).toHex(), + context.api.createType('Option', aesKey).toHex(), + requestIdentifier, + { + withWrappedBytes: false, + withPrefix: true, + } + ) + + const res = await sendRequestFromTrustedCall( + context, + teeShieldingKey, + requestVcCall + ) + await assertIsInSidechainBlock( + `${Object.keys(assertion)[0]} requestVcCall`, + res + ) + assertVc(context, aliceSubstrateIdentity, res.value) + }) +}) diff --git a/package.json b/package.json index 9a835ef..ad0452a 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "scripts": { "clean": "npx hardhat clean", "compile": "hardhat compile", + "deploy-contract": "./scripts/run_deploy.sh", "format": "prettier --write --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --write .", "check-format": "prettier --check --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --check .", "test": "npx hardhat test" @@ -20,7 +21,43 @@ "ethers": "^6.13.1", "hardhat": "^2.22.6", "prettier": "^3.3.3", - "prettier-plugin-solidity": "^1.3.1" + "prettier-plugin-solidity": "^1.3.1", + "@litentry/vc-schema-validator": "^0.0.1", + "@noble/ed25519": "^1.7.3", + "@polkadot/api": "^10.9.1", + "@polkadot/api-augment": "^10.9.1", + "@polkadot/api-base": "^10.9.1", + "@polkadot/api-derive": "^10.9.1", + "@polkadot/keyring": "^12.2.1", + "@polkadot/rpc-core": "^10.9.1", + "@polkadot/types": "^10.9.1", + "@polkadot/types-augment": "^10.9.1", + "@polkadot/types-codec": "^10.9.1", + "@polkadot/types-create": "^10.9.1", + "@polkadot/types-known": "^10.9.1", + "@polkadot/types-support": "^10.9.1", + "@polkadot/util": "^12.5.1", + "@polkadot/util-crypto": "^12.5.1", + "@solana/web3.js": "^1.91.4", + "add": "^2.0.6", + "bitcoinjs-lib": "^6.1.5", + "bitcoinjs-message": "^2.2.0", + "chai": "^4.3.6", + "colors": "^1.4.0", + "ecpair": "^2.1.0", + "js-base64": "^3.7.5", + "micro-base58": "^0.5.1", + "mocha": "^10.1.0", + "mocha-steps": "^1.3.0", + "@litentry/parachain-api": "latest", + "scale-ts": "^0.2.11", + "@litentry/sidechain-api": "latest", + "@litentry/chaindata": "^0.1.1", + "tiny-secp256k1": "^2.2.3", + "tweetnacl": "^1.0.3", + "websocket-as-promised": "^2.0.1", + "ws": "^8.17.1", + "zx": "^7.2.3" }, "packageManager": "pnpm@8.7.6" -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 287a3df..b17c526 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,21 @@ settings: excludeLinksFromLockfile: false devDependencies: + '@litentry/chaindata': + specifier: ^0.1.1 + version: 0.1.1 + '@litentry/parachain-api': + specifier: latest + version: 0.9.18-11.2 + '@litentry/sidechain-api': + specifier: latest + version: 0.9.18-11 + '@litentry/vc-schema-validator': + specifier: ^0.0.1 + version: 0.0.1(ajv-formats@2.1.1)(ajv@8.17.1)(fast-glob@3.3.2)(tslib@2.6.3) + '@noble/ed25519': + specifier: ^1.7.3 + version: 1.7.3 '@nomicfoundation/hardhat-ethers': specifier: ^3.0.6 version: 3.0.6(ethers@6.13.2)(hardhat@2.22.7) @@ -17,24 +32,117 @@ devDependencies: '@openzeppelin/contracts': specifier: ^4.9.6 version: 4.9.6 + '@polkadot/api': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/api-augment': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/api-base': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/api-derive': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/keyring': + specifier: ^12.2.1 + version: 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/rpc-core': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/types': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/types-augment': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/types-codec': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/types-create': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/types-known': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/types-support': + specifier: ^10.9.1 + version: 10.13.1 + '@polkadot/util': + specifier: ^12.5.1 + version: 12.6.2 + '@polkadot/util-crypto': + specifier: ^12.5.1 + version: 12.6.2(@polkadot/util@12.6.2) + '@solana/web3.js': + specifier: ^1.91.4 + version: 1.95.2 '@types/chai-as-promised': specifier: ^7.1.8 version: 7.1.8 + add: + specifier: ^2.0.6 + version: 2.0.6 + bitcoinjs-lib: + specifier: ^6.1.5 + version: 6.1.6 + bitcoinjs-message: + specifier: ^2.2.0 + version: 2.2.0 + chai: + specifier: ^4.3.6 + version: 4.5.0 chai-as-promised: specifier: ^8.0.0 version: 8.0.0(chai@4.5.0) + colors: + specifier: ^1.4.0 + version: 1.4.0 + ecpair: + specifier: ^2.1.0 + version: 2.1.0 ethers: specifier: ^6.13.1 version: 6.13.2 hardhat: specifier: ^2.22.6 version: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + js-base64: + specifier: ^3.7.5 + version: 3.7.7 + micro-base58: + specifier: ^0.5.1 + version: 0.5.1 + mocha: + specifier: ^10.1.0 + version: 10.7.0 + mocha-steps: + specifier: ^1.3.0 + version: 1.3.0 prettier: specifier: ^3.3.3 version: 3.3.3 prettier-plugin-solidity: specifier: ^1.3.1 version: 1.3.1(prettier@3.3.3) + scale-ts: + specifier: ^0.2.11 + version: 0.2.12 + tiny-secp256k1: + specifier: ^2.2.3 + version: 2.2.3 + tweetnacl: + specifier: ^1.0.3 + version: 1.0.3 + websocket-as-promised: + specifier: ^2.0.1 + version: 2.1.0 + ws: + specifier: ^8.17.1 + version: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + zx: + specifier: ^7.2.3 + version: 7.2.3 packages: @@ -42,6 +150,13 @@ packages: resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} dev: true + /@babel/runtime@7.25.0: + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: true + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -410,6 +525,72 @@ packages: '@jridgewell/sourcemap-codec': 1.5.0 dev: true + /@litentry/chaindata@0.1.1: + resolution: {integrity: sha512-2v2y1teCdA0rrtYvmZE/JDS5rLZTIfQFEnHJU0Y8gsbWOzmFK04VOPFgMZK5hdiSUZKPlshnWqQ9WVLG7AGtBw==} + dependencies: + tslib: 2.6.3 + dev: true + + /@litentry/parachain-api@0.9.18-11.2: + resolution: {integrity: sha512-nnmX2o8j9Cbi6truI0CtIZ34dyAAKNGWmTIbfS5oXU3LVq20mdHErE8o9y/0j79yN+yFJwUvLpQMqanm6nwJYQ==} + dependencies: + '@polkadot/api': 10.13.1 + '@polkadot/api-augment': 10.13.1 + '@polkadot/api-base': 10.13.1 + '@polkadot/api-derive': 10.13.1 + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/types-known': 10.13.1 + '@polkadot/types-support': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@litentry/sidechain-api@0.9.18-11: + resolution: {integrity: sha512-iAcCyM8YkVdNjPs+CbhGpeUN2EnvTvvs8+HsiL660OTPRWHwLn7f3MuzrCcjBaHjKErtY2gJ9F/P6pskg5MOrg==} + dependencies: + '@polkadot/api': 10.13.1 + '@polkadot/api-augment': 10.13.1 + '@polkadot/api-base': 10.13.1 + '@polkadot/api-derive': 10.13.1 + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/types-known': 10.13.1 + '@polkadot/types-support': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@litentry/vc-schema-validator@0.0.1(ajv-formats@2.1.1)(ajv@8.17.1)(fast-glob@3.3.2)(tslib@2.6.3): + resolution: {integrity: sha512-Utnu2m/IPcGbqpopNsEdB1AvRimoL300dGpk/9g/8P16OemCHYxHE8j+n2JrHS+BUvH9upDiNMy5sbZPmDAAfQ==} + peerDependencies: + ajv: ^8.12.0 + ajv-formats: ^2.1.1 + fast-glob: ^3.3.2 + tslib: ^2.3.0 + dependencies: + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + fast-glob: 3.3.2 + tslib: 2.6.3 + dev: true + /@metamask/eth-sig-util@4.0.1: resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} engines: {node: '>=12.0.0'} @@ -433,6 +614,10 @@ packages: '@noble/hashes': 1.4.0 dev: true + /@noble/ed25519@1.7.3: + resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + dev: true + /@noble/hashes@1.2.0: resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} dev: true @@ -788,6 +973,454 @@ packages: resolution: {integrity: sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==} dev: true + /@polkadot-api/client@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0(rxjs@7.8.1): + resolution: {integrity: sha512-0fqK6pUKcGHSG2pBvY+gfSS+1mMdjd/qRygAcKI5d05tKsnZLRnmhb9laDguKmGEIB0Bz9vQqNK3gIN/cfvVwg==} + requiresBuild: true + peerDependencies: + rxjs: '>=7.8.0' + dependencies: + '@polkadot-api/metadata-builders': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/substrate-bindings': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/substrate-client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + rxjs: 7.8.1 + dev: true + optional: true + + /@polkadot-api/json-rpc-provider-proxy@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-0hZ8vtjcsyCX8AyqP2sqUHa1TFFfxGWmlXJkit0Nqp9b32MwZqn5eaUAiV2rNuEpoglKOdKnkGtUF8t5MoodKw==} + requiresBuild: true + dev: true + optional: true + + /@polkadot-api/json-rpc-provider@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-EaUS9Fc3wsiUr6ZS43PQqaRScW7kM6DYbuM/ou0aYjm8N9MBqgDbGm2oL6RE1vAVmOfEuHcXZuZkhzWtyvQUtA==} + requiresBuild: true + dev: true + optional: true + + /@polkadot-api/metadata-builders@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-BD7rruxChL1VXt0icC2gD45OtT9ofJlql0qIllHSRYgama1CR2Owt+ApInQxB+lWqM+xNOznZRpj8CXNDvKIMg==} + requiresBuild: true + dependencies: + '@polkadot-api/substrate-bindings': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + dev: true + optional: true + + /@polkadot-api/substrate-bindings@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-N4vdrZopbsw8k57uG58ofO7nLXM4Ai7835XqakN27MkjXMp5H830A1KJE0L9sGQR7ukOCDEIHHcwXVrzmJ/PBg==} + requiresBuild: true + dependencies: + '@noble/hashes': 1.4.0 + '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@scure/base': 1.1.7 + scale-ts: 1.6.0 + dev: true + optional: true + + /@polkadot-api/substrate-client@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-lcdvd2ssUmB1CPzF8s2dnNOqbrDa+nxaaGbuts+Vo8yjgSKwds2Lo7Oq+imZN4VKW7t9+uaVcKFLMF7PdH0RWw==} + requiresBuild: true + dev: true + optional: true + + /@polkadot-api/utils@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-0CYaCjfLQJTCRCiYvZ81OncHXEKPzAexCMoVloR+v2nl/O2JRya/361MtPkeNLC6XBoaEgLAG9pWQpH3WePzsw==} + requiresBuild: true + dev: true + optional: true + + /@polkadot/api-augment@10.13.1: + resolution: {integrity: sha512-IAKaCp19QxgOG4HKk9RAgUgC/VNVqymZ2GXfMNOZWImZhxRIbrK+raH5vN2MbWwtVHpjxyXvGsd1RRhnohI33A==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api-base': 10.13.1 + '@polkadot/rpc-augment': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/api-base@10.13.1: + resolution: {integrity: sha512-Okrw5hjtEjqSMOG08J6qqEwlUQujTVClvY1/eZkzKwNzPelWrtV6vqfyJklB7zVhenlxfxqhZKKcY7zWSW/q5Q==} + engines: {node: '>=18'} + dependencies: + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/util': 12.6.2 + rxjs: 7.8.1 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/api-derive@10.13.1: + resolution: {integrity: sha512-ef0H0GeCZ4q5Om+c61eLLLL29UxFC2/u/k8V1K2JOIU+2wD5LF7sjAoV09CBMKKHfkLenRckVk2ukm4rBqFRpg==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api': 10.13.1 + '@polkadot/api-augment': 10.13.1 + '@polkadot/api-base': 10.13.1 + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + rxjs: 7.8.1 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/api@10.13.1: + resolution: {integrity: sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api-augment': 10.13.1 + '@polkadot/api-base': 10.13.1 + '@polkadot/api-derive': 10.13.1 + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/rpc-augment': 10.13.1 + '@polkadot/rpc-core': 10.13.1 + '@polkadot/rpc-provider': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/types-known': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + eventemitter3: 5.0.1 + rxjs: 7.8.1 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/keyring@12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2): + resolution: {integrity: sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2 + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + tslib: 2.6.3 + dev: true + + /@polkadot/networks@12.6.2: + resolution: {integrity: sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==} + engines: {node: '>=18'} + dependencies: + '@polkadot/util': 12.6.2 + '@substrate/ss58-registry': 1.49.0 + tslib: 2.6.3 + dev: true + + /@polkadot/rpc-augment@10.13.1: + resolution: {integrity: sha512-iLsWUW4Jcx3DOdVrSHtN0biwxlHuTs4QN2hjJV0gd0jo7W08SXhWabZIf9mDmvUJIbR7Vk+9amzvegjRyIf5+A==} + engines: {node: '>=18'} + dependencies: + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/rpc-core@10.13.1: + resolution: {integrity: sha512-eoejSHa+/tzHm0vwic62/aptTGbph8vaBpbvLIK7gd00+rT813ROz5ckB1CqQBFB23nHRLuzzX/toY8ID3xrKw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/rpc-augment': 10.13.1 + '@polkadot/rpc-provider': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/util': 12.6.2 + rxjs: 7.8.1 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/rpc-provider@10.13.1: + resolution: {integrity: sha512-oJ7tatVXYJ0L7NpNiGd69D558HG5y5ZDmH2Bp9Dd4kFTQIiV8A39SlWwWUPCjSsen9lqSvvprNLnG/VHTpenbw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/types': 10.13.1 + '@polkadot/types-support': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + '@polkadot/x-fetch': 12.6.2 + '@polkadot/x-global': 12.6.2 + '@polkadot/x-ws': 12.6.2 + eventemitter3: 5.0.1 + mock-socket: 9.3.1 + nock: 13.5.4 + tslib: 2.6.3 + optionalDependencies: + '@substrate/connect': 0.8.8 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /@polkadot/types-augment@10.13.1: + resolution: {integrity: sha512-TcrLhf95FNFin61qmVgOgayzQB/RqVsSg9thAso1Fh6pX4HSbvI35aGPBAn3SkA6R+9/TmtECirpSNLtIGFn0g==} + engines: {node: '>=18'} + dependencies: + '@polkadot/types': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/types-codec@10.13.1: + resolution: {integrity: sha512-AiQ2Vv2lbZVxEdRCN8XSERiWlOWa2cTDLnpAId78EnCtx4HLKYQSd+Jk9Y4BgO35R79mchK4iG+w6gZ+ukG2bg==} + engines: {node: '>=18'} + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/x-bigint': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/types-create@10.13.1: + resolution: {integrity: sha512-Usn1jqrz35SXgCDAqSXy7mnD6j4RvB4wyzTAZipFA6DGmhwyxxIgOzlWQWDb+1PtPKo9vtMzen5IJ+7w5chIeA==} + engines: {node: '>=18'} + dependencies: + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/types-known@10.13.1: + resolution: {integrity: sha512-uHjDW05EavOT5JeU8RbiFWTgPilZ+odsCcuEYIJGmK+es3lk/Qsdns9Zb7U7NJl7eJ6OWmRtyrWsLs+bU+jjIQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/networks': 12.6.2 + '@polkadot/types': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/types-support@10.13.1: + resolution: {integrity: sha512-4gEPfz36XRQIY7inKq0HXNVVhR6HvXtm7yrEmuBuhM86LE0lQQBkISUSgR358bdn2OFSLMxMoRNoh3kcDvdGDQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/types@10.13.1: + resolution: {integrity: sha512-Hfvg1ZgJlYyzGSAVrDIpp3vullgxrjOlh/CSThd/PI4TTN1qHoPSFm2hs77k3mKkOzg+LrWsLE0P/LP2XddYcw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + rxjs: 7.8.1 + tslib: 2.6.3 + dev: true + + /@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2): + resolution: {integrity: sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 12.6.2 + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@polkadot/networks': 12.6.2 + '@polkadot/util': 12.6.2 + '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/x-bigint': 12.6.2 + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + '@scure/base': 1.1.7 + tslib: 2.6.3 + dev: true + + /@polkadot/util@12.6.2: + resolution: {integrity: sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-bigint': 12.6.2 + '@polkadot/x-global': 12.6.2 + '@polkadot/x-textdecoder': 12.6.2 + '@polkadot/x-textencoder': 12.6.2 + '@types/bn.js': 5.1.5 + bn.js: 5.2.1 + tslib: 2.6.3 + dev: true + + /@polkadot/wasm-bridge@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2): + resolution: {integrity: sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + tslib: 2.6.3 + dev: true + + /@polkadot/wasm-crypto-asmjs@7.3.2(@polkadot/util@12.6.2): + resolution: {integrity: sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + dependencies: + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2): + resolution: {integrity: sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + tslib: 2.6.3 + dev: true + + /@polkadot/wasm-crypto-wasm@7.3.2(@polkadot/util@12.6.2): + resolution: {integrity: sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) + tslib: 2.6.3 + dev: true + + /@polkadot/wasm-crypto@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2): + resolution: {integrity: sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) + '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + tslib: 2.6.3 + dev: true + + /@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2): + resolution: {integrity: sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + dependencies: + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/x-bigint@12.6.2: + resolution: {integrity: sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/x-fetch@12.6.2: + resolution: {integrity: sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + node-fetch: 3.3.2 + tslib: 2.6.3 + dev: true + + /@polkadot/x-global@12.6.2: + resolution: {integrity: sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==} + engines: {node: '>=18'} + dependencies: + tslib: 2.6.3 + dev: true + + /@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2): + resolution: {integrity: sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-util': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/x-textdecoder@12.6.2: + resolution: {integrity: sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/x-textencoder@12.6.2: + resolution: {integrity: sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + dev: true + + /@polkadot/x-ws@12.6.2: + resolution: {integrity: sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@scure/base@1.1.7: resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} dev: true @@ -892,6 +1525,37 @@ packages: tslib: 1.14.1 dev: true + /@solana/buffer-layout@4.0.1: + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + dependencies: + buffer: 6.0.3 + dev: true + + /@solana/web3.js@1.95.2: + resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==} + dependencies: + '@babel/runtime': 7.25.0 + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.1 + node-fetch: 2.7.0 + rpc-websockets: 9.0.2 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + /@solidity-parser/parser@0.14.5: resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} dependencies: @@ -906,6 +1570,59 @@ packages: resolution: {integrity: sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==} dev: true + /@substrate/connect-extension-protocol@2.0.0: + resolution: {integrity: sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg==} + requiresBuild: true + dev: true + optional: true + + /@substrate/connect-known-chains@1.2.2: + resolution: {integrity: sha512-gOGrXSWA2d/3kf8Yco00VlHZl48smzAGW5Z9MDxMht98hRpT2yEEN4N5QdoEKMI4ihDW8goXGzmp79D0hFPpuA==} + requiresBuild: true + dev: true + optional: true + + /@substrate/connect@0.8.8: + resolution: {integrity: sha512-zwaxuNEVI9bGt0rT8PEJiXOyebLIo6QN1SyiAHRPBOl6g3Sy0KKdSN8Jmyn++oXhVRD8aIe75/V8ZkS81T+BPQ==} + requiresBuild: true + dependencies: + '@substrate/connect-extension-protocol': 2.0.0 + '@substrate/connect-known-chains': 1.2.2 + '@substrate/light-client-extension-helpers': 0.0.4(smoldot@2.0.22) + smoldot: 2.0.22 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + optional: true + + /@substrate/light-client-extension-helpers@0.0.4(smoldot@2.0.22): + resolution: {integrity: sha512-vfKcigzL0SpiK+u9sX6dq2lQSDtuFLOxIJx2CKPouPEHIs8C+fpsufn52r19GQn+qDhU8POMPHOVoqLktj8UEA==} + requiresBuild: true + peerDependencies: + smoldot: 2.x + dependencies: + '@polkadot-api/client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0(rxjs@7.8.1) + '@polkadot-api/json-rpc-provider': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/json-rpc-provider-proxy': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/substrate-client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@substrate/connect-extension-protocol': 2.0.0 + '@substrate/connect-known-chains': 1.2.2 + rxjs: 7.8.1 + smoldot: 2.0.22 + dev: true + optional: true + + /@substrate/ss58-registry@1.49.0: + resolution: {integrity: sha512-leW6Ix4LD7XgvxT7+aobPWSw+WvPcN2Rxof1rmd0mNC5t2n99k1N7UNEvz7YEFSOUeHWmKIY7F5q8KeIqYoHfA==} + dev: true + + /@swc/helpers@0.5.12: + resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + dependencies: + tslib: 2.6.3 + dev: true + /@tsconfig/node10@1.0.11: resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true @@ -979,12 +1696,25 @@ packages: '@types/node': 22.1.0 dev: true + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 22.1.0 + dev: true + /@types/form-data@0.0.33: resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: '@types/node': 22.1.0 dev: true + /@types/fs-extra@11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 22.1.0 + dev: true + /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: @@ -992,6 +1722,12 @@ packages: '@types/node': 22.1.0 dev: true + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + dependencies: + '@types/node': 22.1.0 + dev: true + /@types/lru-cache@5.1.1: resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} dev: true @@ -1000,6 +1736,10 @@ packages: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: true + /@types/mocha@10.0.7: resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==} dev: true @@ -1008,10 +1748,20 @@ packages: resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} dev: true + /@types/node@12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true + /@types/node@18.15.13: resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} dev: true + /@types/node@18.19.43: + resolution: {integrity: sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g==} + dependencies: + undici-types: 5.26.5 + dev: true + /@types/node@22.1.0: resolution: {integrity: sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==} dependencies: @@ -1032,6 +1782,10 @@ packages: resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true + /@types/ps-tree@1.1.6: + resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} + dev: true + /@types/qs@6.9.15: resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} dev: true @@ -1042,6 +1796,34 @@ packages: '@types/node': 22.1.0 dev: true + /@types/uuid@8.3.4: + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + dev: true + + /@types/which@3.0.4: + resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} + dev: true + + /@types/ws@7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 22.1.0 + dev: true + + /@types/ws@8.5.12: + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + dependencies: + '@types/node': 22.1.0 + dev: true + + /JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: true + /abbrev@1.0.9: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} dev: true @@ -1059,6 +1841,10 @@ packages: hasBin: true dev: true + /add@2.0.6: + resolution: {integrity: sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==} + dev: true + /adm-zip@0.4.16: resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} engines: {node: '>=0.3.0'} @@ -1081,6 +1867,13 @@ packages: - supports-color dev: true + /agentkeepalive@4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + dev: true + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -1089,6 +1882,17 @@ packages: indent-string: 4.0.0 dev: true + /ajv-formats@2.1.1(ajv@8.17.1): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.17.1 + dev: true + /ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: @@ -1183,6 +1987,14 @@ packages: engines: {node: '>=8'} dev: 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-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -1193,6 +2005,20 @@ packages: engines: {node: '>=0.10.0'} 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.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true @@ -1219,6 +2045,13 @@ packages: engines: {node: '>= 4.0.0'} dev: true + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: true + /axios@1.7.3: resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==} dependencies: @@ -1239,15 +2072,76 @@ packages: safe-buffer: 5.2.1 dev: true + /base-x@4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + dev: true + + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + /bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} dev: true + /bech32@2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + dev: true + + /bigint-buffer@1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + dev: true + /binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true + /bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: true + + /bip174@2.1.1: + resolution: {integrity: sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==} + engines: {node: '>=8.0.0'} + dev: true + + /bip66@1.1.5: + resolution: {integrity: sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /bitcoinjs-lib@6.1.6: + resolution: {integrity: sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA==} + engines: {node: '>=8.0.0'} + dependencies: + '@noble/hashes': 1.4.0 + bech32: 2.0.0 + bip174: 2.1.1 + bs58check: 3.0.1 + typeforce: 1.18.0 + varuint-bitcoin: 1.1.2 + dev: true + + /bitcoinjs-message@2.2.0: + resolution: {integrity: sha512-103Wy3xg8Y9o+pdhGP4M3/mtQQuUWs6sPuOp1mYphSUoSMHjHTlkj32K4zxU8qMH0Ckv23emfkGlFWtoWZ7YFA==} + engines: {node: '>=0.10'} + dependencies: + bech32: 1.1.4 + bs58check: 2.1.2 + buffer-equals: 1.0.4 + create-hash: 1.2.0 + secp256k1: 3.8.0 + varuint-bitcoin: 1.1.2 + dev: true + /blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} dev: true @@ -1264,6 +2158,14 @@ packages: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: true + /borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + dev: true + /boxen@5.1.2: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} @@ -1323,6 +2225,12 @@ packages: base-x: 3.0.10 dev: true + /bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + dependencies: + base-x: 4.0.0 + dev: true + /bs58check@2.1.2: resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} dependencies: @@ -1331,6 +2239,18 @@ packages: safe-buffer: 5.2.1 dev: true + /bs58check@3.0.1: + resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} + dependencies: + '@noble/hashes': 1.4.0 + bs58: 5.0.0 + dev: true + + /buffer-equals@1.0.4: + resolution: {integrity: sha512-99MsCq0j5+RhubVEtKQgKaD6EM+UP3xJgIvQqwJ3SOLDUekzxMX1ylXBng+Wa2sh7mGT0W6RUly8ojjr1Tt6nA==} + engines: {node: '>=0.10.0'} + dev: true + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true @@ -1339,6 +2259,21 @@ packages: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} 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.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.1 + dev: true + /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -1426,6 +2361,11 @@ packages: supports-color: 7.2.0 dev: true + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: true @@ -1441,6 +2381,10 @@ packages: engines: {node: '>= 16'} dev: true + /chnl@1.2.0: + resolution: {integrity: sha512-g5gJb59edwCliFbX2j7G6sBfY4sX9YLy211yctONI2GRaiX0f2zIbKWmBm+sPqFNEpM7Ljzm7IJX/xrjiEbPrw==} + dev: true + /chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -1552,6 +2496,10 @@ packages: typical: 5.2.0 dev: true + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -1609,6 +2557,38 @@ packages: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} dev: true + /data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: true + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + /death@1.1.0: resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} dev: true @@ -1656,6 +2636,20 @@ 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'} + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1689,6 +2683,28 @@ packages: path-type: 4.0.0 dev: true + /drbg.js@1.0.1: + resolution: {integrity: sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==} + engines: {node: '>=0.10'} + dependencies: + browserify-aes: 1.2.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + dev: true + + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: true + + /ecpair@2.1.0: + resolution: {integrity: sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==} + engines: {node: '>=8.0.0'} + dependencies: + randombytes: 2.1.0 + typeforce: 1.18.0 + wif: 2.0.6 + dev: true + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -1730,6 +2746,58 @@ packages: engines: {node: '>=6'} dev: true + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + 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.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true + /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -1742,6 +2810,41 @@ packages: engines: {node: '>= 0.4'} dev: true + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + 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 + + /es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: true + + /es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + dependencies: + es6-promise: 4.2.8 + dev: true + /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -1941,7 +3044,7 @@ packages: '@types/node': 18.15.13 aes-js: 4.0.0-beta.5 tslib: 2.4.0 - ws: 8.17.1 + ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -1963,6 +3066,22 @@ packages: strip-hex-prefix: 1.0.0 dev: true + /event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + dev: true + + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: true + /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: @@ -1970,6 +3089,11 @@ packages: safe-buffer: 5.2.1 dev: true + /eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -1989,6 +3113,10 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + dev: true + /fast-uri@3.0.1: resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} dev: true @@ -1999,6 +3127,18 @@ packages: reusify: 1.0.4 dev: true + /fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + dev: true + + /file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: true + /fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -2045,6 +3185,12 @@ packages: debug: 4.3.6(supports-color@8.1.1) dev: true + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /form-data@2.5.1: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} engines: {node: '>= 0.12'} @@ -2063,10 +3209,21 @@ packages: mime-types: 2.1.35 dev: true + /formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: true + /fp-ts@1.19.3: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} dev: true + /from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + dev: true + /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -2076,6 +3233,15 @@ packages: universalify: 2.0.1 dev: true + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -2124,6 +3290,25 @@ 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.23.3 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /fx@35.0.0: + resolution: {integrity: sha512-O07q+Lknrom5RUX/u53tjo2KTTLUnL0K703JbqMYb19ORijfJNvijzFqqYXEjdk25T9R14S6t6wHD8fCWXCM0g==} + hasBin: true + dev: true + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -2149,6 +3334,15 @@ packages: engines: {node: '>=4'} 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 + /ghost-testrpc@0.0.2: resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} hasBin: true @@ -2227,6 +3421,14 @@ packages: which: 1.3.1 dev: true + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + dev: true + /globby@10.0.2: resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} engines: {node: '>=8'} @@ -2241,6 +3443,17 @@ packages: slash: 3.0.0 dev: true + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -2344,6 +3557,10 @@ packages: - utf-8-validate dev: true + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + /has-flag@1.0.0: resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} engines: {node: '>=0.10.0'} @@ -2375,6 +3592,13 @@ packages: 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'} @@ -2452,6 +3676,12 @@ packages: - supports-color dev: true + /humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + dev: true + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -2459,6 +3689,10 @@ packages: safer-buffer: 2.1.2 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'} @@ -2493,6 +3727,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.2 + side-channel: 1.0.6 + dev: true + /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -2504,6 +3747,20 @@ packages: fp-ts: 1.19.3 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-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'} @@ -2511,6 +3768,33 @@ packages: binary-extensions: 2.3.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-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + 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'} @@ -2538,6 +3822,18 @@ packages: engines: {node: '>=6.5.0', npm: '>=3'} dev: true + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + 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'} @@ -2548,19 +3844,99 @@ 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-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + 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'} + dependencies: + which-typed-array: 1.1.15 + dev: true + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} dev: true + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.7 + dev: 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.10): + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.10 + dev: true + + /jayson@4.1.1: + resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10) + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + dev: true + /js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} dev: true @@ -2602,6 +3978,11 @@ packages: graceful-fs: 4.2.11 dev: true + /jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: true + /jsonschema@1.4.1: resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} dev: true @@ -2691,6 +4072,10 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true + /map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + dev: true + /markdown-table@1.1.3: resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} dev: true @@ -2713,6 +4098,10 @@ packages: engines: {node: '>= 8'} dev: true + /micro-base58@0.5.1: + resolution: {integrity: sha512-iwqAmg66VjB2LA3BcUxyrOyqck4HLLtSzKnx2VQSnN5piQji598N15P8RRx2d6lPvJ98B1b0cl2VbvQeFeWdig==} + dev: true + /micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} dev: true @@ -2781,6 +4170,10 @@ packages: obliterator: 2.0.4 dev: true + /mocha-steps@1.3.0: + resolution: {integrity: sha512-KZvpMJTqzLZw3mOb+EEuYi4YZS41C9iTnb7skVFRxHjUd1OYbl64tCMSmpdIRM9LnwIrSOaRfPtNpF5msgv6Eg==} + dev: true + /mocha@10.7.0: resolution: {integrity: sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==} engines: {node: '>= 14.0.0'} @@ -2808,6 +4201,11 @@ packages: yargs-unparser: 2.0.0 dev: true + /mock-socket@9.3.1: + resolution: {integrity: sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==} + engines: {node: '>= 8'} + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -2816,6 +4214,10 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true + /nan@2.20.0: + resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + dev: true + /ndjson@2.0.0: resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} engines: {node: '>=10'} @@ -2832,16 +4234,62 @@ packages: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} dev: true + /nock@13.5.4: + resolution: {integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==} + engines: {node: '>= 10.13'} + dependencies: + debug: 4.3.6(supports-color@8.1.1) + json-stringify-safe: 5.0.1 + propagate: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + /node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} dev: true + /node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: true + /node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} dependencies: lodash: 4.17.21 dev: 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-fetch@3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + + /node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: true + /node-gyp-build@4.8.1: resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} hasBin: true @@ -2882,6 +4330,21 @@ packages: engines: {node: '>= 0.4'} 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.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + /obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: true @@ -2985,6 +4448,12 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + dependencies: + through: 2.3.8 + dev: true + /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} @@ -3006,6 +4475,11 @@ packages: engines: {node: '>=6'} dev: true + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} @@ -3039,12 +4513,33 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true + /promise-controller@1.0.0: + resolution: {integrity: sha512-goA0zA9L91tuQbUmiMinSYqlyUtEgg4fxJcjYnLYOQnrktb4o4UqciXDNXiRUPiDBPACmsr1k8jDW4r7UDq9Qw==} + engines: {node: '>=8'} + dev: true + + /promise.prototype.finally@3.1.8: + resolution: {integrity: sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true + /promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} dependencies: asap: 2.0.6 dev: true + /promised-map@1.0.0: + resolution: {integrity: sha512-fP9VSMgcml+U2uJ9PBc4/LDQ3ZkJCH4blLNCS6gbH7RHyRZCYs91zxWHqiUy+heFiEMiB2op/qllYoFqmIqdWA==} + engines: {node: '>=10'} + dev: true + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -3053,10 +4548,23 @@ packages: sisteransi: 1.0.5 dev: true + /propagate@2.0.1: + resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} + engines: {node: '>= 8'} + dev: true + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true + /ps-tree@1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + event-stream: 3.3.4 + dev: true + /qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -3131,6 +4639,20 @@ packages: engines: {node: '>=6'} dev: true + /regenerator-runtime@0.14.1: + 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.2 + dev: true + /req-cwd@2.0.0: resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} engines: {node: '>=4'} @@ -3189,12 +4711,43 @@ packages: bn.js: 5.2.1 dev: true + /rpc-websockets@9.0.2: + resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} + dependencies: + '@swc/helpers': 0.5.12 + '@types/uuid': 8.3.4 + '@types/ws': 8.5.12 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.3 + dev: true + + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + 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 @@ -3203,6 +4756,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 @@ -3227,10 +4789,35 @@ packages: wordwrap: 1.0.0 dev: true + /scale-ts@0.2.12: + resolution: {integrity: sha512-hNGuU5Yhohmp4BjFrNEioDkPAOWe6aYRDUlBi9FTxxmp1wZ8SAkDxAf/IobinuSa+J0a9srZEP73dqmYeyYYXg==} + dev: true + + /scale-ts@1.6.0: + resolution: {integrity: sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q==} + requiresBuild: true + dev: true + optional: true + /scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} dev: true + /secp256k1@3.8.0: + resolution: {integrity: sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==} + engines: {node: '>=4.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + bip66: 1.1.5 + bn.js: 4.12.0 + create-hash: 1.2.0 + drbg.js: 1.0.1 + elliptic: 6.5.6 + nan: 2.20.0 + safe-buffer: 5.2.1 + dev: true + /secp256k1@4.0.3: resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} engines: {node: '>=10.0.0'} @@ -3275,6 +4862,16 @@ packages: has-property-descriptors: 1.0.2 dev: true + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: true @@ -3327,6 +4924,11 @@ packages: engines: {node: '>=8'} dev: true + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + /slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -3336,6 +4938,17 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true + /smoldot@2.0.22: + resolution: {integrity: sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g==} + requiresBuild: true + dependencies: + ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + optional: true + /solc@0.8.26(debug@4.3.6): resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} engines: {node: '>=10.0.0'} @@ -3411,6 +5024,12 @@ packages: readable-stream: 3.6.2 dev: true + /split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + dependencies: + through: 2.3.8 + dev: true + /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true @@ -3427,6 +5046,12 @@ packages: engines: {node: '>= 0.8'} dev: true + /stream-combiner@0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + dependencies: + duplexer: 0.1.2 + dev: true + /string-format@2.0.0: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} dev: true @@ -3448,6 +5073,33 @@ packages: strip-ansi: 6.0.1 dev: true + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: true + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -3486,6 +5138,11 @@ packages: engines: {node: '>=8'} dev: true + /superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + dev: true + /supports-color@3.2.3: resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} engines: {node: '>=0.8.0'} @@ -3550,6 +5207,10 @@ packages: strip-ansi: 6.0.1 dev: true + /text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + dev: true + /then-request@6.0.2: resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} engines: {node: '>=6.0.0'} @@ -3573,6 +5234,17 @@ packages: readable-stream: 3.6.2 dev: true + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /tiny-secp256k1@2.2.3: + resolution: {integrity: sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==} + engines: {node: '>=14.0.0'} + dependencies: + uint8array-tools: 0.0.7 + dev: true + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -3592,6 +5264,10 @@ packages: engines: {node: '>=0.6'} dev: true + /tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + /ts-command-line-args@2.5.1: resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} hasBin: true @@ -3649,6 +5325,10 @@ packages: resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} dev: true + /tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + dev: true + /tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} dev: true @@ -3709,10 +5389,58 @@ packages: - supports-color dev: true + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + 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.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true + /typeforce@1.18.0: + resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} + dev: true + /typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -3737,6 +5465,24 @@ packages: dev: true optional: true + /uint8array-tools@0.0.7: + resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} + engines: {node: '>=14.0.0'} + 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 + /undici-types@6.13.0: resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} dev: true @@ -3763,6 +5509,14 @@ packages: engines: {node: '>= 0.8'} 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.1 + dev: true + /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} dev: true @@ -3780,6 +5534,17 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true + /varuint-bitcoin@1.1.2: + resolution: {integrity: sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + dev: true + /web3-utils@1.10.4: resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} engines: {node: '>=8.0.0'} @@ -3794,6 +5559,53 @@ packages: utf8: 3.0.0 dev: true + /webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /webpod@0.0.2: + resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} + hasBin: true + dev: true + + /websocket-as-promised@2.1.0: + resolution: {integrity: sha512-TpFh8+9XcxOX8s+pLh217OVUF+wZjxYOa9H1ay1T/YIT8gRdEVk/mfaZbvqgRzXbNRMQngBrLbCdXzz5Yl8K0Q==} + engines: {node: '>=6'} + dependencies: + chnl: 1.2.0 + promise-controller: 1.0.0 + promise.prototype.finally: 3.1.8 + promised-map: 1.0.0 + dev: 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-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + 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 @@ -3801,6 +5613,14 @@ packages: isexe: 2.0.0 dev: true + /which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} @@ -3808,6 +5628,12 @@ packages: string-width: 4.2.3 dev: true + /wif@2.0.6: + resolution: {integrity: sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==} + dependencies: + bs58check: 2.1.2 + dev: true + /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -3868,7 +5694,7 @@ packages: optional: true dev: true - /ws@8.17.1: + /ws@8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10): resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} engines: {node: '>=10.0.0'} peerDependencies: @@ -3879,6 +5705,9 @@ packages: optional: true utf-8-validate: optional: true + dependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 dev: true /y18n@5.0.8: @@ -3886,6 +5715,12 @@ packages: engines: {node: '>=10'} dev: true + /yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + engines: {node: '>= 14'} + hasBin: true + dev: true + /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -3923,3 +5758,25 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true + + /zx@7.2.3: + resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} + engines: {node: '>= 16.0.0'} + hasBin: true + dependencies: + '@types/fs-extra': 11.0.4 + '@types/minimist': 1.2.5 + '@types/node': 18.19.43 + '@types/ps-tree': 1.1.6 + '@types/which': 3.0.4 + chalk: 5.3.0 + fs-extra: 11.2.0 + fx: 35.0.0 + globby: 13.2.2 + minimist: 1.2.8 + node-fetch: 3.3.1 + ps-tree: 1.2.0 + webpod: 0.0.2 + which: 3.0.1 + yaml: 2.5.0 + dev: true From 4dd174143c0ed21b5ef138ffd765d994fb8c6914 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Thu, 8 Aug 2024 15:42:15 +0800 Subject: [PATCH 08/45] test:docker pull --- .github/workflows/ci.yml | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b9306ec..ed8a8e9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,27 +34,36 @@ jobs: - name: Install deps run: | - npm install + corepack enable && corepack enable pnpm - name: Fmt check run: | - npm run fmt-check + pnpm run fmt-check - compile-tests: + contracts-uint-tests: runs-on: ubuntu-latest needs: - - fmt + - set-env steps: - uses: actions/checkout@v4 - - name: Install deps + - name: Run contracts unit tests run: | - npm install + npx hardhat test - - name: Compile solidity - run: | - npm run compile + integration-tests: + runs-on: ubuntu-latest + needs: + - set-env + steps: + - uses: actions/checkout@v4 - - name: Run hardhat test + - name: Pull litentry image optionally run: | - npm run test:all + docker pull parity/polkadot + docker pull litentry/identity-worker:latest + docker pull litentry/identity-cli:latest + docker pull litentry/litentry-parachain:latest + + - run: docker images --all + From 95401abd5e5935f3978e261eacd008b9fae35bf8 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 10:58:00 +0800 Subject: [PATCH 09/45] test:restart parachain --- .github/workflows/ci.yml | 12 +- scripts/run_parachain_worker.sh | 205 ++++++++++++++++++++++++++++++++ 2 files changed, 213 insertions(+), 4 deletions(-) create mode 100755 scripts/run_parachain_worker.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed8a8e9..1e0ba3f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,11 +34,11 @@ jobs: - name: Install deps run: | - corepack enable && corepack enable pnpm + corepack enable && corepack enable pnpm && pnpm install --frozen-lockfile - name: Fmt check run: | - pnpm run fmt-check + pnpm run check-format contracts-uint-tests: runs-on: ubuntu-latest @@ -60,10 +60,14 @@ jobs: - name: Pull litentry image optionally run: | - docker pull parity/polkadot docker pull litentry/identity-worker:latest docker pull litentry/identity-cli:latest - docker pull litentry/litentry-parachain:latest + docker pull litentry/litentry-chain-aio:latest - run: docker images --all + - name: Start parachain + run: | + ./scripts/run_parachain_worker.sh + docker ps + diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh new file mode 100755 index 0000000..362da59 --- /dev/null +++ b/scripts/run_parachain_worker.sh @@ -0,0 +1,205 @@ +#!/bin/bash + +set -eo pipefail + +# This script is used to perform actions on the target host, including: +# - generate: generate the systemd service files from the template +# - restart: restart the parachain, or the worker, or both +# - upgrade-worker: uprade the worker0 to the rev in local repo +# +# TODO: +# the combinations of flags are not yet well verified/organised, especially the following: +# --only-worker +# --build +# --discard + +# ------------------------------ +# path setting +# ------------------------------ + +# CONFIG_DIR contains private configs. Need to prepare in advance. +WKDIR=$(dirname "$(readlink -f "$0")") +CONFIG_DIR="/opt/worker_configs" + +BASEDIR="/opt/litentry" +DOWNLOAD_BASEDIR="$BASEDIR/download" +PARACHAIN_BASEDIR="$BASEDIR/parachain" +WORKER_BASEDIR="$BASEDIR/worker" +BACKUP_BASEDIR="$BASEDIR/backup" +LOG_BACKUP_BASEDIR="$BACKUP_BASEDIR/log" +WORKER_BACKUP_BASEDIR="$BACKUP_BASEDIR/worker" +RELAYCHAIN_ALICE_BASEDIR="$PARACHAIN_BASEDIR/relay-alice" +RELAYCHAIN_BOB_BASEDIR="$PARACHAIN_BASEDIR/relay-bob" +PARACHAIN_ALICE_BASEDIR="$PARACHAIN_BASEDIR/para-alice" + +# ------------------------------ +# default arg setting +# ------------------------------ + +BUILD=false +BRANCH="dev" +DISCARD=false +WORKER_CONFIG="$CONFIG_DIR/config.json" +WORKER_ENV="$CONFIG_DIR/worker_env" +INTEL_KEY="$CONFIG_DIR/key_production.txt" +INTEL_SPID="$CONFIG_DIR/spid_production.txt" +CHAIN=rococo +ONLY_WORKER=false +PARACHAIN_HOST=localhost +PARACHAIN_PORT=9944 +COPY_FROM_DOCKER=false +PRODUCTION=false +ACTION= +CHECK=true +PARACHAIN_TAG=latest +WORKER_TAG=latest +# ------------------------------ +# Some global setting +# ------------------------------ + +WORKER_COUNT=1 +WORKER_ID=0 +PARACHAIN_ID= +OLD_MRENCLAVE= +NEW_MRENCLAVE= +OLD_SHARD= +LATEST_FINALIZED_BLOCK= +RELEASE_VERSION= +REPO="litentry/litentry-parachain" +REPO_DIR="/tmp/dev_deploy_src_repo" + +VERSION_PATTERN="\bp[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-w[0-9]+\.[0-9]+\.[0-9]+-[0-9]+\b" + +SGX_SDK=/opt/intel/sgxsdk +SGX_ENCLAVE_SIGNER=$SGX_SDK/bin/x64/sgx_sign + +# ------------------------------ +# main() +# ------------------------------ + +function main { + + # 0/ parse command lines + # echo "Parsing command line ..." +# while [ $# -gt 0 ]; do +# case "$1" in +# -h|--help) +# display_help +# exit 0 +# ;; +# --worker-tag) +# if [ -z "$2" ] || [[ "$2" == -* ]]; then +# echo "Error: missing worker docker tag or code branch for --worker-tag option" +# display_help +# exit 1 +# fi +# WORKER_TAG="$2" +# if [ -z "$2" ] || [[ "$2" == -* ]]; then +# echo "Error: missing worker image tag for --worker-tag option" +# display_help +# exit 1 +# fi +# shift 2 +# ;; +# --worker-id) +# if [ -z "$2" ] || [[ "$2" == -* ]]; then +# echo "Error: missing worker id for --worker-id option" +# display_help +# exit 1 +# fi +# WORKER_ID="$2" +# shift 2 +# ;; +# --skip-check) +# CHECK=false +# echo "Skip inspection, please bear the risk yourself!" +# shift +# ;; +# --prod) +# PRODUCTION=true +# echo "Using production environment parameters." +# shift +# ;; +# restart|upgrade-worker|stop|status) +# ACTION="$1" +# shift +# ;; +# *) +# echo "Error: unknown option or subcommand $1" +# display_help +# exit 1 +# ;; +# esac +# done + +# # 1/ check if $USER has sudo +# if sudo -l -U $USER 2>/dev/null | grep -q 'may run the following'; then +# source "$SGX_SDK/environment" +# else +# echo "$USER doesn't have sudo permission" +# exit 1 +# fi + +# # 2/ create folders if missing +# sudo mkdir -p "$BASEDIR" +# sudo chown -R $USER:$GROUPS "$BASEDIR" +# for d in "$LOG_BACKUP_BASEDIR" "$WORKER_BACKUP_BASEDIR" "$RELAYCHAIN_ALICE_BASEDIR" "$RELAYCHAIN_BOB_BASEDIR" \ +# "$PARACHAIN_ALICE_BASEDIR" "$WORKER_BASEDIR"; do +# mkdir -p "$d" +# done + +# echo "Worker count: $WORKER_COUNT" + + restart_parachain + + exit +} + +# ------------------------------ +# helper functions +# ------------------------------ + +function print_divider { + echo "------------------------------------------------------------" +} +function restart_worker_services { + echo "Restarting worker-${WORKER_ID} services ..." + + if [ "$PRODUCTION" = "true" ]; then + commands=( + "-T ws:localhost -P 2000 -p 9944 -r 3443 -w 2001 -h 4545 --enable-metrics --parentchain-start-block 947410 run --skip-ra --dev" + ) + else + # staging example + commands=( + "-T ws:localhost -P 2000 -p 9944 -r 3443 -w 2001 -h 4545 --parentchain-start-block 0 run --skip-ra --dev" + ) + fi + docker run -itd \ + --name litentry-worker-${WORKER_ID} \ + --restart always \ + --net=host \ + --device=/dev/sgx_enclave \ + --device=/dev/sgx_provision \ + --env RUST_LOG=info,litentry_worker=debug,ws=warn,sp_io=error,substrate_api_client=warn,itc_parentchain_light_client=info,jsonrpsee_ws_client=warn,jsonrpsee_ws_server=warn,enclave_runtime=debug,ita_stf=debug,its_rpc_handler=warn,itc_rpc_client=warn,its_consensus_common=debug,its_state=warn,its_consensus_aura=warn,aura*=warn,its_consensus_slots=warn,itp_attestation_handler=debug,http_req=debug,lc_mock_server=warn,itc_rest_client=debug,lc_credentials=debug,lc_identity_verification=debug,lc_stf_task_receiver=debug,lc_stf_task_sender=debug,lc_data_providers=debug,itp_top_pool=debug,itc_parentchain_indirect_calls_executor=debug,bc_task_receiver=debug \ + --env DATA_DIR='/data' \ + --env-file /opt/worker_configs/worker_env \ + --volume /var/run/aesmd:/var/run/aesmd \ + --volume ${WORKER_BASEDIR}/w${WORKER_ID}:/data \ + --workdir /data \ + litentry/identity-worker:${WORKER_TAG} ${commands[${WORKER_ID}]} +} + +function restart_parachain { + echo "Restarting parachain services ..." + + docker run -itd \ + --name para-aio \ + --restart always \ + --net=host \ + --env CHAIN="rococo" \ + --volume /opt/litentry/parachain:/opt/litentry/parachain \ + litentry/litentry-chain-aio:${PARACHAIN_TAG} +} + +main \ No newline at end of file From 1d2a86760bdb579e7a0abe1a1b53a2b62ab77f98 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 11:49:13 +0800 Subject: [PATCH 10/45] install hardhat --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1e0ba3f..52aa559 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -49,6 +49,7 @@ jobs: - name: Run contracts unit tests run: | + npm install --save-dev hardhat npx hardhat test integration-tests: From 51a2eec94f4843f4d0af263d9532f6f498650df0 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 11:49:25 +0800 Subject: [PATCH 11/45] test:run worker --- scripts/run_parachain_worker.sh | 96 ++++++++------------------------- 1 file changed, 22 insertions(+), 74 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 362da59..130cf40 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -79,79 +79,27 @@ SGX_ENCLAVE_SIGNER=$SGX_SDK/bin/x64/sgx_sign function main { - # 0/ parse command lines - # echo "Parsing command line ..." -# while [ $# -gt 0 ]; do -# case "$1" in -# -h|--help) -# display_help -# exit 0 -# ;; -# --worker-tag) -# if [ -z "$2" ] || [[ "$2" == -* ]]; then -# echo "Error: missing worker docker tag or code branch for --worker-tag option" -# display_help -# exit 1 -# fi -# WORKER_TAG="$2" -# if [ -z "$2" ] || [[ "$2" == -* ]]; then -# echo "Error: missing worker image tag for --worker-tag option" -# display_help -# exit 1 -# fi -# shift 2 -# ;; -# --worker-id) -# if [ -z "$2" ] || [[ "$2" == -* ]]; then -# echo "Error: missing worker id for --worker-id option" -# display_help -# exit 1 -# fi -# WORKER_ID="$2" -# shift 2 -# ;; -# --skip-check) -# CHECK=false -# echo "Skip inspection, please bear the risk yourself!" -# shift -# ;; -# --prod) -# PRODUCTION=true -# echo "Using production environment parameters." -# shift -# ;; -# restart|upgrade-worker|stop|status) -# ACTION="$1" -# shift -# ;; -# *) -# echo "Error: unknown option or subcommand $1" -# display_help -# exit 1 -# ;; -# esac -# done - -# # 1/ check if $USER has sudo -# if sudo -l -U $USER 2>/dev/null | grep -q 'may run the following'; then -# source "$SGX_SDK/environment" -# else -# echo "$USER doesn't have sudo permission" -# exit 1 -# fi - -# # 2/ create folders if missing -# sudo mkdir -p "$BASEDIR" -# sudo chown -R $USER:$GROUPS "$BASEDIR" -# for d in "$LOG_BACKUP_BASEDIR" "$WORKER_BACKUP_BASEDIR" "$RELAYCHAIN_ALICE_BASEDIR" "$RELAYCHAIN_BOB_BASEDIR" \ -# "$PARACHAIN_ALICE_BASEDIR" "$WORKER_BASEDIR"; do -# mkdir -p "$d" -# done - -# echo "Worker count: $WORKER_COUNT" - - restart_parachain - + # 1/ check if $USER has sudo + if sudo -l -U $USER 2>/dev/null | grep -q 'may run the following'; then + source "$SGX_SDK/environment" + else + echo "$USER doesn't have sudo permission" + exit 1 + fi + + # 2/ create folders if missing + sudo mkdir -p "$BASEDIR" + sudo chown -R $USER:$GROUPS "$BASEDIR" + for d in "$LOG_BACKUP_BASEDIR" "$WORKER_BACKUP_BASEDIR" "$RELAYCHAIN_ALICE_BASEDIR" "$RELAYCHAIN_BOB_BASEDIR" \ + "$PARACHAIN_ALICE_BASEDIR" "$WORKER_BASEDIR"; do + mkdir -p "$d" + done + + echo "Worker count: $WORKER_COUNT" + + restart_parachain_services + sleep 30 + restart_worker_services exit } @@ -190,7 +138,7 @@ function restart_worker_services { litentry/identity-worker:${WORKER_TAG} ${commands[${WORKER_ID}]} } -function restart_parachain { +function restart_parachain_services { echo "Restarting parachain services ..." docker run -itd \ From 29659bfe0081a9b518b499d89e9592540f07661f Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 14:26:13 +0800 Subject: [PATCH 12/45] comment check steps --- scripts/run_parachain_worker.sh | 34 ++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 130cf40..c1ec980 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -79,23 +79,23 @@ SGX_ENCLAVE_SIGNER=$SGX_SDK/bin/x64/sgx_sign function main { - # 1/ check if $USER has sudo - if sudo -l -U $USER 2>/dev/null | grep -q 'may run the following'; then - source "$SGX_SDK/environment" - else - echo "$USER doesn't have sudo permission" - exit 1 - fi - - # 2/ create folders if missing - sudo mkdir -p "$BASEDIR" - sudo chown -R $USER:$GROUPS "$BASEDIR" - for d in "$LOG_BACKUP_BASEDIR" "$WORKER_BACKUP_BASEDIR" "$RELAYCHAIN_ALICE_BASEDIR" "$RELAYCHAIN_BOB_BASEDIR" \ - "$PARACHAIN_ALICE_BASEDIR" "$WORKER_BASEDIR"; do - mkdir -p "$d" - done - - echo "Worker count: $WORKER_COUNT" + # # 1/ check if $USER has sudo + # if sudo -l -U $USER 2>/dev/null | grep -q 'may run the following'; then + # source "$SGX_SDK/environment" + # else + # echo "$USER doesn't have sudo permission" + # exit 1 + # fi + + # # 2/ create folders if missing + # sudo mkdir -p "$BASEDIR" + # sudo chown -R $USER:$GROUPS "$BASEDIR" + # for d in "$LOG_BACKUP_BASEDIR" "$WORKER_BACKUP_BASEDIR" "$RELAYCHAIN_ALICE_BASEDIR" "$RELAYCHAIN_BOB_BASEDIR" \ + # "$PARACHAIN_ALICE_BASEDIR" "$WORKER_BASEDIR"; do + # mkdir -p "$d" + # done + + # echo "Worker count: $WORKER_COUNT" restart_parachain_services sleep 30 From 5d386d2dd2c970584f95e66cb406d1a0f6cb339c Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 14:40:58 +0800 Subject: [PATCH 13/45] Create env file with secrets --- .github/workflows/ci.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 52aa559..3bfc333 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -67,6 +67,18 @@ jobs: - run: docker images --all + - name: Create env file with secrets + run: | + echo "export TWITTER_AUTH_TOKEN_V2=${{ secrets.TWITTER_AUTH_TOKEN_V2 }}" >> /opt/worker_configs/worker_env + echo "export DISCORD_AUTH_TOKEN=${{ secrets.DISCORD_AUTH_TOKEN }}" >> /opt/worker_configs/worker_env + echo "export ACHAINABLE_AUTH_KEY=${{ secrets.ACHAINABLE_AUTH_KEY }}" >> /opt/worker_configs/worker_env + echo "export ONEBLOCK_NOTION_KEY=${{ secrets.ONEBLOCK_NOTION_KEY }}" >> /opt/worker_configs/worker_env + echo "export NODEREAL_API_KEY=${{ secrets.NODEREAL_API_KEY }}" >> /opt/worker_configs/worker_env + echo "export GENIIDATA_API_KEY=${{ secrets.GENIIDATA_API_KEY }}" >> /opt/worker_configs/worker_env + echo "export MORALIS_API_KEY=${{ secrets.MORALIS_API_KEY }}" >> /opt/worker_configs/worker_env + echo "export MAGIC_CRAFT_API_KEY=${{ secrets.MAGIC_CRAFT_API_KEY }}" >> /opt/worker_configs/worker_env + shell: bash + - name: Start parachain run: | ./scripts/run_parachain_worker.sh From bc31d93eeabc530829c30e6f20013499df9dcd3c Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 14:44:54 +0800 Subject: [PATCH 14/45] mkdir file --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3bfc333..1acb704 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,6 +69,7 @@ jobs: - name: Create env file with secrets run: | + mkdir -p /opt/worker_configs/worker_env echo "export TWITTER_AUTH_TOKEN_V2=${{ secrets.TWITTER_AUTH_TOKEN_V2 }}" >> /opt/worker_configs/worker_env echo "export DISCORD_AUTH_TOKEN=${{ secrets.DISCORD_AUTH_TOKEN }}" >> /opt/worker_configs/worker_env echo "export ACHAINABLE_AUTH_KEY=${{ secrets.ACHAINABLE_AUTH_KEY }}" >> /opt/worker_configs/worker_env From 869e27b9cd21e303ecdbfc34e4d7fd7644e291a9 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 14:47:04 +0800 Subject: [PATCH 15/45] mkdir one more --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1acb704..8eaefe9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -69,7 +69,7 @@ jobs: - name: Create env file with secrets run: | - mkdir -p /opt/worker_configs/worker_env + mkdir -p /opt/worker_configs echo "export TWITTER_AUTH_TOKEN_V2=${{ secrets.TWITTER_AUTH_TOKEN_V2 }}" >> /opt/worker_configs/worker_env echo "export DISCORD_AUTH_TOKEN=${{ secrets.DISCORD_AUTH_TOKEN }}" >> /opt/worker_configs/worker_env echo "export ACHAINABLE_AUTH_KEY=${{ secrets.ACHAINABLE_AUTH_KEY }}" >> /opt/worker_configs/worker_env From b56fe5cb6705d19f0eebc034c65250cdcd9e729c Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 14:50:10 +0800 Subject: [PATCH 16/45] remove export --- .github/workflows/ci.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8eaefe9..600c276 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,14 +70,14 @@ jobs: - name: Create env file with secrets run: | mkdir -p /opt/worker_configs - echo "export TWITTER_AUTH_TOKEN_V2=${{ secrets.TWITTER_AUTH_TOKEN_V2 }}" >> /opt/worker_configs/worker_env - echo "export DISCORD_AUTH_TOKEN=${{ secrets.DISCORD_AUTH_TOKEN }}" >> /opt/worker_configs/worker_env - echo "export ACHAINABLE_AUTH_KEY=${{ secrets.ACHAINABLE_AUTH_KEY }}" >> /opt/worker_configs/worker_env - echo "export ONEBLOCK_NOTION_KEY=${{ secrets.ONEBLOCK_NOTION_KEY }}" >> /opt/worker_configs/worker_env - echo "export NODEREAL_API_KEY=${{ secrets.NODEREAL_API_KEY }}" >> /opt/worker_configs/worker_env - echo "export GENIIDATA_API_KEY=${{ secrets.GENIIDATA_API_KEY }}" >> /opt/worker_configs/worker_env - echo "export MORALIS_API_KEY=${{ secrets.MORALIS_API_KEY }}" >> /opt/worker_configs/worker_env - echo "export MAGIC_CRAFT_API_KEY=${{ secrets.MAGIC_CRAFT_API_KEY }}" >> /opt/worker_configs/worker_env + echo "TWITTER_AUTH_TOKEN_V2=${{ secrets.TWITTER_AUTH_TOKEN_V2 }}" >> /opt/worker_configs/worker_env + echo "DISCORD_AUTH_TOKEN=${{ secrets.DISCORD_AUTH_TOKEN }}" >> /opt/worker_configs/worker_env + echo "ACHAINABLE_AUTH_KEY=${{ secrets.ACHAINABLE_AUTH_KEY }}" >> /opt/worker_configs/worker_env + echo "ONEBLOCK_NOTION_KEY=${{ secrets.ONEBLOCK_NOTION_KEY }}" >> /opt/worker_configs/worker_env + echo "NODEREAL_API_KEY=${{ secrets.NODEREAL_API_KEY }}" >> /opt/worker_configs/worker_env + echo "GENIIDATA_API_KEY=${{ secrets.GENIIDATA_API_KEY }}" >> /opt/worker_configs/worker_env + echo "MORALIS_API_KEY=${{ secrets.MORALIS_API_KEY }}" >> /opt/worker_configs/worker_env + echo "MAGIC_CRAFT_API_KEY=${{ secrets.MAGIC_CRAFT_API_KEY }}" >> /opt/worker_configs/worker_env shell: bash - name: Start parachain From facfd6a20549a800c1ee130e303816d2a02e9841 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 15:11:12 +0800 Subject: [PATCH 17/45] remove device && fmt --- .github/workflows/ci.yml | 27 +- integration-tests/common/call.ts | 57 +- integration-tests/common/common-types.ts | 70 +- integration-tests/common/config.js | 4 +- integration-tests/common/di-utils.ts | 380 +- integration-tests/common/helpers.ts | 113 +- integration-tests/common/transactions.ts | 243 +- integration-tests/common/utils/assertion.ts | 212 +- integration-tests/common/utils/common.ts | 4 +- integration-tests/common/utils/context.ts | 113 +- integration-tests/common/utils/crypto.ts | 234 +- .../common/utils/identity-helper.ts | 225 +- integration-tests/common/utils/index.ts | 22 +- .../common/utils/integration-setup.ts | 52 +- integration-tests/common/utils/storage.ts | 137 +- .../common/utils/type-creators.ts | 30 +- integration-tests/common/utils/vc-helper.ts | 19 +- integration-tests/post-check.test.ts | 174 + package-lock.json | 14844 ++++++++-------- package.json | 2 +- scripts/run_parachain_worker.sh | 2 - 21 files changed, 8789 insertions(+), 8175 deletions(-) create mode 100644 integration-tests/post-check.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 600c276..2b8e17f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,7 +5,7 @@ on: branches: - dev paths-ignore: - - "**/README.md" + - '**/README.md' pull_request: branches: - dev @@ -61,27 +61,26 @@ jobs: - name: Pull litentry image optionally run: | - docker pull litentry/identity-worker:latest - docker pull litentry/identity-cli:latest - docker pull litentry/litentry-chain-aio:latest + docker pull litentry/identity-worker:latest + docker pull litentry/identity-cli:latest + docker pull litentry/litentry-chain-aio:latest - run: docker images --all - name: Create env file with secrets run: | - mkdir -p /opt/worker_configs - echo "TWITTER_AUTH_TOKEN_V2=${{ secrets.TWITTER_AUTH_TOKEN_V2 }}" >> /opt/worker_configs/worker_env - echo "DISCORD_AUTH_TOKEN=${{ secrets.DISCORD_AUTH_TOKEN }}" >> /opt/worker_configs/worker_env - echo "ACHAINABLE_AUTH_KEY=${{ secrets.ACHAINABLE_AUTH_KEY }}" >> /opt/worker_configs/worker_env - echo "ONEBLOCK_NOTION_KEY=${{ secrets.ONEBLOCK_NOTION_KEY }}" >> /opt/worker_configs/worker_env - echo "NODEREAL_API_KEY=${{ secrets.NODEREAL_API_KEY }}" >> /opt/worker_configs/worker_env - echo "GENIIDATA_API_KEY=${{ secrets.GENIIDATA_API_KEY }}" >> /opt/worker_configs/worker_env - echo "MORALIS_API_KEY=${{ secrets.MORALIS_API_KEY }}" >> /opt/worker_configs/worker_env - echo "MAGIC_CRAFT_API_KEY=${{ secrets.MAGIC_CRAFT_API_KEY }}" >> /opt/worker_configs/worker_env + mkdir -p /opt/worker_configs + echo "TWITTER_AUTH_TOKEN_V2=${{ secrets.TWITTER_AUTH_TOKEN_V2 }}" >> /opt/worker_configs/worker_env + echo "DISCORD_AUTH_TOKEN=${{ secrets.DISCORD_AUTH_TOKEN }}" >> /opt/worker_configs/worker_env + echo "ACHAINABLE_AUTH_KEY=${{ secrets.ACHAINABLE_AUTH_KEY }}" >> /opt/worker_configs/worker_env + echo "ONEBLOCK_NOTION_KEY=${{ secrets.ONEBLOCK_NOTION_KEY }}" >> /opt/worker_configs/worker_env + echo "NODEREAL_API_KEY=${{ secrets.NODEREAL_API_KEY }}" >> /opt/worker_configs/worker_env + echo "GENIIDATA_API_KEY=${{ secrets.GENIIDATA_API_KEY }}" >> /opt/worker_configs/worker_env + echo "MORALIS_API_KEY=${{ secrets.MORALIS_API_KEY }}" >> /opt/worker_configs/worker_env + echo "MAGIC_CRAFT_API_KEY=${{ secrets.MAGIC_CRAFT_API_KEY }}" >> /opt/worker_configs/worker_env shell: bash - name: Start parachain run: | ./scripts/run_parachain_worker.sh docker ps - diff --git a/integration-tests/common/call.ts b/integration-tests/common/call.ts index bb56bd8..bd984c5 100644 --- a/integration-tests/common/call.ts +++ b/integration-tests/common/call.ts @@ -1,20 +1,21 @@ -import { ApiPromise } from '@polkadot/api'; -import { hexToU8a, compactStripLength, u8aToString } from '@polkadot/util'; -import WebSocketAsPromised from 'websocket-as-promised'; -import type { JsonRpcRequest } from './common-types'; -import type { WorkerRpcReturnValue } from '@litentry/parachain-api'; -import { Metadata, TypeRegistry } from '@polkadot/types'; -import type { Bytes } from '@polkadot/types-codec'; -import { createJsonRpcRequest } from './helpers'; +import { ApiPromise } from '@polkadot/api' +import { hexToU8a, compactStripLength, u8aToString } from '@polkadot/util' +import WebSocketAsPromised from 'websocket-as-promised' +import type { JsonRpcRequest } from './common-types' +import type { WorkerRpcReturnValue } from '@litentry/parachain-api' +import { Metadata, TypeRegistry } from '@polkadot/types' +import type { Bytes } from '@polkadot/types-codec' +import { createJsonRpcRequest } from './helpers' // TODO: // - better place to put these constants? // - maybe randomise it in test initialisation // // the aes key to encrypt an AES request -export const aesKey = '0x22fc82db5b606998ad45099b7978b5b4f9dd4ea6017e57370ac56141caaabd12'; +export const aesKey = + '0x22fc82db5b606998ad45099b7978b5b4f9dd4ea6017e57370ac56141caaabd12' // nonce to encrypt an AES request together with `aesKey` -export const keyNonce = '0x010101010101010101010101'; +export const keyNonce = '0x010101010101010101010101' // send RPC request export async function sendRequest( @@ -22,26 +23,32 @@ export async function sendRequest( request: JsonRpcRequest, api: ApiPromise ): Promise { - const rawRes = await wsClient.sendRequest(request, { requestId: request.id, timeout: 6000 }); + const rawRes = await wsClient.sendRequest(request, { + requestId: request.id, + timeout: 6000, + }) - const res = api.createType('WorkerRpcReturnValue', rawRes.result); + const res = api.createType('WorkerRpcReturnValue', rawRes.result) if (res.status.isError) { - console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)); + console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)) } // unfortunately, the res.value only contains the hash of top - if (res.status.isTrustedOperationStatus && res.status.asTrustedOperationStatus[0].isInvalid) { - console.log('Rpc trusted operation execution failed, hash: ', res.value); + if ( + res.status.isTrustedOperationStatus && + res.status.asTrustedOperationStatus[0].isInvalid + ) { + console.log('Rpc trusted operation execution failed, hash: ', res.value) } - return res; + return res } // decode the returned bytes as string // TODO: is it same as `String::decode` in rust? // please note we shouldn't use toU8a(), which encodes the Bytes instead of converting export function decodeRpcBytesAsString(value: Bytes): string { - return u8aToString(compactStripLength(hexToU8a(value.toHex()))[1]); + return u8aToString(compactStripLength(hexToU8a(value.toHex()))[1]) } export async function getSidechainMetadata( @@ -49,13 +56,17 @@ export async function getSidechainMetadata( api: ApiPromise, requestId: number ): Promise<{ sidechainMetaData: Metadata; sidechainRegistry: TypeRegistry }> { - const request = createJsonRpcRequest('state_getMetadata', Uint8Array.from([]), requestId); + const request = createJsonRpcRequest( + 'state_getMetadata', + Uint8Array.from([]), + requestId + ) - const resp = await sendRequest(wsClient, request, api); + const resp = await sendRequest(wsClient, request, api) - const sidechainRegistry = new TypeRegistry(); - const sidechainMetaData = new Metadata(sidechainRegistry, resp.value); + const sidechainRegistry = new TypeRegistry() + const sidechainMetaData = new Metadata(sidechainRegistry, resp.value) - sidechainRegistry.setMetadata(sidechainMetaData); - return { sidechainMetaData, sidechainRegistry }; + sidechainRegistry.setMetadata(sidechainMetaData) + return { sidechainMetaData, sidechainRegistry } } diff --git a/integration-tests/common/common-types.ts b/integration-tests/common/common-types.ts index 5e29060..b2c6c54 100644 --- a/integration-tests/common/common-types.ts +++ b/integration-tests/common/common-types.ts @@ -1,47 +1,47 @@ -import { ApiPromise } from '@litentry/parachain-api'; -import { KeyObject } from 'crypto'; -import WebSocketAsPromised from 'websocket-as-promised'; -import { Metadata, TypeRegistry } from '@polkadot/types'; -import { Wallet } from 'ethers'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type { HexString } from '@polkadot/util/types'; -import { ECPairInterface } from 'ecpair'; -import { Keypair } from '@solana/web3.js'; -import { Signer } from './utils/crypto'; +import { ApiPromise } from '@litentry/parachain-api' +import { KeyObject } from 'crypto' +import WebSocketAsPromised from 'websocket-as-promised' +import { Metadata, TypeRegistry } from '@polkadot/types' +import { Wallet } from 'ethers' +import type { KeyringPair } from '@polkadot/keyring/types' +import type { HexString } from '@polkadot/util/types' +import { ECPairInterface } from 'ecpair' +import { Keypair } from '@solana/web3.js' +import { Signer } from './utils/crypto' // If there are types already defined in the client-api, please avoid redefining these types. // Instead, make every effort to use the types that have been generated within the client-api. interface WalletType { - [walletName: string]: Signer; + [walletName: string]: Signer } export interface Wallets { - evm: WalletType; - substrate: WalletType; - bitcoin: WalletType; - solana: WalletType; + evm: WalletType + substrate: WalletType + bitcoin: WalletType + solana: WalletType } export type IntegrationTestContext = { - tee: WebSocketAsPromised; - api: ApiPromise; - teeShieldingKey: KeyObject; - mrEnclave: HexString; - web3Wallets: Wallets; - sidechainMetaData: Metadata; - sidechainRegistry: TypeRegistry; - chainIdentifier: number; - requestId: number; -}; + tee: WebSocketAsPromised + api: ApiPromise + teeShieldingKey: KeyObject + mrEnclave: HexString + web3Wallets: Wallets + sidechainMetaData: Metadata + sidechainRegistry: TypeRegistry + chainIdentifier: number + requestId: number +} export type Web3Wallets = { - substrateWallet: KeyringPair; - evmWallet: Wallet; - bitcoinWallet: ECPairInterface; - solanaWallet: Keypair; -}; + substrateWallet: KeyringPair + evmWallet: Wallet + bitcoinWallet: ECPairInterface + solanaWallet: Keypair +} export type JsonRpcRequest = { - jsonrpc: string; - method: string; - params: any; - id: number; -}; + jsonrpc: string + method: string + params: any + id: number +} diff --git a/integration-tests/common/config.js b/integration-tests/common/config.js index 3dbb229..71127a5 100644 --- a/integration-tests/common/config.js +++ b/integration-tests/common/config.js @@ -1,4 +1,4 @@ -import dotenv from 'dotenv'; +import dotenv from 'dotenv' // eslint-disable-next-line @typescript-eslint/no-var-requires, no-undef -dotenv.config({ path: `.env.${process.env.NODE_ENV || 'local'}` }); +dotenv.config({ path: `.env.${process.env.NODE_ENV || 'local'}` }) diff --git a/integration-tests/common/di-utils.ts b/integration-tests/common/di-utils.ts index 97a8cc0..f38c4f9 100644 --- a/integration-tests/common/di-utils.ts +++ b/integration-tests/common/di-utils.ts @@ -1,9 +1,16 @@ -import { ApiPromise } from '@polkadot/api'; -import { u8aToHex, hexToU8a, compactAddLength, bufferToU8a, u8aConcat, stringToU8a } from '@polkadot/util'; -import { Codec } from '@polkadot/types/types'; -import { TypeRegistry } from '@polkadot/types'; -import { Bytes } from '@polkadot/types-codec'; -import { IntegrationTestContext, JsonRpcRequest } from './common-types'; +import { ApiPromise } from '@polkadot/api' +import { + u8aToHex, + hexToU8a, + compactAddLength, + bufferToU8a, + u8aConcat, + stringToU8a, +} from '@polkadot/util' +import { Codec } from '@polkadot/types/types' +import { TypeRegistry } from '@polkadot/types' +import { Bytes } from '@polkadot/types-codec' +import { IntegrationTestContext, JsonRpcRequest } from './common-types' import type { WorkerRpcReturnValue, TrustedCallSigned, @@ -11,7 +18,7 @@ import type { CorePrimitivesIdentity, TrustedGetterSigned, TrustedCall, -} from '@litentry/parachain-api'; +} from '@litentry/parachain-api' import { encryptWithTeeShieldingKey, Signer, @@ -19,13 +26,17 @@ import { sleep, createLitentryMultiSignature, decryptWithAes, -} from './utils'; -import { aesKey, decodeRpcBytesAsString, keyNonce } from './call'; -import { createPublicKey, KeyObject } from 'crypto'; -import WebSocketAsPromised from 'websocket-as-promised'; -import { H256, Index } from '@polkadot/types/interfaces'; -import { blake2AsHex, base58Encode, blake2AsU8a } from '@polkadot/util-crypto'; -import { createJsonRpcRequest, nextRequestId, stfErrorToString } from './helpers'; +} from './utils' +import { aesKey, decodeRpcBytesAsString, keyNonce } from './call' +import { createPublicKey, KeyObject } from 'crypto' +import WebSocketAsPromised from 'websocket-as-promised' +import { H256, Index } from '@polkadot/types/interfaces' +import { blake2AsHex, base58Encode, blake2AsU8a } from '@polkadot/util-crypto' +import { + createJsonRpcRequest, + nextRequestId, + stfErrorToString, +} from './helpers' // Send the request to worker ws // we should perform different actions based on the returned status: @@ -46,47 +57,57 @@ async function sendRequest( ): Promise { const p = new Promise((resolve, reject) => wsClient.onMessage.addListener((data) => { - const parsed = JSON.parse(data); + const parsed = JSON.parse(data) if (parsed.id !== request.id) { - return; + return } if ('error' in parsed) { - const transaction = { request, response: parsed }; - console.log('Request failed: ' + JSON.stringify(transaction, null, 2)); - reject(new Error(parsed.error.message, { cause: transaction })); + const transaction = { request, response: parsed } + console.log( + 'Request failed: ' + JSON.stringify(transaction, null, 2) + ) + reject(new Error(parsed.error.message, { cause: transaction })) } - const result = parsed.result; - const res = api.createType('WorkerRpcReturnValue', result); + const result = parsed.result + const res = api.createType('WorkerRpcReturnValue', result) if (res.status.isError) { - console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)); + console.log( + 'Rpc response error: ' + decodeRpcBytesAsString(res.value) + ) } - if (res.status.isTrustedOperationStatus && res.status.asTrustedOperationStatus[0].isInvalid) { - console.log('Rpc trusted operation execution failed, hash: ', res.value.toHex()); - const stfError = api.createType('StfError', res.value); - const msg = stfErrorToString(stfError); - console.log('TrustedOperationStatus error: ', msg); + if ( + res.status.isTrustedOperationStatus && + res.status.asTrustedOperationStatus[0].isInvalid + ) { + console.log( + 'Rpc trusted operation execution failed, hash: ', + res.value.toHex() + ) + const stfError = api.createType('StfError', res.value) + const msg = stfErrorToString(stfError) + console.log('TrustedOperationStatus error: ', msg) } // sending every response we receive from websocket - if (onMessageReceived) onMessageReceived(res); + if (onMessageReceived) onMessageReceived(res) // resolve it once `do_watch` is false, meaning it's the final response if (res.do_watch.isFalse) { // TODO: maybe only remove this listener - wsClient.onMessage.removeAllListeners(); - resolve(res); + wsClient.onMessage.removeAllListeners() + resolve(res) } else { // `do_watch` is true means: hold on - there's still something coming - console.log('do_watch is true, continue watching ...'); + console.log('do_watch is true, continue watching ...') } }) - ); + ) - wsClient.sendRequest(request); - return p; + wsClient.sendRequest(request) + return p } // TrustedCalls are defined in: @@ -106,10 +127,10 @@ export const createSignedTrustedCall = async ( withWrappedBytes = false, withPrefix = false ): Promise => { - const [variant, argType] = trustedCall; + const [variant, argType] = trustedCall const call: TrustedCall = parachainApi.createType('TrustedCall', { [variant]: parachainApi.createType(argType, params), - }); + }) let payload: string = blake2AsHex( u8aConcat( call.toU8a(), @@ -118,47 +139,47 @@ export const createSignedTrustedCall = async ( hexToU8a(mrenclave) // should be shard, but it's the same as MRENCLAVE in our case ), 256 - ); + ) if (withWrappedBytes) { - payload = `${payload}`; + payload = `${payload}` } if (withPrefix) { - const prefix = getSignatureMessagePrefix(call); - const msg = prefix + payload; - payload = msg; - console.log('Signing message: ', payload); + const prefix = getSignatureMessagePrefix(call) + const msg = prefix + payload + payload = msg + console.log('Signing message: ', payload) } const signature = await createLitentryMultiSignature(parachainApi, { signer, payload, - }); + }) return parachainApi.createType('TrustedCallSigned', { call: call, index: nonce, signature: signature, - }); -}; + }) +} // See TrustedCall.signature_message_prefix function getSignatureMessagePrefix(call: TrustedCall): string { if (call.isLinkIdentity) { - return "By linking your identity to our platform, you're taking a step towards a more integrated experience. Please be assured, this process is safe and involves no transactions of your assets. Token: "; + return "By linking your identity to our platform, you're taking a step towards a more integrated experience. Please be assured, this process is safe and involves no transactions of your assets. Token: " } if (call.isRequestBatchVc) { - const [, , assertions] = call.asRequestBatchVc; - const length = assertions.length; + const [, , assertions] = call.asRequestBatchVc + const length = assertions.length return `We are going to help you generate ${length} secure credential${ length > 1 ? 's' : '' - }. Please be assured, this process is safe and involves no transactions of your assets. Token: `; + }. Please be assured, this process is safe and involves no transactions of your assets. Token: ` } - return 'Token: '; + return 'Token: ' } export const createSignedTrustedGetter = async ( @@ -167,31 +188,35 @@ export const createSignedTrustedGetter = async ( signer: Signer, params: any ): Promise => { - const [variant, argType] = trustedGetter; + const [variant, argType] = trustedGetter const getter = parachainApi.createType('TrustedGetter', { [variant]: parachainApi.createType(argType, params), - }); - const payload = blake2AsU8a(getter.toU8a(), 256); + }) + const payload = blake2AsU8a(getter.toU8a(), 256) let signature = await createLitentryMultiSignature(parachainApi, { signer, payload, - }); + }) return parachainApi.createType('TrustedGetterSigned', { getter, signature, - }); -}; + }) +} -export const createPublicGetter = (parachainApi: ApiPromise, publicGetter: [string, string], params: any) => { - const [variant, argType] = publicGetter; +export const createPublicGetter = ( + parachainApi: ApiPromise, + publicGetter: [string, string], + params: any +) => { + const [variant, argType] = publicGetter const getter = parachainApi.createType('PublicGetter', { [variant]: parachainApi.createType(argType, params), - }); + }) - return getter; -}; + return getter +} export async function createSignedTrustedCallLinkIdentity( parachainApi: ApiPromise, @@ -215,10 +240,18 @@ export async function createSignedTrustedCallLinkIdentity( signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, validationData, web3networks, aesKey, hash], + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + identity, + validationData, + web3networks, + aesKey, + hash, + ], options?.withWrappedBytes, options?.withPrefix - ); + ) } export async function createSignedTrustedCallSetIdentityNetworks( @@ -241,8 +274,15 @@ export async function createSignedTrustedCallSetIdentityNetworks( signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, web3networks, aesKey, hash] - ); + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + identity, + web3networks, + aesKey, + hash, + ] + ) } export async function createSignedTrustedCallRequestVc( @@ -258,14 +298,23 @@ export async function createSignedTrustedCallRequestVc( ) { return await createSignedTrustedCall( parachainApi, - ['request_vc', '(LitentryIdentity, LitentryIdentity, Assertion, Option, H256)'], + [ + 'request_vc', + '(LitentryIdentity, LitentryIdentity, Assertion, Option, H256)', + ], signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), assertion, aesKey, hash], + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + assertion, + aesKey, + hash, + ], options?.withWrappedBytes, options?.withPrefix - ); + ) } export async function createSignedTrustedCallRequestBatchVc( @@ -288,10 +337,16 @@ export async function createSignedTrustedCallRequestBatchVc( signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), assertion, aesKey, hash], + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + assertion, + aesKey, + hash, + ], options?.withWrappedBytes, options?.withPrefix - ); + ) } export async function createSignedTrustedCallDeactivateIdentity( @@ -306,12 +361,21 @@ export async function createSignedTrustedCallDeactivateIdentity( ) { return createSignedTrustedCall( parachainApi, - ['deactivate_identity', '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)'], + [ + 'deactivate_identity', + '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)', + ], signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, aesKey, hash] - ); + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + identity, + aesKey, + hash, + ] + ) } export async function createSignedTrustedCallActivateIdentity( parachainApi: ApiPromise, @@ -325,12 +389,21 @@ export async function createSignedTrustedCallActivateIdentity( ) { return createSignedTrustedCall( parachainApi, - ['activate_identity', '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)'], + [ + 'activate_identity', + '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)', + ], signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, aesKey, hash] - ); + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + identity, + aesKey, + hash, + ] + ) } export async function createSignedTrustedGetterIdGraph( @@ -343,8 +416,8 @@ export async function createSignedTrustedGetterIdGraph( ['id_graph', '(LitentryIdentity)'], signer, primeIdentity.toHuman() - ); - return parachainApi.createType('Getter', { trusted: getterSigned }); + ) + return parachainApi.createType('Getter', { trusted: getterSigned }) } export const getSidechainNonce = async ( @@ -355,17 +428,22 @@ export const getSidechainNonce = async ( 'author_getNextNonce', [base58Encode(hexToU8a(context.mrEnclave)), primeIdentity.toHex()], nextRequestId(context) - ); - const res = await sendRequest(context.tee, request, context.api); - const nonceHex = res.value.toHex(); - let nonce = 0; + ) + const res = await sendRequest(context.tee, request, context.api) + const nonceHex = res.value.toHex() + let nonce = 0 if (nonceHex) { - nonce = context.api.createType('Index', '0x' + nonceHex.slice(2)?.match(/../g)?.reverse().join('')).toNumber(); + nonce = context.api + .createType( + 'Index', + '0x' + nonceHex.slice(2)?.match(/../g)?.reverse().join('') + ) + .toNumber() } - return context.api.createType('Index', nonce); -}; + return context.api.createType('Index', nonce) +} export const getIdGraphHash = async ( context: IntegrationTestContext, @@ -376,12 +454,14 @@ export const getIdGraphHash = async ( context.api, ['id_graph_hash', '(LitentryIdentity)'], primeIdentity.toHuman() - ); - const getter = context.api.createType('Getter', { public: getterPublic }); - const res = await sendRsaRequestFromGetter(context, teeShieldingKey, getter); - const hash = context.api.createType('Option', hexToU8a(res.value.toHex())).unwrap(); - return context.api.createType('H256', hash); -}; + ) + const getter = context.api.createType('Getter', { public: getterPublic }) + const res = await sendRsaRequestFromGetter(context, teeShieldingKey, getter) + const hash = context.api + .createType('Option', hexToU8a(res.value.toHex())) + .unwrap() + return context.api.createType('H256', hash) +} export const sendRequestFromTrustedCall = async ( context: IntegrationTestContext, @@ -391,8 +471,13 @@ export const sendRequestFromTrustedCall = async ( onMessageReceived?: (res: WorkerRpcReturnValue) => void ) => { // construct trusted operation - const trustedOperation = context.api.createType('TrustedOperation', { direct_call: call }); - console.log('trustedOperation: ', JSON.stringify(trustedOperation.toHuman(), null, 2)); + const trustedOperation = context.api.createType('TrustedOperation', { + direct_call: call, + }) + console.log( + 'trustedOperation: ', + JSON.stringify(trustedOperation.toHuman(), null, 2) + ) // create the request parameter const requestParam = await createAesRequest( context.api, @@ -400,14 +485,14 @@ export const sendRequestFromTrustedCall = async ( teeShieldingKey, hexToU8a(aesKey), trustedOperation.toU8a() - ); + ) const request = createJsonRpcRequest( isVcDirect ? 'author_requestVc' : 'author_submitAndWatchAesRequest', [u8aToHex(requestParam)], nextRequestId(context) - ); - return sendRequest(context.tee, request, context.api, onMessageReceived); -}; + ) + return sendRequest(context.tee, request, context.api, onMessageReceived) +} /** @deprecated use `sendAesRequestFromGetter` instead */ export const sendRsaRequestFromGetter = async ( @@ -417,13 +502,23 @@ export const sendRsaRequestFromGetter = async ( ): Promise => { // important: we don't create the `TrustedOperation` type here, but use `Getter` type directly // this is what `state_executeGetter` expects in rust - const requestParam = await createRsaRequest(context.api, context.mrEnclave, teeShieldingKey, true, getter.toU8a()); - const request = createJsonRpcRequest('state_executeGetter', [u8aToHex(requestParam)], nextRequestId(context)); + const requestParam = await createRsaRequest( + context.api, + context.mrEnclave, + teeShieldingKey, + true, + getter.toU8a() + ) + const request = createJsonRpcRequest( + 'state_executeGetter', + [u8aToHex(requestParam)], + nextRequestId(context) + ) // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec // hopefully we will query correct state - await sleep(1); - return sendRequest(context.tee, request, context.api); -}; + await sleep(1) + return sendRequest(context.tee, request, context.api) +} export const sendAesRequestFromGetter = async ( context: IntegrationTestContext, @@ -439,30 +534,38 @@ export const sendAesRequestFromGetter = async ( teeShieldingKey, aesKey, getter.toU8a() - ); - const request = createJsonRpcRequest('state_executeAesGetter', [u8aToHex(requestParam)], nextRequestId(context)); + ) + const request = createJsonRpcRequest( + 'state_executeAesGetter', + [u8aToHex(requestParam)], + nextRequestId(context) + ) // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec // hopefully we will query correct state - await sleep(1); - const res = await sendRequest(context.tee, request, context.api); - const aesOutput = context.api.createType('AesOutput', res.value); - const decryptedValue = decryptWithAes(u8aToHex(aesKey), aesOutput, 'hex'); + await sleep(1) + const res = await sendRequest(context.tee, request, context.api) + const aesOutput = context.api.createType('AesOutput', res.value) + const decryptedValue = decryptWithAes(u8aToHex(aesKey), aesOutput, 'hex') return context.api.createType('WorkerRpcReturnValue', { value: decryptedValue, do_watch: res.do_watch, status: res.status, - }); -}; + }) +} // get TEE's shielding key directly via RPC export const getTeeShieldingKey = async (context: IntegrationTestContext) => { - const request = createJsonRpcRequest('author_getShieldingKey', Uint8Array.from([]), nextRequestId(context)); - const res = await sendRequest(context.tee, request, context.api); + const request = createJsonRpcRequest( + 'author_getShieldingKey', + Uint8Array.from([]), + nextRequestId(context) + ) + const res = await sendRequest(context.tee, request, context.api) const k = JSON.parse(decodeRpcBytesAsString(res.value)) as { - n: Uint8Array; - e: Uint8Array; - }; + n: Uint8Array + e: Uint8Array + } return createPublicKey({ key: { @@ -473,8 +576,8 @@ export const getTeeShieldingKey = async (context: IntegrationTestContext) => { e: Buffer.from(k.e.reverse()).toString('base64url'), }, format: 'jwk', - }); -}; + }) +} // given an encoded trusted operation, construct a rsa request bytes that are sent in RPC request parameters export const createRsaRequest = async ( @@ -484,15 +587,19 @@ export const createRsaRequest = async ( isGetter: boolean, top: Uint8Array ) => { - let payload; + let payload if (isGetter) { - payload = compactAddLength(top); + payload = compactAddLength(top) } else { - payload = compactAddLength(bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, top))); + payload = compactAddLength( + bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, top)) + ) } - return parachainApi.createType('RsaRequest', { shard: hexToU8a(mrenclave), payload }).toU8a(); -}; + return parachainApi + .createType('RsaRequest', { shard: hexToU8a(mrenclave), payload }) + .toU8a() +} // given an encoded trusted operation, construct an aes request bytes that are sent in RPC request parameters export const createAesRequest = async ( @@ -502,7 +609,9 @@ export const createAesRequest = async ( aesKey: Uint8Array, top: Uint8Array ) => { - const encryptedAesKey = compactAddLength(bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, aesKey))); + const encryptedAesKey = compactAddLength( + bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, aesKey)) + ) return parachainApi .createType('AesRequest', { shard: hexToU8a(mrenclave), @@ -510,25 +619,36 @@ export const createAesRequest = async ( payload: parachainApi .createType('AesOutput', { ciphertext: compactAddLength( - hexToU8a(encryptWithAes(u8aToHex(aesKey), hexToU8a(keyNonce), Buffer.from(top))) + hexToU8a( + encryptWithAes( + u8aToHex(aesKey), + hexToU8a(keyNonce), + Buffer.from(top) + ) + ) ), aad: hexToU8a('0x'), nonce: hexToU8a(keyNonce), }) .toU8a(), }) - .toU8a(); -}; + .toU8a() +} export function decodeIdGraph(sidechainRegistry: TypeRegistry, value: Bytes) { - const idgraphBytes = sidechainRegistry.createType('Option', hexToU8a(value.toHex())); + const idgraphBytes = sidechainRegistry.createType( + 'Option', + hexToU8a(value.toHex()) + ) return sidechainRegistry.createType( 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', idgraphBytes.unwrap() - ); + ) } export function getTopHash(parachainApi: ApiPromise, call: TrustedCallSigned) { - const trustedOperation = parachainApi.createType('TrustedOperation', { direct_call: call }); - return blake2AsHex(trustedOperation.toU8a()); + const trustedOperation = parachainApi.createType('TrustedOperation', { + direct_call: call, + }) + return blake2AsHex(trustedOperation.toU8a()) } diff --git a/integration-tests/common/helpers.ts b/integration-tests/common/helpers.ts index cc0dc6d..6b526df 100644 --- a/integration-tests/common/helpers.ts +++ b/integration-tests/common/helpers.ts @@ -1,71 +1,80 @@ -import { xxhashAsU8a, blake2AsU8a } from '@polkadot/util-crypto'; -import { u8aConcat, u8aToU8a } from '@polkadot/util'; -import { Keyring } from '@polkadot/api'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type { HexString } from '@polkadot/util/types'; -import './config'; -import { IntegrationTestContext, JsonRpcRequest } from './common-types'; -import { createHash, randomBytes } from 'crypto'; -import { ECPairFactory, ECPairInterface } from 'ecpair'; -import * as ecc from 'tiny-secp256k1'; -import { ethers, Wallet } from 'ethers'; -import { Keypair } from '@solana/web3.js'; -import { EthersSigner, PolkadotSigner, BitcoinSigner, SolanaSigner } from './utils/crypto'; -import { Wallets } from './common-types'; -import type { ErrorDetail, StfError } from '@litentry/parachain-api'; +import { xxhashAsU8a, blake2AsU8a } from '@polkadot/util-crypto' +import { u8aConcat, u8aToU8a } from '@polkadot/util' +import { Keyring } from '@polkadot/api' +import type { KeyringPair } from '@polkadot/keyring/types' +import type { HexString } from '@polkadot/util/types' +import './config' +import { IntegrationTestContext, JsonRpcRequest } from './common-types' +import { createHash, randomBytes } from 'crypto' +import { ECPairFactory, ECPairInterface } from 'ecpair' +import * as ecc from 'tiny-secp256k1' +import { ethers, Wallet } from 'ethers' +import { Keypair } from '@solana/web3.js' +import { + EthersSigner, + PolkadotSigner, + BitcoinSigner, + SolanaSigner, +} from './utils/crypto' +import { Wallets } from './common-types' +import type { ErrorDetail, StfError } from '@litentry/parachain-api' export function blake2128Concat(data: HexString | Uint8Array): Uint8Array { - return u8aConcat(blake2AsU8a(data, 128), u8aToU8a(data)); + return u8aConcat(blake2AsU8a(data, 128), u8aToU8a(data)) } export function twox64Concat(data: HexString | Uint8Array): Uint8Array { - return u8aConcat(xxhashAsU8a(data, 64), u8aToU8a(data)); + return u8aConcat(xxhashAsU8a(data, 64), u8aToU8a(data)) } export function identity(data: HexString | Uint8Array): Uint8Array { - return u8aToU8a(data); + return u8aToU8a(data) } -export function createJsonRpcRequest(method: string, params: any, id: number): JsonRpcRequest { +export function createJsonRpcRequest( + method: string, + params: any, + id: number +): JsonRpcRequest { return { jsonrpc: '2.0', method, params, id, - }; + } } export function nextRequestId(context: IntegrationTestContext): number { - const nextId = context.requestId + 1; - context.requestId = nextId; - return nextId; + const nextId = context.requestId + 1 + context.requestId = nextId + return nextId } export function randomEvmWallet(): Wallet { - return ethers.Wallet.createRandom(); + return ethers.Wallet.createRandom() } export function randomSubstrateWallet(): KeyringPair { - const keyring = new Keyring({ type: 'sr25519' }); - return keyring.addFromSeed(randomBytes(32)); + const keyring = new Keyring({ type: 'sr25519' }) + return keyring.addFromSeed(randomBytes(32)) } export function randomBitcoinWallet(): ECPairInterface { - const ecPair = ECPairFactory(ecc); - const keyPair = ecPair.makeRandom(); - return keyPair; + const ecPair = ECPairFactory(ecc) + const keyPair = ecPair.makeRandom() + return keyPair } export function genesisSubstrateWallet(name: string): KeyringPair { - const keyring = new Keyring({ type: 'sr25519' }); - const keyPair = keyring.addFromUri(`//${name}`, { name }); - return keyPair; + const keyring = new Keyring({ type: 'sr25519' }) + const keyPair = keyring.addFromUri(`//${name}`, { name }) + return keyPair } export function genesisSolanaWallet(name: string): Keypair { - let seed = createHash('sha256').update(name).digest(); - seed = seed.subarray(0, 32); - const keyPair = Keypair.fromSeed(seed); - return keyPair; + let seed = createHash('sha256').update(name).digest() + seed = seed.subarray(0, 32) + const keyPair = Keypair.fromSeed(seed) + return keyPair } export const createWeb3Wallets = (): Wallets => { @@ -74,23 +83,25 @@ export const createWeb3Wallets = (): Wallets => { substrate: {}, bitcoin: {}, solana: {}, - }; - const walletNames = ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve']; + } + const walletNames = ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve'] for (const name of walletNames) { - wallets.evm[name] = new EthersSigner(randomEvmWallet()); - wallets.substrate[name] = new PolkadotSigner(genesisSubstrateWallet(name)); - wallets.bitcoin[name] = new BitcoinSigner(randomBitcoinWallet()); - wallets.solana[name] = new SolanaSigner(genesisSolanaWallet(name)); + wallets.evm[name] = new EthersSigner(randomEvmWallet()) + wallets.substrate[name] = new PolkadotSigner( + genesisSubstrateWallet(name) + ) + wallets.bitcoin[name] = new BitcoinSigner(randomBitcoinWallet()) + wallets.solana[name] = new SolanaSigner(genesisSolanaWallet(name)) } - return wallets; -}; + return wallets +} export function stfErrorToString(stfError: StfError): string { if (stfError.isRequestVCFailed) { - const [_assertionIgnored, errorDetail] = stfError.asRequestVCFailed; + const [_assertionIgnored, errorDetail] = stfError.asRequestVCFailed - return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}`; + return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}` } if ( @@ -102,16 +113,16 @@ export function stfErrorToString(stfError: StfError): string { stfError.isRemoveIdentityFailed || stfError.isDispatch ) { - const errorDetail = stfError.value as ErrorDetail; + const errorDetail = stfError.value as ErrorDetail - return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}`; + return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}` } if (stfError.isInvalidNonce) { - const [nonce1, nonce2] = stfError.asInvalidNonce; + const [nonce1, nonce2] = stfError.asInvalidNonce - return `${stfError.type}: [${nonce1?.toHuman()}, ${nonce2?.toHuman()}]`; + return `${stfError.type}: [${nonce1?.toHuman()}, ${nonce2?.toHuman()}]` } - return stfError.type; + return stfError.type } diff --git a/integration-tests/common/transactions.ts b/integration-tests/common/transactions.ts index b8ee954..bb2f002 100644 --- a/integration-tests/common/transactions.ts +++ b/integration-tests/common/transactions.ts @@ -1,5 +1,5 @@ -import { hexToU8a } from '@polkadot/util'; -import type { IntegrationTestContext } from './common-types'; +import { hexToU8a } from '@polkadot/util' +import type { IntegrationTestContext } from './common-types' import { AddressOrPair, @@ -8,7 +8,7 @@ import { FrameSystemEventRecord, Keyring, SubmittableExtrinsic, -} from '@litentry/parachain-api'; +} from '@litentry/parachain-api' // for DI-test export const subscribeToEventsWithExtHash = async ( @@ -16,7 +16,7 @@ export const subscribeToEventsWithExtHash = async ( context: IntegrationTestContext ): Promise => { return new Promise((resolve, reject) => { - let blocksToScan = 30; + let blocksToScan = 30 /* WARNING:The unsubscribe function is called inside the Promise callback, which is executed each time a new blockHeader is received. `unsubscribe` is intended to unsubscribe a blockHeader if certain conditions are met. @@ -24,36 +24,46 @@ export const subscribeToEventsWithExtHash = async ( However, since it doesn't return a Promise, using await doesn't make sense and can lead to problematic code behaviour. soooooo, don't use await here */ - const unsubscribe = context.api.rpc.chain.subscribeNewHeads(async (blockHeader) => { - const shiftedApi = await context.api.at(blockHeader.hash); - - const allBlockEvents = await shiftedApi.query.system.events(); - const allExtrinsicEvents = allBlockEvents.filter(({ phase }) => phase.isApplyExtrinsic); - - const matchingEvent = allExtrinsicEvents.filter((eventRecord) => { - const eventData = eventRecord.event.data.toHuman(); - return ( - eventData != undefined && - typeof eventData === 'object' && - 'reqExtHash' in eventData && - eventData.reqExtHash === requestIdentifier - ); - }); - - if (matchingEvent.length == 0) { - blocksToScan -= 1; - if (blocksToScan < 1) { - reject(new Error(`timed out listening for reqExtHash: ${requestIdentifier} in parachain events`)); - (await unsubscribe)(); + const unsubscribe = context.api.rpc.chain.subscribeNewHeads( + async (blockHeader) => { + const shiftedApi = await context.api.at(blockHeader.hash) + + const allBlockEvents = await shiftedApi.query.system.events() + const allExtrinsicEvents = allBlockEvents.filter( + ({ phase }) => phase.isApplyExtrinsic + ) + + const matchingEvent = allExtrinsicEvents.filter( + (eventRecord) => { + const eventData = eventRecord.event.data.toHuman() + return ( + eventData != undefined && + typeof eventData === 'object' && + 'reqExtHash' in eventData && + eventData.reqExtHash === requestIdentifier + ) + } + ) + + if (matchingEvent.length == 0) { + blocksToScan -= 1 + if (blocksToScan < 1) { + reject( + new Error( + `timed out listening for reqExtHash: ${requestIdentifier} in parachain events` + ) + ) + ;(await unsubscribe)() + } + return } - return; - } - resolve(matchingEvent); - (await unsubscribe)(); - }); - }); -}; + resolve(matchingEvent) + ;(await unsubscribe)() + } + ) + }) +} // for II-test export const subscribeToEvents = async ( @@ -62,79 +72,111 @@ export const subscribeToEvents = async ( api: ApiPromise ): Promise => { return new Promise((resolve, reject) => { - let blocksToScan = 15; - const unsubscribe = api.rpc.chain.subscribeNewHeads(async (blockHeader) => { - const shiftedApi = await api.at(blockHeader.hash); - - const allBlockEvents = await shiftedApi.query.system.events(); - const allExtrinsicEvents = allBlockEvents.filter(({ phase }) => phase.isApplyExtrinsic); - - const matchingEvent = allExtrinsicEvents.filter(({ event, phase }) => { - return event.section === section && event.method === method; - }); - - if (matchingEvent.length == 0) { - blocksToScan -= 1; - if (blocksToScan < 1) { - reject(new Error(`timed out listening for event ${section}.${method}`)); - (await unsubscribe)(); + let blocksToScan = 15 + const unsubscribe = api.rpc.chain.subscribeNewHeads( + async (blockHeader) => { + const shiftedApi = await api.at(blockHeader.hash) + + const allBlockEvents = await shiftedApi.query.system.events() + const allExtrinsicEvents = allBlockEvents.filter( + ({ phase }) => phase.isApplyExtrinsic + ) + + const matchingEvent = allExtrinsicEvents.filter( + ({ event, phase }) => { + return ( + event.section === section && event.method === method + ) + } + ) + + if (matchingEvent.length == 0) { + blocksToScan -= 1 + if (blocksToScan < 1) { + reject( + new Error( + `timed out listening for event ${section}.${method}` + ) + ) + ;(await unsubscribe)() + } + return } - return; - } - resolve(matchingEvent); - (await unsubscribe)(); - }); - }); -}; + resolve(matchingEvent) + ;(await unsubscribe)() + } + ) + }) +} -export async function waitForBlock(api: ApiPromise, blockNumber: number, blocksToCheck = 5) { - let count = 0; +export async function waitForBlock( + api: ApiPromise, + blockNumber: number, + blocksToCheck = 5 +) { + let count = 0 return new Promise((resolve, reject) => { const unsubscribe = api.rpc.chain.subscribeNewHeads(async (header) => { - console.log(`Chain is at block: #${header.number}`); + console.log(`Chain is at block: #${header.number}`) if (header.number.toNumber() === blockNumber) { - (await unsubscribe)(); - resolve(); + ;(await unsubscribe)() + resolve() } if (++count === blocksToCheck) { - (await unsubscribe)(); - reject(new Error(`Timeout: Block #${blockNumber} not reached within ${blocksToCheck} blocks.`)); + ;(await unsubscribe)() + reject( + new Error( + `Timeout: Block #${blockNumber} not reached within ${blocksToCheck} blocks.` + ) + ) } - }); - }); + }) + }) } export async function setAliceAsAdmin(api: ApiPromise) { // Get keyring of Alice, who is also the sudo in dev chain spec - const keyring = new Keyring({ type: 'sr25519' }); - const alice = keyring.addFromUri('//Alice'); - - const tx = await sudoWrapperGC(api, api.tx.teebag.setAdmin('esqZdrqhgH8zy1wqYh1aLKoRyoRWLFbX9M62eKfaTAoK67pJ5')); - - console.log(`Setting Alice as Admin for Teebag`); - return signAndSend(tx, alice); + const keyring = new Keyring({ type: 'sr25519' }) + const alice = keyring.addFromUri('//Alice') + + const tx = await sudoWrapperGC( + api, + api.tx.teebag.setAdmin( + 'esqZdrqhgH8zy1wqYh1aLKoRyoRWLFbX9M62eKfaTAoK67pJ5' + ) + ) + + console.log(`Setting Alice as Admin for Teebag`) + return signAndSend(tx, alice) } -export function signAndSend(tx: SubmittableExtrinsic, account: AddressOrPair) { +export function signAndSend( + tx: SubmittableExtrinsic, + account: AddressOrPair +) { return new Promise<{ block: string }>(async (resolve, reject) => { await tx.signAndSend(account, (result) => { - console.log(`Current status is ${result.status}`); + console.log(`Current status is ${result.status}`) if (result.status.isInBlock) { - console.log(`Transaction included at blockHash ${result.status.asInBlock}`); + console.log( + `Transaction included at blockHash ${result.status.asInBlock}` + ) } else if (result.status.isFinalized) { - console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); + console.log( + `Transaction finalized at blockHash ${result.status.asFinalized}` + ) resolve({ block: result.status.asFinalized.toString(), - }); + }) } else if (result.status.isInvalid) { - reject(`Transaction is ${result.status}`); + reject(`Transaction is ${result.status}`) } - }); - }); + }) + }) } // After removing the sudo module, we use `EnsureRootOrHalfCouncil` instead of `Sudo`, @@ -142,23 +184,38 @@ export function signAndSend(tx: SubmittableExtrinsic, account: Address // So only `propose` is required, no vote. // // TODO: support to send the `vote extrinsic`, if the number of council members is greater than 2. -export async function sudoWrapperGC(api: ApiPromise, tx: SubmittableExtrinsic) { - const chain = (await api.rpc.system.chain()).toString().toLowerCase(); +export async function sudoWrapperGC( + api: ApiPromise, + tx: SubmittableExtrinsic +) { + const chain = (await api.rpc.system.chain()).toString().toLowerCase() if (chain != 'rococo-dev') { - const threshold = api.createType('Compact', 1); - const call = api.createType('Call', tx); - return api.tx.council.propose(threshold, call, api.createType('Compact', tx.length)); + const threshold = api.createType('Compact', 1) + const call = api.createType('Call', tx) + return api.tx.council.propose( + threshold, + call, + api.createType('Compact', tx.length) + ) } else { - return api.tx.sudo.sudo(tx); + return api.tx.sudo.sudo(tx) } } -export async function setScheduledEnclave(api: ApiPromise, block: number, mrenclave: string) { - const keyring = new Keyring({ type: 'sr25519' }); - const alice = keyring.addFromUri('//Alice'); - - const tx = api.tx.teebag.setScheduledEnclave('Identity', block, hexToU8a(`0x${mrenclave}`)); - - console.log('Schedule Enclave Extrinsic sent'); - return signAndSend(tx, alice); +export async function setScheduledEnclave( + api: ApiPromise, + block: number, + mrenclave: string +) { + const keyring = new Keyring({ type: 'sr25519' }) + const alice = keyring.addFromUri('//Alice') + + const tx = api.tx.teebag.setScheduledEnclave( + 'Identity', + block, + hexToU8a(`0x${mrenclave}`) + ) + + console.log('Schedule Enclave Extrinsic sent') + return signAndSend(tx, alice) } diff --git a/integration-tests/common/utils/assertion.ts b/integration-tests/common/utils/assertion.ts index fd2bf0a..5e2e684 100644 --- a/integration-tests/common/utils/assertion.ts +++ b/integration-tests/common/utils/assertion.ts @@ -1,53 +1,66 @@ -import { hexToU8a, u8aToHex } from '@polkadot/util'; -import { assert } from 'chai'; -import * as ed from '@noble/ed25519'; -import { parseIdGraph } from './identity-helper'; -import { CorePrimitivesIdentity } from '@litentry/parachain-api'; -import type { IntegrationTestContext } from '../common-types'; -import { getIdGraphHash } from '../di-utils'; -import type { HexString } from '@polkadot/util/types'; -import { aesKey } from '../call'; -import colors from 'colors'; -import { WorkerRpcReturnValue, StfError } from '@litentry/parachain-api'; -import { Bytes } from '@polkadot/types-codec'; -import { decryptWithAes } from './crypto'; -import { blake2AsHex } from '@polkadot/util-crypto'; -import { validateVcSchema } from '@litentry/vc-schema-validator'; -import { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; -import { KeyObject } from 'crypto'; -import * as base58 from 'micro-base58'; -import { fail } from 'assert'; +import { hexToU8a, u8aToHex } from '@polkadot/util' +import { assert } from 'chai' +import * as ed from '@noble/ed25519' +import { parseIdGraph } from './identity-helper' +import { CorePrimitivesIdentity } from '@litentry/parachain-api' +import type { IntegrationTestContext } from '../common-types' +import { getIdGraphHash } from '../di-utils' +import type { HexString } from '@polkadot/util/types' +import { aesKey } from '../call' +import colors from 'colors' +import { WorkerRpcReturnValue, StfError } from '@litentry/parachain-api' +import { Bytes } from '@polkadot/types-codec' +import { decryptWithAes } from './crypto' +import { blake2AsHex } from '@polkadot/util-crypto' +import { validateVcSchema } from '@litentry/vc-schema-validator' +import { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api' +import { KeyObject } from 'crypto' +import * as base58 from 'micro-base58' +import { fail } from 'assert' export function assertIdGraph( - actual: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][], + actual: [ + CorePrimitivesIdentity, + PalletIdentityManagementTeeIdentityContext, + ][], expected: [CorePrimitivesIdentity, boolean][] ) { - assert.equal(actual.length, expected.length); + assert.equal(actual.length, expected.length) expected.forEach((expected, i) => { assert.deepEqual( actual[i][0].toJSON(), expected[0].toJSON(), 'event idGraph identity should be equal expectedIdentity' - ); - - const idGraphContext = actual[0][1]; - assert.isTrue(idGraphContext.linkBlock.toNumber() > 0, 'link_block should be greater than 0'); - assert.equal(idGraphContext.status.isActive, expected[1], 'isActive should be ' + expected[1]); - }); + ) + + const idGraphContext = actual[0][1] + assert.isTrue( + idGraphContext.linkBlock.toNumber() > 0, + 'link_block should be greater than 0' + ) + assert.equal( + idGraphContext.status.isActive, + expected[1], + 'isActive should be ' + expected[1] + ) + }) } -export async function assertIsInSidechainBlock(callType: string, res: WorkerRpcReturnValue) { +export async function assertIsInSidechainBlock( + callType: string, + res: WorkerRpcReturnValue +) { assert.isTrue( res.status.isTrustedOperationStatus, `${callType} should be trusted operation status, but is ${res.status.type}` - ); - const status = res.status.asTrustedOperationStatus; - console.log(res.toHuman()); + ) + const status = res.status.asTrustedOperationStatus + console.log(res.toHuman()) assert.isTrue( status[0].isSubmitted || status[0].isInSidechainBlock, `${callType} should be submitted or in sidechain block, but is ${status[0].type}` - ); + ) } export function assertWorkerError( @@ -55,8 +68,11 @@ export function assertWorkerError( check: (returnValue: StfError) => void, returnValue: WorkerRpcReturnValue ) { - const errValueDecoded = context.api.createType('StfError', returnValue.value); - check(errValueDecoded); + const errValueDecoded = context.api.createType( + 'StfError', + returnValue.value + ) + check(errValueDecoded) } // a common assertion for all DI requests that might mutate the IdGraph @@ -73,23 +89,36 @@ export async function assertIdGraphMutationResult( | 'SetIdentityNetworksResult', expectedIdGraph: [CorePrimitivesIdentity, boolean][] ): Promise { - const decodedResult = context.api.createType(resultType, returnValue.value); - assert.isNotNull(decodedResult.mutated_id_graph); - const idGraph = parseIdGraph(context.sidechainRegistry, decodedResult.mutated_id_graph, aesKey); - assertIdGraph(idGraph, expectedIdGraph); - const queriedIdGraphHash = (await getIdGraphHash(context, teeShieldingKey, identity)).toHex(); - assert.equal(u8aToHex(decodedResult.id_graph_hash), queriedIdGraphHash); - - console.log(colors.green('assertIdGraphMutationResult passed')); - return u8aToHex(decodedResult.id_graph_hash); + const decodedResult = context.api.createType(resultType, returnValue.value) + assert.isNotNull(decodedResult.mutated_id_graph) + const idGraph = parseIdGraph( + context.sidechainRegistry, + decodedResult.mutated_id_graph, + aesKey + ) + assertIdGraph(idGraph, expectedIdGraph) + const queriedIdGraphHash = ( + await getIdGraphHash(context, teeShieldingKey, identity) + ).toHex() + assert.equal(u8aToHex(decodedResult.id_graph_hash), queriedIdGraphHash) + + console.log(colors.green('assertIdGraphMutationResult passed')) + return u8aToHex(decodedResult.id_graph_hash) } -export async function assertVc(context: IntegrationTestContext, subject: CorePrimitivesIdentity, data: Bytes) { - const results = context.api.createType('RequestVCResult', data); +export async function assertVc( + context: IntegrationTestContext, + subject: CorePrimitivesIdentity, + data: Bytes +) { + const results = context.api.createType('RequestVCResult', data) // step 1 // decryptWithAes function added 0x prefix - const vcPayload = results.vc_payload; - const decryptVcPayload = decryptWithAes(aesKey, vcPayload, 'utf-8').replace('0x', ''); + const vcPayload = results.vc_payload + const decryptVcPayload = decryptWithAes(aesKey, vcPayload, 'utf-8').replace( + '0x', + '' + ) /* DID format did:litentry:substrate:0x12345... @@ -99,50 +128,62 @@ export async function assertVc(context: IntegrationTestContext, subject: CorePri // step 2 // check credential subject's DID - const credentialSubjectId = JSON.parse(decryptVcPayload).credentialSubject.id; - const expectSubject = Object.entries(JSON.parse(subject.toString())); + const credentialSubjectId = + JSON.parse(decryptVcPayload).credentialSubject.id + const expectSubject = Object.entries(JSON.parse(subject.toString())) // step 3 // convert to DID format - const expectDid = 'did:litentry:' + expectSubject[0][0] + ':' + expectSubject[0][1]; + const expectDid = + 'did:litentry:' + expectSubject[0][0] + ':' + expectSubject[0][1] assert.equal( expectDid, credentialSubjectId, 'Check credentialSubject error: expectDid should be equal to credentialSubject id' - ); + ) // step 4 // extrac proof and vc without proof json - const vcPayloadJson = JSON.parse(decryptVcPayload); - console.log('credential: ', JSON.stringify(vcPayloadJson, null, 2)); - const { proof, ...vcWithoutProof } = vcPayloadJson; + const vcPayloadJson = JSON.parse(decryptVcPayload) + console.log('credential: ', JSON.stringify(vcPayloadJson, null, 2)) + const { proof, ...vcWithoutProof } = vcPayloadJson // step 5 // check vc signature - const signature = Buffer.from(hexToU8a(`0x${proof.proofValue}`)); - const message = Buffer.from(JSON.stringify(vcWithoutProof)); - const vcPubkey = Buffer.from(hexToU8a(proof.verificationMethod)); - const signatureStatus = await ed.verify(signature, message, vcPubkey); - assert.isTrue(signatureStatus, 'Check Vc signature error: signature should be valid'); + const signature = Buffer.from(hexToU8a(`0x${proof.proofValue}`)) + const message = Buffer.from(JSON.stringify(vcWithoutProof)) + const vcPubkey = Buffer.from(hexToU8a(proof.verificationMethod)) + const signatureStatus = await ed.verify(signature, message, vcPubkey) + assert.isTrue( + signatureStatus, + 'Check Vc signature error: signature should be valid' + ) // step 6 // lookup the teebag enclave regsitry to check mrenclave and vcPubkey - const parachainBlockHash = await context.api.query.system.blockHash(vcPayloadJson.parachainBlockNumber); - const apiAtVcIssuedBlock = await context.api.at(parachainBlockHash); - const enclaveAccount = trimPrefix(vcPayloadJson.issuer.id, 'did:litentry:substrate:'); - const registeredEnclave = (await apiAtVcIssuedBlock.query.teebag.enclaveRegistry(enclaveAccount)).unwrap(); + const parachainBlockHash = await context.api.query.system.blockHash( + vcPayloadJson.parachainBlockNumber + ) + const apiAtVcIssuedBlock = await context.api.at(parachainBlockHash) + const enclaveAccount = trimPrefix( + vcPayloadJson.issuer.id, + 'did:litentry:substrate:' + ) + const registeredEnclave = ( + await apiAtVcIssuedBlock.query.teebag.enclaveRegistry(enclaveAccount) + ).unwrap() assert.equal( vcPayloadJson.issuer.mrenclave, base58.encode(registeredEnclave.mrenclave), "Check VC mrenclave: it should equal enclave's mrenclave from parachains enclave registry" - ); + ) assert.equal( proof.verificationMethod, registeredEnclave.vcPubkey, "Check VC pubkey: it should equal enclave's vcPubkey from parachains enclave registry" - ); + ) // step 7 // check runtime version is present @@ -150,49 +191,58 @@ export async function assertVc(context: IntegrationTestContext, subject: CorePri vcPayloadJson.issuer.runtimeVersion, { parachain: 9191, sidechain: 109 }, 'Check VC runtime version: it should equal the current defined versions' - ); + ) // step 8 // validate VC against schema - const schemaResult = await validateVcSchema(vcPayloadJson); + const schemaResult = await validateVcSchema(vcPayloadJson) - if (schemaResult.errors) console.log('Schema Validation errors: ', schemaResult.errors); + if (schemaResult.errors) + console.log('Schema Validation errors: ', schemaResult.errors) - assert.isTrue(schemaResult.isValid, 'Check Vc payload error: vcPayload should be valid'); + assert.isTrue( + schemaResult.isValid, + 'Check Vc payload error: vcPayload should be valid' + ) assert.equal( vcWithoutProof.type[0], 'VerifiableCredential', 'Check Vc payload type error: vcPayload type should be VerifiableCredential' - ); + ) assert.equal( proof.type, 'Ed25519Signature2020', 'Check Vc proof type error: proof type should be Ed25519Signature2020' - ); + ) } export async function assertIdGraphHash( context: IntegrationTestContext, teeShieldingKey: KeyObject, identity: CorePrimitivesIdentity, - idGraph: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] + idGraph: [ + CorePrimitivesIdentity, + PalletIdentityManagementTeeIdentityContext, + ][] ) { const idGraphType = context.sidechainRegistry.createType( 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', idGraph - ); - const computedIdGraphHash = blake2AsHex(idGraphType.toU8a()); - console.log('computed id graph hash: ', computedIdGraphHash); - - const queriedIdGraphHash = (await getIdGraphHash(context, teeShieldingKey, identity)).toHex(); - console.log('queried id graph hash: ', queriedIdGraphHash); - assert.equal(computedIdGraphHash, queriedIdGraphHash); + ) + const computedIdGraphHash = blake2AsHex(idGraphType.toU8a()) + console.log('computed id graph hash: ', computedIdGraphHash) + + const queriedIdGraphHash = ( + await getIdGraphHash(context, teeShieldingKey, identity) + ).toHex() + console.log('queried id graph hash: ', queriedIdGraphHash) + assert.equal(computedIdGraphHash, queriedIdGraphHash) } function trimPrefix(str: string, prefix: string): string { if (str.startsWith(prefix)) { - return str.substring(prefix.length); + return str.substring(prefix.length) } - return str; + return str } diff --git a/integration-tests/common/utils/common.ts b/integration-tests/common/utils/common.ts index a528596..d362bc4 100644 --- a/integration-tests/common/utils/common.ts +++ b/integration-tests/common/utils/common.ts @@ -1,5 +1,5 @@ export function sleep(secs: number) { return new Promise((resolve) => { - setTimeout(resolve, secs * 1000); - }); + setTimeout(resolve, secs * 1000) + }) } diff --git a/integration-tests/common/utils/context.ts b/integration-tests/common/utils/context.ts index cff8e1c..376d357 100644 --- a/integration-tests/common/utils/context.ts +++ b/integration-tests/common/utils/context.ts @@ -1,55 +1,73 @@ -import { WsProvider, ApiPromise } from '@litentry/parachain-api'; -import { cryptoWaitReady } from '@polkadot/util-crypto'; -import { hexToString } from '@polkadot/util'; -import WebSocketAsPromised from 'websocket-as-promised'; -import WebSocket from 'ws'; -import Options from 'websocket-as-promised/types/options'; -import { KeyObject } from 'crypto'; -import { getSidechainMetadata } from '../call'; -import { createWeb3Wallets } from '../helpers'; -import type { IntegrationTestContext } from '../common-types'; -import { identity, vc, trusted_operations, sidechain } from '@litentry/parachain-api'; -import crypto from 'crypto'; -import type { HexString } from '@polkadot/util/types'; +import { WsProvider, ApiPromise } from '@litentry/parachain-api' +import { cryptoWaitReady } from '@polkadot/util-crypto' +import { hexToString } from '@polkadot/util' +import WebSocketAsPromised from 'websocket-as-promised' +import WebSocket from 'ws' +import Options from 'websocket-as-promised/types/options' +import { KeyObject } from 'crypto' +import { getSidechainMetadata } from '../call' +import { createWeb3Wallets } from '../helpers' +import type { IntegrationTestContext } from '../common-types' +import { + identity, + vc, + trusted_operations, + sidechain, +} from '@litentry/parachain-api' +import crypto from 'crypto' +import type { HexString } from '@polkadot/util/types' // maximum block number that we wait in listening events before we timeout -export const defaultListenTimeoutInBlockNumber = 15; +export const defaultListenTimeoutInBlockNumber = 15 -export async function initWorkerConnection(endpoint: string): Promise { +export async function initWorkerConnection( + endpoint: string +): Promise { const wsp = new WebSocketAsPromised(endpoint, ({ createWebSocket: (url: any) => new WebSocket(url), extractMessageData: (event: any) => event, packMessage: (data: any) => JSON.stringify(data), - unpackMessage: (data: string | ArrayBuffer | Blob) => JSON.parse(data.toString()), - attachRequestId: (data: any, requestId: string | number) => Object.assign({ id: requestId }, data), + unpackMessage: (data: string | ArrayBuffer | Blob) => + JSON.parse(data.toString()), + attachRequestId: (data: any, requestId: string | number) => + Object.assign({ id: requestId }, data), extractRequestId: (data: any) => data && data.id, // read requestId from message `id` field - })); - await wsp.open(); - return wsp; + })) + await wsp.open() + return wsp } export async function initIntegrationTestContext( workerEndpoint: string, substrateEndpoint: string ): Promise { - const provider = new WsProvider(substrateEndpoint); - await cryptoWaitReady(); + const provider = new WsProvider(substrateEndpoint) + await cryptoWaitReady() - const web3Wallets = createWeb3Wallets(); + const web3Wallets = createWeb3Wallets() - const types = { ...identity.types, ...vc.types, ...trusted_operations.types, ...sidechain.types }; + const types = { + ...identity.types, + ...vc.types, + ...trusted_operations.types, + ...sidechain.types, + } const api = await ApiPromise.create({ provider, types, - }); + }) - const chainIdentifier = api.registry.chainSS58 as number; + const chainIdentifier = api.registry.chainSS58 as number - const wsp = await initWorkerConnection(workerEndpoint); - const requestId = 1; + const wsp = await initWorkerConnection(workerEndpoint) + const requestId = 1 - const { sidechainMetaData, sidechainRegistry } = await getSidechainMetadata(wsp, api, requestId); - const { mrEnclave, teeShieldingKey } = await getEnclave(api); + const { sidechainMetaData, sidechainRegistry } = await getSidechainMetadata( + wsp, + api, + requestId + ) + const { mrEnclave, teeShieldingKey } = await getEnclave(api) return { tee: wsp, api, @@ -60,33 +78,44 @@ export async function initIntegrationTestContext( sidechainRegistry, chainIdentifier, requestId, - }; + } } export async function getEnclave(api: ApiPromise): Promise<{ - mrEnclave: HexString; - teeShieldingKey: KeyObject; + mrEnclave: HexString + teeShieldingKey: KeyObject }> { - const enclaveIdentifier = api.createType('Vec', await api.query.teebag.enclaveIdentifier('Identity')); - const primaryEnclave = (await api.query.teebag.enclaveRegistry(enclaveIdentifier[0])).unwrap(); + const enclaveIdentifier = api.createType( + 'Vec', + await api.query.teebag.enclaveIdentifier('Identity') + ) + const primaryEnclave = ( + await api.query.teebag.enclaveRegistry(enclaveIdentifier[0]) + ).unwrap() - const shieldingPubkeyBytes = api.createType('Option', primaryEnclave.shieldingPubkey).unwrap(); - const shieldingPubkey = hexToString(shieldingPubkeyBytes.toHex()); + const shieldingPubkeyBytes = api + .createType('Option', primaryEnclave.shieldingPubkey) + .unwrap() + const shieldingPubkey = hexToString(shieldingPubkeyBytes.toHex()) const teeShieldingKey = crypto.createPublicKey({ key: { alg: 'RSA-OAEP-256', kty: 'RSA', use: 'enc', - n: Buffer.from(JSON.parse(shieldingPubkey).n.reverse()).toString('base64url'), - e: Buffer.from(JSON.parse(shieldingPubkey).e.reverse()).toString('base64url'), + n: Buffer.from(JSON.parse(shieldingPubkey).n.reverse()).toString( + 'base64url' + ), + e: Buffer.from(JSON.parse(shieldingPubkey).e.reverse()).toString( + 'base64url' + ), }, format: 'jwk', - }); + }) //@TODO mrEnclave should verify from storage - const mrEnclave = primaryEnclave.mrenclave.toHex(); + const mrEnclave = primaryEnclave.mrenclave.toHex() return { mrEnclave, teeShieldingKey, - }; + } } diff --git a/integration-tests/common/utils/crypto.ts b/integration-tests/common/utils/crypto.ts index f24f8e8..dde9d8f 100644 --- a/integration-tests/common/utils/crypto.ts +++ b/integration-tests/common/utils/crypto.ts @@ -1,21 +1,35 @@ -import type { HexString } from '@polkadot/util/types'; -import { bufferToU8a, hexToU8a, isString, stringToU8a, u8aToHex } from '@polkadot/util'; -import { KeyObject } from 'crypto'; -import { AesOutput, CorePrimitivesIdentity } from '@litentry/parachain-api'; -import crypto from 'crypto'; -import { KeyringPair } from '@polkadot/keyring/types'; -import { ethers } from 'ethers'; -import { blake2AsU8a } from '@polkadot/util-crypto'; -import { Keypair } from '@solana/web3.js'; -import nacl from 'tweetnacl'; -import { IntegrationTestContext } from './../common-types'; -import { buildIdentityHelper } from './identity-helper'; -import { ECPairInterface } from 'ecpair'; -import * as bitcoinMessage from 'bitcoinjs-message'; -import { isHexString } from 'ethers/lib/utils'; -export type KeypairType = 'ed25519' | 'sr25519' | 'ecdsa' | 'ethereum' | 'bitcoin'; - -export function encryptWithTeeShieldingKey(teeShieldingKey: KeyObject, plaintext: Uint8Array): Buffer { +import type { HexString } from '@polkadot/util/types' +import { + bufferToU8a, + hexToU8a, + isString, + stringToU8a, + u8aToHex, +} from '@polkadot/util' +import { KeyObject } from 'crypto' +import { AesOutput, CorePrimitivesIdentity } from '@litentry/parachain-api' +import crypto from 'crypto' +import { KeyringPair } from '@polkadot/keyring/types' +import { ethers } from 'ethers' +import { blake2AsU8a } from '@polkadot/util-crypto' +import { Keypair } from '@solana/web3.js' +import nacl from 'tweetnacl' +import { IntegrationTestContext } from './../common-types' +import { buildIdentityHelper } from './identity-helper' +import { ECPairInterface } from 'ecpair' +import * as bitcoinMessage from 'bitcoinjs-message' +import { isHexString } from 'ethers/lib/utils' +export type KeypairType = + | 'ed25519' + | 'sr25519' + | 'ecdsa' + | 'ethereum' + | 'bitcoin' + +export function encryptWithTeeShieldingKey( + teeShieldingKey: KeyObject, + plaintext: Uint8Array +): Buffer { return crypto.publicEncrypt( { key: teeShieldingKey, @@ -23,161 +37,197 @@ export function encryptWithTeeShieldingKey(teeShieldingKey: KeyObject, plaintext oaepHash: 'sha256', }, plaintext - ); + ) } // A lazy version without aad. Append the tag to be consistent with rust implementation -export function encryptWithAes(key: HexString, nonce: Uint8Array, cleartext: Buffer): HexString { - const secretKey = crypto.createSecretKey(hexToU8a(key)); +export function encryptWithAes( + key: HexString, + nonce: Uint8Array, + cleartext: Buffer +): HexString { + const secretKey = crypto.createSecretKey(hexToU8a(key)) const cipher = crypto.createCipheriv('aes-256-gcm', secretKey, nonce, { authTagLength: 16, - }); - let encrypted = cipher.update(cleartext.toString('hex'), 'hex', 'hex'); - encrypted += cipher.final('hex'); - encrypted += cipher.getAuthTag().toString('hex'); - return `0x${encrypted}`; + }) + let encrypted = cipher.update(cleartext.toString('hex'), 'hex', 'hex') + encrypted += cipher.final('hex') + encrypted += cipher.getAuthTag().toString('hex') + return `0x${encrypted}` } -export function decryptWithAes(key: HexString, aesOutput: AesOutput, type: 'hex' | 'utf-8'): HexString { - const secretKey = crypto.createSecretKey(hexToU8a(key)); - const tagSize = 16; - const ciphertext = aesOutput.ciphertext ? aesOutput.ciphertext : hexToU8a('0x'); +export function decryptWithAes( + key: HexString, + aesOutput: AesOutput, + type: 'hex' | 'utf-8' +): HexString { + const secretKey = crypto.createSecretKey(hexToU8a(key)) + const tagSize = 16 + const ciphertext = aesOutput.ciphertext + ? aesOutput.ciphertext + : hexToU8a('0x') - const nonce = aesOutput.nonce ? aesOutput.nonce : hexToU8a('0x'); - const aad = aesOutput.aad ? aesOutput.aad : hexToU8a('0x'); + const nonce = aesOutput.nonce ? aesOutput.nonce : hexToU8a('0x') + const aad = aesOutput.aad ? aesOutput.aad : hexToU8a('0x') // notice!!! extract author_tag from ciphertext // maybe this code only works with rust aes encryption - const authorTag = ciphertext.subarray(ciphertext.length - tagSize); + const authorTag = ciphertext.subarray(ciphertext.length - tagSize) const decipher = crypto.createDecipheriv('aes-256-gcm', secretKey, nonce, { authTagLength: tagSize, - }); - decipher.setAAD(aad); - decipher.setAuthTag(authorTag); - - const part1 = decipher.update(ciphertext.subarray(0, ciphertext.length - tagSize), undefined, type); - const part2 = decipher.final(type); - - return `0x${part1 + part2}`; + }) + decipher.setAAD(aad) + decipher.setAuthTag(authorTag) + + const part1 = decipher.update( + ciphertext.subarray(0, ciphertext.length - tagSize), + undefined, + type + ) + const part2 = decipher.final(type) + + return `0x${part1 + part2}` } export interface Signer { - getAddressRaw(): Uint8Array; - sign(message: HexString | string | Uint8Array): Promise; - type(): KeypairType; - getAddressInSubstrateFormat(): Uint8Array; - getIdentity(api: IntegrationTestContext): Promise; + getAddressRaw(): Uint8Array + sign(message: HexString | string | Uint8Array): Promise + type(): KeypairType + getAddressInSubstrateFormat(): Uint8Array + getIdentity(api: IntegrationTestContext): Promise } export class PolkadotSigner implements Signer { - keypair: KeyringPair; + keypair: KeyringPair constructor(keypair: KeyringPair) { - this.keypair = keypair; + this.keypair = keypair } getAddressRaw(): Uint8Array { - return this.keypair.addressRaw; + return this.keypair.addressRaw } sign(message: HexString | string | Uint8Array): Promise { - return new Promise((resolve) => resolve(this.keypair.sign(message))); + return new Promise((resolve) => resolve(this.keypair.sign(message))) } type(): KeypairType { - return this.keypair.type; + return this.keypair.type } getAddressInSubstrateFormat(): Uint8Array { - return this.getAddressRaw(); + return this.getAddressRaw() } - getIdentity(context: IntegrationTestContext): Promise { - return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Substrate', context); + getIdentity( + context: IntegrationTestContext + ): Promise { + return buildIdentityHelper( + u8aToHex(this.getAddressRaw()), + 'Substrate', + context + ) } } export class EthersSigner implements Signer { - wallet: ethers.Wallet; + wallet: ethers.Wallet constructor(wallet: ethers.Wallet) { - this.wallet = wallet; + this.wallet = wallet } getAddressRaw(): Uint8Array { - return hexToU8a(this.wallet.address); + return hexToU8a(this.wallet.address) } sign(message: HexString | string | Uint8Array): Promise { return this.wallet.signMessage(message).then((sig) => { - return hexToU8a(sig); - }); + return hexToU8a(sig) + }) } type(): KeypairType { - return 'ethereum'; + return 'ethereum' } getAddressInSubstrateFormat(): Uint8Array { - const prefix = stringToU8a('evm:'); - const address = this.getAddressRaw(); - const merged = new Uint8Array(prefix.length + address.length); - merged.set(prefix); - merged.set(address, 4); - return blake2AsU8a(merged, 256); + const prefix = stringToU8a('evm:') + const address = this.getAddressRaw() + const merged = new Uint8Array(prefix.length + address.length) + merged.set(prefix) + merged.set(address, 4) + return blake2AsU8a(merged, 256) } - getIdentity(context: IntegrationTestContext): Promise { - return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Evm', context); + getIdentity( + context: IntegrationTestContext + ): Promise { + return buildIdentityHelper( + u8aToHex(this.getAddressRaw()), + 'Evm', + context + ) } } export class BitcoinSigner implements Signer { - keypair: ECPairInterface; + keypair: ECPairInterface constructor(keypair: ECPairInterface) { - this.keypair = keypair; + this.keypair = keypair } getAddressRaw(): Uint8Array { - return bufferToU8a(this.keypair.publicKey); + return bufferToU8a(this.keypair.publicKey) } sign(message: HexString | string | Uint8Array): Promise { return new Promise((resolve, reject) => { if (isString(message)) { // produce deterministic signatures - const sig = bitcoinMessage.sign(message, this.keypair.privateKey!, this.keypair.compressed); - resolve(sig); + const sig = bitcoinMessage.sign( + message, + this.keypair.privateKey!, + this.keypair.compressed + ) + resolve(sig) } else { - reject('wrong message type'); + reject('wrong message type') } - }); + }) } type(): KeypairType { - return 'bitcoin'; + return 'bitcoin' } getAddressInSubstrateFormat(): Uint8Array { - return blake2AsU8a(this.getAddressRaw(), 256); + return blake2AsU8a(this.getAddressRaw(), 256) } - getIdentity(context: IntegrationTestContext): Promise { - return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Bitcoin', context); + getIdentity( + context: IntegrationTestContext + ): Promise { + return buildIdentityHelper( + u8aToHex(this.getAddressRaw()), + 'Bitcoin', + context + ) } } export class SolanaSigner implements Signer { - keypair: Keypair; + keypair: Keypair constructor(keypair: Keypair) { - this.keypair = keypair; + this.keypair = keypair } getAddressRaw(): Uint8Array { - return this.keypair.publicKey.toBytes(); + return this.keypair.publicKey.toBytes() } sign(message: HexString | string | Uint8Array): Promise { @@ -187,23 +237,29 @@ export class SolanaSigner implements Signer { isHexString(message) ? hexToU8a(message as HexString) : isString(message) - ? stringToU8a(message) - : message, + ? stringToU8a(message) + : message, this.keypair.secretKey ) ) - ); + ) } type(): KeypairType { - return 'ed25519'; + return 'ed25519' } getAddressInSubstrateFormat(): Uint8Array { - return this.getAddressRaw(); + return this.getAddressRaw() } - getIdentity(context: IntegrationTestContext): Promise { - return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Solana', context); + getIdentity( + context: IntegrationTestContext + ): Promise { + return buildIdentityHelper( + u8aToHex(this.getAddressRaw()), + 'Solana', + context + ) } } diff --git a/integration-tests/common/utils/identity-helper.ts b/integration-tests/common/utils/identity-helper.ts index bad7d3c..47f5051 100644 --- a/integration-tests/common/utils/identity-helper.ts +++ b/integration-tests/common/utils/identity-helper.ts @@ -1,13 +1,16 @@ -import { u8aToHex } from '@polkadot/util'; -import { blake2AsHex } from '@polkadot/util-crypto'; -import type { IntegrationTestContext } from '../common-types'; -import { AesOutput } from '@litentry/parachain-api'; -import { decryptWithAes, Signer } from './crypto'; -import { ethers } from 'ethers'; -import type { TypeRegistry } from '@polkadot/types'; -import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; -import type { LitentryValidationData, CorePrimitivesIdentity } from '@litentry/parachain-api'; -import type { HexString } from '@polkadot/util/types'; +import { u8aToHex } from '@polkadot/util' +import { blake2AsHex } from '@polkadot/util-crypto' +import type { IntegrationTestContext } from '../common-types' +import { AesOutput } from '@litentry/parachain-api' +import { decryptWithAes, Signer } from './crypto' +import { ethers } from 'ethers' +import type { TypeRegistry } from '@polkadot/types' +import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api' +import type { + LitentryValidationData, + CorePrimitivesIdentity, +} from '@litentry/parachain-api' +import type { HexString } from '@polkadot/util/types' // blake2_256( + + ) export function generateVerificationMessage( @@ -17,18 +20,29 @@ export function generateVerificationMessage( sidechainNonce: number, options?: { prettifiedMessage?: boolean } ): string { - const _options = { prettifiedMessage: false, ...options }; - const encodedIdentity = context.api.createType('CorePrimitivesIdentity', identity).toU8a(); - const encodedWho = context.api.createType('CorePrimitivesIdentity', signer).toU8a(); - const encodedSidechainNonce = context.api.createType('Index', sidechainNonce); - const msg = Buffer.concat([encodedSidechainNonce.toU8a(), encodedWho, encodedIdentity]); - const hash = blake2AsHex(msg, 256); + const _options = { prettifiedMessage: false, ...options } + const encodedIdentity = context.api + .createType('CorePrimitivesIdentity', identity) + .toU8a() + const encodedWho = context.api + .createType('CorePrimitivesIdentity', signer) + .toU8a() + const encodedSidechainNonce = context.api.createType( + 'Index', + sidechainNonce + ) + const msg = Buffer.concat([ + encodedSidechainNonce.toU8a(), + encodedWho, + encodedIdentity, + ]) + const hash = blake2AsHex(msg, 256) if (_options.prettifiedMessage) { - return `Token: ${hash}`; + return `Token: ${hash}` } - return hash; + return hash } export async function buildIdentityHelper( @@ -38,8 +52,8 @@ export async function buildIdentityHelper( ): Promise { const identity = { [type]: address, - }; - return context.api.createType('CorePrimitivesIdentity', identity); + } + return context.api.createType('CorePrimitivesIdentity', identity) } export function parseIdGraph( @@ -47,54 +61,63 @@ export function parseIdGraph( idGraphOutput: AesOutput, aesKey: HexString ): [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] { - const decryptedIdGraph = decryptWithAes(aesKey, idGraphOutput, 'hex'); - const idGraph: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] = - sidechainRegistry.createType( - 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', - decryptedIdGraph - ); - - return idGraph; + const decryptedIdGraph = decryptWithAes(aesKey, idGraphOutput, 'hex') + const idGraph: [ + CorePrimitivesIdentity, + PalletIdentityManagementTeeIdentityContext, + ][] = sidechainRegistry.createType( + 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', + decryptedIdGraph + ) + + return idGraph } type Web2ValidationConfig = | { - identityType: 'Discord'; - context: IntegrationTestContext; - signerIdentitity: CorePrimitivesIdentity; - linkIdentity: CorePrimitivesIdentity; - verificationType: 'PublicMessage' | 'OAuth2'; - validationNonce: number; + identityType: 'Discord' + context: IntegrationTestContext + signerIdentitity: CorePrimitivesIdentity + linkIdentity: CorePrimitivesIdentity + verificationType: 'PublicMessage' | 'OAuth2' + validationNonce: number } | { - identityType: 'Twitter'; - context: IntegrationTestContext; - signerIdentitity: CorePrimitivesIdentity; - linkIdentity: CorePrimitivesIdentity; - verificationType: 'PublicTweet'; - validationNonce: number; + identityType: 'Twitter' + context: IntegrationTestContext + signerIdentitity: CorePrimitivesIdentity + linkIdentity: CorePrimitivesIdentity + verificationType: 'PublicTweet' + validationNonce: number } | { - identityType: 'Twitter'; - context: IntegrationTestContext; - signerIdentitity: CorePrimitivesIdentity; - linkIdentity: CorePrimitivesIdentity; - verificationType: 'OAuth2'; - validationNonce: number; - oauthState: string; - }; - -export async function buildWeb2Validation(config: Web2ValidationConfig): Promise { - const { context, signerIdentitity, linkIdentity, validationNonce } = config; - const msg = generateVerificationMessage(context, signerIdentitity, linkIdentity, validationNonce); - console.log(`post verification msg to ${config.identityType}:`, msg); + identityType: 'Twitter' + context: IntegrationTestContext + signerIdentitity: CorePrimitivesIdentity + linkIdentity: CorePrimitivesIdentity + verificationType: 'OAuth2' + validationNonce: number + oauthState: string + } + +export async function buildWeb2Validation( + config: Web2ValidationConfig +): Promise { + const { context, signerIdentitity, linkIdentity, validationNonce } = config + const msg = generateVerificationMessage( + context, + signerIdentitity, + linkIdentity, + validationNonce + ) + console.log(`post verification msg to ${config.identityType}:`, msg) if (config.identityType === 'Discord') { const discordValidationData = { Web2Validation: { Discord: {}, }, - }; + } if (config.verificationType === 'PublicMessage') { discordValidationData.Web2Validation.Discord = { @@ -103,30 +126,33 @@ export async function buildWeb2Validation(config: Web2ValidationConfig): Promise message_id: `0x${Buffer.from('1', 'utf8').toString('hex')}`, guild_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, }, - }; + } } else { discordValidationData.Web2Validation.Discord = { OAuth2: { code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, }, - }; + } } - return context.api.createType('LitentryValidationData', discordValidationData); + return context.api.createType( + 'LitentryValidationData', + discordValidationData + ) } else { const twitterValidationData = { Web2Validation: { Twitter: {}, }, - }; + } if (config.verificationType === 'PublicTweet') { twitterValidationData.Web2Validation.Twitter = { PublicTweet: { tweet_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, }, - }; + } } else { twitterValidationData.Web2Validation.Twitter = { OAuth2: { @@ -134,10 +160,13 @@ export async function buildWeb2Validation(config: Web2ValidationConfig): Promise state: config.oauthState, redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, }, - }; + } } - return context.api.createType('LitentryValidationData', twitterValidationData); + return context.api.createType( + 'LitentryValidationData', + twitterValidationData + ) } } @@ -150,10 +179,15 @@ export async function buildValidations( signer?: Signer, options?: { prettifiedMessage?: boolean } ): Promise { - const _options = { prettifiedMessage: false, ...options }; - const validationNonce = startingSidechainNonce++; + const _options = { prettifiedMessage: false, ...options } + const validationNonce = startingSidechainNonce++ - const msg = generateVerificationMessage(context, signerIdentitity, linkIdentity, validationNonce); + const msg = generateVerificationMessage( + context, + signerIdentitity, + linkIdentity, + validationNonce + ) if (network === 'ethereum') { const evmValidationData = { Web3Validation: { @@ -164,14 +198,17 @@ export async function buildValidations( }, }, }, - }; - evmValidationData.Web3Validation.Evm.message = msg; - const msgHash = ethers.utils.arrayify(msg); - const evmSignature = u8aToHex(await signer!.sign(msgHash)); + } + evmValidationData.Web3Validation.Evm.message = msg + const msgHash = ethers.utils.arrayify(msg) + const evmSignature = u8aToHex(await signer!.sign(msgHash)) - evmValidationData!.Web3Validation.Evm.signature.Ethereum = evmSignature; + evmValidationData!.Web3Validation.Evm.signature.Ethereum = evmSignature - return context.api.createType('LitentryValidationData', evmValidationData); + return context.api.createType( + 'LitentryValidationData', + evmValidationData + ) } if (network === 'substrate') { @@ -184,13 +221,17 @@ export async function buildValidations( }, }, }, - }; - console.log('post verification msg to substrate: ', msg); - substrateValidationData.Web3Validation.Substrate.message = msg; - const substrateSignature = await signer!.sign(msg); - substrateValidationData!.Web3Validation.Substrate.signature.Sr25519 = u8aToHex(substrateSignature); + } + console.log('post verification msg to substrate: ', msg) + substrateValidationData.Web3Validation.Substrate.message = msg + const substrateSignature = await signer!.sign(msg) + substrateValidationData!.Web3Validation.Substrate.signature.Sr25519 = + u8aToHex(substrateSignature) - return context.api.createType('LitentryValidationData', substrateValidationData); + return context.api.createType( + 'LitentryValidationData', + substrateValidationData + ) } if (network === 'bitcoin') { @@ -203,13 +244,17 @@ export async function buildValidations( }, }, }, - }; - bitcoinValidationData.Web3Validation.Bitcoin.message = msg; + } + bitcoinValidationData.Web3Validation.Bitcoin.message = msg // we need to sign the hex string without `0x` prefix, the signature is base64-encoded string - const bitcoinSignature = await signer!.sign(msg.substring(2)); - bitcoinValidationData!.Web3Validation.Bitcoin.signature.Bitcoin = u8aToHex(bitcoinSignature); + const bitcoinSignature = await signer!.sign(msg.substring(2)) + bitcoinValidationData!.Web3Validation.Bitcoin.signature.Bitcoin = + u8aToHex(bitcoinSignature) - return context.api.createType('LitentryValidationData', bitcoinValidationData); + return context.api.createType( + 'LitentryValidationData', + bitcoinValidationData + ) } if (network === 'solana') { @@ -222,14 +267,18 @@ export async function buildValidations( }, }, }, - }; - console.log('post verification msg to solana: ', msg); - solanaValidationData.Web3Validation.Solana.message = msg; - const solanaSignature = await signer!.sign(msg); - solanaValidationData!.Web3Validation.Solana.signature.Ed25519 = u8aToHex(solanaSignature); + } + console.log('post verification msg to solana: ', msg) + solanaValidationData.Web3Validation.Solana.message = msg + const solanaSignature = await signer!.sign(msg) + solanaValidationData!.Web3Validation.Solana.signature.Ed25519 = + u8aToHex(solanaSignature) - return context.api.createType('LitentryValidationData', solanaValidationData); + return context.api.createType( + 'LitentryValidationData', + solanaValidationData + ) } - throw new Error(`[buildValidation]: Unsupported network ${network}.`); + throw new Error(`[buildValidation]: Unsupported network ${network}.`) } diff --git a/integration-tests/common/utils/index.ts b/integration-tests/common/utils/index.ts index 77d2344..a33983d 100644 --- a/integration-tests/common/utils/index.ts +++ b/integration-tests/common/utils/index.ts @@ -1,15 +1,15 @@ -import '../config'; +import '../config' // in order to handle self-signed certificates we need to turn off the validation // TODO add self signed certificate ?? -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; +process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' -export * from './assertion'; -export * from './common'; -export * from './context'; -export * from './crypto'; -export * from './identity-helper'; -export * from './integration-setup'; -export * from './storage'; -export * from './vc-helper'; -export * from './type-creators'; +export * from './assertion' +export * from './common' +export * from './context' +export * from './crypto' +export * from './identity-helper' +export * from './integration-setup' +export * from './storage' +export * from './vc-helper' +export * from './type-creators' diff --git a/integration-tests/common/utils/integration-setup.ts b/integration-tests/common/utils/integration-setup.ts index d398fff..7fc2c9f 100644 --- a/integration-tests/common/utils/integration-setup.ts +++ b/integration-tests/common/utils/integration-setup.ts @@ -1,15 +1,18 @@ -import { ApiPromise } from '@litentry/parachain-api'; -import { KeyObject } from 'crypto'; -import WebSocketAsPromised from 'websocket-as-promised'; -import type { IntegrationTestContext } from '../common-types'; -import type { Metadata, TypeRegistry } from '@polkadot/types'; -import type { HexString } from '@polkadot/util/types'; -import { initIntegrationTestContext } from './context'; +import { ApiPromise } from '@litentry/parachain-api' +import { KeyObject } from 'crypto' +import WebSocketAsPromised from 'websocket-as-promised' +import type { IntegrationTestContext } from '../common-types' +import type { Metadata, TypeRegistry } from '@polkadot/types' +import type { HexString } from '@polkadot/util/types' +import { initIntegrationTestContext } from './context' -export function describeLitentry(title: string, cb: (context: IntegrationTestContext) => void) { +export function describeLitentry( + title: string, + cb: (context: IntegrationTestContext) => void +) { describe(title, function () { // Set timeout to 6000 seconds - this.timeout(6000000); + this.timeout(6000000) const context: IntegrationTestContext = { mrEnclave: '0x11' as HexString, @@ -22,24 +25,27 @@ export function describeLitentry(title: string, cb: (context: IntegrationTestCon // default LitentryRococo chainIdentifier: 42, requestId: 0, - }; + } before('Starting Litentry(parachain&tee)', async function () { //env url - const tmp = await initIntegrationTestContext(process.env.WORKER_ENDPOINT!, process.env.NODE_ENDPOINT!); - context.mrEnclave = tmp.mrEnclave; - context.api = tmp.api; - context.tee = tmp.tee; - context.teeShieldingKey = tmp.teeShieldingKey; - context.web3Wallets = tmp.web3Wallets; - context.sidechainMetaData = tmp.sidechainMetaData; - context.sidechainRegistry = tmp.sidechainRegistry; - context.chainIdentifier = tmp.chainIdentifier; - }); + const tmp = await initIntegrationTestContext( + process.env.WORKER_ENDPOINT!, + process.env.NODE_ENDPOINT! + ) + context.mrEnclave = tmp.mrEnclave + context.api = tmp.api + context.tee = tmp.tee + context.teeShieldingKey = tmp.teeShieldingKey + context.web3Wallets = tmp.web3Wallets + context.sidechainMetaData = tmp.sidechainMetaData + context.sidechainRegistry = tmp.sidechainRegistry + context.chainIdentifier = tmp.chainIdentifier + }) - after(() => Promise.resolve()); + after(() => Promise.resolve()) - cb(context); - }); + cb(context) + }) } diff --git a/integration-tests/common/utils/storage.ts b/integration-tests/common/utils/storage.ts index 3720341..58fa864 100644 --- a/integration-tests/common/utils/storage.ts +++ b/integration-tests/common/utils/storage.ts @@ -1,32 +1,46 @@ -import { u8aToHex, u8aConcat } from '@polkadot/util'; -import { xxhashAsU8a } from '@polkadot/util-crypto'; -import { StorageEntryMetadataV14, SiLookupTypeId, StorageHasherV14 } from '@polkadot/types/interfaces'; -import { sendRequest } from '../call'; -import { blake2128Concat, twox64Concat, identity, createJsonRpcRequest, nextRequestId } from '../helpers'; -import type { IntegrationTestContext } from '../common-types'; -import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; -import type { CorePrimitivesIdentity } from '@litentry/parachain-api'; -import type { HexString } from '@polkadot/util/types'; -import type { Metadata } from '@polkadot/types'; +import { u8aToHex, u8aConcat } from '@polkadot/util' +import { xxhashAsU8a } from '@polkadot/util-crypto' +import { + StorageEntryMetadataV14, + SiLookupTypeId, + StorageHasherV14, +} from '@polkadot/types/interfaces' +import { sendRequest } from '../call' +import { + blake2128Concat, + twox64Concat, + identity, + createJsonRpcRequest, + nextRequestId, +} from '../helpers' +import type { IntegrationTestContext } from '../common-types' +import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api' +import type { CorePrimitivesIdentity } from '@litentry/parachain-api' +import type { HexString } from '@polkadot/util/types' +import type { Metadata } from '@polkadot/types' -const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)); +const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)) -import * as base58 from 'micro-base58'; +import * as base58 from 'micro-base58' //sidechain storage utils -export function buildStorageEntry(metadata: Metadata, prefix: string, method: string): StorageEntryMetadataV14 | null { +export function buildStorageEntry( + metadata: Metadata, + prefix: string, + method: string +): StorageEntryMetadataV14 | null { for (const pallet of metadata.asV14.pallets) { if (pallet.name.toString() == prefix) { - const storage = pallet.storage.unwrap(); + const storage = pallet.storage.unwrap() for (const item of storage.items) { if (item.name.toString() == method) { - return item; + return item } } } } - return null; + return null } export function buildStorageKey( @@ -37,32 +51,39 @@ export function buildStorageKey( hashers?: Array, input?: Array ): Uint8Array { - let storageKey = u8aConcat(xxhashAsU8a(prefix, 128), xxhashAsU8a(method, 128)); + let storageKey = u8aConcat( + xxhashAsU8a(prefix, 128), + xxhashAsU8a(method, 128) + ) if (keyTypeId && hashers && input) { const keyTypeIds = - hashers.length === 1 ? [keyTypeId] : metadata.registry.lookup.getSiType(keyTypeId).def.asTuple; + hashers.length === 1 + ? [keyTypeId] + : metadata.registry.lookup.getSiType(keyTypeId).def.asTuple for (let i = 0; i < keyTypeIds.length; i++) { - const theKeyTypeId = keyTypeIds[i]; - const theHasher = hashers[i].toString(); - const theKeyItem = input[i]; + const theKeyTypeId = keyTypeIds[i] + const theHasher = hashers[i].toString() + const theKeyItem = input[i] // get the scale encoded input data by encoding the input - const theKeyType = metadata.registry.createLookupType(theKeyTypeId); - const theKeyItemEncoded = metadata.registry.createType(theKeyType, theKeyItem).toU8a(); + const theKeyType = metadata.registry.createLookupType(theKeyTypeId) + const theKeyItemEncoded = metadata.registry + .createType(theKeyType, theKeyItem) + .toU8a() // apply hasher - let theKeyItemAppliedHasher; + let theKeyItemAppliedHasher if (theHasher == 'Blake2_128Concat') { - theKeyItemAppliedHasher = blake2128Concat(theKeyItemEncoded); + theKeyItemAppliedHasher = blake2128Concat(theKeyItemEncoded) } else if (theHasher == 'Twox64Concat') { - theKeyItemAppliedHasher = twox64Concat(theKeyItemEncoded); + theKeyItemAppliedHasher = twox64Concat(theKeyItemEncoded) } else if (theHasher == 'Identity') { - theKeyItemAppliedHasher = identity(theKeyItemEncoded); + theKeyItemAppliedHasher = identity(theKeyItemEncoded) } else { - throw new Error(`The hasher ${theHasher} is not support.`); + throw new Error(`The hasher ${theHasher} is not support.`) } - storageKey = u8aConcat(storageKey, theKeyItemAppliedHasher); + storageKey = u8aConcat(storageKey, theKeyItemAppliedHasher) } } - return storageKey; + return storageKey } export async function buildStorageHelper( metadata: Metadata, @@ -70,25 +91,32 @@ export async function buildStorageHelper( method: string, ...input: Array ): Promise { - const storageEntry = buildStorageEntry(metadata, prefix, method); + const storageEntry = buildStorageEntry(metadata, prefix, method) if (!storageEntry) { - throw new Error('Can not find the storage entry from metadata'); + throw new Error('Can not find the storage entry from metadata') } - let storageKey; + let storageKey if (storageEntry.type.isPlain) { - storageKey = buildStorageKey(metadata, prefix, method); + storageKey = buildStorageKey(metadata, prefix, method) } else if (storageEntry.type.isMap) { - const { hashers, key } = storageEntry.type.asMap; + const { hashers, key } = storageEntry.type.asMap if (input.length != hashers.length) { - throw new Error('The `input` param is not correct'); + throw new Error('The `input` param is not correct') } - storageKey = buildStorageKey(metadata, prefix, method, key, hashers, input); + storageKey = buildStorageKey( + metadata, + prefix, + method, + key, + hashers, + input + ) } else { - throw new Error('Only support plain and map type'); + throw new Error('Only support plain and map type') } - console.debug(`storage key: ${u8aToHex(storageKey)}`); - return u8aToHex(storageKey); + console.debug(`storage key: ${u8aToHex(storageKey)}`) + return u8aToHex(storageKey) } export async function checkIdGraph( @@ -98,13 +126,28 @@ export async function checkIdGraph( subject: CorePrimitivesIdentity, identity: HexString ): Promise { - await sleep(6000); - const storageKey = await buildStorageHelper(context.sidechainMetaData, pallet, method, subject, identity); + await sleep(6000) + const storageKey = await buildStorageHelper( + context.sidechainMetaData, + pallet, + method, + subject, + identity + ) - const base58mrEnclave = base58.encode(Buffer.from(context.mrEnclave.slice(2), 'hex')); + const base58mrEnclave = base58.encode( + Buffer.from(context.mrEnclave.slice(2), 'hex') + ) - const request = createJsonRpcRequest('state_getStorage', [base58mrEnclave, storageKey], nextRequestId(context)); - const resp = await sendRequest(context.tee, request, context.api); - const idGraph = context.sidechainRegistry.createType('PalletIdentityManagementTeeIdentityContext', resp.value); - return idGraph; + const request = createJsonRpcRequest( + 'state_getStorage', + [base58mrEnclave, storageKey], + nextRequestId(context) + ) + const resp = await sendRequest(context.tee, request, context.api) + const idGraph = context.sidechainRegistry.createType( + 'PalletIdentityManagementTeeIdentityContext', + resp.value + ) + return idGraph } diff --git a/integration-tests/common/utils/type-creators.ts b/integration-tests/common/utils/type-creators.ts index 8516ad4..353bee4 100644 --- a/integration-tests/common/utils/type-creators.ts +++ b/integration-tests/common/utils/type-creators.ts @@ -1,40 +1,46 @@ -import { u8aToHex, hexToU8a, stringToU8a } from '@polkadot/util'; -import type { ApiPromise } from '@polkadot/api'; -import type { LitentryMultiSignature } from '@litentry/parachain-api'; -import type { Signer } from './crypto'; +import { u8aToHex, hexToU8a, stringToU8a } from '@polkadot/util' +import type { ApiPromise } from '@polkadot/api' +import type { LitentryMultiSignature } from '@litentry/parachain-api' +import type { Signer } from './crypto' export async function createLitentryMultiSignature( api: ApiPromise, args: { signer: Signer; payload: Uint8Array | string } ): Promise { - const { signer, payload } = args; - const signerType = signer.type(); + const { signer, payload } = args + const signerType = signer.type() // Sign Bytes: // For Bitcoin, sign as hex with no prefix; for other types, convert it to raw bytes if (payload instanceof Uint8Array) { - const signature = await signer.sign(signerType === 'bitcoin' ? u8aToHex(payload).substring(2) : payload); + const signature = await signer.sign( + signerType === 'bitcoin' ? u8aToHex(payload).substring(2) : payload + ) return api.createType('LitentryMultiSignature', { [signerType]: signature, - }); + }) } // Sign hex: // Remove the prefix for bitcoin signature, and use raw bytes for other types if (payload.startsWith('0x')) { - const signature = await signer.sign(signerType === 'bitcoin' ? payload.substring(2) : hexToU8a(payload)); + const signature = await signer.sign( + signerType === 'bitcoin' ? payload.substring(2) : hexToU8a(payload) + ) return api.createType('LitentryMultiSignature', { [signerType]: signature, - }); + }) } // Sign string: // For Bitcoin, pass it as it is, for other types, convert it to raw bytes - const signature = await signer.sign(signerType === 'bitcoin' ? payload : stringToU8a(payload)); + const signature = await signer.sign( + signerType === 'bitcoin' ? payload : stringToU8a(payload) + ) return api.createType('LitentryMultiSignature', { [signerType]: signature, - }); + }) } diff --git a/integration-tests/common/utils/vc-helper.ts b/integration-tests/common/utils/vc-helper.ts index 2c3f4da..0030376 100644 --- a/integration-tests/common/utils/vc-helper.ts +++ b/integration-tests/common/utils/vc-helper.ts @@ -5,7 +5,8 @@ export const mockBatchAssertion = [ assertion: [{ A7: '5' }, { A8: ['Litentry'] }, { A20: 'A20' }], }, { - description: 'Have identified at least one account/address in both Web2 and Web3.', + description: + 'Have identified at least one account/address in both Web2 and Web3.', assertion: { A1: 'A1', }, @@ -30,12 +31,13 @@ export const mockBatchAssertion = [ A4: '10', }, }, -]; +] // https://github.com/litentry/litentry-parachain/tree/dev/tee-worker/litentry/core/assertion-build/src export const mockAssertions = [ { - description: 'Have identified at least one account/address in both Web2 and Web3.', + description: + 'Have identified at least one account/address in both Web2 and Web3.', assertion: { A1: 'A1', }, @@ -91,7 +93,8 @@ export const mockAssertions = [ }, }, { - description: 'The class of year that Ethereum account was created (must have on-chain records)', + description: + 'The class of year that Ethereum account was created (must have on-chain records)', assertion: { Achainable: { ClassOfYear: { @@ -152,7 +155,8 @@ export const mockAssertions = [ }, }, { - description: 'The user has participated in any Polkadot on-chain governance events', + description: + 'The user has participated in any Polkadot on-chain governance events', assertion: { A14: [], }, @@ -190,7 +194,8 @@ export const mockAssertions = [ }, // OneBlock { - description: 'A participant to the course co-created by OneBlock+ and Parity', + description: + 'A participant to the course co-created by OneBlock+ and Parity', assertion: { Oneblock: 'CourseCompletion', }, @@ -345,4 +350,4 @@ export const mockAssertions = [ WeirdoGhostGangHolder: [], }, }, -]; +] diff --git a/integration-tests/post-check.test.ts b/integration-tests/post-check.test.ts new file mode 100644 index 0000000..1fc4c18 --- /dev/null +++ b/integration-tests/post-check.test.ts @@ -0,0 +1,174 @@ +import WebSocket from 'ws' +import { assert } from 'chai' +import { webcrypto } from 'crypto' +import { ApiPromise, Keyring, WsProvider } from '@polkadot/api' +import { cryptoWaitReady } from '@polkadot/util-crypto' + +import { + identity, + trusted_operations, + sidechain, + vc, +} from '@litentry/parachain-api' +import { + request, + createLitentryIdentityType, + createLitentryValidationDataType, +} from '@litentry/enclave' + +import { nodeEndpoint, enclaveEndpoint } from '../config' +import { u8aToHex, u8aToString } from '@polkadot/util' + +let api: ApiPromise +let keyring: Keyring + +const originalCrypto = globalThis.crypto + +before(async () => { + console.log(`[node] ${nodeEndpoint}`) + console.log(`[worker] ${enclaveEndpoint}`) + console.log(`-----------------------------------`, '\n') + + const wsProvider = new WsProvider(nodeEndpoint) + + api = await ApiPromise.create({ + provider: wsProvider, + // Hardcoded for now until we need to support non-litentry networks + types: Object.assign( + {}, + identity.types, + trusted_operations.types, + sidechain.types, + vc.types + ), + }) + + keyring = new Keyring({ type: 'sr25519' }) + + // + // Web API Mocks for @litentry/enclave + // + + // enable globalThis.crypto.subtle + Object.defineProperty(global, 'crypto', { + value: webcrypto, + writable: true, + }) + // expose global websocket + Object.defineProperty(global, 'WebSocket', { + value: WebSocket, + writable: true, + }) +}) + +after(() => { + api.disconnect() + + // restore globalThis.crypto + Object.defineProperty(global, 'crypto', { + value: originalCrypto, + writable: true, + }) + // expose global websocket + Object.defineProperty(global, 'WebSocket', { + value: undefined, + writable: true, + }) +}) + +/** + * This test implicitly checks for: + * + * 1. clients can connect to the Parachain's Node and the Enclave's Worker over WSS. + * 2. a registered Enclave worker exists in the Parachain's storage. + * 3. the registered Enclave matches the running one. + * + */ +it(`can issue a verifiable-credential for Alice`, async () => { + const alice = keyring.addFromUri('//Alice') + const aliceIdentity = createLitentryIdentityType(api.registry, { + addressOrHandle: alice.address, + type: 'Substrate', + }) + + assert.strictEqual( + u8aToHex(alice.addressRaw), + aliceIdentity.asSubstrate.toHex() + ) + + // Any Enclave operation requires fetching a nonce from `enclaveEndpoint` using the + // shard registered in the `nodeEndpoint`. + // it implicitly ensures that the Enclave is running and correctly registered in the Parachain. + const { send, payloadToSign, txHash } = await request.requestBatchVC(api, { + who: aliceIdentity, + assertions: [ + // lit-holder + api.createType('Assertion', { + A4: '10.00', + }), + ], + }) + + assert.isString(payloadToSign) + const signature = alice.sign(payloadToSign) + + const response = await send({ + signedPayload: u8aToHex(signature), + }) + + assert.strictEqual(response.txHash, txHash) + assert.isArray(response.vcPayloads) + assert.notInstanceOf(response.vcPayloads[0], Error) + assert.instanceOf(response.vcPayloads[0], Uint8Array) + + const vcString = JSON.parse( + u8aToString(response.vcPayloads[0] as Uint8Array) + ) + assert.isArray(vcString['@context']) + assert.isString(vcString.id) +}) + +/** + * This test implicitly checks that the state is readable and consistent + * + * Notice that this test is fixed to the historical state of tee-prod. + */ +it(`[PROD] should have consistent historical state for Alice`, async () => { + const alice = keyring.addFromUri('//Alice') + const aliceIdentity = createLitentryIdentityType(api.registry, { + addressOrHandle: alice.address, + type: 'Substrate', + }) + + assert.strictEqual( + u8aToHex(alice.addressRaw), + aliceIdentity.asSubstrate.toHex() + ) + + const { send, payloadToSign } = await request.getIdGraph(api, { + who: aliceIdentity, + }) + + const signature = alice.sign(payloadToSign) + + const { idGraph } = await send({ + signedPayload: u8aToHex(signature), + }) + + // Alice has at least, the following identities: + const bob = keyring.addFromUri('//Bob') + const eve = keyring.addFromUri('//Eve') + + assert.isTrue( + idGraph.some(([identity]) => identity.asSubstrate.eq(alice.addressRaw)), + 'Alice is not in the graph' + ) + assert.isTrue( + idGraph.some(([identity]) => identity.asSubstrate.eq(bob.addressRaw)), + 'Bob is not in the graph' + ) + assert.isTrue( + idGraph.some(([identity]) => identity.asSubstrate.eq(eve.addressRaw)), + 'Eve is not in the graph' + ) +}) diff --git a/package-lock.json b/package-lock.json index 6ee9062..0259b16 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7424 +1,7424 @@ { - "name": "@litentry/contracts", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@litentry/contracts", - "license": "MIT", - "devDependencies": { - "@nomicfoundation/hardhat-toolbox": "^5.0.0", - "@openzeppelin/contracts": "^4.9.0", - "hardhat": "^2.22.5", - "prettier": "^3.3.1", - "prettier-plugin-solidity": "^1.3.1" - } - }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true, - "peer": true - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "dev": true, - "peer": true, - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", - "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true, - "peer": true - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "peer": true, - "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 - } - } - }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true, - "peer": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "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" - } - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "peer": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nomicfoundation/edr": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.4.0.tgz", - "integrity": "sha512-T96DMSogO8TCdbKKctvxfsDljbhFOUKWc9fHJhSeUh71EEho2qR4951LKQF7t7UWEzguVYh/idQr5L/E3QeaMw==", - "dev": true, - "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.4.0", - "@nomicfoundation/edr-darwin-x64": "0.4.0", - "@nomicfoundation/edr-linux-arm64-gnu": "0.4.0", - "@nomicfoundation/edr-linux-arm64-musl": "0.4.0", - "@nomicfoundation/edr-linux-x64-gnu": "0.4.0", - "@nomicfoundation/edr-linux-x64-musl": "0.4.0", - "@nomicfoundation/edr-win32-x64-msvc": "0.4.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.4.0.tgz", - "integrity": "sha512-7+rraFk9tCqvfemv9Ita5vTlSBAeO/S5aDKOgGRgYt0JEKZlrX161nDW6UfzMPxWl9GOLEDUzCEaYuNmXseUlg==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.4.0.tgz", - "integrity": "sha512-+Hrc0mP9L6vhICJSfyGo/2taOToy1AIzVZawO3lU8Lf7oDQXfhQ4UkZnkWAs9SVu1eUwHUGGGE0qB8644piYgg==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.4.0.tgz", - "integrity": "sha512-4HUDMchNClQrVRfVTqBeSX92hM/3khCgpZkXP52qrnJPqgbdCxosOehlQYZ65wu0b/kaaZSyvACgvCLSQ5oSzQ==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.4.0.tgz", - "integrity": "sha512-D4J935ZRL8xfnP3zIFlCI9jXInJ0loDUkCTLeCEbOf2uuDumWDghKNQlF1itUS+EHaR1pFVBbuwqq8hVK0dASg==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.4.0.tgz", - "integrity": "sha512-6x7HPy+uN5Cb9N77e2XMmT6+QSJ+7mRbHnhkGJ8jm4cZvWuj2Io7npOaeHQ3YHK+TiQpTnlbkjoOIpEwpY3XZA==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.4.0.tgz", - "integrity": "sha512-3HFIJSXgyubOiaN4MWGXx2xhTnhwlJk0PiSYNf9+L/fjBtcRkb2nM910ZJHTvqCb6OT98cUnaKuAYdXIW2amgw==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.4.0.tgz", - "integrity": "sha512-CP4GsllEfXEz+lidcGYxKe5rDJ60TM5/blB5z/04ELVvw6/CK9eLcYeku7HV0jvV7VE6dADYKSdQyUkvd0El+A==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", - "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.4" - } - }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", - "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", - "dev": true, - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", - "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", - "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.7.tgz", - "integrity": "sha512-RQfsiTwdf0SP+DtuNYvm4921X6VirCQq0Xyh+mnuGlTwEFSPZ/o27oQC+l+3Y/l48DDU7+ZcYBR+Fp+Rp94LfQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "chai": "^4.2.0", - "ethers": "^6.1.0", - "hardhat": "^2.9.4" - } - }, - "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.6.tgz", - "integrity": "sha512-/xzkFQAaHQhmIAYOQmvHBPwL+NkwLzT9gRZBsgWUYeV+E6pzXsBQsHfRYbAZ3XEYare+T7S+5Tg/1KDJgepSkA==", - "dev": true, - "peer": true, - "dependencies": { - "debug": "^4.1.1", - "lodash.isequal": "^4.5.0" - }, - "peerDependencies": { - "ethers": "^6.1.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.4.tgz", - "integrity": "sha512-x1lhLN9ZRSJ9eiNY9AoinMdeQeU4LDQSQOIw90W9DiZIG/g9YUzcTEIY58QTi2TZOF8YFiF6vJqLSePCpi8R1Q==", - "dev": true, - "peer": true, - "dependencies": { - "@nomicfoundation/ignition-core": "^0.15.4", - "@nomicfoundation/ignition-ui": "^0.15.4", - "chalk": "^4.0.0", - "debug": "^4.3.2", - "fs-extra": "^10.0.0", - "prompts": "^2.4.2" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-verify": "^2.0.1", - "hardhat": "^2.18.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition-ethers": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.4.tgz", - "integrity": "sha512-vY30V4b788GSziW/nOd0L/4IPw6mwpluahLs4+gPUUKWaHHGMA8OIeHaYpRRljM1i0M/Kg1yIozrDM/aeRebkg==", - "dev": true, - "peer": true, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.4", - "@nomicfoundation/hardhat-ignition": "^0.15.4", - "@nomicfoundation/ignition-core": "^0.15.4", - "ethers": "^6.7.0", - "hardhat": "^2.18.0" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.11.tgz", - "integrity": "sha512-uGPL7QSKvxrHRU69dx8jzoBvuztlLCtyFsbgfXIwIjnO3dqZRz2GNMHJoO3C3dIiUNM6jdNF4AUnoQKDscdYrA==", - "dev": true, - "peer": true, - "dependencies": { - "ethereumjs-util": "^7.1.4" - }, - "peerDependencies": { - "hardhat": "^2.9.5" - } - }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz", - "integrity": "sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==", - "dev": true, - "peerDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "^9.0.0", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=18.0.0", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.3.0", - "typescript": ">=4.5.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.8.tgz", - "integrity": "sha512-x/OYya7A2Kcz+3W/J78dyDHxr0ezU23DKTrRKfy5wDPCnePqnr79vm8EXqX3gYps6IjPBYyGPZ9K6E5BnrWx5Q==", - "dev": true, - "peer": true, - "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" - }, - "peerDependencies": { - "hardhat": "^2.0.4" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomicfoundation/ignition-core": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.4.tgz", - "integrity": "sha512-i379lH+xOLFdaDv0KiNma550ZXCHc5ZkmKYhM44xyLMKBlvX6skUVFkgUjjN1gvprgOIxc17GVQXlR1R5FhGZA==", - "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/address": "5.6.1", - "@nomicfoundation/solidity-analyzer": "^0.1.1", - "cbor": "^9.0.0", - "debug": "^4.3.2", - "ethers": "^6.7.0", - "fs-extra": "^10.0.0", - "immer": "10.0.2", - "lodash": "4.17.21", - "ndjson": "2.0.0" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", - "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", - "dev": true, - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@nomicfoundation/ignition-ui": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.4.tgz", - "integrity": "sha512-cHbmuxmhso5n2zdIaaIW4p8NNzrFj0mrnv8ufhAZfM3s3IFrRoGc1zo8hI/n1CiOTPuqUbdZcB79d+2tCKtCNw==", - "dev": true, - "peer": true - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", - "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", - "dev": true, - "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" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", - "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", - "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", - "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", - "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", - "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", - "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", - "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", - "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", - "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", - "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@openzeppelin/contracts": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", - "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", - "dev": true - }, - "node_modules/@scure/base": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", - "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", - "dev": true, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "dev": true, - "peer": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "peer": true - }, - "node_modules/@typechain/ethers-v6": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", - "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "ethers": "6.x", - "typechain": "^8.3.2", - "typescript": ">=4.7.0" - } - }, - "node_modules/@typechain/hardhat": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", - "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", - "dev": true, - "peer": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@typechain/ethers-v6": "^0.5.1", - "ethers": "^6.1.0", - "hardhat": "^2.9.9", - "typechain": "^8.3.2" - } - }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", - "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.16", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", - "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", - "dev": true, - "peer": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "peer": true - }, - "node_modules/@types/mocha": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", - "dev": true, - "peer": true - }, - "node_modules/@types/node": { - "version": "20.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.1.tgz", - "integrity": "sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true, - "peer": true - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true, - "peer": true - }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", - "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true, - "peer": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "engines": { - "node": ">=0.3.0" - } - }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true, - "peer": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.15.0.tgz", - "integrity": "sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.3.0", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true, - "peer": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "peer": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "peer": true - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true, - "peer": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "peer": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", - "dev": true, - "peer": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true, - "peer": true - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "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" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "peer": true - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", - "dev": true, - "peer": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "peer": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "peer": true, - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/cli-table3/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "peer": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "peer": true, - "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" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "peer": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "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" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "peer": true - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true, - "peer": true - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "peer": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "peer": true - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "peer": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", - "dev": true, - "peer": true, - "dependencies": { - "heap": ">= 0.2.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "peer": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "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" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "peer": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, - "peer": true, - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", - "dev": true, - "peer": true, - "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" - }, - "peerDependencies": { - "@codechecks/client": "^0.1.0" - }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true - } - } - }, - "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "peer": true - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "peer": true, - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "peer": true, - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz", - "integrity": "sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "^1.4.0" - } - }, - "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "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" - } - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "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" - } - }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethers": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.0.tgz", - "integrity": "sha512-+yyQQQWEntY5UVbCv++guA14RRVFm1rSnO1GoLFdrK7/XRWMoktNgyG9UjwxrQqGBfGyFKknNZ81YpUS2emCgg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "18.15.13", - "aes-js": "4.0.0-beta.5", - "tslib": "2.4.0", - "ws": "8.5.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", - "dev": true, - "peer": true - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true, - "peer": true - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "peer": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "peer": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "peer": true - }, - "node_modules/fast-uri": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz", - "integrity": "sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==", - "dev": true, - "peer": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "peer": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true, - "peer": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "dev": true, - "peer": true, - "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" - }, - "bin": { - "testrpc-sc": "index.js" - } - }, - "node_modules/ghost-testrpc/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ghost-testrpc/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ghost-testrpc/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "peer": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "peer": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "peer": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hardhat": { - "version": "2.22.5", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.5.tgz", - "integrity": "sha512-9Zq+HonbXCSy6/a13GY1cgHglQRfh4qkzmj1tpPlhxJDwNVnhxlReV6K7hCWFKlOrV13EQwsdcD0rjcaQKWRZw==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.4.0", - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "@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" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", - "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", - "dev": true, - "peer": true, - "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" - }, - "peerDependencies": { - "hardhat": "^2.0.2" - } - }, - "node_modules/hardhat/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/hardhat/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/hardhat/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/hardhat/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/hardhat/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/hardhat/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/hardhat/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/hardhat/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "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 - } - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "peer": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "peer": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true, - "peer": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dev": true, - "peer": true, - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true, - "peer": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", - "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", - "dev": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", - "dev": true - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "peer": true - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "peer": true - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "peer": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "peer": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "peer": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true, - "peer": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true, - "peer": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "peer": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "peer": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true, - "peer": true - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", - "dev": true, - "peer": true - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, - "peer": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "peer": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", - "dev": true, - "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" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/ndjson": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", - "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", - "dev": true, - "peer": true, - "dependencies": { - "json-stringify-safe": "^5.0.1", - "minimist": "^1.2.5", - "readable-stream": "^3.6.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "ndjson": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "peer": true - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", - "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "peer": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true, - "peer": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "peer": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "peer": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true, - "peer": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", - "dev": true, - "peer": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-solidity": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.3.1.tgz", - "integrity": "sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==", - "dev": true, - "dependencies": { - "@solidity-parser/parser": "^0.17.0", - "semver": "^7.5.4", - "solidity-comments-extractor": "^0.0.8" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "prettier": ">=2.3.0" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.17.0.tgz", - "integrity": "sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==", - "dev": true - }, - "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "peer": true - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "peer": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "peer": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "peer": true - }, - "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", - "dev": true, - "peer": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "peer": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "peer": true, - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", - "dev": true, - "peer": true, - "dependencies": { - "req-from": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", - "dev": true, - "peer": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "peer": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "peer": true, - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sc-istanbul": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", - "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", - "dev": true, - "peer": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/sc-istanbul/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "peer": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sc-istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sc-istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true, - "peer": true - }, - "node_modules/sc-istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "peer": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dev": true, - "peer": true, - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "peer": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "peer": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "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" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solidity-comments-extractor": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/solidity-comments-extractor/-/solidity-comments-extractor-0.0.8.tgz", - "integrity": "sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==", - "dev": true - }, - "node_modules/solidity-coverage": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.12.tgz", - "integrity": "sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==", - "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.18.0", - "chalk": "^2.4.2", - "death": "^1.1.0", - "difflib": "^0.2.4", - "fs-extra": "^8.1.0", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.21", - "mocha": "^10.2.0", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.6" - }, - "bin": { - "solidity-coverage": "plugins/bin.js" - }, - "peerDependencies": { - "hardhat": "^2.11.0" - } - }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", - "dev": true, - "peer": true - }, - "node_modules/solidity-coverage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/solidity-coverage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/solidity-coverage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/solidity-coverage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-coverage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "peer": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "peer": true - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true, - "peer": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dev": true, - "peer": true, - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dev": true, - "peer": true, - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true, - "peer": true - }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "peer": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", - "dev": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peer": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true, - "peer": true - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", - "dev": true, - "peer": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typechain/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "peer": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true, - "peer": true - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true, - "peer": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "peer": true - }, - "node_modules/web3-utils": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", - "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "peer": true - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "peer": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "peer": true, - "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 - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } + "name": "@litentry/contracts", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@litentry/contracts", + "license": "MIT", + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@openzeppelin/contracts": "^4.9.0", + "hardhat": "^2.22.5", + "prettier": "^3.3.1", + "prettier-plugin-solidity": "^1.3.1" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true, + "peer": true + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "dev": true, + "peer": true, + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", + "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "dev": true, + "peer": true, + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "ethereum-cryptography": "^2.0.0", + "micro-ftch": "^0.3.1" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", + "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" + } + }, + "node_modules/@ethersproject/abi": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", + "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/abstract-provider": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", + "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/abstract-signer": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", + "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/address": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", + "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/base64": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", + "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0" + } + }, + "node_modules/@ethersproject/basex": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", + "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/properties": "^5.7.0" + } + }, + "node_modules/@ethersproject/bignumber": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", + "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "bn.js": "^5.2.1" + } + }, + "node_modules/@ethersproject/bytes": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", + "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/constants": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", + "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bignumber": "^5.7.0" + } + }, + "node_modules/@ethersproject/contracts": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", + "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "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" + } + }, + "node_modules/@ethersproject/hash": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", + "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/hdnode": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", + "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "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" + } + }, + "node_modules/@ethersproject/json-wallets": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", + "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "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" + } + }, + "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "dev": true, + "peer": true + }, + "node_modules/@ethersproject/keccak256": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", + "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "js-sha3": "0.8.0" + } + }, + "node_modules/@ethersproject/logger": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", + "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ] + }, + "node_modules/@ethersproject/networks": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", + "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/pbkdf2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", + "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/sha2": "^5.7.0" + } + }, + "node_modules/@ethersproject/properties": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", + "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/providers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", + "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "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" + } + }, + "node_modules/@ethersproject/providers/node_modules/ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true, + "peer": true, + "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 + } + } + }, + "node_modules/@ethersproject/random": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", + "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/rlp": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", + "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/sha2": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", + "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/logger": "^5.7.0", + "hash.js": "1.1.7" + } + }, + "node_modules/@ethersproject/signing-key": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", + "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/solidity": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", + "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "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" + } + }, + "node_modules/@ethersproject/strings": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", + "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "dependencies": { + "@ethersproject/bytes": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/transactions": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", + "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/units": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", + "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.7.0", + "@ethersproject/constants": "^5.7.0", + "@ethersproject/logger": "^5.7.0" + } + }, + "node_modules/@ethersproject/wallet": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", + "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "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" + } + }, + "node_modules/@ethersproject/web": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", + "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "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" + } + }, + "node_modules/@ethersproject/wordlists": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", + "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "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" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "peer": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@metamask/eth-sig-util": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", + "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", + "dev": true, + "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" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "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" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/secp256k1": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", + "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "peer": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nomicfoundation/edr": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.4.0.tgz", + "integrity": "sha512-T96DMSogO8TCdbKKctvxfsDljbhFOUKWc9fHJhSeUh71EEho2qR4951LKQF7t7UWEzguVYh/idQr5L/E3QeaMw==", + "dev": true, + "dependencies": { + "@nomicfoundation/edr-darwin-arm64": "0.4.0", + "@nomicfoundation/edr-darwin-x64": "0.4.0", + "@nomicfoundation/edr-linux-arm64-gnu": "0.4.0", + "@nomicfoundation/edr-linux-arm64-musl": "0.4.0", + "@nomicfoundation/edr-linux-x64-gnu": "0.4.0", + "@nomicfoundation/edr-linux-x64-musl": "0.4.0", + "@nomicfoundation/edr-win32-x64-msvc": "0.4.0" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-arm64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.4.0.tgz", + "integrity": "sha512-7+rraFk9tCqvfemv9Ita5vTlSBAeO/S5aDKOgGRgYt0JEKZlrX161nDW6UfzMPxWl9GOLEDUzCEaYuNmXseUlg==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-darwin-x64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.4.0.tgz", + "integrity": "sha512-+Hrc0mP9L6vhICJSfyGo/2taOToy1AIzVZawO3lU8Lf7oDQXfhQ4UkZnkWAs9SVu1eUwHUGGGE0qB8644piYgg==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.4.0.tgz", + "integrity": "sha512-4HUDMchNClQrVRfVTqBeSX92hM/3khCgpZkXP52qrnJPqgbdCxosOehlQYZ65wu0b/kaaZSyvACgvCLSQ5oSzQ==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-arm64-musl": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.4.0.tgz", + "integrity": "sha512-D4J935ZRL8xfnP3zIFlCI9jXInJ0loDUkCTLeCEbOf2uuDumWDghKNQlF1itUS+EHaR1pFVBbuwqq8hVK0dASg==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-gnu": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.4.0.tgz", + "integrity": "sha512-6x7HPy+uN5Cb9N77e2XMmT6+QSJ+7mRbHnhkGJ8jm4cZvWuj2Io7npOaeHQ3YHK+TiQpTnlbkjoOIpEwpY3XZA==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-linux-x64-musl": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.4.0.tgz", + "integrity": "sha512-3HFIJSXgyubOiaN4MWGXx2xhTnhwlJk0PiSYNf9+L/fjBtcRkb2nM910ZJHTvqCb6OT98cUnaKuAYdXIW2amgw==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/edr-win32-x64-msvc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.4.0.tgz", + "integrity": "sha512-CP4GsllEfXEz+lidcGYxKe5rDJ60TM5/blB5z/04ELVvw6/CK9eLcYeku7HV0jvV7VE6dADYKSdQyUkvd0El+A==", + "dev": true, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-common": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", + "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-util": "9.0.4" + } + }, + "node_modules/@nomicfoundation/ethereumjs-rlp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", + "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", + "dev": true, + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@nomicfoundation/ethereumjs-tx": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", + "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/ethereumjs-util": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", + "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", + "dev": true, + "dependencies": { + "@nomicfoundation/ethereumjs-rlp": "5.0.4", + "ethereum-cryptography": "0.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "c-kzg": "^2.1.2" + }, + "peerDependenciesMeta": { + "c-kzg": { + "optional": true + } + } + }, + "node_modules/@nomicfoundation/hardhat-chai-matchers": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.7.tgz", + "integrity": "sha512-RQfsiTwdf0SP+DtuNYvm4921X6VirCQq0Xyh+mnuGlTwEFSPZ/o27oQC+l+3Y/l48DDU7+ZcYBR+Fp+Rp94LfQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/chai-as-promised": "^7.1.3", + "chai-as-promised": "^7.1.1", + "deep-eql": "^4.0.1", + "ordinal": "^1.0.3" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "chai": "^4.2.0", + "ethers": "^6.1.0", + "hardhat": "^2.9.4" + } + }, + "node_modules/@nomicfoundation/hardhat-ethers": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.6.tgz", + "integrity": "sha512-/xzkFQAaHQhmIAYOQmvHBPwL+NkwLzT9gRZBsgWUYeV+E6pzXsBQsHfRYbAZ3XEYare+T7S+5Tg/1KDJgepSkA==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^4.1.1", + "lodash.isequal": "^4.5.0" + }, + "peerDependencies": { + "ethers": "^6.1.0", + "hardhat": "^2.0.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ignition": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.4.tgz", + "integrity": "sha512-x1lhLN9ZRSJ9eiNY9AoinMdeQeU4LDQSQOIw90W9DiZIG/g9YUzcTEIY58QTi2TZOF8YFiF6vJqLSePCpi8R1Q==", + "dev": true, + "peer": true, + "dependencies": { + "@nomicfoundation/ignition-core": "^0.15.4", + "@nomicfoundation/ignition-ui": "^0.15.4", + "chalk": "^4.0.0", + "debug": "^4.3.2", + "fs-extra": "^10.0.0", + "prompts": "^2.4.2" + }, + "peerDependencies": { + "@nomicfoundation/hardhat-verify": "^2.0.1", + "hardhat": "^2.18.0" + } + }, + "node_modules/@nomicfoundation/hardhat-ignition-ethers": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.4.tgz", + "integrity": "sha512-vY30V4b788GSziW/nOd0L/4IPw6mwpluahLs4+gPUUKWaHHGMA8OIeHaYpRRljM1i0M/Kg1yIozrDM/aeRebkg==", + "dev": true, + "peer": true, + "peerDependencies": { + "@nomicfoundation/hardhat-ethers": "^3.0.4", + "@nomicfoundation/hardhat-ignition": "^0.15.4", + "@nomicfoundation/ignition-core": "^0.15.4", + "ethers": "^6.7.0", + "hardhat": "^2.18.0" + } + }, + "node_modules/@nomicfoundation/hardhat-network-helpers": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.11.tgz", + "integrity": "sha512-uGPL7QSKvxrHRU69dx8jzoBvuztlLCtyFsbgfXIwIjnO3dqZRz2GNMHJoO3C3dIiUNM6jdNF4AUnoQKDscdYrA==", + "dev": true, + "peer": true, + "dependencies": { + "ethereumjs-util": "^7.1.4" + }, + "peerDependencies": { + "hardhat": "^2.9.5" + } + }, + "node_modules/@nomicfoundation/hardhat-toolbox": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz", + "integrity": "sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==", + "dev": true, + "peerDependencies": { + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": ">=18.0.0", + "chai": "^4.2.0", + "ethers": "^6.4.0", + "hardhat": "^2.11.0", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": ">=8.0.0", + "typechain": "^8.3.0", + "typescript": ">=4.5.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.8.tgz", + "integrity": "sha512-x/OYya7A2Kcz+3W/J78dyDHxr0ezU23DKTrRKfy5wDPCnePqnr79vm8EXqX3gYps6IjPBYyGPZ9K6E5BnrWx5Q==", + "dev": true, + "peer": true, + "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" + }, + "peerDependencies": { + "hardhat": "^2.0.4" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomicfoundation/hardhat-verify/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nomicfoundation/ignition-core": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.4.tgz", + "integrity": "sha512-i379lH+xOLFdaDv0KiNma550ZXCHc5ZkmKYhM44xyLMKBlvX6skUVFkgUjjN1gvprgOIxc17GVQXlR1R5FhGZA==", + "dev": true, + "peer": true, + "dependencies": { + "@ethersproject/address": "5.6.1", + "@nomicfoundation/solidity-analyzer": "^0.1.1", + "cbor": "^9.0.0", + "debug": "^4.3.2", + "ethers": "^6.7.0", + "fs-extra": "^10.0.0", + "immer": "10.0.2", + "lodash": "4.17.21", + "ndjson": "2.0.0" + } + }, + "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", + "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@ethersproject/bignumber": "^5.6.2", + "@ethersproject/bytes": "^5.6.1", + "@ethersproject/keccak256": "^5.6.1", + "@ethersproject/logger": "^5.6.0", + "@ethersproject/rlp": "^5.6.1" + } + }, + "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", + "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", + "dev": true, + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@nomicfoundation/ignition-ui": { + "version": "0.15.4", + "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.4.tgz", + "integrity": "sha512-cHbmuxmhso5n2zdIaaIW4p8NNzrFj0mrnv8ufhAZfM3s3IFrRoGc1zo8hI/n1CiOTPuqUbdZcB79d+2tCKtCNw==", + "dev": true, + "peer": true + }, + "node_modules/@nomicfoundation/solidity-analyzer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", + "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", + "dev": true, + "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" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", + "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", + "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", + "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", + "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", + "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", + "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", + "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", + "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", + "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", + "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@openzeppelin/contracts": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", + "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", + "dev": true + }, + "node_modules/@scure/base": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", + "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", + "dev": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", + "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "dev": true, + "dependencies": { + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "dev": true, + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "dev": true, + "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" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "peer": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "peer": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "peer": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "peer": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "peer": true + }, + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", + "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", + "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", + "dev": true, + "peer": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", + "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", + "dev": true, + "peer": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "peer": true + }, + "node_modules/@types/mocha": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", + "dev": true, + "peer": true + }, + "node_modules/@types/node": { + "version": "20.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.1.tgz", + "integrity": "sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true, + "peer": true + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true, + "peer": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "peer": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true, + "peer": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.15.0.tgz", + "integrity": "sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^2.3.0", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true, + "peer": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "peer": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "peer": true + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "peer": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dev": true, + "peer": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true, + "peer": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "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" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "peer": true + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "peer": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "peer": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "peer": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "peer": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "peer": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "peer": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "peer": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "peer": true, + "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" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "peer": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "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" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "peer": true + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "dev": true, + "peer": true + }, + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "dev": true, + "peer": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "peer": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "peer": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "dev": true, + "peer": true, + "dependencies": { + "heap": ">= 0.2.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "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" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "peer": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eth-gas-reporter": { + "version": "0.2.27", + "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", + "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", + "dev": true, + "peer": true, + "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" + }, + "peerDependencies": { + "@codechecks/client": "^0.1.0" + }, + "peerDependenciesMeta": { + "@codechecks/client": { + "optional": true + } + } + }, + "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "peer": true + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "peer": true, + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "peer": true, + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/eth-gas-reporter/node_modules/ethers": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", + "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "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" + } + }, + "node_modules/ethereum-bloom-filters": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz", + "integrity": "sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "^1.4.0" + } + }, + "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "dev": true, + "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" + } + }, + "node_modules/ethereumjs-abi": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", + "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.8", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-abi/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "dev": true, + "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" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethers": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.0.tgz", + "integrity": "sha512-+yyQQQWEntY5UVbCv++guA14RRVFm1rSnO1GoLFdrK7/XRWMoktNgyG9UjwxrQqGBfGyFKknNZ81YpUS2emCgg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "peer": true, + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "dev": true, + "peer": true + }, + "node_modules/ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "dev": true, + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/ethjs-unit/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, + "peer": true + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "dev": true, + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true + }, + "node_modules/fast-uri": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz", + "integrity": "sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==", + "dev": true, + "peer": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "peer": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dev": true, + "peer": true, + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fp-ts": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", + "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true, + "peer": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", + "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^2.4.2", + "node-emoji": "^1.10.0" + }, + "bin": { + "testrpc-sc": "index.js" + } + }, + "node_modules/ghost-testrpc/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/ghost-testrpc/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/ghost-testrpc/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ghost-testrpc/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "peer": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "peer": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "peer": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hardhat": { + "version": "2.22.5", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.5.tgz", + "integrity": "sha512-9Zq+HonbXCSy6/a13GY1cgHglQRfh4qkzmj1tpPlhxJDwNVnhxlReV6K7hCWFKlOrV13EQwsdcD0rjcaQKWRZw==", + "dev": true, + "dependencies": { + "@ethersproject/abi": "^5.1.2", + "@metamask/eth-sig-util": "^4.0.0", + "@nomicfoundation/edr": "^0.4.0", + "@nomicfoundation/ethereumjs-common": "4.0.4", + "@nomicfoundation/ethereumjs-tx": "5.0.4", + "@nomicfoundation/ethereumjs-util": "9.0.4", + "@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" + }, + "bin": { + "hardhat": "internal/cli/bootstrap.js" + }, + "peerDependencies": { + "ts-node": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/hardhat-gas-reporter": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", + "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", + "dev": true, + "peer": true, + "dependencies": { + "array-uniq": "1.0.3", + "eth-gas-reporter": "^0.2.25", + "sha1": "^1.1.1" + }, + "peerDependencies": { + "hardhat": "^2.0.2" + } + }, + "node_modules/hardhat/node_modules/@noble/hashes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", + "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/hardhat/node_modules/@scure/bip32": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", + "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@noble/secp256k1": "~1.7.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/@scure/bip39": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", + "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "~1.2.0", + "@scure/base": "~1.1.0" + } + }, + "node_modules/hardhat/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/hardhat/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/hardhat/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/hardhat/node_modules/ethereum-cryptography": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", + "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.2.0", + "@noble/secp256k1": "1.7.1", + "@scure/bip32": "1.1.5", + "@scure/bip39": "1.1.1" + } + }, + "node_modules/hardhat/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/hardhat/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/hardhat/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hardhat/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/hardhat/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "dev": true, + "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 + } + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "peer": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "peer": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", + "dev": true, + "peer": true + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/http-basic": { + "version": "8.1.3", + "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", + "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "dev": true, + "peer": true, + "dependencies": { + "caseless": "^0.12.0", + "concat-stream": "^1.6.2", + "http-response-object": "^3.0.1", + "parse-cache-control": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-response-object": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", + "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "^10.0.3" + } + }, + "node_modules/http-response-object/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "dev": true, + "peer": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", + "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", + "dev": true, + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", + "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", + "dev": true + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "peer": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "dev": true, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "peer": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "peer": true + }, + "node_modules/js-sha3": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "peer": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonschema": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", + "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "peer": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true, + "peer": true + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "dev": true, + "peer": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "peer": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "peer": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", + "dev": true + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "peer": true + }, + "node_modules/markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true, + "peer": true + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micro-ftch": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "dev": true, + "peer": true + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, + "peer": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "peer": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "peer": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mnemonist": { + "version": "0.38.5", + "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", + "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", + "dev": true, + "dependencies": { + "obliterator": "^2.0.0" + } + }, + "node_modules/mocha": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", + "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", + "dev": true, + "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" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/ndjson": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", + "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", + "dev": true, + "peer": true, + "dependencies": { + "json-stringify-safe": "^5.0.1", + "minimist": "^1.2.5", + "readable-stream": "^3.6.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "ndjson": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "peer": true + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "dev": true + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/nofilter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", + "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "peer": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "dev": true, + "peer": true, + "dependencies": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/number-to-bn/node_modules/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "dev": true, + "peer": true + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obliterator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", + "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "peer": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ordinal": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", + "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", + "dev": true, + "peer": true + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-cache-control": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", + "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", + "dev": true, + "peer": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "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" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", + "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-solidity": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.3.1.tgz", + "integrity": "sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==", + "dev": true, + "dependencies": { + "@solidity-parser/parser": "^0.17.0", + "semver": "^7.5.4", + "solidity-comments-extractor": "^0.0.8" + }, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "prettier": ">=2.3.0" + } + }, + "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.17.0.tgz", + "integrity": "sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==", + "dev": true + }, + "node_modules/prettier-plugin-solidity/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "peer": true + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "dev": true, + "peer": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "peer": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true, + "peer": true + }, + "node_modules/qs": { + "version": "6.12.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", + "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", + "dev": true, + "peer": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "peer": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dev": true, + "peer": true, + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/req-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", + "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", + "dev": true, + "peer": true, + "dependencies": { + "req-from": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/req-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", + "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", + "dev": true, + "peer": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sc-istanbul": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", + "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", + "dev": true, + "peer": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/sc-istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/sc-istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "peer": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/sc-istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sc-istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true, + "peer": true + }, + "node_modules/sc-istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "dev": true + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "peer": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/sha1": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", + "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", + "dev": true, + "peer": true, + "dependencies": { + "charenc": ">= 0.0.1", + "crypt": ">= 0.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "peer": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "peer": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/solc": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", + "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "dev": true, + "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" + }, + "bin": { + "solcjs": "solcjs" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/solc/node_modules/fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" + } + }, + "node_modules/solc/node_modules/jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solc/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/solidity-comments-extractor": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/solidity-comments-extractor/-/solidity-comments-extractor-0.0.8.tgz", + "integrity": "sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==", + "dev": true + }, + "node_modules/solidity-coverage": { + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.12.tgz", + "integrity": "sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==", + "dev": true, + "peer": true, + "dependencies": { + "@ethersproject/abi": "^5.0.9", + "@solidity-parser/parser": "^0.18.0", + "chalk": "^2.4.2", + "death": "^1.1.0", + "difflib": "^0.2.4", + "fs-extra": "^8.1.0", + "ghost-testrpc": "^0.0.2", + "global-modules": "^2.0.0", + "globby": "^10.0.1", + "jsonschema": "^1.2.4", + "lodash": "^4.17.21", + "mocha": "^10.2.0", + "node-emoji": "^1.10.0", + "pify": "^4.0.1", + "recursive-readdir": "^2.2.2", + "sc-istanbul": "^0.4.5", + "semver": "^7.3.4", + "shelljs": "^0.8.3", + "web3-utils": "^1.3.6" + }, + "bin": { + "solidity-coverage": "plugins/bin.js" + }, + "peerDependencies": { + "hardhat": "^2.11.0" + } + }, + "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", + "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", + "dev": true, + "peer": true + }, + "node_modules/solidity-coverage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/solidity-coverage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "node_modules/solidity-coverage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/solidity-coverage/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/solidity-coverage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/solidity-coverage/node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/solidity-coverage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/solidity-coverage/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "peer": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", + "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", + "dev": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/stacktrace-parser/node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-format": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", + "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", + "dev": true, + "peer": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "dev": true, + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sync-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", + "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "dev": true, + "peer": true, + "dependencies": { + "http-response-object": "^3.0.1", + "sync-rpc": "^1.2.1", + "then-request": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/sync-rpc": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", + "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "dev": true, + "peer": true, + "dependencies": { + "get-port": "^3.1.0" + } + }, + "node_modules/table": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dev": true, + "peer": true, + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/then-request": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", + "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/then-request/node_modules/@types/node": { + "version": "8.10.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", + "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", + "dev": true, + "peer": true + }, + "node_modules/then-request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dev": true, + "peer": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "peer": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-command-line-args": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", + "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", + "dev": true, + "peer": true, + "dependencies": { + "chalk": "^4.1.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.0", + "string-format": "^2.0.0" + }, + "bin": { + "write-markdown": "dist/write-markdown.js" + } + }, + "node_modules/ts-essentials": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", + "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "typescript": ">=3.7.0" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "peer": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true, + "peer": true + }, + "node_modules/tsort": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", + "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", + "dev": true + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true + }, + "node_modules/tweetnacl-util": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", + "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "peer": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typechain": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", + "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", + "dev": true, + "peer": true, + "dependencies": { + "@types/prettier": "^2.1.1", + "debug": "^4.3.1", + "fs-extra": "^7.0.0", + "glob": "7.1.7", + "js-sha3": "^0.8.0", + "lodash": "^4.17.15", + "mkdirp": "^1.0.4", + "prettier": "^2.3.1", + "ts-command-line-args": "^2.2.0", + "ts-essentials": "^7.0.1" + }, + "bin": { + "typechain": "dist/cli/cli.js" + }, + "peerDependencies": { + "typescript": ">=4.3.0" + } + }, + "node_modules/typechain/node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/typechain/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typechain/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "peer": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/typechain/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "peer": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typechain/node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "peer": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/typechain/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "peer": true + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici": { + "version": "5.28.4", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", + "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", + "dev": true, + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true, + "peer": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "peer": true + }, + "node_modules/web3-utils": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", + "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "dev": true, + "peer": true, + "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" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", + "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", + "dev": true, + "peer": true, + "dependencies": { + "@noble/curves": "1.3.0", + "@noble/hashes": "1.3.3", + "@scure/bip32": "1.3.3", + "@scure/bip39": "1.2.2" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "peer": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dev": true, + "peer": true, + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "dev": true, + "peer": true, + "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 + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } } diff --git a/package.json b/package.json index ad0452a..6764fee 100644 --- a/package.json +++ b/package.json @@ -60,4 +60,4 @@ "zx": "^7.2.3" }, "packageManager": "pnpm@8.7.6" -} \ No newline at end of file +} diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index c1ec980..2b127c4 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -127,8 +127,6 @@ function restart_worker_services { --name litentry-worker-${WORKER_ID} \ --restart always \ --net=host \ - --device=/dev/sgx_enclave \ - --device=/dev/sgx_provision \ --env RUST_LOG=info,litentry_worker=debug,ws=warn,sp_io=error,substrate_api_client=warn,itc_parentchain_light_client=info,jsonrpsee_ws_client=warn,jsonrpsee_ws_server=warn,enclave_runtime=debug,ita_stf=debug,its_rpc_handler=warn,itc_rpc_client=warn,its_consensus_common=debug,its_state=warn,its_consensus_aura=warn,aura*=warn,its_consensus_slots=warn,itp_attestation_handler=debug,http_req=debug,lc_mock_server=warn,itc_rest_client=debug,lc_credentials=debug,lc_identity_verification=debug,lc_stf_task_receiver=debug,lc_stf_task_sender=debug,lc_data_providers=debug,itp_top_pool=debug,itc_parentchain_indirect_calls_executor=debug,bc_task_receiver=debug \ --env DATA_DIR='/data' \ --env-file /opt/worker_configs/worker_env \ From 9afcdf4acc8ebcc190025cc9696fe4a489c35ca2 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 16:14:42 +0800 Subject: [PATCH 18/45] remove integration-tests --- integration-tests/common/call.ts | 72 - integration-tests/common/common-types.ts | 47 - integration-tests/common/config.js | 4 - integration-tests/common/di-utils.ts | 654 -- integration-tests/common/helpers.ts | 128 - integration-tests/common/transactions.ts | 221 - integration-tests/common/utils/assertion.ts | 248 - integration-tests/common/utils/common.ts | 5 - integration-tests/common/utils/context.ts | 121 - integration-tests/common/utils/crypto.ts | 265 - .../common/utils/identity-helper.ts | 284 - integration-tests/common/utils/index.ts | 15 - .../common/utils/integration-setup.ts | 51 - integration-tests/common/utils/storage.ts | 153 - .../common/utils/type-creators.ts | 46 - integration-tests/common/utils/vc-helper.ts | 353 - integration-tests/contracts.test.ts | 218 - integration-tests/post-check.test.ts | 174 - package-lock.json | 6560 +++++++++++++---- package.json | 37 +- pnpm-lock.yaml | 793 +- 21 files changed, 6002 insertions(+), 4447 deletions(-) delete mode 100644 integration-tests/common/call.ts delete mode 100644 integration-tests/common/common-types.ts delete mode 100644 integration-tests/common/config.js delete mode 100644 integration-tests/common/di-utils.ts delete mode 100644 integration-tests/common/helpers.ts delete mode 100644 integration-tests/common/transactions.ts delete mode 100644 integration-tests/common/utils/assertion.ts delete mode 100644 integration-tests/common/utils/common.ts delete mode 100644 integration-tests/common/utils/context.ts delete mode 100644 integration-tests/common/utils/crypto.ts delete mode 100644 integration-tests/common/utils/identity-helper.ts delete mode 100644 integration-tests/common/utils/index.ts delete mode 100644 integration-tests/common/utils/integration-setup.ts delete mode 100644 integration-tests/common/utils/storage.ts delete mode 100644 integration-tests/common/utils/type-creators.ts delete mode 100644 integration-tests/common/utils/vc-helper.ts delete mode 100644 integration-tests/contracts.test.ts delete mode 100644 integration-tests/post-check.test.ts diff --git a/integration-tests/common/call.ts b/integration-tests/common/call.ts deleted file mode 100644 index bd984c5..0000000 --- a/integration-tests/common/call.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { ApiPromise } from '@polkadot/api' -import { hexToU8a, compactStripLength, u8aToString } from '@polkadot/util' -import WebSocketAsPromised from 'websocket-as-promised' -import type { JsonRpcRequest } from './common-types' -import type { WorkerRpcReturnValue } from '@litentry/parachain-api' -import { Metadata, TypeRegistry } from '@polkadot/types' -import type { Bytes } from '@polkadot/types-codec' -import { createJsonRpcRequest } from './helpers' -// TODO: -// - better place to put these constants? -// - maybe randomise it in test initialisation -// -// the aes key to encrypt an AES request -export const aesKey = - '0x22fc82db5b606998ad45099b7978b5b4f9dd4ea6017e57370ac56141caaabd12' - -// nonce to encrypt an AES request together with `aesKey` -export const keyNonce = '0x010101010101010101010101' - -// send RPC request -export async function sendRequest( - wsClient: WebSocketAsPromised, - request: JsonRpcRequest, - api: ApiPromise -): Promise { - const rawRes = await wsClient.sendRequest(request, { - requestId: request.id, - timeout: 6000, - }) - - const res = api.createType('WorkerRpcReturnValue', rawRes.result) - if (res.status.isError) { - console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)) - } - - // unfortunately, the res.value only contains the hash of top - if ( - res.status.isTrustedOperationStatus && - res.status.asTrustedOperationStatus[0].isInvalid - ) { - console.log('Rpc trusted operation execution failed, hash: ', res.value) - } - - return res -} - -// decode the returned bytes as string -// TODO: is it same as `String::decode` in rust? -// please note we shouldn't use toU8a(), which encodes the Bytes instead of converting -export function decodeRpcBytesAsString(value: Bytes): string { - return u8aToString(compactStripLength(hexToU8a(value.toHex()))[1]) -} - -export async function getSidechainMetadata( - wsClient: WebSocketAsPromised, - api: ApiPromise, - requestId: number -): Promise<{ sidechainMetaData: Metadata; sidechainRegistry: TypeRegistry }> { - const request = createJsonRpcRequest( - 'state_getMetadata', - Uint8Array.from([]), - requestId - ) - - const resp = await sendRequest(wsClient, request, api) - - const sidechainRegistry = new TypeRegistry() - const sidechainMetaData = new Metadata(sidechainRegistry, resp.value) - - sidechainRegistry.setMetadata(sidechainMetaData) - return { sidechainMetaData, sidechainRegistry } -} diff --git a/integration-tests/common/common-types.ts b/integration-tests/common/common-types.ts deleted file mode 100644 index b2c6c54..0000000 --- a/integration-tests/common/common-types.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { ApiPromise } from '@litentry/parachain-api' -import { KeyObject } from 'crypto' -import WebSocketAsPromised from 'websocket-as-promised' -import { Metadata, TypeRegistry } from '@polkadot/types' -import { Wallet } from 'ethers' -import type { KeyringPair } from '@polkadot/keyring/types' -import type { HexString } from '@polkadot/util/types' -import { ECPairInterface } from 'ecpair' -import { Keypair } from '@solana/web3.js' -import { Signer } from './utils/crypto' -// If there are types already defined in the client-api, please avoid redefining these types. -// Instead, make every effort to use the types that have been generated within the client-api. - -interface WalletType { - [walletName: string]: Signer -} -export interface Wallets { - evm: WalletType - substrate: WalletType - bitcoin: WalletType - solana: WalletType -} -export type IntegrationTestContext = { - tee: WebSocketAsPromised - api: ApiPromise - teeShieldingKey: KeyObject - mrEnclave: HexString - web3Wallets: Wallets - sidechainMetaData: Metadata - sidechainRegistry: TypeRegistry - chainIdentifier: number - requestId: number -} - -export type Web3Wallets = { - substrateWallet: KeyringPair - evmWallet: Wallet - bitcoinWallet: ECPairInterface - solanaWallet: Keypair -} - -export type JsonRpcRequest = { - jsonrpc: string - method: string - params: any - id: number -} diff --git a/integration-tests/common/config.js b/integration-tests/common/config.js deleted file mode 100644 index 71127a5..0000000 --- a/integration-tests/common/config.js +++ /dev/null @@ -1,4 +0,0 @@ -import dotenv from 'dotenv' - -// eslint-disable-next-line @typescript-eslint/no-var-requires, no-undef -dotenv.config({ path: `.env.${process.env.NODE_ENV || 'local'}` }) diff --git a/integration-tests/common/di-utils.ts b/integration-tests/common/di-utils.ts deleted file mode 100644 index f38c4f9..0000000 --- a/integration-tests/common/di-utils.ts +++ /dev/null @@ -1,654 +0,0 @@ -import { ApiPromise } from '@polkadot/api' -import { - u8aToHex, - hexToU8a, - compactAddLength, - bufferToU8a, - u8aConcat, - stringToU8a, -} from '@polkadot/util' -import { Codec } from '@polkadot/types/types' -import { TypeRegistry } from '@polkadot/types' -import { Bytes } from '@polkadot/types-codec' -import { IntegrationTestContext, JsonRpcRequest } from './common-types' -import type { - WorkerRpcReturnValue, - TrustedCallSigned, - Getter, - CorePrimitivesIdentity, - TrustedGetterSigned, - TrustedCall, -} from '@litentry/parachain-api' -import { - encryptWithTeeShieldingKey, - Signer, - encryptWithAes, - sleep, - createLitentryMultiSignature, - decryptWithAes, -} from './utils' -import { aesKey, decodeRpcBytesAsString, keyNonce } from './call' -import { createPublicKey, KeyObject } from 'crypto' -import WebSocketAsPromised from 'websocket-as-promised' -import { H256, Index } from '@polkadot/types/interfaces' -import { blake2AsHex, base58Encode, blake2AsU8a } from '@polkadot/util-crypto' -import { - createJsonRpcRequest, - nextRequestId, - stfErrorToString, -} from './helpers' - -// Send the request to worker ws -// we should perform different actions based on the returned status: -// -// `Submitted`: -// the request is submitted to the top pool, we should start to subscribe to parachain headers to wait for async parachain event -// -// `InSidechainBlock` -// the request is included in a sidechain block: the state mutation of sidechain is done, the promise is resolved -// the corresponding parachain event should be emitted **around** that, it's not guaranteed if it's before or after this status -// due to block inclusion delays from the parachain -// -async function sendRequest( - wsClient: WebSocketAsPromised, - request: JsonRpcRequest, - api: ApiPromise, - onMessageReceived?: (res: WorkerRpcReturnValue) => void -): Promise { - const p = new Promise((resolve, reject) => - wsClient.onMessage.addListener((data) => { - const parsed = JSON.parse(data) - if (parsed.id !== request.id) { - return - } - - if ('error' in parsed) { - const transaction = { request, response: parsed } - console.log( - 'Request failed: ' + JSON.stringify(transaction, null, 2) - ) - reject(new Error(parsed.error.message, { cause: transaction })) - } - - const result = parsed.result - const res = api.createType('WorkerRpcReturnValue', result) - - if (res.status.isError) { - console.log( - 'Rpc response error: ' + decodeRpcBytesAsString(res.value) - ) - } - - if ( - res.status.isTrustedOperationStatus && - res.status.asTrustedOperationStatus[0].isInvalid - ) { - console.log( - 'Rpc trusted operation execution failed, hash: ', - res.value.toHex() - ) - const stfError = api.createType('StfError', res.value) - const msg = stfErrorToString(stfError) - console.log('TrustedOperationStatus error: ', msg) - } - // sending every response we receive from websocket - if (onMessageReceived) onMessageReceived(res) - - // resolve it once `do_watch` is false, meaning it's the final response - if (res.do_watch.isFalse) { - // TODO: maybe only remove this listener - wsClient.onMessage.removeAllListeners() - resolve(res) - } else { - // `do_watch` is true means: hold on - there's still something coming - console.log('do_watch is true, continue watching ...') - } - }) - ) - - wsClient.sendRequest(request) - return p -} - -// TrustedCalls are defined in: -// https://github.com/litentry/litentry-parachain/blob/d4be11716fdb46021194bbe9fe791b15249a369e/tee-worker/app-libs/stf/src/trusted_call.rs#L61 -// -// About the signature, it's signed with `KeyringPair` here. -// In reality we need to get the user's signature on the `payload`. -export const createSignedTrustedCall = async ( - parachainApi: ApiPromise, - trustedCall: [string, string], - signer: Signer, - // hex-encoded mrenclave, retrieveable from parachain enclave registry - // TODO: do we have a RPC getter from the enclave? - mrenclave: string, - nonce: Codec, - params: any, - withWrappedBytes = false, - withPrefix = false -): Promise => { - const [variant, argType] = trustedCall - const call: TrustedCall = parachainApi.createType('TrustedCall', { - [variant]: parachainApi.createType(argType, params), - }) - let payload: string = blake2AsHex( - u8aConcat( - call.toU8a(), - nonce.toU8a(), - hexToU8a(mrenclave), - hexToU8a(mrenclave) // should be shard, but it's the same as MRENCLAVE in our case - ), - 256 - ) - - if (withWrappedBytes) { - payload = `${payload}` - } - - if (withPrefix) { - const prefix = getSignatureMessagePrefix(call) - const msg = prefix + payload - payload = msg - console.log('Signing message: ', payload) - } - - const signature = await createLitentryMultiSignature(parachainApi, { - signer, - payload, - }) - - return parachainApi.createType('TrustedCallSigned', { - call: call, - index: nonce, - signature: signature, - }) -} - -// See TrustedCall.signature_message_prefix -function getSignatureMessagePrefix(call: TrustedCall): string { - if (call.isLinkIdentity) { - return "By linking your identity to our platform, you're taking a step towards a more integrated experience. Please be assured, this process is safe and involves no transactions of your assets. Token: " - } - - if (call.isRequestBatchVc) { - const [, , assertions] = call.asRequestBatchVc - const length = assertions.length - - return `We are going to help you generate ${length} secure credential${ - length > 1 ? 's' : '' - }. Please be assured, this process is safe and involves no transactions of your assets. Token: ` - } - - return 'Token: ' -} - -export const createSignedTrustedGetter = async ( - parachainApi: ApiPromise, - trustedGetter: [string, string], - signer: Signer, - params: any -): Promise => { - const [variant, argType] = trustedGetter - const getter = parachainApi.createType('TrustedGetter', { - [variant]: parachainApi.createType(argType, params), - }) - const payload = blake2AsU8a(getter.toU8a(), 256) - - let signature = await createLitentryMultiSignature(parachainApi, { - signer, - payload, - }) - - return parachainApi.createType('TrustedGetterSigned', { - getter, - signature, - }) -} - -export const createPublicGetter = ( - parachainApi: ApiPromise, - publicGetter: [string, string], - params: any -) => { - const [variant, argType] = publicGetter - const getter = parachainApi.createType('PublicGetter', { - [variant]: parachainApi.createType(argType, params), - }) - - return getter -} - -export async function createSignedTrustedCallLinkIdentity( - parachainApi: ApiPromise, - mrenclave: string, - nonce: Codec, - signer: Signer, - primeIdentity: CorePrimitivesIdentity, - identity: string, - validationData: string, - web3networks: string, - aesKey: string, - hash: string, - options?: { withWrappedBytes?: boolean; withPrefix?: boolean } -) { - return createSignedTrustedCall( - parachainApi, - [ - 'link_identity', - '(LitentryIdentity, LitentryIdentity, LitentryIdentity, LitentryValidationData, Vec, Option, H256)', - ], - signer, - mrenclave, - nonce, - [ - primeIdentity.toHuman(), - primeIdentity.toHuman(), - identity, - validationData, - web3networks, - aesKey, - hash, - ], - options?.withWrappedBytes, - options?.withPrefix - ) -} - -export async function createSignedTrustedCallSetIdentityNetworks( - parachainApi: ApiPromise, - mrenclave: string, - nonce: Codec, - signer: Signer, - primeIdentity: CorePrimitivesIdentity, - identity: string, - web3networks: string, - aesKey: string, - hash: string -) { - return createSignedTrustedCall( - parachainApi, - [ - 'set_identity_networks', - '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Vec, Option, H256)', - ], - signer, - mrenclave, - nonce, - [ - primeIdentity.toHuman(), - primeIdentity.toHuman(), - identity, - web3networks, - aesKey, - hash, - ] - ) -} - -export async function createSignedTrustedCallRequestVc( - parachainApi: ApiPromise, - mrenclave: string, - nonce: Codec, - signer: Signer, - primeIdentity: CorePrimitivesIdentity, - assertion: string, - aesKey: string, - hash: string, - options?: { withWrappedBytes?: boolean; withPrefix?: boolean } -) { - return await createSignedTrustedCall( - parachainApi, - [ - 'request_vc', - '(LitentryIdentity, LitentryIdentity, Assertion, Option, H256)', - ], - signer, - mrenclave, - nonce, - [ - primeIdentity.toHuman(), - primeIdentity.toHuman(), - assertion, - aesKey, - hash, - ], - options?.withWrappedBytes, - options?.withPrefix - ) -} - -export async function createSignedTrustedCallRequestBatchVc( - parachainApi: ApiPromise, - mrenclave: string, - nonce: Codec, - signer: Signer, - primeIdentity: CorePrimitivesIdentity, - assertion: string, - aesKey: string, - hash: string, - options?: { withWrappedBytes?: boolean; withPrefix?: boolean } -) { - return await createSignedTrustedCall( - parachainApi, - [ - 'request_batch_vc', - '(LitentryIdentity, LitentryIdentity, BoundedVec>, Option, H256)', - ], - signer, - mrenclave, - nonce, - [ - primeIdentity.toHuman(), - primeIdentity.toHuman(), - assertion, - aesKey, - hash, - ], - options?.withWrappedBytes, - options?.withPrefix - ) -} - -export async function createSignedTrustedCallDeactivateIdentity( - parachainApi: ApiPromise, - mrenclave: string, - nonce: Codec, - signer: Signer, - primeIdentity: CorePrimitivesIdentity, - identity: string, - aesKey: string, - hash: string -) { - return createSignedTrustedCall( - parachainApi, - [ - 'deactivate_identity', - '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)', - ], - signer, - mrenclave, - nonce, - [ - primeIdentity.toHuman(), - primeIdentity.toHuman(), - identity, - aesKey, - hash, - ] - ) -} -export async function createSignedTrustedCallActivateIdentity( - parachainApi: ApiPromise, - mrenclave: string, - nonce: Codec, - signer: Signer, - primeIdentity: CorePrimitivesIdentity, - identity: string, - aesKey: string, - hash: string -) { - return createSignedTrustedCall( - parachainApi, - [ - 'activate_identity', - '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)', - ], - signer, - mrenclave, - nonce, - [ - primeIdentity.toHuman(), - primeIdentity.toHuman(), - identity, - aesKey, - hash, - ] - ) -} - -export async function createSignedTrustedGetterIdGraph( - parachainApi: ApiPromise, - signer: Signer, - primeIdentity: CorePrimitivesIdentity -): Promise { - const getterSigned = await createSignedTrustedGetter( - parachainApi, - ['id_graph', '(LitentryIdentity)'], - signer, - primeIdentity.toHuman() - ) - return parachainApi.createType('Getter', { trusted: getterSigned }) -} - -export const getSidechainNonce = async ( - context: IntegrationTestContext, - primeIdentity: CorePrimitivesIdentity -): Promise => { - const request = createJsonRpcRequest( - 'author_getNextNonce', - [base58Encode(hexToU8a(context.mrEnclave)), primeIdentity.toHex()], - nextRequestId(context) - ) - const res = await sendRequest(context.tee, request, context.api) - const nonceHex = res.value.toHex() - let nonce = 0 - - if (nonceHex) { - nonce = context.api - .createType( - 'Index', - '0x' + nonceHex.slice(2)?.match(/../g)?.reverse().join('') - ) - .toNumber() - } - - return context.api.createType('Index', nonce) -} - -export const getIdGraphHash = async ( - context: IntegrationTestContext, - teeShieldingKey: KeyObject, - primeIdentity: CorePrimitivesIdentity -): Promise => { - const getterPublic = createPublicGetter( - context.api, - ['id_graph_hash', '(LitentryIdentity)'], - primeIdentity.toHuman() - ) - const getter = context.api.createType('Getter', { public: getterPublic }) - const res = await sendRsaRequestFromGetter(context, teeShieldingKey, getter) - const hash = context.api - .createType('Option', hexToU8a(res.value.toHex())) - .unwrap() - return context.api.createType('H256', hash) -} - -export const sendRequestFromTrustedCall = async ( - context: IntegrationTestContext, - teeShieldingKey: KeyObject, - call: TrustedCallSigned, - isVcDirect = false, - onMessageReceived?: (res: WorkerRpcReturnValue) => void -) => { - // construct trusted operation - const trustedOperation = context.api.createType('TrustedOperation', { - direct_call: call, - }) - console.log( - 'trustedOperation: ', - JSON.stringify(trustedOperation.toHuman(), null, 2) - ) - // create the request parameter - const requestParam = await createAesRequest( - context.api, - context.mrEnclave, - teeShieldingKey, - hexToU8a(aesKey), - trustedOperation.toU8a() - ) - const request = createJsonRpcRequest( - isVcDirect ? 'author_requestVc' : 'author_submitAndWatchAesRequest', - [u8aToHex(requestParam)], - nextRequestId(context) - ) - return sendRequest(context.tee, request, context.api, onMessageReceived) -} - -/** @deprecated use `sendAesRequestFromGetter` instead */ -export const sendRsaRequestFromGetter = async ( - context: IntegrationTestContext, - teeShieldingKey: KeyObject, - getter: Getter -): Promise => { - // important: we don't create the `TrustedOperation` type here, but use `Getter` type directly - // this is what `state_executeGetter` expects in rust - const requestParam = await createRsaRequest( - context.api, - context.mrEnclave, - teeShieldingKey, - true, - getter.toU8a() - ) - const request = createJsonRpcRequest( - 'state_executeGetter', - [u8aToHex(requestParam)], - nextRequestId(context) - ) - // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec - // hopefully we will query correct state - await sleep(1) - return sendRequest(context.tee, request, context.api) -} - -export const sendAesRequestFromGetter = async ( - context: IntegrationTestContext, - teeShieldingKey: KeyObject, - aesKey: Uint8Array, - getter: Getter -): Promise => { - // important: we don't create the `TrustedOperation` type here, but use `Getter` type directly - // this is what `state_executeAesGetter` expects in rust - const requestParam = await createAesRequest( - context.api, - context.mrEnclave, - teeShieldingKey, - aesKey, - getter.toU8a() - ) - const request = createJsonRpcRequest( - 'state_executeAesGetter', - [u8aToHex(requestParam)], - nextRequestId(context) - ) - // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec - // hopefully we will query correct state - await sleep(1) - const res = await sendRequest(context.tee, request, context.api) - const aesOutput = context.api.createType('AesOutput', res.value) - const decryptedValue = decryptWithAes(u8aToHex(aesKey), aesOutput, 'hex') - - return context.api.createType('WorkerRpcReturnValue', { - value: decryptedValue, - do_watch: res.do_watch, - status: res.status, - }) -} - -// get TEE's shielding key directly via RPC -export const getTeeShieldingKey = async (context: IntegrationTestContext) => { - const request = createJsonRpcRequest( - 'author_getShieldingKey', - Uint8Array.from([]), - nextRequestId(context) - ) - const res = await sendRequest(context.tee, request, context.api) - const k = JSON.parse(decodeRpcBytesAsString(res.value)) as { - n: Uint8Array - e: Uint8Array - } - - return createPublicKey({ - key: { - alg: 'RSA-OAEP-256', - kty: 'RSA', - use: 'enc', - n: Buffer.from(k.n.reverse()).toString('base64url'), - e: Buffer.from(k.e.reverse()).toString('base64url'), - }, - format: 'jwk', - }) -} - -// given an encoded trusted operation, construct a rsa request bytes that are sent in RPC request parameters -export const createRsaRequest = async ( - parachainApi: ApiPromise, - mrenclave: string, - teeShieldingKey: KeyObject, - isGetter: boolean, - top: Uint8Array -) => { - let payload - if (isGetter) { - payload = compactAddLength(top) - } else { - payload = compactAddLength( - bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, top)) - ) - } - - return parachainApi - .createType('RsaRequest', { shard: hexToU8a(mrenclave), payload }) - .toU8a() -} - -// given an encoded trusted operation, construct an aes request bytes that are sent in RPC request parameters -export const createAesRequest = async ( - parachainApi: ApiPromise, - mrenclave: string, - teeShieldingKey: KeyObject, - aesKey: Uint8Array, - top: Uint8Array -) => { - const encryptedAesKey = compactAddLength( - bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, aesKey)) - ) - return parachainApi - .createType('AesRequest', { - shard: hexToU8a(mrenclave), - key: encryptedAesKey, - payload: parachainApi - .createType('AesOutput', { - ciphertext: compactAddLength( - hexToU8a( - encryptWithAes( - u8aToHex(aesKey), - hexToU8a(keyNonce), - Buffer.from(top) - ) - ) - ), - aad: hexToU8a('0x'), - nonce: hexToU8a(keyNonce), - }) - .toU8a(), - }) - .toU8a() -} - -export function decodeIdGraph(sidechainRegistry: TypeRegistry, value: Bytes) { - const idgraphBytes = sidechainRegistry.createType( - 'Option', - hexToU8a(value.toHex()) - ) - return sidechainRegistry.createType( - 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', - idgraphBytes.unwrap() - ) -} - -export function getTopHash(parachainApi: ApiPromise, call: TrustedCallSigned) { - const trustedOperation = parachainApi.createType('TrustedOperation', { - direct_call: call, - }) - return blake2AsHex(trustedOperation.toU8a()) -} diff --git a/integration-tests/common/helpers.ts b/integration-tests/common/helpers.ts deleted file mode 100644 index 6b526df..0000000 --- a/integration-tests/common/helpers.ts +++ /dev/null @@ -1,128 +0,0 @@ -import { xxhashAsU8a, blake2AsU8a } from '@polkadot/util-crypto' -import { u8aConcat, u8aToU8a } from '@polkadot/util' -import { Keyring } from '@polkadot/api' -import type { KeyringPair } from '@polkadot/keyring/types' -import type { HexString } from '@polkadot/util/types' -import './config' -import { IntegrationTestContext, JsonRpcRequest } from './common-types' -import { createHash, randomBytes } from 'crypto' -import { ECPairFactory, ECPairInterface } from 'ecpair' -import * as ecc from 'tiny-secp256k1' -import { ethers, Wallet } from 'ethers' -import { Keypair } from '@solana/web3.js' -import { - EthersSigner, - PolkadotSigner, - BitcoinSigner, - SolanaSigner, -} from './utils/crypto' -import { Wallets } from './common-types' -import type { ErrorDetail, StfError } from '@litentry/parachain-api' - -export function blake2128Concat(data: HexString | Uint8Array): Uint8Array { - return u8aConcat(blake2AsU8a(data, 128), u8aToU8a(data)) -} - -export function twox64Concat(data: HexString | Uint8Array): Uint8Array { - return u8aConcat(xxhashAsU8a(data, 64), u8aToU8a(data)) -} - -export function identity(data: HexString | Uint8Array): Uint8Array { - return u8aToU8a(data) -} - -export function createJsonRpcRequest( - method: string, - params: any, - id: number -): JsonRpcRequest { - return { - jsonrpc: '2.0', - method, - params, - id, - } -} - -export function nextRequestId(context: IntegrationTestContext): number { - const nextId = context.requestId + 1 - context.requestId = nextId - return nextId -} - -export function randomEvmWallet(): Wallet { - return ethers.Wallet.createRandom() -} -export function randomSubstrateWallet(): KeyringPair { - const keyring = new Keyring({ type: 'sr25519' }) - return keyring.addFromSeed(randomBytes(32)) -} - -export function randomBitcoinWallet(): ECPairInterface { - const ecPair = ECPairFactory(ecc) - const keyPair = ecPair.makeRandom() - return keyPair -} - -export function genesisSubstrateWallet(name: string): KeyringPair { - const keyring = new Keyring({ type: 'sr25519' }) - const keyPair = keyring.addFromUri(`//${name}`, { name }) - return keyPair -} - -export function genesisSolanaWallet(name: string): Keypair { - let seed = createHash('sha256').update(name).digest() - seed = seed.subarray(0, 32) - const keyPair = Keypair.fromSeed(seed) - return keyPair -} - -export const createWeb3Wallets = (): Wallets => { - const wallets: Wallets = { - evm: {}, - substrate: {}, - bitcoin: {}, - solana: {}, - } - const walletNames = ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve'] - for (const name of walletNames) { - wallets.evm[name] = new EthersSigner(randomEvmWallet()) - wallets.substrate[name] = new PolkadotSigner( - genesisSubstrateWallet(name) - ) - wallets.bitcoin[name] = new BitcoinSigner(randomBitcoinWallet()) - wallets.solana[name] = new SolanaSigner(genesisSolanaWallet(name)) - } - - return wallets -} - -export function stfErrorToString(stfError: StfError): string { - if (stfError.isRequestVCFailed) { - const [_assertionIgnored, errorDetail] = stfError.asRequestVCFailed - - return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}` - } - - if ( - stfError.isActivateIdentityFailed || - stfError.isDeactivateIdentityFailed || - stfError.isSetIdentityNetworksFailed || - stfError.isLinkIdentityFailed || - stfError.isMissingPrivileges || - stfError.isRemoveIdentityFailed || - stfError.isDispatch - ) { - const errorDetail = stfError.value as ErrorDetail - - return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}` - } - - if (stfError.isInvalidNonce) { - const [nonce1, nonce2] = stfError.asInvalidNonce - - return `${stfError.type}: [${nonce1?.toHuman()}, ${nonce2?.toHuman()}]` - } - - return stfError.type -} diff --git a/integration-tests/common/transactions.ts b/integration-tests/common/transactions.ts deleted file mode 100644 index bb2f002..0000000 --- a/integration-tests/common/transactions.ts +++ /dev/null @@ -1,221 +0,0 @@ -import { hexToU8a } from '@polkadot/util' -import type { IntegrationTestContext } from './common-types' - -import { - AddressOrPair, - ApiPromise, - ApiTypes, - FrameSystemEventRecord, - Keyring, - SubmittableExtrinsic, -} from '@litentry/parachain-api' - -// for DI-test -export const subscribeToEventsWithExtHash = async ( - requestIdentifier: string, - context: IntegrationTestContext -): Promise => { - return new Promise((resolve, reject) => { - let blocksToScan = 30 - /* - WARNING:The unsubscribe function is called inside the Promise callback, which is executed each time a new blockHeader is received. - `unsubscribe` is intended to unsubscribe a blockHeader if certain conditions are met. - If you use await, you will actually wait for this function to finish executing. - However, since it doesn't return a Promise, using await doesn't make sense and can lead to problematic code behaviour. - soooooo, don't use await here - */ - const unsubscribe = context.api.rpc.chain.subscribeNewHeads( - async (blockHeader) => { - const shiftedApi = await context.api.at(blockHeader.hash) - - const allBlockEvents = await shiftedApi.query.system.events() - const allExtrinsicEvents = allBlockEvents.filter( - ({ phase }) => phase.isApplyExtrinsic - ) - - const matchingEvent = allExtrinsicEvents.filter( - (eventRecord) => { - const eventData = eventRecord.event.data.toHuman() - return ( - eventData != undefined && - typeof eventData === 'object' && - 'reqExtHash' in eventData && - eventData.reqExtHash === requestIdentifier - ) - } - ) - - if (matchingEvent.length == 0) { - blocksToScan -= 1 - if (blocksToScan < 1) { - reject( - new Error( - `timed out listening for reqExtHash: ${requestIdentifier} in parachain events` - ) - ) - ;(await unsubscribe)() - } - return - } - - resolve(matchingEvent) - ;(await unsubscribe)() - } - ) - }) -} - -// for II-test -export const subscribeToEvents = async ( - section: string, - method: string, - api: ApiPromise -): Promise => { - return new Promise((resolve, reject) => { - let blocksToScan = 15 - const unsubscribe = api.rpc.chain.subscribeNewHeads( - async (blockHeader) => { - const shiftedApi = await api.at(blockHeader.hash) - - const allBlockEvents = await shiftedApi.query.system.events() - const allExtrinsicEvents = allBlockEvents.filter( - ({ phase }) => phase.isApplyExtrinsic - ) - - const matchingEvent = allExtrinsicEvents.filter( - ({ event, phase }) => { - return ( - event.section === section && event.method === method - ) - } - ) - - if (matchingEvent.length == 0) { - blocksToScan -= 1 - if (blocksToScan < 1) { - reject( - new Error( - `timed out listening for event ${section}.${method}` - ) - ) - ;(await unsubscribe)() - } - return - } - - resolve(matchingEvent) - ;(await unsubscribe)() - } - ) - }) -} - -export async function waitForBlock( - api: ApiPromise, - blockNumber: number, - blocksToCheck = 5 -) { - let count = 0 - - return new Promise((resolve, reject) => { - const unsubscribe = api.rpc.chain.subscribeNewHeads(async (header) => { - console.log(`Chain is at block: #${header.number}`) - - if (header.number.toNumber() === blockNumber) { - ;(await unsubscribe)() - resolve() - } - - if (++count === blocksToCheck) { - ;(await unsubscribe)() - reject( - new Error( - `Timeout: Block #${blockNumber} not reached within ${blocksToCheck} blocks.` - ) - ) - } - }) - }) -} - -export async function setAliceAsAdmin(api: ApiPromise) { - // Get keyring of Alice, who is also the sudo in dev chain spec - const keyring = new Keyring({ type: 'sr25519' }) - const alice = keyring.addFromUri('//Alice') - - const tx = await sudoWrapperGC( - api, - api.tx.teebag.setAdmin( - 'esqZdrqhgH8zy1wqYh1aLKoRyoRWLFbX9M62eKfaTAoK67pJ5' - ) - ) - - console.log(`Setting Alice as Admin for Teebag`) - return signAndSend(tx, alice) -} - -export function signAndSend( - tx: SubmittableExtrinsic, - account: AddressOrPair -) { - return new Promise<{ block: string }>(async (resolve, reject) => { - await tx.signAndSend(account, (result) => { - console.log(`Current status is ${result.status}`) - if (result.status.isInBlock) { - console.log( - `Transaction included at blockHash ${result.status.asInBlock}` - ) - } else if (result.status.isFinalized) { - console.log( - `Transaction finalized at blockHash ${result.status.asFinalized}` - ) - resolve({ - block: result.status.asFinalized.toString(), - }) - } else if (result.status.isInvalid) { - reject(`Transaction is ${result.status}`) - } - }) - }) -} - -// After removing the sudo module, we use `EnsureRootOrHalfCouncil` instead of `Sudo`, -// and there are only two council members in litmus-dev/rococo-dev/litentry-dev. -// So only `propose` is required, no vote. -// -// TODO: support to send the `vote extrinsic`, if the number of council members is greater than 2. -export async function sudoWrapperGC( - api: ApiPromise, - tx: SubmittableExtrinsic -) { - const chain = (await api.rpc.system.chain()).toString().toLowerCase() - if (chain != 'rococo-dev') { - const threshold = api.createType('Compact', 1) - const call = api.createType('Call', tx) - return api.tx.council.propose( - threshold, - call, - api.createType('Compact', tx.length) - ) - } else { - return api.tx.sudo.sudo(tx) - } -} - -export async function setScheduledEnclave( - api: ApiPromise, - block: number, - mrenclave: string -) { - const keyring = new Keyring({ type: 'sr25519' }) - const alice = keyring.addFromUri('//Alice') - - const tx = api.tx.teebag.setScheduledEnclave( - 'Identity', - block, - hexToU8a(`0x${mrenclave}`) - ) - - console.log('Schedule Enclave Extrinsic sent') - return signAndSend(tx, alice) -} diff --git a/integration-tests/common/utils/assertion.ts b/integration-tests/common/utils/assertion.ts deleted file mode 100644 index 5e2e684..0000000 --- a/integration-tests/common/utils/assertion.ts +++ /dev/null @@ -1,248 +0,0 @@ -import { hexToU8a, u8aToHex } from '@polkadot/util' -import { assert } from 'chai' -import * as ed from '@noble/ed25519' -import { parseIdGraph } from './identity-helper' -import { CorePrimitivesIdentity } from '@litentry/parachain-api' -import type { IntegrationTestContext } from '../common-types' -import { getIdGraphHash } from '../di-utils' -import type { HexString } from '@polkadot/util/types' -import { aesKey } from '../call' -import colors from 'colors' -import { WorkerRpcReturnValue, StfError } from '@litentry/parachain-api' -import { Bytes } from '@polkadot/types-codec' -import { decryptWithAes } from './crypto' -import { blake2AsHex } from '@polkadot/util-crypto' -import { validateVcSchema } from '@litentry/vc-schema-validator' -import { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api' -import { KeyObject } from 'crypto' -import * as base58 from 'micro-base58' -import { fail } from 'assert' - -export function assertIdGraph( - actual: [ - CorePrimitivesIdentity, - PalletIdentityManagementTeeIdentityContext, - ][], - expected: [CorePrimitivesIdentity, boolean][] -) { - assert.equal(actual.length, expected.length) - expected.forEach((expected, i) => { - assert.deepEqual( - actual[i][0].toJSON(), - expected[0].toJSON(), - 'event idGraph identity should be equal expectedIdentity' - ) - - const idGraphContext = actual[0][1] - assert.isTrue( - idGraphContext.linkBlock.toNumber() > 0, - 'link_block should be greater than 0' - ) - assert.equal( - idGraphContext.status.isActive, - expected[1], - 'isActive should be ' + expected[1] - ) - }) -} - -export async function assertIsInSidechainBlock( - callType: string, - res: WorkerRpcReturnValue -) { - assert.isTrue( - res.status.isTrustedOperationStatus, - `${callType} should be trusted operation status, but is ${res.status.type}` - ) - const status = res.status.asTrustedOperationStatus - console.log(res.toHuman()) - - assert.isTrue( - status[0].isSubmitted || status[0].isInSidechainBlock, - `${callType} should be submitted or in sidechain block, but is ${status[0].type}` - ) -} - -export function assertWorkerError( - context: IntegrationTestContext, - check: (returnValue: StfError) => void, - returnValue: WorkerRpcReturnValue -) { - const errValueDecoded = context.api.createType( - 'StfError', - returnValue.value - ) - check(errValueDecoded) -} - -// a common assertion for all DI requests that might mutate the IdGraph -// returns the `id_graph_hash` in the `returnValue` -export async function assertIdGraphMutationResult( - context: IntegrationTestContext, - teeShieldingKey: KeyObject, - identity: CorePrimitivesIdentity, - returnValue: WorkerRpcReturnValue, - resultType: - | 'LinkIdentityResult' - | 'DeactivateIdentityResult' - | 'ActivateIdentityResult' - | 'SetIdentityNetworksResult', - expectedIdGraph: [CorePrimitivesIdentity, boolean][] -): Promise { - const decodedResult = context.api.createType(resultType, returnValue.value) - assert.isNotNull(decodedResult.mutated_id_graph) - const idGraph = parseIdGraph( - context.sidechainRegistry, - decodedResult.mutated_id_graph, - aesKey - ) - assertIdGraph(idGraph, expectedIdGraph) - const queriedIdGraphHash = ( - await getIdGraphHash(context, teeShieldingKey, identity) - ).toHex() - assert.equal(u8aToHex(decodedResult.id_graph_hash), queriedIdGraphHash) - - console.log(colors.green('assertIdGraphMutationResult passed')) - return u8aToHex(decodedResult.id_graph_hash) -} - -export async function assertVc( - context: IntegrationTestContext, - subject: CorePrimitivesIdentity, - data: Bytes -) { - const results = context.api.createType('RequestVCResult', data) - // step 1 - // decryptWithAes function added 0x prefix - const vcPayload = results.vc_payload - const decryptVcPayload = decryptWithAes(aesKey, vcPayload, 'utf-8').replace( - '0x', - '' - ) - - /* DID format - did:litentry:substrate:0x12345... - did:litentry:evm:0x123456... - did:litentry:twitter:my_twitter_handle - */ - - // step 2 - // check credential subject's DID - const credentialSubjectId = - JSON.parse(decryptVcPayload).credentialSubject.id - const expectSubject = Object.entries(JSON.parse(subject.toString())) - - // step 3 - // convert to DID format - const expectDid = - 'did:litentry:' + expectSubject[0][0] + ':' + expectSubject[0][1] - assert.equal( - expectDid, - credentialSubjectId, - 'Check credentialSubject error: expectDid should be equal to credentialSubject id' - ) - - // step 4 - // extrac proof and vc without proof json - const vcPayloadJson = JSON.parse(decryptVcPayload) - console.log('credential: ', JSON.stringify(vcPayloadJson, null, 2)) - const { proof, ...vcWithoutProof } = vcPayloadJson - - // step 5 - // check vc signature - const signature = Buffer.from(hexToU8a(`0x${proof.proofValue}`)) - const message = Buffer.from(JSON.stringify(vcWithoutProof)) - const vcPubkey = Buffer.from(hexToU8a(proof.verificationMethod)) - const signatureStatus = await ed.verify(signature, message, vcPubkey) - assert.isTrue( - signatureStatus, - 'Check Vc signature error: signature should be valid' - ) - - // step 6 - // lookup the teebag enclave regsitry to check mrenclave and vcPubkey - const parachainBlockHash = await context.api.query.system.blockHash( - vcPayloadJson.parachainBlockNumber - ) - const apiAtVcIssuedBlock = await context.api.at(parachainBlockHash) - const enclaveAccount = trimPrefix( - vcPayloadJson.issuer.id, - 'did:litentry:substrate:' - ) - const registeredEnclave = ( - await apiAtVcIssuedBlock.query.teebag.enclaveRegistry(enclaveAccount) - ).unwrap() - - assert.equal( - vcPayloadJson.issuer.mrenclave, - base58.encode(registeredEnclave.mrenclave), - "Check VC mrenclave: it should equal enclave's mrenclave from parachains enclave registry" - ) - - assert.equal( - proof.verificationMethod, - registeredEnclave.vcPubkey, - "Check VC pubkey: it should equal enclave's vcPubkey from parachains enclave registry" - ) - - // step 7 - // check runtime version is present - assert.deepEqual( - vcPayloadJson.issuer.runtimeVersion, - { parachain: 9191, sidechain: 109 }, - 'Check VC runtime version: it should equal the current defined versions' - ) - - // step 8 - // validate VC against schema - const schemaResult = await validateVcSchema(vcPayloadJson) - - if (schemaResult.errors) - console.log('Schema Validation errors: ', schemaResult.errors) - - assert.isTrue( - schemaResult.isValid, - 'Check Vc payload error: vcPayload should be valid' - ) - - assert.equal( - vcWithoutProof.type[0], - 'VerifiableCredential', - 'Check Vc payload type error: vcPayload type should be VerifiableCredential' - ) - assert.equal( - proof.type, - 'Ed25519Signature2020', - 'Check Vc proof type error: proof type should be Ed25519Signature2020' - ) -} - -export async function assertIdGraphHash( - context: IntegrationTestContext, - teeShieldingKey: KeyObject, - identity: CorePrimitivesIdentity, - idGraph: [ - CorePrimitivesIdentity, - PalletIdentityManagementTeeIdentityContext, - ][] -) { - const idGraphType = context.sidechainRegistry.createType( - 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', - idGraph - ) - const computedIdGraphHash = blake2AsHex(idGraphType.toU8a()) - console.log('computed id graph hash: ', computedIdGraphHash) - - const queriedIdGraphHash = ( - await getIdGraphHash(context, teeShieldingKey, identity) - ).toHex() - console.log('queried id graph hash: ', queriedIdGraphHash) - assert.equal(computedIdGraphHash, queriedIdGraphHash) -} - -function trimPrefix(str: string, prefix: string): string { - if (str.startsWith(prefix)) { - return str.substring(prefix.length) - } - return str -} diff --git a/integration-tests/common/utils/common.ts b/integration-tests/common/utils/common.ts deleted file mode 100644 index d362bc4..0000000 --- a/integration-tests/common/utils/common.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function sleep(secs: number) { - return new Promise((resolve) => { - setTimeout(resolve, secs * 1000) - }) -} diff --git a/integration-tests/common/utils/context.ts b/integration-tests/common/utils/context.ts deleted file mode 100644 index 376d357..0000000 --- a/integration-tests/common/utils/context.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { WsProvider, ApiPromise } from '@litentry/parachain-api' -import { cryptoWaitReady } from '@polkadot/util-crypto' -import { hexToString } from '@polkadot/util' -import WebSocketAsPromised from 'websocket-as-promised' -import WebSocket from 'ws' -import Options from 'websocket-as-promised/types/options' -import { KeyObject } from 'crypto' -import { getSidechainMetadata } from '../call' -import { createWeb3Wallets } from '../helpers' -import type { IntegrationTestContext } from '../common-types' -import { - identity, - vc, - trusted_operations, - sidechain, -} from '@litentry/parachain-api' -import crypto from 'crypto' -import type { HexString } from '@polkadot/util/types' -// maximum block number that we wait in listening events before we timeout -export const defaultListenTimeoutInBlockNumber = 15 - -export async function initWorkerConnection( - endpoint: string -): Promise { - const wsp = new WebSocketAsPromised(endpoint, ({ - createWebSocket: (url: any) => new WebSocket(url), - extractMessageData: (event: any) => event, - packMessage: (data: any) => JSON.stringify(data), - unpackMessage: (data: string | ArrayBuffer | Blob) => - JSON.parse(data.toString()), - attachRequestId: (data: any, requestId: string | number) => - Object.assign({ id: requestId }, data), - extractRequestId: (data: any) => data && data.id, // read requestId from message `id` field - })) - await wsp.open() - return wsp -} - -export async function initIntegrationTestContext( - workerEndpoint: string, - substrateEndpoint: string -): Promise { - const provider = new WsProvider(substrateEndpoint) - await cryptoWaitReady() - - const web3Wallets = createWeb3Wallets() - - const types = { - ...identity.types, - ...vc.types, - ...trusted_operations.types, - ...sidechain.types, - } - - const api = await ApiPromise.create({ - provider, - types, - }) - - const chainIdentifier = api.registry.chainSS58 as number - - const wsp = await initWorkerConnection(workerEndpoint) - const requestId = 1 - - const { sidechainMetaData, sidechainRegistry } = await getSidechainMetadata( - wsp, - api, - requestId - ) - const { mrEnclave, teeShieldingKey } = await getEnclave(api) - return { - tee: wsp, - api, - teeShieldingKey, - mrEnclave, - web3Wallets, - sidechainMetaData, - sidechainRegistry, - chainIdentifier, - requestId, - } -} - -export async function getEnclave(api: ApiPromise): Promise<{ - mrEnclave: HexString - teeShieldingKey: KeyObject -}> { - const enclaveIdentifier = api.createType( - 'Vec', - await api.query.teebag.enclaveIdentifier('Identity') - ) - const primaryEnclave = ( - await api.query.teebag.enclaveRegistry(enclaveIdentifier[0]) - ).unwrap() - - const shieldingPubkeyBytes = api - .createType('Option', primaryEnclave.shieldingPubkey) - .unwrap() - const shieldingPubkey = hexToString(shieldingPubkeyBytes.toHex()) - - const teeShieldingKey = crypto.createPublicKey({ - key: { - alg: 'RSA-OAEP-256', - kty: 'RSA', - use: 'enc', - n: Buffer.from(JSON.parse(shieldingPubkey).n.reverse()).toString( - 'base64url' - ), - e: Buffer.from(JSON.parse(shieldingPubkey).e.reverse()).toString( - 'base64url' - ), - }, - format: 'jwk', - }) - //@TODO mrEnclave should verify from storage - const mrEnclave = primaryEnclave.mrenclave.toHex() - return { - mrEnclave, - teeShieldingKey, - } -} diff --git a/integration-tests/common/utils/crypto.ts b/integration-tests/common/utils/crypto.ts deleted file mode 100644 index dde9d8f..0000000 --- a/integration-tests/common/utils/crypto.ts +++ /dev/null @@ -1,265 +0,0 @@ -import type { HexString } from '@polkadot/util/types' -import { - bufferToU8a, - hexToU8a, - isString, - stringToU8a, - u8aToHex, -} from '@polkadot/util' -import { KeyObject } from 'crypto' -import { AesOutput, CorePrimitivesIdentity } from '@litentry/parachain-api' -import crypto from 'crypto' -import { KeyringPair } from '@polkadot/keyring/types' -import { ethers } from 'ethers' -import { blake2AsU8a } from '@polkadot/util-crypto' -import { Keypair } from '@solana/web3.js' -import nacl from 'tweetnacl' -import { IntegrationTestContext } from './../common-types' -import { buildIdentityHelper } from './identity-helper' -import { ECPairInterface } from 'ecpair' -import * as bitcoinMessage from 'bitcoinjs-message' -import { isHexString } from 'ethers/lib/utils' -export type KeypairType = - | 'ed25519' - | 'sr25519' - | 'ecdsa' - | 'ethereum' - | 'bitcoin' - -export function encryptWithTeeShieldingKey( - teeShieldingKey: KeyObject, - plaintext: Uint8Array -): Buffer { - return crypto.publicEncrypt( - { - key: teeShieldingKey, - padding: crypto.constants.RSA_PKCS1_OAEP_PADDING, - oaepHash: 'sha256', - }, - plaintext - ) -} - -// A lazy version without aad. Append the tag to be consistent with rust implementation -export function encryptWithAes( - key: HexString, - nonce: Uint8Array, - cleartext: Buffer -): HexString { - const secretKey = crypto.createSecretKey(hexToU8a(key)) - const cipher = crypto.createCipheriv('aes-256-gcm', secretKey, nonce, { - authTagLength: 16, - }) - let encrypted = cipher.update(cleartext.toString('hex'), 'hex', 'hex') - encrypted += cipher.final('hex') - encrypted += cipher.getAuthTag().toString('hex') - return `0x${encrypted}` -} - -export function decryptWithAes( - key: HexString, - aesOutput: AesOutput, - type: 'hex' | 'utf-8' -): HexString { - const secretKey = crypto.createSecretKey(hexToU8a(key)) - const tagSize = 16 - const ciphertext = aesOutput.ciphertext - ? aesOutput.ciphertext - : hexToU8a('0x') - - const nonce = aesOutput.nonce ? aesOutput.nonce : hexToU8a('0x') - const aad = aesOutput.aad ? aesOutput.aad : hexToU8a('0x') - - // notice!!! extract author_tag from ciphertext - // maybe this code only works with rust aes encryption - const authorTag = ciphertext.subarray(ciphertext.length - tagSize) - - const decipher = crypto.createDecipheriv('aes-256-gcm', secretKey, nonce, { - authTagLength: tagSize, - }) - decipher.setAAD(aad) - decipher.setAuthTag(authorTag) - - const part1 = decipher.update( - ciphertext.subarray(0, ciphertext.length - tagSize), - undefined, - type - ) - const part2 = decipher.final(type) - - return `0x${part1 + part2}` -} - -export interface Signer { - getAddressRaw(): Uint8Array - sign(message: HexString | string | Uint8Array): Promise - type(): KeypairType - getAddressInSubstrateFormat(): Uint8Array - getIdentity(api: IntegrationTestContext): Promise -} - -export class PolkadotSigner implements Signer { - keypair: KeyringPair - - constructor(keypair: KeyringPair) { - this.keypair = keypair - } - - getAddressRaw(): Uint8Array { - return this.keypair.addressRaw - } - - sign(message: HexString | string | Uint8Array): Promise { - return new Promise((resolve) => resolve(this.keypair.sign(message))) - } - - type(): KeypairType { - return this.keypair.type - } - - getAddressInSubstrateFormat(): Uint8Array { - return this.getAddressRaw() - } - - getIdentity( - context: IntegrationTestContext - ): Promise { - return buildIdentityHelper( - u8aToHex(this.getAddressRaw()), - 'Substrate', - context - ) - } -} - -export class EthersSigner implements Signer { - wallet: ethers.Wallet - - constructor(wallet: ethers.Wallet) { - this.wallet = wallet - } - - getAddressRaw(): Uint8Array { - return hexToU8a(this.wallet.address) - } - - sign(message: HexString | string | Uint8Array): Promise { - return this.wallet.signMessage(message).then((sig) => { - return hexToU8a(sig) - }) - } - - type(): KeypairType { - return 'ethereum' - } - - getAddressInSubstrateFormat(): Uint8Array { - const prefix = stringToU8a('evm:') - const address = this.getAddressRaw() - const merged = new Uint8Array(prefix.length + address.length) - merged.set(prefix) - merged.set(address, 4) - return blake2AsU8a(merged, 256) - } - - getIdentity( - context: IntegrationTestContext - ): Promise { - return buildIdentityHelper( - u8aToHex(this.getAddressRaw()), - 'Evm', - context - ) - } -} - -export class BitcoinSigner implements Signer { - keypair: ECPairInterface - - constructor(keypair: ECPairInterface) { - this.keypair = keypair - } - - getAddressRaw(): Uint8Array { - return bufferToU8a(this.keypair.publicKey) - } - - sign(message: HexString | string | Uint8Array): Promise { - return new Promise((resolve, reject) => { - if (isString(message)) { - // produce deterministic signatures - const sig = bitcoinMessage.sign( - message, - this.keypair.privateKey!, - this.keypair.compressed - ) - resolve(sig) - } else { - reject('wrong message type') - } - }) - } - - type(): KeypairType { - return 'bitcoin' - } - - getAddressInSubstrateFormat(): Uint8Array { - return blake2AsU8a(this.getAddressRaw(), 256) - } - - getIdentity( - context: IntegrationTestContext - ): Promise { - return buildIdentityHelper( - u8aToHex(this.getAddressRaw()), - 'Bitcoin', - context - ) - } -} - -export class SolanaSigner implements Signer { - keypair: Keypair - - constructor(keypair: Keypair) { - this.keypair = keypair - } - - getAddressRaw(): Uint8Array { - return this.keypair.publicKey.toBytes() - } - - sign(message: HexString | string | Uint8Array): Promise { - return new Promise((resolve) => - resolve( - nacl.sign.detached( - isHexString(message) - ? hexToU8a(message as HexString) - : isString(message) - ? stringToU8a(message) - : message, - this.keypair.secretKey - ) - ) - ) - } - - type(): KeypairType { - return 'ed25519' - } - - getAddressInSubstrateFormat(): Uint8Array { - return this.getAddressRaw() - } - - getIdentity( - context: IntegrationTestContext - ): Promise { - return buildIdentityHelper( - u8aToHex(this.getAddressRaw()), - 'Solana', - context - ) - } -} diff --git a/integration-tests/common/utils/identity-helper.ts b/integration-tests/common/utils/identity-helper.ts deleted file mode 100644 index 47f5051..0000000 --- a/integration-tests/common/utils/identity-helper.ts +++ /dev/null @@ -1,284 +0,0 @@ -import { u8aToHex } from '@polkadot/util' -import { blake2AsHex } from '@polkadot/util-crypto' -import type { IntegrationTestContext } from '../common-types' -import { AesOutput } from '@litentry/parachain-api' -import { decryptWithAes, Signer } from './crypto' -import { ethers } from 'ethers' -import type { TypeRegistry } from '@polkadot/types' -import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api' -import type { - LitentryValidationData, - CorePrimitivesIdentity, -} from '@litentry/parachain-api' -import type { HexString } from '@polkadot/util/types' - -// blake2_256( + + ) -export function generateVerificationMessage( - context: IntegrationTestContext, - signer: CorePrimitivesIdentity, - identity: CorePrimitivesIdentity, - sidechainNonce: number, - options?: { prettifiedMessage?: boolean } -): string { - const _options = { prettifiedMessage: false, ...options } - const encodedIdentity = context.api - .createType('CorePrimitivesIdentity', identity) - .toU8a() - const encodedWho = context.api - .createType('CorePrimitivesIdentity', signer) - .toU8a() - const encodedSidechainNonce = context.api.createType( - 'Index', - sidechainNonce - ) - const msg = Buffer.concat([ - encodedSidechainNonce.toU8a(), - encodedWho, - encodedIdentity, - ]) - const hash = blake2AsHex(msg, 256) - - if (_options.prettifiedMessage) { - return `Token: ${hash}` - } - - return hash -} - -export async function buildIdentityHelper( - address: HexString | string, - type: CorePrimitivesIdentity['type'], - context: IntegrationTestContext -): Promise { - const identity = { - [type]: address, - } - return context.api.createType('CorePrimitivesIdentity', identity) -} - -export function parseIdGraph( - sidechainRegistry: TypeRegistry, - idGraphOutput: AesOutput, - aesKey: HexString -): [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] { - const decryptedIdGraph = decryptWithAes(aesKey, idGraphOutput, 'hex') - const idGraph: [ - CorePrimitivesIdentity, - PalletIdentityManagementTeeIdentityContext, - ][] = sidechainRegistry.createType( - 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', - decryptedIdGraph - ) - - return idGraph -} - -type Web2ValidationConfig = - | { - identityType: 'Discord' - context: IntegrationTestContext - signerIdentitity: CorePrimitivesIdentity - linkIdentity: CorePrimitivesIdentity - verificationType: 'PublicMessage' | 'OAuth2' - validationNonce: number - } - | { - identityType: 'Twitter' - context: IntegrationTestContext - signerIdentitity: CorePrimitivesIdentity - linkIdentity: CorePrimitivesIdentity - verificationType: 'PublicTweet' - validationNonce: number - } - | { - identityType: 'Twitter' - context: IntegrationTestContext - signerIdentitity: CorePrimitivesIdentity - linkIdentity: CorePrimitivesIdentity - verificationType: 'OAuth2' - validationNonce: number - oauthState: string - } - -export async function buildWeb2Validation( - config: Web2ValidationConfig -): Promise { - const { context, signerIdentitity, linkIdentity, validationNonce } = config - const msg = generateVerificationMessage( - context, - signerIdentitity, - linkIdentity, - validationNonce - ) - console.log(`post verification msg to ${config.identityType}:`, msg) - - if (config.identityType === 'Discord') { - const discordValidationData = { - Web2Validation: { - Discord: {}, - }, - } - - if (config.verificationType === 'PublicMessage') { - discordValidationData.Web2Validation.Discord = { - PublicMessage: { - channel_id: `0x${Buffer.from('919848392035794945', 'utf8').toString('hex')}`, - message_id: `0x${Buffer.from('1', 'utf8').toString('hex')}`, - guild_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, - }, - } - } else { - discordValidationData.Web2Validation.Discord = { - OAuth2: { - code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, - redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, - }, - } - } - - return context.api.createType( - 'LitentryValidationData', - discordValidationData - ) - } else { - const twitterValidationData = { - Web2Validation: { - Twitter: {}, - }, - } - - if (config.verificationType === 'PublicTweet') { - twitterValidationData.Web2Validation.Twitter = { - PublicTweet: { - tweet_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, - }, - } - } else { - twitterValidationData.Web2Validation.Twitter = { - OAuth2: { - code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, - state: config.oauthState, - redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, - }, - } - } - - return context.api.createType( - 'LitentryValidationData', - twitterValidationData - ) - } -} - -export async function buildValidations( - context: IntegrationTestContext, - signerIdentitity: CorePrimitivesIdentity, - linkIdentity: CorePrimitivesIdentity, - startingSidechainNonce: number, - network: 'ethereum' | 'substrate' | 'bitcoin' | 'solana', - signer?: Signer, - options?: { prettifiedMessage?: boolean } -): Promise { - const _options = { prettifiedMessage: false, ...options } - const validationNonce = startingSidechainNonce++ - - const msg = generateVerificationMessage( - context, - signerIdentitity, - linkIdentity, - validationNonce - ) - if (network === 'ethereum') { - const evmValidationData = { - Web3Validation: { - Evm: { - message: '', - signature: { - Ethereum: '' as HexString, - }, - }, - }, - } - evmValidationData.Web3Validation.Evm.message = msg - const msgHash = ethers.utils.arrayify(msg) - const evmSignature = u8aToHex(await signer!.sign(msgHash)) - - evmValidationData!.Web3Validation.Evm.signature.Ethereum = evmSignature - - return context.api.createType( - 'LitentryValidationData', - evmValidationData - ) - } - - if (network === 'substrate') { - const substrateValidationData = { - Web3Validation: { - Substrate: { - message: '', - signature: { - Sr25519: '' as HexString, - }, - }, - }, - } - console.log('post verification msg to substrate: ', msg) - substrateValidationData.Web3Validation.Substrate.message = msg - const substrateSignature = await signer!.sign(msg) - substrateValidationData!.Web3Validation.Substrate.signature.Sr25519 = - u8aToHex(substrateSignature) - - return context.api.createType( - 'LitentryValidationData', - substrateValidationData - ) - } - - if (network === 'bitcoin') { - const bitcoinValidationData = { - Web3Validation: { - Bitcoin: { - message: '', - signature: { - Bitcoin: '' as HexString, - }, - }, - }, - } - bitcoinValidationData.Web3Validation.Bitcoin.message = msg - // we need to sign the hex string without `0x` prefix, the signature is base64-encoded string - const bitcoinSignature = await signer!.sign(msg.substring(2)) - bitcoinValidationData!.Web3Validation.Bitcoin.signature.Bitcoin = - u8aToHex(bitcoinSignature) - - return context.api.createType( - 'LitentryValidationData', - bitcoinValidationData - ) - } - - if (network === 'solana') { - const solanaValidationData = { - Web3Validation: { - Solana: { - message: '', - signature: { - Ed25519: '' as HexString, - }, - }, - }, - } - console.log('post verification msg to solana: ', msg) - solanaValidationData.Web3Validation.Solana.message = msg - const solanaSignature = await signer!.sign(msg) - solanaValidationData!.Web3Validation.Solana.signature.Ed25519 = - u8aToHex(solanaSignature) - - return context.api.createType( - 'LitentryValidationData', - solanaValidationData - ) - } - - throw new Error(`[buildValidation]: Unsupported network ${network}.`) -} diff --git a/integration-tests/common/utils/index.ts b/integration-tests/common/utils/index.ts deleted file mode 100644 index a33983d..0000000 --- a/integration-tests/common/utils/index.ts +++ /dev/null @@ -1,15 +0,0 @@ -import '../config' - -// in order to handle self-signed certificates we need to turn off the validation -// TODO add self signed certificate ?? -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' - -export * from './assertion' -export * from './common' -export * from './context' -export * from './crypto' -export * from './identity-helper' -export * from './integration-setup' -export * from './storage' -export * from './vc-helper' -export * from './type-creators' diff --git a/integration-tests/common/utils/integration-setup.ts b/integration-tests/common/utils/integration-setup.ts deleted file mode 100644 index 7fc2c9f..0000000 --- a/integration-tests/common/utils/integration-setup.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { ApiPromise } from '@litentry/parachain-api' -import { KeyObject } from 'crypto' -import WebSocketAsPromised from 'websocket-as-promised' -import type { IntegrationTestContext } from '../common-types' -import type { Metadata, TypeRegistry } from '@polkadot/types' -import type { HexString } from '@polkadot/util/types' -import { initIntegrationTestContext } from './context' - -export function describeLitentry( - title: string, - cb: (context: IntegrationTestContext) => void -) { - describe(title, function () { - // Set timeout to 6000 seconds - this.timeout(6000000) - - const context: IntegrationTestContext = { - mrEnclave: '0x11' as HexString, - api: {} as ApiPromise, - tee: {} as WebSocketAsPromised, - teeShieldingKey: {} as KeyObject, - web3Wallets: {} as any, - sidechainMetaData: {} as Metadata, - sidechainRegistry: {} as TypeRegistry, - // default LitentryRococo - chainIdentifier: 42, - requestId: 0, - } - - before('Starting Litentry(parachain&tee)', async function () { - //env url - - const tmp = await initIntegrationTestContext( - process.env.WORKER_ENDPOINT!, - process.env.NODE_ENDPOINT! - ) - context.mrEnclave = tmp.mrEnclave - context.api = tmp.api - context.tee = tmp.tee - context.teeShieldingKey = tmp.teeShieldingKey - context.web3Wallets = tmp.web3Wallets - context.sidechainMetaData = tmp.sidechainMetaData - context.sidechainRegistry = tmp.sidechainRegistry - context.chainIdentifier = tmp.chainIdentifier - }) - - after(() => Promise.resolve()) - - cb(context) - }) -} diff --git a/integration-tests/common/utils/storage.ts b/integration-tests/common/utils/storage.ts deleted file mode 100644 index 58fa864..0000000 --- a/integration-tests/common/utils/storage.ts +++ /dev/null @@ -1,153 +0,0 @@ -import { u8aToHex, u8aConcat } from '@polkadot/util' -import { xxhashAsU8a } from '@polkadot/util-crypto' -import { - StorageEntryMetadataV14, - SiLookupTypeId, - StorageHasherV14, -} from '@polkadot/types/interfaces' -import { sendRequest } from '../call' -import { - blake2128Concat, - twox64Concat, - identity, - createJsonRpcRequest, - nextRequestId, -} from '../helpers' -import type { IntegrationTestContext } from '../common-types' -import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api' -import type { CorePrimitivesIdentity } from '@litentry/parachain-api' -import type { HexString } from '@polkadot/util/types' -import type { Metadata } from '@polkadot/types' - -const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)) - -import * as base58 from 'micro-base58' - -//sidechain storage utils -export function buildStorageEntry( - metadata: Metadata, - prefix: string, - method: string -): StorageEntryMetadataV14 | null { - for (const pallet of metadata.asV14.pallets) { - if (pallet.name.toString() == prefix) { - const storage = pallet.storage.unwrap() - - for (const item of storage.items) { - if (item.name.toString() == method) { - return item - } - } - } - } - return null -} - -export function buildStorageKey( - metadata: Metadata, - prefix: string, - method: string, - keyTypeId?: SiLookupTypeId, - hashers?: Array, - input?: Array -): Uint8Array { - let storageKey = u8aConcat( - xxhashAsU8a(prefix, 128), - xxhashAsU8a(method, 128) - ) - if (keyTypeId && hashers && input) { - const keyTypeIds = - hashers.length === 1 - ? [keyTypeId] - : metadata.registry.lookup.getSiType(keyTypeId).def.asTuple - for (let i = 0; i < keyTypeIds.length; i++) { - const theKeyTypeId = keyTypeIds[i] - const theHasher = hashers[i].toString() - const theKeyItem = input[i] - // get the scale encoded input data by encoding the input - const theKeyType = metadata.registry.createLookupType(theKeyTypeId) - const theKeyItemEncoded = metadata.registry - .createType(theKeyType, theKeyItem) - .toU8a() - // apply hasher - let theKeyItemAppliedHasher - if (theHasher == 'Blake2_128Concat') { - theKeyItemAppliedHasher = blake2128Concat(theKeyItemEncoded) - } else if (theHasher == 'Twox64Concat') { - theKeyItemAppliedHasher = twox64Concat(theKeyItemEncoded) - } else if (theHasher == 'Identity') { - theKeyItemAppliedHasher = identity(theKeyItemEncoded) - } else { - throw new Error(`The hasher ${theHasher} is not support.`) - } - storageKey = u8aConcat(storageKey, theKeyItemAppliedHasher) - } - } - return storageKey -} -export async function buildStorageHelper( - metadata: Metadata, - prefix: string, - method: string, - ...input: Array -): Promise { - const storageEntry = buildStorageEntry(metadata, prefix, method) - if (!storageEntry) { - throw new Error('Can not find the storage entry from metadata') - } - let storageKey - - if (storageEntry.type.isPlain) { - storageKey = buildStorageKey(metadata, prefix, method) - } else if (storageEntry.type.isMap) { - const { hashers, key } = storageEntry.type.asMap - if (input.length != hashers.length) { - throw new Error('The `input` param is not correct') - } - storageKey = buildStorageKey( - metadata, - prefix, - method, - key, - hashers, - input - ) - } else { - throw new Error('Only support plain and map type') - } - console.debug(`storage key: ${u8aToHex(storageKey)}`) - return u8aToHex(storageKey) -} - -export async function checkIdGraph( - context: IntegrationTestContext, - pallet: string, - method: string, - subject: CorePrimitivesIdentity, - identity: HexString -): Promise { - await sleep(6000) - const storageKey = await buildStorageHelper( - context.sidechainMetaData, - pallet, - method, - subject, - identity - ) - - const base58mrEnclave = base58.encode( - Buffer.from(context.mrEnclave.slice(2), 'hex') - ) - - const request = createJsonRpcRequest( - 'state_getStorage', - [base58mrEnclave, storageKey], - nextRequestId(context) - ) - const resp = await sendRequest(context.tee, request, context.api) - const idGraph = context.sidechainRegistry.createType( - 'PalletIdentityManagementTeeIdentityContext', - resp.value - ) - return idGraph -} diff --git a/integration-tests/common/utils/type-creators.ts b/integration-tests/common/utils/type-creators.ts deleted file mode 100644 index 353bee4..0000000 --- a/integration-tests/common/utils/type-creators.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { u8aToHex, hexToU8a, stringToU8a } from '@polkadot/util' -import type { ApiPromise } from '@polkadot/api' -import type { LitentryMultiSignature } from '@litentry/parachain-api' -import type { Signer } from './crypto' - -export async function createLitentryMultiSignature( - api: ApiPromise, - args: { signer: Signer; payload: Uint8Array | string } -): Promise { - const { signer, payload } = args - const signerType = signer.type() - - // Sign Bytes: - // For Bitcoin, sign as hex with no prefix; for other types, convert it to raw bytes - if (payload instanceof Uint8Array) { - const signature = await signer.sign( - signerType === 'bitcoin' ? u8aToHex(payload).substring(2) : payload - ) - - return api.createType('LitentryMultiSignature', { - [signerType]: signature, - }) - } - - // Sign hex: - // Remove the prefix for bitcoin signature, and use raw bytes for other types - if (payload.startsWith('0x')) { - const signature = await signer.sign( - signerType === 'bitcoin' ? payload.substring(2) : hexToU8a(payload) - ) - - return api.createType('LitentryMultiSignature', { - [signerType]: signature, - }) - } - - // Sign string: - // For Bitcoin, pass it as it is, for other types, convert it to raw bytes - const signature = await signer.sign( - signerType === 'bitcoin' ? payload : stringToU8a(payload) - ) - - return api.createType('LitentryMultiSignature', { - [signerType]: signature, - }) -} diff --git a/integration-tests/common/utils/vc-helper.ts b/integration-tests/common/utils/vc-helper.ts deleted file mode 100644 index 0030376..0000000 --- a/integration-tests/common/utils/vc-helper.ts +++ /dev/null @@ -1,353 +0,0 @@ -// @todo move to a better place, and make it more generic, at least define the type -export const mockBatchAssertion = [ - { - description: 'request_batch_vc trial test', - assertion: [{ A7: '5' }, { A8: ['Litentry'] }, { A20: 'A20' }], - }, - { - description: - 'Have identified at least one account/address in both Web2 and Web3.', - assertion: { - A1: 'A1', - }, - }, - { - description: 'The user is a member of Litentry Discord.', - assertion: { - A2: '807161594245152800', - }, - }, - - { - description: - 'Have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882', - assertion: { - A3: ['A3', 'A3', 'A3'], - }, - }, - { - description: 'The length of time a user continues to hold LIT token', - assertion: { - A4: '10', - }, - }, -] - -// https://github.com/litentry/litentry-parachain/tree/dev/tee-worker/litentry/core/assertion-build/src -export const mockAssertions = [ - { - description: - 'Have identified at least one account/address in both Web2 and Web3.', - assertion: { - A1: 'A1', - }, - }, - { - description: 'The user is a member of Litentry Discord.', - assertion: { - A2: '807161594245152800', - }, - }, - - { - description: - 'Have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882', - assertion: { - A3: ['A3', 'A3', 'A3'], - }, - }, - - // litentry-archive - { - description: - 'The user is an early bird user of the IdentityHub EVM version and has generated at least 1 credential during 2023 Aug 14th ~ Aug 21st.', - assertion: { - A20: 'A20', - }, - }, - - // Achainable - { - description: `A trader or liquidity provider of Uniswap V2 or V3 - Uniswap V2 Factory Contract: 0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f - Uniswap V3 Factory Contract: 0x1f98431c8ad98523631ae4a59f267346ea31f984`, - assertion: { - Achainable: { - Basic: { - name: 'Uniswap V2/V3 user', - chain: ['Ethereum'], - }, - }, - }, - }, - { - description: 'The number of ETH tokens hold > 0', - assertion: { - Achainable: { - Amount: { - name: 'Balance over {amount}', - chain: ['Ethereum'], - amount: '0', - }, - }, - }, - }, - { - description: - 'The class of year that Ethereum account was created (must have on-chain records)', - assertion: { - Achainable: { - ClassOfYear: { - name: 'Account created between {dates}', - chain: ['Ethereum'], - }, - }, - }, - }, - { - description: 'A deployer of a smart contract on Ethereum', - assertion: { - Achainable: { - Amount: { - name: 'Created over {amount} contracts', - chain: ['Ethereum'], - amount: '0', - }, - }, - }, - }, - { - description: 'A deployer of a smart contract on Ethereum', - assertion: { - Achainable: { - AmountToken: { - name: 'LIT Holding Amount', - chain: ['Litentry', 'Litmus'], - amount: '0', - }, - }, - }, - }, - - { - description: 'The length of time a user continues to hold LIT token', - assertion: { - A4: '10', - }, - }, - { - description: "The range of the user's Twitter follower count", - assertion: { - A6: [], - }, - }, - { - description: 'The length of time a user continues to hold DOT token', - assertion: { - A7: '5', - }, - }, - { - description: - 'The range of number of transactions a user has made for a specific token on all supported networks(Litentry)', - assertion: { - A8: ['Litentry'], - }, - }, - { - description: - 'The user has participated in any Polkadot on-chain governance events', - assertion: { - A14: [], - }, - }, - - // SORA - { - description: - 'Congratulations on your participation in our first quiz in collaboration with our partner, SORA. You have embarked on an exciting educational journey, exploring the world of DeFi & Web3 Identity, we truly appreciate your curiosity and dedication.', - assertion: { - GenericDiscordRole: { - SoraQuiz: 'Attendee', - }, - }, - }, - // VIP3 - { - description: 'VIP3 Silver Card Holder', - assertion: { - VIP3MembershipCard: 'Silver', - }, - }, - // BNB domain-nodereal - { - description: 'Holding a certain amount of bnb domain names', - assertion: { - BnbDomainHolding: 'BnbDomainHolding', - }, - }, - { - description: 'Holding a certain amount of 000-999.bnb domain names', - assertion: { - BnbDigitDomainClub: 'Bnb999ClubMember', - }, - }, - // OneBlock - { - description: - 'A participant to the course co-created by OneBlock+ and Parity', - assertion: { - Oneblock: 'CourseCompletion', - }, - }, - // Geniidata - { - description: 'NFT holder', - assertion: { - Brc20AmountHolder: [], - }, - }, - - // NftHolder - { - description: 'You are a holder of a certain kind of NFT', - assertion: { - NftHolder: 'WeirdoGhostGang', - }, - }, - { - description: 'You are a holder of a certain kind of NFT', - assertion: { - NftHolder: 'Club3Sbt', - }, - }, - { - description: 'You are a holder of a certain kind of NFT', - assertion: { - NftHolder: 'MFan', - }, - }, - { - description: 'You are a holder of a certain kind of NFT', - assertion: { - NftHolder: 'Mvp', - }, - }, - - // TokenHoldingAmount - { - description: 'The amount of TRX you are holding', - assertion: { - TokenHoldingAmount: 'TRX', - }, - }, - { - description: 'The amount of BNB you are holding', - assertion: { - TokenHoldingAmount: 'BNB', - }, - }, - { - description: 'The amount of ETH you are holding', - assertion: { - TokenHoldingAmount: 'ETH', - }, - }, - { - description: 'The amount of LIT you are holding', - assertion: { - TokenHoldingAmount: 'LIT', - }, - }, - { - description: 'The amount of SOL you are holding', - assertion: { - TokenHoldingAmount: 'SOL', - }, - }, - { - description: 'The amount of NFP you are holding', - assertion: { - TokenHoldingAmount: 'NFP', - }, - }, - { - description: 'The amount of BTC you are holding', - assertion: { - TokenHoldingAmount: 'BTC', - }, - }, - { - description: 'The amount of SHIB you are holding', - assertion: { - TokenHoldingAmount: 'SHIB', - }, - }, - { - description: 'The amount of BEAN you are holding', - assertion: { - TokenHoldingAmount: 'BEAN', - }, - }, - { - description: 'The amount of AN you are holding', - assertion: { - TokenHoldingAmount: 'AN', - }, - }, - { - description: 'The amount of TUNA you are holding', - assertion: { - TokenHoldingAmount: 'TUNA', - }, - }, - - { - description: 'The amount of LIT you are staking', - assertion: { - LITStaking: 'LITStaking', - }, - }, - { - description: 'The amount of a Ton you are holding', - assertion: { - EVMAmountHolding: 'Ton', - }, - }, - - // PlatformUser - { - description: 'You are a user of platform KaratDao', - assertion: { - PlatformUser: 'KaratDao', - }, - }, - { - description: 'You are a user of platform MagicCraft', - assertion: { - PlatformUser: 'MagicCraftStaking', - }, - }, - { - description: 'You are a user of platform DarenMarket', - assertion: { - PlatformUser: 'DarenMarket', - }, - }, - - // CryptoSummary - { - description: 'Generate a summary of your on-chain identity', - assertion: { - CryptoSummary: [], - }, - }, - - // WeirdoGhostGangHolder - { - description: 'You are WeirdoGhostGang NFT holder', - assertion: { - WeirdoGhostGangHolder: [], - }, - }, -] diff --git a/integration-tests/contracts.test.ts b/integration-tests/contracts.test.ts deleted file mode 100644 index adec702..0000000 --- a/integration-tests/contracts.test.ts +++ /dev/null @@ -1,218 +0,0 @@ -import { randomBytes, KeyObject } from 'crypto' -import { step } from 'mocha-steps' -import { buildValidations, initIntegrationTestContext } from './common/utils' -import { assertIsInSidechainBlock, assertVc } from './common/utils/assertion' -import { - getSidechainNonce, - getTeeShieldingKey, - sendRequestFromTrustedCall, - createSignedTrustedCallRequestVc, - createSignedTrustedCallLinkIdentity, -} from './common/di-utils' // @fixme move to a better place -import type { IntegrationTestContext } from './common/common-types' -import { aesKey } from './common/call' -import type { - CorePrimitivesIdentity, - LitentryValidationData, - Web3Network, -} from '@litentry/parachain-api' -import fs from 'fs' -import path from 'path' -import { assert } from 'chai' -import { genesisSubstrateWallet } from './common/helpers' -import { KeyringPair } from '@polkadot/keyring/types' -import { subscribeToEvents } from './common/transactions' -import { encryptWithTeeShieldingKey } from './common/utils/crypto' -import { ethers } from 'ethers' -import { sleep } from './common/utils' -import { Bytes, Vec } from '@polkadot/types-codec' - -describe('Test Vc (direct request)', function () { - let context: IntegrationTestContext = undefined as any - let teeShieldingKey: KeyObject = undefined as any - let aliceSubstrateIdentity: CorePrimitivesIdentity = undefined as any - - let alice: KeyringPair = undefined as any - let contractBytecode = undefined as any - const linkIdentityRequestParams: { - nonce: number - identity: CorePrimitivesIdentity - validation: LitentryValidationData - networks: Bytes | Vec - }[] = [] - this.timeout(6000000) - - before(async () => { - context = await initIntegrationTestContext( - process.env.WORKER_ENDPOINT!, // @fixme evil assertion; centralize env access - process.env.NODE_ENDPOINT! // @fixme evil assertion; centralize env access - ) - teeShieldingKey = await getTeeShieldingKey(context) - aliceSubstrateIdentity = - await context.web3Wallets.substrate.Alice.getIdentity(context) - alice = genesisSubstrateWallet('Alice') - }) - - step('loading tokenmapping contract bytecode', async function () { - const file = path.resolve( - './', - './contracts/token_holding_amount/TokenMapping.sol/TokenMapping.json' - ) - const data = fs.readFileSync(file, 'utf8') - contractBytecode = JSON.parse(data).bytecode - assert.isNotEmpty(contractBytecode) - }) - - step( - 'deploying tokenmapping contract via parachain pallet', - async function () { - const secretValue = 'my-secrets-value' - const secretEncoded = context.api - .createType('String', secretValue) - .toU8a() - const encryptedSecrets = encryptWithTeeShieldingKey( - teeShieldingKey, - secretEncoded - ) - - const secret = '0x' + encryptedSecrets.toString('hex') - - const assertionId = '0x0000000000000000000000000000000000000003' - const createAssertionEventsPromise = subscribeToEvents( - 'evmAssertions', - 'AssertionCreated', - context.api - ) - - const proposal = context.api.tx.evmAssertions.createAssertion( - assertionId, - contractBytecode, - [ - // At least three secrets are required here. - secret, - secret, - secret, - ] - ) - await context.api.tx.developerCommittee - .execute(proposal, proposal.encodedLength) - .signAndSend(alice) - - const event = (await createAssertionEventsPromise).map((e) => e) - assert.equal(event.length, 1) - } - ) - - step('linking identities (alice)', async function () { - let currentNonce = ( - await getSidechainNonce(context, aliceSubstrateIdentity) - ).toNumber() - const getNextNonce = () => currentNonce++ - const evmNonce = getNextNonce() - - const evmIdentity = - await context.web3Wallets.evm.Alice.getIdentity(context) - const evmValidation = await buildValidations( - context, - aliceSubstrateIdentity, - evmIdentity, - evmNonce, - 'ethereum', - context.web3Wallets.evm.Alice - ) - const evmNetworks = context.api.createType('Vec', [ - 'Ethereum', - 'Bsc', - ]) - linkIdentityRequestParams.push({ - nonce: evmNonce, - identity: evmIdentity, - validation: evmValidation, - networks: evmNetworks, - }) - - let counter = 0 - for (const { - nonce, - identity, - validation, - networks, - } of linkIdentityRequestParams) { - counter++ - const requestIdentifier = `0x${randomBytes(32).toString('hex')}` - const linkIdentityCall = await createSignedTrustedCallLinkIdentity( - context.api, - context.mrEnclave, - context.api.createType('Index', nonce), - context.web3Wallets.substrate.Alice, - aliceSubstrateIdentity, - identity.toHex(), - validation.toHex(), - networks.toHex(), - context.api.createType('Option', aesKey).toHex(), - requestIdentifier, - { - withWrappedBytes: false, - withPrefix: counter % 2 === 0, // alternate per entry - } - ) - - const res = await sendRequestFromTrustedCall( - context, - teeShieldingKey, - linkIdentityCall - ) - await assertIsInSidechainBlock('linkIdentityCall', res) - } - }) - - step('requesting VC for deployed contract', async function () { - await sleep(30) - const requestIdentifier = `0x${randomBytes(32).toString('hex')}` - const nonce = ( - await getSidechainNonce(context, aliceSubstrateIdentity) - ).toNumber() - - const abiCoder = new ethers.utils.AbiCoder() - const encodedData = abiCoder.encode(['string'], ['bnb']) - - const assertion = { - dynamic: context.api.createType('DynamicParams', [ - Uint8Array.from( - Buffer.from( - '0000000000000000000000000000000000000003', - 'hex' - ) - ), - encodedData, - true, - ]), - } - - const requestVcCall = await createSignedTrustedCallRequestVc( - context.api, - context.mrEnclave, - context.api.createType('Index', nonce), - context.web3Wallets.substrate.Alice, - aliceSubstrateIdentity, - context.api.createType('Assertion', assertion).toHex(), - context.api.createType('Option', aesKey).toHex(), - requestIdentifier, - { - withWrappedBytes: false, - withPrefix: true, - } - ) - - const res = await sendRequestFromTrustedCall( - context, - teeShieldingKey, - requestVcCall - ) - await assertIsInSidechainBlock( - `${Object.keys(assertion)[0]} requestVcCall`, - res - ) - assertVc(context, aliceSubstrateIdentity, res.value) - }) -}) diff --git a/integration-tests/post-check.test.ts b/integration-tests/post-check.test.ts deleted file mode 100644 index 1fc4c18..0000000 --- a/integration-tests/post-check.test.ts +++ /dev/null @@ -1,174 +0,0 @@ -import WebSocket from 'ws' -import { assert } from 'chai' -import { webcrypto } from 'crypto' -import { ApiPromise, Keyring, WsProvider } from '@polkadot/api' -import { cryptoWaitReady } from '@polkadot/util-crypto' - -import { - identity, - trusted_operations, - sidechain, - vc, -} from '@litentry/parachain-api' -import { - request, - createLitentryIdentityType, - createLitentryValidationDataType, -} from '@litentry/enclave' - -import { nodeEndpoint, enclaveEndpoint } from '../config' -import { u8aToHex, u8aToString } from '@polkadot/util' - -let api: ApiPromise -let keyring: Keyring - -const originalCrypto = globalThis.crypto - -before(async () => { - console.log(`[node] ${nodeEndpoint}`) - console.log(`[worker] ${enclaveEndpoint}`) - console.log(`-----------------------------------`, '\n') - - const wsProvider = new WsProvider(nodeEndpoint) - - api = await ApiPromise.create({ - provider: wsProvider, - // Hardcoded for now until we need to support non-litentry networks - types: Object.assign( - {}, - identity.types, - trusted_operations.types, - sidechain.types, - vc.types - ), - }) - - keyring = new Keyring({ type: 'sr25519' }) - - // - // Web API Mocks for @litentry/enclave - // - - // enable globalThis.crypto.subtle - Object.defineProperty(global, 'crypto', { - value: webcrypto, - writable: true, - }) - // expose global websocket - Object.defineProperty(global, 'WebSocket', { - value: WebSocket, - writable: true, - }) -}) - -after(() => { - api.disconnect() - - // restore globalThis.crypto - Object.defineProperty(global, 'crypto', { - value: originalCrypto, - writable: true, - }) - // expose global websocket - Object.defineProperty(global, 'WebSocket', { - value: undefined, - writable: true, - }) -}) - -/** - * This test implicitly checks for: - * - * 1. clients can connect to the Parachain's Node and the Enclave's Worker over WSS. - * 2. a registered Enclave worker exists in the Parachain's storage. - * 3. the registered Enclave matches the running one. - * - */ -it(`can issue a verifiable-credential for Alice`, async () => { - const alice = keyring.addFromUri('//Alice') - const aliceIdentity = createLitentryIdentityType(api.registry, { - addressOrHandle: alice.address, - type: 'Substrate', - }) - - assert.strictEqual( - u8aToHex(alice.addressRaw), - aliceIdentity.asSubstrate.toHex() - ) - - // Any Enclave operation requires fetching a nonce from `enclaveEndpoint` using the - // shard registered in the `nodeEndpoint`. - // it implicitly ensures that the Enclave is running and correctly registered in the Parachain. - const { send, payloadToSign, txHash } = await request.requestBatchVC(api, { - who: aliceIdentity, - assertions: [ - // lit-holder - api.createType('Assertion', { - A4: '10.00', - }), - ], - }) - - assert.isString(payloadToSign) - const signature = alice.sign(payloadToSign) - - const response = await send({ - signedPayload: u8aToHex(signature), - }) - - assert.strictEqual(response.txHash, txHash) - assert.isArray(response.vcPayloads) - assert.notInstanceOf(response.vcPayloads[0], Error) - assert.instanceOf(response.vcPayloads[0], Uint8Array) - - const vcString = JSON.parse( - u8aToString(response.vcPayloads[0] as Uint8Array) - ) - assert.isArray(vcString['@context']) - assert.isString(vcString.id) -}) - -/** - * This test implicitly checks that the state is readable and consistent - * - * Notice that this test is fixed to the historical state of tee-prod. - */ -it(`[PROD] should have consistent historical state for Alice`, async () => { - const alice = keyring.addFromUri('//Alice') - const aliceIdentity = createLitentryIdentityType(api.registry, { - addressOrHandle: alice.address, - type: 'Substrate', - }) - - assert.strictEqual( - u8aToHex(alice.addressRaw), - aliceIdentity.asSubstrate.toHex() - ) - - const { send, payloadToSign } = await request.getIdGraph(api, { - who: aliceIdentity, - }) - - const signature = alice.sign(payloadToSign) - - const { idGraph } = await send({ - signedPayload: u8aToHex(signature), - }) - - // Alice has at least, the following identities: - const bob = keyring.addFromUri('//Bob') - const eve = keyring.addFromUri('//Eve') - - assert.isTrue( - idGraph.some(([identity]) => identity.asSubstrate.eq(alice.addressRaw)), - 'Alice is not in the graph' - ) - assert.isTrue( - idGraph.some(([identity]) => identity.asSubstrate.eq(bob.addressRaw)), - 'Bob is not in the graph' - ) - assert.isTrue( - idGraph.some(([identity]) => identity.asSubstrate.eq(eve.addressRaw)), - 'Eve is not in the graph' - ) -}) diff --git a/package-lock.json b/package-lock.json index 0259b16..30af14e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,26 +7,89 @@ "name": "@litentry/contracts", "license": "MIT", "devDependencies": { + "@ethersproject/providers": "^5.7.2", + "@litentry/chaindata": "^0.1.1", + "@litentry/parachain-api": "latest", + "@litentry/sidechain-api": "latest", + "@litentry/vc-schema-validator": "^0.0.1", + "@noble/ed25519": "^1.7.3", + "@nomicfoundation/hardhat-ethers": "^3.0.6", + "@nomicfoundation/hardhat-network-helpers": "^1.0.11", "@nomicfoundation/hardhat-toolbox": "^5.0.0", - "@openzeppelin/contracts": "^4.9.0", - "hardhat": "^2.22.5", - "prettier": "^3.3.1", - "prettier-plugin-solidity": "^1.3.1" + "@openzeppelin/contracts": "^4.9.6", + "@polkadot/api": "^10.9.1", + "@polkadot/api-augment": "^10.9.1", + "@polkadot/api-base": "^10.9.1", + "@polkadot/api-derive": "^10.9.1", + "@polkadot/keyring": "^12.2.1", + "@polkadot/rpc-core": "^10.9.1", + "@polkadot/types": "^10.9.1", + "@polkadot/types-augment": "^10.9.1", + "@polkadot/types-codec": "^10.9.1", + "@polkadot/types-create": "^10.9.1", + "@polkadot/types-known": "^10.9.1", + "@polkadot/types-support": "^10.9.1", + "@polkadot/util": "^12.5.1", + "@polkadot/util-crypto": "^12.5.1", + "@solana/web3.js": "^1.91.4", + "@types/chai": "^4.3.3", + "@types/chai-as-promised": "^7.1.8", + "@types/mocha": "^10.0.7", + "@types/node": "^20.4.4", + "@types/ws": "^8.5.3", + "@typescript-eslint/eslint-plugin": "^5.60.0", + "@typescript-eslint/parser": "^5.60.0", + "add": "^2.0.6", + "bitcoinjs-lib": "^6.1.5", + "bitcoinjs-message": "^2.2.0", + "chai": "^4.3.6", + "chai-as-promised": "^8.0.0", + "colors": "^1.4.0", + "cross-env": "^7.0.3", + "dotenv": "^16.0.3", + "ecpair": "^2.1.0", + "eslint": "^8.43.0", + "ethers": "^6.13.1", + "hardhat": "^2.22.8", + "js-base64": "^3.7.5", + "micro-base58": "^0.5.1", + "mocha": "^10.1.0", + "mocha-steps": "^1.3.0", + "prettier": "^3.3.3", + "prettier-plugin-solidity": "^1.3.1", + "scale-ts": "^0.2.11", + "tiny-secp256k1": "^2.2.3", + "ts-node": "^10.9.2", + "tweetnacl": "^1.0.3", + "typescript": "^5.5.4", + "websocket-as-promised": "^2.0.1", + "ws": "^8.17.1", + "zx": "^7.2.3" } }, "node_modules/@adraffy/ens-normalize": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", "dev": true, - "peer": true + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "peer": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -34,6 +97,84 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "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" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@ethereumjs/rlp": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", @@ -233,7 +374,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/properties": "^5.7.0" @@ -534,7 +674,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/abstract-provider": "^5.7.0", "@ethersproject/abstract-signer": "^5.7.0", @@ -563,7 +702,6 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, - "peer": true, "engines": { "node": ">=8.3.0" }, @@ -595,7 +733,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0" @@ -636,7 +773,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@ethersproject/bytes": "^5.7.0", "@ethersproject/logger": "^5.7.0", @@ -852,12 +988,46 @@ "node": ">=14" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "peer": true, "engines": { "node": ">=6.0.0" } @@ -866,20 +1036,83 @@ "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true, - "peer": true + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "peer": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@litentry/chaindata": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@litentry/chaindata/-/chaindata-0.1.1.tgz", + "integrity": "sha512-2v2y1teCdA0rrtYvmZE/JDS5rLZTIfQFEnHJU0Y8gsbWOzmFK04VOPFgMZK5hdiSUZKPlshnWqQ9WVLG7AGtBw==", + "dev": true, + "dependencies": { + "tslib": "^2.3.0" + } + }, + "node_modules/@litentry/parachain-api": { + "version": "0.9.18-11.2", + "resolved": "https://registry.npmjs.org/@litentry/parachain-api/-/parachain-api-0.9.18-11.2.tgz", + "integrity": "sha512-nnmX2o8j9Cbi6truI0CtIZ34dyAAKNGWmTIbfS5oXU3LVq20mdHErE8o9y/0j79yN+yFJwUvLpQMqanm6nwJYQ==", + "dev": true, + "dependencies": { + "@polkadot/api": "^10.9.1", + "@polkadot/api-augment": "^10.9.1", + "@polkadot/api-base": "^10.9.1", + "@polkadot/api-derive": "^10.9.1", + "@polkadot/keyring": "^12.2.1", + "@polkadot/rpc-core": "^10.9.1", + "@polkadot/types": "^10.9.1", + "@polkadot/types-augment": "^10.9.1", + "@polkadot/types-codec": "^10.9.1", + "@polkadot/types-create": "^10.9.1", + "@polkadot/types-known": "^10.9.1", + "@polkadot/types-support": "^10.9.1", + "@polkadot/util": "^12.5.1", + "@polkadot/util-crypto": "^12.5.1" + } + }, + "node_modules/@litentry/sidechain-api": { + "version": "0.9.18-11", + "resolved": "https://registry.npmjs.org/@litentry/sidechain-api/-/sidechain-api-0.9.18-11.tgz", + "integrity": "sha512-iAcCyM8YkVdNjPs+CbhGpeUN2EnvTvvs8+HsiL660OTPRWHwLn7f3MuzrCcjBaHjKErtY2gJ9F/P6pskg5MOrg==", + "dev": true, + "dependencies": { + "@polkadot/api": "^10.9.1", + "@polkadot/api-augment": "^10.9.1", + "@polkadot/api-base": "^10.9.1", + "@polkadot/api-derive": "^10.9.1", + "@polkadot/keyring": "^12.2.1", + "@polkadot/rpc-core": "^10.9.1", + "@polkadot/types": "^10.9.1", + "@polkadot/types-augment": "^10.9.1", + "@polkadot/types-codec": "^10.9.1", + "@polkadot/types-create": "^10.9.1", + "@polkadot/types-known": "^10.9.1", + "@polkadot/types-support": "^10.9.1", + "@polkadot/util": "^12.5.1", + "@polkadot/util-crypto": "^12.5.1" + } + }, + "node_modules/@litentry/vc-schema-validator": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@litentry/vc-schema-validator/-/vc-schema-validator-0.0.1.tgz", + "integrity": "sha512-Utnu2m/IPcGbqpopNsEdB1AvRimoL300dGpk/9g/8P16OemCHYxHE8j+n2JrHS+BUvH9upDiNMy5sbZPmDAAfQ==", + "dev": true, + "peerDependencies": { + "ajv": "^8.12.0", + "ajv-formats": "^2.1.1", + "fast-glob": "^3.3.2", + "tslib": "^2.3.0" + } + }, "node_modules/@metamask/eth-sig-util": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", @@ -931,7 +1164,6 @@ "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", "dev": true, - "peer": true, "dependencies": { "@noble/hashes": "1.3.2" }, @@ -939,12 +1171,23 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@noble/ed25519": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz", + "integrity": "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/@noble/hashes": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true, - "peer": true, "engines": { "node": ">= 16" }, @@ -969,7 +1212,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "peer": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -983,7 +1225,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "peer": true, "engines": { "node": ">= 8" } @@ -993,7 +1234,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "peer": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1003,81 +1243,81 @@ } }, "node_modules/@nomicfoundation/edr": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.4.0.tgz", - "integrity": "sha512-T96DMSogO8TCdbKKctvxfsDljbhFOUKWc9fHJhSeUh71EEho2qR4951LKQF7t7UWEzguVYh/idQr5L/E3QeaMw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.5.2.tgz", + "integrity": "sha512-hW/iLvUQZNTVjFyX/I40rtKvvDOqUEyIi96T28YaLfmPL+3LW2lxmYLUXEJ6MI14HzqxDqrLyhf6IbjAa2r3Dw==", "dev": true, "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.4.0", - "@nomicfoundation/edr-darwin-x64": "0.4.0", - "@nomicfoundation/edr-linux-arm64-gnu": "0.4.0", - "@nomicfoundation/edr-linux-arm64-musl": "0.4.0", - "@nomicfoundation/edr-linux-x64-gnu": "0.4.0", - "@nomicfoundation/edr-linux-x64-musl": "0.4.0", - "@nomicfoundation/edr-win32-x64-msvc": "0.4.0" + "@nomicfoundation/edr-darwin-arm64": "0.5.2", + "@nomicfoundation/edr-darwin-x64": "0.5.2", + "@nomicfoundation/edr-linux-arm64-gnu": "0.5.2", + "@nomicfoundation/edr-linux-arm64-musl": "0.5.2", + "@nomicfoundation/edr-linux-x64-gnu": "0.5.2", + "@nomicfoundation/edr-linux-x64-musl": "0.5.2", + "@nomicfoundation/edr-win32-x64-msvc": "0.5.2" }, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.4.0.tgz", - "integrity": "sha512-7+rraFk9tCqvfemv9Ita5vTlSBAeO/S5aDKOgGRgYt0JEKZlrX161nDW6UfzMPxWl9GOLEDUzCEaYuNmXseUlg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.5.2.tgz", + "integrity": "sha512-Gm4wOPKhbDjGTIRyFA2QUAPfCXA1AHxYOKt3yLSGJkQkdy9a5WW+qtqKeEKHc/+4wpJSLtsGQfpzyIzggFfo/A==", "dev": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.4.0.tgz", - "integrity": "sha512-+Hrc0mP9L6vhICJSfyGo/2taOToy1AIzVZawO3lU8Lf7oDQXfhQ4UkZnkWAs9SVu1eUwHUGGGE0qB8644piYgg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.5.2.tgz", + "integrity": "sha512-ClyABq2dFCsrYEED3/UIO0c7p4H1/4vvlswFlqUyBpOkJccr75qIYvahOSJRM62WgUFRhbSS0OJXFRwc/PwmVg==", "dev": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.4.0.tgz", - "integrity": "sha512-4HUDMchNClQrVRfVTqBeSX92hM/3khCgpZkXP52qrnJPqgbdCxosOehlQYZ65wu0b/kaaZSyvACgvCLSQ5oSzQ==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.5.2.tgz", + "integrity": "sha512-HWMTVk1iOabfvU2RvrKLDgtFjJZTC42CpHiw2h6rfpsgRqMahvIlx2jdjWYzFNy1jZKPTN1AStQ/91MRrg5KnA==", "dev": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.4.0.tgz", - "integrity": "sha512-D4J935ZRL8xfnP3zIFlCI9jXInJ0loDUkCTLeCEbOf2uuDumWDghKNQlF1itUS+EHaR1pFVBbuwqq8hVK0dASg==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.5.2.tgz", + "integrity": "sha512-CwsQ10xFx/QAD5y3/g5alm9+jFVuhc7uYMhrZAu9UVF+KtVjeCvafj0PaVsZ8qyijjqVuVsJ8hD1x5ob7SMcGg==", "dev": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.4.0.tgz", - "integrity": "sha512-6x7HPy+uN5Cb9N77e2XMmT6+QSJ+7mRbHnhkGJ8jm4cZvWuj2Io7npOaeHQ3YHK+TiQpTnlbkjoOIpEwpY3XZA==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.5.2.tgz", + "integrity": "sha512-CWVCEdhWJ3fmUpzWHCRnC0/VLBDbqtqTGTR6yyY1Ep3S3BOrHEAvt7h5gx85r2vLcztisu2vlDq51auie4IU1A==", "dev": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.4.0.tgz", - "integrity": "sha512-3HFIJSXgyubOiaN4MWGXx2xhTnhwlJk0PiSYNf9+L/fjBtcRkb2nM910ZJHTvqCb6OT98cUnaKuAYdXIW2amgw==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.5.2.tgz", + "integrity": "sha512-+aJDfwhkddy2pP5u1ISg3IZVAm0dO836tRlDTFWtvvSMQ5hRGqPcWwlsbobhDQsIxhPJyT7phL0orCg5W3WMeA==", "dev": true, "engines": { "node": ">= 18" } }, "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.4.0.tgz", - "integrity": "sha512-CP4GsllEfXEz+lidcGYxKe5rDJ60TM5/blB5z/04ELVvw6/CK9eLcYeku7HV0jvV7VE6dADYKSdQyUkvd0El+A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.5.2.tgz", + "integrity": "sha512-CcvvuA3sAv7liFNPsIR/68YlH6rrybKzYttLlMr80d4GKJjwJ5OKb3YgE6FdZZnOfP19HEHhsLcE0DPLtY3r0w==", "dev": true, "engines": { "node": ">= 18" @@ -1167,12 +1407,24 @@ "hardhat": "^2.9.4" } }, + "node_modules/@nomicfoundation/hardhat-chai-matchers/node_modules/chai-as-promised": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", + "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "dev": true, + "peer": true, + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, "node_modules/@nomicfoundation/hardhat-ethers": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.6.tgz", "integrity": "sha512-/xzkFQAaHQhmIAYOQmvHBPwL+NkwLzT9gRZBsgWUYeV+E6pzXsBQsHfRYbAZ3XEYare+T7S+5Tg/1KDJgepSkA==", "dev": true, - "peer": true, "dependencies": { "debug": "^4.1.1", "lodash.isequal": "^4.5.0" @@ -1220,7 +1472,6 @@ "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.11.tgz", "integrity": "sha512-uGPL7QSKvxrHRU69dx8jzoBvuztlLCtyFsbgfXIwIjnO3dqZRz2GNMHJoO3C3dIiUNM6jdNF4AUnoQKDscdYrA==", "dev": true, - "peer": true, "dependencies": { "ethereumjs-util": "^7.1.4" }, @@ -1602,1672 +1853,3826 @@ "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", "dev": true }, - "node_modules/@scure/base": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", - "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", + "node_modules/@polkadot-api/client": { + "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/client/-/client-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", + "integrity": "sha512-0fqK6pUKcGHSG2pBvY+gfSS+1mMdjd/qRygAcKI5d05tKsnZLRnmhb9laDguKmGEIB0Bz9vQqNK3gIN/cfvVwg==", "dev": true, - "funding": { - "url": "https://paulmillr.com/funding/" + "optional": true, + "dependencies": { + "@polkadot-api/metadata-builders": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "@polkadot-api/substrate-bindings": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "@polkadot-api/substrate-client": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "@polkadot-api/utils": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" + }, + "peerDependencies": { + "rxjs": ">=7.8.0" } }, - "node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", + "node_modules/@polkadot-api/json-rpc-provider": { + "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", + "integrity": "sha512-EaUS9Fc3wsiUr6ZS43PQqaRScW7kM6DYbuM/ou0aYjm8N9MBqgDbGm2oL6RE1vAVmOfEuHcXZuZkhzWtyvQUtA==", "dev": true, - "peer": true, + "optional": true + }, + "node_modules/@polkadot-api/json-rpc-provider-proxy": { + "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", + "integrity": "sha512-0hZ8vtjcsyCX8AyqP2sqUHa1TFFfxGWmlXJkit0Nqp9b32MwZqn5eaUAiV2rNuEpoglKOdKnkGtUF8t5MoodKw==", + "dev": true, + "optional": true + }, + "node_modules/@polkadot-api/metadata-builders": { + "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", + "integrity": "sha512-BD7rruxChL1VXt0icC2gD45OtT9ofJlql0qIllHSRYgama1CR2Owt+ApInQxB+lWqM+xNOznZRpj8CXNDvKIMg==", + "dev": true, + "optional": true, "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@polkadot-api/substrate-bindings": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "@polkadot-api/utils": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" } }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", + "node_modules/@polkadot-api/substrate-bindings": { + "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", + "integrity": "sha512-N4vdrZopbsw8k57uG58ofO7nLXM4Ai7835XqakN27MkjXMp5H830A1KJE0L9sGQR7ukOCDEIHHcwXVrzmJ/PBg==", "dev": true, - "peer": true, + "optional": true, "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "@noble/hashes": "^1.3.1", + "@polkadot-api/utils": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "@scure/base": "^1.1.1", + "scale-ts": "^1.6.0" } }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "node_modules/@polkadot-api/substrate-bindings/node_modules/scale-ts": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.0.tgz", + "integrity": "sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q==", "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } + "optional": true }, - "node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "node_modules/@polkadot-api/substrate-client": { + "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", + "integrity": "sha512-lcdvd2ssUmB1CPzF8s2dnNOqbrDa+nxaaGbuts+Vo8yjgSKwds2Lo7Oq+imZN4VKW7t9+uaVcKFLMF7PdH0RWw==", + "dev": true, + "optional": true + }, + "node_modules/@polkadot-api/utils": { + "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", + "integrity": "sha512-0CYaCjfLQJTCRCiYvZ81OncHXEKPzAexCMoVloR+v2nl/O2JRya/361MtPkeNLC6XBoaEgLAG9pWQpH3WePzsw==", + "dev": true, + "optional": true + }, + "node_modules/@polkadot/api": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.13.1.tgz", + "integrity": "sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==", "dev": true, - "peer": true, "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" + "@polkadot/api-augment": "10.13.1", + "@polkadot/api-base": "10.13.1", + "@polkadot/api-derive": "10.13.1", + "@polkadot/keyring": "^12.6.2", + "@polkadot/rpc-augment": "10.13.1", + "@polkadot/rpc-core": "10.13.1", + "@polkadot/rpc-provider": "10.13.1", + "@polkadot/types": "10.13.1", + "@polkadot/types-augment": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/types-create": "10.13.1", + "@polkadot/types-known": "10.13.1", + "@polkadot/util": "^12.6.2", + "@polkadot/util-crypto": "^12.6.2", + "eventemitter3": "^5.0.1", + "rxjs": "^7.8.1", + "tslib": "^2.6.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": ">=18" } }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", + "node_modules/@polkadot/api-augment": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-10.13.1.tgz", + "integrity": "sha512-IAKaCp19QxgOG4HKk9RAgUgC/VNVqymZ2GXfMNOZWImZhxRIbrK+raH5vN2MbWwtVHpjxyXvGsd1RRhnohI33A==", "dev": true, "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" + "@polkadot/api-base": "10.13.1", + "@polkadot/rpc-augment": "10.13.1", + "@polkadot/types": "10.13.1", + "@polkadot/types-augment": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/util": "^12.6.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@polkadot/api-augment/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", + "node_modules/@polkadot/api-base": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-10.13.1.tgz", + "integrity": "sha512-Okrw5hjtEjqSMOG08J6qqEwlUQujTVClvY1/eZkzKwNzPelWrtV6vqfyJklB7zVhenlxfxqhZKKcY7zWSW/q5Q==", "dev": true, "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" + "@polkadot/rpc-core": "10.13.1", + "@polkadot/types": "10.13.1", + "@polkadot/util": "^12.6.2", + "rxjs": "^7.8.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@polkadot/api-base/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", + "node_modules/@polkadot/api-derive": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-10.13.1.tgz", + "integrity": "sha512-ef0H0GeCZ4q5Om+c61eLLLL29UxFC2/u/k8V1K2JOIU+2wD5LF7sjAoV09CBMKKHfkLenRckVk2ukm4rBqFRpg==", "dev": true, "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "@polkadot/api": "10.13.1", + "@polkadot/api-augment": "10.13.1", + "@polkadot/api-base": "10.13.1", + "@polkadot/rpc-core": "10.13.1", + "@polkadot/types": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/util": "^12.6.2", + "@polkadot/util-crypto": "^12.6.2", + "rxjs": "^7.8.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@polkadot/api-derive/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", + "node_modules/@polkadot/api/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/keyring": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", + "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", "dev": true, "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" + "@polkadot/util": "12.6.2", + "@polkadot/util-crypto": "12.6.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "12.6.2", + "@polkadot/util-crypto": "12.6.2" } }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@polkadot/keyring/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", + "node_modules/@polkadot/networks": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-12.6.2.tgz", + "integrity": "sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==", "dev": true, "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" + "@polkadot/util": "12.6.2", + "@substrate/ss58-registry": "^1.44.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@polkadot/networks/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "node_modules/@polkadot/rpc-augment": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-10.13.1.tgz", + "integrity": "sha512-iLsWUW4Jcx3DOdVrSHtN0biwxlHuTs4QN2hjJV0gd0jo7W08SXhWabZIf9mDmvUJIbR7Vk+9amzvegjRyIf5+A==", "dev": true, + "dependencies": { + "@polkadot/rpc-core": "10.13.1", + "@polkadot/types": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/util": "^12.6.2", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "node_modules/@polkadot/rpc-augment/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/rpc-core": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-10.13.1.tgz", + "integrity": "sha512-eoejSHa+/tzHm0vwic62/aptTGbph8vaBpbvLIK7gd00+rT813ROz5ckB1CqQBFB23nHRLuzzX/toY8ID3xrKw==", "dev": true, "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" + "@polkadot/rpc-augment": "10.13.1", + "@polkadot/rpc-provider": "10.13.1", + "@polkadot/types": "10.13.1", + "@polkadot/util": "^12.6.2", + "rxjs": "^7.8.1", + "tslib": "^2.6.2" }, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/@polkadot/rpc-core/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "node_modules/@polkadot/rpc-provider": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-10.13.1.tgz", + "integrity": "sha512-oJ7tatVXYJ0L7NpNiGd69D558HG5y5ZDmH2Bp9Dd4kFTQIiV8A39SlWwWUPCjSsen9lqSvvprNLnG/VHTpenbw==", "dev": true, - "peer": true, "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" + "@polkadot/keyring": "^12.6.2", + "@polkadot/types": "10.13.1", + "@polkadot/types-support": "10.13.1", + "@polkadot/util": "^12.6.2", + "@polkadot/util-crypto": "^12.6.2", + "@polkadot/x-fetch": "^12.6.2", + "@polkadot/x-global": "^12.6.2", + "@polkadot/x-ws": "^12.6.2", + "eventemitter3": "^5.0.1", + "mock-socket": "^9.3.1", + "nock": "^13.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@substrate/connect": "0.8.8" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "peer": true + "node_modules/@polkadot/rpc-provider/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "node_modules/@polkadot/types": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-10.13.1.tgz", + "integrity": "sha512-Hfvg1ZgJlYyzGSAVrDIpp3vullgxrjOlh/CSThd/PI4TTN1qHoPSFm2hs77k3mKkOzg+LrWsLE0P/LP2XddYcw==", "dev": true, - "peer": true + "dependencies": { + "@polkadot/keyring": "^12.6.2", + "@polkadot/types-augment": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/types-create": "10.13.1", + "@polkadot/util": "^12.6.2", + "@polkadot/util-crypto": "^12.6.2", + "rxjs": "^7.8.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + } }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "node_modules/@polkadot/types-augment": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-10.13.1.tgz", + "integrity": "sha512-TcrLhf95FNFin61qmVgOgayzQB/RqVsSg9thAso1Fh6pX4HSbvI35aGPBAn3SkA6R+9/TmtECirpSNLtIGFn0g==", "dev": true, - "peer": true + "dependencies": { + "@polkadot/types": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/util": "^12.6.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + } }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "peer": true + "node_modules/@polkadot/types-augment/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/@typechain/ethers-v6": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", - "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", + "node_modules/@polkadot/types-codec": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-10.13.1.tgz", + "integrity": "sha512-AiQ2Vv2lbZVxEdRCN8XSERiWlOWa2cTDLnpAId78EnCtx4HLKYQSd+Jk9Y4BgO35R79mchK4iG+w6gZ+ukG2bg==", "dev": true, - "peer": true, "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" + "@polkadot/util": "^12.6.2", + "@polkadot/x-bigint": "^12.6.2", + "tslib": "^2.6.2" }, - "peerDependencies": { - "ethers": "6.x", - "typechain": "^8.3.2", - "typescript": ">=4.7.0" + "engines": { + "node": ">=18" } }, - "node_modules/@typechain/hardhat": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", - "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", + "node_modules/@polkadot/types-codec/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/types-create": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-10.13.1.tgz", + "integrity": "sha512-Usn1jqrz35SXgCDAqSXy7mnD6j4RvB4wyzTAZipFA6DGmhwyxxIgOzlWQWDb+1PtPKo9vtMzen5IJ+7w5chIeA==", "dev": true, - "peer": true, "dependencies": { - "fs-extra": "^9.1.0" + "@polkadot/types-codec": "10.13.1", + "@polkadot/util": "^12.6.2", + "tslib": "^2.6.2" }, - "peerDependencies": { - "@typechain/ethers-v6": "^0.5.1", - "ethers": "^6.1.0", - "hardhat": "^2.9.9", - "typechain": "^8.3.2" + "engines": { + "node": ">=18" } }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/@polkadot/types-create/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/types-known": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-10.13.1.tgz", + "integrity": "sha512-uHjDW05EavOT5JeU8RbiFWTgPilZ+odsCcuEYIJGmK+es3lk/Qsdns9Zb7U7NJl7eJ6OWmRtyrWsLs+bU+jjIQ==", "dev": true, - "peer": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@polkadot/networks": "^12.6.2", + "@polkadot/types": "10.13.1", + "@polkadot/types-codec": "10.13.1", + "@polkadot/types-create": "10.13.1", + "@polkadot/util": "^12.6.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=10" + "node": ">=18" } }, - "node_modules/@types/bn.js": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", - "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "node_modules/@polkadot/types-known/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/types-support": { + "version": "10.13.1", + "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-10.13.1.tgz", + "integrity": "sha512-4gEPfz36XRQIY7inKq0HXNVVhR6HvXtm7yrEmuBuhM86LE0lQQBkISUSgR358bdn2OFSLMxMoRNoh3kcDvdGDQ==", "dev": true, "dependencies": { - "@types/node": "*" + "@polkadot/util": "^12.6.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@types/chai": { - "version": "4.3.16", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", - "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", - "dev": true, - "peer": true + "node_modules/@polkadot/types-support/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "node_modules/@polkadot/types/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/util": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", + "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", "dev": true, - "peer": true, "dependencies": { - "@types/chai": "*" + "@polkadot/x-bigint": "12.6.2", + "@polkadot/x-global": "12.6.2", + "@polkadot/x-textdecoder": "12.6.2", + "@polkadot/x-textencoder": "12.6.2", + "@types/bn.js": "^5.1.5", + "bn.js": "^5.2.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" } }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "node_modules/@polkadot/util-crypto": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", + "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", "dev": true, - "peer": true, "dependencies": { - "@types/node": "*" + "@noble/curves": "^1.3.0", + "@noble/hashes": "^1.3.3", + "@polkadot/networks": "12.6.2", + "@polkadot/util": "12.6.2", + "@polkadot/wasm-crypto": "^7.3.2", + "@polkadot/wasm-util": "^7.3.2", + "@polkadot/x-bigint": "12.6.2", + "@polkadot/x-randomvalues": "12.6.2", + "@scure/base": "^1.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "12.6.2" } }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "node_modules/@polkadot/util-crypto/node_modules/@noble/curves": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.5.0.tgz", + "integrity": "sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==", "dev": true, - "peer": true, "dependencies": { - "@types/node": "*" + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "node_modules/@polkadot/util-crypto/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, - "peer": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "node_modules/@polkadot/util-crypto/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "peer": true - }, - "node_modules/@types/mocha": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", - "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", - "dev": true, - "peer": true + "node_modules/@polkadot/util/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/@types/node": { - "version": "20.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.1.tgz", - "integrity": "sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==", + "node_modules/@polkadot/wasm-bridge": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz", + "integrity": "sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "@polkadot/wasm-util": "7.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" } }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "node_modules/@polkadot/wasm-bridge/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/wasm-crypto": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz", + "integrity": "sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==", "dev": true, "dependencies": { - "@types/node": "*" + "@polkadot/wasm-bridge": "7.3.2", + "@polkadot/wasm-crypto-asmjs": "7.3.2", + "@polkadot/wasm-crypto-init": "7.3.2", + "@polkadot/wasm-crypto-wasm": "7.3.2", + "@polkadot/wasm-util": "7.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" } }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "node_modules/@polkadot/wasm-crypto-asmjs": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz", + "integrity": "sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==", "dev": true, - "peer": true + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" + } }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true, - "peer": true + "node_modules/@polkadot/wasm-crypto-asmjs/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", - "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "node_modules/@polkadot/wasm-crypto-init": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz", + "integrity": "sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==", "dev": true, "dependencies": { - "@types/node": "*" + "@polkadot/wasm-bridge": "7.3.2", + "@polkadot/wasm-crypto-asmjs": "7.3.2", + "@polkadot/wasm-crypto-wasm": "7.3.2", + "@polkadot/wasm-util": "7.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*", + "@polkadot/x-randomvalues": "*" } }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true, - "peer": true + "node_modules/@polkadot/wasm-crypto-init/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "node_modules/@polkadot/wasm-crypto-wasm": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz", + "integrity": "sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==", "dev": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@polkadot/wasm-util": "7.3.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" } }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "engines": { - "node": ">=0.3.0" - } + "node_modules/@polkadot/wasm-crypto-wasm/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true, - "peer": true + "node_modules/@polkadot/wasm-crypto/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "node_modules/@polkadot/wasm-util": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz", + "integrity": "sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==", "dev": true, "dependencies": { - "debug": "4" + "tslib": "^2.6.2" }, "engines": { - "node": ">= 6.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@polkadot/util": "*" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@polkadot/wasm-util/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/x-bigint": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-12.6.2.tgz", + "integrity": "sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==", "dev": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "@polkadot/x-global": "12.6.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/ajv": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.15.0.tgz", - "integrity": "sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==", + "node_modules/@polkadot/x-bigint/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/x-fetch": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-12.6.2.tgz", + "integrity": "sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==", "dev": true, - "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.3.0", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "@polkadot/x-global": "12.6.2", + "node-fetch": "^3.3.2", + "tslib": "^2.6.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true, - "peer": true, "engines": { - "node": ">=0.4.2" + "node": ">=18" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } + "node_modules/@polkadot/x-fetch/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/@polkadot/x-global": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-12.6.2.tgz", + "integrity": "sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==", "dev": true, + "dependencies": { + "tslib": "^2.6.2" + }, "engines": { - "node": ">=6" + "node": ">=18" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@polkadot/x-global/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/x-randomvalues": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", + "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", "dev": true, "dependencies": { - "type-fest": "^0.21.3" + "@polkadot/x-global": "12.6.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">=18" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@polkadot/util": "12.6.2", + "@polkadot/wasm-util": "*" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@polkadot/x-randomvalues/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/x-textdecoder": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", + "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", "dev": true, + "dependencies": { + "@polkadot/x-global": "12.6.2", + "tslib": "^2.6.2" + }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@polkadot/x-textdecoder/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/@polkadot/x-textencoder": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", + "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@polkadot/x-global": "12.6.2", + "tslib": "^2.6.2" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=18" } }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true, - "peer": true + "node_modules/@polkadot/x-textencoder/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@polkadot/x-ws": { + "version": "12.6.2", + "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-12.6.2.tgz", + "integrity": "sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==", "dev": true, "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "@polkadot/x-global": "12.6.2", + "tslib": "^2.6.2", + "ws": "^8.15.1" }, "engines": { - "node": ">= 8" + "node": ">=18" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "peer": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/@polkadot/x-ws/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "node_modules/@scure/base": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", + "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", "dev": true, - "peer": true, - "engines": { - "node": ">=6" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@scure/bip32": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", + "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", "dev": true, "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@noble/curves": "~1.3.0", + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", + "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", "dev": true, "peer": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "@noble/hashes": "1.3.3" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "peer": true - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", "dev": true, "peer": true, "engines": { - "node": "*" + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", "dev": true, "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true, - "peer": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "node_modules/@sentry/core": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", + "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", "dev": true, - "peer": true + "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" + }, + "engines": { + "node": ">=6" + } }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/hub": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", + "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", "dev": true, - "peer": true, + "dependencies": { + "@sentry/types": "5.30.0", + "@sentry/utils": "5.30.0", + "tslib": "^1.9.3" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=6" } }, - "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "node_modules/@sentry/hub/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@sentry/minimal": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", + "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", "dev": true, - "peer": true, "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "@sentry/hub": "5.30.0", + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@sentry/minimal/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "node_modules/@sentry/node": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", + "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", "dev": true, "dependencies": { - "safe-buffer": "^5.0.1" + "@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" + }, + "engines": { + "node": ">=6" } }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true, - "peer": true + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/@sentry/tracing": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", + "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", "dev": true, - "engines": { - "node": ">=8" + "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" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6" } }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "node_modules/@sentry/tracing/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "node_modules/@sentry/types": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", + "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils": { + "version": "5.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", + "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", + "dev": true, + "dependencies": { + "@sentry/types": "5.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "node_modules/@solana/buffer-layout": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", + "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", "dev": true, "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" + "buffer": "~6.0.3" }, "engines": { - "node": ">=10" + "node": ">=5.10" + } + }, + "node_modules/@solana/web3.js": { + "version": "1.95.2", + "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.95.2.tgz", + "integrity": "sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.24.8", + "@noble/curves": "^1.4.2", + "@noble/hashes": "^1.4.0", + "@solana/buffer-layout": "^4.0.1", + "agentkeepalive": "^4.5.0", + "bigint-buffer": "^1.1.5", + "bn.js": "^5.2.1", + "borsh": "^0.7.0", + "bs58": "^4.0.1", + "buffer": "6.0.3", + "fast-stable-stringify": "^1.0.0", + "jayson": "^4.1.1", + "node-fetch": "^2.7.0", + "rpc-websockets": "^9.0.2", + "superstruct": "^2.0.2" + } + }, + "node_modules/@solana/web3.js/node_modules/@noble/curves": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.5.0.tgz", + "integrity": "sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.4.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@solana/web3.js/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "dev": true, "engines": { - "node": ">=10" + "node": ">= 16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@solana/web3.js/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@solidity-parser/parser": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", + "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", + "dev": true, + "peer": true, + "dependencies": { + "antlr4ts": "^0.5.0-alpha.4" + } + }, + "node_modules/@substrate/connect": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.8.tgz", + "integrity": "sha512-zwaxuNEVI9bGt0rT8PEJiXOyebLIo6QN1SyiAHRPBOl6g3Sy0KKdSN8Jmyn++oXhVRD8aIe75/V8ZkS81T+BPQ==", + "deprecated": "versions below 1.x are no longer maintained", + "dev": true, + "optional": true, + "dependencies": { + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.1", + "@substrate/light-client-extension-helpers": "^0.0.4", + "smoldot": "2.0.22" + } + }, + "node_modules/@substrate/connect-extension-protocol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.0.0.tgz", + "integrity": "sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg==", + "dev": true, + "optional": true + }, + "node_modules/@substrate/connect-known-chains": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.2.2.tgz", + "integrity": "sha512-gOGrXSWA2d/3kf8Yco00VlHZl48smzAGW5Z9MDxMht98hRpT2yEEN4N5QdoEKMI4ihDW8goXGzmp79D0hFPpuA==", + "dev": true, + "optional": true + }, + "node_modules/@substrate/light-client-extension-helpers": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-0.0.4.tgz", + "integrity": "sha512-vfKcigzL0SpiK+u9sX6dq2lQSDtuFLOxIJx2CKPouPEHIs8C+fpsufn52r19GQn+qDhU8POMPHOVoqLktj8UEA==", + "dev": true, + "optional": true, + "dependencies": { + "@polkadot-api/client": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "@polkadot-api/json-rpc-provider": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "@polkadot-api/json-rpc-provider-proxy": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "@polkadot-api/substrate-client": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", + "@substrate/connect-extension-protocol": "^2.0.0", + "@substrate/connect-known-chains": "^1.1.1", + "rxjs": "^7.8.1" + }, + "peerDependencies": { + "smoldot": "2.x" + } + }, + "node_modules/@substrate/ss58-registry": { + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.49.0.tgz", + "integrity": "sha512-leW6Ix4LD7XgvxT7+aobPWSw+WvPcN2Rxof1rmd0mNC5t2n99k1N7UNEvz7YEFSOUeHWmKIY7F5q8KeIqYoHfA==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.12", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz", + "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "tslib": "^2.4.0" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@typechain/ethers-v6": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", + "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", + "dev": true, + "peer": true, + "dependencies": { + "lodash": "^4.17.15", + "ts-essentials": "^7.0.1" + }, + "peerDependencies": { + "ethers": "6.x", + "typechain": "^8.3.2", + "typescript": ">=4.7.0" + } + }, + "node_modules/@typechain/hardhat": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", + "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", + "dev": true, + "peer": true, + "dependencies": { + "fs-extra": "^9.1.0" + }, + "peerDependencies": { + "@typechain/ethers-v6": "^0.5.1", + "ethers": "^6.1.0", + "hardhat": "^2.9.9", + "typechain": "^8.3.2" + } + }, + "node_modules/@typechain/hardhat/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "peer": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/bn.js": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", + "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", + "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", + "dev": true + }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", + "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/concat-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", + "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/form-data": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", + "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", + "dev": true, + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "peer": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "peer": true + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "node_modules/@types/mocha": { + "version": "10.0.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", + "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.14.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.1.tgz", + "integrity": "sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", + "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "dev": true, + "peer": true + }, + "node_modules/@types/ps-tree": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.6.tgz", + "integrity": "sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true, + "peer": true + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, + "node_modules/@types/which": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.4.tgz", + "integrity": "sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "peer": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", + "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==", + "dev": true + }, + "node_modules/adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true, + "engines": { + "node": ">=0.3.0" + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "dev": true + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.15.0.tgz", + "integrity": "sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^2.3.0", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/antlr4ts": { + "version": "0.5.0-alpha.4", + "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", + "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", + "dev": true, + "peer": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "peer": true + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, + "peer": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "peer": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dev": true, + "peer": true, + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bech32": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", + "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", + "dev": true + }, + "node_modules/bigint-buffer": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", + "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.3.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bip174": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.1.tgz", + "integrity": "sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bitcoinjs-lib": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.6.tgz", + "integrity": "sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA==", + "dev": true, + "dependencies": { + "@noble/hashes": "^1.2.0", + "bech32": "^2.0.0", + "bip174": "^2.1.1", + "bs58check": "^3.0.1", + "typeforce": "^1.11.3", + "varuint-bitcoin": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/bitcoinjs-lib/node_modules/base-x": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", + "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", + "dev": true + }, + "node_modules/bitcoinjs-lib/node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", + "dev": true + }, + "node_modules/bitcoinjs-lib/node_modules/bs58": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", + "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", + "dev": true, + "dependencies": { + "base-x": "^4.0.0" + } + }, + "node_modules/bitcoinjs-lib/node_modules/bs58check": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", + "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", + "dev": true, + "dependencies": { + "@noble/hashes": "^1.2.0", + "bs58": "^5.0.0" + } + }, + "node_modules/bitcoinjs-message": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bitcoinjs-message/-/bitcoinjs-message-2.2.0.tgz", + "integrity": "sha512-103Wy3xg8Y9o+pdhGP4M3/mtQQuUWs6sPuOp1mYphSUoSMHjHTlkj32K4zxU8qMH0Ckv23emfkGlFWtoWZ7YFA==", + "dev": true, + "dependencies": { + "bech32": "^1.1.3", + "bs58check": "^2.1.2", + "buffer-equals": "^1.0.3", + "create-hash": "^1.1.2", + "secp256k1": "^3.0.1", + "varuint-bitcoin": "^1.0.1" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/bitcoinjs-message/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/bitcoinjs-message/node_modules/secp256k1": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", + "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "bip66": "^1.1.5", + "bn.js": "^4.11.8", + "create-hash": "^1.2.0", + "drbg.js": "^1.0.1", + "elliptic": "^6.5.2", + "nan": "^2.14.0", + "safe-buffer": "^5.1.2" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "node_modules/borsh": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", + "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.0", + "bs58": "^4.0.0", + "text-encoding-utf-8": "^1.0.2" + } + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/boxen/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "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" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dev": true, + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dev": true, + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-equals": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/buffer-equals/-/buffer-equals-1.0.4.tgz", + "integrity": "sha512-99MsCq0j5+RhubVEtKQgKaD6EM+UP3xJgIvQqwJ3SOLDUekzxMX1ylXBng+Wa2sh7mGT0W6RUly8ojjr1Tt6nA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "peer": true + }, + "node_modules/cbor": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", + "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "dev": true, + "peer": true, + "dependencies": { + "nofilter": "^3.1.0" + }, + "engines": { + "node": ">=12.19" + } + }, + "node_modules/chai": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "dev": true, + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chai-as-promised": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-8.0.0.tgz", + "integrity": "sha512-sMsGXTrS3FunP/wbqh/KxM8Kj/aLPXQGkNtvE5wPfSToq8wkkvBpTZo1LIiEVmC4BwkKpag+l5h/20lBMk6nUg==", + "dev": true, + "dependencies": { + "check-error": "^2.0.0" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 6" + } + }, + "node_modules/chai-as-promised/node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "engines": { + "node": ">= 16" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "dev": true, + "peer": true, + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/chnl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/chnl/-/chnl-1.2.0.tgz", + "integrity": "sha512-g5gJb59edwCliFbX2j7G6sBfY4sX9YLy211yctONI2GRaiX0f2zIbKWmBm+sPqFNEpM7Ljzm7IJX/xrjiEbPrw==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "peer": true, + "dependencies": { + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "colors": "^1.1.2" + } + }, + "node_modules/cli-table3/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "peer": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-table3/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "peer": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", + "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "dev": true, + "peer": true, + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", + "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "dev": true, + "peer": true, + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "peer": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "peer": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "peer": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "peer": true + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "peer": true, + "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" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "peer": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "peer": true }, - "node_modules/browserify-aes": { + "node_modules/create-hash": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", + "cipher-base": "^1.0.1", "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "dependencies": { - "base-x": "^3.0.2" + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "dependencies": { - "bs58": "^4.0.0", + "cipher-base": "^1.0.3", "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, - "peer": true, "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" + "cross-spawn": "^7.0.1" }, - "engines": { - "node": ">= 0.4" + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 8" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "peer": true - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "peer": true, "dependencies": { - "nofilter": "^3.1.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=12.19" + "node": ">= 8" } }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", "dev": true, "peer": true, - "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" - }, "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true, - "peer": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" + "engines": { + "node": ">= 12" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "peer": true, - "engines": { - "node": "*" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, - "peer": true, "dependencies": { - "get-func-name": "^2.0.2" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, "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" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 0.4" }, "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/death": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", + "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } + "peer": true }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">=6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "node_modules/deep-eql": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", + "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", "dev": true, - "peer": true, "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" + "type-detect": "^4.0.0" }, "engines": { "node": ">=6" - }, - "optionalDependencies": { - "colors": "^1.1.2" } }, - "node_modules/cli-table3/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "peer": true, "engines": { - "node": ">=4" + "node": ">=4.0.0" } }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "peer": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cli-table3/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, - "peer": true, "dependencies": { - "ansi-regex": "^3.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/delay": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", + "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "peer": true, "engines": { - "node": ">=0.1.90" + "node": ">=0.4.0" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, "engines": { "node": ">= 0.8" } }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", + "node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true, - "peer": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, "engines": { - "node": ">=4.0.0" + "node": ">=0.3.1" } }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", + "node_modules/difflib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", + "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", "dev": true, "peer": true, "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" + "heap": ">= 0.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "*" } }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "peer": true, "dependencies": { - "color-convert": "^1.9.0" + "path-type": "^4.0.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true, "engines": { "node": ">=8" } }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "peer": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "esutils": "^2.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" + "node": ">=6.0.0" } }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, - "peer": true, "engines": { - "node": ">=0.8.0" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "node_modules/drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==", "dev": true, - "peer": true, + "dependencies": { + "browserify-aes": "^1.0.6", + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4" + }, "engines": { - "node": ">=4" + "node": ">=0.10" } }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/ecpair": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ecpair/-/ecpair-2.1.0.tgz", + "integrity": "sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==", "dev": true, - "peer": true, "dependencies": { - "has-flag": "^3.0.0" + "randombytes": "^2.1.0", + "typeforce": "^1.18.0", + "wif": "^2.0.6" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "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" } }, - "node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "dev": true, - "engines": [ - "node >= 0.8" - ], - "peer": true, "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" } }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, - "peer": true, - "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" + "engines": { + "node": ">=6" } }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", "dev": true, - "peer": true + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "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.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "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.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, - "peer": true, "dependencies": { - "safe-buffer": "~5.1.0" + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, - "peer": true + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "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" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "node_modules/es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "node_modules/es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", "dev": true, - "peer": true + "dependencies": { + "es6-promise": "^4.0.3" + } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, - "peer": true, "engines": { - "node": "*" + "node": ">=6" } }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "peer": true + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", "dev": true, + "peer": true, "dependencies": { - "ms": "2.1.2" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=6.0" + "node": ">=0.12.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "optionalDependencies": { + "source-map": "~0.2.0" } }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.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.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" + }, + "bin": { + "eslint": "bin/eslint.js" + }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "peer": true, "dependencies": { - "type-detect": "^4.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=6" + "node": ">=8.0.0" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/eslint-scope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "peer": true, "engines": { - "node": ">=4.0.0" + "node": ">=4.0" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "peer": true + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "peer": true, "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=0.4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=4.0" } }, - "node_modules/diff": { + "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=0.3.1" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "peer": true, "dependencies": { - "heap": ">= 0.2.0" + "is-glob": "^4.0.3" }, "engines": { - "node": "*" + "node": ">=10.13.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "peer": true, "dependencies": { - "path-type": "^4.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "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" + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { - "node": ">=8.6" + "node": ">= 0.8.0" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "peer": true, "dependencies": { - "get-intrinsic": "^1.2.4" + "p-limit": "^3.0.2" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "peer": true, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "prelude-ls": "^1.2.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "peer": true, "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">=0.12.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "optionalDependencies": { - "source-map": "~0.2.0" + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -3284,6 +5689,48 @@ "node": ">=0.10.0" } }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/estraverse": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", @@ -3299,7 +5746,6 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -3535,7 +5981,6 @@ "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", "dev": true, - "peer": true, "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -3548,9 +5993,9 @@ } }, "node_modules/ethers": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.0.tgz", - "integrity": "sha512-+yyQQQWEntY5UVbCv++guA14RRVFm1rSnO1GoLFdrK7/XRWMoktNgyG9UjwxrQqGBfGyFKknNZ81YpUS2emCgg==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.2.tgz", + "integrity": "sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==", "dev": true, "funding": [ { @@ -3562,7 +6007,6 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], - "peer": true, "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", @@ -3570,7 +6014,7 @@ "@types/node": "18.15.13", "aes-js": "4.0.0-beta.5", "tslib": "2.4.0", - "ws": "8.5.0" + "ws": "8.17.1" }, "engines": { "node": ">=14.0.0" @@ -3580,8 +6024,28 @@ "version": "18.15.13", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "dev": true + }, + "node_modules/ethers/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "dev": true, - "peer": true + "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 + } + } }, "node_modules/ethjs-unit": { "version": "0.1.6", @@ -3619,6 +6083,27 @@ "npm": ">=3" } }, + "node_modules/event-stream": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -3629,19 +6114,26 @@ "safe-buffer": "^5.1.1" } }, + "node_modules/eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", + "dev": true, + "engines": { + "node": "> 0.1.90" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "peer": true + "dev": true }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "peer": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3653,12 +6145,23 @@ "node": ">=8.6.0" } }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "peer": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-stable-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", + "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", + "dev": true }, "node_modules/fast-uri": { "version": "2.3.0", @@ -3672,11 +6175,51 @@ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "peer": true, "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3723,6 +6266,26 @@ "flat": "cli.js" } }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -3743,6 +6306,15 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -3758,12 +6330,30 @@ "node": ">= 6" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/fp-ts": { "version": "1.19.3", "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", "dev": true }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -3811,11 +6401,46 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fx": { + "version": "35.0.0", + "resolved": "https://registry.npmjs.org/fx/-/fx-35.0.0.tgz", + "integrity": "sha512-O07q+Lknrom5RUX/u53tjo2KTTLUnL0K703JbqMYb19ORijfJNvijzFqqYXEjdk25T9R14S6t6wHD8fCWXCM0g==", + "dev": true, + "bin": { + "fx": "index.js" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3830,7 +6455,6 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "peer": true, "engines": { "node": "*" } @@ -3840,7 +6464,6 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, - "peer": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -3865,6 +6488,23 @@ "node": ">=4" } }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/ghost-testrpc": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", @@ -4018,6 +6658,49 @@ "node": ">=6" } }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "10.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", @@ -4043,7 +6726,6 @@ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, - "peer": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -4057,6 +6739,12 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -4090,14 +6778,14 @@ } }, "node_modules/hardhat": { - "version": "2.22.5", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.5.tgz", - "integrity": "sha512-9Zq+HonbXCSy6/a13GY1cgHglQRfh4qkzmj1tpPlhxJDwNVnhxlReV6K7hCWFKlOrV13EQwsdcD0rjcaQKWRZw==", + "version": "2.22.8", + "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.8.tgz", + "integrity": "sha512-hPh2feBGRswkXkoXUFW6NbxgiYtEzp/3uvVFjYROy6fA9LH8BobUyxStlyhSKj4+v1Y23ZoUBOVWL84IcLACrA==", "dev": true, "dependencies": { "@ethersproject/abi": "^5.1.2", "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.4.0", + "@nomicfoundation/edr": "^0.5.2", "@nomicfoundation/ethereumjs-common": "4.0.4", "@nomicfoundation/ethereumjs-tx": "5.0.4", "@nomicfoundation/ethereumjs-util": "9.0.4", @@ -4131,7 +6819,7 @@ "raw-body": "^2.4.1", "resolve": "1.17.0", "semver": "^6.3.0", - "solc": "0.7.3", + "solc": "0.8.26", "source-map-support": "^0.5.13", "stacktrace-parser": "^0.1.10", "tsort": "0.0.1", @@ -4351,6 +7039,15 @@ } } }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4365,7 +7062,6 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "peer": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -4378,7 +7074,6 @@ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "peer": true, "engines": { "node": ">= 0.4" }, @@ -4391,7 +7086,21 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, - "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -4428,7 +7137,6 @@ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, - "peer": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -4525,6 +7233,15 @@ "node": ">= 6" } }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -4537,12 +7254,31 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "peer": true, "engines": { "node": ">= 4" } @@ -4564,6 +7300,40 @@ "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", "dev": true }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", @@ -4597,35 +7367,135 @@ "dev": true, "peer": true }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, - "peer": true, + "peer": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/io-ts": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", + "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "dev": true, + "dependencies": { + "fp-ts": "^1.0.0" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, "dependencies": { - "fp-ts": "^1.0.0" + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { @@ -4668,6 +7538,18 @@ "npm": ">=3" } }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4677,6 +7559,30 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", @@ -4686,6 +7592,82 @@ "node": ">=8" } }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -4698,6 +7680,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4709,8 +7703,84 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isomorphic-ws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", + "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", "dev": true, - "peer": true + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/jayson": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.1.tgz", + "integrity": "sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==", + "dev": true, + "dependencies": { + "@types/connect": "^3.4.33", + "@types/node": "^12.12.54", + "@types/ws": "^7.4.4", + "commander": "^2.20.3", + "delay": "^5.0.0", + "es6-promisify": "^5.0.0", + "eyes": "^0.1.8", + "isomorphic-ws": "^4.0.1", + "json-stringify-safe": "^5.0.1", + "JSONStream": "^1.3.5", + "uuid": "^8.3.2", + "ws": "^7.5.10" + }, + "bin": { + "jayson": "bin/jayson.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jayson/node_modules/@types/node": { + "version": "12.20.55", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", + "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", + "dev": true + }, + "node_modules/jayson/node_modules/@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/jayson/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "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 + } + } + }, + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "dev": true }, "node_modules/js-sha3": { "version": "0.8.0", @@ -4730,6 +7800,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -4737,19 +7813,23 @@ "dev": true, "peer": true }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "peer": true, "dependencies": { "universalify": "^2.0.0" }, @@ -4757,6 +7837,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, "node_modules/jsonschema": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", @@ -4767,6 +7856,22 @@ "node": "*" } }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/keccak": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", @@ -4782,6 +7887,15 @@ "node": ">=10.0.0" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -4792,15 +7906,6 @@ "node": ">=0.10.0" } }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -4862,8 +7967,13 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true, - "peer": true + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true }, "node_modules/lodash.truncate": { "version": "4.4.2", @@ -4893,7 +8003,6 @@ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, - "peer": true, "dependencies": { "get-func-name": "^2.0.1" } @@ -4908,8 +8017,13 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "peer": true + "dev": true + }, + "node_modules/map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", + "dev": true }, "node_modules/markdown-table": { "version": "1.1.3", @@ -4943,11 +8057,16 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "peer": true, "engines": { "node": ">= 8" } }, + "node_modules/micro-base58": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/micro-base58/-/micro-base58-0.5.1.tgz", + "integrity": "sha512-iwqAmg66VjB2LA3BcUxyrOyqck4HLLtSzKnx2VQSnN5piQji598N15P8RRx2d6lPvJ98B1b0cl2VbvQeFeWdig==", + "dev": true + }, "node_modules/micro-ftch": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", @@ -4960,7 +8079,6 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, - "peer": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5021,7 +8139,6 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "peer": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5083,6 +8200,12 @@ "node": ">= 14.0.0" } }, + "node_modules/mocha-steps": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/mocha-steps/-/mocha-steps-1.3.0.tgz", + "integrity": "sha512-KZvpMJTqzLZw3mOb+EEuYi4YZS41C9iTnb7skVFRxHjUd1OYbl64tCMSmpdIRM9LnwIrSOaRfPtNpF5msgv6Eg==", + "dev": true + }, "node_modules/mocha/node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -5274,12 +8397,39 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/mock-socket": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", + "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/nan": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", + "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, "node_modules/ndjson": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", @@ -5307,12 +8457,45 @@ "dev": true, "peer": true }, + "node_modules/nock": { + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", + "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, "node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", "dev": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -5323,6 +8506,24 @@ "lodash": "^4.17.21" } }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/node-gyp-build": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", @@ -5403,7 +8604,33 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, - "peer": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5505,6 +8732,18 @@ "node": ">=4" } }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parse-cache-control": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", @@ -5530,6 +8769,15 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -5541,7 +8789,6 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -5551,11 +8798,19 @@ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, - "peer": true, "engines": { "node": "*" } }, + "node_modules/pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", + "dev": true, + "dependencies": { + "through": "~2.3" + } + }, "node_modules/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", @@ -5594,6 +8849,15 @@ "node": ">=6" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -5605,9 +8869,9 @@ } }, "node_modules/prettier": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.1.tgz", - "integrity": "sha512-7CAwy5dRsxs8PHXT3twixW9/OEll8MLE0VRPCJyl7CkS6VHGPSlsVaWTiASPTyGyYRyApxlaWTzwUxVNrhcwDg==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -5671,6 +8935,43 @@ "asap": "~2.0.6" } }, + "node_modules/promise-controller": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/promise-controller/-/promise-controller-1.0.0.tgz", + "integrity": "sha512-goA0zA9L91tuQbUmiMinSYqlyUtEgg4fxJcjYnLYOQnrktb4o4UqciXDNXiRUPiDBPACmsr1k8jDW4r7UDq9Qw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/promise.prototype.finally": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz", + "integrity": "sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/promised-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/promised-map/-/promised-map-1.0.0.tgz", + "integrity": "sha512-fP9VSMgcml+U2uJ9PBc4/LDQ3ZkJCH4blLNCS6gbH7RHyRZCYs91zxWHqiUy+heFiEMiB2op/qllYoFqmIqdWA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -5685,6 +8986,15 @@ "node": ">= 6" } }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -5692,6 +9002,30 @@ "dev": true, "peer": true }, + "node_modules/ps-tree": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", + "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", + "dev": true, + "dependencies": { + "event-stream": "=3.3.4" + }, + "bin": { + "ps-tree": "bin/ps-tree.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", @@ -5726,8 +9060,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "peer": true + ] }, "node_modules/randombytes": { "version": "2.1.0", @@ -5815,6 +9148,30 @@ "node": ">=6" } }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/req-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", @@ -5855,6 +9212,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5886,16 +9244,15 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, - "peer": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { @@ -5903,6 +9260,9 @@ }, "bin": { "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/ripemd160": { @@ -5927,6 +9287,29 @@ "rlp": "bin/rlp" } }, + "node_modules/rpc-websockets": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.0.2.tgz", + "integrity": "sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==", + "dev": true, + "dependencies": { + "@swc/helpers": "^0.5.11", + "@types/uuid": "^8.3.4", + "@types/ws": "^8.2.2", + "buffer": "^6.0.3", + "eventemitter3": "^5.0.1", + "uuid": "^8.3.2", + "ws": "^8.5.0" + }, + "funding": { + "type": "paypal", + "url": "https://paypal.me/kozjak" + }, + "optionalDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5946,11 +9329,43 @@ "url": "https://feross.org/support" } ], - "peer": true, "dependencies": { "queue-microtask": "^1.2.2" } }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5971,6 +9386,23 @@ } ] }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -6089,6 +9521,12 @@ "node": ">=0.8.0" } }, + "node_modules/scale-ts": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-0.2.12.tgz", + "integrity": "sha512-hNGuU5Yhohmp4BjFrNEioDkPAOWe6aYRDUlBi9FTxxmp1wZ8SAkDxAf/IobinuSa+J0a9srZEP73dqmYeyYYXg==", + "dev": true + }, "node_modules/scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", @@ -6133,7 +9571,6 @@ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, - "peer": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -6146,6 +9583,21 @@ "node": ">= 0.4" } }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -6185,6 +9637,27 @@ "node": "*" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -6208,7 +9681,6 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, - "peer": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -6234,7 +9706,6 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "peer": true, "engines": { "node": ">=8" } @@ -6257,49 +9728,44 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/smoldot": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.22.tgz", + "integrity": "sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g==", + "dev": true, + "optional": true, + "dependencies": { + "ws": "^8.8.1" + } + }, "node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", + "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", "dev": true, "dependencies": { "command-exists": "^1.2.8", - "commander": "3.0.2", + "commander": "^8.1.0", "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" }, "bin": { - "solcjs": "solcjs" + "solcjs": "solc.js" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "node": ">=10.0.0" } }, - "node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", + "node_modules/solc/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">= 12" } }, "node_modules/solc/node_modules/semver": { @@ -6517,6 +9983,18 @@ "node": ">=0.10.0" } }, + "node_modules/split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, "node_modules/split2": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", @@ -6564,6 +10042,15 @@ "node": ">= 0.8" } }, + "node_modules/stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", + "dev": true, + "dependencies": { + "duplexer": "~0.1.1" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6594,6 +10081,55 @@ "node": ">=8" } }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -6631,6 +10167,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/superstruct": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", + "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6721,6 +10266,18 @@ "node": ">=8" } }, + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, "node_modules/then-request": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", @@ -6766,6 +10323,12 @@ "node": ">= 0.12" } }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", @@ -6776,6 +10339,18 @@ "readable-stream": "3" } }, + "node_modules/tiny-secp256k1": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz", + "integrity": "sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==", + "dev": true, + "dependencies": { + "uint8array-tools": "0.0.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -6809,6 +10384,12 @@ "node": ">=0.6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/ts-command-line-args": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", @@ -6840,7 +10421,6 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, - "peer": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -6884,7 +10464,6 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "peer": true, "engines": { "node": ">=0.3.1" } @@ -6893,8 +10472,7 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true, - "peer": true + "dev": true }, "node_modules/tsort": { "version": "0.0.1", @@ -6902,6 +10480,27 @@ "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", "dev": true }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", @@ -6932,7 +10531,6 @@ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "peer": true, "engines": { "node": ">=4" } @@ -7060,6 +10658,79 @@ "node": ">= 4.0.0" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -7067,12 +10738,17 @@ "dev": true, "peer": true }, + "node_modules/typeforce": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", + "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==", + "dev": true + }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7105,6 +10781,30 @@ "node": ">=0.8.0" } }, + "node_modules/uint8array-tools": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.7.tgz", + "integrity": "sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/undici": { "version": "5.28.4", "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", @@ -7128,7 +10828,6 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "peer": true, "engines": { "node": ">= 10.0.0" } @@ -7142,6 +10841,29 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", @@ -7168,8 +10890,25 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/varuint-bitcoin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", + "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", "dev": true, - "peer": true + "dependencies": { + "safe-buffer": "^5.1.1" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "dev": true, + "engines": { + "node": ">= 8" + } }, "node_modules/web3-utils": { "version": "1.10.4", @@ -7230,6 +10969,46 @@ "@scure/bip39": "1.2.2" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/webpod": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/webpod/-/webpod-0.0.2.tgz", + "integrity": "sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==", + "dev": true, + "bin": { + "webpod": "dist/index.js" + } + }, + "node_modules/websocket-as-promised": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/websocket-as-promised/-/websocket-as-promised-2.1.0.tgz", + "integrity": "sha512-TpFh8+9XcxOX8s+pLh217OVUF+wZjxYOa9H1ay1T/YIT8gRdEVk/mfaZbvqgRzXbNRMQngBrLbCdXzz5Yl8K0Q==", + "dev": true, + "dependencies": { + "chnl": "^1.2.0", + "promise-controller": "^1.0.0", + "promise.prototype.finally": "^3.1.2", + "promised-map": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -7243,6 +11022,41 @@ "which": "bin/which" } }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/widest-line": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", @@ -7255,12 +11069,20 @@ "node": ">=8" } }, + "node_modules/wif": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", + "integrity": "sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==", + "dev": true, + "dependencies": { + "bs58check": "<3.0.0" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -7326,17 +11148,16 @@ "dev": true }, "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, - "peer": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -7356,6 +11177,18 @@ "node": ">=10" } }, + "node_modules/yaml": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -7403,7 +11236,6 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, - "peer": true, "engines": { "node": ">=6" } @@ -7419,6 +11251,134 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zx": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/zx/-/zx-7.2.3.tgz", + "integrity": "sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^11.0.1", + "@types/minimist": "^1.2.2", + "@types/node": "^18.16.3", + "@types/ps-tree": "^1.1.2", + "@types/which": "^3.0.0", + "chalk": "^5.2.0", + "fs-extra": "^11.1.1", + "fx": "*", + "globby": "^13.1.4", + "minimist": "^1.2.8", + "node-fetch": "3.3.1", + "ps-tree": "^1.2.0", + "webpod": "^0", + "which": "^3.0.0", + "yaml": "^2.2.2" + }, + "bin": { + "zx": "build/cli.js" + }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/zx/node_modules/@types/node": { + "version": "18.19.43", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.43.tgz", + "integrity": "sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/zx/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/zx/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/zx/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx/node_modules/node-fetch": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", + "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/zx/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zx/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } } } } diff --git a/package.json b/package.json index 6764fee..772a013 100644 --- a/package.json +++ b/package.json @@ -9,21 +9,20 @@ "deploy-contract": "./scripts/run_deploy.sh", "format": "prettier --write --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --write .", "check-format": "prettier --check --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --check .", - "test": "npx hardhat test" + "test": "npx hardhat test", + "integration-test": "node --loader ts-node/esm 'integration-tests/contracts.test.ts'" }, "devDependencies": { + "@ethersproject/providers": "^5.7.2", + "@litentry/chaindata": "^0.1.1", + "@litentry/parachain-api": "0.9.18-11.2", + "@litentry/sidechain-api": "0.9.18-11", + "@litentry/vc-schema-validator": "^0.0.1", + "@noble/ed25519": "^1.7.3", "@nomicfoundation/hardhat-ethers": "^3.0.6", "@nomicfoundation/hardhat-network-helpers": "^1.0.11", "@nomicfoundation/hardhat-toolbox": "^5.0.0", "@openzeppelin/contracts": "^4.9.6", - "@types/chai-as-promised": "^7.1.8", - "chai-as-promised": "^8.0.0", - "ethers": "^6.13.1", - "hardhat": "^2.22.6", - "prettier": "^3.3.3", - "prettier-plugin-solidity": "^1.3.1", - "@litentry/vc-schema-validator": "^0.0.1", - "@noble/ed25519": "^1.7.3", "@polkadot/api": "^10.9.1", "@polkadot/api-augment": "^10.9.1", "@polkadot/api-base": "^10.9.1", @@ -39,22 +38,36 @@ "@polkadot/util": "^12.5.1", "@polkadot/util-crypto": "^12.5.1", "@solana/web3.js": "^1.91.4", + "@types/chai": "^4.3.3", + "@types/chai-as-promised": "^7.1.8", + "@types/mocha": "^10.0.7", + "@types/node": "^20.4.4", + "@types/ws": "^8.5.3", + "@typescript-eslint/eslint-plugin": "^5.60.0", + "@typescript-eslint/parser": "^5.60.0", "add": "^2.0.6", "bitcoinjs-lib": "^6.1.5", "bitcoinjs-message": "^2.2.0", "chai": "^4.3.6", + "chai-as-promised": "^8.0.0", "colors": "^1.4.0", + "cross-env": "^7.0.3", + "dotenv": "^16.0.3", "ecpair": "^2.1.0", + "eslint": "^8.43.0", + "ethers": "^6.13.1", + "hardhat": "^2.22.8", "js-base64": "^3.7.5", "micro-base58": "^0.5.1", "mocha": "^10.1.0", "mocha-steps": "^1.3.0", - "@litentry/parachain-api": "latest", + "prettier": "^3.3.3", + "prettier-plugin-solidity": "^1.3.1", "scale-ts": "^0.2.11", - "@litentry/sidechain-api": "latest", - "@litentry/chaindata": "^0.1.1", "tiny-secp256k1": "^2.2.3", + "ts-node": "^10.9.2", "tweetnacl": "^1.0.3", + "typescript": "^5.5.4", "websocket-as-promised": "^2.0.1", "ws": "^8.17.1", "zx": "^7.2.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b17c526..53780ab 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,14 +5,17 @@ settings: excludeLinksFromLockfile: false devDependencies: + '@ethersproject/providers': + specifier: ^5.7.2 + version: 5.7.2 '@litentry/chaindata': specifier: ^0.1.1 version: 0.1.1 '@litentry/parachain-api': - specifier: latest + specifier: 0.9.18-11.2 version: 0.9.18-11.2 '@litentry/sidechain-api': - specifier: latest + specifier: 0.9.18-11 version: 0.9.18-11 '@litentry/vc-schema-validator': specifier: ^0.0.1 @@ -22,13 +25,13 @@ devDependencies: version: 1.7.3 '@nomicfoundation/hardhat-ethers': specifier: ^3.0.6 - version: 3.0.6(ethers@6.13.2)(hardhat@2.22.7) + version: 3.0.6(ethers@6.13.2)(hardhat@2.22.8) '@nomicfoundation/hardhat-network-helpers': specifier: ^1.0.11 - version: 1.0.11(hardhat@2.22.7) + version: 1.0.11(hardhat@2.22.8) '@nomicfoundation/hardhat-toolbox': specifier: ^5.0.0 - version: 5.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.7)(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition-ethers@0.15.5)(@nomicfoundation/hardhat-network-helpers@1.0.11)(@nomicfoundation/hardhat-verify@2.0.9)(@typechain/ethers-v6@0.5.1)(@typechain/hardhat@9.1.0)(@types/chai@4.3.17)(@types/mocha@10.0.7)(@types/node@22.1.0)(chai@4.5.0)(ethers@6.13.2)(hardhat-gas-reporter@1.0.10)(hardhat@2.22.7)(solidity-coverage@0.8.12)(ts-node@10.9.2)(typechain@8.3.2)(typescript@5.5.4) + version: 5.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.7)(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition-ethers@0.15.5)(@nomicfoundation/hardhat-network-helpers@1.0.11)(@nomicfoundation/hardhat-verify@2.0.9)(@typechain/ethers-v6@0.5.1)(@typechain/hardhat@9.1.0)(@types/chai@4.3.17)(@types/mocha@10.0.7)(@types/node@20.14.14)(chai@4.5.0)(ethers@6.13.2)(hardhat-gas-reporter@1.0.10)(hardhat@2.22.8)(solidity-coverage@0.8.12)(ts-node@10.9.2)(typechain@8.3.2)(typescript@5.5.4) '@openzeppelin/contracts': specifier: ^4.9.6 version: 4.9.6 @@ -77,9 +80,27 @@ devDependencies: '@solana/web3.js': specifier: ^1.91.4 version: 1.95.2 + '@types/chai': + specifier: ^4.3.3 + version: 4.3.17 '@types/chai-as-promised': specifier: ^7.1.8 version: 7.1.8 + '@types/mocha': + specifier: ^10.0.7 + version: 10.0.7 + '@types/node': + specifier: ^20.4.4 + version: 20.14.14 + '@types/ws': + specifier: ^8.5.3 + version: 8.5.12 + '@typescript-eslint/eslint-plugin': + specifier: ^5.60.0 + version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': + specifier: ^5.60.0 + version: 5.62.0(eslint@8.57.0)(typescript@5.5.4) add: specifier: ^2.0.6 version: 2.0.6 @@ -98,15 +119,24 @@ devDependencies: colors: specifier: ^1.4.0 version: 1.4.0 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + dotenv: + specifier: ^16.0.3 + version: 16.4.5 ecpair: specifier: ^2.1.0 version: 2.1.0 + eslint: + specifier: ^8.43.0 + version: 8.57.0 ethers: specifier: ^6.13.1 version: 6.13.2 hardhat: - specifier: ^2.22.6 - version: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + specifier: ^2.22.8 + version: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) js-base64: specifier: ^3.7.5 version: 3.7.7 @@ -131,15 +161,21 @@ devDependencies: tiny-secp256k1: specifier: ^2.2.3 version: 2.2.3 + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.14.14)(typescript@5.5.4) tweetnacl: specifier: ^1.0.3 version: 1.0.3 + typescript: + specifier: ^5.5.4 + version: 5.5.4 websocket-as-promised: specifier: ^2.0.1 version: 2.1.0 ws: specifier: ^8.17.1 - version: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + version: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) zx: specifier: ^7.2.3 version: 7.2.3 @@ -164,6 +200,43 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.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.57.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.11.0: + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + 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.6(supports-color@8.1.1) + 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.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@ethereumjs/rlp@4.0.1: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} @@ -509,6 +582,28 @@ packages: engines: {node: '>=14'} dev: true + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.6(supports-color@8.1.1) + 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.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + dev: true + /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -614,6 +709,12 @@ packages: '@noble/hashes': 1.4.0 dev: true + /@noble/curves@1.5.0: + resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==} + dependencies: + '@noble/hashes': 1.4.0 + dev: true + /@noble/ed25519@1.7.3: resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} dev: true @@ -747,7 +848,7 @@ packages: ethereum-cryptography: 0.1.3 dev: true - /@nomicfoundation/hardhat-chai-matchers@2.0.7(@nomicfoundation/hardhat-ethers@3.0.6)(chai@4.5.0)(ethers@6.13.2)(hardhat@2.22.7): + /@nomicfoundation/hardhat-chai-matchers@2.0.7(@nomicfoundation/hardhat-ethers@3.0.6)(chai@4.5.0)(ethers@6.13.2)(hardhat@2.22.8): resolution: {integrity: sha512-RQfsiTwdf0SP+DtuNYvm4921X6VirCQq0Xyh+mnuGlTwEFSPZ/o27oQC+l+3Y/l48DDU7+ZcYBR+Fp+Rp94LfQ==} peerDependencies: '@nomicfoundation/hardhat-ethers': ^3.0.0 @@ -755,17 +856,17 @@ packages: ethers: ^6.1.0 hardhat: ^2.9.4 dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2)(hardhat@2.22.7) + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2)(hardhat@2.22.8) '@types/chai-as-promised': 7.1.8 chai: 4.5.0 chai-as-promised: 7.1.2(chai@4.5.0) deep-eql: 4.1.4 ethers: 6.13.2 - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) ordinal: 1.0.3 dev: true - /@nomicfoundation/hardhat-ethers@3.0.6(ethers@6.13.2)(hardhat@2.22.7): + /@nomicfoundation/hardhat-ethers@3.0.6(ethers@6.13.2)(hardhat@2.22.8): resolution: {integrity: sha512-/xzkFQAaHQhmIAYOQmvHBPwL+NkwLzT9gRZBsgWUYeV+E6pzXsBQsHfRYbAZ3XEYare+T7S+5Tg/1KDJgepSkA==} peerDependencies: ethers: ^6.1.0 @@ -773,13 +874,13 @@ packages: dependencies: debug: 4.3.6(supports-color@8.1.1) ethers: 6.13.2 - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color dev: true - /@nomicfoundation/hardhat-ignition-ethers@0.15.5(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition@0.15.5)(@nomicfoundation/ignition-core@0.15.5)(ethers@6.13.2)(hardhat@2.22.7): + /@nomicfoundation/hardhat-ignition-ethers@0.15.5(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition@0.15.5)(@nomicfoundation/ignition-core@0.15.5)(ethers@6.13.2)(hardhat@2.22.8): resolution: {integrity: sha512-W6s1QN9CFxzSVZS6w9Jcj3WLaK32z2FP5MxNU2OKY1Fn9ZzLr+miXbUbWYuRHl6dxrrl6sE8cv33Cybv19pmCg==} peerDependencies: '@nomicfoundation/hardhat-ethers': ^3.0.4 @@ -788,26 +889,26 @@ packages: ethers: ^6.7.0 hardhat: ^2.18.0 dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2)(hardhat@2.22.7) - '@nomicfoundation/hardhat-ignition': 0.15.5(@nomicfoundation/hardhat-verify@2.0.9)(hardhat@2.22.7) + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2)(hardhat@2.22.8) + '@nomicfoundation/hardhat-ignition': 0.15.5(@nomicfoundation/hardhat-verify@2.0.9)(hardhat@2.22.8) '@nomicfoundation/ignition-core': 0.15.5 ethers: 6.13.2 - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) dev: true - /@nomicfoundation/hardhat-ignition@0.15.5(@nomicfoundation/hardhat-verify@2.0.9)(hardhat@2.22.7): + /@nomicfoundation/hardhat-ignition@0.15.5(@nomicfoundation/hardhat-verify@2.0.9)(hardhat@2.22.8): resolution: {integrity: sha512-Y5nhFXFqt4owA6Ooag8ZBFDF2RAZElMXViknVIsi3m45pbQimS50ti6FU8HxfRkDnBARa40CIn7UGV0hrelzDw==} peerDependencies: '@nomicfoundation/hardhat-verify': ^2.0.1 hardhat: ^2.18.0 dependencies: - '@nomicfoundation/hardhat-verify': 2.0.9(hardhat@2.22.7) + '@nomicfoundation/hardhat-verify': 2.0.9(hardhat@2.22.8) '@nomicfoundation/ignition-core': 0.15.5 '@nomicfoundation/ignition-ui': 0.15.5 chalk: 4.1.2 debug: 4.3.6(supports-color@8.1.1) fs-extra: 10.1.0 - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) prompts: 2.4.2 transitivePeerDependencies: - bufferutil @@ -815,16 +916,16 @@ packages: - utf-8-validate dev: true - /@nomicfoundation/hardhat-network-helpers@1.0.11(hardhat@2.22.7): + /@nomicfoundation/hardhat-network-helpers@1.0.11(hardhat@2.22.8): resolution: {integrity: sha512-uGPL7QSKvxrHRU69dx8jzoBvuztlLCtyFsbgfXIwIjnO3dqZRz2GNMHJoO3C3dIiUNM6jdNF4AUnoQKDscdYrA==} peerDependencies: hardhat: ^2.9.5 dependencies: ethereumjs-util: 7.1.5 - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) dev: true - /@nomicfoundation/hardhat-toolbox@5.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.7)(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition-ethers@0.15.5)(@nomicfoundation/hardhat-network-helpers@1.0.11)(@nomicfoundation/hardhat-verify@2.0.9)(@typechain/ethers-v6@0.5.1)(@typechain/hardhat@9.1.0)(@types/chai@4.3.17)(@types/mocha@10.0.7)(@types/node@22.1.0)(chai@4.5.0)(ethers@6.13.2)(hardhat-gas-reporter@1.0.10)(hardhat@2.22.7)(solidity-coverage@0.8.12)(ts-node@10.9.2)(typechain@8.3.2)(typescript@5.5.4): + /@nomicfoundation/hardhat-toolbox@5.0.0(@nomicfoundation/hardhat-chai-matchers@2.0.7)(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition-ethers@0.15.5)(@nomicfoundation/hardhat-network-helpers@1.0.11)(@nomicfoundation/hardhat-verify@2.0.9)(@typechain/ethers-v6@0.5.1)(@typechain/hardhat@9.1.0)(@types/chai@4.3.17)(@types/mocha@10.0.7)(@types/node@20.14.14)(chai@4.5.0)(ethers@6.13.2)(hardhat-gas-reporter@1.0.10)(hardhat@2.22.8)(solidity-coverage@0.8.12)(ts-node@10.9.2)(typechain@8.3.2)(typescript@5.5.4): resolution: {integrity: sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==} peerDependencies: '@nomicfoundation/hardhat-chai-matchers': ^2.0.0 @@ -846,27 +947,27 @@ packages: typechain: ^8.3.0 typescript: '>=4.5.0' dependencies: - '@nomicfoundation/hardhat-chai-matchers': 2.0.7(@nomicfoundation/hardhat-ethers@3.0.6)(chai@4.5.0)(ethers@6.13.2)(hardhat@2.22.7) - '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2)(hardhat@2.22.7) - '@nomicfoundation/hardhat-ignition-ethers': 0.15.5(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition@0.15.5)(@nomicfoundation/ignition-core@0.15.5)(ethers@6.13.2)(hardhat@2.22.7) - '@nomicfoundation/hardhat-network-helpers': 1.0.11(hardhat@2.22.7) - '@nomicfoundation/hardhat-verify': 2.0.9(hardhat@2.22.7) + '@nomicfoundation/hardhat-chai-matchers': 2.0.7(@nomicfoundation/hardhat-ethers@3.0.6)(chai@4.5.0)(ethers@6.13.2)(hardhat@2.22.8) + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.13.2)(hardhat@2.22.8) + '@nomicfoundation/hardhat-ignition-ethers': 0.15.5(@nomicfoundation/hardhat-ethers@3.0.6)(@nomicfoundation/hardhat-ignition@0.15.5)(@nomicfoundation/ignition-core@0.15.5)(ethers@6.13.2)(hardhat@2.22.8) + '@nomicfoundation/hardhat-network-helpers': 1.0.11(hardhat@2.22.8) + '@nomicfoundation/hardhat-verify': 2.0.9(hardhat@2.22.8) '@typechain/ethers-v6': 0.5.1(ethers@6.13.2)(typechain@8.3.2)(typescript@5.5.4) - '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.13.2)(hardhat@2.22.7)(typechain@8.3.2) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.13.2)(hardhat@2.22.8)(typechain@8.3.2) '@types/chai': 4.3.17 '@types/mocha': 10.0.7 - '@types/node': 22.1.0 + '@types/node': 20.14.14 chai: 4.5.0 ethers: 6.13.2 - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) - hardhat-gas-reporter: 1.0.10(hardhat@2.22.7) - solidity-coverage: 0.8.12(hardhat@2.22.7) - ts-node: 10.9.2(@types/node@22.1.0)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) + hardhat-gas-reporter: 1.0.10(hardhat@2.22.8) + solidity-coverage: 0.8.12(hardhat@2.22.8) + ts-node: 10.9.2(@types/node@20.14.14)(typescript@5.5.4) typechain: 8.3.2(typescript@5.5.4) typescript: 5.5.4 dev: true - /@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.7): + /@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.8): resolution: {integrity: sha512-7kD8hu1+zlnX87gC+UN4S0HTKBnIsDfXZ/pproq1gYsK94hgCk+exvzXbwR0X2giiY/RZPkqY9oKRi0Uev91hQ==} peerDependencies: hardhat: ^2.22.72.0.4 @@ -876,7 +977,7 @@ packages: cbor: 8.1.0 chalk: 2.4.2 debug: 4.3.6(supports-color@8.1.1) - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) lodash.clonedeep: 4.5.0 semver: 6.3.1 table: 6.8.2 @@ -1254,7 +1355,7 @@ packages: peerDependencies: '@polkadot/util': 12.6.2 dependencies: - '@noble/curves': 1.4.2 + '@noble/curves': 1.5.0 '@noble/hashes': 1.4.0 '@polkadot/networks': 12.6.2 '@polkadot/util': 12.6.2 @@ -1415,7 +1516,7 @@ packages: dependencies: '@polkadot/x-global': 12.6.2 tslib: 2.6.3 - ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -1536,7 +1637,7 @@ packages: resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==} dependencies: '@babel/runtime': 7.25.0 - '@noble/curves': 1.4.2 + '@noble/curves': 1.5.0 '@noble/hashes': 1.4.0 '@solana/buffer-layout': 4.0.1 agentkeepalive: 4.5.0 @@ -1653,7 +1754,7 @@ packages: typescript: 5.5.4 dev: true - /@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.13.2)(hardhat@2.22.7)(typechain@8.3.2): + /@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1)(ethers@6.13.2)(hardhat@2.22.8)(typechain@8.3.2): resolution: {integrity: sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==} peerDependencies: '@typechain/ethers-v6': ^0.5.1 @@ -1664,20 +1765,20 @@ packages: '@typechain/ethers-v6': 0.5.1(ethers@6.13.2)(typechain@8.3.2)(typescript@5.5.4) ethers: 6.13.2 fs-extra: 9.1.0 - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) typechain: 8.3.2(typescript@5.5.4) dev: true /@types/bn.js@4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 dev: true /@types/bn.js@5.1.5: resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 dev: true /@types/chai-as-promised@7.1.8: @@ -1693,39 +1794,43 @@ packages: /@types/concat-stream@1.6.1: resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 dev: true /@types/form-data@0.0.33: resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 dev: true /@types/fs-extra@11.0.4: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.1.0 + '@types/node': 20.14.14 dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.1.0 + '@types/node': 20.14.14 + dev: true + + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 dev: true /@types/lru-cache@5.1.1: @@ -1762,10 +1867,10 @@ packages: undici-types: 5.26.5 dev: true - /@types/node@22.1.0: - resolution: {integrity: sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==} + /@types/node@20.14.14: + resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} dependencies: - undici-types: 6.13.0 + undici-types: 5.26.5 dev: true /@types/node@8.10.66: @@ -1775,7 +1880,7 @@ packages: /@types/pbkdf2@3.1.2: resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 dev: true /@types/prettier@2.7.3: @@ -1793,7 +1898,11 @@ packages: /@types/secp256k1@4.0.6: resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 + dev: true + + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true /@types/uuid@8.3.4: @@ -1807,13 +1916,147 @@ packages: /@types/ws@7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 dev: true /@types/ws@8.5.12: resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} dependencies: - '@types/node': 22.1.0 + '@types/node': 20.14.14 + dev: true + + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) + debug: 4.3.6(supports-color@8.1.1) + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare-lite: 1.4.0 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) + debug: 4.3.6(supports-color@8.1.1) + eslint: 8.57.0 + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager@5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) + debug: 4.3.6(supports-color@8.1.1) + eslint: 8.57.0 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.6(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) + eslint: 8.57.0 + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys@5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true /JSONStream@1.3.5: @@ -1828,6 +2071,14 @@ packages: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} dev: true + /acorn-jsx@5.3.2(acorn@8.12.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.12.1 + dev: true + /acorn-walk@8.3.3: resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} @@ -1893,6 +2144,15 @@ packages: ajv: 8.17.1 dev: 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.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: @@ -2290,6 +2550,11 @@ packages: set-function-length: 1.2.2 dev: true + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -2553,6 +2818,23 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true + /cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + 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 @@ -2683,6 +2965,18 @@ packages: path-type: 4.0.0 dev: true + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: true + /drbg.js@1.0.1: resolution: {integrity: sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==} engines: {node: '>=0.10'} @@ -2873,6 +3167,83 @@ packages: source-map: 0.2.0 dev: true + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.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.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.11.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.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.6(supports-color@8.1.1) + 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.6.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.4 + 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.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 3.4.3 + dev: true + /esprima@2.7.3: resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} engines: {node: '>=0.10.0'} @@ -2885,11 +3256,35 @@ packages: hasBin: true dev: true + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + 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@1.9.3: resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==} engines: {node: '>=0.10.0'} dev: true + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.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'} @@ -3044,7 +3439,7 @@ packages: '@types/node': 18.15.13 aes-js: 4.0.0-beta.5 tslib: 2.4.0 - ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.17.1 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -3109,6 +3504,10 @@ packages: micromatch: 4.0.7 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 @@ -3135,6 +3534,13 @@ packages: web-streams-polyfill: 3.3.3 dev: 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 + /file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} dev: true @@ -3168,11 +3574,24 @@ packages: 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.3.1 + 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.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true + /follow-redirects@1.15.6(debug@4.3.6): resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} @@ -3358,6 +3777,13 @@ packages: 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@5.0.15: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} deprecated: Glob versions prior to v9 are no longer supported @@ -3393,6 +3819,18 @@ packages: path-is-absolute: 1.0.1 dev: true + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + 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'} @@ -3421,6 +3859,13 @@ packages: which: 1.3.1 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.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -3437,7 +3882,19 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - glob: 7.2.0 + glob: 7.2.3 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 @@ -3464,6 +3921,10 @@ packages: 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 + /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -3477,14 +3938,14 @@ packages: uglify-js: 3.19.1 dev: true - /hardhat-gas-reporter@1.0.10(hardhat@2.22.7): + /hardhat-gas-reporter@1.0.10(hardhat@2.22.8): resolution: {integrity: sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==} peerDependencies: hardhat: ^2.0.2 dependencies: array-uniq: 1.0.3 eth-gas-reporter: 0.2.27 - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) sha1: 1.1.1 transitivePeerDependencies: - '@codechecks/client' @@ -3493,8 +3954,8 @@ packages: - utf-8-validate dev: true - /hardhat@2.22.7(ts-node@10.9.2)(typescript@5.5.4): - resolution: {integrity: sha512-nrXQAl+qUr75TsCLDo8P41YXLc+5U7qQMMCIrbbmy1/uQaVPncdjDrD5BR0CENvHRj7EBqO+JkofpozXoIfJKg==} + /hardhat@2.22.8(ts-node@10.9.2)(typescript@5.5.4): + resolution: {integrity: sha512-hPh2feBGRswkXkoXUFW6NbxgiYtEzp/3uvVFjYROy6fA9LH8BobUyxStlyhSKj4+v1Y23ZoUBOVWL84IcLACrA==} hasBin: true peerDependencies: ts-node: '*' @@ -3544,7 +4005,7 @@ packages: solc: 0.8.26(debug@4.3.6) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 - ts-node: 10.9.2(@types/node@22.1.0)(typescript@5.5.4) + ts-node: 10.9.2(@types/node@20.14.14)(typescript@5.5.4) tsort: 0.0.1 typescript: 5.5.4 undici: 5.28.4 @@ -3706,6 +4167,19 @@ packages: resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} dev: 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 + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -3781,6 +4255,13 @@ packages: engines: {node: '>= 0.4'} dev: true + /is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.2 + dev: true + /is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} @@ -3839,6 +4320,11 @@ packages: engines: {node: '>=0.12.0'} dev: 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'} @@ -3956,10 +4442,22 @@ packages: argparse: 2.0.1 dev: true + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + 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-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true @@ -3997,6 +4495,12 @@ packages: 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 + /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -4015,6 +4519,14 @@ packages: type-check: 0.3.2 dev: 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 + /locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -4042,6 +4554,10 @@ packages: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} dev: true + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + /lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true @@ -4218,6 +4734,14 @@ packages: resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} dev: true + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + /ndjson@2.0.0: resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} engines: {node: '>=10'} @@ -4367,6 +4891,18 @@ packages: word-wrap: 1.2.5 dev: true + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + dev: true + /ordinal@1.0.3: resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} dev: true @@ -4416,6 +4952,13 @@ packages: engines: {node: '>=4'} 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 @@ -4435,6 +4978,11 @@ packages: 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 @@ -4485,6 +5033,11 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + /prettier-plugin-solidity@1.3.1(prettier@3.3.3): resolution: {integrity: sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==} engines: {node: '>=16'} @@ -4565,6 +5118,11 @@ packages: event-stream: 3.3.4 dev: true + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + /qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -4624,7 +5182,7 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} dependencies: - resolve: 1.17.0 + resolve: 1.22.8 dev: true /recursive-readdir@2.2.3: @@ -4682,6 +5240,11 @@ packages: engines: {node: '>=4'} dev: true + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + /resolve@1.1.7: resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} dev: true @@ -4692,11 +5255,28 @@ packages: path-parse: 1.0.7 dev: true + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.15.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: @@ -4720,7 +5300,7 @@ packages: buffer: 6.0.3 eventemitter3: 5.0.1 uuid: 8.3.2 - ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) optionalDependencies: bufferutil: 4.0.8 utf-8-validate: 5.0.10 @@ -4895,12 +5475,24 @@ packages: crypt: 0.0.2 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 + /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} hasBin: true dependencies: - glob: 7.2.0 + glob: 7.2.3 interpret: 1.4.0 rechoir: 0.6.2 dev: true @@ -4942,7 +5534,7 @@ packages: resolution: {integrity: sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g==} requiresBuild: true dependencies: - ws: 8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -4969,7 +5561,7 @@ packages: resolution: {integrity: sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==} dev: true - /solidity-coverage@0.8.12(hardhat@2.22.7): + /solidity-coverage@0.8.12(hardhat@2.22.8): resolution: {integrity: sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==} hasBin: true peerDependencies: @@ -4984,7 +5576,7 @@ packages: ghost-testrpc: 0.0.2 global-modules: 2.0.0 globby: 10.0.2 - hardhat: 2.22.7(ts-node@10.9.2)(typescript@5.5.4) + hardhat: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) jsonschema: 1.4.1 lodash: 4.17.21 mocha: 10.7.0 @@ -5171,6 +5763,11 @@ packages: 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 + /sync-request@6.1.0: resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} engines: {node: '>=8.0.0'} @@ -5211,6 +5808,10 @@ packages: resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} 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'} @@ -5286,7 +5887,7 @@ packages: typescript: 5.5.4 dev: true - /ts-node@10.9.2(@types/node@22.1.0)(typescript@5.5.4): + /ts-node@10.9.2(@types/node@20.14.14)(typescript@5.5.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -5305,7 +5906,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.1.0 + '@types/node': 20.14.14 acorn: 8.12.1 acorn-walk: 8.3.3 arg: 4.1.3 @@ -5333,6 +5934,16 @@ packages: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} dev: true + /tsutils@3.21.0(typescript@5.5.4): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.5.4 + dev: true + /tweetnacl-util@0.15.1: resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} dev: true @@ -5348,6 +5959,13 @@ packages: prelude-ls: 1.1.2 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.1.0: resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} engines: {node: '>=4'} @@ -5483,10 +6101,6 @@ packages: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true - /undici-types@6.13.0: - resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} - dev: true - /undici@5.28.4: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} engines: {node: '>=14.0'} @@ -5509,6 +6123,12 @@ packages: engines: {node: '>= 0.8'} dev: true + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + /utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} @@ -5613,6 +6233,14 @@ packages: isexe: 2.0.0 dev: true + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + /which@3.0.1: resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5694,9 +6322,22 @@ packages: optional: true dev: true - /ws@8.17.1(bufferutil@4.0.8)(utf-8-validate@5.0.10): + /ws@8.17.1: resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} 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 + + /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 utf-8-validate: '>=5.0.2' From dbf7fdd82274aa6af71ef2cb0a2987eeb835043e Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 16:27:27 +0800 Subject: [PATCH 19/45] add vc-di-tests workspace --- package-lock.json | 12 +- package.json | 56 +- pnpm-lock.yaml | 8 +- scripts/deploy.ts | 4 +- scripts/run_parachain_worker.sh | 94 +- vc-di-tests/integration-tests/.env.local | 3 + .../integration-tests/.env.local.example | 5 + vc-di-tests/integration-tests/.eslintrc.json | 40 + .../assertion_contracts.test.ts | 163 + vc-di-tests/integration-tests/common/call.ts | 61 + .../integration-tests/common/common-types.ts | 47 + .../integration-tests/common/config.js | 4 + .../common/credential-json/achainable.json | 251 ++ .../common/credential-json/discord.json | 110 + .../common/credential-json/index.ts | 36 + .../common/credential-json/litentry.json | 16 + .../common/credential-json/nodereal.json | 311 ++ .../common/credential-json/oneblock.json | 44 + .../common/credential-json/twitter.json | 16 + .../common/credential-json/vip3.json | 30 + .../integration-tests/common/di-utils.ts | 534 +++ .../integration-tests/common/helpers.ts | 117 + .../integration-tests/common/transactions.ts | 164 + .../common/utils/assertion.ts | 198 + .../integration-tests/common/utils/common.ts | 5 + .../integration-tests/common/utils/context.ts | 92 + .../integration-tests/common/utils/crypto.ts | 235 + .../common/utils/identity-helper.ts | 235 + .../integration-tests/common/utils/index.ts | 15 + .../common/utils/integration-setup.ts | 45 + .../integration-tests/common/utils/storage.ts | 110 + .../common/utils/type-creators.ts | 40 + .../common/utils/vc-helper.ts | 348 ++ vc-di-tests/integration-tests/package.json | 68 + vc-di-tests/integration-tests/tsconfig.json | 20 + vc-di-tests/package.json | 9 + vc-di-tests/pnpm-lock.yaml | 3937 +++++++++++++++++ vc-di-tests/pnpm-workspace.yaml | 1 + 38 files changed, 7332 insertions(+), 152 deletions(-) create mode 100644 vc-di-tests/integration-tests/.env.local create mode 100644 vc-di-tests/integration-tests/.env.local.example create mode 100644 vc-di-tests/integration-tests/.eslintrc.json create mode 100644 vc-di-tests/integration-tests/assertion_contracts.test.ts create mode 100644 vc-di-tests/integration-tests/common/call.ts create mode 100644 vc-di-tests/integration-tests/common/common-types.ts create mode 100644 vc-di-tests/integration-tests/common/config.js create mode 100644 vc-di-tests/integration-tests/common/credential-json/achainable.json create mode 100644 vc-di-tests/integration-tests/common/credential-json/discord.json create mode 100644 vc-di-tests/integration-tests/common/credential-json/index.ts create mode 100644 vc-di-tests/integration-tests/common/credential-json/litentry.json create mode 100644 vc-di-tests/integration-tests/common/credential-json/nodereal.json create mode 100644 vc-di-tests/integration-tests/common/credential-json/oneblock.json create mode 100644 vc-di-tests/integration-tests/common/credential-json/twitter.json create mode 100644 vc-di-tests/integration-tests/common/credential-json/vip3.json create mode 100644 vc-di-tests/integration-tests/common/di-utils.ts create mode 100644 vc-di-tests/integration-tests/common/helpers.ts create mode 100644 vc-di-tests/integration-tests/common/transactions.ts create mode 100644 vc-di-tests/integration-tests/common/utils/assertion.ts create mode 100644 vc-di-tests/integration-tests/common/utils/common.ts create mode 100644 vc-di-tests/integration-tests/common/utils/context.ts create mode 100644 vc-di-tests/integration-tests/common/utils/crypto.ts create mode 100644 vc-di-tests/integration-tests/common/utils/identity-helper.ts create mode 100644 vc-di-tests/integration-tests/common/utils/index.ts create mode 100644 vc-di-tests/integration-tests/common/utils/integration-setup.ts create mode 100644 vc-di-tests/integration-tests/common/utils/storage.ts create mode 100644 vc-di-tests/integration-tests/common/utils/type-creators.ts create mode 100644 vc-di-tests/integration-tests/common/utils/vc-helper.ts create mode 100644 vc-di-tests/integration-tests/package.json create mode 100644 vc-di-tests/integration-tests/tsconfig.json create mode 100644 vc-di-tests/package.json create mode 100644 vc-di-tests/pnpm-lock.yaml create mode 100644 vc-di-tests/pnpm-workspace.yaml diff --git a/package-lock.json b/package-lock.json index 30af14e..98aeee6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "devDependencies": { "@ethersproject/providers": "^5.7.2", "@litentry/chaindata": "^0.1.1", - "@litentry/parachain-api": "latest", - "@litentry/sidechain-api": "latest", + "@litentry/@litentry/parachain-api": "latest", + "@litentry/@litentry/sidechain-api": "latest", "@litentry/vc-schema-validator": "^0.0.1", "@noble/ed25519": "^1.7.3", "@nomicfoundation/hardhat-ethers": "^3.0.6", @@ -1057,9 +1057,9 @@ "tslib": "^2.3.0" } }, - "node_modules/@litentry/parachain-api": { + "node_modules/@litentry/@litentry/parachain-api": { "version": "0.9.18-11.2", - "resolved": "https://registry.npmjs.org/@litentry/parachain-api/-/parachain-api-0.9.18-11.2.tgz", + "resolved": "https://registry.npmjs.org/@litentry/@litentry/parachain-api/-/@litentry/parachain-api-0.9.18-11.2.tgz", "integrity": "sha512-nnmX2o8j9Cbi6truI0CtIZ34dyAAKNGWmTIbfS5oXU3LVq20mdHErE8o9y/0j79yN+yFJwUvLpQMqanm6nwJYQ==", "dev": true, "dependencies": { @@ -1079,9 +1079,9 @@ "@polkadot/util-crypto": "^12.5.1" } }, - "node_modules/@litentry/sidechain-api": { + "node_modules/@litentry/@litentry/sidechain-api": { "version": "0.9.18-11", - "resolved": "https://registry.npmjs.org/@litentry/sidechain-api/-/sidechain-api-0.9.18-11.tgz", + "resolved": "https://registry.npmjs.org/@litentry/@litentry/sidechain-api/-/@litentry/sidechain-api-0.9.18-11.tgz", "integrity": "sha512-iAcCyM8YkVdNjPs+CbhGpeUN2EnvTvvs8+HsiL660OTPRWHwLn7f3MuzrCcjBaHjKErtY2gJ9F/P6pskg5MOrg==", "dev": true, "dependencies": { diff --git a/package.json b/package.json index 772a013..616626f 100644 --- a/package.json +++ b/package.json @@ -9,68 +9,24 @@ "deploy-contract": "./scripts/run_deploy.sh", "format": "prettier --write --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --write .", "check-format": "prettier --check --plugin=prettier-plugin-solidity 'contracts/**/*.sol' && prettier --check .", - "test": "npx hardhat test", - "integration-test": "node --loader ts-node/esm 'integration-tests/contracts.test.ts'" + "test": "npx hardhat test" }, "devDependencies": { - "@ethersproject/providers": "^5.7.2", "@litentry/chaindata": "^0.1.1", - "@litentry/parachain-api": "0.9.18-11.2", - "@litentry/sidechain-api": "0.9.18-11", - "@litentry/vc-schema-validator": "^0.0.1", - "@noble/ed25519": "^1.7.3", "@nomicfoundation/hardhat-ethers": "^3.0.6", "@nomicfoundation/hardhat-network-helpers": "^1.0.11", "@nomicfoundation/hardhat-toolbox": "^5.0.0", "@openzeppelin/contracts": "^4.9.6", - "@polkadot/api": "^10.9.1", - "@polkadot/api-augment": "^10.9.1", - "@polkadot/api-base": "^10.9.1", - "@polkadot/api-derive": "^10.9.1", - "@polkadot/keyring": "^12.2.1", - "@polkadot/rpc-core": "^10.9.1", - "@polkadot/types": "^10.9.1", - "@polkadot/types-augment": "^10.9.1", - "@polkadot/types-codec": "^10.9.1", - "@polkadot/types-create": "^10.9.1", - "@polkadot/types-known": "^10.9.1", - "@polkadot/types-support": "^10.9.1", - "@polkadot/util": "^12.5.1", - "@polkadot/util-crypto": "^12.5.1", - "@solana/web3.js": "^1.91.4", - "@types/chai": "^4.3.3", + "@polkadot/api": "^12.2.3", + "@polkadot/util": "^13.0.2", "@types/chai-as-promised": "^7.1.8", - "@types/mocha": "^10.0.7", - "@types/node": "^20.4.4", - "@types/ws": "^8.5.3", - "@typescript-eslint/eslint-plugin": "^5.60.0", - "@typescript-eslint/parser": "^5.60.0", - "add": "^2.0.6", - "bitcoinjs-lib": "^6.1.5", - "bitcoinjs-message": "^2.2.0", - "chai": "^4.3.6", + "@types/ws": "^8.5.12", "chai-as-promised": "^8.0.0", - "colors": "^1.4.0", - "cross-env": "^7.0.3", - "dotenv": "^16.0.3", - "ecpair": "^2.1.0", - "eslint": "^8.43.0", "ethers": "^6.13.1", - "hardhat": "^2.22.8", - "js-base64": "^3.7.5", - "micro-base58": "^0.5.1", - "mocha": "^10.1.0", - "mocha-steps": "^1.3.0", + "hardhat": "^2.22.6", "prettier": "^3.3.3", "prettier-plugin-solidity": "^1.3.1", - "scale-ts": "^0.2.11", - "tiny-secp256k1": "^2.2.3", - "ts-node": "^10.9.2", - "tweetnacl": "^1.0.3", - "typescript": "^5.5.4", - "websocket-as-promised": "^2.0.1", - "ws": "^8.17.1", - "zx": "^7.2.3" + "ws": "^8.18.0" }, "packageManager": "pnpm@8.7.6" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 53780ab..1bedf6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,10 +11,10 @@ devDependencies: '@litentry/chaindata': specifier: ^0.1.1 version: 0.1.1 - '@litentry/parachain-api': + '@litentry/@litentry/parachain-api': specifier: 0.9.18-11.2 version: 0.9.18-11.2 - '@litentry/sidechain-api': + '@litentry/@litentry/sidechain-api': specifier: 0.9.18-11 version: 0.9.18-11 '@litentry/vc-schema-validator': @@ -626,7 +626,7 @@ packages: tslib: 2.6.3 dev: true - /@litentry/parachain-api@0.9.18-11.2: + /@litentry/@litentry/parachain-api@0.9.18-11.2: resolution: {integrity: sha512-nnmX2o8j9Cbi6truI0CtIZ34dyAAKNGWmTIbfS5oXU3LVq20mdHErE8o9y/0j79yN+yFJwUvLpQMqanm6nwJYQ==} dependencies: '@polkadot/api': 10.13.1 @@ -649,7 +649,7 @@ packages: - utf-8-validate dev: true - /@litentry/sidechain-api@0.9.18-11: + /@litentry/@litentry/sidechain-api@0.9.18-11: resolution: {integrity: sha512-iAcCyM8YkVdNjPs+CbhGpeUN2EnvTvvs8+HsiL660OTPRWHwLn7f3MuzrCcjBaHjKErtY2gJ9F/P6pskg5MOrg==} dependencies: '@polkadot/api': 10.13.1 diff --git a/scripts/deploy.ts b/scripts/deploy.ts index 34fa07d..c2a0508 100644 --- a/scripts/deploy.ts +++ b/scripts/deploy.ts @@ -5,8 +5,8 @@ import { ApiPromise, WsProvider, Keyring } from '@polkadot/api' import { compactStripLength, hexToU8a, u8aToString } from '@polkadot/util' import crypto, { KeyObject } from 'crypto' -// TODO use type from parachain-api instead -// parachain-api using es-module, dynamic using commonjs, cannot import es-module package in commonjs now. +// TODO use type from @litentry/parachain-api instead +// @litentry/parachain-api using es-module, dynamic using commonjs, cannot import es-module package in commonjs now. const types = { WorkerRpcReturnValue: { value: 'Vec', diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 2b127c4..34babcd 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -2,111 +2,25 @@ set -eo pipefail -# This script is used to perform actions on the target host, including: -# - generate: generate the systemd service files from the template -# - restart: restart the parachain, or the worker, or both -# - upgrade-worker: uprade the worker0 to the rev in local repo -# -# TODO: -# the combinations of flags are not yet well verified/organised, especially the following: -# --only-worker -# --build -# --discard - -# ------------------------------ -# path setting -# ------------------------------ - -# CONFIG_DIR contains private configs. Need to prepare in advance. -WKDIR=$(dirname "$(readlink -f "$0")") -CONFIG_DIR="/opt/worker_configs" - -BASEDIR="/opt/litentry" -DOWNLOAD_BASEDIR="$BASEDIR/download" -PARACHAIN_BASEDIR="$BASEDIR/parachain" -WORKER_BASEDIR="$BASEDIR/worker" -BACKUP_BASEDIR="$BASEDIR/backup" -LOG_BACKUP_BASEDIR="$BACKUP_BASEDIR/log" -WORKER_BACKUP_BASEDIR="$BACKUP_BASEDIR/worker" -RELAYCHAIN_ALICE_BASEDIR="$PARACHAIN_BASEDIR/relay-alice" -RELAYCHAIN_BOB_BASEDIR="$PARACHAIN_BASEDIR/relay-bob" -PARACHAIN_ALICE_BASEDIR="$PARACHAIN_BASEDIR/para-alice" - -# ------------------------------ -# default arg setting -# ------------------------------ - -BUILD=false -BRANCH="dev" -DISCARD=false -WORKER_CONFIG="$CONFIG_DIR/config.json" -WORKER_ENV="$CONFIG_DIR/worker_env" -INTEL_KEY="$CONFIG_DIR/key_production.txt" -INTEL_SPID="$CONFIG_DIR/spid_production.txt" -CHAIN=rococo -ONLY_WORKER=false -PARACHAIN_HOST=localhost -PARACHAIN_PORT=9944 -COPY_FROM_DOCKER=false -PRODUCTION=false -ACTION= -CHECK=true -PARACHAIN_TAG=latest -WORKER_TAG=latest # ------------------------------ # Some global setting # ------------------------------ WORKER_COUNT=1 WORKER_ID=0 -PARACHAIN_ID= -OLD_MRENCLAVE= -NEW_MRENCLAVE= -OLD_SHARD= -LATEST_FINALIZED_BLOCK= -RELEASE_VERSION= -REPO="litentry/litentry-parachain" -REPO_DIR="/tmp/dev_deploy_src_repo" - -VERSION_PATTERN="\bp[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-w[0-9]+\.[0-9]+\.[0-9]+-[0-9]+\b" - -SGX_SDK=/opt/intel/sgxsdk -SGX_ENCLAVE_SIGNER=$SGX_SDK/bin/x64/sgx_sign - -# ------------------------------ -# main() -# ------------------------------ +PARACHAIN_TAG=latest +WORKER_TAG=latest +BASEDIR="/opt/litentry" +WORKER_BASEDIR="$BASEDIR/worker" function main { - # # 1/ check if $USER has sudo - # if sudo -l -U $USER 2>/dev/null | grep -q 'may run the following'; then - # source "$SGX_SDK/environment" - # else - # echo "$USER doesn't have sudo permission" - # exit 1 - # fi - - # # 2/ create folders if missing - # sudo mkdir -p "$BASEDIR" - # sudo chown -R $USER:$GROUPS "$BASEDIR" - # for d in "$LOG_BACKUP_BASEDIR" "$WORKER_BACKUP_BASEDIR" "$RELAYCHAIN_ALICE_BASEDIR" "$RELAYCHAIN_BOB_BASEDIR" \ - # "$PARACHAIN_ALICE_BASEDIR" "$WORKER_BASEDIR"; do - # mkdir -p "$d" - # done - - # echo "Worker count: $WORKER_COUNT" - restart_parachain_services sleep 30 restart_worker_services exit } -# ------------------------------ -# helper functions -# ------------------------------ - function print_divider { echo "------------------------------------------------------------" } diff --git a/vc-di-tests/integration-tests/.env.local b/vc-di-tests/integration-tests/.env.local new file mode 100644 index 0000000..261d96d --- /dev/null +++ b/vc-di-tests/integration-tests/.env.local @@ -0,0 +1,3 @@ +NODE_ENV = local +WORKER_ENDPOINT = ws://localhost:2000 +NODE_ENDPOINT = ws://localhost:9944 diff --git a/vc-di-tests/integration-tests/.env.local.example b/vc-di-tests/integration-tests/.env.local.example new file mode 100644 index 0000000..8541c84 --- /dev/null +++ b/vc-di-tests/integration-tests/.env.local.example @@ -0,0 +1,5 @@ +NODE_ENV = local +WORKER_ENDPOINT = ws://localhost:2000 +NODE_ENDPOINT = ws://localhost:9944 +BINARY_DIR=../../bin +LITENTRY_CLI_DIR=../../bin/litentry-cli diff --git a/vc-di-tests/integration-tests/.eslintrc.json b/vc-di-tests/integration-tests/.eslintrc.json new file mode 100644 index 0000000..0e93a11 --- /dev/null +++ b/vc-di-tests/integration-tests/.eslintrc.json @@ -0,0 +1,40 @@ +{ + "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"], + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], + "root": true, + "rules": { + /** + It's a temporary solution, folks. We had no choice but to shut it off, + because there's just a liiittle bit too much "any" lurking around in the code. + But fear not, my friends, for this is not the end of the story. + We shall return, armed with determination and resolve, + to tackle those "any" types head-on in the near future. + **/ + "@typescript-eslint/no-explicit-any": ["off"], + "@typescript-eslint/no-non-null-assertion": ["off"], + "@typescript-eslint/no-var-requires": ["off"], + + // explanation: https://typescript-eslint.io/rules/naming-convention/ + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "typeLike", + "format": ["StrictPascalCase"] + }, + { + "selector": "variable", + "modifiers": ["const"], + "format": ["strictCamelCase", "UPPER_CASE"] + }, + { + "selector": "function", + "format": ["strictCamelCase", "StrictPascalCase"] + }, + { + "selector": "parameter", + "format": ["strictCamelCase"] + } + ] + } +} diff --git a/vc-di-tests/integration-tests/assertion_contracts.test.ts b/vc-di-tests/integration-tests/assertion_contracts.test.ts new file mode 100644 index 0000000..b08dd04 --- /dev/null +++ b/vc-di-tests/integration-tests/assertion_contracts.test.ts @@ -0,0 +1,163 @@ +import { randomBytes, KeyObject } from 'crypto'; +import { step } from 'mocha-steps'; +import { buildValidations, initIntegrationTestContext } from './common/utils'; +import { assertIsInSidechainBlock, assertVc } from './common/utils/assertion'; +import { + getSidechainNonce, + getTeeShieldingKey, + sendRequestFromTrustedCall, + createSignedTrustedCallRequestVc, + createSignedTrustedCallLinkIdentity, +} from './common/di-utils'; // @fixme move to a better place +import type { IntegrationTestContext } from './common/common-types'; +import { aesKey } from './common/call'; +import type { CorePrimitivesIdentity, LitentryValidationData, Web3Network } from '@litentry/parachain-api'; +import fs from 'fs'; +import path from 'path'; +import { assert } from 'chai'; +import { genesisSubstrateWallet } from './common/helpers'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { subscribeToEvents } from './common/transactions'; +import { encryptWithTeeShieldingKey } from './common/utils/crypto'; +import { ethers } from 'ethers'; +import { sleep } from './common/utils'; +import { Bytes, Vec } from '@polkadot/types-codec'; + +describe('Test Vc (direct request)', function () { + let context: IntegrationTestContext = undefined as any; + let teeShieldingKey: KeyObject = undefined as any; + let aliceSubstrateIdentity: CorePrimitivesIdentity = undefined as any; + + let alice: KeyringPair = undefined as any; + let contractBytecode = undefined as any; + const linkIdentityRequestParams: { + nonce: number; + identity: CorePrimitivesIdentity; + validation: LitentryValidationData; + networks: Bytes | Vec; + }[] = []; + this.timeout(6000000); + + before(async () => { + context = await initIntegrationTestContext( + process.env.WORKER_ENDPOINT!, // @fixme evil assertion; centralize env access + process.env.NODE_ENDPOINT! // @fixme evil assertion; centralize env access + ); + teeShieldingKey = await getTeeShieldingKey(context); + aliceSubstrateIdentity = await context.web3Wallets.substrate.Alice.getIdentity(context); + alice = genesisSubstrateWallet('Alice'); + }); + + step('loading tokenmapping contract bytecode', async function () { + const file = path.resolve('./', './contracts/token_holding_amount/TokenMapping.sol/TokenMapping.json'); + const data = fs.readFileSync(file, 'utf8'); + contractBytecode = JSON.parse(data).bytecode; + assert.isNotEmpty(contractBytecode); + }); + + step('deploying tokenmapping contract via parachain pallet', async function () { + const secretValue = 'my-secrets-value'; + const secretEncoded = context.api.createType('String', secretValue).toU8a(); + const encryptedSecrets = encryptWithTeeShieldingKey(teeShieldingKey, secretEncoded); + + const secret = '0x' + encryptedSecrets.toString('hex'); + + const assertionId = '0x0000000000000000000000000000000000000003'; + const createAssertionEventsPromise = subscribeToEvents('evmAssertions', 'AssertionCreated', context.api); + + const proposal = context.api.tx.evmAssertions.createAssertion(assertionId, contractBytecode, [ + // At least three secrets are required here. + secret, + secret, + secret, + ]); + await context.api.tx.developerCommittee.execute(proposal, proposal.encodedLength).signAndSend(alice); + + const event = (await createAssertionEventsPromise).map((e) => e); + assert.equal(event.length, 1); + }); + + step('linking identities (alice)', async function () { + let currentNonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); + const getNextNonce = () => currentNonce++; + const evmNonce = getNextNonce(); + + const evmIdentity = await context.web3Wallets.evm.Alice.getIdentity(context); + const evmValidation = await buildValidations( + context, + aliceSubstrateIdentity, + evmIdentity, + evmNonce, + 'ethereum', + context.web3Wallets.evm.Alice + ); + const evmNetworks = context.api.createType('Vec', ['Ethereum', 'Bsc']); + linkIdentityRequestParams.push({ + nonce: evmNonce, + identity: evmIdentity, + validation: evmValidation, + networks: evmNetworks, + }); + + let counter = 0; + for (const { nonce, identity, validation, networks } of linkIdentityRequestParams) { + counter++; + const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; + const linkIdentityCall = await createSignedTrustedCallLinkIdentity( + context.api, + context.mrEnclave, + context.api.createType('Index', nonce), + context.web3Wallets.substrate.Alice, + aliceSubstrateIdentity, + identity.toHex(), + validation.toHex(), + networks.toHex(), + context.api.createType('Option', aesKey).toHex(), + requestIdentifier, + { + withWrappedBytes: false, + withPrefix: counter % 2 === 0, // alternate per entry + } + ); + + const res = await sendRequestFromTrustedCall(context, teeShieldingKey, linkIdentityCall); + await assertIsInSidechainBlock('linkIdentityCall', res); + } + }); + + step('requesting VC for deployed contract', async function () { + await sleep(30); + const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; + const nonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); + + const abiCoder = new ethers.utils.AbiCoder(); + const encodedData = abiCoder.encode(['string'], ['bnb']); + + const assertion = { + dynamic: context.api.createType('DynamicParams', [ + Uint8Array.from(Buffer.from('0000000000000000000000000000000000000003', 'hex')), + encodedData, + true, + ]), + }; + + const requestVcCall = await createSignedTrustedCallRequestVc( + context.api, + context.mrEnclave, + context.api.createType('Index', nonce), + context.web3Wallets.substrate.Alice, + aliceSubstrateIdentity, + context.api.createType('Assertion', assertion).toHex(), + context.api.createType('Option', aesKey).toHex(), + requestIdentifier, + { + withWrappedBytes: false, + withPrefix: true, + } + ); + + const res = await sendRequestFromTrustedCall(context, teeShieldingKey, requestVcCall); + await assertIsInSidechainBlock(`${Object.keys(assertion)[0]} requestVcCall`, res); + assertVc(context, aliceSubstrateIdentity, res.value); + }); +}); diff --git a/vc-di-tests/integration-tests/common/call.ts b/vc-di-tests/integration-tests/common/call.ts new file mode 100644 index 0000000..bb56bd8 --- /dev/null +++ b/vc-di-tests/integration-tests/common/call.ts @@ -0,0 +1,61 @@ +import { ApiPromise } from '@polkadot/api'; +import { hexToU8a, compactStripLength, u8aToString } from '@polkadot/util'; +import WebSocketAsPromised from 'websocket-as-promised'; +import type { JsonRpcRequest } from './common-types'; +import type { WorkerRpcReturnValue } from '@litentry/parachain-api'; +import { Metadata, TypeRegistry } from '@polkadot/types'; +import type { Bytes } from '@polkadot/types-codec'; +import { createJsonRpcRequest } from './helpers'; +// TODO: +// - better place to put these constants? +// - maybe randomise it in test initialisation +// +// the aes key to encrypt an AES request +export const aesKey = '0x22fc82db5b606998ad45099b7978b5b4f9dd4ea6017e57370ac56141caaabd12'; + +// nonce to encrypt an AES request together with `aesKey` +export const keyNonce = '0x010101010101010101010101'; + +// send RPC request +export async function sendRequest( + wsClient: WebSocketAsPromised, + request: JsonRpcRequest, + api: ApiPromise +): Promise { + const rawRes = await wsClient.sendRequest(request, { requestId: request.id, timeout: 6000 }); + + const res = api.createType('WorkerRpcReturnValue', rawRes.result); + if (res.status.isError) { + console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)); + } + + // unfortunately, the res.value only contains the hash of top + if (res.status.isTrustedOperationStatus && res.status.asTrustedOperationStatus[0].isInvalid) { + console.log('Rpc trusted operation execution failed, hash: ', res.value); + } + + return res; +} + +// decode the returned bytes as string +// TODO: is it same as `String::decode` in rust? +// please note we shouldn't use toU8a(), which encodes the Bytes instead of converting +export function decodeRpcBytesAsString(value: Bytes): string { + return u8aToString(compactStripLength(hexToU8a(value.toHex()))[1]); +} + +export async function getSidechainMetadata( + wsClient: WebSocketAsPromised, + api: ApiPromise, + requestId: number +): Promise<{ sidechainMetaData: Metadata; sidechainRegistry: TypeRegistry }> { + const request = createJsonRpcRequest('state_getMetadata', Uint8Array.from([]), requestId); + + const resp = await sendRequest(wsClient, request, api); + + const sidechainRegistry = new TypeRegistry(); + const sidechainMetaData = new Metadata(sidechainRegistry, resp.value); + + sidechainRegistry.setMetadata(sidechainMetaData); + return { sidechainMetaData, sidechainRegistry }; +} diff --git a/vc-di-tests/integration-tests/common/common-types.ts b/vc-di-tests/integration-tests/common/common-types.ts new file mode 100644 index 0000000..5e29060 --- /dev/null +++ b/vc-di-tests/integration-tests/common/common-types.ts @@ -0,0 +1,47 @@ +import { ApiPromise } from '@litentry/parachain-api'; +import { KeyObject } from 'crypto'; +import WebSocketAsPromised from 'websocket-as-promised'; +import { Metadata, TypeRegistry } from '@polkadot/types'; +import { Wallet } from 'ethers'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { HexString } from '@polkadot/util/types'; +import { ECPairInterface } from 'ecpair'; +import { Keypair } from '@solana/web3.js'; +import { Signer } from './utils/crypto'; +// If there are types already defined in the client-api, please avoid redefining these types. +// Instead, make every effort to use the types that have been generated within the client-api. + +interface WalletType { + [walletName: string]: Signer; +} +export interface Wallets { + evm: WalletType; + substrate: WalletType; + bitcoin: WalletType; + solana: WalletType; +} +export type IntegrationTestContext = { + tee: WebSocketAsPromised; + api: ApiPromise; + teeShieldingKey: KeyObject; + mrEnclave: HexString; + web3Wallets: Wallets; + sidechainMetaData: Metadata; + sidechainRegistry: TypeRegistry; + chainIdentifier: number; + requestId: number; +}; + +export type Web3Wallets = { + substrateWallet: KeyringPair; + evmWallet: Wallet; + bitcoinWallet: ECPairInterface; + solanaWallet: Keypair; +}; + +export type JsonRpcRequest = { + jsonrpc: string; + method: string; + params: any; + id: number; +}; diff --git a/vc-di-tests/integration-tests/common/config.js b/vc-di-tests/integration-tests/common/config.js new file mode 100644 index 0000000..3dbb229 --- /dev/null +++ b/vc-di-tests/integration-tests/common/config.js @@ -0,0 +1,4 @@ +import dotenv from 'dotenv'; + +// eslint-disable-next-line @typescript-eslint/no-var-requires, no-undef +dotenv.config({ path: `.env.${process.env.NODE_ENV || 'local'}` }); diff --git a/vc-di-tests/integration-tests/common/credential-json/achainable.json b/vc-di-tests/integration-tests/common/credential-json/achainable.json new file mode 100644 index 0000000..4306f7b --- /dev/null +++ b/vc-di-tests/integration-tests/common/credential-json/achainable.json @@ -0,0 +1,251 @@ +[ + { + "id": "bab-holder", + "name": "Trustworthy Binance user", + "description": "You are holding a Binance Account Bound(BAB) token", + "assertion": { + "id": "Achainable", + "payload": { + "Basic": { + "name": "BAB token holder", + "chain": "Bsc" + } + } + }, + "dataProvider": "achainable", + "network": "ethereum", + "mockDid": "litentry:evm:0xdB01C6a38E780a2644b3B26961b14313b019714a", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "uniswap-v2-v3-user", + "name": "Uniswap V2/V3 User", + "description": "You are a trader or liquidity provider of Uniswap V2 or V3\nUniswap V2 Factory Contract: 0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f\nUniswap V3 Factory Contract: 0x1f98431c8ad98523631ae4a59f267346ea31f984", + "assertion": { + "id": "Achainable", + "payload": { + "Basic": { + "name": "Uniswap V2/V3 user", + "chain": "Ethereum" + } + } + }, + "dataProvider": "achainable", + "network": "ethereum", + "mockDid": "litentry:evm:0x7031a420603a83EFBE85503e5A4BF562121A85ab", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "dot-holder", + "name": "DOT Holding Time", + "description": "The length of time a user continues to hold DOT token (threshold DOT > 5)", + "assertion": { + "id": "A7", + "payload": "5" + }, + "dataProvider": "achainable", + "network": "polkadot", + "mockDid": "litentry:substrate:0xbf6e312fd006908b0152da113ec73b9ffc9983f9b848698180b9b43c5ad44681", + "mockWeb3Network": "litentry,polkadot", + "expectedCredentialValue": true + }, + { + "id": "eth-holder", + "name": "ETH Holding Time", + "description": "The length of time a user continues to hold ETH token (threshold ETH > 0.01)", + "assertion": { + "id": "A11", + "payload": "0.01" + }, + "dataProvider": "achainable", + "network": "ethereum", + "mockDid": "litentry:evm:0x6887246668a3b87F54DeB3b94Ba47a6f63F32985", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": false + }, + { + "id": "wbtc-holder", + "name": "WBTC Holding Time", + "description": "The length of time a user continues to hold WBTC token (threshold WBTC > 0.001)", + "assertion": { + "id": "A10", + "payload": 0.001 + }, + "dataProvider": "achainable", + "network": "ethereum", + "mockDid": "litentry:evm:0x5680b3FcBB64FB161adbD347BC92e8DDEDA97008", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "lit-holder", + "name": "LIT Holding Time", + "description": "The length of time a user continues to hold LIT token (threshold LIT > 10)", + "assertion": { + "id": "A4", + "payload": "10" + }, + "dataProvider": "achainable", + "network": "litentry", + "mockDid": "litentry:substrate:0x6c7fdb8b8eaad1af9faaf918493606e1a3e8c20f9d852773ab5ebfbb93bd1948", + "mockWeb3Network": "litentry,polkadot", + "expectedCredentialValue": true + }, + { + "id": "ethereum-account-class-of-year", + "name": "Ethereum Account Class of Year", + "description": "The class of year that your Ethereum account was created (must have on-chain records)", + "assertion": { + "id": "achainable", + "payload": { + "ClassOfYear": { + "name": "Account created between {dates}", + "chain": "Ethereum" + } + } + }, + "dataProvider": "achainable", + "network": "ethereum", + "mockDid": "litentry:evm:0x3D66aF7cBeb2d9c6b4497a2269F7e3fcd9996524", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "evm-transaction-count", + "name": "ETH Transaction Count", + "description": "Your total transaction amount on these EVM networks: Ethereum", + "assertion": { + "id": "A8", + "payload": ["Ethereum"] + }, + "dataProvider": "achainable", + "network": "ethereum", + "mockDid": "litentry:evm:0xb144EeFd29B2E448419fd8dD6Cd6c7EB258D4715", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": false + }, + { + "id": "litentry-transaction-count", + "name": "LIT Transaction Count", + "description": "Your total transaction amount on these Substrate networks: Litentry, Litmus, Ethereum.", + "assertion": { + "id": "A8", + "payload": ["Litentry", "Litmus", "Ethereum"] + }, + "dataProvider": "achainable", + "network": "litentry", + "mockDid": "litentry:substrate:0xcacb83fc3d36caa4d03a80c0669aa19b38ffd1a9bb54d78b719fac1942816b40", + "mockWeb3Network": "litentry,polkadot", + "expectedCredentialValue": true + }, + { + "id": "polkadot-governance-participation", + "name": "Polkadot Governance Participation Proof", + "description": "You have ever participated in any Polkadot on-chain governance events. This credential is counting: Technical Committee Proposals, Democracy Proposals, Council Proposals, Proposal Seconds, Proposal Votes, Democracy Votes, Council Votes, Treasury Spend Proposals.", + "assertion": { + "id": "A14", + "payload": [] + }, + "dataProvider": "achainable", + "network": "litentry", + "mockDid": "litentry:substrate:0x5FeEE1E799015A22EbD216d43484FCB3BA88de20", + "mockWeb3Network": "litentry,polkadot", + "expectedCredentialValue": true + }, + { + "id": "contract-creator", + "name": "Ethereum Contract Creator", + "description": "You are a deployer of a smart contract on these networks: Ethereum", + "assertion": { + "id": "Achainable", + "payload": { + "Amount": { + "name": "Created over {amount} contracts", + "chain": "Ethereum", + "amount": "0" + } + } + }, + "dataProvider": "achainable", + "network": "ethereum", + "mockDid": "litentry:evm:0x11fBffc1F3dF23E7219e2B3036fe2A12C10cD3AD", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holder-dot", + "name": "DOT Holder", + "description": "The number of DOT tokens you hold > 0", + "assertion": { + "id": "Achainable", + "payload": { + "Amount": { + "name": "Balance over {amount}", + "chain": "Polkadot", + "amount": "0" + } + } + }, + "dataProvider": "achainable", + "network": "litentry", + "mockDid": "litentry:substrate:0x0d584a4cbbfd9a4878d816512894e65918e54fae13df39a6f520fc90caea2fb0", + "mockWeb3Network": "litentry,polkadot", + "expectedCredentialValue": true + }, + { + "id": "token-holder-eth", + "name": "ETH Holder", + "description": "The number of ETH tokens you hold > 0", + "assertion": { + "id": "Achainable", + "payload": { + "Amount": { + "name": "Balance over {amount}", + "chain": "Ethereum", + "amount": "0" + } + } + }, + "dataProvider": "achainable", + "network": "litentry", + "mockDid": "litentry:evm:0x66485bB62896Bd7bE54dE8E2050cc8746a50E0b2", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holder-lit", + "name": "LIT Holder", + "description": "The number of LIT tokens you hold > 0", + "assertion": { + "id": "Achainable", + "payload": { + "Amount": { + "name": "Balance over {amount}", + "chain": "Litentry", + "amount": "0" + } + } + }, + "dataProvider": "achainable", + "network": "litentry", + "mockDid": "litentry:substrate:0xc0103c4b56ce752d05b16a88260e3a9e2c44306602a74c5edd1cd4ff56356f7c", + "mockWeb3Network": "litentry,polkadot", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-btcs", + "name": "BTCS Holding Time", + "description": "The number of BTCS tokens you hold > 0", + "assertion": { + "id": "Brc20AmountHolder", + "payload": [] + }, + "dataProvider": "achainable", + "network": "litentry", + "mockDid": "litentry:bitcoin:0x02dbb0aff6e115284ac2ac5795e299588dae74474ad4bd0e580e92163e80837da8", + "mockWeb3Network": "BitcoinP2tr", + "expectedCredentialValue": null + } +] diff --git a/vc-di-tests/integration-tests/common/credential-json/discord.json b/vc-di-tests/integration-tests/common/credential-json/discord.json new file mode 100644 index 0000000..3f3f28c --- /dev/null +++ b/vc-di-tests/integration-tests/common/credential-json/discord.json @@ -0,0 +1,110 @@ +[ + { + "id": "id-hubber", + "name": "Active Discord ID-Hubber", + "description": "You have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882", + "assertion": { + "id": "A3", + "payload": ["807161594245152800", "1093886939746291882", "1088092822592307240"] + }, + "dataProvider": "discord", + "network": "discord", + "mockDid": "litentry:discord:niceguy2309", + "mockWeb3Network": "", + "expectedCredentialValue": true + }, + { + "id": "join-litentry-discord", + "name": "Litentry Discord Member", + "description": "The user is a member of Litentry Discord.\nServer link: 'https://discord.gg/phBSa3eMX9'.\nGuild ID: 807161594245152800", + "assertion": { + "id": "A2", + "payload": "807161594245152800" + }, + "dataProvider": "discord", + "network": "discord", + "mockDid": "litentry:discord:almuyaad_jr", + "mockWeb3Network": "", + "expectedCredentialValue": true + }, + { + "id": "litentry-and-sora-quiz-attendee", + "name": "Litentry & SORA Quiz Attendee", + "description": "Congratulations on your participation in our first quiz in collaboration with our partner, SORA. You have embarked on an exciting educational journey, exploring the world of DeFi & Web3 Identity, we truly appreciate your curiosity and dedication.", + "assertion": { + "id": "GenericDiscordRole", + "payload": { + "soraquiz": "attendee" + } + }, + "dataProvider": "discord", + "network": "discord", + "mockDid": "litentry:discord:light_bearer01", + "mockWeb3Network": "", + "expectedCredentialValue": false + }, + { + "id": "litentry-and-ordinals-user", + "name": "Litentry & Ordinals User", + "description": "Litentry Participants in the Bitcoin Ecosystem", + "assertion": { + "id": "GenericDiscordRole", + "payload": { + "soraquiz": "master" + } + }, + "dataProvider": "discord", + "network": "discord", + "mockDid": "litentry:discord:cynthian09021", + "mockWeb3Network": "", + "expectedCredentialValue": false + }, + { + "id": "score-contest-legend", + "name": "Contest Legend", + "description": "You got the Top Award of community contest", + "assertion": { + "id": "GenericDiscordRole", + "payload": { + "soraquiz": "legend" + } + }, + "dataProvider": "discord", + "network": "discord", + "mockDid": "litentry:discord:zawmyosatservice0737", + "mockWeb3Network": "", + "expectedCredentialValue": false + }, + { + "id": "score-contest-popularity", + "name": "Contest Popularity", + "description": "You got the Popularity of community contest", + "assertion": { + "id": "GenericDiscordRole", + "payload": { + "soraquiz": "popularity" + } + }, + "dataProvider": "discord", + "network": "discord", + "mockDid": "litentry:discord:eudizjr", + "mockWeb3Network": "", + "expectedCredentialValue": false + }, + { + "id": "score-contest-participant", + "name": "Contest Participant", + "description": "You got the Participant of community contest", + "assertion": { + "id": "GenericDiscordRole", + "payload": { + "soraquiz": "participant" + } + }, + "dataProvider": "discord", + "network": "discord", + "mockDid": "litentry:discord:neo_travolta", + "mockWeb3Network": "", + "expectedCredentialValue": false + } +] diff --git a/vc-di-tests/integration-tests/common/credential-json/index.ts b/vc-di-tests/integration-tests/common/credential-json/index.ts new file mode 100644 index 0000000..a98ef68 --- /dev/null +++ b/vc-di-tests/integration-tests/common/credential-json/index.ts @@ -0,0 +1,36 @@ +import { CorePrimitivesAssertion, CorePrimitivesNetworkWeb3Network } from '@litentry/parachain-api'; +import type { Codec } from '@polkadot/types-codec/types'; +import type { U8aLike } from '@polkadot/util/types'; + +type AssertionGenericPayload = string | Array | Record; + +import vip3Json from './vip3.json' assert { type: 'json' }; +import achainableJson from './achainable.json' assert { type: 'json' }; +import noderealJson from './nodereal.json' assert { type: 'json' }; +import discordJson from './discord.json' assert { type: 'json' }; +import litentryJson from './litentry.json' assert { type: 'json' }; +import twitterJson from './twitter.json' assert { type: 'json' }; +import oneblockJson from './oneblock.json' assert { type: 'json' }; +export const vip3 = vip3Json as unknown as CredentialDefinition[]; +export const achainable = achainableJson as unknown as CredentialDefinition[]; +export const nodereal = noderealJson as unknown as CredentialDefinition[]; +export const discord = discordJson as unknown as CredentialDefinition[]; +export const litentry = litentryJson as unknown as CredentialDefinition[]; +export const twitter = twitterJson as unknown as CredentialDefinition[]; +export const oneblock = oneblockJson as unknown as CredentialDefinition[]; +export const credentialsJson = [...vip3, ...achainable, ...nodereal, ...litentry, ...twitter, ...oneblock, ...discord]; + +export interface CredentialDefinition { + id: string; + name: string; + description: string; + assertion: { + id: CorePrimitivesAssertion['type']; + payload: AssertionGenericPayload; + }; + dataProvider: string; + network: CorePrimitivesNetworkWeb3Network['type']; + mockDid: string; + mockWeb3Network: string; + expectedCredentialValue: boolean; +} diff --git a/vc-di-tests/integration-tests/common/credential-json/litentry.json b/vc-di-tests/integration-tests/common/credential-json/litentry.json new file mode 100644 index 0000000..770dba8 --- /dev/null +++ b/vc-di-tests/integration-tests/common/credential-json/litentry.json @@ -0,0 +1,16 @@ +[ + { + "id": "evm-version-early-bird", + "name": "IDHub EVM Version Early Bird", + "description": "The user is an early bird user of the IdentityHub EVM version and has generated at least 1 credential during 2023 Aug 14th ~ Aug 21st.", + "assertion": { + "id": "A20", + "payload": [] + }, + "dataProvider": "litentryIndexer", + "network": "litentry", + "mockDid": "litentry:substrate:0xa20d2c66bd88271ce78b2d8b7367c025e108944fda26a5a4e95b5efcc3f26b45", + "mockWeb3Network": "litentry,polkadot", + "expectedCredentialValue": false + } +] diff --git a/vc-di-tests/integration-tests/common/credential-json/nodereal.json b/vc-di-tests/integration-tests/common/credential-json/nodereal.json new file mode 100644 index 0000000..298a0a7 --- /dev/null +++ b/vc-di-tests/integration-tests/common/credential-json/nodereal.json @@ -0,0 +1,311 @@ +[ + { + "id": "bnb-domain-holding-amount", + "name": ".bnb Holding Amount", + "description": "You are holding a certain amount of bnb domain names", + + "assertion": { + "id": "BnbDomainHolding", + "payload": [] + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xf813361F1FADC5c51EFdd0ba5b93e2760a5537EC", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "bnb-999-club-member", + "name": "000-999.bnb Domain Holding Amount", + "description": "You are holding a certain amount of 000-999.bnb domain names", + "assertion": { + "id": "BnbDigitDomainClub", + "payload": "Bnb999ClubMember" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xA6E3d8B20a5DC12c986AF63E496B8D585117aBBd", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "bnb-10k-club-member", + "name": "0000-9999.bnb Holding Amount", + "description": "You are holding a certain amount of 0000-9999.bnb domain names", + "assertion": { + "id": "BnbDigitDomainClub", + "payload": "Bnb10KClubMember" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xD673b52E4c560f5d2BD41fd92e7566Ef445DC5AB", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-amp", + "name": "AMP Holding Amount", + "description": "The number of AMP tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Amp" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x5029bC78f84Fc7F1568FbA1A7808e753691E6675", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-comp", + "name": "COMP Holding Amount", + "description": "The number of COMP tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Comp" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xA5044e67f0c35b31fe82F2Ded6606b0b91545e98", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-crv", + "name": "CRV Holding Amount", + "description": "The number of CRV tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Crv" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xd14A1dB9B2Bfe0cE9cC175C24d6B01a16aB84f42", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-cvx", + "name": "CVX Holding Amount", + "description": "The number of CVX tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Cvx" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xAA1582084c4f588eF9BE86F5eA1a919F86A3eE57", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-dydx", + "name": "DYDX Holding Amount", + "description": "The number of DYDX tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Dydx" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xe7DAE0cEd7a64d50136D466945257b600e718ACa", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-grt", + "name": "GRT Holding Amount", + "description": "The number of GRT tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Grt" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x46f80018211D5cBBc988e853A8683501FCA4ee9b", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-gtc", + "name": "GTC Holding Amount", + "description": "The number of GTC tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Gtc" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x310E035d176ccB589511eD16af7aE7BAc4fc7f83", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-gusd", + "name": "GUSD Holding Amount", + "description": "The number of GUSD tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Gusd" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x94CFF34005A073911C3179abE89F1677f0D37d42", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-link", + "name": "LINK Holding Amount", + "description": "The number of LINK tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Link" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xB4e9275827B5f049196f5337F69533937475A3de", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-lit", + "name": "LIT Holding Amount", + "description": "The number of LIT tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Lit" + }, + "dataProvider": "nodereal", + "network": "litentry", + "mockDid": "litentry:evm:0xcFD97648df7fB75A545c69106d2049aa3D540334", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-people", + "name": "PEOPLE Holding Amount", + "description": "The number of PEOPLE tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "People" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x60E4F4bF50204dEeeD8bF4C6216b41BA2e5e453a", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-ton", + "name": "TON Holding Amount", + "description": "The number of TON tokens you hold > 0", + "assertion": { + "id": "EvmAmountHolding", + "payload": "Ton" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x8BaE6C9EA994d18e6b05cE33aE3e54Fa6F7FcE82", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-trx", + "name": "TRX Holding Amount", + "description": "The number of TRX tokens you hold > 0", + "assertion": { + "id": "EvmAmountHolding", + "payload": "Trx" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x2d23D597b21F88c55fC6f1E2a84f42b06b7915dF", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-tusd", + "name": "TUSD Holding Amount", + "description": "The number of TUSD tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Tusd" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xDebc74120F822C0F0e6Eb69dB5F347F574d2D446", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-usdd", + "name": "USDD Holding Amount", + "description": "The number of USDD tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Usdd" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x31743a08D895d01a49dB98b8F9c8469D92f63745", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-usdt", + "name": "USDT Holding Amount", + "description": "The number of USDT tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Usdt" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x67aB29354a70732CDC97f372Be81d657ce8822cd", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-holding-amount-matic", + "name": "MATIC Holding Amount", + "description": "The number of MATIC tokens you hold > 0", + "assertion": { + "id": "TokenHoldingAmount", + "payload": "Matic" + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0x3B7BB88dB769923dC2eE1e9e6A83c00A74c407D2", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "token-staking-amount-lit", + "name": "LIT Staking Amount", + "description": "You are staking a certain amount of LIT", + "assertion": { + "id": "LitStaking", + "payload": [] + }, + "dataProvider": "nodereal", + "network": "litentry", + "mockDid": "litentry:substrate:0xfc7a9dd32be14db4695555aa9a2abd240a8c2160f84ccb403a985701dd13fe50", + "mockWeb3Network": "litentry,polkadot", + "expectedCredentialValue": true + }, + { + "id": "weirdo-ghost-gang-holder", + "name": "WeirdoGhostGang Holder", + "description": "You are WeirdoGhostGang NFT holder", + "assertion": { + "id": "WeirdoGhostGangHolder", + "payload": [] + }, + "dataProvider": "nodereal", + "network": "ethereum", + "mockDid": "litentry:evm:0xCaA18Cd73E2756c680859F0A97E2C4846D50f71B", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + } +] diff --git a/vc-di-tests/integration-tests/common/credential-json/oneblock.json b/vc-di-tests/integration-tests/common/credential-json/oneblock.json new file mode 100644 index 0000000..a3272ce --- /dev/null +++ b/vc-di-tests/integration-tests/common/credential-json/oneblock.json @@ -0,0 +1,44 @@ +[ + { + "id": "oneblock-course-participation", + "name": "OneBlock+ Substrate Blockchain Development Course Participation", + "description": "You were a participant to the course co-created by OneBlock+ and Parity: \"Introduction to Substrate Blockchain Development, Phase 12\".", + "assertion": { + "id": "Oneblock", + "payload": "CourseParticipation" + }, + "dataProvider": "oneblock", + "network": "oneblock", + "mockDid": "litentry:substrate:0xf26f4f77ccb38173185242cd1199696e5df5201666aae383de86eeb9e8251b3b", + "mockWeb3Network": "polkadot,kusama", + "expectedCredentialValue": false + }, + { + "id": "oneblock-course-completion", + "name": "OneBlock+ Substrate Blockchain Development Course Completion", + "description": "You have completed the course co-created by OneBlock+ and Parity: \"Introduction to Substrate Blockchain Development, Phase 12\". \n\n OneBlock+: “We hope you will keep your enthusiasm and continue to explore on the road ahead.”", + "assertion": { + "id": "Oneblock", + "payload": "CourseCompletion" + }, + "dataProvider": "oneblock", + "network": "oneblock", + "mockDid": "litentry:substrate:0xaa639b158b45acd0f4315be3a074aee110979f34123828a0c8ef74c24925d96f", + "mockWeb3Network": "polkadot,kusama", + "expectedCredentialValue": true + }, + { + "id": "oneblock-course-outstanding", + "name": "OneBlock+ Substrate Blockchain Development Course Outstanding Student", + "description": "You were awarded the title \"Outstanding Student\" in the course \"Introduction to Substrate Blockchain Development, Phase 12” co-created by OneBlock+ and Parity.", + "assertion": { + "id": "Oneblock", + "payload": "CourseOutstanding" + }, + "dataProvider": "oneblock", + "network": "oneblock", + "mockDid": "litentry:substrate:0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", + "mockWeb3Network": "polkadot,kusama", + "expectedCredentialValue": true + } +] diff --git a/vc-di-tests/integration-tests/common/credential-json/twitter.json b/vc-di-tests/integration-tests/common/credential-json/twitter.json new file mode 100644 index 0000000..c10bb75 --- /dev/null +++ b/vc-di-tests/integration-tests/common/credential-json/twitter.json @@ -0,0 +1,16 @@ +[ + { + "id": "twitter-follower-amount", + "name": "Twitter Follower Amount", + "description": "You have a certain amount of Twitter followers.", + "assertion": { + "id": "A6", + "payload": "A6" + }, + "dataProvider": "twitter", + "network": "twitter", + "mockDid": "litentry:twitter:litentry", + "mockWeb3Network": "", + "expectedCredentialValue": true + } +] diff --git a/vc-di-tests/integration-tests/common/credential-json/vip3.json b/vc-di-tests/integration-tests/common/credential-json/vip3.json new file mode 100644 index 0000000..a4c8573 --- /dev/null +++ b/vc-di-tests/integration-tests/common/credential-json/vip3.json @@ -0,0 +1,30 @@ +[ + { + "id": "vip3-membership-card-gold", + "name": "VIP3 Membership Card Gold", + "description": "VIP3 Membership Card Gold", + "assertion": { + "id": "Vip3MembershipCard", + "payload": "Gold" + }, + "dataProvider": "vip3", + "network": "ethereum", + "mockDid": "litentry:evm:0x651614cA9097C5ba189Ef85e7851Ef9cff592B2c", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + }, + { + "id": "vip3-membership-card-silver", + "name": "VIP3 Membership Card Silver", + "description": "VIP3 Membership Card Silver", + "assertion": { + "id": "Vip3MembershipCard", + "payload": "Silver" + }, + "dataProvider": "vip3", + "network": "ethereum", + "mockDid": "litentry:evm:0x10CdF7F7A32E2F24c853AE6567b75D862Ee2B46f", + "mockWeb3Network": "bsc,ethereum", + "expectedCredentialValue": true + } +] diff --git a/vc-di-tests/integration-tests/common/di-utils.ts b/vc-di-tests/integration-tests/common/di-utils.ts new file mode 100644 index 0000000..97a8cc0 --- /dev/null +++ b/vc-di-tests/integration-tests/common/di-utils.ts @@ -0,0 +1,534 @@ +import { ApiPromise } from '@polkadot/api'; +import { u8aToHex, hexToU8a, compactAddLength, bufferToU8a, u8aConcat, stringToU8a } from '@polkadot/util'; +import { Codec } from '@polkadot/types/types'; +import { TypeRegistry } from '@polkadot/types'; +import { Bytes } from '@polkadot/types-codec'; +import { IntegrationTestContext, JsonRpcRequest } from './common-types'; +import type { + WorkerRpcReturnValue, + TrustedCallSigned, + Getter, + CorePrimitivesIdentity, + TrustedGetterSigned, + TrustedCall, +} from '@litentry/parachain-api'; +import { + encryptWithTeeShieldingKey, + Signer, + encryptWithAes, + sleep, + createLitentryMultiSignature, + decryptWithAes, +} from './utils'; +import { aesKey, decodeRpcBytesAsString, keyNonce } from './call'; +import { createPublicKey, KeyObject } from 'crypto'; +import WebSocketAsPromised from 'websocket-as-promised'; +import { H256, Index } from '@polkadot/types/interfaces'; +import { blake2AsHex, base58Encode, blake2AsU8a } from '@polkadot/util-crypto'; +import { createJsonRpcRequest, nextRequestId, stfErrorToString } from './helpers'; + +// Send the request to worker ws +// we should perform different actions based on the returned status: +// +// `Submitted`: +// the request is submitted to the top pool, we should start to subscribe to parachain headers to wait for async parachain event +// +// `InSidechainBlock` +// the request is included in a sidechain block: the state mutation of sidechain is done, the promise is resolved +// the corresponding parachain event should be emitted **around** that, it's not guaranteed if it's before or after this status +// due to block inclusion delays from the parachain +// +async function sendRequest( + wsClient: WebSocketAsPromised, + request: JsonRpcRequest, + api: ApiPromise, + onMessageReceived?: (res: WorkerRpcReturnValue) => void +): Promise { + const p = new Promise((resolve, reject) => + wsClient.onMessage.addListener((data) => { + const parsed = JSON.parse(data); + if (parsed.id !== request.id) { + return; + } + + if ('error' in parsed) { + const transaction = { request, response: parsed }; + console.log('Request failed: ' + JSON.stringify(transaction, null, 2)); + reject(new Error(parsed.error.message, { cause: transaction })); + } + + const result = parsed.result; + const res = api.createType('WorkerRpcReturnValue', result); + + if (res.status.isError) { + console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)); + } + + if (res.status.isTrustedOperationStatus && res.status.asTrustedOperationStatus[0].isInvalid) { + console.log('Rpc trusted operation execution failed, hash: ', res.value.toHex()); + const stfError = api.createType('StfError', res.value); + const msg = stfErrorToString(stfError); + console.log('TrustedOperationStatus error: ', msg); + } + // sending every response we receive from websocket + if (onMessageReceived) onMessageReceived(res); + + // resolve it once `do_watch` is false, meaning it's the final response + if (res.do_watch.isFalse) { + // TODO: maybe only remove this listener + wsClient.onMessage.removeAllListeners(); + resolve(res); + } else { + // `do_watch` is true means: hold on - there's still something coming + console.log('do_watch is true, continue watching ...'); + } + }) + ); + + wsClient.sendRequest(request); + return p; +} + +// TrustedCalls are defined in: +// https://github.com/litentry/litentry-parachain/blob/d4be11716fdb46021194bbe9fe791b15249a369e/tee-worker/app-libs/stf/src/trusted_call.rs#L61 +// +// About the signature, it's signed with `KeyringPair` here. +// In reality we need to get the user's signature on the `payload`. +export const createSignedTrustedCall = async ( + parachainApi: ApiPromise, + trustedCall: [string, string], + signer: Signer, + // hex-encoded mrenclave, retrieveable from parachain enclave registry + // TODO: do we have a RPC getter from the enclave? + mrenclave: string, + nonce: Codec, + params: any, + withWrappedBytes = false, + withPrefix = false +): Promise => { + const [variant, argType] = trustedCall; + const call: TrustedCall = parachainApi.createType('TrustedCall', { + [variant]: parachainApi.createType(argType, params), + }); + let payload: string = blake2AsHex( + u8aConcat( + call.toU8a(), + nonce.toU8a(), + hexToU8a(mrenclave), + hexToU8a(mrenclave) // should be shard, but it's the same as MRENCLAVE in our case + ), + 256 + ); + + if (withWrappedBytes) { + payload = `${payload}`; + } + + if (withPrefix) { + const prefix = getSignatureMessagePrefix(call); + const msg = prefix + payload; + payload = msg; + console.log('Signing message: ', payload); + } + + const signature = await createLitentryMultiSignature(parachainApi, { + signer, + payload, + }); + + return parachainApi.createType('TrustedCallSigned', { + call: call, + index: nonce, + signature: signature, + }); +}; + +// See TrustedCall.signature_message_prefix +function getSignatureMessagePrefix(call: TrustedCall): string { + if (call.isLinkIdentity) { + return "By linking your identity to our platform, you're taking a step towards a more integrated experience. Please be assured, this process is safe and involves no transactions of your assets. Token: "; + } + + if (call.isRequestBatchVc) { + const [, , assertions] = call.asRequestBatchVc; + const length = assertions.length; + + return `We are going to help you generate ${length} secure credential${ + length > 1 ? 's' : '' + }. Please be assured, this process is safe and involves no transactions of your assets. Token: `; + } + + return 'Token: '; +} + +export const createSignedTrustedGetter = async ( + parachainApi: ApiPromise, + trustedGetter: [string, string], + signer: Signer, + params: any +): Promise => { + const [variant, argType] = trustedGetter; + const getter = parachainApi.createType('TrustedGetter', { + [variant]: parachainApi.createType(argType, params), + }); + const payload = blake2AsU8a(getter.toU8a(), 256); + + let signature = await createLitentryMultiSignature(parachainApi, { + signer, + payload, + }); + + return parachainApi.createType('TrustedGetterSigned', { + getter, + signature, + }); +}; + +export const createPublicGetter = (parachainApi: ApiPromise, publicGetter: [string, string], params: any) => { + const [variant, argType] = publicGetter; + const getter = parachainApi.createType('PublicGetter', { + [variant]: parachainApi.createType(argType, params), + }); + + return getter; +}; + +export async function createSignedTrustedCallLinkIdentity( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + identity: string, + validationData: string, + web3networks: string, + aesKey: string, + hash: string, + options?: { withWrappedBytes?: boolean; withPrefix?: boolean } +) { + return createSignedTrustedCall( + parachainApi, + [ + 'link_identity', + '(LitentryIdentity, LitentryIdentity, LitentryIdentity, LitentryValidationData, Vec, Option, H256)', + ], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, validationData, web3networks, aesKey, hash], + options?.withWrappedBytes, + options?.withPrefix + ); +} + +export async function createSignedTrustedCallSetIdentityNetworks( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + identity: string, + web3networks: string, + aesKey: string, + hash: string +) { + return createSignedTrustedCall( + parachainApi, + [ + 'set_identity_networks', + '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Vec, Option, H256)', + ], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, web3networks, aesKey, hash] + ); +} + +export async function createSignedTrustedCallRequestVc( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + assertion: string, + aesKey: string, + hash: string, + options?: { withWrappedBytes?: boolean; withPrefix?: boolean } +) { + return await createSignedTrustedCall( + parachainApi, + ['request_vc', '(LitentryIdentity, LitentryIdentity, Assertion, Option, H256)'], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), assertion, aesKey, hash], + options?.withWrappedBytes, + options?.withPrefix + ); +} + +export async function createSignedTrustedCallRequestBatchVc( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + assertion: string, + aesKey: string, + hash: string, + options?: { withWrappedBytes?: boolean; withPrefix?: boolean } +) { + return await createSignedTrustedCall( + parachainApi, + [ + 'request_batch_vc', + '(LitentryIdentity, LitentryIdentity, BoundedVec>, Option, H256)', + ], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), assertion, aesKey, hash], + options?.withWrappedBytes, + options?.withPrefix + ); +} + +export async function createSignedTrustedCallDeactivateIdentity( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + identity: string, + aesKey: string, + hash: string +) { + return createSignedTrustedCall( + parachainApi, + ['deactivate_identity', '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)'], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, aesKey, hash] + ); +} +export async function createSignedTrustedCallActivateIdentity( + parachainApi: ApiPromise, + mrenclave: string, + nonce: Codec, + signer: Signer, + primeIdentity: CorePrimitivesIdentity, + identity: string, + aesKey: string, + hash: string +) { + return createSignedTrustedCall( + parachainApi, + ['activate_identity', '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)'], + signer, + mrenclave, + nonce, + [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, aesKey, hash] + ); +} + +export async function createSignedTrustedGetterIdGraph( + parachainApi: ApiPromise, + signer: Signer, + primeIdentity: CorePrimitivesIdentity +): Promise { + const getterSigned = await createSignedTrustedGetter( + parachainApi, + ['id_graph', '(LitentryIdentity)'], + signer, + primeIdentity.toHuman() + ); + return parachainApi.createType('Getter', { trusted: getterSigned }); +} + +export const getSidechainNonce = async ( + context: IntegrationTestContext, + primeIdentity: CorePrimitivesIdentity +): Promise => { + const request = createJsonRpcRequest( + 'author_getNextNonce', + [base58Encode(hexToU8a(context.mrEnclave)), primeIdentity.toHex()], + nextRequestId(context) + ); + const res = await sendRequest(context.tee, request, context.api); + const nonceHex = res.value.toHex(); + let nonce = 0; + + if (nonceHex) { + nonce = context.api.createType('Index', '0x' + nonceHex.slice(2)?.match(/../g)?.reverse().join('')).toNumber(); + } + + return context.api.createType('Index', nonce); +}; + +export const getIdGraphHash = async ( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + primeIdentity: CorePrimitivesIdentity +): Promise => { + const getterPublic = createPublicGetter( + context.api, + ['id_graph_hash', '(LitentryIdentity)'], + primeIdentity.toHuman() + ); + const getter = context.api.createType('Getter', { public: getterPublic }); + const res = await sendRsaRequestFromGetter(context, teeShieldingKey, getter); + const hash = context.api.createType('Option', hexToU8a(res.value.toHex())).unwrap(); + return context.api.createType('H256', hash); +}; + +export const sendRequestFromTrustedCall = async ( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + call: TrustedCallSigned, + isVcDirect = false, + onMessageReceived?: (res: WorkerRpcReturnValue) => void +) => { + // construct trusted operation + const trustedOperation = context.api.createType('TrustedOperation', { direct_call: call }); + console.log('trustedOperation: ', JSON.stringify(trustedOperation.toHuman(), null, 2)); + // create the request parameter + const requestParam = await createAesRequest( + context.api, + context.mrEnclave, + teeShieldingKey, + hexToU8a(aesKey), + trustedOperation.toU8a() + ); + const request = createJsonRpcRequest( + isVcDirect ? 'author_requestVc' : 'author_submitAndWatchAesRequest', + [u8aToHex(requestParam)], + nextRequestId(context) + ); + return sendRequest(context.tee, request, context.api, onMessageReceived); +}; + +/** @deprecated use `sendAesRequestFromGetter` instead */ +export const sendRsaRequestFromGetter = async ( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + getter: Getter +): Promise => { + // important: we don't create the `TrustedOperation` type here, but use `Getter` type directly + // this is what `state_executeGetter` expects in rust + const requestParam = await createRsaRequest(context.api, context.mrEnclave, teeShieldingKey, true, getter.toU8a()); + const request = createJsonRpcRequest('state_executeGetter', [u8aToHex(requestParam)], nextRequestId(context)); + // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec + // hopefully we will query correct state + await sleep(1); + return sendRequest(context.tee, request, context.api); +}; + +export const sendAesRequestFromGetter = async ( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + aesKey: Uint8Array, + getter: Getter +): Promise => { + // important: we don't create the `TrustedOperation` type here, but use `Getter` type directly + // this is what `state_executeAesGetter` expects in rust + const requestParam = await createAesRequest( + context.api, + context.mrEnclave, + teeShieldingKey, + aesKey, + getter.toU8a() + ); + const request = createJsonRpcRequest('state_executeAesGetter', [u8aToHex(requestParam)], nextRequestId(context)); + // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec + // hopefully we will query correct state + await sleep(1); + const res = await sendRequest(context.tee, request, context.api); + const aesOutput = context.api.createType('AesOutput', res.value); + const decryptedValue = decryptWithAes(u8aToHex(aesKey), aesOutput, 'hex'); + + return context.api.createType('WorkerRpcReturnValue', { + value: decryptedValue, + do_watch: res.do_watch, + status: res.status, + }); +}; + +// get TEE's shielding key directly via RPC +export const getTeeShieldingKey = async (context: IntegrationTestContext) => { + const request = createJsonRpcRequest('author_getShieldingKey', Uint8Array.from([]), nextRequestId(context)); + const res = await sendRequest(context.tee, request, context.api); + const k = JSON.parse(decodeRpcBytesAsString(res.value)) as { + n: Uint8Array; + e: Uint8Array; + }; + + return createPublicKey({ + key: { + alg: 'RSA-OAEP-256', + kty: 'RSA', + use: 'enc', + n: Buffer.from(k.n.reverse()).toString('base64url'), + e: Buffer.from(k.e.reverse()).toString('base64url'), + }, + format: 'jwk', + }); +}; + +// given an encoded trusted operation, construct a rsa request bytes that are sent in RPC request parameters +export const createRsaRequest = async ( + parachainApi: ApiPromise, + mrenclave: string, + teeShieldingKey: KeyObject, + isGetter: boolean, + top: Uint8Array +) => { + let payload; + if (isGetter) { + payload = compactAddLength(top); + } else { + payload = compactAddLength(bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, top))); + } + + return parachainApi.createType('RsaRequest', { shard: hexToU8a(mrenclave), payload }).toU8a(); +}; + +// given an encoded trusted operation, construct an aes request bytes that are sent in RPC request parameters +export const createAesRequest = async ( + parachainApi: ApiPromise, + mrenclave: string, + teeShieldingKey: KeyObject, + aesKey: Uint8Array, + top: Uint8Array +) => { + const encryptedAesKey = compactAddLength(bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, aesKey))); + return parachainApi + .createType('AesRequest', { + shard: hexToU8a(mrenclave), + key: encryptedAesKey, + payload: parachainApi + .createType('AesOutput', { + ciphertext: compactAddLength( + hexToU8a(encryptWithAes(u8aToHex(aesKey), hexToU8a(keyNonce), Buffer.from(top))) + ), + aad: hexToU8a('0x'), + nonce: hexToU8a(keyNonce), + }) + .toU8a(), + }) + .toU8a(); +}; + +export function decodeIdGraph(sidechainRegistry: TypeRegistry, value: Bytes) { + const idgraphBytes = sidechainRegistry.createType('Option', hexToU8a(value.toHex())); + return sidechainRegistry.createType( + 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', + idgraphBytes.unwrap() + ); +} + +export function getTopHash(parachainApi: ApiPromise, call: TrustedCallSigned) { + const trustedOperation = parachainApi.createType('TrustedOperation', { direct_call: call }); + return blake2AsHex(trustedOperation.toU8a()); +} diff --git a/vc-di-tests/integration-tests/common/helpers.ts b/vc-di-tests/integration-tests/common/helpers.ts new file mode 100644 index 0000000..cc0dc6d --- /dev/null +++ b/vc-di-tests/integration-tests/common/helpers.ts @@ -0,0 +1,117 @@ +import { xxhashAsU8a, blake2AsU8a } from '@polkadot/util-crypto'; +import { u8aConcat, u8aToU8a } from '@polkadot/util'; +import { Keyring } from '@polkadot/api'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { HexString } from '@polkadot/util/types'; +import './config'; +import { IntegrationTestContext, JsonRpcRequest } from './common-types'; +import { createHash, randomBytes } from 'crypto'; +import { ECPairFactory, ECPairInterface } from 'ecpair'; +import * as ecc from 'tiny-secp256k1'; +import { ethers, Wallet } from 'ethers'; +import { Keypair } from '@solana/web3.js'; +import { EthersSigner, PolkadotSigner, BitcoinSigner, SolanaSigner } from './utils/crypto'; +import { Wallets } from './common-types'; +import type { ErrorDetail, StfError } from '@litentry/parachain-api'; + +export function blake2128Concat(data: HexString | Uint8Array): Uint8Array { + return u8aConcat(blake2AsU8a(data, 128), u8aToU8a(data)); +} + +export function twox64Concat(data: HexString | Uint8Array): Uint8Array { + return u8aConcat(xxhashAsU8a(data, 64), u8aToU8a(data)); +} + +export function identity(data: HexString | Uint8Array): Uint8Array { + return u8aToU8a(data); +} + +export function createJsonRpcRequest(method: string, params: any, id: number): JsonRpcRequest { + return { + jsonrpc: '2.0', + method, + params, + id, + }; +} + +export function nextRequestId(context: IntegrationTestContext): number { + const nextId = context.requestId + 1; + context.requestId = nextId; + return nextId; +} + +export function randomEvmWallet(): Wallet { + return ethers.Wallet.createRandom(); +} +export function randomSubstrateWallet(): KeyringPair { + const keyring = new Keyring({ type: 'sr25519' }); + return keyring.addFromSeed(randomBytes(32)); +} + +export function randomBitcoinWallet(): ECPairInterface { + const ecPair = ECPairFactory(ecc); + const keyPair = ecPair.makeRandom(); + return keyPair; +} + +export function genesisSubstrateWallet(name: string): KeyringPair { + const keyring = new Keyring({ type: 'sr25519' }); + const keyPair = keyring.addFromUri(`//${name}`, { name }); + return keyPair; +} + +export function genesisSolanaWallet(name: string): Keypair { + let seed = createHash('sha256').update(name).digest(); + seed = seed.subarray(0, 32); + const keyPair = Keypair.fromSeed(seed); + return keyPair; +} + +export const createWeb3Wallets = (): Wallets => { + const wallets: Wallets = { + evm: {}, + substrate: {}, + bitcoin: {}, + solana: {}, + }; + const walletNames = ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve']; + for (const name of walletNames) { + wallets.evm[name] = new EthersSigner(randomEvmWallet()); + wallets.substrate[name] = new PolkadotSigner(genesisSubstrateWallet(name)); + wallets.bitcoin[name] = new BitcoinSigner(randomBitcoinWallet()); + wallets.solana[name] = new SolanaSigner(genesisSolanaWallet(name)); + } + + return wallets; +}; + +export function stfErrorToString(stfError: StfError): string { + if (stfError.isRequestVCFailed) { + const [_assertionIgnored, errorDetail] = stfError.asRequestVCFailed; + + return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}`; + } + + if ( + stfError.isActivateIdentityFailed || + stfError.isDeactivateIdentityFailed || + stfError.isSetIdentityNetworksFailed || + stfError.isLinkIdentityFailed || + stfError.isMissingPrivileges || + stfError.isRemoveIdentityFailed || + stfError.isDispatch + ) { + const errorDetail = stfError.value as ErrorDetail; + + return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}`; + } + + if (stfError.isInvalidNonce) { + const [nonce1, nonce2] = stfError.asInvalidNonce; + + return `${stfError.type}: [${nonce1?.toHuman()}, ${nonce2?.toHuman()}]`; + } + + return stfError.type; +} diff --git a/vc-di-tests/integration-tests/common/transactions.ts b/vc-di-tests/integration-tests/common/transactions.ts new file mode 100644 index 0000000..b8ee954 --- /dev/null +++ b/vc-di-tests/integration-tests/common/transactions.ts @@ -0,0 +1,164 @@ +import { hexToU8a } from '@polkadot/util'; +import type { IntegrationTestContext } from './common-types'; + +import { + AddressOrPair, + ApiPromise, + ApiTypes, + FrameSystemEventRecord, + Keyring, + SubmittableExtrinsic, +} from '@litentry/parachain-api'; + +// for DI-test +export const subscribeToEventsWithExtHash = async ( + requestIdentifier: string, + context: IntegrationTestContext +): Promise => { + return new Promise((resolve, reject) => { + let blocksToScan = 30; + /* + WARNING:The unsubscribe function is called inside the Promise callback, which is executed each time a new blockHeader is received. + `unsubscribe` is intended to unsubscribe a blockHeader if certain conditions are met. + If you use await, you will actually wait for this function to finish executing. + However, since it doesn't return a Promise, using await doesn't make sense and can lead to problematic code behaviour. + soooooo, don't use await here + */ + const unsubscribe = context.api.rpc.chain.subscribeNewHeads(async (blockHeader) => { + const shiftedApi = await context.api.at(blockHeader.hash); + + const allBlockEvents = await shiftedApi.query.system.events(); + const allExtrinsicEvents = allBlockEvents.filter(({ phase }) => phase.isApplyExtrinsic); + + const matchingEvent = allExtrinsicEvents.filter((eventRecord) => { + const eventData = eventRecord.event.data.toHuman(); + return ( + eventData != undefined && + typeof eventData === 'object' && + 'reqExtHash' in eventData && + eventData.reqExtHash === requestIdentifier + ); + }); + + if (matchingEvent.length == 0) { + blocksToScan -= 1; + if (blocksToScan < 1) { + reject(new Error(`timed out listening for reqExtHash: ${requestIdentifier} in parachain events`)); + (await unsubscribe)(); + } + return; + } + + resolve(matchingEvent); + (await unsubscribe)(); + }); + }); +}; + +// for II-test +export const subscribeToEvents = async ( + section: string, + method: string, + api: ApiPromise +): Promise => { + return new Promise((resolve, reject) => { + let blocksToScan = 15; + const unsubscribe = api.rpc.chain.subscribeNewHeads(async (blockHeader) => { + const shiftedApi = await api.at(blockHeader.hash); + + const allBlockEvents = await shiftedApi.query.system.events(); + const allExtrinsicEvents = allBlockEvents.filter(({ phase }) => phase.isApplyExtrinsic); + + const matchingEvent = allExtrinsicEvents.filter(({ event, phase }) => { + return event.section === section && event.method === method; + }); + + if (matchingEvent.length == 0) { + blocksToScan -= 1; + if (blocksToScan < 1) { + reject(new Error(`timed out listening for event ${section}.${method}`)); + (await unsubscribe)(); + } + return; + } + + resolve(matchingEvent); + (await unsubscribe)(); + }); + }); +}; + +export async function waitForBlock(api: ApiPromise, blockNumber: number, blocksToCheck = 5) { + let count = 0; + + return new Promise((resolve, reject) => { + const unsubscribe = api.rpc.chain.subscribeNewHeads(async (header) => { + console.log(`Chain is at block: #${header.number}`); + + if (header.number.toNumber() === blockNumber) { + (await unsubscribe)(); + resolve(); + } + + if (++count === blocksToCheck) { + (await unsubscribe)(); + reject(new Error(`Timeout: Block #${blockNumber} not reached within ${blocksToCheck} blocks.`)); + } + }); + }); +} + +export async function setAliceAsAdmin(api: ApiPromise) { + // Get keyring of Alice, who is also the sudo in dev chain spec + const keyring = new Keyring({ type: 'sr25519' }); + const alice = keyring.addFromUri('//Alice'); + + const tx = await sudoWrapperGC(api, api.tx.teebag.setAdmin('esqZdrqhgH8zy1wqYh1aLKoRyoRWLFbX9M62eKfaTAoK67pJ5')); + + console.log(`Setting Alice as Admin for Teebag`); + return signAndSend(tx, alice); +} + +export function signAndSend(tx: SubmittableExtrinsic, account: AddressOrPair) { + return new Promise<{ block: string }>(async (resolve, reject) => { + await tx.signAndSend(account, (result) => { + console.log(`Current status is ${result.status}`); + if (result.status.isInBlock) { + console.log(`Transaction included at blockHash ${result.status.asInBlock}`); + } else if (result.status.isFinalized) { + console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); + resolve({ + block: result.status.asFinalized.toString(), + }); + } else if (result.status.isInvalid) { + reject(`Transaction is ${result.status}`); + } + }); + }); +} + +// After removing the sudo module, we use `EnsureRootOrHalfCouncil` instead of `Sudo`, +// and there are only two council members in litmus-dev/rococo-dev/litentry-dev. +// So only `propose` is required, no vote. +// +// TODO: support to send the `vote extrinsic`, if the number of council members is greater than 2. +export async function sudoWrapperGC(api: ApiPromise, tx: SubmittableExtrinsic) { + const chain = (await api.rpc.system.chain()).toString().toLowerCase(); + if (chain != 'rococo-dev') { + const threshold = api.createType('Compact', 1); + const call = api.createType('Call', tx); + return api.tx.council.propose(threshold, call, api.createType('Compact', tx.length)); + } else { + return api.tx.sudo.sudo(tx); + } +} + +export async function setScheduledEnclave(api: ApiPromise, block: number, mrenclave: string) { + const keyring = new Keyring({ type: 'sr25519' }); + const alice = keyring.addFromUri('//Alice'); + + const tx = api.tx.teebag.setScheduledEnclave('Identity', block, hexToU8a(`0x${mrenclave}`)); + + console.log('Schedule Enclave Extrinsic sent'); + return signAndSend(tx, alice); +} diff --git a/vc-di-tests/integration-tests/common/utils/assertion.ts b/vc-di-tests/integration-tests/common/utils/assertion.ts new file mode 100644 index 0000000..fd2bf0a --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/assertion.ts @@ -0,0 +1,198 @@ +import { hexToU8a, u8aToHex } from '@polkadot/util'; +import { assert } from 'chai'; +import * as ed from '@noble/ed25519'; +import { parseIdGraph } from './identity-helper'; +import { CorePrimitivesIdentity } from '@litentry/parachain-api'; +import type { IntegrationTestContext } from '../common-types'; +import { getIdGraphHash } from '../di-utils'; +import type { HexString } from '@polkadot/util/types'; +import { aesKey } from '../call'; +import colors from 'colors'; +import { WorkerRpcReturnValue, StfError } from '@litentry/parachain-api'; +import { Bytes } from '@polkadot/types-codec'; +import { decryptWithAes } from './crypto'; +import { blake2AsHex } from '@polkadot/util-crypto'; +import { validateVcSchema } from '@litentry/vc-schema-validator'; +import { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; +import { KeyObject } from 'crypto'; +import * as base58 from 'micro-base58'; +import { fail } from 'assert'; + +export function assertIdGraph( + actual: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][], + expected: [CorePrimitivesIdentity, boolean][] +) { + assert.equal(actual.length, expected.length); + expected.forEach((expected, i) => { + assert.deepEqual( + actual[i][0].toJSON(), + expected[0].toJSON(), + 'event idGraph identity should be equal expectedIdentity' + ); + + const idGraphContext = actual[0][1]; + assert.isTrue(idGraphContext.linkBlock.toNumber() > 0, 'link_block should be greater than 0'); + assert.equal(idGraphContext.status.isActive, expected[1], 'isActive should be ' + expected[1]); + }); +} + +export async function assertIsInSidechainBlock(callType: string, res: WorkerRpcReturnValue) { + assert.isTrue( + res.status.isTrustedOperationStatus, + `${callType} should be trusted operation status, but is ${res.status.type}` + ); + const status = res.status.asTrustedOperationStatus; + console.log(res.toHuman()); + + assert.isTrue( + status[0].isSubmitted || status[0].isInSidechainBlock, + `${callType} should be submitted or in sidechain block, but is ${status[0].type}` + ); +} + +export function assertWorkerError( + context: IntegrationTestContext, + check: (returnValue: StfError) => void, + returnValue: WorkerRpcReturnValue +) { + const errValueDecoded = context.api.createType('StfError', returnValue.value); + check(errValueDecoded); +} + +// a common assertion for all DI requests that might mutate the IdGraph +// returns the `id_graph_hash` in the `returnValue` +export async function assertIdGraphMutationResult( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + identity: CorePrimitivesIdentity, + returnValue: WorkerRpcReturnValue, + resultType: + | 'LinkIdentityResult' + | 'DeactivateIdentityResult' + | 'ActivateIdentityResult' + | 'SetIdentityNetworksResult', + expectedIdGraph: [CorePrimitivesIdentity, boolean][] +): Promise { + const decodedResult = context.api.createType(resultType, returnValue.value); + assert.isNotNull(decodedResult.mutated_id_graph); + const idGraph = parseIdGraph(context.sidechainRegistry, decodedResult.mutated_id_graph, aesKey); + assertIdGraph(idGraph, expectedIdGraph); + const queriedIdGraphHash = (await getIdGraphHash(context, teeShieldingKey, identity)).toHex(); + assert.equal(u8aToHex(decodedResult.id_graph_hash), queriedIdGraphHash); + + console.log(colors.green('assertIdGraphMutationResult passed')); + return u8aToHex(decodedResult.id_graph_hash); +} + +export async function assertVc(context: IntegrationTestContext, subject: CorePrimitivesIdentity, data: Bytes) { + const results = context.api.createType('RequestVCResult', data); + // step 1 + // decryptWithAes function added 0x prefix + const vcPayload = results.vc_payload; + const decryptVcPayload = decryptWithAes(aesKey, vcPayload, 'utf-8').replace('0x', ''); + + /* DID format + did:litentry:substrate:0x12345... + did:litentry:evm:0x123456... + did:litentry:twitter:my_twitter_handle + */ + + // step 2 + // check credential subject's DID + const credentialSubjectId = JSON.parse(decryptVcPayload).credentialSubject.id; + const expectSubject = Object.entries(JSON.parse(subject.toString())); + + // step 3 + // convert to DID format + const expectDid = 'did:litentry:' + expectSubject[0][0] + ':' + expectSubject[0][1]; + assert.equal( + expectDid, + credentialSubjectId, + 'Check credentialSubject error: expectDid should be equal to credentialSubject id' + ); + + // step 4 + // extrac proof and vc without proof json + const vcPayloadJson = JSON.parse(decryptVcPayload); + console.log('credential: ', JSON.stringify(vcPayloadJson, null, 2)); + const { proof, ...vcWithoutProof } = vcPayloadJson; + + // step 5 + // check vc signature + const signature = Buffer.from(hexToU8a(`0x${proof.proofValue}`)); + const message = Buffer.from(JSON.stringify(vcWithoutProof)); + const vcPubkey = Buffer.from(hexToU8a(proof.verificationMethod)); + const signatureStatus = await ed.verify(signature, message, vcPubkey); + assert.isTrue(signatureStatus, 'Check Vc signature error: signature should be valid'); + + // step 6 + // lookup the teebag enclave regsitry to check mrenclave and vcPubkey + const parachainBlockHash = await context.api.query.system.blockHash(vcPayloadJson.parachainBlockNumber); + const apiAtVcIssuedBlock = await context.api.at(parachainBlockHash); + const enclaveAccount = trimPrefix(vcPayloadJson.issuer.id, 'did:litentry:substrate:'); + const registeredEnclave = (await apiAtVcIssuedBlock.query.teebag.enclaveRegistry(enclaveAccount)).unwrap(); + + assert.equal( + vcPayloadJson.issuer.mrenclave, + base58.encode(registeredEnclave.mrenclave), + "Check VC mrenclave: it should equal enclave's mrenclave from parachains enclave registry" + ); + + assert.equal( + proof.verificationMethod, + registeredEnclave.vcPubkey, + "Check VC pubkey: it should equal enclave's vcPubkey from parachains enclave registry" + ); + + // step 7 + // check runtime version is present + assert.deepEqual( + vcPayloadJson.issuer.runtimeVersion, + { parachain: 9191, sidechain: 109 }, + 'Check VC runtime version: it should equal the current defined versions' + ); + + // step 8 + // validate VC against schema + const schemaResult = await validateVcSchema(vcPayloadJson); + + if (schemaResult.errors) console.log('Schema Validation errors: ', schemaResult.errors); + + assert.isTrue(schemaResult.isValid, 'Check Vc payload error: vcPayload should be valid'); + + assert.equal( + vcWithoutProof.type[0], + 'VerifiableCredential', + 'Check Vc payload type error: vcPayload type should be VerifiableCredential' + ); + assert.equal( + proof.type, + 'Ed25519Signature2020', + 'Check Vc proof type error: proof type should be Ed25519Signature2020' + ); +} + +export async function assertIdGraphHash( + context: IntegrationTestContext, + teeShieldingKey: KeyObject, + identity: CorePrimitivesIdentity, + idGraph: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] +) { + const idGraphType = context.sidechainRegistry.createType( + 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', + idGraph + ); + const computedIdGraphHash = blake2AsHex(idGraphType.toU8a()); + console.log('computed id graph hash: ', computedIdGraphHash); + + const queriedIdGraphHash = (await getIdGraphHash(context, teeShieldingKey, identity)).toHex(); + console.log('queried id graph hash: ', queriedIdGraphHash); + assert.equal(computedIdGraphHash, queriedIdGraphHash); +} + +function trimPrefix(str: string, prefix: string): string { + if (str.startsWith(prefix)) { + return str.substring(prefix.length); + } + return str; +} diff --git a/vc-di-tests/integration-tests/common/utils/common.ts b/vc-di-tests/integration-tests/common/utils/common.ts new file mode 100644 index 0000000..a528596 --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/common.ts @@ -0,0 +1,5 @@ +export function sleep(secs: number) { + return new Promise((resolve) => { + setTimeout(resolve, secs * 1000); + }); +} diff --git a/vc-di-tests/integration-tests/common/utils/context.ts b/vc-di-tests/integration-tests/common/utils/context.ts new file mode 100644 index 0000000..cff8e1c --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/context.ts @@ -0,0 +1,92 @@ +import { WsProvider, ApiPromise } from '@litentry/parachain-api'; +import { cryptoWaitReady } from '@polkadot/util-crypto'; +import { hexToString } from '@polkadot/util'; +import WebSocketAsPromised from 'websocket-as-promised'; +import WebSocket from 'ws'; +import Options from 'websocket-as-promised/types/options'; +import { KeyObject } from 'crypto'; +import { getSidechainMetadata } from '../call'; +import { createWeb3Wallets } from '../helpers'; +import type { IntegrationTestContext } from '../common-types'; +import { identity, vc, trusted_operations, sidechain } from '@litentry/parachain-api'; +import crypto from 'crypto'; +import type { HexString } from '@polkadot/util/types'; +// maximum block number that we wait in listening events before we timeout +export const defaultListenTimeoutInBlockNumber = 15; + +export async function initWorkerConnection(endpoint: string): Promise { + const wsp = new WebSocketAsPromised(endpoint, ({ + createWebSocket: (url: any) => new WebSocket(url), + extractMessageData: (event: any) => event, + packMessage: (data: any) => JSON.stringify(data), + unpackMessage: (data: string | ArrayBuffer | Blob) => JSON.parse(data.toString()), + attachRequestId: (data: any, requestId: string | number) => Object.assign({ id: requestId }, data), + extractRequestId: (data: any) => data && data.id, // read requestId from message `id` field + })); + await wsp.open(); + return wsp; +} + +export async function initIntegrationTestContext( + workerEndpoint: string, + substrateEndpoint: string +): Promise { + const provider = new WsProvider(substrateEndpoint); + await cryptoWaitReady(); + + const web3Wallets = createWeb3Wallets(); + + const types = { ...identity.types, ...vc.types, ...trusted_operations.types, ...sidechain.types }; + + const api = await ApiPromise.create({ + provider, + types, + }); + + const chainIdentifier = api.registry.chainSS58 as number; + + const wsp = await initWorkerConnection(workerEndpoint); + const requestId = 1; + + const { sidechainMetaData, sidechainRegistry } = await getSidechainMetadata(wsp, api, requestId); + const { mrEnclave, teeShieldingKey } = await getEnclave(api); + return { + tee: wsp, + api, + teeShieldingKey, + mrEnclave, + web3Wallets, + sidechainMetaData, + sidechainRegistry, + chainIdentifier, + requestId, + }; +} + +export async function getEnclave(api: ApiPromise): Promise<{ + mrEnclave: HexString; + teeShieldingKey: KeyObject; +}> { + const enclaveIdentifier = api.createType('Vec', await api.query.teebag.enclaveIdentifier('Identity')); + const primaryEnclave = (await api.query.teebag.enclaveRegistry(enclaveIdentifier[0])).unwrap(); + + const shieldingPubkeyBytes = api.createType('Option', primaryEnclave.shieldingPubkey).unwrap(); + const shieldingPubkey = hexToString(shieldingPubkeyBytes.toHex()); + + const teeShieldingKey = crypto.createPublicKey({ + key: { + alg: 'RSA-OAEP-256', + kty: 'RSA', + use: 'enc', + n: Buffer.from(JSON.parse(shieldingPubkey).n.reverse()).toString('base64url'), + e: Buffer.from(JSON.parse(shieldingPubkey).e.reverse()).toString('base64url'), + }, + format: 'jwk', + }); + //@TODO mrEnclave should verify from storage + const mrEnclave = primaryEnclave.mrenclave.toHex(); + return { + mrEnclave, + teeShieldingKey, + }; +} diff --git a/vc-di-tests/integration-tests/common/utils/crypto.ts b/vc-di-tests/integration-tests/common/utils/crypto.ts new file mode 100644 index 0000000..1a1cee3 --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/crypto.ts @@ -0,0 +1,235 @@ +import type { HexString } from '@polkadot/util/types'; +import { bufferToU8a, hexToU8a, isString, stringToU8a, u8aToHex } from '@polkadot/util'; +import { KeyObject } from 'crypto'; +import { AesOutput, CorePrimitivesIdentity } from '@litentry/parachain-api'; +import crypto from 'crypto'; +import { KeyringPair } from '@polkadot/keyring/types'; +import { ethers } from 'ethers'; +import { blake2AsU8a } from '@polkadot/util-crypto'; +import { Keypair } from '@solana/web3.js'; +import nacl from 'tweetnacl'; +import { IntegrationTestContext } from './../common-types'; +import { buildIdentityHelper } from './identity-helper'; +import { ECPairInterface } from 'ecpair'; +import * as bitcoinMessage from 'bitcoinjs-message'; +import { isHexString } from 'ethers/lib/utils'; +export type KeypairType = 'ed25519' | 'sr25519' | 'ecdsa' | 'ethereum' | 'bitcoin'; + +export function encryptWithTeeShieldingKey(teeShieldingKey: KeyObject, plaintext: Uint8Array): Buffer { + return encryptBuffer(teeShieldingKey, plaintext); +} + +/** + * Encrypts a plaintext buffer using the provided public key in segments. + * + * Same logic as: https://github.com/apache/incubator-teaclave-sgx-sdk/blob/master/sgx_crypto_helper/src/rsa3072.rs#L161-L179 + * + * @param {crypto.KeyLike} pubKey - The public key to use for encryption. + * @param {Uint8Array} plaintext - The plaintext buffer to encrypt. + * @returns {Buffer} The encrypted data. + */ +function encryptBuffer(pubKey: crypto.KeyLike, plaintext: Uint8Array): Buffer { + const bs = 384; // 3072 bits = 384 bytes + const bsPlain = bs - (2 * 256) / 8 - 2; // Maximum plaintext block size + const count = Math.ceil(plaintext.length / bsPlain); // Use Math.ceil to ensure proper chunk count + + const cipherText = Buffer.alloc(bs * count); + + for (let i = 0; i < count; i++) { + const plainSlice = plaintext.slice(i * bsPlain, Math.min((i + 1) * bsPlain, plaintext.length)); + const cipherSlice = crypto.publicEncrypt( + { + key: pubKey, + padding: crypto.constants.RSA_PKCS1_OAEP_PADDING, + oaepHash: 'sha256', + }, + plainSlice + ); + + cipherSlice.copy(cipherText, i * bs); + } + + return cipherText; +} + +// A lazy version without aad. Append the tag to be consistent with rust implementation +export function encryptWithAes(key: HexString, nonce: Uint8Array, cleartext: Buffer): HexString { + const secretKey = crypto.createSecretKey(hexToU8a(key)); + const cipher = crypto.createCipheriv('aes-256-gcm', secretKey, nonce, { + authTagLength: 16, + }); + let encrypted = cipher.update(cleartext.toString('hex'), 'hex', 'hex'); + encrypted += cipher.final('hex'); + encrypted += cipher.getAuthTag().toString('hex'); + return `0x${encrypted}`; +} + +export function decryptWithAes(key: HexString, aesOutput: AesOutput, type: 'hex' | 'utf-8'): HexString { + const secretKey = crypto.createSecretKey(hexToU8a(key)); + const tagSize = 16; + const ciphertext = aesOutput.ciphertext ? aesOutput.ciphertext : hexToU8a('0x'); + + const nonce = aesOutput.nonce ? aesOutput.nonce : hexToU8a('0x'); + const aad = aesOutput.aad ? aesOutput.aad : hexToU8a('0x'); + + // notice!!! extract author_tag from ciphertext + // maybe this code only works with rust aes encryption + const authorTag = ciphertext.subarray(ciphertext.length - tagSize); + + const decipher = crypto.createDecipheriv('aes-256-gcm', secretKey, nonce, { + authTagLength: tagSize, + }); + decipher.setAAD(aad); + decipher.setAuthTag(authorTag); + + const part1 = decipher.update(ciphertext.subarray(0, ciphertext.length - tagSize), undefined, type); + const part2 = decipher.final(type); + + return `0x${part1 + part2}`; +} + +export interface Signer { + getAddressRaw(): Uint8Array; + sign(message: HexString | string | Uint8Array): Promise; + type(): KeypairType; + getAddressInSubstrateFormat(): Uint8Array; + getIdentity(api: IntegrationTestContext): Promise; +} + +export class PolkadotSigner implements Signer { + keypair: KeyringPair; + + constructor(keypair: KeyringPair) { + this.keypair = keypair; + } + + getAddressRaw(): Uint8Array { + return this.keypair.addressRaw; + } + + sign(message: HexString | string | Uint8Array): Promise { + return new Promise((resolve) => resolve(this.keypair.sign(message))); + } + + type(): KeypairType { + return this.keypair.type; + } + + getAddressInSubstrateFormat(): Uint8Array { + return this.getAddressRaw(); + } + + getIdentity(context: IntegrationTestContext): Promise { + return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Substrate', context); + } +} + +export class EthersSigner implements Signer { + wallet: ethers.Wallet; + + constructor(wallet: ethers.Wallet) { + this.wallet = wallet; + } + + getAddressRaw(): Uint8Array { + return hexToU8a(this.wallet.address); + } + + sign(message: HexString | string | Uint8Array): Promise { + return this.wallet.signMessage(message).then((sig) => { + return hexToU8a(sig); + }); + } + + type(): KeypairType { + return 'ethereum'; + } + + getAddressInSubstrateFormat(): Uint8Array { + const prefix = stringToU8a('evm:'); + const address = this.getAddressRaw(); + const merged = new Uint8Array(prefix.length + address.length); + merged.set(prefix); + merged.set(address, 4); + return blake2AsU8a(merged, 256); + } + + getIdentity(context: IntegrationTestContext): Promise { + return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Evm', context); + } +} + +export class BitcoinSigner implements Signer { + keypair: ECPairInterface; + + constructor(keypair: ECPairInterface) { + this.keypair = keypair; + } + + getAddressRaw(): Uint8Array { + return bufferToU8a(this.keypair.publicKey); + } + + sign(message: HexString | string | Uint8Array): Promise { + return new Promise((resolve, reject) => { + if (isString(message)) { + // produce deterministic signatures + const sig = bitcoinMessage.sign(message, this.keypair.privateKey!, this.keypair.compressed); + resolve(sig); + } else { + reject('wrong message type'); + } + }); + } + + type(): KeypairType { + return 'bitcoin'; + } + + getAddressInSubstrateFormat(): Uint8Array { + return blake2AsU8a(this.getAddressRaw(), 256); + } + + getIdentity(context: IntegrationTestContext): Promise { + return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Bitcoin', context); + } +} + +export class SolanaSigner implements Signer { + keypair: Keypair; + + constructor(keypair: Keypair) { + this.keypair = keypair; + } + + getAddressRaw(): Uint8Array { + return this.keypair.publicKey.toBytes(); + } + + sign(message: HexString | string | Uint8Array): Promise { + return new Promise((resolve) => + resolve( + nacl.sign.detached( + isHexString(message) + ? hexToU8a(message as HexString) + : isString(message) + ? stringToU8a(message) + : message, + this.keypair.secretKey + ) + ) + ); + } + + type(): KeypairType { + return 'ed25519'; + } + + getAddressInSubstrateFormat(): Uint8Array { + return this.getAddressRaw(); + } + + getIdentity(context: IntegrationTestContext): Promise { + return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Solana', context); + } +} diff --git a/vc-di-tests/integration-tests/common/utils/identity-helper.ts b/vc-di-tests/integration-tests/common/utils/identity-helper.ts new file mode 100644 index 0000000..bad7d3c --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/identity-helper.ts @@ -0,0 +1,235 @@ +import { u8aToHex } from '@polkadot/util'; +import { blake2AsHex } from '@polkadot/util-crypto'; +import type { IntegrationTestContext } from '../common-types'; +import { AesOutput } from '@litentry/parachain-api'; +import { decryptWithAes, Signer } from './crypto'; +import { ethers } from 'ethers'; +import type { TypeRegistry } from '@polkadot/types'; +import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; +import type { LitentryValidationData, CorePrimitivesIdentity } from '@litentry/parachain-api'; +import type { HexString } from '@polkadot/util/types'; + +// blake2_256( + + ) +export function generateVerificationMessage( + context: IntegrationTestContext, + signer: CorePrimitivesIdentity, + identity: CorePrimitivesIdentity, + sidechainNonce: number, + options?: { prettifiedMessage?: boolean } +): string { + const _options = { prettifiedMessage: false, ...options }; + const encodedIdentity = context.api.createType('CorePrimitivesIdentity', identity).toU8a(); + const encodedWho = context.api.createType('CorePrimitivesIdentity', signer).toU8a(); + const encodedSidechainNonce = context.api.createType('Index', sidechainNonce); + const msg = Buffer.concat([encodedSidechainNonce.toU8a(), encodedWho, encodedIdentity]); + const hash = blake2AsHex(msg, 256); + + if (_options.prettifiedMessage) { + return `Token: ${hash}`; + } + + return hash; +} + +export async function buildIdentityHelper( + address: HexString | string, + type: CorePrimitivesIdentity['type'], + context: IntegrationTestContext +): Promise { + const identity = { + [type]: address, + }; + return context.api.createType('CorePrimitivesIdentity', identity); +} + +export function parseIdGraph( + sidechainRegistry: TypeRegistry, + idGraphOutput: AesOutput, + aesKey: HexString +): [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] { + const decryptedIdGraph = decryptWithAes(aesKey, idGraphOutput, 'hex'); + const idGraph: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] = + sidechainRegistry.createType( + 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', + decryptedIdGraph + ); + + return idGraph; +} + +type Web2ValidationConfig = + | { + identityType: 'Discord'; + context: IntegrationTestContext; + signerIdentitity: CorePrimitivesIdentity; + linkIdentity: CorePrimitivesIdentity; + verificationType: 'PublicMessage' | 'OAuth2'; + validationNonce: number; + } + | { + identityType: 'Twitter'; + context: IntegrationTestContext; + signerIdentitity: CorePrimitivesIdentity; + linkIdentity: CorePrimitivesIdentity; + verificationType: 'PublicTweet'; + validationNonce: number; + } + | { + identityType: 'Twitter'; + context: IntegrationTestContext; + signerIdentitity: CorePrimitivesIdentity; + linkIdentity: CorePrimitivesIdentity; + verificationType: 'OAuth2'; + validationNonce: number; + oauthState: string; + }; + +export async function buildWeb2Validation(config: Web2ValidationConfig): Promise { + const { context, signerIdentitity, linkIdentity, validationNonce } = config; + const msg = generateVerificationMessage(context, signerIdentitity, linkIdentity, validationNonce); + console.log(`post verification msg to ${config.identityType}:`, msg); + + if (config.identityType === 'Discord') { + const discordValidationData = { + Web2Validation: { + Discord: {}, + }, + }; + + if (config.verificationType === 'PublicMessage') { + discordValidationData.Web2Validation.Discord = { + PublicMessage: { + channel_id: `0x${Buffer.from('919848392035794945', 'utf8').toString('hex')}`, + message_id: `0x${Buffer.from('1', 'utf8').toString('hex')}`, + guild_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, + }, + }; + } else { + discordValidationData.Web2Validation.Discord = { + OAuth2: { + code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, + redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, + }, + }; + } + + return context.api.createType('LitentryValidationData', discordValidationData); + } else { + const twitterValidationData = { + Web2Validation: { + Twitter: {}, + }, + }; + + if (config.verificationType === 'PublicTweet') { + twitterValidationData.Web2Validation.Twitter = { + PublicTweet: { + tweet_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, + }, + }; + } else { + twitterValidationData.Web2Validation.Twitter = { + OAuth2: { + code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, + state: config.oauthState, + redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, + }, + }; + } + + return context.api.createType('LitentryValidationData', twitterValidationData); + } +} + +export async function buildValidations( + context: IntegrationTestContext, + signerIdentitity: CorePrimitivesIdentity, + linkIdentity: CorePrimitivesIdentity, + startingSidechainNonce: number, + network: 'ethereum' | 'substrate' | 'bitcoin' | 'solana', + signer?: Signer, + options?: { prettifiedMessage?: boolean } +): Promise { + const _options = { prettifiedMessage: false, ...options }; + const validationNonce = startingSidechainNonce++; + + const msg = generateVerificationMessage(context, signerIdentitity, linkIdentity, validationNonce); + if (network === 'ethereum') { + const evmValidationData = { + Web3Validation: { + Evm: { + message: '', + signature: { + Ethereum: '' as HexString, + }, + }, + }, + }; + evmValidationData.Web3Validation.Evm.message = msg; + const msgHash = ethers.utils.arrayify(msg); + const evmSignature = u8aToHex(await signer!.sign(msgHash)); + + evmValidationData!.Web3Validation.Evm.signature.Ethereum = evmSignature; + + return context.api.createType('LitentryValidationData', evmValidationData); + } + + if (network === 'substrate') { + const substrateValidationData = { + Web3Validation: { + Substrate: { + message: '', + signature: { + Sr25519: '' as HexString, + }, + }, + }, + }; + console.log('post verification msg to substrate: ', msg); + substrateValidationData.Web3Validation.Substrate.message = msg; + const substrateSignature = await signer!.sign(msg); + substrateValidationData!.Web3Validation.Substrate.signature.Sr25519 = u8aToHex(substrateSignature); + + return context.api.createType('LitentryValidationData', substrateValidationData); + } + + if (network === 'bitcoin') { + const bitcoinValidationData = { + Web3Validation: { + Bitcoin: { + message: '', + signature: { + Bitcoin: '' as HexString, + }, + }, + }, + }; + bitcoinValidationData.Web3Validation.Bitcoin.message = msg; + // we need to sign the hex string without `0x` prefix, the signature is base64-encoded string + const bitcoinSignature = await signer!.sign(msg.substring(2)); + bitcoinValidationData!.Web3Validation.Bitcoin.signature.Bitcoin = u8aToHex(bitcoinSignature); + + return context.api.createType('LitentryValidationData', bitcoinValidationData); + } + + if (network === 'solana') { + const solanaValidationData = { + Web3Validation: { + Solana: { + message: '', + signature: { + Ed25519: '' as HexString, + }, + }, + }, + }; + console.log('post verification msg to solana: ', msg); + solanaValidationData.Web3Validation.Solana.message = msg; + const solanaSignature = await signer!.sign(msg); + solanaValidationData!.Web3Validation.Solana.signature.Ed25519 = u8aToHex(solanaSignature); + + return context.api.createType('LitentryValidationData', solanaValidationData); + } + + throw new Error(`[buildValidation]: Unsupported network ${network}.`); +} diff --git a/vc-di-tests/integration-tests/common/utils/index.ts b/vc-di-tests/integration-tests/common/utils/index.ts new file mode 100644 index 0000000..77d2344 --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/index.ts @@ -0,0 +1,15 @@ +import '../config'; + +// in order to handle self-signed certificates we need to turn off the validation +// TODO add self signed certificate ?? +process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; + +export * from './assertion'; +export * from './common'; +export * from './context'; +export * from './crypto'; +export * from './identity-helper'; +export * from './integration-setup'; +export * from './storage'; +export * from './vc-helper'; +export * from './type-creators'; diff --git a/vc-di-tests/integration-tests/common/utils/integration-setup.ts b/vc-di-tests/integration-tests/common/utils/integration-setup.ts new file mode 100644 index 0000000..d398fff --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/integration-setup.ts @@ -0,0 +1,45 @@ +import { ApiPromise } from '@litentry/parachain-api'; +import { KeyObject } from 'crypto'; +import WebSocketAsPromised from 'websocket-as-promised'; +import type { IntegrationTestContext } from '../common-types'; +import type { Metadata, TypeRegistry } from '@polkadot/types'; +import type { HexString } from '@polkadot/util/types'; +import { initIntegrationTestContext } from './context'; + +export function describeLitentry(title: string, cb: (context: IntegrationTestContext) => void) { + describe(title, function () { + // Set timeout to 6000 seconds + this.timeout(6000000); + + const context: IntegrationTestContext = { + mrEnclave: '0x11' as HexString, + api: {} as ApiPromise, + tee: {} as WebSocketAsPromised, + teeShieldingKey: {} as KeyObject, + web3Wallets: {} as any, + sidechainMetaData: {} as Metadata, + sidechainRegistry: {} as TypeRegistry, + // default LitentryRococo + chainIdentifier: 42, + requestId: 0, + }; + + before('Starting Litentry(parachain&tee)', async function () { + //env url + + const tmp = await initIntegrationTestContext(process.env.WORKER_ENDPOINT!, process.env.NODE_ENDPOINT!); + context.mrEnclave = tmp.mrEnclave; + context.api = tmp.api; + context.tee = tmp.tee; + context.teeShieldingKey = tmp.teeShieldingKey; + context.web3Wallets = tmp.web3Wallets; + context.sidechainMetaData = tmp.sidechainMetaData; + context.sidechainRegistry = tmp.sidechainRegistry; + context.chainIdentifier = tmp.chainIdentifier; + }); + + after(() => Promise.resolve()); + + cb(context); + }); +} diff --git a/vc-di-tests/integration-tests/common/utils/storage.ts b/vc-di-tests/integration-tests/common/utils/storage.ts new file mode 100644 index 0000000..3720341 --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/storage.ts @@ -0,0 +1,110 @@ +import { u8aToHex, u8aConcat } from '@polkadot/util'; +import { xxhashAsU8a } from '@polkadot/util-crypto'; +import { StorageEntryMetadataV14, SiLookupTypeId, StorageHasherV14 } from '@polkadot/types/interfaces'; +import { sendRequest } from '../call'; +import { blake2128Concat, twox64Concat, identity, createJsonRpcRequest, nextRequestId } from '../helpers'; +import type { IntegrationTestContext } from '../common-types'; +import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; +import type { CorePrimitivesIdentity } from '@litentry/parachain-api'; +import type { HexString } from '@polkadot/util/types'; +import type { Metadata } from '@polkadot/types'; + +const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)); + +import * as base58 from 'micro-base58'; + +//sidechain storage utils +export function buildStorageEntry(metadata: Metadata, prefix: string, method: string): StorageEntryMetadataV14 | null { + for (const pallet of metadata.asV14.pallets) { + if (pallet.name.toString() == prefix) { + const storage = pallet.storage.unwrap(); + + for (const item of storage.items) { + if (item.name.toString() == method) { + return item; + } + } + } + } + return null; +} + +export function buildStorageKey( + metadata: Metadata, + prefix: string, + method: string, + keyTypeId?: SiLookupTypeId, + hashers?: Array, + input?: Array +): Uint8Array { + let storageKey = u8aConcat(xxhashAsU8a(prefix, 128), xxhashAsU8a(method, 128)); + if (keyTypeId && hashers && input) { + const keyTypeIds = + hashers.length === 1 ? [keyTypeId] : metadata.registry.lookup.getSiType(keyTypeId).def.asTuple; + for (let i = 0; i < keyTypeIds.length; i++) { + const theKeyTypeId = keyTypeIds[i]; + const theHasher = hashers[i].toString(); + const theKeyItem = input[i]; + // get the scale encoded input data by encoding the input + const theKeyType = metadata.registry.createLookupType(theKeyTypeId); + const theKeyItemEncoded = metadata.registry.createType(theKeyType, theKeyItem).toU8a(); + // apply hasher + let theKeyItemAppliedHasher; + if (theHasher == 'Blake2_128Concat') { + theKeyItemAppliedHasher = blake2128Concat(theKeyItemEncoded); + } else if (theHasher == 'Twox64Concat') { + theKeyItemAppliedHasher = twox64Concat(theKeyItemEncoded); + } else if (theHasher == 'Identity') { + theKeyItemAppliedHasher = identity(theKeyItemEncoded); + } else { + throw new Error(`The hasher ${theHasher} is not support.`); + } + storageKey = u8aConcat(storageKey, theKeyItemAppliedHasher); + } + } + return storageKey; +} +export async function buildStorageHelper( + metadata: Metadata, + prefix: string, + method: string, + ...input: Array +): Promise { + const storageEntry = buildStorageEntry(metadata, prefix, method); + if (!storageEntry) { + throw new Error('Can not find the storage entry from metadata'); + } + let storageKey; + + if (storageEntry.type.isPlain) { + storageKey = buildStorageKey(metadata, prefix, method); + } else if (storageEntry.type.isMap) { + const { hashers, key } = storageEntry.type.asMap; + if (input.length != hashers.length) { + throw new Error('The `input` param is not correct'); + } + storageKey = buildStorageKey(metadata, prefix, method, key, hashers, input); + } else { + throw new Error('Only support plain and map type'); + } + console.debug(`storage key: ${u8aToHex(storageKey)}`); + return u8aToHex(storageKey); +} + +export async function checkIdGraph( + context: IntegrationTestContext, + pallet: string, + method: string, + subject: CorePrimitivesIdentity, + identity: HexString +): Promise { + await sleep(6000); + const storageKey = await buildStorageHelper(context.sidechainMetaData, pallet, method, subject, identity); + + const base58mrEnclave = base58.encode(Buffer.from(context.mrEnclave.slice(2), 'hex')); + + const request = createJsonRpcRequest('state_getStorage', [base58mrEnclave, storageKey], nextRequestId(context)); + const resp = await sendRequest(context.tee, request, context.api); + const idGraph = context.sidechainRegistry.createType('PalletIdentityManagementTeeIdentityContext', resp.value); + return idGraph; +} diff --git a/vc-di-tests/integration-tests/common/utils/type-creators.ts b/vc-di-tests/integration-tests/common/utils/type-creators.ts new file mode 100644 index 0000000..8516ad4 --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/type-creators.ts @@ -0,0 +1,40 @@ +import { u8aToHex, hexToU8a, stringToU8a } from '@polkadot/util'; +import type { ApiPromise } from '@polkadot/api'; +import type { LitentryMultiSignature } from '@litentry/parachain-api'; +import type { Signer } from './crypto'; + +export async function createLitentryMultiSignature( + api: ApiPromise, + args: { signer: Signer; payload: Uint8Array | string } +): Promise { + const { signer, payload } = args; + const signerType = signer.type(); + + // Sign Bytes: + // For Bitcoin, sign as hex with no prefix; for other types, convert it to raw bytes + if (payload instanceof Uint8Array) { + const signature = await signer.sign(signerType === 'bitcoin' ? u8aToHex(payload).substring(2) : payload); + + return api.createType('LitentryMultiSignature', { + [signerType]: signature, + }); + } + + // Sign hex: + // Remove the prefix for bitcoin signature, and use raw bytes for other types + if (payload.startsWith('0x')) { + const signature = await signer.sign(signerType === 'bitcoin' ? payload.substring(2) : hexToU8a(payload)); + + return api.createType('LitentryMultiSignature', { + [signerType]: signature, + }); + } + + // Sign string: + // For Bitcoin, pass it as it is, for other types, convert it to raw bytes + const signature = await signer.sign(signerType === 'bitcoin' ? payload : stringToU8a(payload)); + + return api.createType('LitentryMultiSignature', { + [signerType]: signature, + }); +} diff --git a/vc-di-tests/integration-tests/common/utils/vc-helper.ts b/vc-di-tests/integration-tests/common/utils/vc-helper.ts new file mode 100644 index 0000000..2c3f4da --- /dev/null +++ b/vc-di-tests/integration-tests/common/utils/vc-helper.ts @@ -0,0 +1,348 @@ +// @todo move to a better place, and make it more generic, at least define the type +export const mockBatchAssertion = [ + { + description: 'request_batch_vc trial test', + assertion: [{ A7: '5' }, { A8: ['Litentry'] }, { A20: 'A20' }], + }, + { + description: 'Have identified at least one account/address in both Web2 and Web3.', + assertion: { + A1: 'A1', + }, + }, + { + description: 'The user is a member of Litentry Discord.', + assertion: { + A2: '807161594245152800', + }, + }, + + { + description: + 'Have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882', + assertion: { + A3: ['A3', 'A3', 'A3'], + }, + }, + { + description: 'The length of time a user continues to hold LIT token', + assertion: { + A4: '10', + }, + }, +]; + +// https://github.com/litentry/litentry-parachain/tree/dev/tee-worker/litentry/core/assertion-build/src +export const mockAssertions = [ + { + description: 'Have identified at least one account/address in both Web2 and Web3.', + assertion: { + A1: 'A1', + }, + }, + { + description: 'The user is a member of Litentry Discord.', + assertion: { + A2: '807161594245152800', + }, + }, + + { + description: + 'Have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882', + assertion: { + A3: ['A3', 'A3', 'A3'], + }, + }, + + // litentry-archive + { + description: + 'The user is an early bird user of the IdentityHub EVM version and has generated at least 1 credential during 2023 Aug 14th ~ Aug 21st.', + assertion: { + A20: 'A20', + }, + }, + + // Achainable + { + description: `A trader or liquidity provider of Uniswap V2 or V3 + Uniswap V2 Factory Contract: 0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f + Uniswap V3 Factory Contract: 0x1f98431c8ad98523631ae4a59f267346ea31f984`, + assertion: { + Achainable: { + Basic: { + name: 'Uniswap V2/V3 user', + chain: ['Ethereum'], + }, + }, + }, + }, + { + description: 'The number of ETH tokens hold > 0', + assertion: { + Achainable: { + Amount: { + name: 'Balance over {amount}', + chain: ['Ethereum'], + amount: '0', + }, + }, + }, + }, + { + description: 'The class of year that Ethereum account was created (must have on-chain records)', + assertion: { + Achainable: { + ClassOfYear: { + name: 'Account created between {dates}', + chain: ['Ethereum'], + }, + }, + }, + }, + { + description: 'A deployer of a smart contract on Ethereum', + assertion: { + Achainable: { + Amount: { + name: 'Created over {amount} contracts', + chain: ['Ethereum'], + amount: '0', + }, + }, + }, + }, + { + description: 'A deployer of a smart contract on Ethereum', + assertion: { + Achainable: { + AmountToken: { + name: 'LIT Holding Amount', + chain: ['Litentry', 'Litmus'], + amount: '0', + }, + }, + }, + }, + + { + description: 'The length of time a user continues to hold LIT token', + assertion: { + A4: '10', + }, + }, + { + description: "The range of the user's Twitter follower count", + assertion: { + A6: [], + }, + }, + { + description: 'The length of time a user continues to hold DOT token', + assertion: { + A7: '5', + }, + }, + { + description: + 'The range of number of transactions a user has made for a specific token on all supported networks(Litentry)', + assertion: { + A8: ['Litentry'], + }, + }, + { + description: 'The user has participated in any Polkadot on-chain governance events', + assertion: { + A14: [], + }, + }, + + // SORA + { + description: + 'Congratulations on your participation in our first quiz in collaboration with our partner, SORA. You have embarked on an exciting educational journey, exploring the world of DeFi & Web3 Identity, we truly appreciate your curiosity and dedication.', + assertion: { + GenericDiscordRole: { + SoraQuiz: 'Attendee', + }, + }, + }, + // VIP3 + { + description: 'VIP3 Silver Card Holder', + assertion: { + VIP3MembershipCard: 'Silver', + }, + }, + // BNB domain-nodereal + { + description: 'Holding a certain amount of bnb domain names', + assertion: { + BnbDomainHolding: 'BnbDomainHolding', + }, + }, + { + description: 'Holding a certain amount of 000-999.bnb domain names', + assertion: { + BnbDigitDomainClub: 'Bnb999ClubMember', + }, + }, + // OneBlock + { + description: 'A participant to the course co-created by OneBlock+ and Parity', + assertion: { + Oneblock: 'CourseCompletion', + }, + }, + // Geniidata + { + description: 'NFT holder', + assertion: { + Brc20AmountHolder: [], + }, + }, + + // NftHolder + { + description: 'You are a holder of a certain kind of NFT', + assertion: { + NftHolder: 'WeirdoGhostGang', + }, + }, + { + description: 'You are a holder of a certain kind of NFT', + assertion: { + NftHolder: 'Club3Sbt', + }, + }, + { + description: 'You are a holder of a certain kind of NFT', + assertion: { + NftHolder: 'MFan', + }, + }, + { + description: 'You are a holder of a certain kind of NFT', + assertion: { + NftHolder: 'Mvp', + }, + }, + + // TokenHoldingAmount + { + description: 'The amount of TRX you are holding', + assertion: { + TokenHoldingAmount: 'TRX', + }, + }, + { + description: 'The amount of BNB you are holding', + assertion: { + TokenHoldingAmount: 'BNB', + }, + }, + { + description: 'The amount of ETH you are holding', + assertion: { + TokenHoldingAmount: 'ETH', + }, + }, + { + description: 'The amount of LIT you are holding', + assertion: { + TokenHoldingAmount: 'LIT', + }, + }, + { + description: 'The amount of SOL you are holding', + assertion: { + TokenHoldingAmount: 'SOL', + }, + }, + { + description: 'The amount of NFP you are holding', + assertion: { + TokenHoldingAmount: 'NFP', + }, + }, + { + description: 'The amount of BTC you are holding', + assertion: { + TokenHoldingAmount: 'BTC', + }, + }, + { + description: 'The amount of SHIB you are holding', + assertion: { + TokenHoldingAmount: 'SHIB', + }, + }, + { + description: 'The amount of BEAN you are holding', + assertion: { + TokenHoldingAmount: 'BEAN', + }, + }, + { + description: 'The amount of AN you are holding', + assertion: { + TokenHoldingAmount: 'AN', + }, + }, + { + description: 'The amount of TUNA you are holding', + assertion: { + TokenHoldingAmount: 'TUNA', + }, + }, + + { + description: 'The amount of LIT you are staking', + assertion: { + LITStaking: 'LITStaking', + }, + }, + { + description: 'The amount of a Ton you are holding', + assertion: { + EVMAmountHolding: 'Ton', + }, + }, + + // PlatformUser + { + description: 'You are a user of platform KaratDao', + assertion: { + PlatformUser: 'KaratDao', + }, + }, + { + description: 'You are a user of platform MagicCraft', + assertion: { + PlatformUser: 'MagicCraftStaking', + }, + }, + { + description: 'You are a user of platform DarenMarket', + assertion: { + PlatformUser: 'DarenMarket', + }, + }, + + // CryptoSummary + { + description: 'Generate a summary of your on-chain identity', + assertion: { + CryptoSummary: [], + }, + }, + + // WeirdoGhostGangHolder + { + description: 'You are WeirdoGhostGang NFT holder', + assertion: { + WeirdoGhostGangHolder: [], + }, + }, +]; diff --git a/vc-di-tests/integration-tests/package.json b/vc-di-tests/integration-tests/package.json new file mode 100644 index 0000000..8096eda --- /dev/null +++ b/vc-di-tests/integration-tests/package.json @@ -0,0 +1,68 @@ +{ + "name": "integration-tests", + "license": "ISC", + "type": "module", + "scripts": { + "check-format": "prettier --check .", + "format": "prettier --write .", + "pretest": "eslint .", + "test": "mocha --exit --sort -r ts-node/register --loader=ts-node/esm", + "check-types": "tsc --noEmit", + "compile-contracts": "cd ../../litentry/core/assertion-build/src/dynamic && pnpm i && pnpm clean && pnpm compile", + "link-contracts": "ln -s ../../litentry/core/assertion-build/src/dynamic/artifacts/contracts ./contracts" + }, + "dependencies": { + "@litentry/vc-schema-validator": "^0.0.1", + "@noble/ed25519": "^1.7.3", + "@polkadot/api": "^10.9.1", + "@polkadot/api-augment": "^10.9.1", + "@polkadot/api-base": "^10.9.1", + "@polkadot/api-derive": "^10.9.1", + "@polkadot/keyring": "^12.2.1", + "@polkadot/rpc-core": "^10.9.1", + "@polkadot/types": "^10.9.1", + "@polkadot/types-augment": "^10.9.1", + "@polkadot/types-codec": "^10.9.1", + "@polkadot/types-create": "^10.9.1", + "@polkadot/types-known": "^10.9.1", + "@polkadot/types-support": "^10.9.1", + "@polkadot/util": "^12.5.1", + "@polkadot/util-crypto": "^12.5.1", + "@solana/web3.js": "^1.91.4", + "add": "^2.0.6", + "bitcoinjs-lib": "^6.1.5", + "bitcoinjs-message": "^2.2.0", + "chai": "^4.3.6", + "colors": "^1.4.0", + "ecpair": "^2.1.0", + "js-base64": "^3.7.5", + "micro-base58": "^0.5.1", + "mocha": "^10.1.0", + "mocha-steps": "^1.3.0", + "@litentry/parachain-api": "latest", + "scale-ts": "^0.2.11", + "@litentry/sidechain-api": "latest", + "tiny-secp256k1": "^2.2.3", + "tweetnacl": "^1.0.3", + "websocket-as-promised": "^2.0.1", + "ws": "^8.17.1", + "zx": "^7.2.3" + }, + "devDependencies": { + "@ethersproject/providers": "^5.7.2", + "@types/chai": "^4.3.3", + "@types/mocha": "^10.0.0", + "@types/node": "^20.4.4", + "@types/ws": "^8.5.3", + "@typescript-eslint/eslint-plugin": "^5.60.0", + "@typescript-eslint/parser": "^5.60.0", + "cross-env": "^7.0.3", + "dotenv": "^16.0.3", + "eslint": "^8.43.0", + "ethers": "^5.7.2", + "prettier": "2.8.1", + "ts-node": "^10.9.1", + "typescript": "5.0.4" + }, + "packageManager": "pnpm@8.7.6" +} \ No newline at end of file diff --git a/vc-di-tests/integration-tests/tsconfig.json b/vc-di-tests/integration-tests/tsconfig.json new file mode 100644 index 0000000..077ab9b --- /dev/null +++ b/vc-di-tests/integration-tests/tsconfig.json @@ -0,0 +1,20 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "Node", + "declaration": true, + "strict": true, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "baseUrl": "." + }, + "ts-node": { + "esm": true, + "experimentalResolver": true, + "experimentalSpecifierResolution": "node", + "transpileOnly": true + } +} diff --git a/vc-di-tests/package.json b/vc-di-tests/package.json new file mode 100644 index 0000000..346af2a --- /dev/null +++ b/vc-di-tests/package.json @@ -0,0 +1,9 @@ +{ + "type": "module", + "license": "ISC", + "scripts": { + "format": "pnpm run --recursive format", + "check-format": "pnpm run --recursive check-format" + }, + "packageManager": "pnpm@8.7.6" +} diff --git a/vc-di-tests/pnpm-lock.yaml b/vc-di-tests/pnpm-lock.yaml new file mode 100644 index 0000000..3ab1938 --- /dev/null +++ b/vc-di-tests/pnpm-lock.yaml @@ -0,0 +1,3937 @@ +lockfileVersion: 5.4 + +importers: + + .: + specifiers: {} + + integration-tests: + specifiers: + '@ethersproject/providers': ^5.7.2 + '@litentry/parachain-api': latest + '@litentry/sidechain-api': latest + '@litentry/vc-schema-validator': ^0.0.1 + '@noble/ed25519': ^1.7.3 + '@polkadot/api': ^10.9.1 + '@polkadot/api-augment': ^10.9.1 + '@polkadot/api-base': ^10.9.1 + '@polkadot/api-derive': ^10.9.1 + '@polkadot/keyring': ^12.2.1 + '@polkadot/rpc-core': ^10.9.1 + '@polkadot/types': ^10.9.1 + '@polkadot/types-augment': ^10.9.1 + '@polkadot/types-codec': ^10.9.1 + '@polkadot/types-create': ^10.9.1 + '@polkadot/types-known': ^10.9.1 + '@polkadot/types-support': ^10.9.1 + '@polkadot/util': ^12.5.1 + '@polkadot/util-crypto': ^12.5.1 + '@solana/web3.js': ^1.91.4 + '@types/chai': ^4.3.3 + '@types/mocha': ^10.0.0 + '@types/node': ^20.4.4 + '@types/ws': ^8.5.3 + '@typescript-eslint/eslint-plugin': ^5.60.0 + '@typescript-eslint/parser': ^5.60.0 + add: ^2.0.6 + bitcoinjs-lib: ^6.1.5 + bitcoinjs-message: ^2.2.0 + chai: ^4.3.6 + colors: ^1.4.0 + cross-env: ^7.0.3 + dotenv: ^16.0.3 + ecpair: ^2.1.0 + eslint: ^8.43.0 + ethers: ^5.7.2 + js-base64: ^3.7.5 + micro-base58: ^0.5.1 + mocha: ^10.1.0 + mocha-steps: ^1.3.0 + prettier: 2.8.1 + scale-ts: ^0.2.11 + tiny-secp256k1: ^2.2.3 + ts-node: ^10.9.1 + tweetnacl: ^1.0.3 + typescript: 5.0.4 + websocket-as-promised: ^2.0.1 + ws: ^8.17.1 + zx: ^7.2.3 + dependencies: + '@litentry/parachain-api': 0.9.18-11.2 + '@litentry/sidechain-api': 0.9.18-11 + '@litentry/vc-schema-validator': 0.0.1 + '@noble/ed25519': 1.7.3 + '@polkadot/api': 10.13.1 + '@polkadot/api-augment': 10.13.1 + '@polkadot/api-base': 10.13.1 + '@polkadot/api-derive': 10.13.1 + '@polkadot/keyring': 12.6.2_jzs25v2gbpse74p3c5i4cryr2q + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/types-known': 10.13.1 + '@polkadot/types-support': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2_@polkadot+util@12.6.2 + '@solana/web3.js': 1.95.2 + add: 2.0.6 + bitcoinjs-lib: 6.1.6 + bitcoinjs-message: 2.2.0 + chai: 4.5.0 + colors: 1.4.0 + ecpair: 2.1.0 + js-base64: 3.7.7 + micro-base58: 0.5.1 + mocha: 10.7.0 + mocha-steps: 1.3.0 + scale-ts: 0.2.12 + tiny-secp256k1: 2.2.3 + tweetnacl: 1.0.3 + websocket-as-promised: 2.1.0 + ws: 8.18.0 + zx: 7.2.3 + devDependencies: + '@ethersproject/providers': 5.7.2 + '@types/chai': 4.3.17 + '@types/mocha': 10.0.7 + '@types/node': 20.14.14 + '@types/ws': 8.5.12 + '@typescript-eslint/eslint-plugin': 5.62.0_6642sdbk46myawr2npa4taenme + '@typescript-eslint/parser': 5.62.0_lhzdwpbtv2n477nxjcr5ny2fnm + cross-env: 7.0.3 + dotenv: 16.4.5 + eslint: 8.57.0 + ethers: 5.7.2 + prettier: 2.8.1 + ts-node: 10.9.2_ni5b34ivku5fhrv37xunmjbj5m + typescript: 5.0.4 + +packages: + + /@babel/runtime/7.25.0: + resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: false + + /@cspotcode/source-map-support/0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true + + /@eslint-community/eslint-utils/4.4.0_eslint@8.57.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.57.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp/4.11.0: + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + 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.6 + 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.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + 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 + + /@humanwhocodes/config-array/0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.6 + 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.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + dev: true + + /@jridgewell/resolve-uri/3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + dev: true + + /@jridgewell/trace-mapping/0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true + + /@litentry/parachain-api/0.9.18-11.2: + resolution: {integrity: sha512-nnmX2o8j9Cbi6truI0CtIZ34dyAAKNGWmTIbfS5oXU3LVq20mdHErE8o9y/0j79yN+yFJwUvLpQMqanm6nwJYQ==} + dependencies: + '@polkadot/api': 10.13.1 + '@polkadot/api-augment': 10.13.1 + '@polkadot/api-base': 10.13.1 + '@polkadot/api-derive': 10.13.1 + '@polkadot/keyring': 12.6.2_jzs25v2gbpse74p3c5i4cryr2q + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/types-known': 10.13.1 + '@polkadot/types-support': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2_@polkadot+util@12.6.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@litentry/sidechain-api/0.9.18-11: + resolution: {integrity: sha512-iAcCyM8YkVdNjPs+CbhGpeUN2EnvTvvs8+HsiL660OTPRWHwLn7f3MuzrCcjBaHjKErtY2gJ9F/P6pskg5MOrg==} + dependencies: + '@polkadot/api': 10.13.1 + '@polkadot/api-augment': 10.13.1 + '@polkadot/api-base': 10.13.1 + '@polkadot/api-derive': 10.13.1 + '@polkadot/keyring': 12.6.2_jzs25v2gbpse74p3c5i4cryr2q + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/types-known': 10.13.1 + '@polkadot/types-support': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2_@polkadot+util@12.6.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@litentry/vc-schema-validator/0.0.1: + resolution: {integrity: sha512-Utnu2m/IPcGbqpopNsEdB1AvRimoL300dGpk/9g/8P16OemCHYxHE8j+n2JrHS+BUvH9upDiNMy5sbZPmDAAfQ==} + peerDependencies: + ajv: ^8.12.0 + ajv-formats: ^2.1.1 + fast-glob: ^3.3.2 + tslib: ^2.3.0 + dev: false + + /@noble/curves/1.5.0: + resolution: {integrity: sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==} + dependencies: + '@noble/hashes': 1.4.0 + dev: false + + /@noble/ed25519/1.7.3: + resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} + dev: false + + /@noble/hashes/1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + dev: false + + /@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 + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@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.1 + + /@polkadot-api/client/0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0_rxjs@7.8.1: + resolution: {integrity: sha512-0fqK6pUKcGHSG2pBvY+gfSS+1mMdjd/qRygAcKI5d05tKsnZLRnmhb9laDguKmGEIB0Bz9vQqNK3gIN/cfvVwg==} + peerDependencies: + rxjs: '>=7.8.0' + dependencies: + '@polkadot-api/metadata-builders': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/substrate-bindings': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/substrate-client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + rxjs: 7.8.1 + dev: false + optional: true + + /@polkadot-api/json-rpc-provider-proxy/0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-0hZ8vtjcsyCX8AyqP2sqUHa1TFFfxGWmlXJkit0Nqp9b32MwZqn5eaUAiV2rNuEpoglKOdKnkGtUF8t5MoodKw==} + dev: false + optional: true + + /@polkadot-api/json-rpc-provider/0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-EaUS9Fc3wsiUr6ZS43PQqaRScW7kM6DYbuM/ou0aYjm8N9MBqgDbGm2oL6RE1vAVmOfEuHcXZuZkhzWtyvQUtA==} + dev: false + optional: true + + /@polkadot-api/metadata-builders/0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-BD7rruxChL1VXt0icC2gD45OtT9ofJlql0qIllHSRYgama1CR2Owt+ApInQxB+lWqM+xNOznZRpj8CXNDvKIMg==} + dependencies: + '@polkadot-api/substrate-bindings': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + dev: false + optional: true + + /@polkadot-api/substrate-bindings/0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-N4vdrZopbsw8k57uG58ofO7nLXM4Ai7835XqakN27MkjXMp5H830A1KJE0L9sGQR7ukOCDEIHHcwXVrzmJ/PBg==} + dependencies: + '@noble/hashes': 1.4.0 + '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@scure/base': 1.1.7 + scale-ts: 1.6.0 + dev: false + optional: true + + /@polkadot-api/substrate-client/0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-lcdvd2ssUmB1CPzF8s2dnNOqbrDa+nxaaGbuts+Vo8yjgSKwds2Lo7Oq+imZN4VKW7t9+uaVcKFLMF7PdH0RWw==} + dev: false + optional: true + + /@polkadot-api/utils/0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: + resolution: {integrity: sha512-0CYaCjfLQJTCRCiYvZ81OncHXEKPzAexCMoVloR+v2nl/O2JRya/361MtPkeNLC6XBoaEgLAG9pWQpH3WePzsw==} + dev: false + optional: true + + /@polkadot/api-augment/10.13.1: + resolution: {integrity: sha512-IAKaCp19QxgOG4HKk9RAgUgC/VNVqymZ2GXfMNOZWImZhxRIbrK+raH5vN2MbWwtVHpjxyXvGsd1RRhnohI33A==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api-base': 10.13.1 + '@polkadot/rpc-augment': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@polkadot/api-base/10.13.1: + resolution: {integrity: sha512-Okrw5hjtEjqSMOG08J6qqEwlUQujTVClvY1/eZkzKwNzPelWrtV6vqfyJklB7zVhenlxfxqhZKKcY7zWSW/q5Q==} + engines: {node: '>=18'} + dependencies: + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/util': 12.6.2 + rxjs: 7.8.1 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@polkadot/api-derive/10.13.1: + resolution: {integrity: sha512-ef0H0GeCZ4q5Om+c61eLLLL29UxFC2/u/k8V1K2JOIU+2wD5LF7sjAoV09CBMKKHfkLenRckVk2ukm4rBqFRpg==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api': 10.13.1 + '@polkadot/api-augment': 10.13.1 + '@polkadot/api-base': 10.13.1 + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2_@polkadot+util@12.6.2 + rxjs: 7.8.1 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@polkadot/api/10.13.1: + resolution: {integrity: sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==} + engines: {node: '>=18'} + dependencies: + '@polkadot/api-augment': 10.13.1 + '@polkadot/api-base': 10.13.1 + '@polkadot/api-derive': 10.13.1 + '@polkadot/keyring': 12.6.2_jzs25v2gbpse74p3c5i4cryr2q + '@polkadot/rpc-augment': 10.13.1 + '@polkadot/rpc-core': 10.13.1 + '@polkadot/rpc-provider': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/types-known': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2_@polkadot+util@12.6.2 + eventemitter3: 5.0.1 + rxjs: 7.8.1 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@polkadot/keyring/12.6.2_jzs25v2gbpse74p3c5i4cryr2q: + resolution: {integrity: sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2 + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2_@polkadot+util@12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/networks/12.6.2: + resolution: {integrity: sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==} + engines: {node: '>=18'} + dependencies: + '@polkadot/util': 12.6.2 + '@substrate/ss58-registry': 1.49.0 + tslib: 2.6.3 + dev: false + + /@polkadot/rpc-augment/10.13.1: + resolution: {integrity: sha512-iLsWUW4Jcx3DOdVrSHtN0biwxlHuTs4QN2hjJV0gd0jo7W08SXhWabZIf9mDmvUJIbR7Vk+9amzvegjRyIf5+A==} + engines: {node: '>=18'} + dependencies: + '@polkadot/rpc-core': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@polkadot/rpc-core/10.13.1: + resolution: {integrity: sha512-eoejSHa+/tzHm0vwic62/aptTGbph8vaBpbvLIK7gd00+rT813ROz5ckB1CqQBFB23nHRLuzzX/toY8ID3xrKw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/rpc-augment': 10.13.1 + '@polkadot/rpc-provider': 10.13.1 + '@polkadot/types': 10.13.1 + '@polkadot/util': 12.6.2 + rxjs: 7.8.1 + tslib: 2.6.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@polkadot/rpc-provider/10.13.1: + resolution: {integrity: sha512-oJ7tatVXYJ0L7NpNiGd69D558HG5y5ZDmH2Bp9Dd4kFTQIiV8A39SlWwWUPCjSsen9lqSvvprNLnG/VHTpenbw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/keyring': 12.6.2_jzs25v2gbpse74p3c5i4cryr2q + '@polkadot/types': 10.13.1 + '@polkadot/types-support': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2_@polkadot+util@12.6.2 + '@polkadot/x-fetch': 12.6.2 + '@polkadot/x-global': 12.6.2 + '@polkadot/x-ws': 12.6.2 + eventemitter3: 5.0.1 + mock-socket: 9.3.1 + nock: 13.5.4 + tslib: 2.6.3 + optionalDependencies: + '@substrate/connect': 0.8.8 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: false + + /@polkadot/types-augment/10.13.1: + resolution: {integrity: sha512-TcrLhf95FNFin61qmVgOgayzQB/RqVsSg9thAso1Fh6pX4HSbvI35aGPBAn3SkA6R+9/TmtECirpSNLtIGFn0g==} + engines: {node: '>=18'} + dependencies: + '@polkadot/types': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/types-codec/10.13.1: + resolution: {integrity: sha512-AiQ2Vv2lbZVxEdRCN8XSERiWlOWa2cTDLnpAId78EnCtx4HLKYQSd+Jk9Y4BgO35R79mchK4iG+w6gZ+ukG2bg==} + engines: {node: '>=18'} + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/x-bigint': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/types-create/10.13.1: + resolution: {integrity: sha512-Usn1jqrz35SXgCDAqSXy7mnD6j4RvB4wyzTAZipFA6DGmhwyxxIgOzlWQWDb+1PtPKo9vtMzen5IJ+7w5chIeA==} + engines: {node: '>=18'} + dependencies: + '@polkadot/types-codec': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/types-known/10.13.1: + resolution: {integrity: sha512-uHjDW05EavOT5JeU8RbiFWTgPilZ+odsCcuEYIJGmK+es3lk/Qsdns9Zb7U7NJl7eJ6OWmRtyrWsLs+bU+jjIQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/networks': 12.6.2 + '@polkadot/types': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/types-support/10.13.1: + resolution: {integrity: sha512-4gEPfz36XRQIY7inKq0HXNVVhR6HvXtm7yrEmuBuhM86LE0lQQBkISUSgR358bdn2OFSLMxMoRNoh3kcDvdGDQ==} + engines: {node: '>=18'} + dependencies: + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/types/10.13.1: + resolution: {integrity: sha512-Hfvg1ZgJlYyzGSAVrDIpp3vullgxrjOlh/CSThd/PI4TTN1qHoPSFm2hs77k3mKkOzg+LrWsLE0P/LP2XddYcw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/keyring': 12.6.2_jzs25v2gbpse74p3c5i4cryr2q + '@polkadot/types-augment': 10.13.1 + '@polkadot/types-codec': 10.13.1 + '@polkadot/types-create': 10.13.1 + '@polkadot/util': 12.6.2 + '@polkadot/util-crypto': 12.6.2_@polkadot+util@12.6.2 + rxjs: 7.8.1 + tslib: 2.6.3 + dev: false + + /@polkadot/util-crypto/12.6.2_@polkadot+util@12.6.2: + resolution: {integrity: sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 12.6.2 + dependencies: + '@noble/curves': 1.5.0 + '@noble/hashes': 1.4.0 + '@polkadot/networks': 12.6.2 + '@polkadot/util': 12.6.2 + '@polkadot/wasm-crypto': 7.3.2_axulvg25nogl5bdhz3is4lob4q + '@polkadot/wasm-util': 7.3.2_@polkadot+util@12.6.2 + '@polkadot/x-bigint': 12.6.2 + '@polkadot/x-randomvalues': 12.6.2_anjlozjssmf6t67i2glblgyr6u + '@scure/base': 1.1.7 + tslib: 2.6.3 + dev: false + + /@polkadot/util/12.6.2: + resolution: {integrity: sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-bigint': 12.6.2 + '@polkadot/x-global': 12.6.2 + '@polkadot/x-textdecoder': 12.6.2 + '@polkadot/x-textencoder': 12.6.2 + '@types/bn.js': 5.1.5 + bn.js: 5.2.1 + tslib: 2.6.3 + dev: false + + /@polkadot/wasm-bridge/7.3.2_axulvg25nogl5bdhz3is4lob4q: + resolution: {integrity: sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-util': 7.3.2_@polkadot+util@12.6.2 + '@polkadot/x-randomvalues': 12.6.2_anjlozjssmf6t67i2glblgyr6u + tslib: 2.6.3 + dev: false + + /@polkadot/wasm-crypto-asmjs/7.3.2_@polkadot+util@12.6.2: + resolution: {integrity: sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + dependencies: + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/wasm-crypto-init/7.3.2_axulvg25nogl5bdhz3is4lob4q: + resolution: {integrity: sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-bridge': 7.3.2_axulvg25nogl5bdhz3is4lob4q + '@polkadot/wasm-crypto-asmjs': 7.3.2_@polkadot+util@12.6.2 + '@polkadot/wasm-crypto-wasm': 7.3.2_@polkadot+util@12.6.2 + '@polkadot/wasm-util': 7.3.2_@polkadot+util@12.6.2 + '@polkadot/x-randomvalues': 12.6.2_anjlozjssmf6t67i2glblgyr6u + tslib: 2.6.3 + dev: false + + /@polkadot/wasm-crypto-wasm/7.3.2_@polkadot+util@12.6.2: + resolution: {integrity: sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-util': 7.3.2_@polkadot+util@12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/wasm-crypto/7.3.2_axulvg25nogl5bdhz3is4lob4q: + resolution: {integrity: sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + '@polkadot/x-randomvalues': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-bridge': 7.3.2_axulvg25nogl5bdhz3is4lob4q + '@polkadot/wasm-crypto-asmjs': 7.3.2_@polkadot+util@12.6.2 + '@polkadot/wasm-crypto-init': 7.3.2_axulvg25nogl5bdhz3is4lob4q + '@polkadot/wasm-crypto-wasm': 7.3.2_@polkadot+util@12.6.2 + '@polkadot/wasm-util': 7.3.2_@polkadot+util@12.6.2 + '@polkadot/x-randomvalues': 12.6.2_anjlozjssmf6t67i2glblgyr6u + tslib: 2.6.3 + dev: false + + /@polkadot/wasm-util/7.3.2_@polkadot+util@12.6.2: + resolution: {integrity: sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': '*' + dependencies: + '@polkadot/util': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/x-bigint/12.6.2: + resolution: {integrity: sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/x-fetch/12.6.2: + resolution: {integrity: sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + node-fetch: 3.3.2 + tslib: 2.6.3 + dev: false + + /@polkadot/x-global/12.6.2: + resolution: {integrity: sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==} + engines: {node: '>=18'} + dependencies: + tslib: 2.6.3 + dev: false + + /@polkadot/x-randomvalues/12.6.2_anjlozjssmf6t67i2glblgyr6u: + resolution: {integrity: sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==} + engines: {node: '>=18'} + peerDependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-util': '*' + dependencies: + '@polkadot/util': 12.6.2 + '@polkadot/wasm-util': 7.3.2_@polkadot+util@12.6.2 + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/x-textdecoder/12.6.2: + resolution: {integrity: sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/x-textencoder/12.6.2: + resolution: {integrity: sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + dev: false + + /@polkadot/x-ws/12.6.2: + resolution: {integrity: sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==} + engines: {node: '>=18'} + dependencies: + '@polkadot/x-global': 12.6.2 + tslib: 2.6.3 + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@scure/base/1.1.7: + resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} + dev: false + + /@solana/buffer-layout/4.0.1: + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + dependencies: + buffer: 6.0.3 + dev: false + + /@solana/web3.js/1.95.2: + resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==} + dependencies: + '@babel/runtime': 7.25.0 + '@noble/curves': 1.5.0 + '@noble/hashes': 1.4.0 + '@solana/buffer-layout': 4.0.1 + agentkeepalive: 4.5.0 + bigint-buffer: 1.1.5 + bn.js: 5.2.1 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.1.1 + node-fetch: 2.7.0 + rpc-websockets: 9.0.2 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@substrate/connect-extension-protocol/2.0.0: + resolution: {integrity: sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg==} + dev: false + optional: true + + /@substrate/connect-known-chains/1.2.2: + resolution: {integrity: sha512-gOGrXSWA2d/3kf8Yco00VlHZl48smzAGW5Z9MDxMht98hRpT2yEEN4N5QdoEKMI4ihDW8goXGzmp79D0hFPpuA==} + dev: false + optional: true + + /@substrate/connect/0.8.8: + resolution: {integrity: sha512-zwaxuNEVI9bGt0rT8PEJiXOyebLIo6QN1SyiAHRPBOl6g3Sy0KKdSN8Jmyn++oXhVRD8aIe75/V8ZkS81T+BPQ==} + requiresBuild: true + dependencies: + '@substrate/connect-extension-protocol': 2.0.0 + '@substrate/connect-known-chains': 1.2.2 + '@substrate/light-client-extension-helpers': 0.0.4_smoldot@2.0.22 + smoldot: 2.0.22 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + optional: true + + /@substrate/light-client-extension-helpers/0.0.4_smoldot@2.0.22: + resolution: {integrity: sha512-vfKcigzL0SpiK+u9sX6dq2lQSDtuFLOxIJx2CKPouPEHIs8C+fpsufn52r19GQn+qDhU8POMPHOVoqLktj8UEA==} + peerDependencies: + smoldot: 2.x + dependencies: + '@polkadot-api/client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0_rxjs@7.8.1 + '@polkadot-api/json-rpc-provider': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/json-rpc-provider-proxy': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/substrate-client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@substrate/connect-extension-protocol': 2.0.0 + '@substrate/connect-known-chains': 1.2.2 + rxjs: 7.8.1 + smoldot: 2.0.22 + dev: false + optional: true + + /@substrate/ss58-registry/1.49.0: + resolution: {integrity: sha512-leW6Ix4LD7XgvxT7+aobPWSw+WvPcN2Rxof1rmd0mNC5t2n99k1N7UNEvz7YEFSOUeHWmKIY7F5q8KeIqYoHfA==} + dev: false + + /@swc/helpers/0.5.12: + resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} + dependencies: + tslib: 2.6.3 + dev: false + + /@tsconfig/node10/1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true + + /@tsconfig/node12/1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14/1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16/1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@types/bn.js/5.1.5: + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + dependencies: + '@types/node': 20.14.14 + dev: false + + /@types/chai/4.3.17: + resolution: {integrity: sha512-zmZ21EWzR71B4Sscphjief5djsLre50M6lI622OSySTmn9DB3j+C3kWroHfBQWXbOBwbgg/M8CG/hUxDLIloow==} + dev: true + + /@types/connect/3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 20.14.14 + dev: false + + /@types/fs-extra/11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 20.14.14 + dev: false + + /@types/json-schema/7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/jsonfile/6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + dependencies: + '@types/node': 20.14.14 + dev: false + + /@types/minimist/1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} + dev: false + + /@types/mocha/10.0.7: + resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==} + dev: true + + /@types/node/12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: false + + /@types/node/18.19.43: + resolution: {integrity: sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g==} + dependencies: + undici-types: 5.26.5 + dev: false + + /@types/node/20.14.14: + resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} + dependencies: + undici-types: 5.26.5 + + /@types/ps-tree/1.1.6: + resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} + dev: false + + /@types/semver/7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true + + /@types/uuid/8.3.4: + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + dev: false + + /@types/which/3.0.4: + resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} + dev: false + + /@types/ws/7.4.7: + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + dependencies: + '@types/node': 20.14.14 + dev: false + + /@types/ws/8.5.12: + resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} + dependencies: + '@types/node': 20.14.14 + + /@typescript-eslint/eslint-plugin/5.62.0_6642sdbk46myawr2npa4taenme: + resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 5.62.0_lhzdwpbtv2n477nxjcr5ny2fnm + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0_lhzdwpbtv2n477nxjcr5ny2fnm + '@typescript-eslint/utils': 5.62.0_lhzdwpbtv2n477nxjcr5ny2fnm + debug: 4.3.6 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare-lite: 1.4.0 + semver: 7.6.3 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.62.0_lhzdwpbtv2n477nxjcr5ny2fnm: + resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.0.4 + debug: 4.3.6 + eslint: 8.57.0 + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.62.0: + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true + + /@typescript-eslint/type-utils/5.62.0_lhzdwpbtv2n477nxjcr5ny2fnm: + resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.0.4 + '@typescript-eslint/utils': 5.62.0_lhzdwpbtv2n477nxjcr5ny2fnm + debug: 4.3.6 + eslint: 8.57.0 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.62.0_typescript@5.0.4: + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.62.0_lhzdwpbtv2n477nxjcr5ny2fnm: + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.57.0 + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0_typescript@5.0.4 + eslint: 8.57.0 + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/5.62.0: + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone/1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /JSONStream/1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + dev: false + + /acorn-jsx/5.3.2_acorn@8.12.1: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.12.1 + dev: true + + /acorn-walk/8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 + dev: true + + /acorn/8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /add/2.0.6: + resolution: {integrity: sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==} + dev: false + + /aes-js/3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + dev: true + + /agentkeepalive/4.5.0: + resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} + engines: {node: '>= 8.0.0'} + dependencies: + humanize-ms: 1.2.1 + dev: false + + /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 + + /ansi-colors/4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: false + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /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: false + + /arg/4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /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: false + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + 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.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: false + + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: false + + /available-typed-arrays/1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 + dev: false + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base-x/3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /base-x/4.0.0: + resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + dev: false + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + + /bech32/1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + + /bech32/2.0.0: + resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} + dev: false + + /bigint-buffer/1.1.5: + resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + dev: false + + /binary-extensions/2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: false + + /bindings/1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + dependencies: + file-uri-to-path: 1.0.0 + dev: false + + /bip174/2.1.1: + resolution: {integrity: sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==} + engines: {node: '>=8.0.0'} + dev: false + + /bip66/1.1.5: + resolution: {integrity: sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /bitcoinjs-lib/6.1.6: + resolution: {integrity: sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA==} + engines: {node: '>=8.0.0'} + dependencies: + '@noble/hashes': 1.4.0 + bech32: 2.0.0 + bip174: 2.1.1 + bs58check: 3.0.1 + typeforce: 1.18.0 + varuint-bitcoin: 1.1.2 + dev: false + + /bitcoinjs-message/2.2.0: + resolution: {integrity: sha512-103Wy3xg8Y9o+pdhGP4M3/mtQQuUWs6sPuOp1mYphSUoSMHjHTlkj32K4zxU8qMH0Ckv23emfkGlFWtoWZ7YFA==} + engines: {node: '>=0.10'} + dependencies: + bech32: 1.1.4 + bs58check: 2.1.2 + buffer-equals: 1.0.4 + create-hash: 1.2.0 + secp256k1: 3.8.0 + varuint-bitcoin: 1.1.2 + dev: false + + /bn.js/4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + /bn.js/5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + /borsh/0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + dependencies: + bn.js: 5.2.1 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + dev: false + + /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: false + + /braces/3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 + + /brorand/1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + /browser-stdout/1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: false + + /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: false + + /bs58/4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + dependencies: + base-x: 3.0.10 + dev: false + + /bs58/5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + dependencies: + base-x: 4.0.0 + dev: false + + /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: false + + /bs58check/3.0.1: + resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} + dependencies: + '@noble/hashes': 1.4.0 + bs58: 5.0.0 + dev: false + + /buffer-equals/1.0.4: + resolution: {integrity: sha512-99MsCq0j5+RhubVEtKQgKaD6EM+UP3xJgIvQqwJ3SOLDUekzxMX1ylXBng+Wa2sh7mGT0W6RUly8ojjr1Tt6nA==} + engines: {node: '>=0.10.0'} + dev: false + + /buffer-xor/1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: false + + /buffer/6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + + /bufferutil/4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.1 + dev: false + + /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.4 + set-function-length: 1.2.2 + dev: false + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false + + /chai/4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + dev: false + + /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 + + /chalk/5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: false + + /check-error/1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: false + + /chnl/1.2.0: + resolution: {integrity: sha512-g5gJb59edwCliFbX2j7G6sBfY4sX9YLy211yctONI2GRaiX0f2zIbKWmBm+sPqFNEpM7Ljzm7IJX/xrjiEbPrw==} + dev: false + + /chokidar/3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + 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: false + + /cipher-base/1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /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: false + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /colors/1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + dev: false + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + 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: false + + /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: false + + /create-require/1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true + + /cross-env/7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + 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 + + /data-uri-to-buffer/4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + dev: false + + /data-view-buffer/1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: false + + /data-view-byte-length/1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: false + + /data-view-byte-offset/1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: false + + /debug/4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /debug/4.3.6_supports-color@8.1.1: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + dev: false + + /decamelize/4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: false + + /deep-eql/4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.1.0 + dev: false + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /define-data-property/1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: false + + /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: false + + /delay/5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: false + + /diff/4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /diff/5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + dev: false + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + + /doctrine/3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dotenv/16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: true + + /drbg.js/1.0.1: + resolution: {integrity: sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==} + engines: {node: '>=0.10'} + dependencies: + browserify-aes: 1.2.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + dev: false + + /duplexer/0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: false + + /ecpair/2.1.0: + resolution: {integrity: sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==} + engines: {node: '>=8.0.0'} + dependencies: + randombytes: 2.1.0 + typeforce: 1.18.0 + wif: 2.0.6 + dev: false + + /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 + + /elliptic/6.5.6: + resolution: {integrity: sha512-mpzdtpeCLuS3BmE3pO3Cpp5bbjlOPY2Q0PgoF+Od1XZrHLYI28Xe3ossCmYCQt11FQKEYd9+PF8jymTvtWJSHQ==} + 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: false + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false + + /es-abstract/1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + 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.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: false + + /es-define-property/1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: false + + /es-errors/1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: false + + /es-object-atoms/1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: false + + /es-set-tostringtag/2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: false + + /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: false + + /es6-promise/4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: false + + /es6-promisify/5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + dependencies: + es6-promise: 4.2.8 + dev: false + + /escalade/3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: false + + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.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.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.57.0 + '@eslint-community/regexpp': 4.11.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.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.6 + 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.6.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.4 + 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.12.1 + acorn-jsx: 5.3.2_acorn@8.12.1 + eslint-visitor-keys: 3.4.3 + dev: true + + /esquery/1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + 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/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.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 + + /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 + + /event-stream/3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + dev: false + + /eventemitter3/5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: false + + /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: false + + /eyes/0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + dev: false + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob/3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + /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 + + /fast-stable-stringify/1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + dev: false + + /fastq/1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + + /fetch-blob/3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + dev: false + + /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 + + /file-uri-to-path/1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + dev: false + + /fill-range/7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + + /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 + + /flat-cache/3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flat/5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: false + + /flatted/3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true + + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: false + + /formdata-polyfill/4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + dependencies: + fetch-blob: 3.2.0 + dev: false + + /from/0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + dev: false + + /fs-extra/11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: false + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /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: false + optional: true + + /function-bind/1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: false + + /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.23.3 + functions-have-names: 1.2.3 + dev: false + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: false + + /fx/35.0.0: + resolution: {integrity: sha512-O07q+Lknrom5RUX/u53tjo2KTTLUnL0K703JbqMYb19ORijfJNvijzFqqYXEjdk25T9R14S6t6wHD8fCWXCM0g==} + hasBin: true + dev: false + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: false + + /get-func-name/2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: false + + /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.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + dev: false + + /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: false + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + + /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.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + 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'} + deprecated: Glob versions prior to v9 are no longer supported + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: false + + /globals/13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globalthis/1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + dev: false + + /globby/11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby/13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 4.0.0 + dev: false + + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: false + + /graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: false + + /graphemer/1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: false + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors/1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: false + + /has-proto/1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: false + + /has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false + + /has-tostringtag/1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /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: false + + /hash.js/1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + /hasown/2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: false + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: false + + /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 + + /humanize-ms/1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + dependencies: + ms: 2.1.3 + dev: false + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + + /ignore/5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + /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==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /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.2 + side-channel: 1.0.6 + dev: false + + /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: false + + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: false + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + dev: false + + /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: false + + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: false + + /is-data-view/1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: false + + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-negative-zero/2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: false + + /is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + /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: false + + /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: false + + /is-shared-array-buffer/1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: false + + /is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: false + + /is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: false + + /is-typed-array/1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.15 + dev: false + + /is-unicode-supported/0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: false + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.7 + dev: false + + /isarray/2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: false + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /isomorphic-ws/4.0.1_ws@7.5.10: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.10 + dev: false + + /jayson/4.1.1: + resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==} + engines: {node: '>=8'} + hasBin: true + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + JSONStream: 1.3.5 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1_ws@7.5.10 + json-stringify-safe: 5.0.1 + uuid: 8.3.2 + ws: 7.5.10 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /js-base64/3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + dev: false + + /js-sha3/0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: true + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /json-buffer/3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json-stringify-safe/5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: false + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /jsonparse/1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + dev: false + + /keyv/4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: 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 + + /locate-path/6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + 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: false + + /loupe/2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: false + + /make-error/1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /map-stream/0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + dev: false + + /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: false + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + /micro-base58/0.5.1: + resolution: {integrity: sha512-iwqAmg66VjB2LA3BcUxyrOyqck4HLLtSzKnx2VQSnN5piQji598N15P8RRx2d6lPvJ98B1b0cl2VbvQeFeWdig==} + dev: false + + /micromatch/4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + /minimalistic-assert/1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + /minimalistic-crypto-utils/1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false + + /mocha-steps/1.3.0: + resolution: {integrity: sha512-KZvpMJTqzLZw3mOb+EEuYi4YZS41C9iTnb7skVFRxHjUd1OYbl64tCMSmpdIRM9LnwIrSOaRfPtNpF5msgv6Eg==} + dev: false + + /mocha/10.7.0: + resolution: {integrity: sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==} + engines: {node: '>= 14.0.0'} + hasBin: true + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.3.6_supports-color@8.1.1 + diff: 5.2.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.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + dev: false + + /mock-socket/9.3.1: + resolution: {integrity: sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==} + engines: {node: '>= 8'} + dev: false + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: false + + /nan/2.20.0: + resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + dev: false + + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /nock/13.5.4: + resolution: {integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==} + engines: {node: '>= 10.13'} + dependencies: + debug: 4.3.6 + json-stringify-safe: 5.0.1 + propagate: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: false + + /node-domexception/1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + dev: false + + /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: false + + /node-fetch/3.3.1: + resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: false + + /node-fetch/3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + dev: false + + /node-gyp-build/4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + dev: false + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /object-inspect/1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + dev: false + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: false + + /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: false + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /optionator/0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + + /p-locate/5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /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-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: false + + /pause-stream/0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + dependencies: + through: 2.3.8 + dev: false + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + /possible-typed-array-names/1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: false + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier/2.8.1: + resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /promise-controller/1.0.0: + resolution: {integrity: sha512-goA0zA9L91tuQbUmiMinSYqlyUtEgg4fxJcjYnLYOQnrktb4o4UqciXDNXiRUPiDBPACmsr1k8jDW4r7UDq9Qw==} + engines: {node: '>=8'} + dev: false + + /promise.prototype.finally/3.1.8: + resolution: {integrity: sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: false + + /promised-map/1.0.0: + resolution: {integrity: sha512-fP9VSMgcml+U2uJ9PBc4/LDQ3ZkJCH4blLNCS6gbH7RHyRZCYs91zxWHqiUy+heFiEMiB2op/qllYoFqmIqdWA==} + engines: {node: '>=10'} + dev: false + + /propagate/2.0.1: + resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} + engines: {node: '>= 8'} + dev: false + + /ps-tree/1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + dependencies: + event-stream: 3.3.4 + dev: false + + /punycode/2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /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: false + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /regenerator-runtime/0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: false + + /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.2 + dev: false + + /require-directory/2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + dev: false + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /ripemd160/2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: false + + /rpc-websockets/9.0.2: + resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} + dependencies: + '@swc/helpers': 0.5.12 + '@types/uuid': 8.3.4 + '@types/ws': 8.5.12 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.0_s4nflk5mbdtq7qmesqgyqw2imi + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 + dev: false + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /rxjs/7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.6.3 + dev: false + + /safe-array-concat/1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + 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: false + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + + /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: false + + /scale-ts/0.2.12: + resolution: {integrity: sha512-hNGuU5Yhohmp4BjFrNEioDkPAOWe6aYRDUlBi9FTxxmp1wZ8SAkDxAf/IobinuSa+J0a9srZEP73dqmYeyYYXg==} + dev: false + + /scale-ts/1.6.0: + resolution: {integrity: sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q==} + dev: false + optional: true + + /scrypt-js/3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + dev: true + + /secp256k1/3.8.0: + resolution: {integrity: sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==} + engines: {node: '>=4.0.0'} + requiresBuild: true + dependencies: + bindings: 1.5.0 + bip66: 1.1.5 + bn.js: 4.12.0 + create-hash: 1.2.0 + drbg.js: 1.0.1 + elliptic: 6.5.6 + nan: 2.20.0 + safe-buffer: 5.2.1 + dev: false + + /semver/7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /serialize-javascript/6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + dependencies: + randombytes: 2.1.0 + dev: false + + /set-function-length/1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + dev: false + + /set-function-name/2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: false + + /sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: false + + /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.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + dev: false + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slash/4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: false + + /smoldot/2.0.22: + resolution: {integrity: sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g==} + dependencies: + ws: 8.18.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + optional: true + + /split/0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + dependencies: + through: 2.3.8 + dev: false + + /stream-combiner/0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + dependencies: + duplexer: 0.1.2 + dev: false + + /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: false + + /string.prototype.trim/1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: false + + /string.prototype.trimend/1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: false + + /string.prototype.trimstart/1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + dev: false + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + /superstruct/2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + dev: false + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: false + + /text-encoding-utf-8/1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + dev: false + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: false + + /tiny-secp256k1/2.2.3: + resolution: {integrity: sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==} + engines: {node: '>=14.0.0'} + dependencies: + uint8array-tools: 0.0.7 + dev: false + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false + + /ts-node/10.9.2_ni5b34ivku5fhrv37xunmjbj5m: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.14.14 + acorn: 8.12.1 + acorn-walk: 8.3.3 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.0.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib/2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + dev: false + + /tsutils/3.21.0_typescript@5.0.4: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 5.0.4 + dev: true + + /tweetnacl/1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + dev: false + + /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.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + dev: false + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /typed-array-buffer/1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: false + + /typed-array-byte-length/1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: false + + /typed-array-byte-offset/1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: false + + /typed-array-length/1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: false + + /typeforce/1.18.0: + resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} + dev: false + + /typescript/5.0.4: + resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} + engines: {node: '>=12.20'} + hasBin: true + dev: true + + /uint8array-tools/0.0.7: + resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} + engines: {node: '>=14.0.0'} + dev: false + + /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: false + + /undici-types/5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + /universalify/2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: false + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + 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.1 + dev: false + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + + /uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /v8-compile-cache-lib/3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /varuint-bitcoin/1.1.2: + resolution: {integrity: sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==} + dependencies: + safe-buffer: 5.2.1 + dev: false + + /web-streams-polyfill/3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + dev: false + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false + + /webpod/0.0.2: + resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} + hasBin: true + dev: false + + /websocket-as-promised/2.1.0: + resolution: {integrity: sha512-TpFh8+9XcxOX8s+pLh217OVUF+wZjxYOa9H1ay1T/YIT8gRdEVk/mfaZbvqgRzXbNRMQngBrLbCdXzz5Yl8K0Q==} + engines: {node: '>=6'} + dependencies: + chnl: 1.2.0 + promise-controller: 1.0.0 + promise.prototype.finally: 3.1.8 + promised-map: 1.0.0 + dev: false + + /whatwg-url/5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + dev: false + + /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: false + + /which-typed-array/1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: false + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /which/3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: false + + /wif/2.0.6: + resolution: {integrity: sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==} + dependencies: + bs58check: 2.1.2 + dev: false + + /word-wrap/1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /workerpool/6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + dev: false + + /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: false + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /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.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + 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: false + + /ws/8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + 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: false + + /ws/8.18.0_s4nflk5mbdtq7qmesqgyqw2imi: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + 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.8 + utf-8-validate: 5.0.10 + dev: false + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: false + + /yaml/2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + engines: {node: '>= 14'} + hasBin: true + dev: false + + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: false + + /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: false + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: false + + /yn/3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + /zx/7.2.3: + resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} + engines: {node: '>= 16.0.0'} + hasBin: true + dependencies: + '@types/fs-extra': 11.0.4 + '@types/minimist': 1.2.5 + '@types/node': 18.19.43 + '@types/ps-tree': 1.1.6 + '@types/which': 3.0.4 + chalk: 5.3.0 + fs-extra: 11.2.0 + fx: 35.0.0 + globby: 13.2.2 + minimist: 1.2.8 + node-fetch: 3.3.1 + ps-tree: 1.2.0 + webpod: 0.0.2 + which: 3.0.1 + yaml: 2.5.0 + dev: false diff --git a/vc-di-tests/pnpm-workspace.yaml b/vc-di-tests/pnpm-workspace.yaml new file mode 100644 index 0000000..237d90c --- /dev/null +++ b/vc-di-tests/pnpm-workspace.yaml @@ -0,0 +1 @@ +packages: ['integration-tests'] From 63ac04992278210e418933513cc9df411892276f Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 16:30:56 +0800 Subject: [PATCH 20/45] add vc-di-tests --- .github/workflows/ci.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b8e17f..537cf1d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,3 +84,9 @@ jobs: run: | ./scripts/run_parachain_worker.sh docker ps + - name: Run integration tests + working-directory: ./vc-di-tests + run: | + pnpm install + pnpm run test assertion_contracts.test.ts + \ No newline at end of file From 414884a229411acf026a8506a1005d4a0b4f4e15 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 16:33:07 +0800 Subject: [PATCH 21/45] fix pnpm --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 537cf1d..6bba4a6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,6 +87,6 @@ jobs: - name: Run integration tests working-directory: ./vc-di-tests run: | - pnpm install + corepack enable && corepack enable pnpm && pnpm install pnpm run test assertion_contracts.test.ts \ No newline at end of file From f1bb6828366d8dc40a532e16ce1ad0192b79e084 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 16:37:32 +0800 Subject: [PATCH 22/45] test di request --- .github/workflows/ci.yml | 2 +- .../assertion_contracts.test.ts | 210 +++++++++--------- 2 files changed, 106 insertions(+), 106 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6bba4a6..a3607eb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,6 +87,6 @@ jobs: - name: Run integration tests working-directory: ./vc-di-tests run: | - corepack enable && corepack enable pnpm && pnpm install + corepack enable && corepack enable pnpm && pnpm install --no-frozen-lockfile pnpm run test assertion_contracts.test.ts \ No newline at end of file diff --git a/vc-di-tests/integration-tests/assertion_contracts.test.ts b/vc-di-tests/integration-tests/assertion_contracts.test.ts index b08dd04..5080406 100644 --- a/vc-di-tests/integration-tests/assertion_contracts.test.ts +++ b/vc-di-tests/integration-tests/assertion_contracts.test.ts @@ -55,109 +55,109 @@ describe('Test Vc (direct request)', function () { assert.isNotEmpty(contractBytecode); }); - step('deploying tokenmapping contract via parachain pallet', async function () { - const secretValue = 'my-secrets-value'; - const secretEncoded = context.api.createType('String', secretValue).toU8a(); - const encryptedSecrets = encryptWithTeeShieldingKey(teeShieldingKey, secretEncoded); - - const secret = '0x' + encryptedSecrets.toString('hex'); - - const assertionId = '0x0000000000000000000000000000000000000003'; - const createAssertionEventsPromise = subscribeToEvents('evmAssertions', 'AssertionCreated', context.api); - - const proposal = context.api.tx.evmAssertions.createAssertion(assertionId, contractBytecode, [ - // At least three secrets are required here. - secret, - secret, - secret, - ]); - await context.api.tx.developerCommittee.execute(proposal, proposal.encodedLength).signAndSend(alice); - - const event = (await createAssertionEventsPromise).map((e) => e); - assert.equal(event.length, 1); - }); - - step('linking identities (alice)', async function () { - let currentNonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); - const getNextNonce = () => currentNonce++; - const evmNonce = getNextNonce(); - - const evmIdentity = await context.web3Wallets.evm.Alice.getIdentity(context); - const evmValidation = await buildValidations( - context, - aliceSubstrateIdentity, - evmIdentity, - evmNonce, - 'ethereum', - context.web3Wallets.evm.Alice - ); - const evmNetworks = context.api.createType('Vec', ['Ethereum', 'Bsc']); - linkIdentityRequestParams.push({ - nonce: evmNonce, - identity: evmIdentity, - validation: evmValidation, - networks: evmNetworks, - }); - - let counter = 0; - for (const { nonce, identity, validation, networks } of linkIdentityRequestParams) { - counter++; - const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; - const linkIdentityCall = await createSignedTrustedCallLinkIdentity( - context.api, - context.mrEnclave, - context.api.createType('Index', nonce), - context.web3Wallets.substrate.Alice, - aliceSubstrateIdentity, - identity.toHex(), - validation.toHex(), - networks.toHex(), - context.api.createType('Option', aesKey).toHex(), - requestIdentifier, - { - withWrappedBytes: false, - withPrefix: counter % 2 === 0, // alternate per entry - } - ); - - const res = await sendRequestFromTrustedCall(context, teeShieldingKey, linkIdentityCall); - await assertIsInSidechainBlock('linkIdentityCall', res); - } - }); - - step('requesting VC for deployed contract', async function () { - await sleep(30); - const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; - const nonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); - - const abiCoder = new ethers.utils.AbiCoder(); - const encodedData = abiCoder.encode(['string'], ['bnb']); - - const assertion = { - dynamic: context.api.createType('DynamicParams', [ - Uint8Array.from(Buffer.from('0000000000000000000000000000000000000003', 'hex')), - encodedData, - true, - ]), - }; - - const requestVcCall = await createSignedTrustedCallRequestVc( - context.api, - context.mrEnclave, - context.api.createType('Index', nonce), - context.web3Wallets.substrate.Alice, - aliceSubstrateIdentity, - context.api.createType('Assertion', assertion).toHex(), - context.api.createType('Option', aesKey).toHex(), - requestIdentifier, - { - withWrappedBytes: false, - withPrefix: true, - } - ); - - const res = await sendRequestFromTrustedCall(context, teeShieldingKey, requestVcCall); - await assertIsInSidechainBlock(`${Object.keys(assertion)[0]} requestVcCall`, res); - assertVc(context, aliceSubstrateIdentity, res.value); - }); + // step('deploying tokenmapping contract via parachain pallet', async function () { + // const secretValue = 'my-secrets-value'; + // const secretEncoded = context.api.createType('String', secretValue).toU8a(); + // const encryptedSecrets = encryptWithTeeShieldingKey(teeShieldingKey, secretEncoded); + + // const secret = '0x' + encryptedSecrets.toString('hex'); + + // const assertionId = '0x0000000000000000000000000000000000000003'; + // const createAssertionEventsPromise = subscribeToEvents('evmAssertions', 'AssertionCreated', context.api); + + // const proposal = context.api.tx.evmAssertions.createAssertion(assertionId, contractBytecode, [ + // // At least three secrets are required here. + // secret, + // secret, + // secret, + // ]); + // await context.api.tx.developerCommittee.execute(proposal, proposal.encodedLength).signAndSend(alice); + + // const event = (await createAssertionEventsPromise).map((e) => e); + // assert.equal(event.length, 1); + // }); + + // step('linking identities (alice)', async function () { + // let currentNonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); + // const getNextNonce = () => currentNonce++; + // const evmNonce = getNextNonce(); + + // const evmIdentity = await context.web3Wallets.evm.Alice.getIdentity(context); + // const evmValidation = await buildValidations( + // context, + // aliceSubstrateIdentity, + // evmIdentity, + // evmNonce, + // 'ethereum', + // context.web3Wallets.evm.Alice + // ); + // const evmNetworks = context.api.createType('Vec', ['Ethereum', 'Bsc']); + // linkIdentityRequestParams.push({ + // nonce: evmNonce, + // identity: evmIdentity, + // validation: evmValidation, + // networks: evmNetworks, + // }); + + // let counter = 0; + // for (const { nonce, identity, validation, networks } of linkIdentityRequestParams) { + // counter++; + // const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; + // const linkIdentityCall = await createSignedTrustedCallLinkIdentity( + // context.api, + // context.mrEnclave, + // context.api.createType('Index', nonce), + // context.web3Wallets.substrate.Alice, + // aliceSubstrateIdentity, + // identity.toHex(), + // validation.toHex(), + // networks.toHex(), + // context.api.createType('Option', aesKey).toHex(), + // requestIdentifier, + // { + // withWrappedBytes: false, + // withPrefix: counter % 2 === 0, // alternate per entry + // } + // ); + + // const res = await sendRequestFromTrustedCall(context, teeShieldingKey, linkIdentityCall); + // await assertIsInSidechainBlock('linkIdentityCall', res); + // } + // }); + + // step('requesting VC for deployed contract', async function () { + // await sleep(30); + // const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; + // const nonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); + + // const abiCoder = new ethers.utils.AbiCoder(); + // const encodedData = abiCoder.encode(['string'], ['bnb']); + + // const assertion = { + // dynamic: context.api.createType('DynamicParams', [ + // Uint8Array.from(Buffer.from('0000000000000000000000000000000000000003', 'hex')), + // encodedData, + // true, + // ]), + // }; + + // const requestVcCall = await createSignedTrustedCallRequestVc( + // context.api, + // context.mrEnclave, + // context.api.createType('Index', nonce), + // context.web3Wallets.substrate.Alice, + // aliceSubstrateIdentity, + // context.api.createType('Assertion', assertion).toHex(), + // context.api.createType('Option', aesKey).toHex(), + // requestIdentifier, + // { + // withWrappedBytes: false, + // withPrefix: true, + // } + // ); + + // const res = await sendRequestFromTrustedCall(context, teeShieldingKey, requestVcCall); + // await assertIsInSidechainBlock(`${Object.keys(assertion)[0]} requestVcCall`, res); + // assertVc(context, aliceSubstrateIdentity, res.value); + // }); }); From e5ad639b17ae0aa6f9b7c5ae236918f66ad1a0b7 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 16:41:15 +0800 Subject: [PATCH 23/45] fix dir --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a3607eb..f7b7fb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -85,7 +85,7 @@ jobs: ./scripts/run_parachain_worker.sh docker ps - name: Run integration tests - working-directory: ./vc-di-tests + working-directory: ./vc-di-tests/integration-tests run: | corepack enable && corepack enable pnpm && pnpm install --no-frozen-lockfile pnpm run test assertion_contracts.test.ts From eda1774ab15f1a30b05a658ff6ddcaae3fcbf8c1 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 16:53:58 +0800 Subject: [PATCH 24/45] format --- .github/workflows/ci.yml | 1 - .../assertion_contracts.test.ts | 88 ++-- vc-di-tests/integration-tests/common/call.ts | 57 +-- .../integration-tests/common/common-types.ts | 70 ++-- .../integration-tests/common/config.js | 4 +- .../common/credential-json/discord.json | 6 +- .../common/credential-json/index.ts | 74 ++-- .../integration-tests/common/di-utils.ts | 380 ++++++++++++------ .../integration-tests/common/helpers.ts | 113 +++--- .../integration-tests/common/transactions.ts | 243 ++++++----- .../common/utils/assertion.ts | 212 ++++++---- .../integration-tests/common/utils/common.ts | 4 +- .../integration-tests/common/utils/context.ts | 113 ++++-- .../integration-tests/common/utils/crypto.ts | 253 +++++++----- .../common/utils/identity-helper.ts | 225 +++++++---- .../integration-tests/common/utils/index.ts | 22 +- .../common/utils/integration-setup.ts | 52 +-- .../integration-tests/common/utils/storage.ts | 137 ++++--- .../common/utils/type-creators.ts | 30 +- .../common/utils/vc-helper.ts | 19 +- vc-di-tests/integration-tests/package.json | 2 +- vc-di-tests/package.json | 14 +- 22 files changed, 1295 insertions(+), 824 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f7b7fb4..cbe190c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -89,4 +89,3 @@ jobs: run: | corepack enable && corepack enable pnpm && pnpm install --no-frozen-lockfile pnpm run test assertion_contracts.test.ts - \ No newline at end of file diff --git a/vc-di-tests/integration-tests/assertion_contracts.test.ts b/vc-di-tests/integration-tests/assertion_contracts.test.ts index 5080406..3233826 100644 --- a/vc-di-tests/integration-tests/assertion_contracts.test.ts +++ b/vc-di-tests/integration-tests/assertion_contracts.test.ts @@ -1,59 +1,67 @@ -import { randomBytes, KeyObject } from 'crypto'; -import { step } from 'mocha-steps'; -import { buildValidations, initIntegrationTestContext } from './common/utils'; -import { assertIsInSidechainBlock, assertVc } from './common/utils/assertion'; +import { randomBytes, KeyObject } from 'crypto' +import { step } from 'mocha-steps' +import { buildValidations, initIntegrationTestContext } from './common/utils' +import { assertIsInSidechainBlock, assertVc } from './common/utils/assertion' import { getSidechainNonce, getTeeShieldingKey, sendRequestFromTrustedCall, createSignedTrustedCallRequestVc, createSignedTrustedCallLinkIdentity, -} from './common/di-utils'; // @fixme move to a better place -import type { IntegrationTestContext } from './common/common-types'; -import { aesKey } from './common/call'; -import type { CorePrimitivesIdentity, LitentryValidationData, Web3Network } from '@litentry/parachain-api'; -import fs from 'fs'; -import path from 'path'; -import { assert } from 'chai'; -import { genesisSubstrateWallet } from './common/helpers'; -import { KeyringPair } from '@polkadot/keyring/types'; -import { subscribeToEvents } from './common/transactions'; -import { encryptWithTeeShieldingKey } from './common/utils/crypto'; -import { ethers } from 'ethers'; -import { sleep } from './common/utils'; -import { Bytes, Vec } from '@polkadot/types-codec'; +} from './common/di-utils' // @fixme move to a better place +import type { IntegrationTestContext } from './common/common-types' +import { aesKey } from './common/call' +import type { + CorePrimitivesIdentity, + LitentryValidationData, + Web3Network, +} from '@litentry/parachain-api' +import fs from 'fs' +import path from 'path' +import { assert } from 'chai' +import { genesisSubstrateWallet } from './common/helpers' +import { KeyringPair } from '@polkadot/keyring/types' +import { subscribeToEvents } from './common/transactions' +import { encryptWithTeeShieldingKey } from './common/utils/crypto' +import { ethers } from 'ethers' +import { sleep } from './common/utils' +import { Bytes, Vec } from '@polkadot/types-codec' describe('Test Vc (direct request)', function () { - let context: IntegrationTestContext = undefined as any; - let teeShieldingKey: KeyObject = undefined as any; - let aliceSubstrateIdentity: CorePrimitivesIdentity = undefined as any; + let context: IntegrationTestContext = undefined as any + let teeShieldingKey: KeyObject = undefined as any + let aliceSubstrateIdentity: CorePrimitivesIdentity = undefined as any - let alice: KeyringPair = undefined as any; - let contractBytecode = undefined as any; + let alice: KeyringPair = undefined as any + let contractBytecode = undefined as any const linkIdentityRequestParams: { - nonce: number; - identity: CorePrimitivesIdentity; - validation: LitentryValidationData; - networks: Bytes | Vec; - }[] = []; - this.timeout(6000000); + nonce: number + identity: CorePrimitivesIdentity + validation: LitentryValidationData + networks: Bytes | Vec + }[] = [] + this.timeout(6000000) before(async () => { context = await initIntegrationTestContext( process.env.WORKER_ENDPOINT!, // @fixme evil assertion; centralize env access process.env.NODE_ENDPOINT! // @fixme evil assertion; centralize env access - ); - teeShieldingKey = await getTeeShieldingKey(context); - aliceSubstrateIdentity = await context.web3Wallets.substrate.Alice.getIdentity(context); - alice = genesisSubstrateWallet('Alice'); - }); + ) + teeShieldingKey = await getTeeShieldingKey(context) + aliceSubstrateIdentity = + await context.web3Wallets.substrate.Alice.getIdentity(context) + alice = genesisSubstrateWallet('Alice') + }) step('loading tokenmapping contract bytecode', async function () { - const file = path.resolve('./', './contracts/token_holding_amount/TokenMapping.sol/TokenMapping.json'); - const data = fs.readFileSync(file, 'utf8'); - contractBytecode = JSON.parse(data).bytecode; - assert.isNotEmpty(contractBytecode); - }); + const file = path.resolve( + './', + './contracts/token_holding_amount/TokenMapping.sol/TokenMapping.json' + ) + const data = fs.readFileSync(file, 'utf8') + contractBytecode = JSON.parse(data).bytecode + assert.isNotEmpty(contractBytecode) + }) // step('deploying tokenmapping contract via parachain pallet', async function () { // const secretValue = 'my-secrets-value'; @@ -160,4 +168,4 @@ describe('Test Vc (direct request)', function () { // await assertIsInSidechainBlock(`${Object.keys(assertion)[0]} requestVcCall`, res); // assertVc(context, aliceSubstrateIdentity, res.value); // }); -}); +}) diff --git a/vc-di-tests/integration-tests/common/call.ts b/vc-di-tests/integration-tests/common/call.ts index bb56bd8..bd984c5 100644 --- a/vc-di-tests/integration-tests/common/call.ts +++ b/vc-di-tests/integration-tests/common/call.ts @@ -1,20 +1,21 @@ -import { ApiPromise } from '@polkadot/api'; -import { hexToU8a, compactStripLength, u8aToString } from '@polkadot/util'; -import WebSocketAsPromised from 'websocket-as-promised'; -import type { JsonRpcRequest } from './common-types'; -import type { WorkerRpcReturnValue } from '@litentry/parachain-api'; -import { Metadata, TypeRegistry } from '@polkadot/types'; -import type { Bytes } from '@polkadot/types-codec'; -import { createJsonRpcRequest } from './helpers'; +import { ApiPromise } from '@polkadot/api' +import { hexToU8a, compactStripLength, u8aToString } from '@polkadot/util' +import WebSocketAsPromised from 'websocket-as-promised' +import type { JsonRpcRequest } from './common-types' +import type { WorkerRpcReturnValue } from '@litentry/parachain-api' +import { Metadata, TypeRegistry } from '@polkadot/types' +import type { Bytes } from '@polkadot/types-codec' +import { createJsonRpcRequest } from './helpers' // TODO: // - better place to put these constants? // - maybe randomise it in test initialisation // // the aes key to encrypt an AES request -export const aesKey = '0x22fc82db5b606998ad45099b7978b5b4f9dd4ea6017e57370ac56141caaabd12'; +export const aesKey = + '0x22fc82db5b606998ad45099b7978b5b4f9dd4ea6017e57370ac56141caaabd12' // nonce to encrypt an AES request together with `aesKey` -export const keyNonce = '0x010101010101010101010101'; +export const keyNonce = '0x010101010101010101010101' // send RPC request export async function sendRequest( @@ -22,26 +23,32 @@ export async function sendRequest( request: JsonRpcRequest, api: ApiPromise ): Promise { - const rawRes = await wsClient.sendRequest(request, { requestId: request.id, timeout: 6000 }); + const rawRes = await wsClient.sendRequest(request, { + requestId: request.id, + timeout: 6000, + }) - const res = api.createType('WorkerRpcReturnValue', rawRes.result); + const res = api.createType('WorkerRpcReturnValue', rawRes.result) if (res.status.isError) { - console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)); + console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)) } // unfortunately, the res.value only contains the hash of top - if (res.status.isTrustedOperationStatus && res.status.asTrustedOperationStatus[0].isInvalid) { - console.log('Rpc trusted operation execution failed, hash: ', res.value); + if ( + res.status.isTrustedOperationStatus && + res.status.asTrustedOperationStatus[0].isInvalid + ) { + console.log('Rpc trusted operation execution failed, hash: ', res.value) } - return res; + return res } // decode the returned bytes as string // TODO: is it same as `String::decode` in rust? // please note we shouldn't use toU8a(), which encodes the Bytes instead of converting export function decodeRpcBytesAsString(value: Bytes): string { - return u8aToString(compactStripLength(hexToU8a(value.toHex()))[1]); + return u8aToString(compactStripLength(hexToU8a(value.toHex()))[1]) } export async function getSidechainMetadata( @@ -49,13 +56,17 @@ export async function getSidechainMetadata( api: ApiPromise, requestId: number ): Promise<{ sidechainMetaData: Metadata; sidechainRegistry: TypeRegistry }> { - const request = createJsonRpcRequest('state_getMetadata', Uint8Array.from([]), requestId); + const request = createJsonRpcRequest( + 'state_getMetadata', + Uint8Array.from([]), + requestId + ) - const resp = await sendRequest(wsClient, request, api); + const resp = await sendRequest(wsClient, request, api) - const sidechainRegistry = new TypeRegistry(); - const sidechainMetaData = new Metadata(sidechainRegistry, resp.value); + const sidechainRegistry = new TypeRegistry() + const sidechainMetaData = new Metadata(sidechainRegistry, resp.value) - sidechainRegistry.setMetadata(sidechainMetaData); - return { sidechainMetaData, sidechainRegistry }; + sidechainRegistry.setMetadata(sidechainMetaData) + return { sidechainMetaData, sidechainRegistry } } diff --git a/vc-di-tests/integration-tests/common/common-types.ts b/vc-di-tests/integration-tests/common/common-types.ts index 5e29060..b2c6c54 100644 --- a/vc-di-tests/integration-tests/common/common-types.ts +++ b/vc-di-tests/integration-tests/common/common-types.ts @@ -1,47 +1,47 @@ -import { ApiPromise } from '@litentry/parachain-api'; -import { KeyObject } from 'crypto'; -import WebSocketAsPromised from 'websocket-as-promised'; -import { Metadata, TypeRegistry } from '@polkadot/types'; -import { Wallet } from 'ethers'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type { HexString } from '@polkadot/util/types'; -import { ECPairInterface } from 'ecpair'; -import { Keypair } from '@solana/web3.js'; -import { Signer } from './utils/crypto'; +import { ApiPromise } from '@litentry/parachain-api' +import { KeyObject } from 'crypto' +import WebSocketAsPromised from 'websocket-as-promised' +import { Metadata, TypeRegistry } from '@polkadot/types' +import { Wallet } from 'ethers' +import type { KeyringPair } from '@polkadot/keyring/types' +import type { HexString } from '@polkadot/util/types' +import { ECPairInterface } from 'ecpair' +import { Keypair } from '@solana/web3.js' +import { Signer } from './utils/crypto' // If there are types already defined in the client-api, please avoid redefining these types. // Instead, make every effort to use the types that have been generated within the client-api. interface WalletType { - [walletName: string]: Signer; + [walletName: string]: Signer } export interface Wallets { - evm: WalletType; - substrate: WalletType; - bitcoin: WalletType; - solana: WalletType; + evm: WalletType + substrate: WalletType + bitcoin: WalletType + solana: WalletType } export type IntegrationTestContext = { - tee: WebSocketAsPromised; - api: ApiPromise; - teeShieldingKey: KeyObject; - mrEnclave: HexString; - web3Wallets: Wallets; - sidechainMetaData: Metadata; - sidechainRegistry: TypeRegistry; - chainIdentifier: number; - requestId: number; -}; + tee: WebSocketAsPromised + api: ApiPromise + teeShieldingKey: KeyObject + mrEnclave: HexString + web3Wallets: Wallets + sidechainMetaData: Metadata + sidechainRegistry: TypeRegistry + chainIdentifier: number + requestId: number +} export type Web3Wallets = { - substrateWallet: KeyringPair; - evmWallet: Wallet; - bitcoinWallet: ECPairInterface; - solanaWallet: Keypair; -}; + substrateWallet: KeyringPair + evmWallet: Wallet + bitcoinWallet: ECPairInterface + solanaWallet: Keypair +} export type JsonRpcRequest = { - jsonrpc: string; - method: string; - params: any; - id: number; -}; + jsonrpc: string + method: string + params: any + id: number +} diff --git a/vc-di-tests/integration-tests/common/config.js b/vc-di-tests/integration-tests/common/config.js index 3dbb229..71127a5 100644 --- a/vc-di-tests/integration-tests/common/config.js +++ b/vc-di-tests/integration-tests/common/config.js @@ -1,4 +1,4 @@ -import dotenv from 'dotenv'; +import dotenv from 'dotenv' // eslint-disable-next-line @typescript-eslint/no-var-requires, no-undef -dotenv.config({ path: `.env.${process.env.NODE_ENV || 'local'}` }); +dotenv.config({ path: `.env.${process.env.NODE_ENV || 'local'}` }) diff --git a/vc-di-tests/integration-tests/common/credential-json/discord.json b/vc-di-tests/integration-tests/common/credential-json/discord.json index 3f3f28c..65c0b1a 100644 --- a/vc-di-tests/integration-tests/common/credential-json/discord.json +++ b/vc-di-tests/integration-tests/common/credential-json/discord.json @@ -5,7 +5,11 @@ "description": "You have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882", "assertion": { "id": "A3", - "payload": ["807161594245152800", "1093886939746291882", "1088092822592307240"] + "payload": [ + "807161594245152800", + "1093886939746291882", + "1088092822592307240" + ] }, "dataProvider": "discord", "network": "discord", diff --git a/vc-di-tests/integration-tests/common/credential-json/index.ts b/vc-di-tests/integration-tests/common/credential-json/index.ts index a98ef68..a30faac 100644 --- a/vc-di-tests/integration-tests/common/credential-json/index.ts +++ b/vc-di-tests/integration-tests/common/credential-json/index.ts @@ -1,36 +1,50 @@ -import { CorePrimitivesAssertion, CorePrimitivesNetworkWeb3Network } from '@litentry/parachain-api'; -import type { Codec } from '@polkadot/types-codec/types'; -import type { U8aLike } from '@polkadot/util/types'; +import { + CorePrimitivesAssertion, + CorePrimitivesNetworkWeb3Network, +} from '@litentry/parachain-api' +import type { Codec } from '@polkadot/types-codec/types' +import type { U8aLike } from '@polkadot/util/types' -type AssertionGenericPayload = string | Array | Record; +type AssertionGenericPayload = + | string + | Array + | Record -import vip3Json from './vip3.json' assert { type: 'json' }; -import achainableJson from './achainable.json' assert { type: 'json' }; -import noderealJson from './nodereal.json' assert { type: 'json' }; -import discordJson from './discord.json' assert { type: 'json' }; -import litentryJson from './litentry.json' assert { type: 'json' }; -import twitterJson from './twitter.json' assert { type: 'json' }; -import oneblockJson from './oneblock.json' assert { type: 'json' }; -export const vip3 = vip3Json as unknown as CredentialDefinition[]; -export const achainable = achainableJson as unknown as CredentialDefinition[]; -export const nodereal = noderealJson as unknown as CredentialDefinition[]; -export const discord = discordJson as unknown as CredentialDefinition[]; -export const litentry = litentryJson as unknown as CredentialDefinition[]; -export const twitter = twitterJson as unknown as CredentialDefinition[]; -export const oneblock = oneblockJson as unknown as CredentialDefinition[]; -export const credentialsJson = [...vip3, ...achainable, ...nodereal, ...litentry, ...twitter, ...oneblock, ...discord]; +import vip3Json from './vip3.json' assert { type: 'json' } +import achainableJson from './achainable.json' assert { type: 'json' } +import noderealJson from './nodereal.json' assert { type: 'json' } +import discordJson from './discord.json' assert { type: 'json' } +import litentryJson from './litentry.json' assert { type: 'json' } +import twitterJson from './twitter.json' assert { type: 'json' } +import oneblockJson from './oneblock.json' assert { type: 'json' } +export const vip3 = vip3Json as unknown as CredentialDefinition[] +export const achainable = achainableJson as unknown as CredentialDefinition[] +export const nodereal = noderealJson as unknown as CredentialDefinition[] +export const discord = discordJson as unknown as CredentialDefinition[] +export const litentry = litentryJson as unknown as CredentialDefinition[] +export const twitter = twitterJson as unknown as CredentialDefinition[] +export const oneblock = oneblockJson as unknown as CredentialDefinition[] +export const credentialsJson = [ + ...vip3, + ...achainable, + ...nodereal, + ...litentry, + ...twitter, + ...oneblock, + ...discord, +] export interface CredentialDefinition { - id: string; - name: string; - description: string; + id: string + name: string + description: string assertion: { - id: CorePrimitivesAssertion['type']; - payload: AssertionGenericPayload; - }; - dataProvider: string; - network: CorePrimitivesNetworkWeb3Network['type']; - mockDid: string; - mockWeb3Network: string; - expectedCredentialValue: boolean; + id: CorePrimitivesAssertion['type'] + payload: AssertionGenericPayload + } + dataProvider: string + network: CorePrimitivesNetworkWeb3Network['type'] + mockDid: string + mockWeb3Network: string + expectedCredentialValue: boolean } diff --git a/vc-di-tests/integration-tests/common/di-utils.ts b/vc-di-tests/integration-tests/common/di-utils.ts index 97a8cc0..f38c4f9 100644 --- a/vc-di-tests/integration-tests/common/di-utils.ts +++ b/vc-di-tests/integration-tests/common/di-utils.ts @@ -1,9 +1,16 @@ -import { ApiPromise } from '@polkadot/api'; -import { u8aToHex, hexToU8a, compactAddLength, bufferToU8a, u8aConcat, stringToU8a } from '@polkadot/util'; -import { Codec } from '@polkadot/types/types'; -import { TypeRegistry } from '@polkadot/types'; -import { Bytes } from '@polkadot/types-codec'; -import { IntegrationTestContext, JsonRpcRequest } from './common-types'; +import { ApiPromise } from '@polkadot/api' +import { + u8aToHex, + hexToU8a, + compactAddLength, + bufferToU8a, + u8aConcat, + stringToU8a, +} from '@polkadot/util' +import { Codec } from '@polkadot/types/types' +import { TypeRegistry } from '@polkadot/types' +import { Bytes } from '@polkadot/types-codec' +import { IntegrationTestContext, JsonRpcRequest } from './common-types' import type { WorkerRpcReturnValue, TrustedCallSigned, @@ -11,7 +18,7 @@ import type { CorePrimitivesIdentity, TrustedGetterSigned, TrustedCall, -} from '@litentry/parachain-api'; +} from '@litentry/parachain-api' import { encryptWithTeeShieldingKey, Signer, @@ -19,13 +26,17 @@ import { sleep, createLitentryMultiSignature, decryptWithAes, -} from './utils'; -import { aesKey, decodeRpcBytesAsString, keyNonce } from './call'; -import { createPublicKey, KeyObject } from 'crypto'; -import WebSocketAsPromised from 'websocket-as-promised'; -import { H256, Index } from '@polkadot/types/interfaces'; -import { blake2AsHex, base58Encode, blake2AsU8a } from '@polkadot/util-crypto'; -import { createJsonRpcRequest, nextRequestId, stfErrorToString } from './helpers'; +} from './utils' +import { aesKey, decodeRpcBytesAsString, keyNonce } from './call' +import { createPublicKey, KeyObject } from 'crypto' +import WebSocketAsPromised from 'websocket-as-promised' +import { H256, Index } from '@polkadot/types/interfaces' +import { blake2AsHex, base58Encode, blake2AsU8a } from '@polkadot/util-crypto' +import { + createJsonRpcRequest, + nextRequestId, + stfErrorToString, +} from './helpers' // Send the request to worker ws // we should perform different actions based on the returned status: @@ -46,47 +57,57 @@ async function sendRequest( ): Promise { const p = new Promise((resolve, reject) => wsClient.onMessage.addListener((data) => { - const parsed = JSON.parse(data); + const parsed = JSON.parse(data) if (parsed.id !== request.id) { - return; + return } if ('error' in parsed) { - const transaction = { request, response: parsed }; - console.log('Request failed: ' + JSON.stringify(transaction, null, 2)); - reject(new Error(parsed.error.message, { cause: transaction })); + const transaction = { request, response: parsed } + console.log( + 'Request failed: ' + JSON.stringify(transaction, null, 2) + ) + reject(new Error(parsed.error.message, { cause: transaction })) } - const result = parsed.result; - const res = api.createType('WorkerRpcReturnValue', result); + const result = parsed.result + const res = api.createType('WorkerRpcReturnValue', result) if (res.status.isError) { - console.log('Rpc response error: ' + decodeRpcBytesAsString(res.value)); + console.log( + 'Rpc response error: ' + decodeRpcBytesAsString(res.value) + ) } - if (res.status.isTrustedOperationStatus && res.status.asTrustedOperationStatus[0].isInvalid) { - console.log('Rpc trusted operation execution failed, hash: ', res.value.toHex()); - const stfError = api.createType('StfError', res.value); - const msg = stfErrorToString(stfError); - console.log('TrustedOperationStatus error: ', msg); + if ( + res.status.isTrustedOperationStatus && + res.status.asTrustedOperationStatus[0].isInvalid + ) { + console.log( + 'Rpc trusted operation execution failed, hash: ', + res.value.toHex() + ) + const stfError = api.createType('StfError', res.value) + const msg = stfErrorToString(stfError) + console.log('TrustedOperationStatus error: ', msg) } // sending every response we receive from websocket - if (onMessageReceived) onMessageReceived(res); + if (onMessageReceived) onMessageReceived(res) // resolve it once `do_watch` is false, meaning it's the final response if (res.do_watch.isFalse) { // TODO: maybe only remove this listener - wsClient.onMessage.removeAllListeners(); - resolve(res); + wsClient.onMessage.removeAllListeners() + resolve(res) } else { // `do_watch` is true means: hold on - there's still something coming - console.log('do_watch is true, continue watching ...'); + console.log('do_watch is true, continue watching ...') } }) - ); + ) - wsClient.sendRequest(request); - return p; + wsClient.sendRequest(request) + return p } // TrustedCalls are defined in: @@ -106,10 +127,10 @@ export const createSignedTrustedCall = async ( withWrappedBytes = false, withPrefix = false ): Promise => { - const [variant, argType] = trustedCall; + const [variant, argType] = trustedCall const call: TrustedCall = parachainApi.createType('TrustedCall', { [variant]: parachainApi.createType(argType, params), - }); + }) let payload: string = blake2AsHex( u8aConcat( call.toU8a(), @@ -118,47 +139,47 @@ export const createSignedTrustedCall = async ( hexToU8a(mrenclave) // should be shard, but it's the same as MRENCLAVE in our case ), 256 - ); + ) if (withWrappedBytes) { - payload = `${payload}`; + payload = `${payload}` } if (withPrefix) { - const prefix = getSignatureMessagePrefix(call); - const msg = prefix + payload; - payload = msg; - console.log('Signing message: ', payload); + const prefix = getSignatureMessagePrefix(call) + const msg = prefix + payload + payload = msg + console.log('Signing message: ', payload) } const signature = await createLitentryMultiSignature(parachainApi, { signer, payload, - }); + }) return parachainApi.createType('TrustedCallSigned', { call: call, index: nonce, signature: signature, - }); -}; + }) +} // See TrustedCall.signature_message_prefix function getSignatureMessagePrefix(call: TrustedCall): string { if (call.isLinkIdentity) { - return "By linking your identity to our platform, you're taking a step towards a more integrated experience. Please be assured, this process is safe and involves no transactions of your assets. Token: "; + return "By linking your identity to our platform, you're taking a step towards a more integrated experience. Please be assured, this process is safe and involves no transactions of your assets. Token: " } if (call.isRequestBatchVc) { - const [, , assertions] = call.asRequestBatchVc; - const length = assertions.length; + const [, , assertions] = call.asRequestBatchVc + const length = assertions.length return `We are going to help you generate ${length} secure credential${ length > 1 ? 's' : '' - }. Please be assured, this process is safe and involves no transactions of your assets. Token: `; + }. Please be assured, this process is safe and involves no transactions of your assets. Token: ` } - return 'Token: '; + return 'Token: ' } export const createSignedTrustedGetter = async ( @@ -167,31 +188,35 @@ export const createSignedTrustedGetter = async ( signer: Signer, params: any ): Promise => { - const [variant, argType] = trustedGetter; + const [variant, argType] = trustedGetter const getter = parachainApi.createType('TrustedGetter', { [variant]: parachainApi.createType(argType, params), - }); - const payload = blake2AsU8a(getter.toU8a(), 256); + }) + const payload = blake2AsU8a(getter.toU8a(), 256) let signature = await createLitentryMultiSignature(parachainApi, { signer, payload, - }); + }) return parachainApi.createType('TrustedGetterSigned', { getter, signature, - }); -}; + }) +} -export const createPublicGetter = (parachainApi: ApiPromise, publicGetter: [string, string], params: any) => { - const [variant, argType] = publicGetter; +export const createPublicGetter = ( + parachainApi: ApiPromise, + publicGetter: [string, string], + params: any +) => { + const [variant, argType] = publicGetter const getter = parachainApi.createType('PublicGetter', { [variant]: parachainApi.createType(argType, params), - }); + }) - return getter; -}; + return getter +} export async function createSignedTrustedCallLinkIdentity( parachainApi: ApiPromise, @@ -215,10 +240,18 @@ export async function createSignedTrustedCallLinkIdentity( signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, validationData, web3networks, aesKey, hash], + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + identity, + validationData, + web3networks, + aesKey, + hash, + ], options?.withWrappedBytes, options?.withPrefix - ); + ) } export async function createSignedTrustedCallSetIdentityNetworks( @@ -241,8 +274,15 @@ export async function createSignedTrustedCallSetIdentityNetworks( signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, web3networks, aesKey, hash] - ); + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + identity, + web3networks, + aesKey, + hash, + ] + ) } export async function createSignedTrustedCallRequestVc( @@ -258,14 +298,23 @@ export async function createSignedTrustedCallRequestVc( ) { return await createSignedTrustedCall( parachainApi, - ['request_vc', '(LitentryIdentity, LitentryIdentity, Assertion, Option, H256)'], + [ + 'request_vc', + '(LitentryIdentity, LitentryIdentity, Assertion, Option, H256)', + ], signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), assertion, aesKey, hash], + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + assertion, + aesKey, + hash, + ], options?.withWrappedBytes, options?.withPrefix - ); + ) } export async function createSignedTrustedCallRequestBatchVc( @@ -288,10 +337,16 @@ export async function createSignedTrustedCallRequestBatchVc( signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), assertion, aesKey, hash], + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + assertion, + aesKey, + hash, + ], options?.withWrappedBytes, options?.withPrefix - ); + ) } export async function createSignedTrustedCallDeactivateIdentity( @@ -306,12 +361,21 @@ export async function createSignedTrustedCallDeactivateIdentity( ) { return createSignedTrustedCall( parachainApi, - ['deactivate_identity', '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)'], + [ + 'deactivate_identity', + '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)', + ], signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, aesKey, hash] - ); + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + identity, + aesKey, + hash, + ] + ) } export async function createSignedTrustedCallActivateIdentity( parachainApi: ApiPromise, @@ -325,12 +389,21 @@ export async function createSignedTrustedCallActivateIdentity( ) { return createSignedTrustedCall( parachainApi, - ['activate_identity', '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)'], + [ + 'activate_identity', + '(LitentryIdentity, LitentryIdentity, LitentryIdentity, Option, H256)', + ], signer, mrenclave, nonce, - [primeIdentity.toHuman(), primeIdentity.toHuman(), identity, aesKey, hash] - ); + [ + primeIdentity.toHuman(), + primeIdentity.toHuman(), + identity, + aesKey, + hash, + ] + ) } export async function createSignedTrustedGetterIdGraph( @@ -343,8 +416,8 @@ export async function createSignedTrustedGetterIdGraph( ['id_graph', '(LitentryIdentity)'], signer, primeIdentity.toHuman() - ); - return parachainApi.createType('Getter', { trusted: getterSigned }); + ) + return parachainApi.createType('Getter', { trusted: getterSigned }) } export const getSidechainNonce = async ( @@ -355,17 +428,22 @@ export const getSidechainNonce = async ( 'author_getNextNonce', [base58Encode(hexToU8a(context.mrEnclave)), primeIdentity.toHex()], nextRequestId(context) - ); - const res = await sendRequest(context.tee, request, context.api); - const nonceHex = res.value.toHex(); - let nonce = 0; + ) + const res = await sendRequest(context.tee, request, context.api) + const nonceHex = res.value.toHex() + let nonce = 0 if (nonceHex) { - nonce = context.api.createType('Index', '0x' + nonceHex.slice(2)?.match(/../g)?.reverse().join('')).toNumber(); + nonce = context.api + .createType( + 'Index', + '0x' + nonceHex.slice(2)?.match(/../g)?.reverse().join('') + ) + .toNumber() } - return context.api.createType('Index', nonce); -}; + return context.api.createType('Index', nonce) +} export const getIdGraphHash = async ( context: IntegrationTestContext, @@ -376,12 +454,14 @@ export const getIdGraphHash = async ( context.api, ['id_graph_hash', '(LitentryIdentity)'], primeIdentity.toHuman() - ); - const getter = context.api.createType('Getter', { public: getterPublic }); - const res = await sendRsaRequestFromGetter(context, teeShieldingKey, getter); - const hash = context.api.createType('Option', hexToU8a(res.value.toHex())).unwrap(); - return context.api.createType('H256', hash); -}; + ) + const getter = context.api.createType('Getter', { public: getterPublic }) + const res = await sendRsaRequestFromGetter(context, teeShieldingKey, getter) + const hash = context.api + .createType('Option', hexToU8a(res.value.toHex())) + .unwrap() + return context.api.createType('H256', hash) +} export const sendRequestFromTrustedCall = async ( context: IntegrationTestContext, @@ -391,8 +471,13 @@ export const sendRequestFromTrustedCall = async ( onMessageReceived?: (res: WorkerRpcReturnValue) => void ) => { // construct trusted operation - const trustedOperation = context.api.createType('TrustedOperation', { direct_call: call }); - console.log('trustedOperation: ', JSON.stringify(trustedOperation.toHuman(), null, 2)); + const trustedOperation = context.api.createType('TrustedOperation', { + direct_call: call, + }) + console.log( + 'trustedOperation: ', + JSON.stringify(trustedOperation.toHuman(), null, 2) + ) // create the request parameter const requestParam = await createAesRequest( context.api, @@ -400,14 +485,14 @@ export const sendRequestFromTrustedCall = async ( teeShieldingKey, hexToU8a(aesKey), trustedOperation.toU8a() - ); + ) const request = createJsonRpcRequest( isVcDirect ? 'author_requestVc' : 'author_submitAndWatchAesRequest', [u8aToHex(requestParam)], nextRequestId(context) - ); - return sendRequest(context.tee, request, context.api, onMessageReceived); -}; + ) + return sendRequest(context.tee, request, context.api, onMessageReceived) +} /** @deprecated use `sendAesRequestFromGetter` instead */ export const sendRsaRequestFromGetter = async ( @@ -417,13 +502,23 @@ export const sendRsaRequestFromGetter = async ( ): Promise => { // important: we don't create the `TrustedOperation` type here, but use `Getter` type directly // this is what `state_executeGetter` expects in rust - const requestParam = await createRsaRequest(context.api, context.mrEnclave, teeShieldingKey, true, getter.toU8a()); - const request = createJsonRpcRequest('state_executeGetter', [u8aToHex(requestParam)], nextRequestId(context)); + const requestParam = await createRsaRequest( + context.api, + context.mrEnclave, + teeShieldingKey, + true, + getter.toU8a() + ) + const request = createJsonRpcRequest( + 'state_executeGetter', + [u8aToHex(requestParam)], + nextRequestId(context) + ) // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec // hopefully we will query correct state - await sleep(1); - return sendRequest(context.tee, request, context.api); -}; + await sleep(1) + return sendRequest(context.tee, request, context.api) +} export const sendAesRequestFromGetter = async ( context: IntegrationTestContext, @@ -439,30 +534,38 @@ export const sendAesRequestFromGetter = async ( teeShieldingKey, aesKey, getter.toU8a() - ); - const request = createJsonRpcRequest('state_executeAesGetter', [u8aToHex(requestParam)], nextRequestId(context)); + ) + const request = createJsonRpcRequest( + 'state_executeAesGetter', + [u8aToHex(requestParam)], + nextRequestId(context) + ) // in multiworker setup in some cases state might not be immediately propagated to other nodes so we wait 1 sec // hopefully we will query correct state - await sleep(1); - const res = await sendRequest(context.tee, request, context.api); - const aesOutput = context.api.createType('AesOutput', res.value); - const decryptedValue = decryptWithAes(u8aToHex(aesKey), aesOutput, 'hex'); + await sleep(1) + const res = await sendRequest(context.tee, request, context.api) + const aesOutput = context.api.createType('AesOutput', res.value) + const decryptedValue = decryptWithAes(u8aToHex(aesKey), aesOutput, 'hex') return context.api.createType('WorkerRpcReturnValue', { value: decryptedValue, do_watch: res.do_watch, status: res.status, - }); -}; + }) +} // get TEE's shielding key directly via RPC export const getTeeShieldingKey = async (context: IntegrationTestContext) => { - const request = createJsonRpcRequest('author_getShieldingKey', Uint8Array.from([]), nextRequestId(context)); - const res = await sendRequest(context.tee, request, context.api); + const request = createJsonRpcRequest( + 'author_getShieldingKey', + Uint8Array.from([]), + nextRequestId(context) + ) + const res = await sendRequest(context.tee, request, context.api) const k = JSON.parse(decodeRpcBytesAsString(res.value)) as { - n: Uint8Array; - e: Uint8Array; - }; + n: Uint8Array + e: Uint8Array + } return createPublicKey({ key: { @@ -473,8 +576,8 @@ export const getTeeShieldingKey = async (context: IntegrationTestContext) => { e: Buffer.from(k.e.reverse()).toString('base64url'), }, format: 'jwk', - }); -}; + }) +} // given an encoded trusted operation, construct a rsa request bytes that are sent in RPC request parameters export const createRsaRequest = async ( @@ -484,15 +587,19 @@ export const createRsaRequest = async ( isGetter: boolean, top: Uint8Array ) => { - let payload; + let payload if (isGetter) { - payload = compactAddLength(top); + payload = compactAddLength(top) } else { - payload = compactAddLength(bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, top))); + payload = compactAddLength( + bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, top)) + ) } - return parachainApi.createType('RsaRequest', { shard: hexToU8a(mrenclave), payload }).toU8a(); -}; + return parachainApi + .createType('RsaRequest', { shard: hexToU8a(mrenclave), payload }) + .toU8a() +} // given an encoded trusted operation, construct an aes request bytes that are sent in RPC request parameters export const createAesRequest = async ( @@ -502,7 +609,9 @@ export const createAesRequest = async ( aesKey: Uint8Array, top: Uint8Array ) => { - const encryptedAesKey = compactAddLength(bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, aesKey))); + const encryptedAesKey = compactAddLength( + bufferToU8a(encryptWithTeeShieldingKey(teeShieldingKey, aesKey)) + ) return parachainApi .createType('AesRequest', { shard: hexToU8a(mrenclave), @@ -510,25 +619,36 @@ export const createAesRequest = async ( payload: parachainApi .createType('AesOutput', { ciphertext: compactAddLength( - hexToU8a(encryptWithAes(u8aToHex(aesKey), hexToU8a(keyNonce), Buffer.from(top))) + hexToU8a( + encryptWithAes( + u8aToHex(aesKey), + hexToU8a(keyNonce), + Buffer.from(top) + ) + ) ), aad: hexToU8a('0x'), nonce: hexToU8a(keyNonce), }) .toU8a(), }) - .toU8a(); -}; + .toU8a() +} export function decodeIdGraph(sidechainRegistry: TypeRegistry, value: Bytes) { - const idgraphBytes = sidechainRegistry.createType('Option', hexToU8a(value.toHex())); + const idgraphBytes = sidechainRegistry.createType( + 'Option', + hexToU8a(value.toHex()) + ) return sidechainRegistry.createType( 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', idgraphBytes.unwrap() - ); + ) } export function getTopHash(parachainApi: ApiPromise, call: TrustedCallSigned) { - const trustedOperation = parachainApi.createType('TrustedOperation', { direct_call: call }); - return blake2AsHex(trustedOperation.toU8a()); + const trustedOperation = parachainApi.createType('TrustedOperation', { + direct_call: call, + }) + return blake2AsHex(trustedOperation.toU8a()) } diff --git a/vc-di-tests/integration-tests/common/helpers.ts b/vc-di-tests/integration-tests/common/helpers.ts index cc0dc6d..6b526df 100644 --- a/vc-di-tests/integration-tests/common/helpers.ts +++ b/vc-di-tests/integration-tests/common/helpers.ts @@ -1,71 +1,80 @@ -import { xxhashAsU8a, blake2AsU8a } from '@polkadot/util-crypto'; -import { u8aConcat, u8aToU8a } from '@polkadot/util'; -import { Keyring } from '@polkadot/api'; -import type { KeyringPair } from '@polkadot/keyring/types'; -import type { HexString } from '@polkadot/util/types'; -import './config'; -import { IntegrationTestContext, JsonRpcRequest } from './common-types'; -import { createHash, randomBytes } from 'crypto'; -import { ECPairFactory, ECPairInterface } from 'ecpair'; -import * as ecc from 'tiny-secp256k1'; -import { ethers, Wallet } from 'ethers'; -import { Keypair } from '@solana/web3.js'; -import { EthersSigner, PolkadotSigner, BitcoinSigner, SolanaSigner } from './utils/crypto'; -import { Wallets } from './common-types'; -import type { ErrorDetail, StfError } from '@litentry/parachain-api'; +import { xxhashAsU8a, blake2AsU8a } from '@polkadot/util-crypto' +import { u8aConcat, u8aToU8a } from '@polkadot/util' +import { Keyring } from '@polkadot/api' +import type { KeyringPair } from '@polkadot/keyring/types' +import type { HexString } from '@polkadot/util/types' +import './config' +import { IntegrationTestContext, JsonRpcRequest } from './common-types' +import { createHash, randomBytes } from 'crypto' +import { ECPairFactory, ECPairInterface } from 'ecpair' +import * as ecc from 'tiny-secp256k1' +import { ethers, Wallet } from 'ethers' +import { Keypair } from '@solana/web3.js' +import { + EthersSigner, + PolkadotSigner, + BitcoinSigner, + SolanaSigner, +} from './utils/crypto' +import { Wallets } from './common-types' +import type { ErrorDetail, StfError } from '@litentry/parachain-api' export function blake2128Concat(data: HexString | Uint8Array): Uint8Array { - return u8aConcat(blake2AsU8a(data, 128), u8aToU8a(data)); + return u8aConcat(blake2AsU8a(data, 128), u8aToU8a(data)) } export function twox64Concat(data: HexString | Uint8Array): Uint8Array { - return u8aConcat(xxhashAsU8a(data, 64), u8aToU8a(data)); + return u8aConcat(xxhashAsU8a(data, 64), u8aToU8a(data)) } export function identity(data: HexString | Uint8Array): Uint8Array { - return u8aToU8a(data); + return u8aToU8a(data) } -export function createJsonRpcRequest(method: string, params: any, id: number): JsonRpcRequest { +export function createJsonRpcRequest( + method: string, + params: any, + id: number +): JsonRpcRequest { return { jsonrpc: '2.0', method, params, id, - }; + } } export function nextRequestId(context: IntegrationTestContext): number { - const nextId = context.requestId + 1; - context.requestId = nextId; - return nextId; + const nextId = context.requestId + 1 + context.requestId = nextId + return nextId } export function randomEvmWallet(): Wallet { - return ethers.Wallet.createRandom(); + return ethers.Wallet.createRandom() } export function randomSubstrateWallet(): KeyringPair { - const keyring = new Keyring({ type: 'sr25519' }); - return keyring.addFromSeed(randomBytes(32)); + const keyring = new Keyring({ type: 'sr25519' }) + return keyring.addFromSeed(randomBytes(32)) } export function randomBitcoinWallet(): ECPairInterface { - const ecPair = ECPairFactory(ecc); - const keyPair = ecPair.makeRandom(); - return keyPair; + const ecPair = ECPairFactory(ecc) + const keyPair = ecPair.makeRandom() + return keyPair } export function genesisSubstrateWallet(name: string): KeyringPair { - const keyring = new Keyring({ type: 'sr25519' }); - const keyPair = keyring.addFromUri(`//${name}`, { name }); - return keyPair; + const keyring = new Keyring({ type: 'sr25519' }) + const keyPair = keyring.addFromUri(`//${name}`, { name }) + return keyPair } export function genesisSolanaWallet(name: string): Keypair { - let seed = createHash('sha256').update(name).digest(); - seed = seed.subarray(0, 32); - const keyPair = Keypair.fromSeed(seed); - return keyPair; + let seed = createHash('sha256').update(name).digest() + seed = seed.subarray(0, 32) + const keyPair = Keypair.fromSeed(seed) + return keyPair } export const createWeb3Wallets = (): Wallets => { @@ -74,23 +83,25 @@ export const createWeb3Wallets = (): Wallets => { substrate: {}, bitcoin: {}, solana: {}, - }; - const walletNames = ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve']; + } + const walletNames = ['Alice', 'Bob', 'Charlie', 'Dave', 'Eve'] for (const name of walletNames) { - wallets.evm[name] = new EthersSigner(randomEvmWallet()); - wallets.substrate[name] = new PolkadotSigner(genesisSubstrateWallet(name)); - wallets.bitcoin[name] = new BitcoinSigner(randomBitcoinWallet()); - wallets.solana[name] = new SolanaSigner(genesisSolanaWallet(name)); + wallets.evm[name] = new EthersSigner(randomEvmWallet()) + wallets.substrate[name] = new PolkadotSigner( + genesisSubstrateWallet(name) + ) + wallets.bitcoin[name] = new BitcoinSigner(randomBitcoinWallet()) + wallets.solana[name] = new SolanaSigner(genesisSolanaWallet(name)) } - return wallets; -}; + return wallets +} export function stfErrorToString(stfError: StfError): string { if (stfError.isRequestVCFailed) { - const [_assertionIgnored, errorDetail] = stfError.asRequestVCFailed; + const [_assertionIgnored, errorDetail] = stfError.asRequestVCFailed - return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}`; + return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}` } if ( @@ -102,16 +113,16 @@ export function stfErrorToString(stfError: StfError): string { stfError.isRemoveIdentityFailed || stfError.isDispatch ) { - const errorDetail = stfError.value as ErrorDetail; + const errorDetail = stfError.value as ErrorDetail - return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}`; + return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}` } if (stfError.isInvalidNonce) { - const [nonce1, nonce2] = stfError.asInvalidNonce; + const [nonce1, nonce2] = stfError.asInvalidNonce - return `${stfError.type}: [${nonce1?.toHuman()}, ${nonce2?.toHuman()}]`; + return `${stfError.type}: [${nonce1?.toHuman()}, ${nonce2?.toHuman()}]` } - return stfError.type; + return stfError.type } diff --git a/vc-di-tests/integration-tests/common/transactions.ts b/vc-di-tests/integration-tests/common/transactions.ts index b8ee954..bb2f002 100644 --- a/vc-di-tests/integration-tests/common/transactions.ts +++ b/vc-di-tests/integration-tests/common/transactions.ts @@ -1,5 +1,5 @@ -import { hexToU8a } from '@polkadot/util'; -import type { IntegrationTestContext } from './common-types'; +import { hexToU8a } from '@polkadot/util' +import type { IntegrationTestContext } from './common-types' import { AddressOrPair, @@ -8,7 +8,7 @@ import { FrameSystemEventRecord, Keyring, SubmittableExtrinsic, -} from '@litentry/parachain-api'; +} from '@litentry/parachain-api' // for DI-test export const subscribeToEventsWithExtHash = async ( @@ -16,7 +16,7 @@ export const subscribeToEventsWithExtHash = async ( context: IntegrationTestContext ): Promise => { return new Promise((resolve, reject) => { - let blocksToScan = 30; + let blocksToScan = 30 /* WARNING:The unsubscribe function is called inside the Promise callback, which is executed each time a new blockHeader is received. `unsubscribe` is intended to unsubscribe a blockHeader if certain conditions are met. @@ -24,36 +24,46 @@ export const subscribeToEventsWithExtHash = async ( However, since it doesn't return a Promise, using await doesn't make sense and can lead to problematic code behaviour. soooooo, don't use await here */ - const unsubscribe = context.api.rpc.chain.subscribeNewHeads(async (blockHeader) => { - const shiftedApi = await context.api.at(blockHeader.hash); - - const allBlockEvents = await shiftedApi.query.system.events(); - const allExtrinsicEvents = allBlockEvents.filter(({ phase }) => phase.isApplyExtrinsic); - - const matchingEvent = allExtrinsicEvents.filter((eventRecord) => { - const eventData = eventRecord.event.data.toHuman(); - return ( - eventData != undefined && - typeof eventData === 'object' && - 'reqExtHash' in eventData && - eventData.reqExtHash === requestIdentifier - ); - }); - - if (matchingEvent.length == 0) { - blocksToScan -= 1; - if (blocksToScan < 1) { - reject(new Error(`timed out listening for reqExtHash: ${requestIdentifier} in parachain events`)); - (await unsubscribe)(); + const unsubscribe = context.api.rpc.chain.subscribeNewHeads( + async (blockHeader) => { + const shiftedApi = await context.api.at(blockHeader.hash) + + const allBlockEvents = await shiftedApi.query.system.events() + const allExtrinsicEvents = allBlockEvents.filter( + ({ phase }) => phase.isApplyExtrinsic + ) + + const matchingEvent = allExtrinsicEvents.filter( + (eventRecord) => { + const eventData = eventRecord.event.data.toHuman() + return ( + eventData != undefined && + typeof eventData === 'object' && + 'reqExtHash' in eventData && + eventData.reqExtHash === requestIdentifier + ) + } + ) + + if (matchingEvent.length == 0) { + blocksToScan -= 1 + if (blocksToScan < 1) { + reject( + new Error( + `timed out listening for reqExtHash: ${requestIdentifier} in parachain events` + ) + ) + ;(await unsubscribe)() + } + return } - return; - } - resolve(matchingEvent); - (await unsubscribe)(); - }); - }); -}; + resolve(matchingEvent) + ;(await unsubscribe)() + } + ) + }) +} // for II-test export const subscribeToEvents = async ( @@ -62,79 +72,111 @@ export const subscribeToEvents = async ( api: ApiPromise ): Promise => { return new Promise((resolve, reject) => { - let blocksToScan = 15; - const unsubscribe = api.rpc.chain.subscribeNewHeads(async (blockHeader) => { - const shiftedApi = await api.at(blockHeader.hash); - - const allBlockEvents = await shiftedApi.query.system.events(); - const allExtrinsicEvents = allBlockEvents.filter(({ phase }) => phase.isApplyExtrinsic); - - const matchingEvent = allExtrinsicEvents.filter(({ event, phase }) => { - return event.section === section && event.method === method; - }); - - if (matchingEvent.length == 0) { - blocksToScan -= 1; - if (blocksToScan < 1) { - reject(new Error(`timed out listening for event ${section}.${method}`)); - (await unsubscribe)(); + let blocksToScan = 15 + const unsubscribe = api.rpc.chain.subscribeNewHeads( + async (blockHeader) => { + const shiftedApi = await api.at(blockHeader.hash) + + const allBlockEvents = await shiftedApi.query.system.events() + const allExtrinsicEvents = allBlockEvents.filter( + ({ phase }) => phase.isApplyExtrinsic + ) + + const matchingEvent = allExtrinsicEvents.filter( + ({ event, phase }) => { + return ( + event.section === section && event.method === method + ) + } + ) + + if (matchingEvent.length == 0) { + blocksToScan -= 1 + if (blocksToScan < 1) { + reject( + new Error( + `timed out listening for event ${section}.${method}` + ) + ) + ;(await unsubscribe)() + } + return } - return; - } - resolve(matchingEvent); - (await unsubscribe)(); - }); - }); -}; + resolve(matchingEvent) + ;(await unsubscribe)() + } + ) + }) +} -export async function waitForBlock(api: ApiPromise, blockNumber: number, blocksToCheck = 5) { - let count = 0; +export async function waitForBlock( + api: ApiPromise, + blockNumber: number, + blocksToCheck = 5 +) { + let count = 0 return new Promise((resolve, reject) => { const unsubscribe = api.rpc.chain.subscribeNewHeads(async (header) => { - console.log(`Chain is at block: #${header.number}`); + console.log(`Chain is at block: #${header.number}`) if (header.number.toNumber() === blockNumber) { - (await unsubscribe)(); - resolve(); + ;(await unsubscribe)() + resolve() } if (++count === blocksToCheck) { - (await unsubscribe)(); - reject(new Error(`Timeout: Block #${blockNumber} not reached within ${blocksToCheck} blocks.`)); + ;(await unsubscribe)() + reject( + new Error( + `Timeout: Block #${blockNumber} not reached within ${blocksToCheck} blocks.` + ) + ) } - }); - }); + }) + }) } export async function setAliceAsAdmin(api: ApiPromise) { // Get keyring of Alice, who is also the sudo in dev chain spec - const keyring = new Keyring({ type: 'sr25519' }); - const alice = keyring.addFromUri('//Alice'); - - const tx = await sudoWrapperGC(api, api.tx.teebag.setAdmin('esqZdrqhgH8zy1wqYh1aLKoRyoRWLFbX9M62eKfaTAoK67pJ5')); - - console.log(`Setting Alice as Admin for Teebag`); - return signAndSend(tx, alice); + const keyring = new Keyring({ type: 'sr25519' }) + const alice = keyring.addFromUri('//Alice') + + const tx = await sudoWrapperGC( + api, + api.tx.teebag.setAdmin( + 'esqZdrqhgH8zy1wqYh1aLKoRyoRWLFbX9M62eKfaTAoK67pJ5' + ) + ) + + console.log(`Setting Alice as Admin for Teebag`) + return signAndSend(tx, alice) } -export function signAndSend(tx: SubmittableExtrinsic, account: AddressOrPair) { +export function signAndSend( + tx: SubmittableExtrinsic, + account: AddressOrPair +) { return new Promise<{ block: string }>(async (resolve, reject) => { await tx.signAndSend(account, (result) => { - console.log(`Current status is ${result.status}`); + console.log(`Current status is ${result.status}`) if (result.status.isInBlock) { - console.log(`Transaction included at blockHash ${result.status.asInBlock}`); + console.log( + `Transaction included at blockHash ${result.status.asInBlock}` + ) } else if (result.status.isFinalized) { - console.log(`Transaction finalized at blockHash ${result.status.asFinalized}`); + console.log( + `Transaction finalized at blockHash ${result.status.asFinalized}` + ) resolve({ block: result.status.asFinalized.toString(), - }); + }) } else if (result.status.isInvalid) { - reject(`Transaction is ${result.status}`); + reject(`Transaction is ${result.status}`) } - }); - }); + }) + }) } // After removing the sudo module, we use `EnsureRootOrHalfCouncil` instead of `Sudo`, @@ -142,23 +184,38 @@ export function signAndSend(tx: SubmittableExtrinsic, account: Address // So only `propose` is required, no vote. // // TODO: support to send the `vote extrinsic`, if the number of council members is greater than 2. -export async function sudoWrapperGC(api: ApiPromise, tx: SubmittableExtrinsic) { - const chain = (await api.rpc.system.chain()).toString().toLowerCase(); +export async function sudoWrapperGC( + api: ApiPromise, + tx: SubmittableExtrinsic +) { + const chain = (await api.rpc.system.chain()).toString().toLowerCase() if (chain != 'rococo-dev') { - const threshold = api.createType('Compact', 1); - const call = api.createType('Call', tx); - return api.tx.council.propose(threshold, call, api.createType('Compact', tx.length)); + const threshold = api.createType('Compact', 1) + const call = api.createType('Call', tx) + return api.tx.council.propose( + threshold, + call, + api.createType('Compact', tx.length) + ) } else { - return api.tx.sudo.sudo(tx); + return api.tx.sudo.sudo(tx) } } -export async function setScheduledEnclave(api: ApiPromise, block: number, mrenclave: string) { - const keyring = new Keyring({ type: 'sr25519' }); - const alice = keyring.addFromUri('//Alice'); - - const tx = api.tx.teebag.setScheduledEnclave('Identity', block, hexToU8a(`0x${mrenclave}`)); - - console.log('Schedule Enclave Extrinsic sent'); - return signAndSend(tx, alice); +export async function setScheduledEnclave( + api: ApiPromise, + block: number, + mrenclave: string +) { + const keyring = new Keyring({ type: 'sr25519' }) + const alice = keyring.addFromUri('//Alice') + + const tx = api.tx.teebag.setScheduledEnclave( + 'Identity', + block, + hexToU8a(`0x${mrenclave}`) + ) + + console.log('Schedule Enclave Extrinsic sent') + return signAndSend(tx, alice) } diff --git a/vc-di-tests/integration-tests/common/utils/assertion.ts b/vc-di-tests/integration-tests/common/utils/assertion.ts index fd2bf0a..5e2e684 100644 --- a/vc-di-tests/integration-tests/common/utils/assertion.ts +++ b/vc-di-tests/integration-tests/common/utils/assertion.ts @@ -1,53 +1,66 @@ -import { hexToU8a, u8aToHex } from '@polkadot/util'; -import { assert } from 'chai'; -import * as ed from '@noble/ed25519'; -import { parseIdGraph } from './identity-helper'; -import { CorePrimitivesIdentity } from '@litentry/parachain-api'; -import type { IntegrationTestContext } from '../common-types'; -import { getIdGraphHash } from '../di-utils'; -import type { HexString } from '@polkadot/util/types'; -import { aesKey } from '../call'; -import colors from 'colors'; -import { WorkerRpcReturnValue, StfError } from '@litentry/parachain-api'; -import { Bytes } from '@polkadot/types-codec'; -import { decryptWithAes } from './crypto'; -import { blake2AsHex } from '@polkadot/util-crypto'; -import { validateVcSchema } from '@litentry/vc-schema-validator'; -import { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; -import { KeyObject } from 'crypto'; -import * as base58 from 'micro-base58'; -import { fail } from 'assert'; +import { hexToU8a, u8aToHex } from '@polkadot/util' +import { assert } from 'chai' +import * as ed from '@noble/ed25519' +import { parseIdGraph } from './identity-helper' +import { CorePrimitivesIdentity } from '@litentry/parachain-api' +import type { IntegrationTestContext } from '../common-types' +import { getIdGraphHash } from '../di-utils' +import type { HexString } from '@polkadot/util/types' +import { aesKey } from '../call' +import colors from 'colors' +import { WorkerRpcReturnValue, StfError } from '@litentry/parachain-api' +import { Bytes } from '@polkadot/types-codec' +import { decryptWithAes } from './crypto' +import { blake2AsHex } from '@polkadot/util-crypto' +import { validateVcSchema } from '@litentry/vc-schema-validator' +import { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api' +import { KeyObject } from 'crypto' +import * as base58 from 'micro-base58' +import { fail } from 'assert' export function assertIdGraph( - actual: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][], + actual: [ + CorePrimitivesIdentity, + PalletIdentityManagementTeeIdentityContext, + ][], expected: [CorePrimitivesIdentity, boolean][] ) { - assert.equal(actual.length, expected.length); + assert.equal(actual.length, expected.length) expected.forEach((expected, i) => { assert.deepEqual( actual[i][0].toJSON(), expected[0].toJSON(), 'event idGraph identity should be equal expectedIdentity' - ); - - const idGraphContext = actual[0][1]; - assert.isTrue(idGraphContext.linkBlock.toNumber() > 0, 'link_block should be greater than 0'); - assert.equal(idGraphContext.status.isActive, expected[1], 'isActive should be ' + expected[1]); - }); + ) + + const idGraphContext = actual[0][1] + assert.isTrue( + idGraphContext.linkBlock.toNumber() > 0, + 'link_block should be greater than 0' + ) + assert.equal( + idGraphContext.status.isActive, + expected[1], + 'isActive should be ' + expected[1] + ) + }) } -export async function assertIsInSidechainBlock(callType: string, res: WorkerRpcReturnValue) { +export async function assertIsInSidechainBlock( + callType: string, + res: WorkerRpcReturnValue +) { assert.isTrue( res.status.isTrustedOperationStatus, `${callType} should be trusted operation status, but is ${res.status.type}` - ); - const status = res.status.asTrustedOperationStatus; - console.log(res.toHuman()); + ) + const status = res.status.asTrustedOperationStatus + console.log(res.toHuman()) assert.isTrue( status[0].isSubmitted || status[0].isInSidechainBlock, `${callType} should be submitted or in sidechain block, but is ${status[0].type}` - ); + ) } export function assertWorkerError( @@ -55,8 +68,11 @@ export function assertWorkerError( check: (returnValue: StfError) => void, returnValue: WorkerRpcReturnValue ) { - const errValueDecoded = context.api.createType('StfError', returnValue.value); - check(errValueDecoded); + const errValueDecoded = context.api.createType( + 'StfError', + returnValue.value + ) + check(errValueDecoded) } // a common assertion for all DI requests that might mutate the IdGraph @@ -73,23 +89,36 @@ export async function assertIdGraphMutationResult( | 'SetIdentityNetworksResult', expectedIdGraph: [CorePrimitivesIdentity, boolean][] ): Promise { - const decodedResult = context.api.createType(resultType, returnValue.value); - assert.isNotNull(decodedResult.mutated_id_graph); - const idGraph = parseIdGraph(context.sidechainRegistry, decodedResult.mutated_id_graph, aesKey); - assertIdGraph(idGraph, expectedIdGraph); - const queriedIdGraphHash = (await getIdGraphHash(context, teeShieldingKey, identity)).toHex(); - assert.equal(u8aToHex(decodedResult.id_graph_hash), queriedIdGraphHash); - - console.log(colors.green('assertIdGraphMutationResult passed')); - return u8aToHex(decodedResult.id_graph_hash); + const decodedResult = context.api.createType(resultType, returnValue.value) + assert.isNotNull(decodedResult.mutated_id_graph) + const idGraph = parseIdGraph( + context.sidechainRegistry, + decodedResult.mutated_id_graph, + aesKey + ) + assertIdGraph(idGraph, expectedIdGraph) + const queriedIdGraphHash = ( + await getIdGraphHash(context, teeShieldingKey, identity) + ).toHex() + assert.equal(u8aToHex(decodedResult.id_graph_hash), queriedIdGraphHash) + + console.log(colors.green('assertIdGraphMutationResult passed')) + return u8aToHex(decodedResult.id_graph_hash) } -export async function assertVc(context: IntegrationTestContext, subject: CorePrimitivesIdentity, data: Bytes) { - const results = context.api.createType('RequestVCResult', data); +export async function assertVc( + context: IntegrationTestContext, + subject: CorePrimitivesIdentity, + data: Bytes +) { + const results = context.api.createType('RequestVCResult', data) // step 1 // decryptWithAes function added 0x prefix - const vcPayload = results.vc_payload; - const decryptVcPayload = decryptWithAes(aesKey, vcPayload, 'utf-8').replace('0x', ''); + const vcPayload = results.vc_payload + const decryptVcPayload = decryptWithAes(aesKey, vcPayload, 'utf-8').replace( + '0x', + '' + ) /* DID format did:litentry:substrate:0x12345... @@ -99,50 +128,62 @@ export async function assertVc(context: IntegrationTestContext, subject: CorePri // step 2 // check credential subject's DID - const credentialSubjectId = JSON.parse(decryptVcPayload).credentialSubject.id; - const expectSubject = Object.entries(JSON.parse(subject.toString())); + const credentialSubjectId = + JSON.parse(decryptVcPayload).credentialSubject.id + const expectSubject = Object.entries(JSON.parse(subject.toString())) // step 3 // convert to DID format - const expectDid = 'did:litentry:' + expectSubject[0][0] + ':' + expectSubject[0][1]; + const expectDid = + 'did:litentry:' + expectSubject[0][0] + ':' + expectSubject[0][1] assert.equal( expectDid, credentialSubjectId, 'Check credentialSubject error: expectDid should be equal to credentialSubject id' - ); + ) // step 4 // extrac proof and vc without proof json - const vcPayloadJson = JSON.parse(decryptVcPayload); - console.log('credential: ', JSON.stringify(vcPayloadJson, null, 2)); - const { proof, ...vcWithoutProof } = vcPayloadJson; + const vcPayloadJson = JSON.parse(decryptVcPayload) + console.log('credential: ', JSON.stringify(vcPayloadJson, null, 2)) + const { proof, ...vcWithoutProof } = vcPayloadJson // step 5 // check vc signature - const signature = Buffer.from(hexToU8a(`0x${proof.proofValue}`)); - const message = Buffer.from(JSON.stringify(vcWithoutProof)); - const vcPubkey = Buffer.from(hexToU8a(proof.verificationMethod)); - const signatureStatus = await ed.verify(signature, message, vcPubkey); - assert.isTrue(signatureStatus, 'Check Vc signature error: signature should be valid'); + const signature = Buffer.from(hexToU8a(`0x${proof.proofValue}`)) + const message = Buffer.from(JSON.stringify(vcWithoutProof)) + const vcPubkey = Buffer.from(hexToU8a(proof.verificationMethod)) + const signatureStatus = await ed.verify(signature, message, vcPubkey) + assert.isTrue( + signatureStatus, + 'Check Vc signature error: signature should be valid' + ) // step 6 // lookup the teebag enclave regsitry to check mrenclave and vcPubkey - const parachainBlockHash = await context.api.query.system.blockHash(vcPayloadJson.parachainBlockNumber); - const apiAtVcIssuedBlock = await context.api.at(parachainBlockHash); - const enclaveAccount = trimPrefix(vcPayloadJson.issuer.id, 'did:litentry:substrate:'); - const registeredEnclave = (await apiAtVcIssuedBlock.query.teebag.enclaveRegistry(enclaveAccount)).unwrap(); + const parachainBlockHash = await context.api.query.system.blockHash( + vcPayloadJson.parachainBlockNumber + ) + const apiAtVcIssuedBlock = await context.api.at(parachainBlockHash) + const enclaveAccount = trimPrefix( + vcPayloadJson.issuer.id, + 'did:litentry:substrate:' + ) + const registeredEnclave = ( + await apiAtVcIssuedBlock.query.teebag.enclaveRegistry(enclaveAccount) + ).unwrap() assert.equal( vcPayloadJson.issuer.mrenclave, base58.encode(registeredEnclave.mrenclave), "Check VC mrenclave: it should equal enclave's mrenclave from parachains enclave registry" - ); + ) assert.equal( proof.verificationMethod, registeredEnclave.vcPubkey, "Check VC pubkey: it should equal enclave's vcPubkey from parachains enclave registry" - ); + ) // step 7 // check runtime version is present @@ -150,49 +191,58 @@ export async function assertVc(context: IntegrationTestContext, subject: CorePri vcPayloadJson.issuer.runtimeVersion, { parachain: 9191, sidechain: 109 }, 'Check VC runtime version: it should equal the current defined versions' - ); + ) // step 8 // validate VC against schema - const schemaResult = await validateVcSchema(vcPayloadJson); + const schemaResult = await validateVcSchema(vcPayloadJson) - if (schemaResult.errors) console.log('Schema Validation errors: ', schemaResult.errors); + if (schemaResult.errors) + console.log('Schema Validation errors: ', schemaResult.errors) - assert.isTrue(schemaResult.isValid, 'Check Vc payload error: vcPayload should be valid'); + assert.isTrue( + schemaResult.isValid, + 'Check Vc payload error: vcPayload should be valid' + ) assert.equal( vcWithoutProof.type[0], 'VerifiableCredential', 'Check Vc payload type error: vcPayload type should be VerifiableCredential' - ); + ) assert.equal( proof.type, 'Ed25519Signature2020', 'Check Vc proof type error: proof type should be Ed25519Signature2020' - ); + ) } export async function assertIdGraphHash( context: IntegrationTestContext, teeShieldingKey: KeyObject, identity: CorePrimitivesIdentity, - idGraph: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] + idGraph: [ + CorePrimitivesIdentity, + PalletIdentityManagementTeeIdentityContext, + ][] ) { const idGraphType = context.sidechainRegistry.createType( 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', idGraph - ); - const computedIdGraphHash = blake2AsHex(idGraphType.toU8a()); - console.log('computed id graph hash: ', computedIdGraphHash); - - const queriedIdGraphHash = (await getIdGraphHash(context, teeShieldingKey, identity)).toHex(); - console.log('queried id graph hash: ', queriedIdGraphHash); - assert.equal(computedIdGraphHash, queriedIdGraphHash); + ) + const computedIdGraphHash = blake2AsHex(idGraphType.toU8a()) + console.log('computed id graph hash: ', computedIdGraphHash) + + const queriedIdGraphHash = ( + await getIdGraphHash(context, teeShieldingKey, identity) + ).toHex() + console.log('queried id graph hash: ', queriedIdGraphHash) + assert.equal(computedIdGraphHash, queriedIdGraphHash) } function trimPrefix(str: string, prefix: string): string { if (str.startsWith(prefix)) { - return str.substring(prefix.length); + return str.substring(prefix.length) } - return str; + return str } diff --git a/vc-di-tests/integration-tests/common/utils/common.ts b/vc-di-tests/integration-tests/common/utils/common.ts index a528596..d362bc4 100644 --- a/vc-di-tests/integration-tests/common/utils/common.ts +++ b/vc-di-tests/integration-tests/common/utils/common.ts @@ -1,5 +1,5 @@ export function sleep(secs: number) { return new Promise((resolve) => { - setTimeout(resolve, secs * 1000); - }); + setTimeout(resolve, secs * 1000) + }) } diff --git a/vc-di-tests/integration-tests/common/utils/context.ts b/vc-di-tests/integration-tests/common/utils/context.ts index cff8e1c..376d357 100644 --- a/vc-di-tests/integration-tests/common/utils/context.ts +++ b/vc-di-tests/integration-tests/common/utils/context.ts @@ -1,55 +1,73 @@ -import { WsProvider, ApiPromise } from '@litentry/parachain-api'; -import { cryptoWaitReady } from '@polkadot/util-crypto'; -import { hexToString } from '@polkadot/util'; -import WebSocketAsPromised from 'websocket-as-promised'; -import WebSocket from 'ws'; -import Options from 'websocket-as-promised/types/options'; -import { KeyObject } from 'crypto'; -import { getSidechainMetadata } from '../call'; -import { createWeb3Wallets } from '../helpers'; -import type { IntegrationTestContext } from '../common-types'; -import { identity, vc, trusted_operations, sidechain } from '@litentry/parachain-api'; -import crypto from 'crypto'; -import type { HexString } from '@polkadot/util/types'; +import { WsProvider, ApiPromise } from '@litentry/parachain-api' +import { cryptoWaitReady } from '@polkadot/util-crypto' +import { hexToString } from '@polkadot/util' +import WebSocketAsPromised from 'websocket-as-promised' +import WebSocket from 'ws' +import Options from 'websocket-as-promised/types/options' +import { KeyObject } from 'crypto' +import { getSidechainMetadata } from '../call' +import { createWeb3Wallets } from '../helpers' +import type { IntegrationTestContext } from '../common-types' +import { + identity, + vc, + trusted_operations, + sidechain, +} from '@litentry/parachain-api' +import crypto from 'crypto' +import type { HexString } from '@polkadot/util/types' // maximum block number that we wait in listening events before we timeout -export const defaultListenTimeoutInBlockNumber = 15; +export const defaultListenTimeoutInBlockNumber = 15 -export async function initWorkerConnection(endpoint: string): Promise { +export async function initWorkerConnection( + endpoint: string +): Promise { const wsp = new WebSocketAsPromised(endpoint, ({ createWebSocket: (url: any) => new WebSocket(url), extractMessageData: (event: any) => event, packMessage: (data: any) => JSON.stringify(data), - unpackMessage: (data: string | ArrayBuffer | Blob) => JSON.parse(data.toString()), - attachRequestId: (data: any, requestId: string | number) => Object.assign({ id: requestId }, data), + unpackMessage: (data: string | ArrayBuffer | Blob) => + JSON.parse(data.toString()), + attachRequestId: (data: any, requestId: string | number) => + Object.assign({ id: requestId }, data), extractRequestId: (data: any) => data && data.id, // read requestId from message `id` field - })); - await wsp.open(); - return wsp; + })) + await wsp.open() + return wsp } export async function initIntegrationTestContext( workerEndpoint: string, substrateEndpoint: string ): Promise { - const provider = new WsProvider(substrateEndpoint); - await cryptoWaitReady(); + const provider = new WsProvider(substrateEndpoint) + await cryptoWaitReady() - const web3Wallets = createWeb3Wallets(); + const web3Wallets = createWeb3Wallets() - const types = { ...identity.types, ...vc.types, ...trusted_operations.types, ...sidechain.types }; + const types = { + ...identity.types, + ...vc.types, + ...trusted_operations.types, + ...sidechain.types, + } const api = await ApiPromise.create({ provider, types, - }); + }) - const chainIdentifier = api.registry.chainSS58 as number; + const chainIdentifier = api.registry.chainSS58 as number - const wsp = await initWorkerConnection(workerEndpoint); - const requestId = 1; + const wsp = await initWorkerConnection(workerEndpoint) + const requestId = 1 - const { sidechainMetaData, sidechainRegistry } = await getSidechainMetadata(wsp, api, requestId); - const { mrEnclave, teeShieldingKey } = await getEnclave(api); + const { sidechainMetaData, sidechainRegistry } = await getSidechainMetadata( + wsp, + api, + requestId + ) + const { mrEnclave, teeShieldingKey } = await getEnclave(api) return { tee: wsp, api, @@ -60,33 +78,44 @@ export async function initIntegrationTestContext( sidechainRegistry, chainIdentifier, requestId, - }; + } } export async function getEnclave(api: ApiPromise): Promise<{ - mrEnclave: HexString; - teeShieldingKey: KeyObject; + mrEnclave: HexString + teeShieldingKey: KeyObject }> { - const enclaveIdentifier = api.createType('Vec', await api.query.teebag.enclaveIdentifier('Identity')); - const primaryEnclave = (await api.query.teebag.enclaveRegistry(enclaveIdentifier[0])).unwrap(); + const enclaveIdentifier = api.createType( + 'Vec', + await api.query.teebag.enclaveIdentifier('Identity') + ) + const primaryEnclave = ( + await api.query.teebag.enclaveRegistry(enclaveIdentifier[0]) + ).unwrap() - const shieldingPubkeyBytes = api.createType('Option', primaryEnclave.shieldingPubkey).unwrap(); - const shieldingPubkey = hexToString(shieldingPubkeyBytes.toHex()); + const shieldingPubkeyBytes = api + .createType('Option', primaryEnclave.shieldingPubkey) + .unwrap() + const shieldingPubkey = hexToString(shieldingPubkeyBytes.toHex()) const teeShieldingKey = crypto.createPublicKey({ key: { alg: 'RSA-OAEP-256', kty: 'RSA', use: 'enc', - n: Buffer.from(JSON.parse(shieldingPubkey).n.reverse()).toString('base64url'), - e: Buffer.from(JSON.parse(shieldingPubkey).e.reverse()).toString('base64url'), + n: Buffer.from(JSON.parse(shieldingPubkey).n.reverse()).toString( + 'base64url' + ), + e: Buffer.from(JSON.parse(shieldingPubkey).e.reverse()).toString( + 'base64url' + ), }, format: 'jwk', - }); + }) //@TODO mrEnclave should verify from storage - const mrEnclave = primaryEnclave.mrenclave.toHex(); + const mrEnclave = primaryEnclave.mrenclave.toHex() return { mrEnclave, teeShieldingKey, - }; + } } diff --git a/vc-di-tests/integration-tests/common/utils/crypto.ts b/vc-di-tests/integration-tests/common/utils/crypto.ts index 1a1cee3..bd47a73 100644 --- a/vc-di-tests/integration-tests/common/utils/crypto.ts +++ b/vc-di-tests/integration-tests/common/utils/crypto.ts @@ -1,22 +1,36 @@ -import type { HexString } from '@polkadot/util/types'; -import { bufferToU8a, hexToU8a, isString, stringToU8a, u8aToHex } from '@polkadot/util'; -import { KeyObject } from 'crypto'; -import { AesOutput, CorePrimitivesIdentity } from '@litentry/parachain-api'; -import crypto from 'crypto'; -import { KeyringPair } from '@polkadot/keyring/types'; -import { ethers } from 'ethers'; -import { blake2AsU8a } from '@polkadot/util-crypto'; -import { Keypair } from '@solana/web3.js'; -import nacl from 'tweetnacl'; -import { IntegrationTestContext } from './../common-types'; -import { buildIdentityHelper } from './identity-helper'; -import { ECPairInterface } from 'ecpair'; -import * as bitcoinMessage from 'bitcoinjs-message'; -import { isHexString } from 'ethers/lib/utils'; -export type KeypairType = 'ed25519' | 'sr25519' | 'ecdsa' | 'ethereum' | 'bitcoin'; - -export function encryptWithTeeShieldingKey(teeShieldingKey: KeyObject, plaintext: Uint8Array): Buffer { - return encryptBuffer(teeShieldingKey, plaintext); +import type { HexString } from '@polkadot/util/types' +import { + bufferToU8a, + hexToU8a, + isString, + stringToU8a, + u8aToHex, +} from '@polkadot/util' +import { KeyObject } from 'crypto' +import { AesOutput, CorePrimitivesIdentity } from '@litentry/parachain-api' +import crypto from 'crypto' +import { KeyringPair } from '@polkadot/keyring/types' +import { ethers } from 'ethers' +import { blake2AsU8a } from '@polkadot/util-crypto' +import { Keypair } from '@solana/web3.js' +import nacl from 'tweetnacl' +import { IntegrationTestContext } from './../common-types' +import { buildIdentityHelper } from './identity-helper' +import { ECPairInterface } from 'ecpair' +import * as bitcoinMessage from 'bitcoinjs-message' +import { isHexString } from 'ethers/lib/utils' +export type KeypairType = + | 'ed25519' + | 'sr25519' + | 'ecdsa' + | 'ethereum' + | 'bitcoin' + +export function encryptWithTeeShieldingKey( + teeShieldingKey: KeyObject, + plaintext: Uint8Array +): Buffer { + return encryptBuffer(teeShieldingKey, plaintext) } /** @@ -29,14 +43,17 @@ export function encryptWithTeeShieldingKey(teeShieldingKey: KeyObject, plaintext * @returns {Buffer} The encrypted data. */ function encryptBuffer(pubKey: crypto.KeyLike, plaintext: Uint8Array): Buffer { - const bs = 384; // 3072 bits = 384 bytes - const bsPlain = bs - (2 * 256) / 8 - 2; // Maximum plaintext block size - const count = Math.ceil(plaintext.length / bsPlain); // Use Math.ceil to ensure proper chunk count + const bs = 384 // 3072 bits = 384 bytes + const bsPlain = bs - (2 * 256) / 8 - 2 // Maximum plaintext block size + const count = Math.ceil(plaintext.length / bsPlain) // Use Math.ceil to ensure proper chunk count - const cipherText = Buffer.alloc(bs * count); + const cipherText = Buffer.alloc(bs * count) for (let i = 0; i < count; i++) { - const plainSlice = plaintext.slice(i * bsPlain, Math.min((i + 1) * bsPlain, plaintext.length)); + const plainSlice = plaintext.slice( + i * bsPlain, + Math.min((i + 1) * bsPlain, plaintext.length) + ) const cipherSlice = crypto.publicEncrypt( { key: pubKey, @@ -44,166 +61,202 @@ function encryptBuffer(pubKey: crypto.KeyLike, plaintext: Uint8Array): Buffer { oaepHash: 'sha256', }, plainSlice - ); + ) - cipherSlice.copy(cipherText, i * bs); + cipherSlice.copy(cipherText, i * bs) } - return cipherText; + return cipherText } // A lazy version without aad. Append the tag to be consistent with rust implementation -export function encryptWithAes(key: HexString, nonce: Uint8Array, cleartext: Buffer): HexString { - const secretKey = crypto.createSecretKey(hexToU8a(key)); +export function encryptWithAes( + key: HexString, + nonce: Uint8Array, + cleartext: Buffer +): HexString { + const secretKey = crypto.createSecretKey(hexToU8a(key)) const cipher = crypto.createCipheriv('aes-256-gcm', secretKey, nonce, { authTagLength: 16, - }); - let encrypted = cipher.update(cleartext.toString('hex'), 'hex', 'hex'); - encrypted += cipher.final('hex'); - encrypted += cipher.getAuthTag().toString('hex'); - return `0x${encrypted}`; + }) + let encrypted = cipher.update(cleartext.toString('hex'), 'hex', 'hex') + encrypted += cipher.final('hex') + encrypted += cipher.getAuthTag().toString('hex') + return `0x${encrypted}` } -export function decryptWithAes(key: HexString, aesOutput: AesOutput, type: 'hex' | 'utf-8'): HexString { - const secretKey = crypto.createSecretKey(hexToU8a(key)); - const tagSize = 16; - const ciphertext = aesOutput.ciphertext ? aesOutput.ciphertext : hexToU8a('0x'); +export function decryptWithAes( + key: HexString, + aesOutput: AesOutput, + type: 'hex' | 'utf-8' +): HexString { + const secretKey = crypto.createSecretKey(hexToU8a(key)) + const tagSize = 16 + const ciphertext = aesOutput.ciphertext + ? aesOutput.ciphertext + : hexToU8a('0x') - const nonce = aesOutput.nonce ? aesOutput.nonce : hexToU8a('0x'); - const aad = aesOutput.aad ? aesOutput.aad : hexToU8a('0x'); + const nonce = aesOutput.nonce ? aesOutput.nonce : hexToU8a('0x') + const aad = aesOutput.aad ? aesOutput.aad : hexToU8a('0x') // notice!!! extract author_tag from ciphertext // maybe this code only works with rust aes encryption - const authorTag = ciphertext.subarray(ciphertext.length - tagSize); + const authorTag = ciphertext.subarray(ciphertext.length - tagSize) const decipher = crypto.createDecipheriv('aes-256-gcm', secretKey, nonce, { authTagLength: tagSize, - }); - decipher.setAAD(aad); - decipher.setAuthTag(authorTag); - - const part1 = decipher.update(ciphertext.subarray(0, ciphertext.length - tagSize), undefined, type); - const part2 = decipher.final(type); - - return `0x${part1 + part2}`; + }) + decipher.setAAD(aad) + decipher.setAuthTag(authorTag) + + const part1 = decipher.update( + ciphertext.subarray(0, ciphertext.length - tagSize), + undefined, + type + ) + const part2 = decipher.final(type) + + return `0x${part1 + part2}` } export interface Signer { - getAddressRaw(): Uint8Array; - sign(message: HexString | string | Uint8Array): Promise; - type(): KeypairType; - getAddressInSubstrateFormat(): Uint8Array; - getIdentity(api: IntegrationTestContext): Promise; + getAddressRaw(): Uint8Array + sign(message: HexString | string | Uint8Array): Promise + type(): KeypairType + getAddressInSubstrateFormat(): Uint8Array + getIdentity(api: IntegrationTestContext): Promise } export class PolkadotSigner implements Signer { - keypair: KeyringPair; + keypair: KeyringPair constructor(keypair: KeyringPair) { - this.keypair = keypair; + this.keypair = keypair } getAddressRaw(): Uint8Array { - return this.keypair.addressRaw; + return this.keypair.addressRaw } sign(message: HexString | string | Uint8Array): Promise { - return new Promise((resolve) => resolve(this.keypair.sign(message))); + return new Promise((resolve) => resolve(this.keypair.sign(message))) } type(): KeypairType { - return this.keypair.type; + return this.keypair.type } getAddressInSubstrateFormat(): Uint8Array { - return this.getAddressRaw(); + return this.getAddressRaw() } - getIdentity(context: IntegrationTestContext): Promise { - return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Substrate', context); + getIdentity( + context: IntegrationTestContext + ): Promise { + return buildIdentityHelper( + u8aToHex(this.getAddressRaw()), + 'Substrate', + context + ) } } export class EthersSigner implements Signer { - wallet: ethers.Wallet; + wallet: ethers.Wallet constructor(wallet: ethers.Wallet) { - this.wallet = wallet; + this.wallet = wallet } getAddressRaw(): Uint8Array { - return hexToU8a(this.wallet.address); + return hexToU8a(this.wallet.address) } sign(message: HexString | string | Uint8Array): Promise { return this.wallet.signMessage(message).then((sig) => { - return hexToU8a(sig); - }); + return hexToU8a(sig) + }) } type(): KeypairType { - return 'ethereum'; + return 'ethereum' } getAddressInSubstrateFormat(): Uint8Array { - const prefix = stringToU8a('evm:'); - const address = this.getAddressRaw(); - const merged = new Uint8Array(prefix.length + address.length); - merged.set(prefix); - merged.set(address, 4); - return blake2AsU8a(merged, 256); + const prefix = stringToU8a('evm:') + const address = this.getAddressRaw() + const merged = new Uint8Array(prefix.length + address.length) + merged.set(prefix) + merged.set(address, 4) + return blake2AsU8a(merged, 256) } - getIdentity(context: IntegrationTestContext): Promise { - return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Evm', context); + getIdentity( + context: IntegrationTestContext + ): Promise { + return buildIdentityHelper( + u8aToHex(this.getAddressRaw()), + 'Evm', + context + ) } } export class BitcoinSigner implements Signer { - keypair: ECPairInterface; + keypair: ECPairInterface constructor(keypair: ECPairInterface) { - this.keypair = keypair; + this.keypair = keypair } getAddressRaw(): Uint8Array { - return bufferToU8a(this.keypair.publicKey); + return bufferToU8a(this.keypair.publicKey) } sign(message: HexString | string | Uint8Array): Promise { return new Promise((resolve, reject) => { if (isString(message)) { // produce deterministic signatures - const sig = bitcoinMessage.sign(message, this.keypair.privateKey!, this.keypair.compressed); - resolve(sig); + const sig = bitcoinMessage.sign( + message, + this.keypair.privateKey!, + this.keypair.compressed + ) + resolve(sig) } else { - reject('wrong message type'); + reject('wrong message type') } - }); + }) } type(): KeypairType { - return 'bitcoin'; + return 'bitcoin' } getAddressInSubstrateFormat(): Uint8Array { - return blake2AsU8a(this.getAddressRaw(), 256); + return blake2AsU8a(this.getAddressRaw(), 256) } - getIdentity(context: IntegrationTestContext): Promise { - return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Bitcoin', context); + getIdentity( + context: IntegrationTestContext + ): Promise { + return buildIdentityHelper( + u8aToHex(this.getAddressRaw()), + 'Bitcoin', + context + ) } } export class SolanaSigner implements Signer { - keypair: Keypair; + keypair: Keypair constructor(keypair: Keypair) { - this.keypair = keypair; + this.keypair = keypair } getAddressRaw(): Uint8Array { - return this.keypair.publicKey.toBytes(); + return this.keypair.publicKey.toBytes() } sign(message: HexString | string | Uint8Array): Promise { @@ -213,23 +266,29 @@ export class SolanaSigner implements Signer { isHexString(message) ? hexToU8a(message as HexString) : isString(message) - ? stringToU8a(message) - : message, + ? stringToU8a(message) + : message, this.keypair.secretKey ) ) - ); + ) } type(): KeypairType { - return 'ed25519'; + return 'ed25519' } getAddressInSubstrateFormat(): Uint8Array { - return this.getAddressRaw(); + return this.getAddressRaw() } - getIdentity(context: IntegrationTestContext): Promise { - return buildIdentityHelper(u8aToHex(this.getAddressRaw()), 'Solana', context); + getIdentity( + context: IntegrationTestContext + ): Promise { + return buildIdentityHelper( + u8aToHex(this.getAddressRaw()), + 'Solana', + context + ) } } diff --git a/vc-di-tests/integration-tests/common/utils/identity-helper.ts b/vc-di-tests/integration-tests/common/utils/identity-helper.ts index bad7d3c..47f5051 100644 --- a/vc-di-tests/integration-tests/common/utils/identity-helper.ts +++ b/vc-di-tests/integration-tests/common/utils/identity-helper.ts @@ -1,13 +1,16 @@ -import { u8aToHex } from '@polkadot/util'; -import { blake2AsHex } from '@polkadot/util-crypto'; -import type { IntegrationTestContext } from '../common-types'; -import { AesOutput } from '@litentry/parachain-api'; -import { decryptWithAes, Signer } from './crypto'; -import { ethers } from 'ethers'; -import type { TypeRegistry } from '@polkadot/types'; -import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; -import type { LitentryValidationData, CorePrimitivesIdentity } from '@litentry/parachain-api'; -import type { HexString } from '@polkadot/util/types'; +import { u8aToHex } from '@polkadot/util' +import { blake2AsHex } from '@polkadot/util-crypto' +import type { IntegrationTestContext } from '../common-types' +import { AesOutput } from '@litentry/parachain-api' +import { decryptWithAes, Signer } from './crypto' +import { ethers } from 'ethers' +import type { TypeRegistry } from '@polkadot/types' +import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api' +import type { + LitentryValidationData, + CorePrimitivesIdentity, +} from '@litentry/parachain-api' +import type { HexString } from '@polkadot/util/types' // blake2_256( + + ) export function generateVerificationMessage( @@ -17,18 +20,29 @@ export function generateVerificationMessage( sidechainNonce: number, options?: { prettifiedMessage?: boolean } ): string { - const _options = { prettifiedMessage: false, ...options }; - const encodedIdentity = context.api.createType('CorePrimitivesIdentity', identity).toU8a(); - const encodedWho = context.api.createType('CorePrimitivesIdentity', signer).toU8a(); - const encodedSidechainNonce = context.api.createType('Index', sidechainNonce); - const msg = Buffer.concat([encodedSidechainNonce.toU8a(), encodedWho, encodedIdentity]); - const hash = blake2AsHex(msg, 256); + const _options = { prettifiedMessage: false, ...options } + const encodedIdentity = context.api + .createType('CorePrimitivesIdentity', identity) + .toU8a() + const encodedWho = context.api + .createType('CorePrimitivesIdentity', signer) + .toU8a() + const encodedSidechainNonce = context.api.createType( + 'Index', + sidechainNonce + ) + const msg = Buffer.concat([ + encodedSidechainNonce.toU8a(), + encodedWho, + encodedIdentity, + ]) + const hash = blake2AsHex(msg, 256) if (_options.prettifiedMessage) { - return `Token: ${hash}`; + return `Token: ${hash}` } - return hash; + return hash } export async function buildIdentityHelper( @@ -38,8 +52,8 @@ export async function buildIdentityHelper( ): Promise { const identity = { [type]: address, - }; - return context.api.createType('CorePrimitivesIdentity', identity); + } + return context.api.createType('CorePrimitivesIdentity', identity) } export function parseIdGraph( @@ -47,54 +61,63 @@ export function parseIdGraph( idGraphOutput: AesOutput, aesKey: HexString ): [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] { - const decryptedIdGraph = decryptWithAes(aesKey, idGraphOutput, 'hex'); - const idGraph: [CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext][] = - sidechainRegistry.createType( - 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', - decryptedIdGraph - ); - - return idGraph; + const decryptedIdGraph = decryptWithAes(aesKey, idGraphOutput, 'hex') + const idGraph: [ + CorePrimitivesIdentity, + PalletIdentityManagementTeeIdentityContext, + ][] = sidechainRegistry.createType( + 'Vec<(CorePrimitivesIdentity, PalletIdentityManagementTeeIdentityContext)>', + decryptedIdGraph + ) + + return idGraph } type Web2ValidationConfig = | { - identityType: 'Discord'; - context: IntegrationTestContext; - signerIdentitity: CorePrimitivesIdentity; - linkIdentity: CorePrimitivesIdentity; - verificationType: 'PublicMessage' | 'OAuth2'; - validationNonce: number; + identityType: 'Discord' + context: IntegrationTestContext + signerIdentitity: CorePrimitivesIdentity + linkIdentity: CorePrimitivesIdentity + verificationType: 'PublicMessage' | 'OAuth2' + validationNonce: number } | { - identityType: 'Twitter'; - context: IntegrationTestContext; - signerIdentitity: CorePrimitivesIdentity; - linkIdentity: CorePrimitivesIdentity; - verificationType: 'PublicTweet'; - validationNonce: number; + identityType: 'Twitter' + context: IntegrationTestContext + signerIdentitity: CorePrimitivesIdentity + linkIdentity: CorePrimitivesIdentity + verificationType: 'PublicTweet' + validationNonce: number } | { - identityType: 'Twitter'; - context: IntegrationTestContext; - signerIdentitity: CorePrimitivesIdentity; - linkIdentity: CorePrimitivesIdentity; - verificationType: 'OAuth2'; - validationNonce: number; - oauthState: string; - }; - -export async function buildWeb2Validation(config: Web2ValidationConfig): Promise { - const { context, signerIdentitity, linkIdentity, validationNonce } = config; - const msg = generateVerificationMessage(context, signerIdentitity, linkIdentity, validationNonce); - console.log(`post verification msg to ${config.identityType}:`, msg); + identityType: 'Twitter' + context: IntegrationTestContext + signerIdentitity: CorePrimitivesIdentity + linkIdentity: CorePrimitivesIdentity + verificationType: 'OAuth2' + validationNonce: number + oauthState: string + } + +export async function buildWeb2Validation( + config: Web2ValidationConfig +): Promise { + const { context, signerIdentitity, linkIdentity, validationNonce } = config + const msg = generateVerificationMessage( + context, + signerIdentitity, + linkIdentity, + validationNonce + ) + console.log(`post verification msg to ${config.identityType}:`, msg) if (config.identityType === 'Discord') { const discordValidationData = { Web2Validation: { Discord: {}, }, - }; + } if (config.verificationType === 'PublicMessage') { discordValidationData.Web2Validation.Discord = { @@ -103,30 +126,33 @@ export async function buildWeb2Validation(config: Web2ValidationConfig): Promise message_id: `0x${Buffer.from('1', 'utf8').toString('hex')}`, guild_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, }, - }; + } } else { discordValidationData.Web2Validation.Discord = { OAuth2: { code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, }, - }; + } } - return context.api.createType('LitentryValidationData', discordValidationData); + return context.api.createType( + 'LitentryValidationData', + discordValidationData + ) } else { const twitterValidationData = { Web2Validation: { Twitter: {}, }, - }; + } if (config.verificationType === 'PublicTweet') { twitterValidationData.Web2Validation.Twitter = { PublicTweet: { tweet_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, }, - }; + } } else { twitterValidationData.Web2Validation.Twitter = { OAuth2: { @@ -134,10 +160,13 @@ export async function buildWeb2Validation(config: Web2ValidationConfig): Promise state: config.oauthState, redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, }, - }; + } } - return context.api.createType('LitentryValidationData', twitterValidationData); + return context.api.createType( + 'LitentryValidationData', + twitterValidationData + ) } } @@ -150,10 +179,15 @@ export async function buildValidations( signer?: Signer, options?: { prettifiedMessage?: boolean } ): Promise { - const _options = { prettifiedMessage: false, ...options }; - const validationNonce = startingSidechainNonce++; + const _options = { prettifiedMessage: false, ...options } + const validationNonce = startingSidechainNonce++ - const msg = generateVerificationMessage(context, signerIdentitity, linkIdentity, validationNonce); + const msg = generateVerificationMessage( + context, + signerIdentitity, + linkIdentity, + validationNonce + ) if (network === 'ethereum') { const evmValidationData = { Web3Validation: { @@ -164,14 +198,17 @@ export async function buildValidations( }, }, }, - }; - evmValidationData.Web3Validation.Evm.message = msg; - const msgHash = ethers.utils.arrayify(msg); - const evmSignature = u8aToHex(await signer!.sign(msgHash)); + } + evmValidationData.Web3Validation.Evm.message = msg + const msgHash = ethers.utils.arrayify(msg) + const evmSignature = u8aToHex(await signer!.sign(msgHash)) - evmValidationData!.Web3Validation.Evm.signature.Ethereum = evmSignature; + evmValidationData!.Web3Validation.Evm.signature.Ethereum = evmSignature - return context.api.createType('LitentryValidationData', evmValidationData); + return context.api.createType( + 'LitentryValidationData', + evmValidationData + ) } if (network === 'substrate') { @@ -184,13 +221,17 @@ export async function buildValidations( }, }, }, - }; - console.log('post verification msg to substrate: ', msg); - substrateValidationData.Web3Validation.Substrate.message = msg; - const substrateSignature = await signer!.sign(msg); - substrateValidationData!.Web3Validation.Substrate.signature.Sr25519 = u8aToHex(substrateSignature); + } + console.log('post verification msg to substrate: ', msg) + substrateValidationData.Web3Validation.Substrate.message = msg + const substrateSignature = await signer!.sign(msg) + substrateValidationData!.Web3Validation.Substrate.signature.Sr25519 = + u8aToHex(substrateSignature) - return context.api.createType('LitentryValidationData', substrateValidationData); + return context.api.createType( + 'LitentryValidationData', + substrateValidationData + ) } if (network === 'bitcoin') { @@ -203,13 +244,17 @@ export async function buildValidations( }, }, }, - }; - bitcoinValidationData.Web3Validation.Bitcoin.message = msg; + } + bitcoinValidationData.Web3Validation.Bitcoin.message = msg // we need to sign the hex string without `0x` prefix, the signature is base64-encoded string - const bitcoinSignature = await signer!.sign(msg.substring(2)); - bitcoinValidationData!.Web3Validation.Bitcoin.signature.Bitcoin = u8aToHex(bitcoinSignature); + const bitcoinSignature = await signer!.sign(msg.substring(2)) + bitcoinValidationData!.Web3Validation.Bitcoin.signature.Bitcoin = + u8aToHex(bitcoinSignature) - return context.api.createType('LitentryValidationData', bitcoinValidationData); + return context.api.createType( + 'LitentryValidationData', + bitcoinValidationData + ) } if (network === 'solana') { @@ -222,14 +267,18 @@ export async function buildValidations( }, }, }, - }; - console.log('post verification msg to solana: ', msg); - solanaValidationData.Web3Validation.Solana.message = msg; - const solanaSignature = await signer!.sign(msg); - solanaValidationData!.Web3Validation.Solana.signature.Ed25519 = u8aToHex(solanaSignature); + } + console.log('post verification msg to solana: ', msg) + solanaValidationData.Web3Validation.Solana.message = msg + const solanaSignature = await signer!.sign(msg) + solanaValidationData!.Web3Validation.Solana.signature.Ed25519 = + u8aToHex(solanaSignature) - return context.api.createType('LitentryValidationData', solanaValidationData); + return context.api.createType( + 'LitentryValidationData', + solanaValidationData + ) } - throw new Error(`[buildValidation]: Unsupported network ${network}.`); + throw new Error(`[buildValidation]: Unsupported network ${network}.`) } diff --git a/vc-di-tests/integration-tests/common/utils/index.ts b/vc-di-tests/integration-tests/common/utils/index.ts index 77d2344..a33983d 100644 --- a/vc-di-tests/integration-tests/common/utils/index.ts +++ b/vc-di-tests/integration-tests/common/utils/index.ts @@ -1,15 +1,15 @@ -import '../config'; +import '../config' // in order to handle self-signed certificates we need to turn off the validation // TODO add self signed certificate ?? -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; +process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' -export * from './assertion'; -export * from './common'; -export * from './context'; -export * from './crypto'; -export * from './identity-helper'; -export * from './integration-setup'; -export * from './storage'; -export * from './vc-helper'; -export * from './type-creators'; +export * from './assertion' +export * from './common' +export * from './context' +export * from './crypto' +export * from './identity-helper' +export * from './integration-setup' +export * from './storage' +export * from './vc-helper' +export * from './type-creators' diff --git a/vc-di-tests/integration-tests/common/utils/integration-setup.ts b/vc-di-tests/integration-tests/common/utils/integration-setup.ts index d398fff..7fc2c9f 100644 --- a/vc-di-tests/integration-tests/common/utils/integration-setup.ts +++ b/vc-di-tests/integration-tests/common/utils/integration-setup.ts @@ -1,15 +1,18 @@ -import { ApiPromise } from '@litentry/parachain-api'; -import { KeyObject } from 'crypto'; -import WebSocketAsPromised from 'websocket-as-promised'; -import type { IntegrationTestContext } from '../common-types'; -import type { Metadata, TypeRegistry } from '@polkadot/types'; -import type { HexString } from '@polkadot/util/types'; -import { initIntegrationTestContext } from './context'; +import { ApiPromise } from '@litentry/parachain-api' +import { KeyObject } from 'crypto' +import WebSocketAsPromised from 'websocket-as-promised' +import type { IntegrationTestContext } from '../common-types' +import type { Metadata, TypeRegistry } from '@polkadot/types' +import type { HexString } from '@polkadot/util/types' +import { initIntegrationTestContext } from './context' -export function describeLitentry(title: string, cb: (context: IntegrationTestContext) => void) { +export function describeLitentry( + title: string, + cb: (context: IntegrationTestContext) => void +) { describe(title, function () { // Set timeout to 6000 seconds - this.timeout(6000000); + this.timeout(6000000) const context: IntegrationTestContext = { mrEnclave: '0x11' as HexString, @@ -22,24 +25,27 @@ export function describeLitentry(title: string, cb: (context: IntegrationTestCon // default LitentryRococo chainIdentifier: 42, requestId: 0, - }; + } before('Starting Litentry(parachain&tee)', async function () { //env url - const tmp = await initIntegrationTestContext(process.env.WORKER_ENDPOINT!, process.env.NODE_ENDPOINT!); - context.mrEnclave = tmp.mrEnclave; - context.api = tmp.api; - context.tee = tmp.tee; - context.teeShieldingKey = tmp.teeShieldingKey; - context.web3Wallets = tmp.web3Wallets; - context.sidechainMetaData = tmp.sidechainMetaData; - context.sidechainRegistry = tmp.sidechainRegistry; - context.chainIdentifier = tmp.chainIdentifier; - }); + const tmp = await initIntegrationTestContext( + process.env.WORKER_ENDPOINT!, + process.env.NODE_ENDPOINT! + ) + context.mrEnclave = tmp.mrEnclave + context.api = tmp.api + context.tee = tmp.tee + context.teeShieldingKey = tmp.teeShieldingKey + context.web3Wallets = tmp.web3Wallets + context.sidechainMetaData = tmp.sidechainMetaData + context.sidechainRegistry = tmp.sidechainRegistry + context.chainIdentifier = tmp.chainIdentifier + }) - after(() => Promise.resolve()); + after(() => Promise.resolve()) - cb(context); - }); + cb(context) + }) } diff --git a/vc-di-tests/integration-tests/common/utils/storage.ts b/vc-di-tests/integration-tests/common/utils/storage.ts index 3720341..58fa864 100644 --- a/vc-di-tests/integration-tests/common/utils/storage.ts +++ b/vc-di-tests/integration-tests/common/utils/storage.ts @@ -1,32 +1,46 @@ -import { u8aToHex, u8aConcat } from '@polkadot/util'; -import { xxhashAsU8a } from '@polkadot/util-crypto'; -import { StorageEntryMetadataV14, SiLookupTypeId, StorageHasherV14 } from '@polkadot/types/interfaces'; -import { sendRequest } from '../call'; -import { blake2128Concat, twox64Concat, identity, createJsonRpcRequest, nextRequestId } from '../helpers'; -import type { IntegrationTestContext } from '../common-types'; -import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api'; -import type { CorePrimitivesIdentity } from '@litentry/parachain-api'; -import type { HexString } from '@polkadot/util/types'; -import type { Metadata } from '@polkadot/types'; +import { u8aToHex, u8aConcat } from '@polkadot/util' +import { xxhashAsU8a } from '@polkadot/util-crypto' +import { + StorageEntryMetadataV14, + SiLookupTypeId, + StorageHasherV14, +} from '@polkadot/types/interfaces' +import { sendRequest } from '../call' +import { + blake2128Concat, + twox64Concat, + identity, + createJsonRpcRequest, + nextRequestId, +} from '../helpers' +import type { IntegrationTestContext } from '../common-types' +import type { PalletIdentityManagementTeeIdentityContext } from '@litentry/sidechain-api' +import type { CorePrimitivesIdentity } from '@litentry/parachain-api' +import type { HexString } from '@polkadot/util/types' +import type { Metadata } from '@polkadot/types' -const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)); +const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)) -import * as base58 from 'micro-base58'; +import * as base58 from 'micro-base58' //sidechain storage utils -export function buildStorageEntry(metadata: Metadata, prefix: string, method: string): StorageEntryMetadataV14 | null { +export function buildStorageEntry( + metadata: Metadata, + prefix: string, + method: string +): StorageEntryMetadataV14 | null { for (const pallet of metadata.asV14.pallets) { if (pallet.name.toString() == prefix) { - const storage = pallet.storage.unwrap(); + const storage = pallet.storage.unwrap() for (const item of storage.items) { if (item.name.toString() == method) { - return item; + return item } } } } - return null; + return null } export function buildStorageKey( @@ -37,32 +51,39 @@ export function buildStorageKey( hashers?: Array, input?: Array ): Uint8Array { - let storageKey = u8aConcat(xxhashAsU8a(prefix, 128), xxhashAsU8a(method, 128)); + let storageKey = u8aConcat( + xxhashAsU8a(prefix, 128), + xxhashAsU8a(method, 128) + ) if (keyTypeId && hashers && input) { const keyTypeIds = - hashers.length === 1 ? [keyTypeId] : metadata.registry.lookup.getSiType(keyTypeId).def.asTuple; + hashers.length === 1 + ? [keyTypeId] + : metadata.registry.lookup.getSiType(keyTypeId).def.asTuple for (let i = 0; i < keyTypeIds.length; i++) { - const theKeyTypeId = keyTypeIds[i]; - const theHasher = hashers[i].toString(); - const theKeyItem = input[i]; + const theKeyTypeId = keyTypeIds[i] + const theHasher = hashers[i].toString() + const theKeyItem = input[i] // get the scale encoded input data by encoding the input - const theKeyType = metadata.registry.createLookupType(theKeyTypeId); - const theKeyItemEncoded = metadata.registry.createType(theKeyType, theKeyItem).toU8a(); + const theKeyType = metadata.registry.createLookupType(theKeyTypeId) + const theKeyItemEncoded = metadata.registry + .createType(theKeyType, theKeyItem) + .toU8a() // apply hasher - let theKeyItemAppliedHasher; + let theKeyItemAppliedHasher if (theHasher == 'Blake2_128Concat') { - theKeyItemAppliedHasher = blake2128Concat(theKeyItemEncoded); + theKeyItemAppliedHasher = blake2128Concat(theKeyItemEncoded) } else if (theHasher == 'Twox64Concat') { - theKeyItemAppliedHasher = twox64Concat(theKeyItemEncoded); + theKeyItemAppliedHasher = twox64Concat(theKeyItemEncoded) } else if (theHasher == 'Identity') { - theKeyItemAppliedHasher = identity(theKeyItemEncoded); + theKeyItemAppliedHasher = identity(theKeyItemEncoded) } else { - throw new Error(`The hasher ${theHasher} is not support.`); + throw new Error(`The hasher ${theHasher} is not support.`) } - storageKey = u8aConcat(storageKey, theKeyItemAppliedHasher); + storageKey = u8aConcat(storageKey, theKeyItemAppliedHasher) } } - return storageKey; + return storageKey } export async function buildStorageHelper( metadata: Metadata, @@ -70,25 +91,32 @@ export async function buildStorageHelper( method: string, ...input: Array ): Promise { - const storageEntry = buildStorageEntry(metadata, prefix, method); + const storageEntry = buildStorageEntry(metadata, prefix, method) if (!storageEntry) { - throw new Error('Can not find the storage entry from metadata'); + throw new Error('Can not find the storage entry from metadata') } - let storageKey; + let storageKey if (storageEntry.type.isPlain) { - storageKey = buildStorageKey(metadata, prefix, method); + storageKey = buildStorageKey(metadata, prefix, method) } else if (storageEntry.type.isMap) { - const { hashers, key } = storageEntry.type.asMap; + const { hashers, key } = storageEntry.type.asMap if (input.length != hashers.length) { - throw new Error('The `input` param is not correct'); + throw new Error('The `input` param is not correct') } - storageKey = buildStorageKey(metadata, prefix, method, key, hashers, input); + storageKey = buildStorageKey( + metadata, + prefix, + method, + key, + hashers, + input + ) } else { - throw new Error('Only support plain and map type'); + throw new Error('Only support plain and map type') } - console.debug(`storage key: ${u8aToHex(storageKey)}`); - return u8aToHex(storageKey); + console.debug(`storage key: ${u8aToHex(storageKey)}`) + return u8aToHex(storageKey) } export async function checkIdGraph( @@ -98,13 +126,28 @@ export async function checkIdGraph( subject: CorePrimitivesIdentity, identity: HexString ): Promise { - await sleep(6000); - const storageKey = await buildStorageHelper(context.sidechainMetaData, pallet, method, subject, identity); + await sleep(6000) + const storageKey = await buildStorageHelper( + context.sidechainMetaData, + pallet, + method, + subject, + identity + ) - const base58mrEnclave = base58.encode(Buffer.from(context.mrEnclave.slice(2), 'hex')); + const base58mrEnclave = base58.encode( + Buffer.from(context.mrEnclave.slice(2), 'hex') + ) - const request = createJsonRpcRequest('state_getStorage', [base58mrEnclave, storageKey], nextRequestId(context)); - const resp = await sendRequest(context.tee, request, context.api); - const idGraph = context.sidechainRegistry.createType('PalletIdentityManagementTeeIdentityContext', resp.value); - return idGraph; + const request = createJsonRpcRequest( + 'state_getStorage', + [base58mrEnclave, storageKey], + nextRequestId(context) + ) + const resp = await sendRequest(context.tee, request, context.api) + const idGraph = context.sidechainRegistry.createType( + 'PalletIdentityManagementTeeIdentityContext', + resp.value + ) + return idGraph } diff --git a/vc-di-tests/integration-tests/common/utils/type-creators.ts b/vc-di-tests/integration-tests/common/utils/type-creators.ts index 8516ad4..353bee4 100644 --- a/vc-di-tests/integration-tests/common/utils/type-creators.ts +++ b/vc-di-tests/integration-tests/common/utils/type-creators.ts @@ -1,40 +1,46 @@ -import { u8aToHex, hexToU8a, stringToU8a } from '@polkadot/util'; -import type { ApiPromise } from '@polkadot/api'; -import type { LitentryMultiSignature } from '@litentry/parachain-api'; -import type { Signer } from './crypto'; +import { u8aToHex, hexToU8a, stringToU8a } from '@polkadot/util' +import type { ApiPromise } from '@polkadot/api' +import type { LitentryMultiSignature } from '@litentry/parachain-api' +import type { Signer } from './crypto' export async function createLitentryMultiSignature( api: ApiPromise, args: { signer: Signer; payload: Uint8Array | string } ): Promise { - const { signer, payload } = args; - const signerType = signer.type(); + const { signer, payload } = args + const signerType = signer.type() // Sign Bytes: // For Bitcoin, sign as hex with no prefix; for other types, convert it to raw bytes if (payload instanceof Uint8Array) { - const signature = await signer.sign(signerType === 'bitcoin' ? u8aToHex(payload).substring(2) : payload); + const signature = await signer.sign( + signerType === 'bitcoin' ? u8aToHex(payload).substring(2) : payload + ) return api.createType('LitentryMultiSignature', { [signerType]: signature, - }); + }) } // Sign hex: // Remove the prefix for bitcoin signature, and use raw bytes for other types if (payload.startsWith('0x')) { - const signature = await signer.sign(signerType === 'bitcoin' ? payload.substring(2) : hexToU8a(payload)); + const signature = await signer.sign( + signerType === 'bitcoin' ? payload.substring(2) : hexToU8a(payload) + ) return api.createType('LitentryMultiSignature', { [signerType]: signature, - }); + }) } // Sign string: // For Bitcoin, pass it as it is, for other types, convert it to raw bytes - const signature = await signer.sign(signerType === 'bitcoin' ? payload : stringToU8a(payload)); + const signature = await signer.sign( + signerType === 'bitcoin' ? payload : stringToU8a(payload) + ) return api.createType('LitentryMultiSignature', { [signerType]: signature, - }); + }) } diff --git a/vc-di-tests/integration-tests/common/utils/vc-helper.ts b/vc-di-tests/integration-tests/common/utils/vc-helper.ts index 2c3f4da..0030376 100644 --- a/vc-di-tests/integration-tests/common/utils/vc-helper.ts +++ b/vc-di-tests/integration-tests/common/utils/vc-helper.ts @@ -5,7 +5,8 @@ export const mockBatchAssertion = [ assertion: [{ A7: '5' }, { A8: ['Litentry'] }, { A20: 'A20' }], }, { - description: 'Have identified at least one account/address in both Web2 and Web3.', + description: + 'Have identified at least one account/address in both Web2 and Web3.', assertion: { A1: 'A1', }, @@ -30,12 +31,13 @@ export const mockBatchAssertion = [ A4: '10', }, }, -]; +] // https://github.com/litentry/litentry-parachain/tree/dev/tee-worker/litentry/core/assertion-build/src export const mockAssertions = [ { - description: 'Have identified at least one account/address in both Web2 and Web3.', + description: + 'Have identified at least one account/address in both Web2 and Web3.', assertion: { A1: 'A1', }, @@ -91,7 +93,8 @@ export const mockAssertions = [ }, }, { - description: 'The class of year that Ethereum account was created (must have on-chain records)', + description: + 'The class of year that Ethereum account was created (must have on-chain records)', assertion: { Achainable: { ClassOfYear: { @@ -152,7 +155,8 @@ export const mockAssertions = [ }, }, { - description: 'The user has participated in any Polkadot on-chain governance events', + description: + 'The user has participated in any Polkadot on-chain governance events', assertion: { A14: [], }, @@ -190,7 +194,8 @@ export const mockAssertions = [ }, // OneBlock { - description: 'A participant to the course co-created by OneBlock+ and Parity', + description: + 'A participant to the course co-created by OneBlock+ and Parity', assertion: { Oneblock: 'CourseCompletion', }, @@ -345,4 +350,4 @@ export const mockAssertions = [ WeirdoGhostGangHolder: [], }, }, -]; +] diff --git a/vc-di-tests/integration-tests/package.json b/vc-di-tests/integration-tests/package.json index 8096eda..a220e22 100644 --- a/vc-di-tests/integration-tests/package.json +++ b/vc-di-tests/integration-tests/package.json @@ -65,4 +65,4 @@ "typescript": "5.0.4" }, "packageManager": "pnpm@8.7.6" -} \ No newline at end of file +} diff --git a/vc-di-tests/package.json b/vc-di-tests/package.json index 346af2a..0ceca8a 100644 --- a/vc-di-tests/package.json +++ b/vc-di-tests/package.json @@ -1,9 +1,9 @@ { - "type": "module", - "license": "ISC", - "scripts": { - "format": "pnpm run --recursive format", - "check-format": "pnpm run --recursive check-format" - }, - "packageManager": "pnpm@8.7.6" + "type": "module", + "license": "ISC", + "scripts": { + "format": "pnpm run --recursive format", + "check-format": "pnpm run --recursive check-format" + }, + "packageManager": "pnpm@8.7.6" } From d966dc32c94afa5e687ea444f95864a5f1672f26 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 16:59:21 +0800 Subject: [PATCH 25/45] update lock file --- package-lock.json | 11384 -------------------------------------------- pnpm-lock.yaml | 2265 +-------- 2 files changed, 216 insertions(+), 13433 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 98aeee6..0000000 --- a/package-lock.json +++ /dev/null @@ -1,11384 +0,0 @@ -{ - "name": "@litentry/contracts", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@litentry/contracts", - "license": "MIT", - "devDependencies": { - "@ethersproject/providers": "^5.7.2", - "@litentry/chaindata": "^0.1.1", - "@litentry/@litentry/parachain-api": "latest", - "@litentry/@litentry/sidechain-api": "latest", - "@litentry/vc-schema-validator": "^0.0.1", - "@noble/ed25519": "^1.7.3", - "@nomicfoundation/hardhat-ethers": "^3.0.6", - "@nomicfoundation/hardhat-network-helpers": "^1.0.11", - "@nomicfoundation/hardhat-toolbox": "^5.0.0", - "@openzeppelin/contracts": "^4.9.6", - "@polkadot/api": "^10.9.1", - "@polkadot/api-augment": "^10.9.1", - "@polkadot/api-base": "^10.9.1", - "@polkadot/api-derive": "^10.9.1", - "@polkadot/keyring": "^12.2.1", - "@polkadot/rpc-core": "^10.9.1", - "@polkadot/types": "^10.9.1", - "@polkadot/types-augment": "^10.9.1", - "@polkadot/types-codec": "^10.9.1", - "@polkadot/types-create": "^10.9.1", - "@polkadot/types-known": "^10.9.1", - "@polkadot/types-support": "^10.9.1", - "@polkadot/util": "^12.5.1", - "@polkadot/util-crypto": "^12.5.1", - "@solana/web3.js": "^1.91.4", - "@types/chai": "^4.3.3", - "@types/chai-as-promised": "^7.1.8", - "@types/mocha": "^10.0.7", - "@types/node": "^20.4.4", - "@types/ws": "^8.5.3", - "@typescript-eslint/eslint-plugin": "^5.60.0", - "@typescript-eslint/parser": "^5.60.0", - "add": "^2.0.6", - "bitcoinjs-lib": "^6.1.5", - "bitcoinjs-message": "^2.2.0", - "chai": "^4.3.6", - "chai-as-promised": "^8.0.0", - "colors": "^1.4.0", - "cross-env": "^7.0.3", - "dotenv": "^16.0.3", - "ecpair": "^2.1.0", - "eslint": "^8.43.0", - "ethers": "^6.13.1", - "hardhat": "^2.22.8", - "js-base64": "^3.7.5", - "micro-base58": "^0.5.1", - "mocha": "^10.1.0", - "mocha-steps": "^1.3.0", - "prettier": "^3.3.3", - "prettier-plugin-solidity": "^1.3.1", - "scale-ts": "^0.2.11", - "tiny-secp256k1": "^2.2.3", - "ts-node": "^10.9.2", - "tweetnacl": "^1.0.3", - "typescript": "^5.5.4", - "websocket-as-promised": "^2.0.1", - "ws": "^8.17.1", - "zx": "^7.2.3" - } - }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", - "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "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" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@ethereumjs/rlp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", - "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", - "dev": true, - "peer": true, - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", - "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", - "dev": true, - "peer": true, - "dependencies": { - "@ethereumjs/rlp": "^4.0.1", - "ethereum-cryptography": "^2.0.0", - "micro-ftch": "^0.3.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" - } - }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/json-wallets/node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true, - "peer": true - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "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 - } - } - }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "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" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@litentry/chaindata": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@litentry/chaindata/-/chaindata-0.1.1.tgz", - "integrity": "sha512-2v2y1teCdA0rrtYvmZE/JDS5rLZTIfQFEnHJU0Y8gsbWOzmFK04VOPFgMZK5hdiSUZKPlshnWqQ9WVLG7AGtBw==", - "dev": true, - "dependencies": { - "tslib": "^2.3.0" - } - }, - "node_modules/@litentry/@litentry/parachain-api": { - "version": "0.9.18-11.2", - "resolved": "https://registry.npmjs.org/@litentry/@litentry/parachain-api/-/@litentry/parachain-api-0.9.18-11.2.tgz", - "integrity": "sha512-nnmX2o8j9Cbi6truI0CtIZ34dyAAKNGWmTIbfS5oXU3LVq20mdHErE8o9y/0j79yN+yFJwUvLpQMqanm6nwJYQ==", - "dev": true, - "dependencies": { - "@polkadot/api": "^10.9.1", - "@polkadot/api-augment": "^10.9.1", - "@polkadot/api-base": "^10.9.1", - "@polkadot/api-derive": "^10.9.1", - "@polkadot/keyring": "^12.2.1", - "@polkadot/rpc-core": "^10.9.1", - "@polkadot/types": "^10.9.1", - "@polkadot/types-augment": "^10.9.1", - "@polkadot/types-codec": "^10.9.1", - "@polkadot/types-create": "^10.9.1", - "@polkadot/types-known": "^10.9.1", - "@polkadot/types-support": "^10.9.1", - "@polkadot/util": "^12.5.1", - "@polkadot/util-crypto": "^12.5.1" - } - }, - "node_modules/@litentry/@litentry/sidechain-api": { - "version": "0.9.18-11", - "resolved": "https://registry.npmjs.org/@litentry/@litentry/sidechain-api/-/@litentry/sidechain-api-0.9.18-11.tgz", - "integrity": "sha512-iAcCyM8YkVdNjPs+CbhGpeUN2EnvTvvs8+HsiL660OTPRWHwLn7f3MuzrCcjBaHjKErtY2gJ9F/P6pskg5MOrg==", - "dev": true, - "dependencies": { - "@polkadot/api": "^10.9.1", - "@polkadot/api-augment": "^10.9.1", - "@polkadot/api-base": "^10.9.1", - "@polkadot/api-derive": "^10.9.1", - "@polkadot/keyring": "^12.2.1", - "@polkadot/rpc-core": "^10.9.1", - "@polkadot/types": "^10.9.1", - "@polkadot/types-augment": "^10.9.1", - "@polkadot/types-codec": "^10.9.1", - "@polkadot/types-create": "^10.9.1", - "@polkadot/types-known": "^10.9.1", - "@polkadot/types-support": "^10.9.1", - "@polkadot/util": "^12.5.1", - "@polkadot/util-crypto": "^12.5.1" - } - }, - "node_modules/@litentry/vc-schema-validator": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@litentry/vc-schema-validator/-/vc-schema-validator-0.0.1.tgz", - "integrity": "sha512-Utnu2m/IPcGbqpopNsEdB1AvRimoL300dGpk/9g/8P16OemCHYxHE8j+n2JrHS+BUvH9upDiNMy5sbZPmDAAfQ==", - "dev": true, - "peerDependencies": { - "ajv": "^8.12.0", - "ajv-formats": "^2.1.1", - "fast-glob": "^3.3.2", - "tslib": "^2.3.0" - } - }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@metamask/eth-sig-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/@metamask/eth-sig-util/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "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" - } - }, - "node_modules/@noble/curves": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", - "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.3.2" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/ed25519": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-1.7.3.tgz", - "integrity": "sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nomicfoundation/edr": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.5.2.tgz", - "integrity": "sha512-hW/iLvUQZNTVjFyX/I40rtKvvDOqUEyIi96T28YaLfmPL+3LW2lxmYLUXEJ6MI14HzqxDqrLyhf6IbjAa2r3Dw==", - "dev": true, - "dependencies": { - "@nomicfoundation/edr-darwin-arm64": "0.5.2", - "@nomicfoundation/edr-darwin-x64": "0.5.2", - "@nomicfoundation/edr-linux-arm64-gnu": "0.5.2", - "@nomicfoundation/edr-linux-arm64-musl": "0.5.2", - "@nomicfoundation/edr-linux-x64-gnu": "0.5.2", - "@nomicfoundation/edr-linux-x64-musl": "0.5.2", - "@nomicfoundation/edr-win32-x64-msvc": "0.5.2" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-arm64": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.5.2.tgz", - "integrity": "sha512-Gm4wOPKhbDjGTIRyFA2QUAPfCXA1AHxYOKt3yLSGJkQkdy9a5WW+qtqKeEKHc/+4wpJSLtsGQfpzyIzggFfo/A==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-darwin-x64": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.5.2.tgz", - "integrity": "sha512-ClyABq2dFCsrYEED3/UIO0c7p4H1/4vvlswFlqUyBpOkJccr75qIYvahOSJRM62WgUFRhbSS0OJXFRwc/PwmVg==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-gnu": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.5.2.tgz", - "integrity": "sha512-HWMTVk1iOabfvU2RvrKLDgtFjJZTC42CpHiw2h6rfpsgRqMahvIlx2jdjWYzFNy1jZKPTN1AStQ/91MRrg5KnA==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-arm64-musl": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.5.2.tgz", - "integrity": "sha512-CwsQ10xFx/QAD5y3/g5alm9+jFVuhc7uYMhrZAu9UVF+KtVjeCvafj0PaVsZ8qyijjqVuVsJ8hD1x5ob7SMcGg==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-gnu": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.5.2.tgz", - "integrity": "sha512-CWVCEdhWJ3fmUpzWHCRnC0/VLBDbqtqTGTR6yyY1Ep3S3BOrHEAvt7h5gx85r2vLcztisu2vlDq51auie4IU1A==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-linux-x64-musl": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.5.2.tgz", - "integrity": "sha512-+aJDfwhkddy2pP5u1ISg3IZVAm0dO836tRlDTFWtvvSMQ5hRGqPcWwlsbobhDQsIxhPJyT7phL0orCg5W3WMeA==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/edr-win32-x64-msvc": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.5.2.tgz", - "integrity": "sha512-CcvvuA3sAv7liFNPsIR/68YlH6rrybKzYttLlMr80d4GKJjwJ5OKb3YgE6FdZZnOfP19HEHhsLcE0DPLtY3r0w==", - "dev": true, - "engines": { - "node": ">= 18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz", - "integrity": "sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-util": "9.0.4" - } - }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz", - "integrity": "sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==", - "dev": true, - "bin": { - "rlp": "bin/rlp.cjs" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz", - "integrity": "sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz", - "integrity": "sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "5.0.4", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "c-kzg": "^2.1.2" - }, - "peerDependenciesMeta": { - "c-kzg": { - "optional": true - } - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.7.tgz", - "integrity": "sha512-RQfsiTwdf0SP+DtuNYvm4921X6VirCQq0Xyh+mnuGlTwEFSPZ/o27oQC+l+3Y/l48DDU7+ZcYBR+Fp+Rp94LfQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/chai-as-promised": "^7.1.3", - "chai-as-promised": "^7.1.1", - "deep-eql": "^4.0.1", - "ordinal": "^1.0.3" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "chai": "^4.2.0", - "ethers": "^6.1.0", - "hardhat": "^2.9.4" - } - }, - "node_modules/@nomicfoundation/hardhat-chai-matchers/node_modules/chai-as-promised": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.2.tgz", - "integrity": "sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==", - "dev": true, - "peer": true, - "dependencies": { - "check-error": "^1.0.2" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" - } - }, - "node_modules/@nomicfoundation/hardhat-ethers": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.6.tgz", - "integrity": "sha512-/xzkFQAaHQhmIAYOQmvHBPwL+NkwLzT9gRZBsgWUYeV+E6pzXsBQsHfRYbAZ3XEYare+T7S+5Tg/1KDJgepSkA==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "lodash.isequal": "^4.5.0" - }, - "peerDependencies": { - "ethers": "^6.1.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.4.tgz", - "integrity": "sha512-x1lhLN9ZRSJ9eiNY9AoinMdeQeU4LDQSQOIw90W9DiZIG/g9YUzcTEIY58QTi2TZOF8YFiF6vJqLSePCpi8R1Q==", - "dev": true, - "peer": true, - "dependencies": { - "@nomicfoundation/ignition-core": "^0.15.4", - "@nomicfoundation/ignition-ui": "^0.15.4", - "chalk": "^4.0.0", - "debug": "^4.3.2", - "fs-extra": "^10.0.0", - "prompts": "^2.4.2" - }, - "peerDependencies": { - "@nomicfoundation/hardhat-verify": "^2.0.1", - "hardhat": "^2.18.0" - } - }, - "node_modules/@nomicfoundation/hardhat-ignition-ethers": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.4.tgz", - "integrity": "sha512-vY30V4b788GSziW/nOd0L/4IPw6mwpluahLs4+gPUUKWaHHGMA8OIeHaYpRRljM1i0M/Kg1yIozrDM/aeRebkg==", - "dev": true, - "peer": true, - "peerDependencies": { - "@nomicfoundation/hardhat-ethers": "^3.0.4", - "@nomicfoundation/hardhat-ignition": "^0.15.4", - "@nomicfoundation/ignition-core": "^0.15.4", - "ethers": "^6.7.0", - "hardhat": "^2.18.0" - } - }, - "node_modules/@nomicfoundation/hardhat-network-helpers": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.11.tgz", - "integrity": "sha512-uGPL7QSKvxrHRU69dx8jzoBvuztlLCtyFsbgfXIwIjnO3dqZRz2GNMHJoO3C3dIiUNM6jdNF4AUnoQKDscdYrA==", - "dev": true, - "dependencies": { - "ethereumjs-util": "^7.1.4" - }, - "peerDependencies": { - "hardhat": "^2.9.5" - } - }, - "node_modules/@nomicfoundation/hardhat-toolbox": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz", - "integrity": "sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==", - "dev": true, - "peerDependencies": { - "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", - "@nomicfoundation/hardhat-ethers": "^3.0.0", - "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", - "@nomicfoundation/hardhat-network-helpers": "^1.0.0", - "@nomicfoundation/hardhat-verify": "^2.0.0", - "@typechain/ethers-v6": "^0.5.0", - "@typechain/hardhat": "^9.0.0", - "@types/chai": "^4.2.0", - "@types/mocha": ">=9.1.0", - "@types/node": ">=18.0.0", - "chai": "^4.2.0", - "ethers": "^6.4.0", - "hardhat": "^2.11.0", - "hardhat-gas-reporter": "^1.0.8", - "solidity-coverage": "^0.8.1", - "ts-node": ">=8.0.0", - "typechain": "^8.3.0", - "typescript": ">=4.5.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.8.tgz", - "integrity": "sha512-x/OYya7A2Kcz+3W/J78dyDHxr0ezU23DKTrRKfy5wDPCnePqnr79vm8EXqX3gYps6IjPBYyGPZ9K6E5BnrWx5Q==", - "dev": true, - "peer": true, - "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" - }, - "peerDependencies": { - "hardhat": "^2.0.4" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomicfoundation/hardhat-verify/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@nomicfoundation/ignition-core": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-core/-/ignition-core-0.15.4.tgz", - "integrity": "sha512-i379lH+xOLFdaDv0KiNma550ZXCHc5ZkmKYhM44xyLMKBlvX6skUVFkgUjjN1gvprgOIxc17GVQXlR1R5FhGZA==", - "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/address": "5.6.1", - "@nomicfoundation/solidity-analyzer": "^0.1.1", - "cbor": "^9.0.0", - "debug": "^4.3.2", - "ethers": "^6.7.0", - "fs-extra": "^10.0.0", - "immer": "10.0.2", - "lodash": "4.17.21", - "ndjson": "2.0.0" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/@ethersproject/address": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.6.1.tgz", - "integrity": "sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "dependencies": { - "@ethersproject/bignumber": "^5.6.2", - "@ethersproject/bytes": "^5.6.1", - "@ethersproject/keccak256": "^5.6.1", - "@ethersproject/logger": "^5.6.0", - "@ethersproject/rlp": "^5.6.1" - } - }, - "node_modules/@nomicfoundation/ignition-core/node_modules/cbor": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-9.0.2.tgz", - "integrity": "sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==", - "dev": true, - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@nomicfoundation/ignition-ui": { - "version": "0.15.4", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.4.tgz", - "integrity": "sha512-cHbmuxmhso5n2zdIaaIW4p8NNzrFj0mrnv8ufhAZfM3s3IFrRoGc1zo8hI/n1CiOTPuqUbdZcB79d+2tCKtCNw==", - "dev": true, - "peer": true - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", - "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", - "dev": true, - "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" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", - "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", - "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", - "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", - "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", - "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", - "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", - "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", - "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", - "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", - "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@openzeppelin/contracts": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.6.tgz", - "integrity": "sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==", - "dev": true - }, - "node_modules/@polkadot-api/client": { - "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "resolved": "https://registry.npmjs.org/@polkadot-api/client/-/client-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", - "integrity": "sha512-0fqK6pUKcGHSG2pBvY+gfSS+1mMdjd/qRygAcKI5d05tKsnZLRnmhb9laDguKmGEIB0Bz9vQqNK3gIN/cfvVwg==", - "dev": true, - "optional": true, - "dependencies": { - "@polkadot-api/metadata-builders": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "@polkadot-api/substrate-bindings": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "@polkadot-api/substrate-client": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "@polkadot-api/utils": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - }, - "peerDependencies": { - "rxjs": ">=7.8.0" - } - }, - "node_modules/@polkadot-api/json-rpc-provider": { - "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider/-/json-rpc-provider-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", - "integrity": "sha512-EaUS9Fc3wsiUr6ZS43PQqaRScW7kM6DYbuM/ou0aYjm8N9MBqgDbGm2oL6RE1vAVmOfEuHcXZuZkhzWtyvQUtA==", - "dev": true, - "optional": true - }, - "node_modules/@polkadot-api/json-rpc-provider-proxy": { - "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "resolved": "https://registry.npmjs.org/@polkadot-api/json-rpc-provider-proxy/-/json-rpc-provider-proxy-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", - "integrity": "sha512-0hZ8vtjcsyCX8AyqP2sqUHa1TFFfxGWmlXJkit0Nqp9b32MwZqn5eaUAiV2rNuEpoglKOdKnkGtUF8t5MoodKw==", - "dev": true, - "optional": true - }, - "node_modules/@polkadot-api/metadata-builders": { - "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "resolved": "https://registry.npmjs.org/@polkadot-api/metadata-builders/-/metadata-builders-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", - "integrity": "sha512-BD7rruxChL1VXt0icC2gD45OtT9ofJlql0qIllHSRYgama1CR2Owt+ApInQxB+lWqM+xNOznZRpj8CXNDvKIMg==", - "dev": true, - "optional": true, - "dependencies": { - "@polkadot-api/substrate-bindings": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "@polkadot-api/utils": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0" - } - }, - "node_modules/@polkadot-api/substrate-bindings": { - "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-bindings/-/substrate-bindings-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", - "integrity": "sha512-N4vdrZopbsw8k57uG58ofO7nLXM4Ai7835XqakN27MkjXMp5H830A1KJE0L9sGQR7ukOCDEIHHcwXVrzmJ/PBg==", - "dev": true, - "optional": true, - "dependencies": { - "@noble/hashes": "^1.3.1", - "@polkadot-api/utils": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "@scure/base": "^1.1.1", - "scale-ts": "^1.6.0" - } - }, - "node_modules/@polkadot-api/substrate-bindings/node_modules/scale-ts": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-1.6.0.tgz", - "integrity": "sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q==", - "dev": true, - "optional": true - }, - "node_modules/@polkadot-api/substrate-client": { - "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "resolved": "https://registry.npmjs.org/@polkadot-api/substrate-client/-/substrate-client-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", - "integrity": "sha512-lcdvd2ssUmB1CPzF8s2dnNOqbrDa+nxaaGbuts+Vo8yjgSKwds2Lo7Oq+imZN4VKW7t9+uaVcKFLMF7PdH0RWw==", - "dev": true, - "optional": true - }, - "node_modules/@polkadot-api/utils": { - "version": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "resolved": "https://registry.npmjs.org/@polkadot-api/utils/-/utils-0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0.tgz", - "integrity": "sha512-0CYaCjfLQJTCRCiYvZ81OncHXEKPzAexCMoVloR+v2nl/O2JRya/361MtPkeNLC6XBoaEgLAG9pWQpH3WePzsw==", - "dev": true, - "optional": true - }, - "node_modules/@polkadot/api": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/api/-/api-10.13.1.tgz", - "integrity": "sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==", - "dev": true, - "dependencies": { - "@polkadot/api-augment": "10.13.1", - "@polkadot/api-base": "10.13.1", - "@polkadot/api-derive": "10.13.1", - "@polkadot/keyring": "^12.6.2", - "@polkadot/rpc-augment": "10.13.1", - "@polkadot/rpc-core": "10.13.1", - "@polkadot/rpc-provider": "10.13.1", - "@polkadot/types": "10.13.1", - "@polkadot/types-augment": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/types-create": "10.13.1", - "@polkadot/types-known": "10.13.1", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "eventemitter3": "^5.0.1", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/api-augment": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-augment/-/api-augment-10.13.1.tgz", - "integrity": "sha512-IAKaCp19QxgOG4HKk9RAgUgC/VNVqymZ2GXfMNOZWImZhxRIbrK+raH5vN2MbWwtVHpjxyXvGsd1RRhnohI33A==", - "dev": true, - "dependencies": { - "@polkadot/api-base": "10.13.1", - "@polkadot/rpc-augment": "10.13.1", - "@polkadot/types": "10.13.1", - "@polkadot/types-augment": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/api-augment/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/api-base": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-base/-/api-base-10.13.1.tgz", - "integrity": "sha512-Okrw5hjtEjqSMOG08J6qqEwlUQujTVClvY1/eZkzKwNzPelWrtV6vqfyJklB7zVhenlxfxqhZKKcY7zWSW/q5Q==", - "dev": true, - "dependencies": { - "@polkadot/rpc-core": "10.13.1", - "@polkadot/types": "10.13.1", - "@polkadot/util": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/api-base/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/api-derive": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/api-derive/-/api-derive-10.13.1.tgz", - "integrity": "sha512-ef0H0GeCZ4q5Om+c61eLLLL29UxFC2/u/k8V1K2JOIU+2wD5LF7sjAoV09CBMKKHfkLenRckVk2ukm4rBqFRpg==", - "dev": true, - "dependencies": { - "@polkadot/api": "10.13.1", - "@polkadot/api-augment": "10.13.1", - "@polkadot/api-base": "10.13.1", - "@polkadot/rpc-core": "10.13.1", - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/api-derive/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/api/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/keyring": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/keyring/-/keyring-12.6.2.tgz", - "integrity": "sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==", - "dev": true, - "dependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/util-crypto": "12.6.2" - } - }, - "node_modules/@polkadot/keyring/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/networks": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/networks/-/networks-12.6.2.tgz", - "integrity": "sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==", - "dev": true, - "dependencies": { - "@polkadot/util": "12.6.2", - "@substrate/ss58-registry": "^1.44.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/networks/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/rpc-augment": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-augment/-/rpc-augment-10.13.1.tgz", - "integrity": "sha512-iLsWUW4Jcx3DOdVrSHtN0biwxlHuTs4QN2hjJV0gd0jo7W08SXhWabZIf9mDmvUJIbR7Vk+9amzvegjRyIf5+A==", - "dev": true, - "dependencies": { - "@polkadot/rpc-core": "10.13.1", - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/rpc-augment/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/rpc-core": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-core/-/rpc-core-10.13.1.tgz", - "integrity": "sha512-eoejSHa+/tzHm0vwic62/aptTGbph8vaBpbvLIK7gd00+rT813ROz5ckB1CqQBFB23nHRLuzzX/toY8ID3xrKw==", - "dev": true, - "dependencies": { - "@polkadot/rpc-augment": "10.13.1", - "@polkadot/rpc-provider": "10.13.1", - "@polkadot/types": "10.13.1", - "@polkadot/util": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/rpc-core/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/rpc-provider": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/rpc-provider/-/rpc-provider-10.13.1.tgz", - "integrity": "sha512-oJ7tatVXYJ0L7NpNiGd69D558HG5y5ZDmH2Bp9Dd4kFTQIiV8A39SlWwWUPCjSsen9lqSvvprNLnG/VHTpenbw==", - "dev": true, - "dependencies": { - "@polkadot/keyring": "^12.6.2", - "@polkadot/types": "10.13.1", - "@polkadot/types-support": "10.13.1", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "@polkadot/x-fetch": "^12.6.2", - "@polkadot/x-global": "^12.6.2", - "@polkadot/x-ws": "^12.6.2", - "eventemitter3": "^5.0.1", - "mock-socket": "^9.3.1", - "nock": "^13.5.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@substrate/connect": "0.8.8" - } - }, - "node_modules/@polkadot/rpc-provider/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/types": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/types/-/types-10.13.1.tgz", - "integrity": "sha512-Hfvg1ZgJlYyzGSAVrDIpp3vullgxrjOlh/CSThd/PI4TTN1qHoPSFm2hs77k3mKkOzg+LrWsLE0P/LP2XddYcw==", - "dev": true, - "dependencies": { - "@polkadot/keyring": "^12.6.2", - "@polkadot/types-augment": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/types-create": "10.13.1", - "@polkadot/util": "^12.6.2", - "@polkadot/util-crypto": "^12.6.2", - "rxjs": "^7.8.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/types-augment": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-augment/-/types-augment-10.13.1.tgz", - "integrity": "sha512-TcrLhf95FNFin61qmVgOgayzQB/RqVsSg9thAso1Fh6pX4HSbvI35aGPBAn3SkA6R+9/TmtECirpSNLtIGFn0g==", - "dev": true, - "dependencies": { - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/types-augment/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/types-codec": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-codec/-/types-codec-10.13.1.tgz", - "integrity": "sha512-AiQ2Vv2lbZVxEdRCN8XSERiWlOWa2cTDLnpAId78EnCtx4HLKYQSd+Jk9Y4BgO35R79mchK4iG+w6gZ+ukG2bg==", - "dev": true, - "dependencies": { - "@polkadot/util": "^12.6.2", - "@polkadot/x-bigint": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/types-codec/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/types-create": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-create/-/types-create-10.13.1.tgz", - "integrity": "sha512-Usn1jqrz35SXgCDAqSXy7mnD6j4RvB4wyzTAZipFA6DGmhwyxxIgOzlWQWDb+1PtPKo9vtMzen5IJ+7w5chIeA==", - "dev": true, - "dependencies": { - "@polkadot/types-codec": "10.13.1", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/types-create/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/types-known": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-known/-/types-known-10.13.1.tgz", - "integrity": "sha512-uHjDW05EavOT5JeU8RbiFWTgPilZ+odsCcuEYIJGmK+es3lk/Qsdns9Zb7U7NJl7eJ6OWmRtyrWsLs+bU+jjIQ==", - "dev": true, - "dependencies": { - "@polkadot/networks": "^12.6.2", - "@polkadot/types": "10.13.1", - "@polkadot/types-codec": "10.13.1", - "@polkadot/types-create": "10.13.1", - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/types-known/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/types-support": { - "version": "10.13.1", - "resolved": "https://registry.npmjs.org/@polkadot/types-support/-/types-support-10.13.1.tgz", - "integrity": "sha512-4gEPfz36XRQIY7inKq0HXNVVhR6HvXtm7yrEmuBuhM86LE0lQQBkISUSgR358bdn2OFSLMxMoRNoh3kcDvdGDQ==", - "dev": true, - "dependencies": { - "@polkadot/util": "^12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/types-support/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/types/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/util": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util/-/util-12.6.2.tgz", - "integrity": "sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==", - "dev": true, - "dependencies": { - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-global": "12.6.2", - "@polkadot/x-textdecoder": "12.6.2", - "@polkadot/x-textencoder": "12.6.2", - "@types/bn.js": "^5.1.5", - "bn.js": "^5.2.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/util-crypto": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/util-crypto/-/util-crypto-12.6.2.tgz", - "integrity": "sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==", - "dev": true, - "dependencies": { - "@noble/curves": "^1.3.0", - "@noble/hashes": "^1.3.3", - "@polkadot/networks": "12.6.2", - "@polkadot/util": "12.6.2", - "@polkadot/wasm-crypto": "^7.3.2", - "@polkadot/wasm-util": "^7.3.2", - "@polkadot/x-bigint": "12.6.2", - "@polkadot/x-randomvalues": "12.6.2", - "@scure/base": "^1.1.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2" - } - }, - "node_modules/@polkadot/util-crypto/node_modules/@noble/curves": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.5.0.tgz", - "integrity": "sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@polkadot/util-crypto/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@polkadot/util-crypto/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/util/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/wasm-bridge": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-bridge/-/wasm-bridge-7.3.2.tgz", - "integrity": "sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==", - "dev": true, - "dependencies": { - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/wasm-bridge/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/wasm-crypto": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto/-/wasm-crypto-7.3.2.tgz", - "integrity": "sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==", - "dev": true, - "dependencies": { - "@polkadot/wasm-bridge": "7.3.2", - "@polkadot/wasm-crypto-asmjs": "7.3.2", - "@polkadot/wasm-crypto-init": "7.3.2", - "@polkadot/wasm-crypto-wasm": "7.3.2", - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/wasm-crypto-asmjs": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-7.3.2.tgz", - "integrity": "sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/wasm-crypto-asmjs/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/wasm-crypto-init": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-init/-/wasm-crypto-init-7.3.2.tgz", - "integrity": "sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==", - "dev": true, - "dependencies": { - "@polkadot/wasm-bridge": "7.3.2", - "@polkadot/wasm-crypto-asmjs": "7.3.2", - "@polkadot/wasm-crypto-wasm": "7.3.2", - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*", - "@polkadot/x-randomvalues": "*" - } - }, - "node_modules/@polkadot/wasm-crypto-init/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/wasm-crypto-wasm": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-7.3.2.tgz", - "integrity": "sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==", - "dev": true, - "dependencies": { - "@polkadot/wasm-util": "7.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/wasm-crypto-wasm/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/wasm-crypto/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/wasm-util": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/@polkadot/wasm-util/-/wasm-util-7.3.2.tgz", - "integrity": "sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "*" - } - }, - "node_modules/@polkadot/wasm-util/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/x-bigint": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-bigint/-/x-bigint-12.6.2.tgz", - "integrity": "sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==", - "dev": true, - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/x-bigint/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/x-fetch": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-fetch/-/x-fetch-12.6.2.tgz", - "integrity": "sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==", - "dev": true, - "dependencies": { - "@polkadot/x-global": "12.6.2", - "node-fetch": "^3.3.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/x-fetch/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/x-global": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-global/-/x-global-12.6.2.tgz", - "integrity": "sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==", - "dev": true, - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/x-global/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/x-randomvalues": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-randomvalues/-/x-randomvalues-12.6.2.tgz", - "integrity": "sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==", - "dev": true, - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@polkadot/util": "12.6.2", - "@polkadot/wasm-util": "*" - } - }, - "node_modules/@polkadot/x-randomvalues/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/x-textdecoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textdecoder/-/x-textdecoder-12.6.2.tgz", - "integrity": "sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==", - "dev": true, - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/x-textdecoder/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/x-textencoder": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-textencoder/-/x-textencoder-12.6.2.tgz", - "integrity": "sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==", - "dev": true, - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/x-textencoder/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@polkadot/x-ws": { - "version": "12.6.2", - "resolved": "https://registry.npmjs.org/@polkadot/x-ws/-/x-ws-12.6.2.tgz", - "integrity": "sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==", - "dev": true, - "dependencies": { - "@polkadot/x-global": "12.6.2", - "tslib": "^2.6.2", - "ws": "^8.15.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@polkadot/x-ws/node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/@scure/base": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.6.tgz", - "integrity": "sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==", - "dev": true, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.3.tgz", - "integrity": "sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/curves": "~1.3.0", - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", - "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "~1.3.2", - "@scure/base": "~1.1.4" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/core/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/@solana/buffer-layout": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz", - "integrity": "sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==", - "dev": true, - "dependencies": { - "buffer": "~6.0.3" - }, - "engines": { - "node": ">=5.10" - } - }, - "node_modules/@solana/web3.js": { - "version": "1.95.2", - "resolved": "https://registry.npmjs.org/@solana/web3.js/-/web3.js-1.95.2.tgz", - "integrity": "sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.24.8", - "@noble/curves": "^1.4.2", - "@noble/hashes": "^1.4.0", - "@solana/buffer-layout": "^4.0.1", - "agentkeepalive": "^4.5.0", - "bigint-buffer": "^1.1.5", - "bn.js": "^5.2.1", - "borsh": "^0.7.0", - "bs58": "^4.0.1", - "buffer": "6.0.3", - "fast-stable-stringify": "^1.0.0", - "jayson": "^4.1.1", - "node-fetch": "^2.7.0", - "rpc-websockets": "^9.0.2", - "superstruct": "^2.0.2" - } - }, - "node_modules/@solana/web3.js/node_modules/@noble/curves": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.5.0.tgz", - "integrity": "sha512-J5EKamIHnKPyClwVrzmaf5wSdQXgdHcPZIZLu3bwnbeCx8/7NPK5q2ZBWF+5FvYGByjiQQsJYX6jfgB2wDPn3A==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.4.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@solana/web3.js/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@solana/web3.js/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@solidity-parser/parser": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.14.5.tgz", - "integrity": "sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==", - "dev": true, - "peer": true, - "dependencies": { - "antlr4ts": "^0.5.0-alpha.4" - } - }, - "node_modules/@substrate/connect": { - "version": "0.8.8", - "resolved": "https://registry.npmjs.org/@substrate/connect/-/connect-0.8.8.tgz", - "integrity": "sha512-zwaxuNEVI9bGt0rT8PEJiXOyebLIo6QN1SyiAHRPBOl6g3Sy0KKdSN8Jmyn++oXhVRD8aIe75/V8ZkS81T+BPQ==", - "deprecated": "versions below 1.x are no longer maintained", - "dev": true, - "optional": true, - "dependencies": { - "@substrate/connect-extension-protocol": "^2.0.0", - "@substrate/connect-known-chains": "^1.1.1", - "@substrate/light-client-extension-helpers": "^0.0.4", - "smoldot": "2.0.22" - } - }, - "node_modules/@substrate/connect-extension-protocol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@substrate/connect-extension-protocol/-/connect-extension-protocol-2.0.0.tgz", - "integrity": "sha512-nKu8pDrE3LNCEgJjZe1iGXzaD6OSIDD4Xzz/yo4KO9mQ6LBvf49BVrt4qxBFGL6++NneLiWUZGoh+VSd4PyVIg==", - "dev": true, - "optional": true - }, - "node_modules/@substrate/connect-known-chains": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@substrate/connect-known-chains/-/connect-known-chains-1.2.2.tgz", - "integrity": "sha512-gOGrXSWA2d/3kf8Yco00VlHZl48smzAGW5Z9MDxMht98hRpT2yEEN4N5QdoEKMI4ihDW8goXGzmp79D0hFPpuA==", - "dev": true, - "optional": true - }, - "node_modules/@substrate/light-client-extension-helpers": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@substrate/light-client-extension-helpers/-/light-client-extension-helpers-0.0.4.tgz", - "integrity": "sha512-vfKcigzL0SpiK+u9sX6dq2lQSDtuFLOxIJx2CKPouPEHIs8C+fpsufn52r19GQn+qDhU8POMPHOVoqLktj8UEA==", - "dev": true, - "optional": true, - "dependencies": { - "@polkadot-api/client": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "@polkadot-api/json-rpc-provider": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "@polkadot-api/json-rpc-provider-proxy": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "@polkadot-api/substrate-client": "0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0", - "@substrate/connect-extension-protocol": "^2.0.0", - "@substrate/connect-known-chains": "^1.1.1", - "rxjs": "^7.8.1" - }, - "peerDependencies": { - "smoldot": "2.x" - } - }, - "node_modules/@substrate/ss58-registry": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/@substrate/ss58-registry/-/ss58-registry-1.49.0.tgz", - "integrity": "sha512-leW6Ix4LD7XgvxT7+aobPWSw+WvPcN2Rxof1rmd0mNC5t2n99k1N7UNEvz7YEFSOUeHWmKIY7F5q8KeIqYoHfA==", - "dev": true - }, - "node_modules/@swc/helpers": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.12.tgz", - "integrity": "sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@typechain/ethers-v6": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz", - "integrity": "sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "ethers": "6.x", - "typechain": "^8.3.2", - "typescript": ">=4.7.0" - } - }, - "node_modules/@typechain/hardhat": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-9.1.0.tgz", - "integrity": "sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==", - "dev": true, - "peer": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@typechain/ethers-v6": "^0.5.1", - "ethers": "^6.1.0", - "hardhat": "^2.9.9", - "typechain": "^8.3.2" - } - }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "peer": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@types/bn.js": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", - "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.16", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.16.tgz", - "integrity": "sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ==", - "dev": true - }, - "node_modules/@types/chai-as-promised": { - "version": "7.1.8", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz", - "integrity": "sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/fs-extra": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", - "dev": true, - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/jsonfile": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "peer": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.7.tgz", - "integrity": "sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.14.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.1.tgz", - "integrity": "sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true, - "peer": true - }, - "node_modules/@types/ps-tree": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@types/ps-tree/-/ps-tree-1.1.6.tgz", - "integrity": "sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true, - "peer": true - }, - "node_modules/@types/secp256k1": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", - "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "node_modules/@types/which": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.4.tgz", - "integrity": "sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.5.12", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", - "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true, - "peer": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/add": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/add/-/add-2.0.6.tgz", - "integrity": "sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==", - "dev": true - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "engines": { - "node": ">=0.3.0" - } - }, - "node_modules/aes-js": { - "version": "4.0.0-beta.5", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", - "dev": true, - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.15.0.tgz", - "integrity": "sha512-15BTtQUOsSrmHCy+B4VnAiJAJxJ8IFgu6fcjFQF3jQYZ78nLSQthlFg4ehp+NLIyfvFgOlxNsjKIEhydtFPVHQ==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.3.0", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/antlr4ts": { - "version": "0.5.0-alpha.4", - "resolved": "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz", - "integrity": "sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==", - "dev": true, - "peer": true - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "peer": true - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true, - "peer": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "peer": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", - "dev": true, - "peer": true, - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "node_modules/bigint-buffer": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bigint-buffer/-/bigint-buffer-1.1.5.tgz", - "integrity": "sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.3.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bip174": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bip174/-/bip174-2.1.1.tgz", - "integrity": "sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bitcoinjs-lib": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/bitcoinjs-lib/-/bitcoinjs-lib-6.1.6.tgz", - "integrity": "sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA==", - "dev": true, - "dependencies": { - "@noble/hashes": "^1.2.0", - "bech32": "^2.0.0", - "bip174": "^2.1.1", - "bs58check": "^3.0.1", - "typeforce": "^1.11.3", - "varuint-bitcoin": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/bitcoinjs-lib/node_modules/base-x": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.0.tgz", - "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==", - "dev": true - }, - "node_modules/bitcoinjs-lib/node_modules/bech32": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", - "dev": true - }, - "node_modules/bitcoinjs-lib/node_modules/bs58": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-5.0.0.tgz", - "integrity": "sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==", - "dev": true, - "dependencies": { - "base-x": "^4.0.0" - } - }, - "node_modules/bitcoinjs-lib/node_modules/bs58check": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-3.0.1.tgz", - "integrity": "sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==", - "dev": true, - "dependencies": { - "@noble/hashes": "^1.2.0", - "bs58": "^5.0.0" - } - }, - "node_modules/bitcoinjs-message": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/bitcoinjs-message/-/bitcoinjs-message-2.2.0.tgz", - "integrity": "sha512-103Wy3xg8Y9o+pdhGP4M3/mtQQuUWs6sPuOp1mYphSUoSMHjHTlkj32K4zxU8qMH0Ckv23emfkGlFWtoWZ7YFA==", - "dev": true, - "dependencies": { - "bech32": "^1.1.3", - "bs58check": "^2.1.2", - "buffer-equals": "^1.0.3", - "create-hash": "^1.1.2", - "secp256k1": "^3.0.1", - "varuint-bitcoin": "^1.0.1" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/bitcoinjs-message/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/bitcoinjs-message/node_modules/secp256k1": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.8.0.tgz", - "integrity": "sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "bip66": "^1.1.5", - "bn.js": "^4.11.8", - "create-hash": "^1.2.0", - "drbg.js": "^1.0.1", - "elliptic": "^6.5.2", - "nan": "^2.14.0", - "safe-buffer": "^5.1.2" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/borsh": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/borsh/-/borsh-0.7.0.tgz", - "integrity": "sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.0", - "bs58": "^4.0.0", - "text-encoding-utf-8": "^1.0.2" - } - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "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" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equals": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/buffer-equals/-/buffer-equals-1.0.4.tgz", - "integrity": "sha512-99MsCq0j5+RhubVEtKQgKaD6EM+UP3xJgIvQqwJ3SOLDUekzxMX1ylXBng+Wa2sh7mGT0W6RUly8ojjr1Tt6nA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/bufferutil": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", - "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true, - "peer": true - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "peer": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", - "dev": true, - "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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chai-as-promised": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-8.0.0.tgz", - "integrity": "sha512-sMsGXTrS3FunP/wbqh/KxM8Kj/aLPXQGkNtvE5wPfSToq8wkkvBpTZo1LIiEVmC4BwkKpag+l5h/20lBMk6nUg==", - "dev": true, - "dependencies": { - "check-error": "^2.0.0" - }, - "peerDependencies": { - "chai": ">= 2.1.2 < 6" - } - }, - "node_modules/chai-as-promised/node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "engines": { - "node": ">= 16" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/chnl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/chnl/-/chnl-1.2.0.tgz", - "integrity": "sha512-g5gJb59edwCliFbX2j7G6sBfY4sX9YLy211yctONI2GRaiX0f2zIbKWmBm+sPqFNEpM7Ljzm7IJX/xrjiEbPrw==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", - "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", - "dev": true, - "peer": true, - "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^2.1.1" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "colors": "^1.1.2" - } - }, - "node_modules/cli-table3/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "peer": true, - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-table3/node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "peer": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/command-line-usage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "peer": true, - "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" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "peer": true - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "peer": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "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" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/death": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", - "integrity": "sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==", - "dev": true, - "peer": true - }, - "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delay": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delay/-/delay-5.0.0.tgz", - "integrity": "sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/difflib": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/difflib/-/difflib-0.2.4.tgz", - "integrity": "sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==", - "dev": true, - "peer": true, - "dependencies": { - "heap": ">= 0.2.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.6", - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/ecpair": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ecpair/-/ecpair-2.1.0.tgz", - "integrity": "sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0", - "typeforce": "^1.18.0", - "wif": "^2.0.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "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" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "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.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "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.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "node_modules/es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==", - "dev": true, - "dependencies": { - "es6-promise": "^4.0.3" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, - "peer": true, - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.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.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" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eth-gas-reporter": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz", - "integrity": "sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==", - "dev": true, - "peer": true, - "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" - }, - "peerDependencies": { - "@codechecks/client": "^0.1.0" - }, - "peerDependenciesMeta": { - "@codechecks/client": { - "optional": true - } - } - }, - "node_modules/eth-gas-reporter/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "peer": true - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "peer": true, - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "peer": true, - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/eth-gas-reporter/node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "peer": true, - "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" - } - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz", - "integrity": "sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "^1.4.0" - } - }, - "node_modules/ethereum-bloom-filters/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "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" - } - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-abi/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/ethereumjs-abi/node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "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" - } - }, - "node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethers": { - "version": "6.13.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.2.tgz", - "integrity": "sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/ethers-io/" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@adraffy/ens-normalize": "1.10.1", - "@noble/curves": "1.2.0", - "@noble/hashes": "1.3.2", - "@types/node": "18.15.13", - "aes-js": "4.0.0-beta.5", - "tslib": "2.4.0", - "ws": "8.17.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/ethers/node_modules/@types/node": { - "version": "18.15.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", - "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", - "dev": true - }, - "node_modules/ethers/node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", - "dev": true, - "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 - } - } - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true, - "peer": true - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", - "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", - "dev": true - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", - "dev": true, - "engines": { - "node": "> 0.1.90" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-stable-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz", - "integrity": "sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==", - "dev": true - }, - "node_modules/fast-uri": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz", - "integrity": "sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==", - "dev": true, - "peer": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", - "dev": true, - "peer": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/fx": { - "version": "35.0.0", - "resolved": "https://registry.npmjs.org/fx/-/fx-35.0.0.tgz", - "integrity": "sha512-O07q+Lknrom5RUX/u53tjo2KTTLUnL0K703JbqMYb19ORijfJNvijzFqqYXEjdk25T9R14S6t6wHD8fCWXCM0g==", - "dev": true, - "bin": { - "fx": "index.js" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ghost-testrpc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz", - "integrity": "sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==", - "dev": true, - "peer": true, - "dependencies": { - "chalk": "^2.4.2", - "node-emoji": "^1.10.0" - }, - "bin": { - "testrpc-sc": "index.js" - } - }, - "node_modules/ghost-testrpc/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ghost-testrpc/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/ghost-testrpc/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ghost-testrpc/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ghost-testrpc/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "peer": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "peer": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hardhat": { - "version": "2.22.8", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.22.8.tgz", - "integrity": "sha512-hPh2feBGRswkXkoXUFW6NbxgiYtEzp/3uvVFjYROy6fA9LH8BobUyxStlyhSKj4+v1Y23ZoUBOVWL84IcLACrA==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/edr": "^0.5.2", - "@nomicfoundation/ethereumjs-common": "4.0.4", - "@nomicfoundation/ethereumjs-tx": "5.0.4", - "@nomicfoundation/ethereumjs-util": "9.0.4", - "@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.8.26", - "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" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat-gas-reporter": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz", - "integrity": "sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==", - "dev": true, - "peer": true, - "dependencies": { - "array-uniq": "1.0.3", - "eth-gas-reporter": "^0.2.25", - "sha1": "^1.1.1" - }, - "peerDependencies": { - "hardhat": "^2.0.2" - } - }, - "node_modules/hardhat/node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/hardhat/node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/hardhat/node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/hardhat/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/hardhat/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/hardhat/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/hardhat/node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/hardhat/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/hardhat/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hardhat/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/hardhat/node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "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 - } - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==", - "dev": true, - "peer": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dev": true, - "peer": true, - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true, - "peer": true - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.2.tgz", - "integrity": "sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==", - "dev": true, - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "peer": true - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true, - "peer": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isomorphic-ws": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz", - "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", - "dev": true, - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/jayson": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jayson/-/jayson-4.1.1.tgz", - "integrity": "sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==", - "dev": true, - "dependencies": { - "@types/connect": "^3.4.33", - "@types/node": "^12.12.54", - "@types/ws": "^7.4.4", - "commander": "^2.20.3", - "delay": "^5.0.0", - "es6-promisify": "^5.0.0", - "eyes": "^0.1.8", - "isomorphic-ws": "^4.0.1", - "json-stringify-safe": "^5.0.1", - "JSONStream": "^1.3.5", - "uuid": "^8.3.2", - "ws": "^7.5.10" - }, - "bin": { - "jayson": "bin/jayson.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jayson/node_modules/@types/node": { - "version": "12.20.55", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", - "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==", - "dev": true - }, - "node_modules/jayson/node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/jayson/node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", - "dev": true, - "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 - } - } - }, - "node_modules/js-base64": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", - "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", - "dev": true - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/jsonschema": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", - "integrity": "sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==", - "dev": true, - "peer": true, - "engines": { - "node": "*" - } - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/keccak": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", - "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true, - "peer": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "dev": true, - "peer": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "peer": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==", - "dev": true - }, - "node_modules/markdown-table": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", - "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", - "dev": true, - "peer": true - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micro-base58": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/micro-base58/-/micro-base58-0.5.1.tgz", - "integrity": "sha512-iwqAmg66VjB2LA3BcUxyrOyqck4HLLtSzKnx2VQSnN5piQji598N15P8RRx2d6lPvJ98B1b0cl2VbvQeFeWdig==", - "dev": true - }, - "node_modules/micro-ftch": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", - "dev": true, - "peer": true - }, - "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "peer": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "peer": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.4.0.tgz", - "integrity": "sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==", - "dev": true, - "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" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha-steps": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/mocha-steps/-/mocha-steps-1.3.0.tgz", - "integrity": "sha512-KZvpMJTqzLZw3mOb+EEuYi4YZS41C9iTnb7skVFRxHjUd1OYbl64tCMSmpdIRM9LnwIrSOaRfPtNpF5msgv6Eg==", - "dev": true - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mock-socket": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/mock-socket/-/mock-socket-9.3.1.tgz", - "integrity": "sha512-qxBgB7Qa2sEQgHFjj0dSigq7fX4k6Saisd5Nelwp2q8mlbAFh5dHV9JTTlF8viYJLSSWgMCZFUom8PJcMNBoJw==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nan": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz", - "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/ndjson": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", - "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", - "dev": true, - "peer": true, - "dependencies": { - "json-stringify-safe": "^5.0.1", - "minimist": "^1.2.5", - "readable-stream": "^3.6.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "ndjson": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "peer": true - }, - "node_modules/nock": { - "version": "13.5.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.4.tgz", - "integrity": "sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "propagate": "^2.0.0" - }, - "engines": { - "node": ">= 10.13" - } - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dev": true, - "peer": true, - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", - "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "peer": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, - "peer": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true, - "peer": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "peer": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ordinal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ordinal/-/ordinal-1.0.3.tgz", - "integrity": "sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==", - "dev": true, - "peer": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", - "dev": true, - "peer": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dev": true, - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "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" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-solidity": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.3.1.tgz", - "integrity": "sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==", - "dev": true, - "dependencies": { - "@solidity-parser/parser": "^0.17.0", - "semver": "^7.5.4", - "solidity-comments-extractor": "^0.0.8" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "prettier": ">=2.3.0" - } - }, - "node_modules/prettier-plugin-solidity/node_modules/@solidity-parser/parser": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.17.0.tgz", - "integrity": "sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==", - "dev": true - }, - "node_modules/prettier-plugin-solidity/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "peer": true - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "peer": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/promise-controller": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promise-controller/-/promise-controller-1.0.0.tgz", - "integrity": "sha512-goA0zA9L91tuQbUmiMinSYqlyUtEgg4fxJcjYnLYOQnrktb4o4UqciXDNXiRUPiDBPACmsr1k8jDW4r7UDq9Qw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/promise.prototype.finally": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.8.tgz", - "integrity": "sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.0.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/promised-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/promised-map/-/promised-map-1.0.0.tgz", - "integrity": "sha512-fP9VSMgcml+U2uJ9PBc4/LDQ3ZkJCH4blLNCS6gbH7RHyRZCYs91zxWHqiUy+heFiEMiB2op/qllYoFqmIqdWA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "peer": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true, - "peer": true - }, - "node_modules/ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", - "dev": true, - "peer": true, - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "peer": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "peer": true, - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/req-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-2.0.0.tgz", - "integrity": "sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==", - "dev": true, - "peer": true, - "dependencies": { - "req-from": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/req-from": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/req-from/-/req-from-2.0.0.tgz", - "integrity": "sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==", - "dev": true, - "peer": true, - "dependencies": { - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/rpc-websockets": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/rpc-websockets/-/rpc-websockets-9.0.2.tgz", - "integrity": "sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==", - "dev": true, - "dependencies": { - "@swc/helpers": "^0.5.11", - "@types/uuid": "^8.3.4", - "@types/ws": "^8.2.2", - "buffer": "^6.0.3", - "eventemitter3": "^5.0.1", - "uuid": "^8.3.2", - "ws": "^8.5.0" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/kozjak" - }, - "optionalDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sc-istanbul": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/sc-istanbul/-/sc-istanbul-0.4.6.tgz", - "integrity": "sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==", - "dev": true, - "peer": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/sc-istanbul/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "peer": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/sc-istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "peer": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/sc-istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "peer": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/sc-istanbul/node_modules/js-yaml/node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "peer": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sc-istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true, - "peer": true - }, - "node_modules/sc-istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/scale-ts": { - "version": "0.2.12", - "resolved": "https://registry.npmjs.org/scale-ts/-/scale-ts-0.2.12.tgz", - "integrity": "sha512-hNGuU5Yhohmp4BjFrNEioDkPAOWe6aYRDUlBi9FTxxmp1wZ8SAkDxAf/IobinuSa+J0a9srZEP73dqmYeyYYXg==", - "dev": true - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/sha1": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/sha1/-/sha1-1.1.1.tgz", - "integrity": "sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==", - "dev": true, - "peer": true, - "dependencies": { - "charenc": ">= 0.0.1", - "crypt": ">= 0.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "peer": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "peer": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/smoldot": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/smoldot/-/smoldot-2.0.22.tgz", - "integrity": "sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g==", - "dev": true, - "optional": true, - "dependencies": { - "ws": "^8.8.1" - } - }, - "node_modules/solc": { - "version": "0.8.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz", - "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==", - "dev": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solc.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/solc/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/solidity-comments-extractor": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/solidity-comments-extractor/-/solidity-comments-extractor-0.0.8.tgz", - "integrity": "sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==", - "dev": true - }, - "node_modules/solidity-coverage": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.8.12.tgz", - "integrity": "sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==", - "dev": true, - "peer": true, - "dependencies": { - "@ethersproject/abi": "^5.0.9", - "@solidity-parser/parser": "^0.18.0", - "chalk": "^2.4.2", - "death": "^1.1.0", - "difflib": "^0.2.4", - "fs-extra": "^8.1.0", - "ghost-testrpc": "^0.0.2", - "global-modules": "^2.0.0", - "globby": "^10.0.1", - "jsonschema": "^1.2.4", - "lodash": "^4.17.21", - "mocha": "^10.2.0", - "node-emoji": "^1.10.0", - "pify": "^4.0.1", - "recursive-readdir": "^2.2.2", - "sc-istanbul": "^0.4.5", - "semver": "^7.3.4", - "shelljs": "^0.8.3", - "web3-utils": "^1.3.6" - }, - "bin": { - "solidity-coverage": "plugins/bin.js" - }, - "peerDependencies": { - "hardhat": "^2.11.0" - } - }, - "node_modules/solidity-coverage/node_modules/@solidity-parser/parser": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.18.0.tgz", - "integrity": "sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==", - "dev": true, - "peer": true - }, - "node_modules/solidity-coverage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/solidity-coverage/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "peer": true - }, - "node_modules/solidity-coverage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/solidity-coverage/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/solidity-coverage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solidity-coverage/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/solidity-coverage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/solidity-coverage/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "peer": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "peer": true - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true, - "peer": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/superstruct": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/superstruct/-/superstruct-2.0.2.tgz", - "integrity": "sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dev": true, - "peer": true, - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dev": true, - "peer": true, - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "peer": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==", - "dev": true - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true, - "peer": true - }, - "node_modules/then-request/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "peer": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "peer": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/tiny-secp256k1": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/tiny-secp256k1/-/tiny-secp256k1-2.2.3.tgz", - "integrity": "sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==", - "dev": true, - "dependencies": { - "uint8array-tools": "0.0.7" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/ts-command-line-args": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz", - "integrity": "sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==", - "dev": true, - "peer": true, - "dependencies": { - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peer": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "peer": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typechain": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.3.2.tgz", - "integrity": "sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==", - "dev": true, - "peer": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "node_modules/typechain/node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typechain/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/typechain/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "peer": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typechain/node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "dev": true, - "peer": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/typechain/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true, - "peer": true - }, - "node_modules/typeforce": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/typeforce/-/typeforce-1.18.0.tgz", - "integrity": "sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uint8array-tools": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/uint8array-tools/-/uint8array-tools-0.0.7.tgz", - "integrity": "sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "5.28.4", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.4.tgz", - "integrity": "sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==", - "dev": true, - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true, - "peer": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/varuint-bitcoin": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz", - "integrity": "sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/web3-utils": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", - "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/@noble/curves": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.3.0.tgz", - "integrity": "sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/hashes": "1.3.3" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/@noble/hashes": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", - "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", - "dev": true, - "peer": true, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz", - "integrity": "sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==", - "dev": true, - "peer": true, - "dependencies": { - "@noble/curves": "1.3.0", - "@noble/hashes": "1.3.3", - "@scure/bip32": "1.3.3", - "@scure/bip39": "1.2.2" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/webpod": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/webpod/-/webpod-0.0.2.tgz", - "integrity": "sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==", - "dev": true, - "bin": { - "webpod": "dist/index.js" - } - }, - "node_modules/websocket-as-promised": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/websocket-as-promised/-/websocket-as-promised-2.1.0.tgz", - "integrity": "sha512-TpFh8+9XcxOX8s+pLh217OVUF+wZjxYOa9H1ay1T/YIT8gRdEVk/mfaZbvqgRzXbNRMQngBrLbCdXzz5Yl8K0Q==", - "dev": true, - "dependencies": { - "chnl": "^1.2.0", - "promise-controller": "^1.0.0", - "promise.prototype.finally": "^3.1.2", - "promised-map": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "peer": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wif": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/wif/-/wif-2.0.6.tgz", - "integrity": "sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==", - "dev": true, - "dependencies": { - "bs58check": "<3.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true, - "peer": true - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "peer": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "dev": true, - "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 - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zx": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/zx/-/zx-7.2.3.tgz", - "integrity": "sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==", - "dev": true, - "dependencies": { - "@types/fs-extra": "^11.0.1", - "@types/minimist": "^1.2.2", - "@types/node": "^18.16.3", - "@types/ps-tree": "^1.1.2", - "@types/which": "^3.0.0", - "chalk": "^5.2.0", - "fs-extra": "^11.1.1", - "fx": "*", - "globby": "^13.1.4", - "minimist": "^1.2.8", - "node-fetch": "3.3.1", - "ps-tree": "^1.2.0", - "webpod": "^0", - "which": "^3.0.0", - "yaml": "^2.2.2" - }, - "bin": { - "zx": "build/cli.js" - }, - "engines": { - "node": ">= 16.0.0" - } - }, - "node_modules/zx/node_modules/@types/node": { - "version": "18.19.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.43.tgz", - "integrity": "sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/zx/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/zx/node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/zx/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zx/node_modules/node-fetch": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.1.tgz", - "integrity": "sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/zx/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zx/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - } - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1bedf6e..1929af7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,24 +5,9 @@ settings: excludeLinksFromLockfile: false devDependencies: - '@ethersproject/providers': - specifier: ^5.7.2 - version: 5.7.2 '@litentry/chaindata': specifier: ^0.1.1 version: 0.1.1 - '@litentry/@litentry/parachain-api': - specifier: 0.9.18-11.2 - version: 0.9.18-11.2 - '@litentry/@litentry/sidechain-api': - specifier: 0.9.18-11 - version: 0.9.18-11 - '@litentry/vc-schema-validator': - specifier: ^0.0.1 - version: 0.0.1(ajv-formats@2.1.1)(ajv@8.17.1)(fast-glob@3.3.2)(tslib@2.6.3) - '@noble/ed25519': - specifier: ^1.7.3 - version: 1.7.3 '@nomicfoundation/hardhat-ethers': specifier: ^3.0.6 version: 3.0.6(ethers@6.13.2)(hardhat@2.22.8) @@ -36,149 +21,35 @@ devDependencies: specifier: ^4.9.6 version: 4.9.6 '@polkadot/api': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/api-augment': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/api-base': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/api-derive': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/keyring': - specifier: ^12.2.1 - version: 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) - '@polkadot/rpc-core': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/types': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/types-augment': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/types-codec': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/types-create': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/types-known': - specifier: ^10.9.1 - version: 10.13.1 - '@polkadot/types-support': - specifier: ^10.9.1 - version: 10.13.1 + specifier: ^12.2.3 + version: 12.3.1 '@polkadot/util': - specifier: ^12.5.1 - version: 12.6.2 - '@polkadot/util-crypto': - specifier: ^12.5.1 - version: 12.6.2(@polkadot/util@12.6.2) - '@solana/web3.js': - specifier: ^1.91.4 - version: 1.95.2 - '@types/chai': - specifier: ^4.3.3 - version: 4.3.17 + specifier: ^13.0.2 + version: 13.0.2 '@types/chai-as-promised': specifier: ^7.1.8 version: 7.1.8 - '@types/mocha': - specifier: ^10.0.7 - version: 10.0.7 - '@types/node': - specifier: ^20.4.4 - version: 20.14.14 '@types/ws': - specifier: ^8.5.3 + specifier: ^8.5.12 version: 8.5.12 - '@typescript-eslint/eslint-plugin': - specifier: ^5.60.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^5.60.0 - version: 5.62.0(eslint@8.57.0)(typescript@5.5.4) - add: - specifier: ^2.0.6 - version: 2.0.6 - bitcoinjs-lib: - specifier: ^6.1.5 - version: 6.1.6 - bitcoinjs-message: - specifier: ^2.2.0 - version: 2.2.0 - chai: - specifier: ^4.3.6 - version: 4.5.0 chai-as-promised: specifier: ^8.0.0 version: 8.0.0(chai@4.5.0) - colors: - specifier: ^1.4.0 - version: 1.4.0 - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - dotenv: - specifier: ^16.0.3 - version: 16.4.5 - ecpair: - specifier: ^2.1.0 - version: 2.1.0 - eslint: - specifier: ^8.43.0 - version: 8.57.0 ethers: specifier: ^6.13.1 version: 6.13.2 hardhat: - specifier: ^2.22.8 + specifier: ^2.22.6 version: 2.22.8(ts-node@10.9.2)(typescript@5.5.4) - js-base64: - specifier: ^3.7.5 - version: 3.7.7 - micro-base58: - specifier: ^0.5.1 - version: 0.5.1 - mocha: - specifier: ^10.1.0 - version: 10.7.0 - mocha-steps: - specifier: ^1.3.0 - version: 1.3.0 prettier: specifier: ^3.3.3 version: 3.3.3 prettier-plugin-solidity: specifier: ^1.3.1 version: 1.3.1(prettier@3.3.3) - scale-ts: - specifier: ^0.2.11 - version: 0.2.12 - tiny-secp256k1: - specifier: ^2.2.3 - version: 2.2.3 - ts-node: - specifier: ^10.9.2 - version: 10.9.2(@types/node@20.14.14)(typescript@5.5.4) - tweetnacl: - specifier: ^1.0.3 - version: 1.0.3 - typescript: - specifier: ^5.5.4 - version: 5.5.4 - websocket-as-promised: - specifier: ^2.0.1 - version: 2.1.0 ws: - specifier: ^8.17.1 - version: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - zx: - specifier: ^7.2.3 - version: 7.2.3 + specifier: ^8.18.0 + version: 8.18.0 packages: @@ -186,13 +57,6 @@ packages: resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} dev: true - /@babel/runtime@7.25.0: - resolution: {integrity: sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==} - engines: {node: '>=6.9.0'} - dependencies: - regenerator-runtime: 0.14.1 - dev: true - /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -200,43 +64,6 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.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.57.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@eslint-community/regexpp@4.11.0: - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} - 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.6(supports-color@8.1.1) - 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.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - /@ethereumjs/rlp@4.0.1: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} @@ -582,28 +409,6 @@ packages: engines: {node: '>=14'} dev: true - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6(supports-color@8.1.1) - 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.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - dev: true - /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} @@ -626,66 +431,6 @@ packages: tslib: 2.6.3 dev: true - /@litentry/@litentry/parachain-api@0.9.18-11.2: - resolution: {integrity: sha512-nnmX2o8j9Cbi6truI0CtIZ34dyAAKNGWmTIbfS5oXU3LVq20mdHErE8o9y/0j79yN+yFJwUvLpQMqanm6nwJYQ==} - dependencies: - '@polkadot/api': 10.13.1 - '@polkadot/api-augment': 10.13.1 - '@polkadot/api-base': 10.13.1 - '@polkadot/api-derive': 10.13.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) - '@polkadot/rpc-core': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-augment': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/types-create': 10.13.1 - '@polkadot/types-known': 10.13.1 - '@polkadot/types-support': 10.13.1 - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@litentry/@litentry/sidechain-api@0.9.18-11: - resolution: {integrity: sha512-iAcCyM8YkVdNjPs+CbhGpeUN2EnvTvvs8+HsiL660OTPRWHwLn7f3MuzrCcjBaHjKErtY2gJ9F/P6pskg5MOrg==} - dependencies: - '@polkadot/api': 10.13.1 - '@polkadot/api-augment': 10.13.1 - '@polkadot/api-base': 10.13.1 - '@polkadot/api-derive': 10.13.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) - '@polkadot/rpc-core': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-augment': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/types-create': 10.13.1 - '@polkadot/types-known': 10.13.1 - '@polkadot/types-support': 10.13.1 - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - - /@litentry/vc-schema-validator@0.0.1(ajv-formats@2.1.1)(ajv@8.17.1)(fast-glob@3.3.2)(tslib@2.6.3): - resolution: {integrity: sha512-Utnu2m/IPcGbqpopNsEdB1AvRimoL300dGpk/9g/8P16OemCHYxHE8j+n2JrHS+BUvH9upDiNMy5sbZPmDAAfQ==} - peerDependencies: - ajv: ^8.12.0 - ajv-formats: ^2.1.1 - fast-glob: ^3.3.2 - tslib: ^2.3.0 - dependencies: - ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) - fast-glob: 3.3.2 - tslib: 2.6.3 - dev: true - /@metamask/eth-sig-util@4.0.1: resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} engines: {node: '>=12.0.0'} @@ -715,10 +460,6 @@ packages: '@noble/hashes': 1.4.0 dev: true - /@noble/ed25519@1.7.3: - resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} - dev: true - /@noble/hashes@1.2.0: resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} dev: true @@ -1074,74 +815,74 @@ packages: resolution: {integrity: sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==} dev: true - /@polkadot-api/client@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0(rxjs@7.8.1): - resolution: {integrity: sha512-0fqK6pUKcGHSG2pBvY+gfSS+1mMdjd/qRygAcKI5d05tKsnZLRnmhb9laDguKmGEIB0Bz9vQqNK3gIN/cfvVwg==} + /@polkadot-api/json-rpc-provider-proxy@0.0.1: + resolution: {integrity: sha512-gmVDUP8LpCH0BXewbzqXF2sdHddq1H1q+XrAW2of+KZj4woQkIGBRGTJHeBEVHe30EB+UejR1N2dT4PO/RvDdg==} requiresBuild: true - peerDependencies: - rxjs: '>=7.8.0' - dependencies: - '@polkadot-api/metadata-builders': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 - '@polkadot-api/substrate-bindings': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 - '@polkadot-api/substrate-client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 - '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 - rxjs: 7.8.1 dev: true optional: true - /@polkadot-api/json-rpc-provider-proxy@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: - resolution: {integrity: sha512-0hZ8vtjcsyCX8AyqP2sqUHa1TFFfxGWmlXJkit0Nqp9b32MwZqn5eaUAiV2rNuEpoglKOdKnkGtUF8t5MoodKw==} + /@polkadot-api/json-rpc-provider@0.0.1: + resolution: {integrity: sha512-/SMC/l7foRjpykLTUTacIH05H3mr9ip8b5xxfwXlVezXrNVLp3Cv0GX6uItkKd+ZjzVPf3PFrDF2B2/HLSNESA==} requiresBuild: true dev: true optional: true - /@polkadot-api/json-rpc-provider@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: - resolution: {integrity: sha512-EaUS9Fc3wsiUr6ZS43PQqaRScW7kM6DYbuM/ou0aYjm8N9MBqgDbGm2oL6RE1vAVmOfEuHcXZuZkhzWtyvQUtA==} + /@polkadot-api/metadata-builders@0.0.1: + resolution: {integrity: sha512-GCI78BHDzXAF/L2pZD6Aod/yl82adqQ7ftNmKg51ixRL02JpWUA+SpUKTJE5MY1p8kiJJIo09P2um24SiJHxNA==} requiresBuild: true + dependencies: + '@polkadot-api/substrate-bindings': 0.0.1 + '@polkadot-api/utils': 0.0.1 dev: true optional: true - /@polkadot-api/metadata-builders@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: - resolution: {integrity: sha512-BD7rruxChL1VXt0icC2gD45OtT9ofJlql0qIllHSRYgama1CR2Owt+ApInQxB+lWqM+xNOznZRpj8CXNDvKIMg==} + /@polkadot-api/observable-client@0.1.0(rxjs@7.8.1): + resolution: {integrity: sha512-GBCGDRztKorTLna/unjl/9SWZcRmvV58o9jwU2Y038VuPXZcr01jcw/1O3x+yeAuwyGzbucI/mLTDa1QoEml3A==} requiresBuild: true + peerDependencies: + rxjs: '>=7.8.0' dependencies: - '@polkadot-api/substrate-bindings': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 - '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/metadata-builders': 0.0.1 + '@polkadot-api/substrate-bindings': 0.0.1 + '@polkadot-api/substrate-client': 0.0.1 + '@polkadot-api/utils': 0.0.1 + rxjs: 7.8.1 dev: true optional: true - /@polkadot-api/substrate-bindings@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: - resolution: {integrity: sha512-N4vdrZopbsw8k57uG58ofO7nLXM4Ai7835XqakN27MkjXMp5H830A1KJE0L9sGQR7ukOCDEIHHcwXVrzmJ/PBg==} + /@polkadot-api/substrate-bindings@0.0.1: + resolution: {integrity: sha512-bAe7a5bOPnuFVmpv7y4BBMRpNTnMmE0jtTqRUw/+D8ZlEHNVEJQGr4wu3QQCl7k1GnSV1wfv3mzIbYjErEBocg==} requiresBuild: true dependencies: '@noble/hashes': 1.4.0 - '@polkadot-api/utils': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/utils': 0.0.1 '@scure/base': 1.1.7 scale-ts: 1.6.0 dev: true optional: true - /@polkadot-api/substrate-client@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: - resolution: {integrity: sha512-lcdvd2ssUmB1CPzF8s2dnNOqbrDa+nxaaGbuts+Vo8yjgSKwds2Lo7Oq+imZN4VKW7t9+uaVcKFLMF7PdH0RWw==} + /@polkadot-api/substrate-client@0.0.1: + resolution: {integrity: sha512-9Bg9SGc3AwE+wXONQoW8GC00N3v6lCZLW74HQzqB6ROdcm5VAHM4CB/xRzWSUF9CXL78ugiwtHx3wBcpx4H4Wg==} requiresBuild: true dev: true optional: true - /@polkadot-api/utils@0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0: - resolution: {integrity: sha512-0CYaCjfLQJTCRCiYvZ81OncHXEKPzAexCMoVloR+v2nl/O2JRya/361MtPkeNLC6XBoaEgLAG9pWQpH3WePzsw==} + /@polkadot-api/utils@0.0.1: + resolution: {integrity: sha512-3j+pRmlF9SgiYDabSdZsBSsN5XHbpXOAce1lWj56IEEaFZVjsiCaxDOA7C9nCcgfVXuvnbxqqEGQvnY+QfBAUw==} requiresBuild: true dev: true optional: true - /@polkadot/api-augment@10.13.1: - resolution: {integrity: sha512-IAKaCp19QxgOG4HKk9RAgUgC/VNVqymZ2GXfMNOZWImZhxRIbrK+raH5vN2MbWwtVHpjxyXvGsd1RRhnohI33A==} + /@polkadot/api-augment@12.3.1: + resolution: {integrity: sha512-KfofZVEUeTgLzcexdxKBT2vihazDheUoTLxbsa2ztmmw4UB/IjOL911y04pjg2obZQAI9B+oCyxJXyCfzauWEg==} engines: {node: '>=18'} dependencies: - '@polkadot/api-base': 10.13.1 - '@polkadot/rpc-augment': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-augment': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/util': 12.6.2 + '@polkadot/api-base': 12.3.1 + '@polkadot/rpc-augment': 12.3.1 + '@polkadot/types': 12.3.1 + '@polkadot/types-augment': 12.3.1 + '@polkadot/types-codec': 12.3.1 + '@polkadot/util': 13.0.2 tslib: 2.6.3 transitivePeerDependencies: - bufferutil @@ -1149,13 +890,13 @@ packages: - utf-8-validate dev: true - /@polkadot/api-base@10.13.1: - resolution: {integrity: sha512-Okrw5hjtEjqSMOG08J6qqEwlUQujTVClvY1/eZkzKwNzPelWrtV6vqfyJklB7zVhenlxfxqhZKKcY7zWSW/q5Q==} + /@polkadot/api-base@12.3.1: + resolution: {integrity: sha512-vNbxXNjn4APfXg+ui99gurX2Jzns+eezmWranxoGXT7q0mme1zAtWus5t4e+qe1qRjDNZZYPruF7YJA8dL5k8A==} engines: {node: '>=18'} dependencies: - '@polkadot/rpc-core': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/util': 12.6.2 + '@polkadot/rpc-core': 12.3.1 + '@polkadot/types': 12.3.1 + '@polkadot/util': 13.0.2 rxjs: 7.8.1 tslib: 2.6.3 transitivePeerDependencies: @@ -1164,18 +905,18 @@ packages: - utf-8-validate dev: true - /@polkadot/api-derive@10.13.1: - resolution: {integrity: sha512-ef0H0GeCZ4q5Om+c61eLLLL29UxFC2/u/k8V1K2JOIU+2wD5LF7sjAoV09CBMKKHfkLenRckVk2ukm4rBqFRpg==} + /@polkadot/api-derive@12.3.1: + resolution: {integrity: sha512-2MbK1h4GcKEdSgDKKYI28iZESw0VOm0kekV6YGQflZNWe84jJOn2rohP8pACseUjQjwWDgbPPBvTlRZTk7zdAw==} engines: {node: '>=18'} dependencies: - '@polkadot/api': 10.13.1 - '@polkadot/api-augment': 10.13.1 - '@polkadot/api-base': 10.13.1 - '@polkadot/rpc-core': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + '@polkadot/api': 12.3.1 + '@polkadot/api-augment': 12.3.1 + '@polkadot/api-base': 12.3.1 + '@polkadot/rpc-core': 12.3.1 + '@polkadot/types': 12.3.1 + '@polkadot/types-codec': 12.3.1 + '@polkadot/util': 13.0.2 + '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) rxjs: 7.8.1 tslib: 2.6.3 transitivePeerDependencies: @@ -1184,24 +925,24 @@ packages: - utf-8-validate dev: true - /@polkadot/api@10.13.1: - resolution: {integrity: sha512-YrKWR4TQR5CDyGkF0mloEUo7OsUA+bdtENpJGOtNavzOQUDEbxFE0PVzokzZfVfHhHX2CojPVmtzmmLxztyJkg==} + /@polkadot/api@12.3.1: + resolution: {integrity: sha512-VCrtadJRJttya5NhZ8slkD/UQyOZv4qABjagQMaG1eTZpn5k1wskmDUGdHrZZpYO5jBPewnCgaN8+LPKO2qiOw==} engines: {node: '>=18'} dependencies: - '@polkadot/api-augment': 10.13.1 - '@polkadot/api-base': 10.13.1 - '@polkadot/api-derive': 10.13.1 - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) - '@polkadot/rpc-augment': 10.13.1 - '@polkadot/rpc-core': 10.13.1 - '@polkadot/rpc-provider': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-augment': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/types-create': 10.13.1 - '@polkadot/types-known': 10.13.1 - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + '@polkadot/api-augment': 12.3.1 + '@polkadot/api-base': 12.3.1 + '@polkadot/api-derive': 12.3.1 + '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + '@polkadot/rpc-augment': 12.3.1 + '@polkadot/rpc-core': 12.3.1 + '@polkadot/rpc-provider': 12.3.1 + '@polkadot/types': 12.3.1 + '@polkadot/types-augment': 12.3.1 + '@polkadot/types-codec': 12.3.1 + '@polkadot/types-create': 12.3.1 + '@polkadot/types-known': 12.3.1 + '@polkadot/util': 13.0.2 + '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) eventemitter3: 5.0.1 rxjs: 7.8.1 tslib: 2.6.3 @@ -1211,35 +952,35 @@ packages: - utf-8-validate dev: true - /@polkadot/keyring@12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2): - resolution: {integrity: sha512-O3Q7GVmRYm8q7HuB3S0+Yf/q/EB2egKRRU3fv9b3B7V+A52tKzA+vIwEmNVaD1g5FKW9oB97rmpggs0zaKFqHw==} + /@polkadot/keyring@13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2): + resolution: {integrity: sha512-NeLbhyKDT5W8LI9seWTZGePxNTOVpDhv2018HSrEDwJq9Ie0C4TZhUf3KNERCkSveuThXjfQJMs+1CF33ZXPWw==} engines: {node: '>=18'} peerDependencies: - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2 + '@polkadot/util': 13.0.2 + '@polkadot/util-crypto': 13.0.2 dependencies: - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + '@polkadot/util': 13.0.2 + '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) tslib: 2.6.3 dev: true - /@polkadot/networks@12.6.2: - resolution: {integrity: sha512-1oWtZm1IvPWqvMrldVH6NI2gBoCndl5GEwx7lAuQWGr7eNL+6Bdc5K3Z9T0MzFvDGoi2/CBqjX9dRKo39pDC/w==} + /@polkadot/networks@13.0.2: + resolution: {integrity: sha512-ABAL+vug/gIwkdFEzeh87JoJd0YKrxSYg/HjUrZ+Zis2ucxQEKpvtCpJ34ku+YrjacBfVqIAkkwd3ZdIPGq9aQ==} engines: {node: '>=18'} dependencies: - '@polkadot/util': 12.6.2 + '@polkadot/util': 13.0.2 '@substrate/ss58-registry': 1.49.0 tslib: 2.6.3 dev: true - /@polkadot/rpc-augment@10.13.1: - resolution: {integrity: sha512-iLsWUW4Jcx3DOdVrSHtN0biwxlHuTs4QN2hjJV0gd0jo7W08SXhWabZIf9mDmvUJIbR7Vk+9amzvegjRyIf5+A==} + /@polkadot/rpc-augment@12.3.1: + resolution: {integrity: sha512-/tZLl5IuQ4vdGlUAbd8x3ShZ35XDSeyknKHCC+9kIrM/+KIyoCYBob2RXP9uqX8m516AWkXUrjsSO6DFPBpRGg==} engines: {node: '>=18'} dependencies: - '@polkadot/rpc-core': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/util': 12.6.2 + '@polkadot/rpc-core': 12.3.1 + '@polkadot/types': 12.3.1 + '@polkadot/types-codec': 12.3.1 + '@polkadot/util': 13.0.2 tslib: 2.6.3 transitivePeerDependencies: - bufferutil @@ -1247,14 +988,14 @@ packages: - utf-8-validate dev: true - /@polkadot/rpc-core@10.13.1: - resolution: {integrity: sha512-eoejSHa+/tzHm0vwic62/aptTGbph8vaBpbvLIK7gd00+rT813ROz5ckB1CqQBFB23nHRLuzzX/toY8ID3xrKw==} + /@polkadot/rpc-core@12.3.1: + resolution: {integrity: sha512-bNo26P20nRpLfANTK4sWEakxvqBJpKwAp/Gt7KlxoGgoTUbWFapyGKScFxp/pblycEziEbC+ZjkLMkaWaqi69g==} engines: {node: '>=18'} dependencies: - '@polkadot/rpc-augment': 10.13.1 - '@polkadot/rpc-provider': 10.13.1 - '@polkadot/types': 10.13.1 - '@polkadot/util': 12.6.2 + '@polkadot/rpc-augment': 12.3.1 + '@polkadot/rpc-provider': 12.3.1 + '@polkadot/types': 12.3.1 + '@polkadot/util': 13.0.2 rxjs: 7.8.1 tslib: 2.6.3 transitivePeerDependencies: @@ -1263,260 +1004,260 @@ packages: - utf-8-validate dev: true - /@polkadot/rpc-provider@10.13.1: - resolution: {integrity: sha512-oJ7tatVXYJ0L7NpNiGd69D558HG5y5ZDmH2Bp9Dd4kFTQIiV8A39SlWwWUPCjSsen9lqSvvprNLnG/VHTpenbw==} + /@polkadot/rpc-provider@12.3.1: + resolution: {integrity: sha512-Tg1Oj/1ldivqwnnOWepcNHEHYgpOBffxlrZMEXH1XX6D3AZaUhAWbatizyisydpuMbknTQ9FGYSnb9rOc2QBJw==} engines: {node: '>=18'} dependencies: - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) - '@polkadot/types': 10.13.1 - '@polkadot/types-support': 10.13.1 - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) - '@polkadot/x-fetch': 12.6.2 - '@polkadot/x-global': 12.6.2 - '@polkadot/x-ws': 12.6.2 + '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + '@polkadot/types': 12.3.1 + '@polkadot/types-support': 12.3.1 + '@polkadot/util': 13.0.2 + '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) + '@polkadot/x-fetch': 13.0.2 + '@polkadot/x-global': 13.0.2 + '@polkadot/x-ws': 13.0.2 eventemitter3: 5.0.1 mock-socket: 9.3.1 nock: 13.5.4 tslib: 2.6.3 optionalDependencies: - '@substrate/connect': 0.8.8 + '@substrate/connect': 0.8.10 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: true - /@polkadot/types-augment@10.13.1: - resolution: {integrity: sha512-TcrLhf95FNFin61qmVgOgayzQB/RqVsSg9thAso1Fh6pX4HSbvI35aGPBAn3SkA6R+9/TmtECirpSNLtIGFn0g==} + /@polkadot/types-augment@12.3.1: + resolution: {integrity: sha512-I3ggJt7W3UOScP6WA6PNmNsmpCfZtXkRJvSJkX7bi2LsSm/iF0xo0KdpQK02dHu7nGRFD9O5cSoVawzZJifGLA==} engines: {node: '>=18'} dependencies: - '@polkadot/types': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/util': 12.6.2 + '@polkadot/types': 12.3.1 + '@polkadot/types-codec': 12.3.1 + '@polkadot/util': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/types-codec@10.13.1: - resolution: {integrity: sha512-AiQ2Vv2lbZVxEdRCN8XSERiWlOWa2cTDLnpAId78EnCtx4HLKYQSd+Jk9Y4BgO35R79mchK4iG+w6gZ+ukG2bg==} + /@polkadot/types-codec@12.3.1: + resolution: {integrity: sha512-yZ4exsQI+eVkE/fZNuJBOajAgOH/YncKWOOf0N4lc6iq28oYp22DCAXc50Ym372l4HO+uhC9QdMPH9EiWwT2pQ==} engines: {node: '>=18'} dependencies: - '@polkadot/util': 12.6.2 - '@polkadot/x-bigint': 12.6.2 + '@polkadot/util': 13.0.2 + '@polkadot/x-bigint': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/types-create@10.13.1: - resolution: {integrity: sha512-Usn1jqrz35SXgCDAqSXy7mnD6j4RvB4wyzTAZipFA6DGmhwyxxIgOzlWQWDb+1PtPKo9vtMzen5IJ+7w5chIeA==} + /@polkadot/types-create@12.3.1: + resolution: {integrity: sha512-Jf9BByWB64FPW3lM5/Mcc/foyPJ3L9t0QwHVHaYWaonZt6l7SPX71rQmD7twJiTj9q1d1WidDKg/TtRDNbm1yA==} engines: {node: '>=18'} dependencies: - '@polkadot/types-codec': 10.13.1 - '@polkadot/util': 12.6.2 + '@polkadot/types-codec': 12.3.1 + '@polkadot/util': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/types-known@10.13.1: - resolution: {integrity: sha512-uHjDW05EavOT5JeU8RbiFWTgPilZ+odsCcuEYIJGmK+es3lk/Qsdns9Zb7U7NJl7eJ6OWmRtyrWsLs+bU+jjIQ==} + /@polkadot/types-known@12.3.1: + resolution: {integrity: sha512-G8t0uiIW1iu3KwylHDPnqdHxg5qwBxzPZQJvsjnGx2qBUk2VqXditKWcNFLEwCTnJPL95t2AzEO711lS99WRbg==} engines: {node: '>=18'} dependencies: - '@polkadot/networks': 12.6.2 - '@polkadot/types': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/types-create': 10.13.1 - '@polkadot/util': 12.6.2 + '@polkadot/networks': 13.0.2 + '@polkadot/types': 12.3.1 + '@polkadot/types-codec': 12.3.1 + '@polkadot/types-create': 12.3.1 + '@polkadot/util': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/types-support@10.13.1: - resolution: {integrity: sha512-4gEPfz36XRQIY7inKq0HXNVVhR6HvXtm7yrEmuBuhM86LE0lQQBkISUSgR358bdn2OFSLMxMoRNoh3kcDvdGDQ==} + /@polkadot/types-support@12.3.1: + resolution: {integrity: sha512-TwL5M5HkZ4jQGKekD+qJFLba7UXWASfwlPy2OpKj0LOnnmq4tudXgN13UFdQ7HoOmisPhr+vYo9vteYeBZ0jTA==} engines: {node: '>=18'} dependencies: - '@polkadot/util': 12.6.2 + '@polkadot/util': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/types@10.13.1: - resolution: {integrity: sha512-Hfvg1ZgJlYyzGSAVrDIpp3vullgxrjOlh/CSThd/PI4TTN1qHoPSFm2hs77k3mKkOzg+LrWsLE0P/LP2XddYcw==} + /@polkadot/types@12.3.1: + resolution: {integrity: sha512-4MkTF1znpgp9mZc/ZZPdFe7/5it9v+EJmzXc/DEOX9kVWs2BuKOWopzOFyO3reVUUB+v7dxfSOArSsxkMUcuoA==} engines: {node: '>=18'} dependencies: - '@polkadot/keyring': 12.6.2(@polkadot/util-crypto@12.6.2)(@polkadot/util@12.6.2) - '@polkadot/types-augment': 10.13.1 - '@polkadot/types-codec': 10.13.1 - '@polkadot/types-create': 10.13.1 - '@polkadot/util': 12.6.2 - '@polkadot/util-crypto': 12.6.2(@polkadot/util@12.6.2) + '@polkadot/keyring': 13.0.2(@polkadot/util-crypto@13.0.2)(@polkadot/util@13.0.2) + '@polkadot/types-augment': 12.3.1 + '@polkadot/types-codec': 12.3.1 + '@polkadot/types-create': 12.3.1 + '@polkadot/util': 13.0.2 + '@polkadot/util-crypto': 13.0.2(@polkadot/util@13.0.2) rxjs: 7.8.1 tslib: 2.6.3 dev: true - /@polkadot/util-crypto@12.6.2(@polkadot/util@12.6.2): - resolution: {integrity: sha512-FEWI/dJ7wDMNN1WOzZAjQoIcCP/3vz3wvAp5QQm+lOrzOLj0iDmaIGIcBkz8HVm3ErfSe/uKP0KS4jgV/ib+Mg==} + /@polkadot/util-crypto@13.0.2(@polkadot/util@13.0.2): + resolution: {integrity: sha512-woUsJJ6zd/caL7U+D30a5oM/+WK9iNI00Y8aNUHSj6Zq/KPzK9uqDBaLGWwlgrejoMQkxxiU2X0f2LzP15AtQg==} engines: {node: '>=18'} peerDependencies: - '@polkadot/util': 12.6.2 + '@polkadot/util': 13.0.2 dependencies: '@noble/curves': 1.5.0 '@noble/hashes': 1.4.0 - '@polkadot/networks': 12.6.2 - '@polkadot/util': 12.6.2 - '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) - '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/x-bigint': 12.6.2 - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/networks': 13.0.2 + '@polkadot/util': 13.0.2 + '@polkadot/wasm-crypto': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2) + '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) + '@polkadot/x-bigint': 13.0.2 + '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) '@scure/base': 1.1.7 tslib: 2.6.3 dev: true - /@polkadot/util@12.6.2: - resolution: {integrity: sha512-l8TubR7CLEY47240uki0TQzFvtnxFIO7uI/0GoWzpYD/O62EIAMRsuY01N4DuwgKq2ZWD59WhzsLYmA5K6ksdw==} + /@polkadot/util@13.0.2: + resolution: {integrity: sha512-/6bS9sfhJLhs8QuqWaR1eRapzfDdGC5XAQZEPL9NN5sTTA7HxWos8rVleai0UERm8QUMabjZ9rK9KpzbXl7ojg==} engines: {node: '>=18'} dependencies: - '@polkadot/x-bigint': 12.6.2 - '@polkadot/x-global': 12.6.2 - '@polkadot/x-textdecoder': 12.6.2 - '@polkadot/x-textencoder': 12.6.2 + '@polkadot/x-bigint': 13.0.2 + '@polkadot/x-global': 13.0.2 + '@polkadot/x-textdecoder': 13.0.2 + '@polkadot/x-textencoder': 13.0.2 '@types/bn.js': 5.1.5 bn.js: 5.2.1 tslib: 2.6.3 dev: true - /@polkadot/wasm-bridge@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2): + /@polkadot/wasm-bridge@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2): resolution: {integrity: sha512-AJEXChcf/nKXd5Q/YLEV5dXQMle3UNT7jcXYmIffZAo/KI394a+/24PaISyQjoNC0fkzS1Q8T5pnGGHmXiVz2g==} engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/x-randomvalues': '*' dependencies: - '@polkadot/util': 12.6.2 - '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/util': 13.0.2 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) + '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) tslib: 2.6.3 dev: true - /@polkadot/wasm-crypto-asmjs@7.3.2(@polkadot/util@12.6.2): + /@polkadot/wasm-crypto-asmjs@7.3.2(@polkadot/util@13.0.2): resolution: {integrity: sha512-QP5eiUqUFur/2UoF2KKKYJcesc71fXhQFLT3D4ZjG28Mfk2ZPI0QNRUfpcxVQmIUpV5USHg4geCBNuCYsMm20Q==} engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' dependencies: - '@polkadot/util': 12.6.2 + '@polkadot/util': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2): + /@polkadot/wasm-crypto-init@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2): resolution: {integrity: sha512-FPq73zGmvZtnuJaFV44brze3Lkrki3b4PebxCy9Fplw8nTmisKo9Xxtfew08r0njyYh+uiJRAxPCXadkC9sc8g==} engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/x-randomvalues': '*' dependencies: - '@polkadot/util': 12.6.2 - '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) - '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/util': 13.0.2 + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2) + '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@13.0.2) + '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@13.0.2) + '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) + '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) tslib: 2.6.3 dev: true - /@polkadot/wasm-crypto-wasm@7.3.2(@polkadot/util@12.6.2): + /@polkadot/wasm-crypto-wasm@7.3.2(@polkadot/util@13.0.2): resolution: {integrity: sha512-15wd0EMv9IXs5Abp1ZKpKKAVyZPhATIAHfKsyoWCEFDLSOA0/K0QGOxzrAlsrdUkiKZOq7uzSIgIDgW8okx2Mw==} engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' dependencies: - '@polkadot/util': 12.6.2 - '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) + '@polkadot/util': 13.0.2 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) tslib: 2.6.3 dev: true - /@polkadot/wasm-crypto@7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2): + /@polkadot/wasm-crypto@7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2): resolution: {integrity: sha512-+neIDLSJ6jjVXsjyZ5oLSv16oIpwp+PxFqTUaZdZDoA2EyFRQB8pP7+qLsMNk+WJuhuJ4qXil/7XiOnZYZ+wxw==} engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' '@polkadot/x-randomvalues': '*' dependencies: - '@polkadot/util': 12.6.2 - '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) - '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@12.6.2)(@polkadot/x-randomvalues@12.6.2) - '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/x-randomvalues': 12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2) + '@polkadot/util': 13.0.2 + '@polkadot/wasm-bridge': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2) + '@polkadot/wasm-crypto-asmjs': 7.3.2(@polkadot/util@13.0.2) + '@polkadot/wasm-crypto-init': 7.3.2(@polkadot/util@13.0.2)(@polkadot/x-randomvalues@13.0.2) + '@polkadot/wasm-crypto-wasm': 7.3.2(@polkadot/util@13.0.2) + '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) + '@polkadot/x-randomvalues': 13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2) tslib: 2.6.3 dev: true - /@polkadot/wasm-util@7.3.2(@polkadot/util@12.6.2): + /@polkadot/wasm-util@7.3.2(@polkadot/util@13.0.2): resolution: {integrity: sha512-bmD+Dxo1lTZyZNxbyPE380wd82QsX+43mgCm40boyKrRppXEyQmWT98v/Poc7chLuskYb6X8IQ6lvvK2bGR4Tg==} engines: {node: '>=18'} peerDependencies: '@polkadot/util': '*' dependencies: - '@polkadot/util': 12.6.2 + '@polkadot/util': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/x-bigint@12.6.2: - resolution: {integrity: sha512-HSIk60uFPX4GOFZSnIF7VYJz7WZA7tpFJsne7SzxOooRwMTWEtw3fUpFy5cYYOeLh17/kHH1Y7SVcuxzVLc74Q==} + /@polkadot/x-bigint@13.0.2: + resolution: {integrity: sha512-h2jKT/UaxiEal8LhQeH6+GCjO7GwEqVAD2SNYteCOXff6yNttqAZYJuHZsndbVjVNwqRNf8D5q/zZkD0HUd6xQ==} engines: {node: '>=18'} dependencies: - '@polkadot/x-global': 12.6.2 + '@polkadot/x-global': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/x-fetch@12.6.2: - resolution: {integrity: sha512-8wM/Z9JJPWN1pzSpU7XxTI1ldj/AfC8hKioBlUahZ8gUiJaOF7K9XEFCrCDLis/A1BoOu7Ne6WMx/vsJJIbDWw==} + /@polkadot/x-fetch@13.0.2: + resolution: {integrity: sha512-B/gf9iriUr6za/Ui7zIFBfHz7UBZ68rJEIteWHx1UHRCZPcLqv+hgpev6xIGrkfFljI0/lI7IwtN2qy6HYzFBg==} engines: {node: '>=18'} dependencies: - '@polkadot/x-global': 12.6.2 + '@polkadot/x-global': 13.0.2 node-fetch: 3.3.2 tslib: 2.6.3 dev: true - /@polkadot/x-global@12.6.2: - resolution: {integrity: sha512-a8d6m+PW98jmsYDtAWp88qS4dl8DyqUBsd0S+WgyfSMtpEXu6v9nXDgPZgwF5xdDvXhm+P0ZfVkVTnIGrScb5g==} + /@polkadot/x-global@13.0.2: + resolution: {integrity: sha512-OoNIXLB5y8vIKpk4R+XmpDPhipNXWSUvEwUnpQT7NAxNLmzgMq1FhbrwBWWPRNHPrQonp7mqxV/X+v5lv1HW/g==} engines: {node: '>=18'} dependencies: tslib: 2.6.3 dev: true - /@polkadot/x-randomvalues@12.6.2(@polkadot/util@12.6.2)(@polkadot/wasm-util@7.3.2): - resolution: {integrity: sha512-Vr8uG7rH2IcNJwtyf5ebdODMcr0XjoCpUbI91Zv6AlKVYOGKZlKLYJHIwpTaKKB+7KPWyQrk4Mlym/rS7v9feg==} + /@polkadot/x-randomvalues@13.0.2(@polkadot/util@13.0.2)(@polkadot/wasm-util@7.3.2): + resolution: {integrity: sha512-SGj+L0H/7TWZtSmtkWlixO4DFzXDdluI0UscN2h285os2Ns8PnmBbue+iJ8PVSzpY1BOxd66gvkkpboPz+jXFQ==} engines: {node: '>=18'} peerDependencies: - '@polkadot/util': 12.6.2 + '@polkadot/util': 13.0.2 '@polkadot/wasm-util': '*' dependencies: - '@polkadot/util': 12.6.2 - '@polkadot/wasm-util': 7.3.2(@polkadot/util@12.6.2) - '@polkadot/x-global': 12.6.2 + '@polkadot/util': 13.0.2 + '@polkadot/wasm-util': 7.3.2(@polkadot/util@13.0.2) + '@polkadot/x-global': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/x-textdecoder@12.6.2: - resolution: {integrity: sha512-M1Bir7tYvNappfpFWXOJcnxUhBUFWkUFIdJSyH0zs5LmFtFdbKAeiDXxSp2Swp5ddOZdZgPac294/o2TnQKN1w==} + /@polkadot/x-textdecoder@13.0.2: + resolution: {integrity: sha512-mauglOkTJxLGmLwLc3J5Jlq/W+SHP53eiy3F8/8JxxfnXrZKgWoQXGpvXYPjFnMZj0MzDSy/6GjyGWnDCgdQFA==} engines: {node: '>=18'} dependencies: - '@polkadot/x-global': 12.6.2 + '@polkadot/x-global': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/x-textencoder@12.6.2: - resolution: {integrity: sha512-4N+3UVCpI489tUJ6cv3uf0PjOHvgGp9Dl+SZRLgFGt9mvxnvpW/7+XBADRMtlG4xi5gaRK7bgl5bmY6OMDsNdw==} + /@polkadot/x-textencoder@13.0.2: + resolution: {integrity: sha512-Lq08H2OnVXj97uaOwg7tcmRS7a4VJYkHEeWO4FyEMOk6P6lU6W8OVNjjxG0se9PCEgmyZPUDbJI//1ynzP4cXw==} engines: {node: '>=18'} dependencies: - '@polkadot/x-global': 12.6.2 + '@polkadot/x-global': 13.0.2 tslib: 2.6.3 dev: true - /@polkadot/x-ws@12.6.2: - resolution: {integrity: sha512-cGZWo7K5eRRQCRl2LrcyCYsrc3lRbTlixZh3AzgU8uX4wASVGRlNWi/Hf4TtHNe1ExCDmxabJzdIsABIfrr7xw==} + /@polkadot/x-ws@13.0.2: + resolution: {integrity: sha512-nC5e2eY5D5ZR5teQOB7ib+dWLbmNws86cTz3BjKCalSMBBIn6i3V9ElgABpierBmnSJe9D94EyrH1BxdVfDxUg==} engines: {node: '>=18'} dependencies: - '@polkadot/x-global': 12.6.2 + '@polkadot/x-global': 13.0.2 tslib: 2.6.3 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -1626,37 +1367,6 @@ packages: tslib: 1.14.1 dev: true - /@solana/buffer-layout@4.0.1: - resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} - engines: {node: '>=5.10'} - dependencies: - buffer: 6.0.3 - dev: true - - /@solana/web3.js@1.95.2: - resolution: {integrity: sha512-SjlHp0G4qhuhkQQc+YXdGkI8EerCqwxvgytMgBpzMUQTafrkNant3e7pgilBGgjy/iM40ICvWBLgASTPMrQU7w==} - dependencies: - '@babel/runtime': 7.25.0 - '@noble/curves': 1.5.0 - '@noble/hashes': 1.4.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.1 - node-fetch: 2.7.0 - rpc-websockets: 9.0.2 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - /@solidity-parser/parser@0.14.5: resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} dependencies: @@ -1683,13 +1393,13 @@ packages: dev: true optional: true - /@substrate/connect@0.8.8: - resolution: {integrity: sha512-zwaxuNEVI9bGt0rT8PEJiXOyebLIo6QN1SyiAHRPBOl6g3Sy0KKdSN8Jmyn++oXhVRD8aIe75/V8ZkS81T+BPQ==} + /@substrate/connect@0.8.10: + resolution: {integrity: sha512-DIyQ13DDlXqVFnLV+S6/JDgiGowVRRrh18kahieJxhgvzcWicw5eLc6jpfQ0moVVLBYkO7rctB5Wreldwpva8w==} requiresBuild: true dependencies: '@substrate/connect-extension-protocol': 2.0.0 '@substrate/connect-known-chains': 1.2.2 - '@substrate/light-client-extension-helpers': 0.0.4(smoldot@2.0.22) + '@substrate/light-client-extension-helpers': 0.0.6(smoldot@2.0.22) smoldot: 2.0.22 transitivePeerDependencies: - bufferutil @@ -1697,16 +1407,16 @@ packages: dev: true optional: true - /@substrate/light-client-extension-helpers@0.0.4(smoldot@2.0.22): - resolution: {integrity: sha512-vfKcigzL0SpiK+u9sX6dq2lQSDtuFLOxIJx2CKPouPEHIs8C+fpsufn52r19GQn+qDhU8POMPHOVoqLktj8UEA==} + /@substrate/light-client-extension-helpers@0.0.6(smoldot@2.0.22): + resolution: {integrity: sha512-girltEuxQ1BvkJWmc8JJlk4ZxnlGXc/wkLcNguhY+UoDEMBK0LsdtfzQKIfrIehi4QdeSBlFEFBoI4RqPmsZzA==} requiresBuild: true peerDependencies: smoldot: 2.x dependencies: - '@polkadot-api/client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0(rxjs@7.8.1) - '@polkadot-api/json-rpc-provider': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 - '@polkadot-api/json-rpc-provider-proxy': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 - '@polkadot-api/substrate-client': 0.0.1-492c132563ea6b40ae1fc5470dec4cd18768d182.1.0 + '@polkadot-api/json-rpc-provider': 0.0.1 + '@polkadot-api/json-rpc-provider-proxy': 0.0.1 + '@polkadot-api/observable-client': 0.1.0(rxjs@7.8.1) + '@polkadot-api/substrate-client': 0.0.1 '@substrate/connect-extension-protocol': 2.0.0 '@substrate/connect-known-chains': 1.2.2 rxjs: 7.8.1 @@ -1718,12 +1428,6 @@ packages: resolution: {integrity: sha512-leW6Ix4LD7XgvxT7+aobPWSw+WvPcN2Rxof1rmd0mNC5t2n99k1N7UNEvz7YEFSOUeHWmKIY7F5q8KeIqYoHfA==} dev: true - /@swc/helpers@0.5.12: - resolution: {integrity: sha512-KMZNXiGibsW9kvZAO1Pam2JPTDBm+KSHMMHWdsyI/1DbIZjT2A6Gy3hblVXUMEDvUAKq+e0vL0X0o54owWji7g==} - dependencies: - tslib: 2.6.3 - dev: true - /@tsconfig/node10@1.0.11: resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true @@ -1797,25 +1501,12 @@ packages: '@types/node': 20.14.14 dev: true - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - dependencies: - '@types/node': 20.14.14 - dev: true - /@types/form-data@0.0.33: resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: '@types/node': 20.14.14 dev: true - /@types/fs-extra@11.0.4: - resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - dependencies: - '@types/jsonfile': 6.1.4 - '@types/node': 20.14.14 - dev: true - /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: @@ -1823,16 +1514,6 @@ packages: '@types/node': 20.14.14 dev: true - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true - - /@types/jsonfile@6.1.4: - resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} - dependencies: - '@types/node': 20.14.14 - dev: true - /@types/lru-cache@5.1.1: resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} dev: true @@ -1841,10 +1522,6 @@ packages: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/minimist@1.2.5: - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: true - /@types/mocha@10.0.7: resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==} dev: true @@ -1853,20 +1530,10 @@ packages: resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} dev: true - /@types/node@12.20.55: - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: true - /@types/node@18.15.13: resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} dev: true - /@types/node@18.19.43: - resolution: {integrity: sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g==} - dependencies: - undici-types: 5.26.5 - dev: true - /@types/node@20.14.14: resolution: {integrity: sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==} dependencies: @@ -1887,10 +1554,6 @@ packages: resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} dev: true - /@types/ps-tree@1.1.6: - resolution: {integrity: sha512-PtrlVaOaI44/3pl3cvnlK+GxOM3re2526TJvPvh7W+keHIXdV4TE0ylpPBAcvFQCbGitaTXwL9u+RF7qtVeazQ==} - dev: true - /@types/qs@6.9.15: resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} dev: true @@ -1901,184 +1564,16 @@ packages: '@types/node': 20.14.14 dev: true - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true - - /@types/uuid@8.3.4: - resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} - dev: true - - /@types/which@3.0.4: - resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} - dev: true - - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - dependencies: - '@types/node': 20.14.14 - dev: true - /@types/ws@8.5.12: resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} dependencies: '@types/node': 20.14.14 dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - debug: 4.3.6(supports-color@8.1.1) - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare-lite: 1.4.0 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.5.4) - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) - debug: 4.3.6(supports-color@8.1.1) - eslint: 8.57.0 - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - debug: 4.3.6(supports-color@8.1.1) - eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.5.4) - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.6(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.3 - tsutils: 3.21.0(typescript@5.5.4) - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) - eslint: 8.57.0 - eslint-scope: 5.1.1 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - dev: true - - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true - - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true - /abbrev@1.0.9: resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} dev: true - /acorn-jsx@5.3.2(acorn@8.12.1): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.12.1 - dev: true - /acorn-walk@8.3.3: resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} engines: {node: '>=0.4.0'} @@ -2092,10 +1587,6 @@ packages: hasBin: true dev: true - /add@2.0.6: - resolution: {integrity: sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q==} - dev: true - /adm-zip@0.4.16: resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} engines: {node: '>=0.3.0'} @@ -2118,13 +1609,6 @@ packages: - supports-color dev: true - /agentkeepalive@4.5.0: - resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==} - engines: {node: '>= 8.0.0'} - dependencies: - humanize-ms: 1.2.1 - dev: true - /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -2133,26 +1617,6 @@ packages: indent-string: 4.0.0 dev: true - /ajv-formats@2.1.1(ajv@8.17.1): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: - ajv: 8.17.1 - dev: 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.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: @@ -2247,14 +1711,6 @@ packages: engines: {node: '>=8'} dev: 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-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} @@ -2265,20 +1721,6 @@ packages: engines: {node: '>=0.10.0'} 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.23.3 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.3 - dev: true - /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true @@ -2305,13 +1747,6 @@ packages: engines: {node: '>= 4.0.0'} dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - dependencies: - possible-typed-array-names: 1.0.0 - dev: true - /axios@1.7.3: resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==} dependencies: @@ -2332,76 +1767,15 @@ packages: safe-buffer: 5.2.1 dev: true - /base-x@4.0.0: - resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} - dev: true - - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - /bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} dev: true - /bech32@2.0.0: - resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} - dev: true - - /bigint-buffer@1.1.5: - resolution: {integrity: sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==} - engines: {node: '>= 10.0.0'} - requiresBuild: true - dependencies: - bindings: 1.5.0 - dev: true - /binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} dev: true - /bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - dependencies: - file-uri-to-path: 1.0.0 - dev: true - - /bip174@2.1.1: - resolution: {integrity: sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ==} - engines: {node: '>=8.0.0'} - dev: true - - /bip66@1.1.5: - resolution: {integrity: sha512-nemMHz95EmS38a26XbbdxIYj5csHd3RMP3H5bwQknX0WYHF01qhpufP42mLOwVICuH2JmhIhXiWs89MfUGL7Xw==} - dependencies: - safe-buffer: 5.2.1 - dev: true - - /bitcoinjs-lib@6.1.6: - resolution: {integrity: sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA==} - engines: {node: '>=8.0.0'} - dependencies: - '@noble/hashes': 1.4.0 - bech32: 2.0.0 - bip174: 2.1.1 - bs58check: 3.0.1 - typeforce: 1.18.0 - varuint-bitcoin: 1.1.2 - dev: true - - /bitcoinjs-message@2.2.0: - resolution: {integrity: sha512-103Wy3xg8Y9o+pdhGP4M3/mtQQuUWs6sPuOp1mYphSUoSMHjHTlkj32K4zxU8qMH0Ckv23emfkGlFWtoWZ7YFA==} - engines: {node: '>=0.10'} - dependencies: - bech32: 1.1.4 - bs58check: 2.1.2 - buffer-equals: 1.0.4 - create-hash: 1.2.0 - secp256k1: 3.8.0 - varuint-bitcoin: 1.1.2 - dev: true - /blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} dev: true @@ -2418,17 +1792,9 @@ packages: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: true - /borsh@0.7.0: - resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} - dependencies: - bn.js: 5.2.1 - bs58: 4.0.1 - text-encoding-utf-8: 1.0.2 - dev: true - - /boxen@5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} + /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 @@ -2485,12 +1851,6 @@ packages: base-x: 3.0.10 dev: true - /bs58@5.0.0: - resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} - dependencies: - base-x: 4.0.0 - dev: true - /bs58check@2.1.2: resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} dependencies: @@ -2499,18 +1859,6 @@ packages: safe-buffer: 5.2.1 dev: true - /bs58check@3.0.1: - resolution: {integrity: sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ==} - dependencies: - '@noble/hashes': 1.4.0 - bs58: 5.0.0 - dev: true - - /buffer-equals@1.0.4: - resolution: {integrity: sha512-99MsCq0j5+RhubVEtKQgKaD6EM+UP3xJgIvQqwJ3SOLDUekzxMX1ylXBng+Wa2sh7mGT0W6RUly8ojjr1Tt6nA==} - engines: {node: '>=0.10.0'} - dev: true - /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true @@ -2519,21 +1867,6 @@ packages: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} 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.8: - resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} - engines: {node: '>=6.14.2'} - requiresBuild: true - dependencies: - node-gyp-build: 4.8.1 - dev: true - /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -2550,11 +1883,6 @@ packages: set-function-length: 1.2.2 dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true - /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} @@ -2626,11 +1954,6 @@ packages: supports-color: 7.2.0 dev: true - /chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true - /charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: true @@ -2646,10 +1969,6 @@ packages: engines: {node: '>= 16'} dev: true - /chnl@1.2.0: - resolution: {integrity: sha512-g5gJb59edwCliFbX2j7G6sBfY4sX9YLy211yctONI2GRaiX0f2zIbKWmBm+sPqFNEpM7Ljzm7IJX/xrjiEbPrw==} - dev: true - /chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2761,10 +2080,6 @@ packages: typical: 5.2.0 dev: true - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true - /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -2818,23 +2133,6 @@ packages: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} - hasBin: true - dependencies: - cross-spawn: 7.0.3 - 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 @@ -2844,33 +2142,6 @@ packages: engines: {node: '>= 12'} dev: true - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-data-view: 1.0.1 - dev: true - /death@1.1.0: resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} dev: true @@ -2918,20 +2189,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'} - dev: true - /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2965,40 +2222,6 @@ packages: path-type: 4.0.0 dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - dev: true - - /dotenv@16.4.5: - resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} - engines: {node: '>=12'} - dev: true - - /drbg.js@1.0.1: - resolution: {integrity: sha512-F4wZ06PvqxYLFEZKkFxTDcns9oFNk34hvmJSEwdzsxVQ8YI5YaxtACgQatkYgv2VI2CFkUd2Y+xosPQnHv809g==} - engines: {node: '>=0.10'} - dependencies: - browserify-aes: 1.2.0 - create-hash: 1.2.0 - create-hmac: 1.1.7 - dev: true - - /duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: true - - /ecpair@2.1.0: - resolution: {integrity: sha512-cL/mh3MtJutFOvFc27GPZE2pWL3a3k4YvzUWEOvilnfZVlH3Jwgx/7d6tlD7/75tNk8TG2m+7Kgtz0SI1tWcqw==} - engines: {node: '>=8.0.0'} - dependencies: - randombytes: 2.1.0 - typeforce: 1.18.0 - wif: 2.0.6 - dev: true - /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -3040,58 +2263,6 @@ packages: engines: {node: '>=6'} dev: true - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 - data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-object-atoms: 1.0.0 - es-set-tostringtag: 2.0.3 - 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.4 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-data-view: 1.0.1 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.2 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.2 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.9 - string.prototype.trimend: 1.0.8 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 - dev: true - /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -3104,41 +2275,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - dev: true - - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - 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 - - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: true - - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - dependencies: - es6-promise: 4.2.8 - dev: true - /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} @@ -3167,83 +2303,6 @@ packages: source-map: 0.2.0 dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.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.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.11.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.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.6(supports-color@8.1.1) - 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.6.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.4 - 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.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 3.4.3 - dev: true - /esprima@2.7.3: resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} engines: {node: '>=0.10.0'} @@ -3256,35 +2315,11 @@ packages: hasBin: true dev: true - /esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - 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@1.9.3: resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==} engines: {node: '>=0.10.0'} dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.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'} @@ -3461,18 +2496,6 @@ packages: strip-hex-prefix: 1.0.0 dev: true - /event-stream@3.3.4: - resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} - dependencies: - duplexer: 0.1.2 - from: 0.1.7 - map-stream: 0.1.0 - pause-stream: 0.0.11 - split: 0.3.3 - stream-combiner: 0.0.4 - through: 2.3.8 - dev: true - /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: true @@ -3484,11 +2507,6 @@ packages: safe-buffer: 5.2.1 dev: true - /eyes@0.1.8: - resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} - engines: {node: '> 0.1.90'} - dev: true - /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -3504,18 +2522,10 @@ packages: micromatch: 4.0.7 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 - /fast-stable-stringify@1.0.0: - resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} - dev: true - /fast-uri@3.0.1: resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} dev: true @@ -3534,17 +2544,6 @@ packages: web-streams-polyfill: 3.3.3 dev: 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 - - /file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - dev: true - /fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -3574,24 +2573,11 @@ packages: 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.3.1 - 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.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true - /follow-redirects@1.15.6(debug@4.3.6): resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} engines: {node: '>=4.0'} @@ -3604,12 +2590,6 @@ packages: debug: 4.3.6(supports-color@8.1.1) dev: true - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - dependencies: - is-callable: 1.2.7 - dev: true - /form-data@2.5.1: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} engines: {node: '>= 0.12'} @@ -3639,10 +2619,6 @@ packages: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} dev: true - /from@0.1.7: - resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} - dev: true - /fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -3652,15 +2628,6 @@ packages: universalify: 2.0.1 dev: true - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -3709,25 +2676,6 @@ 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.23.3 - functions-have-names: 1.2.3 - dev: true - - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /fx@35.0.0: - resolution: {integrity: sha512-O07q+Lknrom5RUX/u53tjo2KTTLUnL0K703JbqMYb19ORijfJNvijzFqqYXEjdk25T9R14S6t6wHD8fCWXCM0g==} - hasBin: true - dev: true - /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} @@ -3753,15 +2701,6 @@ packages: engines: {node: '>=4'} 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 - /ghost-testrpc@0.0.2: resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} hasBin: true @@ -3777,13 +2716,6 @@ packages: 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@5.0.15: resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} deprecated: Glob versions prior to v9 are no longer supported @@ -3859,21 +2791,6 @@ packages: which: 1.3.1 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.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - dependencies: - define-properties: 1.2.1 - gopd: 1.0.1 - dev: true - /globby@10.0.2: resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} engines: {node: '>=8'} @@ -3888,29 +2805,6 @@ packages: slash: 3.0.0 dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 4.0.0 - dev: true - /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -3921,10 +2815,6 @@ packages: 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 - /handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -4018,10 +2908,6 @@ packages: - utf-8-validate dev: true - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - /has-flag@1.0.0: resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} engines: {node: '>=0.10.0'} @@ -4053,13 +2939,6 @@ packages: 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'} @@ -4137,12 +3016,6 @@ packages: - supports-color dev: true - /humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - dependencies: - ms: 2.1.3 - dev: true - /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4150,10 +3023,6 @@ packages: safer-buffer: 2.1.2 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'} @@ -4167,19 +3036,6 @@ packages: resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} dev: 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 - /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -4201,15 +3057,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.2 - side-channel: 1.0.6 - dev: true - /interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -4221,20 +3068,6 @@ packages: fp-ts: 1.19.3 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-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'} @@ -4242,19 +3075,6 @@ packages: binary-extensions: 2.3.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-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true - /is-core-module@2.15.0: resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} engines: {node: '>= 0.4'} @@ -4262,20 +3082,6 @@ packages: hasown: 2.0.2 dev: true - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} - dependencies: - is-typed-array: 1.1.13 - 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'} @@ -4303,126 +3109,29 @@ packages: engines: {node: '>=6.5.0', npm: '>=3'} dev: true - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - 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-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.7 - has-tostringtag: 1.0.2 - dev: true - - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} - 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'} - dependencies: - which-typed-array: 1.1.15 - dev: true - /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} dev: true - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - dependencies: - call-bind: 1.0.7 - dev: 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.10): - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' - dependencies: - ws: 7.5.10 - dev: true - - /jayson@4.1.1: - resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@types/connect': 3.4.38 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - JSONStream: 1.3.5 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@7.5.10) - json-stringify-safe: 5.0.1 - uuid: 8.3.2 - ws: 7.5.10 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - - /js-base64@3.7.7: - resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} - dev: true - /js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} dev: true @@ -4442,22 +3151,10 @@ packages: argparse: 2.0.1 dev: true - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - 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-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true - /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true @@ -4476,11 +3173,6 @@ packages: graceful-fs: 4.2.11 dev: true - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true - /jsonschema@1.4.1: resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} dev: true @@ -4495,12 +3187,6 @@ packages: 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 - /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -4519,14 +3205,6 @@ packages: type-check: 0.3.2 dev: 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 - /locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -4554,10 +3232,6 @@ packages: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} dev: true - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true - /lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true @@ -4588,10 +3262,6 @@ packages: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true - /map-stream@0.1.0: - resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} - dev: true - /markdown-table@1.1.3: resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} dev: true @@ -4614,10 +3284,6 @@ packages: engines: {node: '>= 8'} dev: true - /micro-base58@0.5.1: - resolution: {integrity: sha512-iwqAmg66VjB2LA3BcUxyrOyqck4HLLtSzKnx2VQSnN5piQji598N15P8RRx2d6lPvJ98B1b0cl2VbvQeFeWdig==} - dev: true - /micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} dev: true @@ -4686,10 +3352,6 @@ packages: obliterator: 2.0.4 dev: true - /mocha-steps@1.3.0: - resolution: {integrity: sha512-KZvpMJTqzLZw3mOb+EEuYi4YZS41C9iTnb7skVFRxHjUd1OYbl64tCMSmpdIRM9LnwIrSOaRfPtNpF5msgv6Eg==} - dev: true - /mocha@10.7.0: resolution: {integrity: sha512-v8/rBWr2VO5YkspYINnvu81inSz2y3ODJrhO175/Exzor1RcEZZkizgE2A+w/CAXXoESS8Kys5E62dOHGHzULA==} engines: {node: '>= 14.0.0'} @@ -4730,18 +3392,6 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /nan@2.20.0: - resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} - dev: true - - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true - /ndjson@2.0.0: resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} engines: {node: '>=10'} @@ -4780,29 +3430,8 @@ packages: /node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} - dependencies: - lodash: 4.17.21 - dev: 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-fetch@3.3.1: - resolution: {integrity: sha512-cRVc/kyto/7E5shrWca1Wsea4y6tL9iYJE5FBCius3JQfb/4P4I295PfhgbJQBLTx6lATE4z+wK0rPM4VS2uow==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 + dependencies: + lodash: 4.17.21 dev: true /node-fetch@3.3.2: @@ -4854,21 +3483,6 @@ packages: engines: {node: '>= 0.4'} 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.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - /obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: true @@ -4891,18 +3505,6 @@ packages: word-wrap: 1.2.5 dev: true - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - dev: true - /ordinal@1.0.3: resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} dev: true @@ -4952,13 +3554,6 @@ packages: engines: {node: '>=4'} 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 @@ -4978,11 +3573,6 @@ packages: 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 @@ -4996,12 +3586,6 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true - /pause-stream@0.0.11: - resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} - dependencies: - through: 2.3.8 - dev: true - /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} @@ -5023,21 +3607,11 @@ packages: engines: {node: '>=6'} dev: true - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true - /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} dev: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true - /prettier-plugin-solidity@1.3.1(prettier@3.3.3): resolution: {integrity: sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==} engines: {node: '>=16'} @@ -5066,33 +3640,12 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /promise-controller@1.0.0: - resolution: {integrity: sha512-goA0zA9L91tuQbUmiMinSYqlyUtEgg4fxJcjYnLYOQnrktb4o4UqciXDNXiRUPiDBPACmsr1k8jDW4r7UDq9Qw==} - engines: {node: '>=8'} - dev: true - - /promise.prototype.finally@3.1.8: - resolution: {integrity: sha512-aVDtsXOml9iuMJzUco9J1je/UrIT3oMYfWkCTiUhkt+AvZw72q4dUZnR/R/eB3h5GeAagQVXvM1ApoYniJiwoA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-errors: 1.3.0 - set-function-name: 2.0.2 - dev: true - /promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} dependencies: asap: 2.0.6 dev: true - /promised-map@1.0.0: - resolution: {integrity: sha512-fP9VSMgcml+U2uJ9PBc4/LDQ3ZkJCH4blLNCS6gbH7RHyRZCYs91zxWHqiUy+heFiEMiB2op/qllYoFqmIqdWA==} - engines: {node: '>=10'} - dev: true - /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -5110,19 +3663,6 @@ packages: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true - /ps-tree@1.2.0: - resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} - engines: {node: '>= 0.10'} - hasBin: true - dependencies: - event-stream: 3.3.4 - dev: true - - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true - /qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -5197,20 +3737,6 @@ packages: engines: {node: '>=6'} dev: true - /regenerator-runtime@0.14.1: - 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.2 - dev: true - /req-cwd@2.0.0: resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} engines: {node: '>=4'} @@ -5240,11 +3766,6 @@ packages: engines: {node: '>=4'} dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true - /resolve@1.1.7: resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} dev: true @@ -5269,14 +3790,6 @@ packages: engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - dependencies: - glob: 7.2.3 - dev: true - /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: @@ -5291,21 +3804,6 @@ packages: bn.js: 5.2.1 dev: true - /rpc-websockets@9.0.2: - resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} - dependencies: - '@swc/helpers': 0.5.12 - '@types/uuid': 8.3.4 - '@types/ws': 8.5.12 - buffer: 6.0.3 - eventemitter3: 5.0.1 - uuid: 8.3.2 - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) - optionalDependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 - dev: true - /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -5318,16 +3816,6 @@ packages: tslib: 2.6.3 dev: true - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - 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 @@ -5336,15 +3824,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 @@ -5369,10 +3848,6 @@ packages: wordwrap: 1.0.0 dev: true - /scale-ts@0.2.12: - resolution: {integrity: sha512-hNGuU5Yhohmp4BjFrNEioDkPAOWe6aYRDUlBi9FTxxmp1wZ8SAkDxAf/IobinuSa+J0a9srZEP73dqmYeyYYXg==} - dev: true - /scale-ts@1.6.0: resolution: {integrity: sha512-Ja5VCjNZR8TGKhUumy9clVVxcDpM+YFjAnkMuwQy68Hixio3VRRvWdE3g8T/yC+HXA0ZDQl2TGyUmtmbcVl40Q==} requiresBuild: true @@ -5383,21 +3858,6 @@ packages: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} dev: true - /secp256k1@3.8.0: - resolution: {integrity: sha512-k5ke5avRZbtl9Tqx/SA7CbY3NF6Ro+Sj9cZxezFzuBlLDmyqPiL8hJJ+EmzD8Ig4LUDByHJ3/iPOVoRixs/hmw==} - engines: {node: '>=4.0.0'} - requiresBuild: true - dependencies: - bindings: 1.5.0 - bip66: 1.1.5 - bn.js: 4.12.0 - create-hash: 1.2.0 - drbg.js: 1.0.1 - elliptic: 6.5.6 - nan: 2.20.0 - safe-buffer: 5.2.1 - dev: true - /secp256k1@4.0.3: resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} engines: {node: '>=10.0.0'} @@ -5442,16 +3902,6 @@ packages: has-property-descriptors: 1.0.2 dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - dev: true - /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: true @@ -5475,18 +3925,6 @@ packages: crypt: 0.0.2 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 - /shelljs@0.8.5: resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} engines: {node: '>=4'} @@ -5516,11 +3954,6 @@ packages: engines: {node: '>=8'} dev: true - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - /slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -5534,7 +3967,7 @@ packages: resolution: {integrity: sha512-B50vRgTY6v3baYH6uCgL15tfaag5tcS2o/P5q1OiXcKGv1axZDfz2dzzMuIkVpyMR2ug11F6EAtQlmYBQd292g==} requiresBuild: true dependencies: - ws: 8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) + ws: 8.18.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -5616,12 +4049,6 @@ packages: readable-stream: 3.6.2 dev: true - /split@0.3.3: - resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} - dependencies: - through: 2.3.8 - dev: true - /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true @@ -5638,12 +4065,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /stream-combiner@0.0.4: - resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} - dependencies: - duplexer: 0.1.2 - dev: true - /string-format@2.0.0: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} dev: true @@ -5665,33 +4086,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true - /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: @@ -5730,11 +4124,6 @@ packages: engines: {node: '>=8'} dev: true - /superstruct@2.0.2: - resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} - engines: {node: '>=14.0.0'} - dev: true - /supports-color@3.2.3: resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} engines: {node: '>=0.8.0'} @@ -5804,14 +4193,6 @@ packages: strip-ansi: 6.0.1 dev: true - /text-encoding-utf-8@1.0.2: - resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} - 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'} @@ -5835,17 +4216,6 @@ packages: readable-stream: 3.6.2 dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true - - /tiny-secp256k1@2.2.3: - resolution: {integrity: sha512-SGcL07SxcPN2nGKHTCvRMkQLYPSoeFcvArUSCYtjVARiFAWU44cCIqYS0mYAU6nY7XfvwURuTIGo2Omt3ZQr0Q==} - engines: {node: '>=14.0.0'} - dependencies: - uint8array-tools: 0.0.7 - dev: true - /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -5865,10 +4235,6 @@ packages: engines: {node: '>=0.6'} dev: true - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true - /ts-command-line-args@2.5.1: resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} hasBin: true @@ -5934,16 +4300,6 @@ packages: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} dev: true - /tsutils@3.21.0(typescript@5.5.4): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.5.4 - dev: true - /tweetnacl-util@0.15.1: resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} dev: true @@ -5959,13 +4315,6 @@ packages: prelude-ls: 1.1.2 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.1.0: resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} engines: {node: '>=4'} @@ -6007,58 +4356,10 @@ packages: - supports-color dev: true - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - 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.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - dev: true - - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 - dev: true - /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typeforce@1.18.0: - resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==} - dev: true - /typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -6083,20 +4384,6 @@ packages: dev: true optional: true - /uint8array-tools@0.0.7: - resolution: {integrity: sha512-vrrNZJiusLWoFWBqz5Y5KMCgP9W9hnjZHzZiZRT8oNAkq3d5Z5Oe76jAvVVSRh4U8GGR90N2X1dWtrhvx6L8UQ==} - engines: {node: '>=14.0.0'} - 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 @@ -6123,20 +4410,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - 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.1 - dev: true - /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} dev: true @@ -6154,12 +4427,6 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /varuint-bitcoin@1.1.2: - resolution: {integrity: sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw==} - dependencies: - safe-buffer: 5.2.1 - dev: true - /web-streams-polyfill@3.3.3: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} @@ -6179,53 +4446,6 @@ packages: utf8: 3.0.0 dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true - - /webpod@0.0.2: - resolution: {integrity: sha512-cSwwQIeg8v4i3p4ajHhwgR7N6VyxAf+KYSSsY6Pd3aETE+xEU4vbitz7qQkB0I321xnhDdgtxuiSfk5r/FVtjg==} - hasBin: true - dev: true - - /websocket-as-promised@2.1.0: - resolution: {integrity: sha512-TpFh8+9XcxOX8s+pLh217OVUF+wZjxYOa9H1ay1T/YIT8gRdEVk/mfaZbvqgRzXbNRMQngBrLbCdXzz5Yl8K0Q==} - engines: {node: '>=6'} - dependencies: - chnl: 1.2.0 - promise-controller: 1.0.0 - promise.prototype.finally: 3.1.8 - promised-map: 1.0.0 - dev: 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-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.7 - 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 @@ -6233,22 +4453,6 @@ packages: isexe: 2.0.0 dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - - /which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} @@ -6256,12 +4460,6 @@ packages: string-width: 4.2.3 dev: true - /wif@2.0.6: - resolution: {integrity: sha512-HIanZn1zmduSF+BQhkE+YXIbEiH0xPr1012QbFEGB0xsKqJii0/SqJjyn8dFv6y36kOznMgMB+LGcbZTJ1xACQ==} - dependencies: - bs58check: 2.1.2 - dev: true - /word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -6335,7 +4533,7 @@ packages: optional: true dev: true - /ws@8.18.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + /ws@8.18.0: resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: @@ -6346,9 +4544,6 @@ packages: optional: true utf-8-validate: optional: true - dependencies: - bufferutil: 4.0.8 - utf-8-validate: 5.0.10 dev: true /y18n@5.0.8: @@ -6356,12 +4551,6 @@ packages: engines: {node: '>=10'} dev: true - /yaml@2.5.0: - resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} - engines: {node: '>= 14'} - hasBin: true - dev: true - /yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -6399,25 +4588,3 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true - - /zx@7.2.3: - resolution: {integrity: sha512-QODu38nLlYXg/B/Gw7ZKiZrvPkEsjPN3LQ5JFXM7h0JvwhEdPNNl+4Ao1y4+o3CLNiDUNcwzQYZ4/Ko7kKzCMA==} - engines: {node: '>= 16.0.0'} - hasBin: true - dependencies: - '@types/fs-extra': 11.0.4 - '@types/minimist': 1.2.5 - '@types/node': 18.19.43 - '@types/ps-tree': 1.1.6 - '@types/which': 3.0.4 - chalk: 5.3.0 - fs-extra: 11.2.0 - fx: 35.0.0 - globby: 13.2.2 - minimist: 1.2.8 - node-fetch: 3.3.1 - ps-tree: 1.2.0 - webpod: 0.0.2 - which: 3.0.1 - yaml: 2.5.0 - dev: true From 20d94a5a31a6948aec7d9d55cb20e507820e796e Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 17:46:27 +0800 Subject: [PATCH 26/45] log CONTAINER_ID --- scripts/run_parachain_worker.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 34babcd..1e95fcc 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -15,8 +15,11 @@ WORKER_BASEDIR="$BASEDIR/worker" function main { - restart_parachain_services + PARACHAIN_CONTAINER_ID=$(restart_parachain_services) + echo "Waiting 30 seconds for parachain to start..." sleep 30 + echo "Showing logs for parachain container:" + docker logs $PARACHAIN_CONTAINER_ID restart_worker_services exit } @@ -53,13 +56,16 @@ function restart_worker_services { function restart_parachain_services { echo "Restarting parachain services ..." - docker run -itd \ + CONTAINER_ID=$(docker run -itd \ --name para-aio \ --restart always \ --net=host \ --env CHAIN="rococo" \ --volume /opt/litentry/parachain:/opt/litentry/parachain \ - litentry/litentry-chain-aio:${PARACHAIN_TAG} + litentry/litentry-chain-aio:${PARACHAIN_TAG}) + + echo "Parachain container started with ID: $CONTAINER_ID" + return "$CONTAINER_ID" } main \ No newline at end of file From f95686834dda94e3dcb509a106749ca47ff4bd7c Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Fri, 9 Aug 2024 17:49:43 +0800 Subject: [PATCH 27/45] docker logs one more --- scripts/run_parachain_worker.sh | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 1e95fcc..698682f 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -15,11 +15,11 @@ WORKER_BASEDIR="$BASEDIR/worker" function main { - PARACHAIN_CONTAINER_ID=$(restart_parachain_services) - echo "Waiting 30 seconds for parachain to start..." + restart_parachain_services sleep 30 - echo "Showing logs for parachain container:" - docker logs $PARACHAIN_CONTAINER_ID + CONTAINER_ID=$(docker ps --format "{{.ID}}" --filter "name=para-aio" --latest) + echo "Parachain container ID: $CONTAINER_ID" + docker logs $CONTAINER_ID restart_worker_services exit } @@ -56,16 +56,13 @@ function restart_worker_services { function restart_parachain_services { echo "Restarting parachain services ..." - CONTAINER_ID=$(docker run -itd \ + docker run -itd \ --name para-aio \ --restart always \ --net=host \ --env CHAIN="rococo" \ --volume /opt/litentry/parachain:/opt/litentry/parachain \ - litentry/litentry-chain-aio:${PARACHAIN_TAG}) - - echo "Parachain container started with ID: $CONTAINER_ID" - return "$CONTAINER_ID" + litentry/litentry-chain-aio:${PARACHAIN_TAG} } main \ No newline at end of file From 18da58741416441bd908df2399f111be347f351e Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Mon, 12 Aug 2024 10:11:47 +0800 Subject: [PATCH 28/45] docker logs -f --- scripts/run_parachain_worker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 698682f..3413e13 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -19,7 +19,7 @@ function main { sleep 30 CONTAINER_ID=$(docker ps --format "{{.ID}}" --filter "name=para-aio" --latest) echo "Parachain container ID: $CONTAINER_ID" - docker logs $CONTAINER_ID + docker logs -f $CONTAINER_ID restart_worker_services exit } From 29f042c68e338300340b0048c8a4f51e837a167a Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Mon, 12 Aug 2024 16:12:24 +0800 Subject: [PATCH 29/45] add sudo --- scripts/run_parachain_worker.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 3413e13..702ceb5 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -14,7 +14,8 @@ BASEDIR="/opt/litentry" WORKER_BASEDIR="$BASEDIR/worker" function main { - + sudo mkdir -p /opt/litentry/parachain + sudo chown -R 1000:1000 /opt/litentry/parachain restart_parachain_services sleep 30 CONTAINER_ID=$(docker ps --format "{{.ID}}" --filter "name=para-aio" --latest) From d0832197261c1c139b3d30d07d359799dc426920 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Mon, 12 Aug 2024 16:18:43 +0800 Subject: [PATCH 30/45] remove asemd --- scripts/run_parachain_worker.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 702ceb5..576912b 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -16,6 +16,9 @@ WORKER_BASEDIR="$BASEDIR/worker" function main { sudo mkdir -p /opt/litentry/parachain sudo chown -R 1000:1000 /opt/litentry/parachain + sudo mkdir -p $WORKER_BASEDIR + sudo chown -R 1000:1000 $WORKER_BASEDIR + restart_parachain_services sleep 30 CONTAINER_ID=$(docker ps --format "{{.ID}}" --filter "name=para-aio" --latest) @@ -48,7 +51,6 @@ function restart_worker_services { --env RUST_LOG=info,litentry_worker=debug,ws=warn,sp_io=error,substrate_api_client=warn,itc_parentchain_light_client=info,jsonrpsee_ws_client=warn,jsonrpsee_ws_server=warn,enclave_runtime=debug,ita_stf=debug,its_rpc_handler=warn,itc_rpc_client=warn,its_consensus_common=debug,its_state=warn,its_consensus_aura=warn,aura*=warn,its_consensus_slots=warn,itp_attestation_handler=debug,http_req=debug,lc_mock_server=warn,itc_rest_client=debug,lc_credentials=debug,lc_identity_verification=debug,lc_stf_task_receiver=debug,lc_stf_task_sender=debug,lc_data_providers=debug,itp_top_pool=debug,itc_parentchain_indirect_calls_executor=debug,bc_task_receiver=debug \ --env DATA_DIR='/data' \ --env-file /opt/worker_configs/worker_env \ - --volume /var/run/aesmd:/var/run/aesmd \ --volume ${WORKER_BASEDIR}/w${WORKER_ID}:/data \ --workdir /data \ litentry/identity-worker:${WORKER_TAG} ${commands[${WORKER_ID}]} From 119e4d785cd87f63c6c570724eddd7929f1de29e Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Mon, 12 Aug 2024 16:52:28 +0800 Subject: [PATCH 31/45] add sleep --- scripts/run_parachain_worker.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 576912b..ffdd257 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -20,11 +20,15 @@ function main { sudo chown -R 1000:1000 $WORKER_BASEDIR restart_parachain_services - sleep 30 + sleep 300 # wait for parachain to start CONTAINER_ID=$(docker ps --format "{{.ID}}" --filter "name=para-aio" --latest) echo "Parachain container ID: $CONTAINER_ID" docker logs -f $CONTAINER_ID restart_worker_services + sleep 120 # wait for worker to start + + docker ps + exit } From ffd0ae8dfa20e24f007fe86a4b00f6e1216cc98a Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Mon, 12 Aug 2024 18:16:30 +0800 Subject: [PATCH 32/45] remove docker logs --- scripts/run_parachain_worker.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index ffdd257..e29ef94 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -21,9 +21,6 @@ function main { restart_parachain_services sleep 300 # wait for parachain to start - CONTAINER_ID=$(docker ps --format "{{.ID}}" --filter "name=para-aio" --latest) - echo "Parachain container ID: $CONTAINER_ID" - docker logs -f $CONTAINER_ID restart_worker_services sleep 120 # wait for worker to start From 30c39a60e6fb1b91ed6bfdc1aa783b9b7761dd0d Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Mon, 12 Aug 2024 21:01:13 +0800 Subject: [PATCH 33/45] add los --- scripts/run_parachain_worker.sh | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index e29ef94..cb2971e 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -12,26 +12,40 @@ PARACHAIN_TAG=latest WORKER_TAG=latest BASEDIR="/opt/litentry" WORKER_BASEDIR="$BASEDIR/worker" +PARACHAIN_BASEDIR="$BASEDIR/parachain" function main { - sudo mkdir -p /opt/litentry/parachain - sudo chown -R 1000:1000 /opt/litentry/parachain + sudo mkdir -p $PARACHAIN_BASEDIR + sudo chown -R 1000:1000 $PARACHAIN_BASEDIR sudo mkdir -p $WORKER_BASEDIR sudo chown -R 1000:1000 $WORKER_BASEDIR - restart_parachain_services + PARACHAIN_CONTAINER_ID=$(restart_parachain_services) + echo "Parachain container ID: $PARACHAIN_CONTAINER_ID" sleep 300 # wait for parachain to start - restart_worker_services + + WORKER_CONTAINER_ID=$(restart_worker_services) + echo "Worker container ID: $WORKER_CONTAINER_ID" sleep 120 # wait for worker to start docker ps - exit + echo "Showing parachain logs:" + docker logs -f $PARACHAIN_CONTAINER_ID & + PARACHAIN_LOGS_PID=$! + + echo "Showing worker logs:" + docker logs -f $WORKER_CONTAINER_ID & + WORKER_LOGS_PID=$! + + sleep 300 + exit 0 } function print_divider { echo "------------------------------------------------------------" } + function restart_worker_services { echo "Restarting worker-${WORKER_ID} services ..." @@ -45,7 +59,7 @@ function restart_worker_services { "-T ws:localhost -P 2000 -p 9944 -r 3443 -w 2001 -h 4545 --parentchain-start-block 0 run --skip-ra --dev" ) fi - docker run -itd \ + docker run -d \ --name litentry-worker-${WORKER_ID} \ --restart always \ --net=host \ @@ -60,12 +74,12 @@ function restart_worker_services { function restart_parachain_services { echo "Restarting parachain services ..." - docker run -itd \ + docker run -d \ --name para-aio \ --restart always \ --net=host \ --env CHAIN="rococo" \ - --volume /opt/litentry/parachain:/opt/litentry/parachain \ + --volume $PARACHAIN_BASEDIR:$PARACHAIN_BASEDIR \ litentry/litentry-chain-aio:${PARACHAIN_TAG} } From 6d9f4112dbe8f02dd286b47cf29a40ce2547f573 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Mon, 12 Aug 2024 21:20:50 +0800 Subject: [PATCH 34/45] logs one more --- scripts/run_parachain_worker.sh | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index cb2971e..f532266 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -20,26 +20,21 @@ function main { sudo mkdir -p $WORKER_BASEDIR sudo chown -R 1000:1000 $WORKER_BASEDIR - PARACHAIN_CONTAINER_ID=$(restart_parachain_services) - echo "Parachain container ID: $PARACHAIN_CONTAINER_ID" + restart_parachain_services + parachain_container_id=$(docker ps --filter "name=para-aio" --format "{{.ID}}") + echo "Parachain container ID: $parachain_container_id" + echo "Showing parachain logs:" + docker logs -f --tail 200 $parachain_container_id sleep 300 # wait for parachain to start - WORKER_CONTAINER_ID=$(restart_worker_services) - echo "Worker container ID: $WORKER_CONTAINER_ID" - sleep 120 # wait for worker to start - - docker ps + restart_worker_services + worker_container_id=$(docker ps --filter "name=litentry-worker-0" --format "{{.ID}}") + echo "Worker container ID: $worker_container_id" - echo "Showing parachain logs:" - docker logs -f $PARACHAIN_CONTAINER_ID & - PARACHAIN_LOGS_PID=$! - - echo "Showing worker logs:" - docker logs -f $WORKER_CONTAINER_ID & - WORKER_LOGS_PID=$! + docker logs -f --tail 200 $worker_container_id + sleep 120 # wait for worker to start - sleep 300 - exit 0 + exit } function print_divider { From 95447f37994d6d3b9b627ecaa63b99a2c4cd52ed Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Mon, 12 Aug 2024 21:55:29 +0800 Subject: [PATCH 35/45] fix logs --- scripts/run_parachain_worker.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index f532266..fa0cfe5 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -24,15 +24,16 @@ function main { parachain_container_id=$(docker ps --filter "name=para-aio" --format "{{.ID}}") echo "Parachain container ID: $parachain_container_id" echo "Showing parachain logs:" - docker logs -f --tail 200 $parachain_container_id - sleep 300 # wait for parachain to start + timeout 300 docker logs -f --tail 200 $parachain_container_id & + wait restart_worker_services worker_container_id=$(docker ps --filter "name=litentry-worker-0" --format "{{.ID}}") echo "Worker container ID: $worker_container_id" + echo "Showing worker logs:" - docker logs -f --tail 200 $worker_container_id - sleep 120 # wait for worker to start + docker logs -f --tail 200 $worker_container_id & + sleep 300 # wait for worker to start exit } From 5b9ec5b060cdd96bc4e25f515896e8286b99fd3d Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Mon, 12 Aug 2024 22:15:10 +0800 Subject: [PATCH 36/45] netstat status --- scripts/run_parachain_worker.sh | 3 ++- vc-di-tests/integration-tests/.env.local | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index fa0cfe5..a10df8d 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -34,7 +34,8 @@ function main { docker logs -f --tail 200 $worker_container_id & sleep 300 # wait for worker to start - + netstat -tuln | grep 9944 + netstat -tuln | grep 2000 exit } diff --git a/vc-di-tests/integration-tests/.env.local b/vc-di-tests/integration-tests/.env.local index 261d96d..ddad8e6 100644 --- a/vc-di-tests/integration-tests/.env.local +++ b/vc-di-tests/integration-tests/.env.local @@ -1,3 +1,3 @@ NODE_ENV = local -WORKER_ENDPOINT = ws://localhost:2000 -NODE_ENDPOINT = ws://localhost:9944 +WORKER_ENDPOINT = ws://127.0.0.1:2000 +NODE_ENDPOINT = ws://127.0.0.1:9944 From 56e4e2ce9cf875319c0324ad39073aabe36f673b Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Tue, 13 Aug 2024 11:29:22 +0800 Subject: [PATCH 37/45] add --device --- scripts/run_parachain_worker.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index a10df8d..4bb0d6e 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -60,6 +60,8 @@ function restart_worker_services { --name litentry-worker-${WORKER_ID} \ --restart always \ --net=host \ + --device=/dev/null:/dev/sgx/provision \ + --device=/dev/null:/dev/sgx/enclave \ --env RUST_LOG=info,litentry_worker=debug,ws=warn,sp_io=error,substrate_api_client=warn,itc_parentchain_light_client=info,jsonrpsee_ws_client=warn,jsonrpsee_ws_server=warn,enclave_runtime=debug,ita_stf=debug,its_rpc_handler=warn,itc_rpc_client=warn,its_consensus_common=debug,its_state=warn,its_consensus_aura=warn,aura*=warn,its_consensus_slots=warn,itp_attestation_handler=debug,http_req=debug,lc_mock_server=warn,itc_rest_client=debug,lc_credentials=debug,lc_identity_verification=debug,lc_stf_task_receiver=debug,lc_stf_task_sender=debug,lc_data_providers=debug,itp_top_pool=debug,itc_parentchain_indirect_calls_executor=debug,bc_task_receiver=debug \ --env DATA_DIR='/data' \ --env-file /opt/worker_configs/worker_env \ From cc8e3b0b00a5719c27d46a636bfdf68a18804ceb Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Tue, 13 Aug 2024 15:12:06 +0800 Subject: [PATCH 38/45] --clean-reset --- scripts/run_parachain_worker.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/scripts/run_parachain_worker.sh b/scripts/run_parachain_worker.sh index 4bb0d6e..b9d9e83 100755 --- a/scripts/run_parachain_worker.sh +++ b/scripts/run_parachain_worker.sh @@ -50,12 +50,12 @@ function restart_worker_services { commands=( "-T ws:localhost -P 2000 -p 9944 -r 3443 -w 2001 -h 4545 --enable-metrics --parentchain-start-block 947410 run --skip-ra --dev" ) - else + else # staging example commands=( - "-T ws:localhost -P 2000 -p 9944 -r 3443 -w 2001 -h 4545 --parentchain-start-block 0 run --skip-ra --dev" + "--clean-reset -T ws:localhost -P 2000 -p 9944 -r 3443 -w 2001 -h 4545 --parentchain-start-block 0 run --skip-ra --dev" ) - fi + fi docker run -d \ --name litentry-worker-${WORKER_ID} \ --restart always \ @@ -65,8 +65,6 @@ function restart_worker_services { --env RUST_LOG=info,litentry_worker=debug,ws=warn,sp_io=error,substrate_api_client=warn,itc_parentchain_light_client=info,jsonrpsee_ws_client=warn,jsonrpsee_ws_server=warn,enclave_runtime=debug,ita_stf=debug,its_rpc_handler=warn,itc_rpc_client=warn,its_consensus_common=debug,its_state=warn,its_consensus_aura=warn,aura*=warn,its_consensus_slots=warn,itp_attestation_handler=debug,http_req=debug,lc_mock_server=warn,itc_rest_client=debug,lc_credentials=debug,lc_identity_verification=debug,lc_stf_task_receiver=debug,lc_stf_task_sender=debug,lc_data_providers=debug,itp_top_pool=debug,itc_parentchain_indirect_calls_executor=debug,bc_task_receiver=debug \ --env DATA_DIR='/data' \ --env-file /opt/worker_configs/worker_env \ - --volume ${WORKER_BASEDIR}/w${WORKER_ID}:/data \ - --workdir /data \ litentry/identity-worker:${WORKER_TAG} ${commands[${WORKER_ID}]} } From ea576d8de8b19043f8a0b5a0a67c0da52d81d213 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Tue, 13 Aug 2024 16:18:27 +0800 Subject: [PATCH 39/45] test:fix ci --- .github/workflows/ci.yml | 43 ++- .../assertion_contracts.test.ts | 259 +++++++++++------- .../integration-tests/common/helpers.ts | 8 +- .../common/utils/identity-helper.ts | 33 ++- vc-di-tests/integration-tests/package.json | 4 +- 5 files changed, 226 insertions(+), 121 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cbe190c..6b31b3e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,7 +25,7 @@ jobs: with: node-version: 18 - fmt: + install-deps: runs-on: ubuntu-latest needs: - set-env @@ -35,27 +35,51 @@ jobs: - name: Install deps run: | corepack enable && corepack enable pnpm && pnpm install --frozen-lockfile + npm install --save-dev hardhat + + fmt: + runs-on: ubuntu-latest + needs: + - set-env + steps: + - uses: actions/checkout@v4 - name: Fmt check run: | pnpm run check-format + compile-contracts: + runs-on: ubuntu-latest + needs: + - set-env + - install-deps + steps: + - uses: actions/checkout@v4 + + - name: Check compile + run: | + npx hardhat compile + contracts-uint-tests: runs-on: ubuntu-latest needs: - set-env + - install-deps + - compile-contracts steps: - uses: actions/checkout@v4 - name: Run contracts unit tests run: | - npm install --save-dev hardhat npx hardhat test integration-tests: runs-on: ubuntu-latest needs: - set-env + - install-deps + - compile-contracts + - contracts-uint-tests steps: - uses: actions/checkout@v4 @@ -80,7 +104,7 @@ jobs: echo "MAGIC_CRAFT_API_KEY=${{ secrets.MAGIC_CRAFT_API_KEY }}" >> /opt/worker_configs/worker_env shell: bash - - name: Start parachain + - name: Start parachain-worker run: | ./scripts/run_parachain_worker.sh docker ps @@ -89,3 +113,16 @@ jobs: run: | corepack enable && corepack enable pnpm && pnpm install --no-frozen-lockfile pnpm run test assertion_contracts.test.ts + + - name: Stop docker + run: | + docker rm -f $(docker ps -aq) + + - name: Upload docker logs if test fails + uses: actions/upload-artifact@v4 + if: failure() + with: + name: integration-tests-docker-logs + path: docker-logs + if-no-files-found: ignore + retention-days: 3 diff --git a/vc-di-tests/integration-tests/assertion_contracts.test.ts b/vc-di-tests/integration-tests/assertion_contracts.test.ts index 3233826..90efb9c 100644 --- a/vc-di-tests/integration-tests/assertion_contracts.test.ts +++ b/vc-di-tests/integration-tests/assertion_contracts.test.ts @@ -56,116 +56,163 @@ describe('Test Vc (direct request)', function () { step('loading tokenmapping contract bytecode', async function () { const file = path.resolve( './', - './contracts/token_holding_amount/TokenMapping.sol/TokenMapping.json' + '../../artifacts/contracts/token_holding_amount/TokenMapping.sol/TokenMapping.json' ) const data = fs.readFileSync(file, 'utf8') contractBytecode = JSON.parse(data).bytecode assert.isNotEmpty(contractBytecode) }) - // step('deploying tokenmapping contract via parachain pallet', async function () { - // const secretValue = 'my-secrets-value'; - // const secretEncoded = context.api.createType('String', secretValue).toU8a(); - // const encryptedSecrets = encryptWithTeeShieldingKey(teeShieldingKey, secretEncoded); - - // const secret = '0x' + encryptedSecrets.toString('hex'); - - // const assertionId = '0x0000000000000000000000000000000000000003'; - // const createAssertionEventsPromise = subscribeToEvents('evmAssertions', 'AssertionCreated', context.api); - - // const proposal = context.api.tx.evmAssertions.createAssertion(assertionId, contractBytecode, [ - // // At least three secrets are required here. - // secret, - // secret, - // secret, - // ]); - // await context.api.tx.developerCommittee.execute(proposal, proposal.encodedLength).signAndSend(alice); - - // const event = (await createAssertionEventsPromise).map((e) => e); - // assert.equal(event.length, 1); - // }); - - // step('linking identities (alice)', async function () { - // let currentNonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); - // const getNextNonce = () => currentNonce++; - // const evmNonce = getNextNonce(); - - // const evmIdentity = await context.web3Wallets.evm.Alice.getIdentity(context); - // const evmValidation = await buildValidations( - // context, - // aliceSubstrateIdentity, - // evmIdentity, - // evmNonce, - // 'ethereum', - // context.web3Wallets.evm.Alice - // ); - // const evmNetworks = context.api.createType('Vec', ['Ethereum', 'Bsc']); - // linkIdentityRequestParams.push({ - // nonce: evmNonce, - // identity: evmIdentity, - // validation: evmValidation, - // networks: evmNetworks, - // }); - - // let counter = 0; - // for (const { nonce, identity, validation, networks } of linkIdentityRequestParams) { - // counter++; - // const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; - // const linkIdentityCall = await createSignedTrustedCallLinkIdentity( - // context.api, - // context.mrEnclave, - // context.api.createType('Index', nonce), - // context.web3Wallets.substrate.Alice, - // aliceSubstrateIdentity, - // identity.toHex(), - // validation.toHex(), - // networks.toHex(), - // context.api.createType('Option', aesKey).toHex(), - // requestIdentifier, - // { - // withWrappedBytes: false, - // withPrefix: counter % 2 === 0, // alternate per entry - // } - // ); - - // const res = await sendRequestFromTrustedCall(context, teeShieldingKey, linkIdentityCall); - // await assertIsInSidechainBlock('linkIdentityCall', res); - // } - // }); - - // step('requesting VC for deployed contract', async function () { - // await sleep(30); - // const requestIdentifier = `0x${randomBytes(32).toString('hex')}`; - // const nonce = (await getSidechainNonce(context, aliceSubstrateIdentity)).toNumber(); - - // const abiCoder = new ethers.utils.AbiCoder(); - // const encodedData = abiCoder.encode(['string'], ['bnb']); - - // const assertion = { - // dynamic: context.api.createType('DynamicParams', [ - // Uint8Array.from(Buffer.from('0000000000000000000000000000000000000003', 'hex')), - // encodedData, - // true, - // ]), - // }; - - // const requestVcCall = await createSignedTrustedCallRequestVc( - // context.api, - // context.mrEnclave, - // context.api.createType('Index', nonce), - // context.web3Wallets.substrate.Alice, - // aliceSubstrateIdentity, - // context.api.createType('Assertion', assertion).toHex(), - // context.api.createType('Option', aesKey).toHex(), - // requestIdentifier, - // { - // withWrappedBytes: false, - // withPrefix: true, - // } - // ); - - // const res = await sendRequestFromTrustedCall(context, teeShieldingKey, requestVcCall); - // await assertIsInSidechainBlock(`${Object.keys(assertion)[0]} requestVcCall`, res); - // assertVc(context, aliceSubstrateIdentity, res.value); - // }); + step( + 'deploying tokenmapping contract via parachain pallet', + async function () { + const secretValue = 'my-secrets-value' + const secretEncoded = context.api + .createType('String', secretValue) + .toU8a() + const encryptedSecrets = encryptWithTeeShieldingKey( + teeShieldingKey, + secretEncoded + ) + + const secret = '0x' + encryptedSecrets.toString('hex') + + const assertionId = '0x0000000000000000000000000000000000000000' + const createAssertionEventsPromise = subscribeToEvents( + 'evmAssertions', + 'AssertionCreated', + context.api + ) + + const proposal = context.api.tx.evmAssertions.createAssertion( + assertionId, + contractBytecode, + [ + // At least three secrets are required here. + secret, + secret, + secret, + ] + ) + await context.api.tx.developerCommittee + .execute(proposal, proposal.encodedLength) + .signAndSend(alice) + + const event = (await createAssertionEventsPromise).map((e) => e) + assert.equal(event.length, 1) + } + ) + + step('linking identities (alice)', async function () { + let currentNonce = ( + await getSidechainNonce(context, aliceSubstrateIdentity) + ).toNumber() + const getNextNonce = () => currentNonce++ + const evmNonce = getNextNonce() + + const evmIdentity = + await context.web3Wallets.evm.Alice.getIdentity(context) + const evmValidation = await buildValidations( + context, + aliceSubstrateIdentity, + evmIdentity, + evmNonce, + 'ethereum', + context.web3Wallets.evm.Alice + ) + const evmNetworks = context.api.createType('Vec', [ + 'Ethereum', + 'Bsc', + ]) + linkIdentityRequestParams.push({ + nonce: evmNonce, + identity: evmIdentity, + validation: evmValidation, + networks: evmNetworks, + }) + + let counter = 0 + for (const { + nonce, + identity, + validation, + networks, + } of linkIdentityRequestParams) { + counter++ + const requestIdentifier = `0x${randomBytes(32).toString('hex')}` + const linkIdentityCall = await createSignedTrustedCallLinkIdentity( + context.api, + context.mrEnclave, + context.api.createType('Index', nonce), + context.web3Wallets.substrate.Alice, + aliceSubstrateIdentity, + identity.toHex(), + validation.toHex(), + networks.toHex(), + context.api.createType('Option', aesKey).toHex(), + requestIdentifier, + { + withWrappedBytes: false, + withPrefix: counter % 2 === 0, // alternate per entry + } + ) + + const res = await sendRequestFromTrustedCall( + context, + teeShieldingKey, + linkIdentityCall + ) + await assertIsInSidechainBlock('linkIdentityCall', res) + } + }) + + step('requesting VC for deployed contract', async function () { + await sleep(30) + const requestIdentifier = `0x${randomBytes(32).toString('hex')}` + const nonce = ( + await getSidechainNonce(context, aliceSubstrateIdentity) + ).toNumber() + + const abiCoder = new ethers.utils.AbiCoder() + const encodedData = abiCoder.encode(['string'], ['bnb']) + + const assertion = { + dynamic: context.api.createType('DynamicParams', [ + Uint8Array.from( + Buffer.from( + '0000000000000000000000000000000000000000', + 'hex' + ) + ), + encodedData, + true, + ]), + } + + const requestVcCall = await createSignedTrustedCallRequestVc( + context.api, + context.mrEnclave, + context.api.createType('Index', nonce), + context.web3Wallets.substrate.Alice, + aliceSubstrateIdentity, + context.api.createType('Assertion', assertion).toHex(), + context.api.createType('Option', aesKey).toHex(), + requestIdentifier, + { + withWrappedBytes: false, + withPrefix: true, + } + ) + + const res = await sendRequestFromTrustedCall( + context, + teeShieldingKey, + requestVcCall + ) + await assertIsInSidechainBlock( + `${Object.keys(assertion)[0]} requestVcCall`, + res + ) + assertVc(context, aliceSubstrateIdentity, res.value) + }) }) diff --git a/vc-di-tests/integration-tests/common/helpers.ts b/vc-di-tests/integration-tests/common/helpers.ts index 6b526df..d925ceb 100644 --- a/vc-di-tests/integration-tests/common/helpers.ts +++ b/vc-di-tests/integration-tests/common/helpers.ts @@ -101,7 +101,9 @@ export function stfErrorToString(stfError: StfError): string { if (stfError.isRequestVCFailed) { const [_assertionIgnored, errorDetail] = stfError.asRequestVCFailed - return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}` + return `${stfError.type}: ${ + errorDetail.type + }: ${errorDetail.value?.toHuman()}` } if ( @@ -115,7 +117,9 @@ export function stfErrorToString(stfError: StfError): string { ) { const errorDetail = stfError.value as ErrorDetail - return `${stfError.type}: ${errorDetail.type}: ${errorDetail.value?.toHuman()}` + return `${stfError.type}: ${ + errorDetail.type + }: ${errorDetail.value?.toHuman()}` } if (stfError.isInvalidNonce) { diff --git a/vc-di-tests/integration-tests/common/utils/identity-helper.ts b/vc-di-tests/integration-tests/common/utils/identity-helper.ts index 47f5051..98fe5ca 100644 --- a/vc-di-tests/integration-tests/common/utils/identity-helper.ts +++ b/vc-di-tests/integration-tests/common/utils/identity-helper.ts @@ -122,16 +122,27 @@ export async function buildWeb2Validation( if (config.verificationType === 'PublicMessage') { discordValidationData.Web2Validation.Discord = { PublicMessage: { - channel_id: `0x${Buffer.from('919848392035794945', 'utf8').toString('hex')}`, + channel_id: `0x${Buffer.from( + '919848392035794945', + 'utf8' + ).toString('hex')}`, message_id: `0x${Buffer.from('1', 'utf8').toString('hex')}`, - guild_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, + guild_id: `0x${Buffer.from( + validationNonce.toString(), + 'utf8' + ).toString('hex')}`, }, } } else { discordValidationData.Web2Validation.Discord = { OAuth2: { - code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, - redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, + code: `0x${Buffer.from('test-oauth-code', 'utf8').toString( + 'hex' + )}`, + redirect_uri: `0x${Buffer.from( + 'http://test-redirect-uri', + 'utf8' + ).toString('hex')}`, }, } } @@ -150,15 +161,23 @@ export async function buildWeb2Validation( if (config.verificationType === 'PublicTweet') { twitterValidationData.Web2Validation.Twitter = { PublicTweet: { - tweet_id: `0x${Buffer.from(validationNonce.toString(), 'utf8').toString('hex')}`, + tweet_id: `0x${Buffer.from( + validationNonce.toString(), + 'utf8' + ).toString('hex')}`, }, } } else { twitterValidationData.Web2Validation.Twitter = { OAuth2: { - code: `0x${Buffer.from('test-oauth-code', 'utf8').toString('hex')}`, + code: `0x${Buffer.from('test-oauth-code', 'utf8').toString( + 'hex' + )}`, state: config.oauthState, - redirect_uri: `0x${Buffer.from('http://test-redirect-uri', 'utf8').toString('hex')}`, + redirect_uri: `0x${Buffer.from( + 'http://test-redirect-uri', + 'utf8' + ).toString('hex')}`, }, } } diff --git a/vc-di-tests/integration-tests/package.json b/vc-di-tests/integration-tests/package.json index a220e22..6ed105a 100644 --- a/vc-di-tests/integration-tests/package.json +++ b/vc-di-tests/integration-tests/package.json @@ -7,9 +7,7 @@ "format": "prettier --write .", "pretest": "eslint .", "test": "mocha --exit --sort -r ts-node/register --loader=ts-node/esm", - "check-types": "tsc --noEmit", - "compile-contracts": "cd ../../litentry/core/assertion-build/src/dynamic && pnpm i && pnpm clean && pnpm compile", - "link-contracts": "ln -s ../../litentry/core/assertion-build/src/dynamic/artifacts/contracts ./contracts" + "check-types": "tsc --noEmit" }, "dependencies": { "@litentry/vc-schema-validator": "^0.0.1", From 837f66b95d43028879f483cec1bed18596014e93 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Tue, 13 Aug 2024 16:26:51 +0800 Subject: [PATCH 40/45] test:fix deps installation --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6b31b3e..35a829d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,12 +35,12 @@ jobs: - name: Install deps run: | corepack enable && corepack enable pnpm && pnpm install --frozen-lockfile - npm install --save-dev hardhat fmt: runs-on: ubuntu-latest needs: - set-env + - install-deps steps: - uses: actions/checkout@v4 @@ -58,6 +58,7 @@ jobs: - name: Check compile run: | + npm install --save-dev hardhat npx hardhat compile contracts-uint-tests: From 321492613a1459c7894bfb481d50782cc08c492c Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Tue, 13 Aug 2024 16:41:27 +0800 Subject: [PATCH 41/45] fmt --- .github/workflows/ci.yml | 35 +++++++---------------------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 35a829d..0391e56 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,61 +25,40 @@ jobs: with: node-version: 18 - install-deps: - runs-on: ubuntu-latest - needs: - - set-env - steps: - - uses: actions/checkout@v4 - - - name: Install deps - run: | - corepack enable && corepack enable pnpm && pnpm install --frozen-lockfile - fmt: runs-on: ubuntu-latest needs: - set-env - - install-deps steps: - uses: actions/checkout@v4 - name: Fmt check run: | + corepack enable && corepack enable pnpm && pnpm install --frozen-lockfile pnpm run check-format - compile-contracts: + contracts-uint-tests: runs-on: ubuntu-latest needs: - set-env - - install-deps steps: - uses: actions/checkout@v4 - - name: Check compile + - name: Install deps run: | + corepack enable && corepack enable pnpm && pnpm install --frozen-lockfile npm install --save-dev hardhat - npx hardhat compile - - contracts-uint-tests: - runs-on: ubuntu-latest - needs: - - set-env - - install-deps - - compile-contracts - steps: - - uses: actions/checkout@v4 - name: Run contracts unit tests run: | npx hardhat test + - name: Run contracts unit tests + run: | + npx hardhat test integration-tests: runs-on: ubuntu-latest needs: - - set-env - - install-deps - - compile-contracts - contracts-uint-tests steps: - uses: actions/checkout@v4 From 28dd0e86cc12a2523f1f2ced91dabd7101848209 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Tue, 13 Aug 2024 16:51:00 +0800 Subject: [PATCH 42/45] fmt one more --- .github/workflows/ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0391e56..2a3e6bb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,7 +46,6 @@ jobs: - name: Install deps run: | - corepack enable && corepack enable pnpm && pnpm install --frozen-lockfile npm install --save-dev hardhat - name: Run contracts unit tests @@ -88,6 +87,12 @@ jobs: run: | ./scripts/run_parachain_worker.sh docker ps + + - name: Compile contracts + run: | + npm install --save-dev hardhat + npx hardhat compile + - name: Run integration tests working-directory: ./vc-di-tests/integration-tests run: | From 15beb0ac7efc4b6c5b2cce796ab72e46d418b7ff Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Tue, 13 Aug 2024 17:20:00 +0800 Subject: [PATCH 43/45] Update README --- README.md | 86 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index eae39a2..6f0c928 100644 --- a/README.md +++ b/README.md @@ -1,59 +1,69 @@ -## Description +1. ## Description -Dynamic VC assertion contract written by solidity, using [Hardhat](https://hardhat.org) for compile and test. + Dynamic VC assertion contract written by solidity, using [Hardhat](https://hardhat.org) for compile and test. -## Environment setup + ## Environment setup -- Install [nvm](https://github.com/nvm-sh/nvm) -- Inside the repository, run `nvm use` to set the correct Node version. - - If the version is not installed, run `nvm install`. + - Install [nvm](https://github.com/nvm-sh/nvm) + - Inside the repository, run `nvm use` to set the correct Node version. + - If the version is not installed, run `nvm install`. -## Installation + ## Installation -```shell -nvm use -corepack enable pnpm -pnpm install -``` + ```shell + nvm use + corepack enable pnpm + pnpm install + ``` -## Usage + ## Usage -### Compile + ### Compile -1. Using hardhat. + 1. Using hardhat. -```shell -pnpm compile -``` + ```shell + pnpm compile + ``` -After compiled, the contract bytecode will generate in file `artifacts/contracts/**/{contractName}.sol/{contractName}.json`, e.g. the bytecode of A1 is in the file `artifacts/contracts/A1.sol/A1.json`. + After compiled, the contract bytecode will generate in file `artifacts/contracts/**/{contractName}.sol/{contractName}.json`, e.g. the bytecode of A1 is in the file `artifacts/contracts/A1.sol/A1.json`. -2. Using [Remix IDE](https://remix.ethereum.org). + 2. Using [Remix IDE](https://remix.ethereum.org). -Should use the `dynamic` as your project root path in Remix IDE as below: + Should use the `dynamic` as your project root path in Remix IDE as below: -```shell -remixd -s your_repo_path/tee-worker/litentry/core/assertion-build/src/dynamic --remix-ide https://remix.ethereum.org -``` + ```shell + remixd -s your_repo_path/tee-worker/litentry/core/assertion-build/src/dynamic --remix-ide https://remix.ethereum.org + ``` -If you have not install remixd before, rub below script to install it. + If you have not install remixd before, rub below script to install it. -```shell -npm install -g @remix-project/remixd -``` + ```shell + npm install -g @remix-project/remixd + ``` -### Testing + ### Testing -- Test all: `pnpm test`. + - Test all: `pnpm test`. -```shell -pnpm test -``` + ```shell + pnpm test + ``` -- Test single file: `pnpm test {testFilePath}`. + - Test single file: `pnpm test {testFilePath}`. -Example: + Example: -```shell -pnpm test tests/token-holding-amount.ts -``` + ```shell + pnpm test tests/token-holding-amount.ts + ``` + + #### Vc DI tests(integration tests) + + 1. Start parachain&&worker + 2. `pnpm install` + 3. `pnpm --filter integration-tests run test assertion_contracts.test.ts` + +​ + +​ \ No newline at end of file From a6d0e4ed9cc01b1beead54dd149bbf4de0ade148 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Tue, 13 Aug 2024 17:21:38 +0800 Subject: [PATCH 44/45] rm credential json --- .../common/credential-json/achainable.json | 251 -------------- .../common/credential-json/discord.json | 114 ------- .../common/credential-json/index.ts | 50 --- .../common/credential-json/litentry.json | 16 - .../common/credential-json/nodereal.json | 311 ------------------ .../common/credential-json/oneblock.json | 44 --- .../common/credential-json/twitter.json | 16 - .../common/credential-json/vip3.json | 30 -- 8 files changed, 832 deletions(-) delete mode 100644 vc-di-tests/integration-tests/common/credential-json/achainable.json delete mode 100644 vc-di-tests/integration-tests/common/credential-json/discord.json delete mode 100644 vc-di-tests/integration-tests/common/credential-json/index.ts delete mode 100644 vc-di-tests/integration-tests/common/credential-json/litentry.json delete mode 100644 vc-di-tests/integration-tests/common/credential-json/nodereal.json delete mode 100644 vc-di-tests/integration-tests/common/credential-json/oneblock.json delete mode 100644 vc-di-tests/integration-tests/common/credential-json/twitter.json delete mode 100644 vc-di-tests/integration-tests/common/credential-json/vip3.json diff --git a/vc-di-tests/integration-tests/common/credential-json/achainable.json b/vc-di-tests/integration-tests/common/credential-json/achainable.json deleted file mode 100644 index 4306f7b..0000000 --- a/vc-di-tests/integration-tests/common/credential-json/achainable.json +++ /dev/null @@ -1,251 +0,0 @@ -[ - { - "id": "bab-holder", - "name": "Trustworthy Binance user", - "description": "You are holding a Binance Account Bound(BAB) token", - "assertion": { - "id": "Achainable", - "payload": { - "Basic": { - "name": "BAB token holder", - "chain": "Bsc" - } - } - }, - "dataProvider": "achainable", - "network": "ethereum", - "mockDid": "litentry:evm:0xdB01C6a38E780a2644b3B26961b14313b019714a", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "uniswap-v2-v3-user", - "name": "Uniswap V2/V3 User", - "description": "You are a trader or liquidity provider of Uniswap V2 or V3\nUniswap V2 Factory Contract: 0x5c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f\nUniswap V3 Factory Contract: 0x1f98431c8ad98523631ae4a59f267346ea31f984", - "assertion": { - "id": "Achainable", - "payload": { - "Basic": { - "name": "Uniswap V2/V3 user", - "chain": "Ethereum" - } - } - }, - "dataProvider": "achainable", - "network": "ethereum", - "mockDid": "litentry:evm:0x7031a420603a83EFBE85503e5A4BF562121A85ab", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "dot-holder", - "name": "DOT Holding Time", - "description": "The length of time a user continues to hold DOT token (threshold DOT > 5)", - "assertion": { - "id": "A7", - "payload": "5" - }, - "dataProvider": "achainable", - "network": "polkadot", - "mockDid": "litentry:substrate:0xbf6e312fd006908b0152da113ec73b9ffc9983f9b848698180b9b43c5ad44681", - "mockWeb3Network": "litentry,polkadot", - "expectedCredentialValue": true - }, - { - "id": "eth-holder", - "name": "ETH Holding Time", - "description": "The length of time a user continues to hold ETH token (threshold ETH > 0.01)", - "assertion": { - "id": "A11", - "payload": "0.01" - }, - "dataProvider": "achainable", - "network": "ethereum", - "mockDid": "litentry:evm:0x6887246668a3b87F54DeB3b94Ba47a6f63F32985", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": false - }, - { - "id": "wbtc-holder", - "name": "WBTC Holding Time", - "description": "The length of time a user continues to hold WBTC token (threshold WBTC > 0.001)", - "assertion": { - "id": "A10", - "payload": 0.001 - }, - "dataProvider": "achainable", - "network": "ethereum", - "mockDid": "litentry:evm:0x5680b3FcBB64FB161adbD347BC92e8DDEDA97008", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "lit-holder", - "name": "LIT Holding Time", - "description": "The length of time a user continues to hold LIT token (threshold LIT > 10)", - "assertion": { - "id": "A4", - "payload": "10" - }, - "dataProvider": "achainable", - "network": "litentry", - "mockDid": "litentry:substrate:0x6c7fdb8b8eaad1af9faaf918493606e1a3e8c20f9d852773ab5ebfbb93bd1948", - "mockWeb3Network": "litentry,polkadot", - "expectedCredentialValue": true - }, - { - "id": "ethereum-account-class-of-year", - "name": "Ethereum Account Class of Year", - "description": "The class of year that your Ethereum account was created (must have on-chain records)", - "assertion": { - "id": "achainable", - "payload": { - "ClassOfYear": { - "name": "Account created between {dates}", - "chain": "Ethereum" - } - } - }, - "dataProvider": "achainable", - "network": "ethereum", - "mockDid": "litentry:evm:0x3D66aF7cBeb2d9c6b4497a2269F7e3fcd9996524", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "evm-transaction-count", - "name": "ETH Transaction Count", - "description": "Your total transaction amount on these EVM networks: Ethereum", - "assertion": { - "id": "A8", - "payload": ["Ethereum"] - }, - "dataProvider": "achainable", - "network": "ethereum", - "mockDid": "litentry:evm:0xb144EeFd29B2E448419fd8dD6Cd6c7EB258D4715", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": false - }, - { - "id": "litentry-transaction-count", - "name": "LIT Transaction Count", - "description": "Your total transaction amount on these Substrate networks: Litentry, Litmus, Ethereum.", - "assertion": { - "id": "A8", - "payload": ["Litentry", "Litmus", "Ethereum"] - }, - "dataProvider": "achainable", - "network": "litentry", - "mockDid": "litentry:substrate:0xcacb83fc3d36caa4d03a80c0669aa19b38ffd1a9bb54d78b719fac1942816b40", - "mockWeb3Network": "litentry,polkadot", - "expectedCredentialValue": true - }, - { - "id": "polkadot-governance-participation", - "name": "Polkadot Governance Participation Proof", - "description": "You have ever participated in any Polkadot on-chain governance events. This credential is counting: Technical Committee Proposals, Democracy Proposals, Council Proposals, Proposal Seconds, Proposal Votes, Democracy Votes, Council Votes, Treasury Spend Proposals.", - "assertion": { - "id": "A14", - "payload": [] - }, - "dataProvider": "achainable", - "network": "litentry", - "mockDid": "litentry:substrate:0x5FeEE1E799015A22EbD216d43484FCB3BA88de20", - "mockWeb3Network": "litentry,polkadot", - "expectedCredentialValue": true - }, - { - "id": "contract-creator", - "name": "Ethereum Contract Creator", - "description": "You are a deployer of a smart contract on these networks: Ethereum", - "assertion": { - "id": "Achainable", - "payload": { - "Amount": { - "name": "Created over {amount} contracts", - "chain": "Ethereum", - "amount": "0" - } - } - }, - "dataProvider": "achainable", - "network": "ethereum", - "mockDid": "litentry:evm:0x11fBffc1F3dF23E7219e2B3036fe2A12C10cD3AD", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holder-dot", - "name": "DOT Holder", - "description": "The number of DOT tokens you hold > 0", - "assertion": { - "id": "Achainable", - "payload": { - "Amount": { - "name": "Balance over {amount}", - "chain": "Polkadot", - "amount": "0" - } - } - }, - "dataProvider": "achainable", - "network": "litentry", - "mockDid": "litentry:substrate:0x0d584a4cbbfd9a4878d816512894e65918e54fae13df39a6f520fc90caea2fb0", - "mockWeb3Network": "litentry,polkadot", - "expectedCredentialValue": true - }, - { - "id": "token-holder-eth", - "name": "ETH Holder", - "description": "The number of ETH tokens you hold > 0", - "assertion": { - "id": "Achainable", - "payload": { - "Amount": { - "name": "Balance over {amount}", - "chain": "Ethereum", - "amount": "0" - } - } - }, - "dataProvider": "achainable", - "network": "litentry", - "mockDid": "litentry:evm:0x66485bB62896Bd7bE54dE8E2050cc8746a50E0b2", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holder-lit", - "name": "LIT Holder", - "description": "The number of LIT tokens you hold > 0", - "assertion": { - "id": "Achainable", - "payload": { - "Amount": { - "name": "Balance over {amount}", - "chain": "Litentry", - "amount": "0" - } - } - }, - "dataProvider": "achainable", - "network": "litentry", - "mockDid": "litentry:substrate:0xc0103c4b56ce752d05b16a88260e3a9e2c44306602a74c5edd1cd4ff56356f7c", - "mockWeb3Network": "litentry,polkadot", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-btcs", - "name": "BTCS Holding Time", - "description": "The number of BTCS tokens you hold > 0", - "assertion": { - "id": "Brc20AmountHolder", - "payload": [] - }, - "dataProvider": "achainable", - "network": "litentry", - "mockDid": "litentry:bitcoin:0x02dbb0aff6e115284ac2ac5795e299588dae74474ad4bd0e580e92163e80837da8", - "mockWeb3Network": "BitcoinP2tr", - "expectedCredentialValue": null - } -] diff --git a/vc-di-tests/integration-tests/common/credential-json/discord.json b/vc-di-tests/integration-tests/common/credential-json/discord.json deleted file mode 100644 index 65c0b1a..0000000 --- a/vc-di-tests/integration-tests/common/credential-json/discord.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "id": "id-hubber", - "name": "Active Discord ID-Hubber", - "description": "You have commented in Litentry Discord #🪂id-hubber channel. Channel link: https://discord.com/channels/807161594245152800/1093886939746291882", - "assertion": { - "id": "A3", - "payload": [ - "807161594245152800", - "1093886939746291882", - "1088092822592307240" - ] - }, - "dataProvider": "discord", - "network": "discord", - "mockDid": "litentry:discord:niceguy2309", - "mockWeb3Network": "", - "expectedCredentialValue": true - }, - { - "id": "join-litentry-discord", - "name": "Litentry Discord Member", - "description": "The user is a member of Litentry Discord.\nServer link: 'https://discord.gg/phBSa3eMX9'.\nGuild ID: 807161594245152800", - "assertion": { - "id": "A2", - "payload": "807161594245152800" - }, - "dataProvider": "discord", - "network": "discord", - "mockDid": "litentry:discord:almuyaad_jr", - "mockWeb3Network": "", - "expectedCredentialValue": true - }, - { - "id": "litentry-and-sora-quiz-attendee", - "name": "Litentry & SORA Quiz Attendee", - "description": "Congratulations on your participation in our first quiz in collaboration with our partner, SORA. You have embarked on an exciting educational journey, exploring the world of DeFi & Web3 Identity, we truly appreciate your curiosity and dedication.", - "assertion": { - "id": "GenericDiscordRole", - "payload": { - "soraquiz": "attendee" - } - }, - "dataProvider": "discord", - "network": "discord", - "mockDid": "litentry:discord:light_bearer01", - "mockWeb3Network": "", - "expectedCredentialValue": false - }, - { - "id": "litentry-and-ordinals-user", - "name": "Litentry & Ordinals User", - "description": "Litentry Participants in the Bitcoin Ecosystem", - "assertion": { - "id": "GenericDiscordRole", - "payload": { - "soraquiz": "master" - } - }, - "dataProvider": "discord", - "network": "discord", - "mockDid": "litentry:discord:cynthian09021", - "mockWeb3Network": "", - "expectedCredentialValue": false - }, - { - "id": "score-contest-legend", - "name": "Contest Legend", - "description": "You got the Top Award of community contest", - "assertion": { - "id": "GenericDiscordRole", - "payload": { - "soraquiz": "legend" - } - }, - "dataProvider": "discord", - "network": "discord", - "mockDid": "litentry:discord:zawmyosatservice0737", - "mockWeb3Network": "", - "expectedCredentialValue": false - }, - { - "id": "score-contest-popularity", - "name": "Contest Popularity", - "description": "You got the Popularity of community contest", - "assertion": { - "id": "GenericDiscordRole", - "payload": { - "soraquiz": "popularity" - } - }, - "dataProvider": "discord", - "network": "discord", - "mockDid": "litentry:discord:eudizjr", - "mockWeb3Network": "", - "expectedCredentialValue": false - }, - { - "id": "score-contest-participant", - "name": "Contest Participant", - "description": "You got the Participant of community contest", - "assertion": { - "id": "GenericDiscordRole", - "payload": { - "soraquiz": "participant" - } - }, - "dataProvider": "discord", - "network": "discord", - "mockDid": "litentry:discord:neo_travolta", - "mockWeb3Network": "", - "expectedCredentialValue": false - } -] diff --git a/vc-di-tests/integration-tests/common/credential-json/index.ts b/vc-di-tests/integration-tests/common/credential-json/index.ts deleted file mode 100644 index a30faac..0000000 --- a/vc-di-tests/integration-tests/common/credential-json/index.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - CorePrimitivesAssertion, - CorePrimitivesNetworkWeb3Network, -} from '@litentry/parachain-api' -import type { Codec } from '@polkadot/types-codec/types' -import type { U8aLike } from '@polkadot/util/types' - -type AssertionGenericPayload = - | string - | Array - | Record - -import vip3Json from './vip3.json' assert { type: 'json' } -import achainableJson from './achainable.json' assert { type: 'json' } -import noderealJson from './nodereal.json' assert { type: 'json' } -import discordJson from './discord.json' assert { type: 'json' } -import litentryJson from './litentry.json' assert { type: 'json' } -import twitterJson from './twitter.json' assert { type: 'json' } -import oneblockJson from './oneblock.json' assert { type: 'json' } -export const vip3 = vip3Json as unknown as CredentialDefinition[] -export const achainable = achainableJson as unknown as CredentialDefinition[] -export const nodereal = noderealJson as unknown as CredentialDefinition[] -export const discord = discordJson as unknown as CredentialDefinition[] -export const litentry = litentryJson as unknown as CredentialDefinition[] -export const twitter = twitterJson as unknown as CredentialDefinition[] -export const oneblock = oneblockJson as unknown as CredentialDefinition[] -export const credentialsJson = [ - ...vip3, - ...achainable, - ...nodereal, - ...litentry, - ...twitter, - ...oneblock, - ...discord, -] - -export interface CredentialDefinition { - id: string - name: string - description: string - assertion: { - id: CorePrimitivesAssertion['type'] - payload: AssertionGenericPayload - } - dataProvider: string - network: CorePrimitivesNetworkWeb3Network['type'] - mockDid: string - mockWeb3Network: string - expectedCredentialValue: boolean -} diff --git a/vc-di-tests/integration-tests/common/credential-json/litentry.json b/vc-di-tests/integration-tests/common/credential-json/litentry.json deleted file mode 100644 index 770dba8..0000000 --- a/vc-di-tests/integration-tests/common/credential-json/litentry.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "id": "evm-version-early-bird", - "name": "IDHub EVM Version Early Bird", - "description": "The user is an early bird user of the IdentityHub EVM version and has generated at least 1 credential during 2023 Aug 14th ~ Aug 21st.", - "assertion": { - "id": "A20", - "payload": [] - }, - "dataProvider": "litentryIndexer", - "network": "litentry", - "mockDid": "litentry:substrate:0xa20d2c66bd88271ce78b2d8b7367c025e108944fda26a5a4e95b5efcc3f26b45", - "mockWeb3Network": "litentry,polkadot", - "expectedCredentialValue": false - } -] diff --git a/vc-di-tests/integration-tests/common/credential-json/nodereal.json b/vc-di-tests/integration-tests/common/credential-json/nodereal.json deleted file mode 100644 index 298a0a7..0000000 --- a/vc-di-tests/integration-tests/common/credential-json/nodereal.json +++ /dev/null @@ -1,311 +0,0 @@ -[ - { - "id": "bnb-domain-holding-amount", - "name": ".bnb Holding Amount", - "description": "You are holding a certain amount of bnb domain names", - - "assertion": { - "id": "BnbDomainHolding", - "payload": [] - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xf813361F1FADC5c51EFdd0ba5b93e2760a5537EC", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "bnb-999-club-member", - "name": "000-999.bnb Domain Holding Amount", - "description": "You are holding a certain amount of 000-999.bnb domain names", - "assertion": { - "id": "BnbDigitDomainClub", - "payload": "Bnb999ClubMember" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xA6E3d8B20a5DC12c986AF63E496B8D585117aBBd", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "bnb-10k-club-member", - "name": "0000-9999.bnb Holding Amount", - "description": "You are holding a certain amount of 0000-9999.bnb domain names", - "assertion": { - "id": "BnbDigitDomainClub", - "payload": "Bnb10KClubMember" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xD673b52E4c560f5d2BD41fd92e7566Ef445DC5AB", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-amp", - "name": "AMP Holding Amount", - "description": "The number of AMP tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Amp" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x5029bC78f84Fc7F1568FbA1A7808e753691E6675", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-comp", - "name": "COMP Holding Amount", - "description": "The number of COMP tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Comp" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xA5044e67f0c35b31fe82F2Ded6606b0b91545e98", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-crv", - "name": "CRV Holding Amount", - "description": "The number of CRV tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Crv" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xd14A1dB9B2Bfe0cE9cC175C24d6B01a16aB84f42", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-cvx", - "name": "CVX Holding Amount", - "description": "The number of CVX tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Cvx" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xAA1582084c4f588eF9BE86F5eA1a919F86A3eE57", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-dydx", - "name": "DYDX Holding Amount", - "description": "The number of DYDX tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Dydx" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xe7DAE0cEd7a64d50136D466945257b600e718ACa", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-grt", - "name": "GRT Holding Amount", - "description": "The number of GRT tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Grt" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x46f80018211D5cBBc988e853A8683501FCA4ee9b", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-gtc", - "name": "GTC Holding Amount", - "description": "The number of GTC tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Gtc" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x310E035d176ccB589511eD16af7aE7BAc4fc7f83", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-gusd", - "name": "GUSD Holding Amount", - "description": "The number of GUSD tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Gusd" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x94CFF34005A073911C3179abE89F1677f0D37d42", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-link", - "name": "LINK Holding Amount", - "description": "The number of LINK tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Link" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xB4e9275827B5f049196f5337F69533937475A3de", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-lit", - "name": "LIT Holding Amount", - "description": "The number of LIT tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Lit" - }, - "dataProvider": "nodereal", - "network": "litentry", - "mockDid": "litentry:evm:0xcFD97648df7fB75A545c69106d2049aa3D540334", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-people", - "name": "PEOPLE Holding Amount", - "description": "The number of PEOPLE tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "People" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x60E4F4bF50204dEeeD8bF4C6216b41BA2e5e453a", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-ton", - "name": "TON Holding Amount", - "description": "The number of TON tokens you hold > 0", - "assertion": { - "id": "EvmAmountHolding", - "payload": "Ton" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x8BaE6C9EA994d18e6b05cE33aE3e54Fa6F7FcE82", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-trx", - "name": "TRX Holding Amount", - "description": "The number of TRX tokens you hold > 0", - "assertion": { - "id": "EvmAmountHolding", - "payload": "Trx" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x2d23D597b21F88c55fC6f1E2a84f42b06b7915dF", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-tusd", - "name": "TUSD Holding Amount", - "description": "The number of TUSD tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Tusd" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xDebc74120F822C0F0e6Eb69dB5F347F574d2D446", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-usdd", - "name": "USDD Holding Amount", - "description": "The number of USDD tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Usdd" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x31743a08D895d01a49dB98b8F9c8469D92f63745", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-usdt", - "name": "USDT Holding Amount", - "description": "The number of USDT tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Usdt" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x67aB29354a70732CDC97f372Be81d657ce8822cd", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-holding-amount-matic", - "name": "MATIC Holding Amount", - "description": "The number of MATIC tokens you hold > 0", - "assertion": { - "id": "TokenHoldingAmount", - "payload": "Matic" - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0x3B7BB88dB769923dC2eE1e9e6A83c00A74c407D2", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "token-staking-amount-lit", - "name": "LIT Staking Amount", - "description": "You are staking a certain amount of LIT", - "assertion": { - "id": "LitStaking", - "payload": [] - }, - "dataProvider": "nodereal", - "network": "litentry", - "mockDid": "litentry:substrate:0xfc7a9dd32be14db4695555aa9a2abd240a8c2160f84ccb403a985701dd13fe50", - "mockWeb3Network": "litentry,polkadot", - "expectedCredentialValue": true - }, - { - "id": "weirdo-ghost-gang-holder", - "name": "WeirdoGhostGang Holder", - "description": "You are WeirdoGhostGang NFT holder", - "assertion": { - "id": "WeirdoGhostGangHolder", - "payload": [] - }, - "dataProvider": "nodereal", - "network": "ethereum", - "mockDid": "litentry:evm:0xCaA18Cd73E2756c680859F0A97E2C4846D50f71B", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - } -] diff --git a/vc-di-tests/integration-tests/common/credential-json/oneblock.json b/vc-di-tests/integration-tests/common/credential-json/oneblock.json deleted file mode 100644 index a3272ce..0000000 --- a/vc-di-tests/integration-tests/common/credential-json/oneblock.json +++ /dev/null @@ -1,44 +0,0 @@ -[ - { - "id": "oneblock-course-participation", - "name": "OneBlock+ Substrate Blockchain Development Course Participation", - "description": "You were a participant to the course co-created by OneBlock+ and Parity: \"Introduction to Substrate Blockchain Development, Phase 12\".", - "assertion": { - "id": "Oneblock", - "payload": "CourseParticipation" - }, - "dataProvider": "oneblock", - "network": "oneblock", - "mockDid": "litentry:substrate:0xf26f4f77ccb38173185242cd1199696e5df5201666aae383de86eeb9e8251b3b", - "mockWeb3Network": "polkadot,kusama", - "expectedCredentialValue": false - }, - { - "id": "oneblock-course-completion", - "name": "OneBlock+ Substrate Blockchain Development Course Completion", - "description": "You have completed the course co-created by OneBlock+ and Parity: \"Introduction to Substrate Blockchain Development, Phase 12\". \n\n OneBlock+: “We hope you will keep your enthusiasm and continue to explore on the road ahead.”", - "assertion": { - "id": "Oneblock", - "payload": "CourseCompletion" - }, - "dataProvider": "oneblock", - "network": "oneblock", - "mockDid": "litentry:substrate:0xaa639b158b45acd0f4315be3a074aee110979f34123828a0c8ef74c24925d96f", - "mockWeb3Network": "polkadot,kusama", - "expectedCredentialValue": true - }, - { - "id": "oneblock-course-outstanding", - "name": "OneBlock+ Substrate Blockchain Development Course Outstanding Student", - "description": "You were awarded the title \"Outstanding Student\" in the course \"Introduction to Substrate Blockchain Development, Phase 12” co-created by OneBlock+ and Parity.", - "assertion": { - "id": "Oneblock", - "payload": "CourseOutstanding" - }, - "dataProvider": "oneblock", - "network": "oneblock", - "mockDid": "litentry:substrate:0xd43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d", - "mockWeb3Network": "polkadot,kusama", - "expectedCredentialValue": true - } -] diff --git a/vc-di-tests/integration-tests/common/credential-json/twitter.json b/vc-di-tests/integration-tests/common/credential-json/twitter.json deleted file mode 100644 index c10bb75..0000000 --- a/vc-di-tests/integration-tests/common/credential-json/twitter.json +++ /dev/null @@ -1,16 +0,0 @@ -[ - { - "id": "twitter-follower-amount", - "name": "Twitter Follower Amount", - "description": "You have a certain amount of Twitter followers.", - "assertion": { - "id": "A6", - "payload": "A6" - }, - "dataProvider": "twitter", - "network": "twitter", - "mockDid": "litentry:twitter:litentry", - "mockWeb3Network": "", - "expectedCredentialValue": true - } -] diff --git a/vc-di-tests/integration-tests/common/credential-json/vip3.json b/vc-di-tests/integration-tests/common/credential-json/vip3.json deleted file mode 100644 index a4c8573..0000000 --- a/vc-di-tests/integration-tests/common/credential-json/vip3.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "id": "vip3-membership-card-gold", - "name": "VIP3 Membership Card Gold", - "description": "VIP3 Membership Card Gold", - "assertion": { - "id": "Vip3MembershipCard", - "payload": "Gold" - }, - "dataProvider": "vip3", - "network": "ethereum", - "mockDid": "litentry:evm:0x651614cA9097C5ba189Ef85e7851Ef9cff592B2c", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - }, - { - "id": "vip3-membership-card-silver", - "name": "VIP3 Membership Card Silver", - "description": "VIP3 Membership Card Silver", - "assertion": { - "id": "Vip3MembershipCard", - "payload": "Silver" - }, - "dataProvider": "vip3", - "network": "ethereum", - "mockDid": "litentry:evm:0x10CdF7F7A32E2F24c853AE6567b75D862Ee2B46f", - "mockWeb3Network": "bsc,ethereum", - "expectedCredentialValue": true - } -] From 77f4c56b01ccc65d3ad6af251c74b722836bade6 Mon Sep 17 00:00:00 2001 From: Verin1005 Date: Tue, 13 Aug 2024 17:41:33 +0800 Subject: [PATCH 45/45] fmt --- README.md | 86 +++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 6f0c928..0a14db7 100644 --- a/README.md +++ b/README.md @@ -1,69 +1,69 @@ 1. ## Description - Dynamic VC assertion contract written by solidity, using [Hardhat](https://hardhat.org) for compile and test. + Dynamic VC assertion contract written by solidity, using [Hardhat](https://hardhat.org) for compile and test. - ## Environment setup + ## Environment setup - - Install [nvm](https://github.com/nvm-sh/nvm) - - Inside the repository, run `nvm use` to set the correct Node version. - - If the version is not installed, run `nvm install`. + - Install [nvm](https://github.com/nvm-sh/nvm) + - Inside the repository, run `nvm use` to set the correct Node version. + - If the version is not installed, run `nvm install`. - ## Installation + ## Installation - ```shell - nvm use - corepack enable pnpm - pnpm install - ``` + ```shell + nvm use + corepack enable pnpm + pnpm install + ``` - ## Usage + ## Usage - ### Compile + ### Compile - 1. Using hardhat. + 1. Using hardhat. - ```shell - pnpm compile - ``` + ```shell + pnpm compile + ``` - After compiled, the contract bytecode will generate in file `artifacts/contracts/**/{contractName}.sol/{contractName}.json`, e.g. the bytecode of A1 is in the file `artifacts/contracts/A1.sol/A1.json`. + After compiled, the contract bytecode will generate in file `artifacts/contracts/**/{contractName}.sol/{contractName}.json`, e.g. the bytecode of A1 is in the file `artifacts/contracts/A1.sol/A1.json`. - 2. Using [Remix IDE](https://remix.ethereum.org). + 2. Using [Remix IDE](https://remix.ethereum.org). - Should use the `dynamic` as your project root path in Remix IDE as below: + Should use the `dynamic` as your project root path in Remix IDE as below: - ```shell - remixd -s your_repo_path/tee-worker/litentry/core/assertion-build/src/dynamic --remix-ide https://remix.ethereum.org - ``` + ```shell + remixd -s your_repo_path/tee-worker/litentry/core/assertion-build/src/dynamic --remix-ide https://remix.ethereum.org + ``` - If you have not install remixd before, rub below script to install it. + If you have not install remixd before, rub below script to install it. - ```shell - npm install -g @remix-project/remixd - ``` + ```shell + npm install -g @remix-project/remixd + ``` - ### Testing + ### Testing - - Test all: `pnpm test`. + - Test all: `pnpm test`. - ```shell - pnpm test - ``` + ```shell + pnpm test + ``` - - Test single file: `pnpm test {testFilePath}`. + - Test single file: `pnpm test {testFilePath}`. - Example: + Example: - ```shell - pnpm test tests/token-holding-amount.ts - ``` + ```shell + pnpm test tests/token-holding-amount.ts + ``` - #### Vc DI tests(integration tests) + #### Vc DI tests(integration tests) - 1. Start parachain&&worker - 2. `pnpm install` - 3. `pnpm --filter integration-tests run test assertion_contracts.test.ts` + 1. Start parachain&&worker + 2. `pnpm install` + 3. `pnpm --filter integration-tests run test assertion_contracts.test.ts` -​ +​ -​ \ No newline at end of file +​