diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6b36d8e..a7dce6f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,16 +8,43 @@ on: workflow_dispatch: jobs: - check: - strategy: - fail-fast: true - matrix: - foundry_profile: ["test-via-ir", "test-no-ir"] + hardhat-check: + name: Hardhat project + runs-on: ubuntu-latest + env: + FOUNDRY_PROFILE: hardhat + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + run_install: true + + - name: Format check + run: pnpm prettier --check . + + - name: Run hardhat tests + env: + NODE_OPTIONS: "--experimental-loader ts-node/esm/transpile-only --no-warnings=ExperimentalWarning" + run: pnpm hardhat test + foundry-check: name: Foundry project runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + foundry_profile: ["via-ir", "no-ir"] env: - FOUNDRY_PROFILE: ${{ matrix.foundry_profile }} + FOUNDRY_PROFILE: test-${{ matrix.foundry_profile }} steps: - uses: actions/checkout@v4 with: @@ -32,11 +59,6 @@ jobs: run: | forge --version - - name: Run Forge fmt - run: | - forge fmt --check - id: fmt - - name: Run Forge build run: | forge build --sizes @@ -46,7 +68,7 @@ jobs: # https://book.getfoundry.sh/forge/gas-section-snapshots - name: Confirm comparison snapshot run: | - forge snapshot --check ${{ env.FOUNDRY_PROFILE }}.gas-snapshot \ + forge snapshot --check snapshots/${{ matrix.foundry_profile }}/comparison.gas-snapshot \ --match-path "test/comparison/*" id: comparison-snapshot @@ -54,18 +76,17 @@ jobs: run: | forge test -vvv \ --no-match-path "test/comparison/*" - git diff --exit-code snapshots-${{ env.FOUNDRY_PROFILE }} + git diff --exit-code snapshots/${{ matrix.foundry_profile }} id: test - # Coverage testing affects gas cost, and creates different snapshots. # Only `lcov.info` is diffed to confirm coverage is checked in. Coverage # doesn't use the 'comparison' tests. - name: Confirm coverage run: | - forge coverage --report-file ${{ env.FOUNDRY_PROFILE }}.lcov.info \ + forge coverage --report-file coverage/lcov.info \ --report lcov --report summary \ --no-match-path "test/comparison/*" \ --no-match-coverage "test/comparison/*" - git diff --exit-code ${{ env.FOUNDRY_PROFILE }}.lcov.info + git diff --exit-code coverage/lcov.info id: diff-coverage diff --git a/.gitignore b/.gitignore index 85198aa..d2a195e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,19 @@ docs/ # Dotenv file .env + +node_modules + +# Hardhat files +/artifacts + +# TypeChain files +/typechain +/typechain-types + +/coverage.json + +# Hardhat Ignition default folder for deployments against a local node +ignition/deployments/chain-31337 + +cache_hardhat diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..4a56e0e --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +lib +snapshots +pnpm-lock.yaml diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..538810b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "plugins": ["prettier-plugin-solidity"] +} diff --git a/README.md b/README.md index 511171a..c33c129 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,8 @@ # turbocrime/solidity-cbor -**This is a library for parsing CBOR.** +**This is a library for parsing CBOR.** This library does not provide tools for writing CBOR. -This library does not provide tools for writing CBOR. - -This project was initially forked from [filecoin's CborDecode.sol](https://github.com/Zondax/filecoin-solidity/blob/master/contracts/v0.8/utils/CborDecode.sol) by Zondax AG. +This project was initially forked from [filecoin's CborDecode.sol](https://github.com/filecoin-project/filecoin-solidity/blob/master/contracts/v0.8/utils/CborDecode.sol). [RFC 8949](https://www.iana.org/go/rfc8949) @@ -12,20 +10,19 @@ This project was initially forked from [filecoin's CborDecode.sol](https://githu [CBOR Tags Registry](https://www.iana.org/assignments/cbor-tags/cbor-tags.xhtml) - ## Usage Most methods accept parameters `bytes` of CBOR data and `uint256` index, and return an updated index (and one or more values if appropriate). Since the data parameter is always first, you may sugar calls via `using` directive. CBOR natively supports values up to `uint64`, so the typical values returned are `uint64`. Some methods return other types. -Deserialization methods are a capitalized name of the type like `UInt`, `NInt`, `Text`, `Map`, and so on for every CBOR type. These return a value of the equivalent solidity type when possible. +Deserialization methods are a capitalized name of the type like `UInt`, `NInt`, `Bytes`, `Map`, and so on for every CBOR type. These return a value of the equivalent solidity type when possible. -When specific format constraints exist, some optimized method variants are available, such as `String1` when the next should be a 1-byte string. +When specific format constraints exist, some optimized method variants are available, such as `String1` when the next string should fit within a `bytes1`, or `String32` when the next string should fit within a `bytes32`. -You can peek at the type of the next item with `isBytes` and so on. +You can peek at the major type of the next CBOR item with `isBytes`, `isTag`, and so on. -The caller is responsible for handling the index and using it to index the appropriate data. No 'cursor' metaphor is provided, but the example below demonstrates how a caller may define and use a cursor for convenience. +The caller is responsible for managing the index and using it to index the appropriate data. No 'cursor' metaphor is provided, but the example below demonstrates how a caller may define and use a cursor for convenience. ```solidity using ReadCbor for bytes; @@ -33,32 +30,32 @@ using ReadCbor for bytes; bytes constant someBytes = hex"84616103616102"; struct Cursor { - bytes b; - uint256 i; + bytes b; + uint256 i; } function example() pure { - Cursor memory c = Cursor(someBytes, 0); - uint32 arrayLen; - - (c.i, arrayLen) = c.b.Array(c.i); - - // In this example, we know the array length. - assert(arrayLen == 4); - string[] memory arrayStrs = new string[](2); - uint64[] memory arrayNums = new uint64[](2); - - // CBOR arrays may contain items of any type. - for (uint32 arrayIdx = 0; arrayIdx < arrayLen; arrayIdx++) { - if (c.b.isString(c.i)) { - (c.i, arrayStrs[arrayIdx / 2]) = c.b.String(c.i); - } else if (c.b.isUInt(c.i)) { - (c.i, arrayNums[arrayIdx / 2]) = c.b.UInt(c.i); - } + Cursor memory c = Cursor(someBytes, 0); + uint32 arrayLen; + + (c.i, arrayLen) = c.b.Array(c.i); + + // In this example, we know the array length. + assert(arrayLen == 4); + string[] memory arrayStrs = new string[](2); + uint64[] memory arrayNums = new uint64[](2); + + // CBOR arrays may contain items of any type. + for (uint32 arrayIdx = 0; arrayIdx < arrayLen; arrayIdx++) { + if (c.b.isString(c.i)) { + (c.i, arrayStrs[arrayIdx / 2]) = c.b.String(c.i); + } else if (c.b.isUInt(c.i)) { + (c.i, arrayNums[arrayIdx / 2]) = c.b.UInt(c.i); } + } - // Require that the data was fully consumed. - require(c.b.length == c.i); + // Require that the data was fully consumed. + require(c.b.length == c.i); } ``` diff --git a/contracts/TestFixture.sol b/contracts/TestFixture.sol new file mode 100644 index 0000000..100bb51 --- /dev/null +++ b/contracts/TestFixture.sol @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.28; + +import "../src/ReadCbor.sol"; + +/// @title TestFixture +/// @notice A small example contract fixture to confirm minimal function. +contract TestFixture { + uint public unlockTime; + address payable public owner; + + event ParsedBytes32(uint i, bytes32 item, uint8 len); + + constructor() payable { + owner = payable(msg.sender); + } + + using ReadCbor for bytes; + function readThis(bytes calldata cbor) public { + require(msg.sender == owner, "You aren't the owner"); + + uint8 limit = 12; + (uint i, bytes32 parsed, uint8 len) = cbor.Bytes32(0, limit); + + require( + i <= cbor.length, + "TestFixture Must read within bounds of cbor" + ); + require(i == cbor.length, "TestFixture Must read entire cbor"); + + emit ParsedBytes32(i, parsed, len); + + owner.transfer(address(this).balance); + } +} diff --git a/coverage/lcov.info b/coverage/lcov.info new file mode 100644 index 0000000..a12eedf --- /dev/null +++ b/coverage/lcov.info @@ -0,0 +1,489 @@ +TN: +SF:src/ReadCbor.sol +DA:33,818 +FN:33,ReadCbor.parseArg +FNDA:818,ReadCbor.parseArg +DA:38,818 +BRDA:38,0,0,541 +BRDA:38,0,1,256 +DA:39,541 +DA:40,277 +BRDA:40,1,0,3 +BRDA:40,1,1,256 +DA:41,3 +DA:42,3 +BRDA:42,2,0,1 +BRDA:42,2,1,2 +DA:46,274 +BRDA:46,3,0,7 +BRDA:46,3,1,256 +DA:47,7 +DA:48,267 +BRDA:48,4,0,4 +BRDA:48,4,1,256 +DA:49,4 +DA:50,263 +BRDA:50,5,0,7 +BRDA:50,5,1,256 +DA:51,7 +DA:53,256 +DA:57,827 +FN:57,ReadCbor.u8 +FNDA:827,ReadCbor.u8 +DA:63,827 +DA:64,827 +DA:68,7 +FN:68,ReadCbor.u16 +FNDA:7,ReadCbor.u16 +DA:74,7 +DA:75,7 +DA:79,4 +FN:79,ReadCbor.u32 +FNDA:4,ReadCbor.u32 +DA:85,4 +DA:86,4 +DA:90,7 +FN:90,ReadCbor.u64 +FNDA:7,ReadCbor.u64 +DA:96,7 +DA:97,7 +DA:107,274 +FN:107,ReadCbor.header +FNDA:274,ReadCbor.header +DA:111,274 +DA:112,274 +DA:113,274 +DA:114,274 +DA:115,274 +DA:125,540 +FN:125,ReadCbor.header +FNDA:540,ReadCbor.header +DA:130,540 +DA:131,540 +DA:132,540 +BRDA:132,6,0,2 +BRDA:132,6,1,538 +DA:133,538 +DA:144,10 +FN:144,ReadCbor.header +FNDA:10,ReadCbor.header +DA:150,10 +DA:151,10 +DA:152,10 +DA:153,10 +BRDA:153,7,0,2 +BRDA:153,7,1,8 +DA:154,8 +DA:155,8 +BRDA:155,8,0,2 +BRDA:155,8,1,6 +DA:156,6 +DA:166,575 +FN:166,ReadCbor.header8 +FNDA:575,ReadCbor.header8 +DA:171,575 +DA:174,575 +DA:175,575 +DA:176,575 +DA:177,575 +DA:180,575 +BRDA:180,9,0,1 +BRDA:180,9,1,574 +DA:182,574 +BRDA:182,10,0,531 +DA:183,531 +BRDA:183,11,0,2 +BRDA:183,11,1,529 +DA:185,529 +DA:186,529 +DA:188,529 +BRDA:188,12,0,2 +BRDA:188,12,1,527 +DA:191,570 +DA:201,40 +FN:201,ReadCbor.header32 +FNDA:40,ReadCbor.header32 +DA:206,40 +DA:209,40 +DA:210,40 +DA:211,40 +DA:212,40 +DA:215,40 +BRDA:215,13,0,2 +BRDA:215,13,1,38 +DA:217,38 +BRDA:217,14,0,2 +BRDA:217,14,1,1 +DA:219,2 +DA:220,2 +DA:222,2 +BRDA:222,15,0,1 +BRDA:222,15,1,1 +DA:223,36 +BRDA:223,16,0,3 +DA:224,3 +BRDA:224,17,0,1 +BRDA:224,17,1,2 +DA:225,2 +BRDA:225,18,0,1 +BRDA:225,18,1,1 +DA:227,1 +DA:228,1 +DA:230,1 +BRDA:230,19,0,1 +DA:232,1 +DA:233,1 +DA:238,36 +DA:245,262 +FN:245,ReadCbor.isNull +FNDA:262,ReadCbor.isNull +DA:250,262 +DA:262,2 +FN:262,ReadCbor.Null +FNDA:2,ReadCbor.Null +DA:263,2 +BRDA:263,20,0,1 +BRDA:263,20,1,1 +DA:264,1 +DA:271,4 +FN:271,ReadCbor.isUndefined +FNDA:4,ReadCbor.isUndefined +DA:276,4 +DA:288,2 +FN:288,ReadCbor.Undefined +FNDA:2,ReadCbor.Undefined +DA:292,2 +BRDA:292,21,0,1 +BRDA:292,21,1,1 +DA:293,1 +DA:300,3 +FN:300,ReadCbor.isBool +FNDA:3,ReadCbor.isBool +DA:305,3 +DA:306,3 +DA:319,3 +FN:319,ReadCbor.Bool +FNDA:3,ReadCbor.Bool +DA:323,3 +DA:325,3 +DA:326,3 +DA:327,3 +DA:328,3 +DA:330,3 +BRDA:330,22,0,1 +BRDA:330,22,1,2 +DA:337,2 +FN:337,ReadCbor.isArray +FNDA:2,ReadCbor.isArray +DA:342,2 +DA:351,13 +FN:351,ReadCbor.Array +FNDA:13,ReadCbor.Array +DA:357,13 +DA:364,2 +FN:364,ReadCbor.isMap +FNDA:2,ReadCbor.isMap +DA:369,2 +DA:378,9 +FN:378,ReadCbor.Map +FNDA:9,ReadCbor.Map +DA:385,9 +DA:392,2 +FN:392,ReadCbor.isString +FNDA:2,ReadCbor.isString +DA:397,2 +DA:406,7 +FN:406,ReadCbor.String +FNDA:7,ReadCbor.String +DA:410,7 +DA:411,7 +DA:413,7 +DA:415,7 +DA:416,7 +DA:417,7 +DA:418,7 +DA:430,14 +FN:430,ReadCbor.String32 +FNDA:14,ReadCbor.String32 +DA:435,14 +DA:436,13 +DA:437,13 +BRDA:437,23,0,1 +BRDA:437,23,1,12 +DA:440,12 +DA:441,12 +DA:442,12 +DA:446,2 +FN:446,ReadCbor.String32 +FNDA:2,ReadCbor.String32 +DA:450,2 +DA:459,2 +FN:459,ReadCbor.String1 +FNDA:2,ReadCbor.String1 +DA:463,2 +DA:465,2 +DA:466,2 +DA:467,2 +DA:468,2 +DA:470,2 +BRDA:470,24,0,1 +BRDA:470,24,1,1 +DA:477,2 +FN:477,ReadCbor.skipString +FNDA:2,ReadCbor.skipString +DA:481,2 +DA:482,2 +DA:483,1 +DA:490,2 +FN:490,ReadCbor.isBytes +FNDA:2,ReadCbor.isBytes +DA:495,2 +DA:504,3 +FN:504,ReadCbor.Bytes +FNDA:3,ReadCbor.Bytes +DA:508,3 +DA:509,3 +DA:511,3 +DA:513,3 +DA:514,3 +DA:515,3 +DA:516,3 +DA:528,3 +FN:528,ReadCbor.Bytes32 +FNDA:3,ReadCbor.Bytes32 +DA:533,3 +DA:534,2 +DA:535,2 +BRDA:535,25,0,1 +BRDA:535,25,1,1 +DA:538,1 +DA:539,1 +DA:540,1 +DA:544,2 +FN:544,ReadCbor.Bytes32 +FNDA:2,ReadCbor.Bytes32 +DA:548,2 +DA:555,2 +FN:555,ReadCbor.skipBytes +FNDA:2,ReadCbor.skipBytes +DA:559,2 +DA:560,2 +DA:561,1 +DA:568,15 +FN:568,ReadCbor.isTag +FNDA:15,ReadCbor.isTag +DA:573,15 +DA:582,770 +FN:582,ReadCbor.isTag +FNDA:770,ReadCbor.isTag +DA:587,770 +DA:589,770 +DA:591,770 +BRDA:591,26,0,- +DA:592,770 +DA:593,770 +DA:594,770 +BRDA:594,27,0,- +DA:596,768 +DA:597,0 +DA:599,768 +DA:600,256 +DA:602,512 +DA:603,256 +DA:605,256 +DA:606,256 +DA:608,0 +DA:609,0 +DA:613,770 +DA:623,7 +FN:623,ReadCbor.Tag +FNDA:7,ReadCbor.Tag +DA:627,7 +DA:636,530 +FN:636,ReadCbor.Tag +FNDA:530,ReadCbor.Tag +DA:641,530 +DA:642,530 +BRDA:642,28,0,1 +BRDA:642,28,1,529 +DA:643,529 +DA:650,2 +FN:650,ReadCbor.isUInt +FNDA:2,ReadCbor.isUInt +DA:655,2 +DA:667,1 +FN:667,ReadCbor.UInt +FNDA:1,ReadCbor.UInt +DA:671,1 +DA:679,24 +FN:679,ReadCbor.UInt8 +FNDA:24,ReadCbor.UInt8 +DA:683,24 +DA:691,2 +FN:691,ReadCbor.UInt16 +FNDA:2,ReadCbor.UInt16 +DA:695,2 +DA:696,2 +DA:697,1 +DA:705,1 +FN:705,ReadCbor.UInt32 +FNDA:1,ReadCbor.UInt32 +DA:709,1 +DA:710,1 +DA:711,1 +DA:719,1 +FN:719,ReadCbor.UInt64 +FNDA:1,ReadCbor.UInt64 +DA:723,1 +DA:730,2 +FN:730,ReadCbor.isNInt +FNDA:2,ReadCbor.isNInt +DA:735,2 +DA:747,1 +FN:747,ReadCbor.NInt +FNDA:1,ReadCbor.NInt +DA:751,1 +DA:752,1 +DA:753,1 +DA:761,7 +FN:761,ReadCbor.NInt8 +FNDA:7,ReadCbor.NInt8 +DA:765,7 +DA:766,7 +DA:767,5 +DA:775,3 +FN:775,ReadCbor.NInt16 +FNDA:3,ReadCbor.NInt16 +DA:779,3 +DA:780,3 +DA:781,1 +DA:789,1 +FN:789,ReadCbor.NInt32 +FNDA:1,ReadCbor.NInt32 +DA:793,1 +DA:794,1 +DA:795,1 +DA:803,1 +FN:803,ReadCbor.NInt64 +FNDA:1,ReadCbor.NInt64 +DA:807,1 +DA:808,1 +DA:809,1 +DA:816,3 +FN:816,ReadCbor.isInt +FNDA:3,ReadCbor.isInt +DA:821,3 +DA:822,3 +DA:831,16 +FN:831,ReadCbor.Int +FNDA:16,ReadCbor.Int +DA:835,16 +DA:836,16 +DA:837,16 +DA:838,16 +BRDA:838,29,0,8 +BRDA:838,29,1,1 +DA:839,8 +DA:840,8 +BRDA:840,30,0,7 +BRDA:840,30,1,1 +DA:841,7 +DA:843,1 +FNF:49 +FNH:49 +LF:234 +LH:231 +BRF:57 +BRH:55 +end_of_record +TN: +SF:src/tags/ReadBignum.sol +DA:12,263 +FN:12,ReadBignum.UInt256 +FNDA:263,ReadBignum.UInt256 +DA:16,263 +DA:17,263 +DA:18,263 +DA:19,263 +BRDA:19,0,0,1 +BRDA:19,0,1,262 +DA:22,262 +DA:28,262 +DA:32,265 +FN:32,ReadBignum.NInt256 +FNDA:265,ReadBignum.NInt256 +DA:36,265 +DA:37,265 +DA:38,265 +DA:39,265 +BRDA:39,1,0,1 +BRDA:39,1,1,264 +DA:41,264 +DA:43,264 +DA:49,264 +DA:52,264 +BRDA:52,2,0,2 +BRDA:52,2,1,262 +DA:53,262 +DA:56,5 +FN:56,ReadBignum.Int256 +FNDA:5,ReadBignum.Int256 +DA:60,5 +DA:61,5 +BRDA:61,3,0,2 +BRDA:61,3,1,1 +DA:62,2 +DA:63,2 +DA:64,2 +BRDA:64,4,0,1 +BRDA:64,4,1,1 +DA:65,1 +DA:66,3 +BRDA:66,5,0,2 +BRDA:66,5,1,1 +DA:67,2 +DA:69,1 +DA:73,13 +FN:73,ReadBignum.Integer +FNDA:13,ReadBignum.Integer +DA:77,13 +FNF:4 +FNH:4 +LF:29 +LH:29 +BRF:12 +BRH:12 +end_of_record +TN: +SF:src/tags/ReadCidSha256.sol +DA:67,512 +FN:67,ReadCidSha256.Cid +FNDA:512,ReadCidSha256.Cid +DA:71,512 +DA:74,513 +FN:74,ReadCidSha256.Cid +FNDA:513,ReadCidSha256.Cid +DA:79,513 +DA:80,513 +DA:83,513 +DA:88,513 +DA:89,513 +DA:90,513 +DA:93,513 +BRDA:93,0,0,1 +BRDA:93,0,1,512 +DA:94,512 +BRDA:94,1,0,2 +BRDA:94,1,1,510 +DA:104,258 +FN:104,ReadCidSha256.NullableCid +FNDA:258,ReadCidSha256.NullableCid +DA:108,258 +DA:109,258 +FNF:3 +FNH:3 +LF:14 +LH:14 +BRF:4 +BRH:4 +end_of_record diff --git a/foundry.toml b/foundry.toml index 3021958..7ac1360 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,17 +1,22 @@ [profile.default] -src = "src" -out = "out" -libs = ["lib"] -optimize = true +src = "src" +out = "out" +libs = ["lib"] +optimize = true optimizer_runs = 1000000 +allow_internal_expectRevert = true + +[profile.hardhat] +src = "contracts" +skip = ["test", "src/*.sol"] [fmt] int_types = "preserve" [profile.test-no-ir] -via-ir = false -snapshots = "snapshots-test-no-ir" +via-ir = false +snapshots = "snapshots/no-ir" [profile.test-via-ir] -via-ir = true -snapshots = "snapshots-test-via-ir" +via-ir = true +snapshots = "snapshots/via-ir" diff --git a/generate-snapshots.sh b/generate-snapshots.sh index c58defc..ebd3c58 100644 --- a/generate-snapshots.sh +++ b/generate-snapshots.sh @@ -5,10 +5,19 @@ set -euxo pipefail unset FORGE_GAS_REPORT unset FOUNDRY_PROFILE unset FOUNDRY_VIA_IR +unset FORGE_SNAPSHOT_EMIT -for test_profile in test-no-ir test-via-ir; do - export FOUNDRY_PROFILE=$test_profile - forge coverage --force --report-file $test_profile.lcov.info --report lcov --report summary --no-match-path "test/comparison/*" --no-match-coverage "test/comparison/*" - forge snapshot --force --snap $test_profile.gas-snapshot --match-path "test/comparison/*" +export FORGE_SNAPSHOT_CHECK='false' + +mkdir -p coverage +export FORGE_SNAPSHOT_EMIT='false' +forge coverage --force --report-file coverage/lcov.info --report lcov --report summary --no-match-path "test/comparison/*" --no-match-coverage "test/comparison/*" +rm snapshots/*.json # rm after FORGE_SNAPSHOT_EMIT supported + +for test_profile in no-ir via-ir; do + export FOUNDRY_PROFILE=test-$test_profile + mkdir -p snapshots/$test_profile + export FORGE_SNAPSHOT_EMIT='true' + forge snapshot --force --snap snapshots/$test_profile/comparison.gas-snapshot --match-path "test/comparison/*" forge test --force -vvv --no-match-path "test/comparison/*" done diff --git a/hardhat.config.cts b/hardhat.config.cts new file mode 100644 index 0000000..b6f0dce --- /dev/null +++ b/hardhat.config.cts @@ -0,0 +1,38 @@ +import type { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox-viem"; +import "@nomicfoundation/hardhat-foundry"; + +/*** begin typescript esm support snippet ***/ +/** @see https://github.com/NomicFoundation/hardhat/issues/3385#issuecomment-1841380253 **/ +import { join } from "node:path"; +import { writeFile } from "node:fs/promises"; +import { subtask } from "hardhat/config"; +import { TASK_COMPILE_SOLIDITY } from "hardhat/builtin-tasks/task-names"; + +subtask(TASK_COMPILE_SOLIDITY).setAction(async (_, { config }, runSuper) => { + const superRes = await runSuper(); + + try { + await writeFile( + join(config.paths.artifacts, "package.json"), + '{ "type": "commonjs" }', + ); + } catch (error) { + console.error("Error writing package.json: ", error); + } + + return superRes; +}); +/*** end typescript esm support snippet ***/ + +const config: HardhatUserConfig = { + solidity: { + version: "0.8.28", + settings: { + evmVersion: "cancun", + optimizer: { enabled: true, runs: 1000000 }, + }, + }, +}; + +export default config; diff --git a/lib/forge-std b/lib/forge-std index 1eea5ba..3b20d60 160000 --- a/lib/forge-std +++ b/lib/forge-std @@ -1 +1 @@ -Subproject commit 1eea5bae12ae557d589f9f0f0edae2faa47cb262 +Subproject commit 3b20d60d14b343ee4f908cb8079495c07f5e8981 diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..c9cecf7 --- /dev/null +++ b/mise.toml @@ -0,0 +1,6 @@ +[tools] +node = "23" + +[env] +NODE_OPTIONS = "--experimental-loader ts-node/esm/transpile-only --no-warnings=ExperimentalWarning" +FORGE_SNAPSHOT_EMIT = "false" diff --git a/package.json b/package.json new file mode 100644 index 0000000..cbd4254 --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "solidity-cbor", + "private": true, + "version": "1.0.0", + "scripts": { + "test": "FORGE_SNAPSHOT_EMIT=false forge test && FOUNDRY_PROFILE=hardhat pnpm hardhat test", + "compile": "forge compile && FOUNDRY_PROFILE=hardhat pnpm hardhat compile", + "format": "prettier --write .", + "snapshots": "sh ./generate-snapshots.sh", + "clean": "rm -rf cache_hardhat cache coverage artifacts" + }, + "type": "module", + "devDependencies": { + "@nomicfoundation/hardhat-foundry": "^1.1.3", + "@nomicfoundation/hardhat-ignition": "^0.15.9", + "@nomicfoundation/hardhat-ignition-viem": "^0.15.9", + "@nomicfoundation/hardhat-network-helpers": "^1.0.12", + "@nomicfoundation/hardhat-toolbox-viem": "^3.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.12", + "@nomicfoundation/hardhat-viem": "^2.0.6", + "@typechain/hardhat": "^9.1.0", + "@types/chai": "~4.3.20", + "@types/chai-as-promised": "^7.1.8", + "@types/mocha": "^10.0.10", + "@types/node": "^22.13.1", + "chai": "~4.5.0", + "hardhat": "^2.22.18", + "hardhat-gas-reporter": "^1.0.10", + "prettier": "^3.4.2", + "prettier-plugin-solidity": "^1.4.2", + "solidity-coverage": "^0.8.14", + "ts-node": "^10.9.2", + "typescript": "~5.7.3", + "viem": "^2.22.22" + }, + "packageManager": "pnpm@9.7.0+sha512.dc09430156b427f5ecfc79888899e1c39d2d690f004be70e05230b72cb173d96839587545d09429b55ac3c429c801b4dc3c0e002f653830a420fa2dd4e3cf9cf" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..f5567f9 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4665 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@nomicfoundation/hardhat-foundry': + specifier: ^1.1.3 + version: 1.1.3(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + '@nomicfoundation/hardhat-ignition': + specifier: ^0.15.9 + version: 0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)))(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + '@nomicfoundation/hardhat-ignition-viem': + specifier: ^0.15.9 + version: 0.15.9(@nomicfoundation/hardhat-ignition@0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)))(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)))(@nomicfoundation/hardhat-viem@2.0.6(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(typescript@5.7.3)(viem@2.22.22(typescript@5.7.3)))(@nomicfoundation/ignition-core@0.15.9)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(viem@2.22.22(typescript@5.7.3)) + '@nomicfoundation/hardhat-network-helpers': + specifier: ^1.0.12 + version: 1.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + '@nomicfoundation/hardhat-toolbox-viem': + specifier: ^3.0.0 + version: 3.0.0(ja2ktglhrf4pd6ztwu6hbt3gne) + '@nomicfoundation/hardhat-verify': + specifier: ^2.0.12 + version: 2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + '@nomicfoundation/hardhat-viem': + specifier: ^2.0.6 + version: 2.0.6(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(typescript@5.7.3)(viem@2.22.22(typescript@5.7.3)) + '@typechain/hardhat': + specifier: ^9.1.0 + version: 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.5)(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3))(ethers@6.13.5)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(typechain@8.3.2(typescript@5.7.3)) + '@types/chai': + specifier: ~4.3.20 + version: 4.3.20 + '@types/chai-as-promised': + specifier: ^7.1.8 + version: 7.1.8 + '@types/mocha': + specifier: ^10.0.10 + version: 10.0.10 + '@types/node': + specifier: ^22.13.1 + version: 22.13.1 + chai: + specifier: ~4.5.0 + version: 4.5.0 + hardhat: + specifier: ^2.22.18 + version: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + hardhat-gas-reporter: + specifier: ^1.0.10 + version: 1.0.10(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + prettier: + specifier: ^3.4.2 + version: 3.4.2 + prettier-plugin-solidity: + specifier: ^1.4.2 + version: 1.4.2(prettier@3.4.2) + solidity-coverage: + specifier: ^0.8.14 + version: 0.8.14(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.13.1)(typescript@5.7.3) + typescript: + specifier: ~5.7.3 + version: 5.7.3 + viem: + specifier: ^2.22.22 + version: 2.22.22(typescript@5.7.3) + +packages: + + '@adraffy/ens-normalize@1.10.1': + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + + '@adraffy/ens-normalize@1.11.0': + resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@ethereumjs/rlp@4.0.1': + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + + '@ethereumjs/util@8.1.0': + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + + '@ethersproject/abi@5.7.0': + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + + '@ethersproject/abstract-provider@5.7.0': + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + + '@ethersproject/abstract-signer@5.7.0': + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + + '@ethersproject/address@5.6.1': + resolution: {integrity: sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==} + + '@ethersproject/address@5.7.0': + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + + '@ethersproject/base64@5.7.0': + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} + + '@ethersproject/basex@5.7.0': + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + + '@ethersproject/bignumber@5.7.0': + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + + '@ethersproject/bytes@5.7.0': + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + + '@ethersproject/constants@5.7.0': + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + + '@ethersproject/contracts@5.7.0': + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + + '@ethersproject/hash@5.7.0': + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + + '@ethersproject/hdnode@5.7.0': + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + + '@ethersproject/json-wallets@5.7.0': + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + + '@ethersproject/keccak256@5.7.0': + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} + + '@ethersproject/logger@5.7.0': + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + + '@ethersproject/networks@5.7.1': + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + + '@ethersproject/pbkdf2@5.7.0': + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} + + '@ethersproject/properties@5.7.0': + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + + '@ethersproject/providers@5.7.2': + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + + '@ethersproject/random@5.7.0': + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + + '@ethersproject/rlp@5.7.0': + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + + '@ethersproject/sha2@5.7.0': + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + + '@ethersproject/signing-key@5.7.0': + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + + '@ethersproject/solidity@5.7.0': + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + + '@ethersproject/strings@5.7.0': + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + + '@ethersproject/transactions@5.7.0': + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + + '@ethersproject/units@5.7.0': + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + + '@ethersproject/wallet@5.7.0': + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + + '@ethersproject/web@5.7.1': + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + + '@ethersproject/wordlists@5.7.0': + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@metamask/eth-sig-util@4.0.1': + resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} + engines: {node: '>=12.0.0'} + + '@noble/curves@1.2.0': + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + + '@noble/curves@1.4.2': + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + + '@noble/curves@1.8.1': + resolution: {integrity: sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/hashes@1.2.0': + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + + '@noble/hashes@1.3.2': + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/hashes@1.7.1': + resolution: {integrity: sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==} + engines: {node: ^14.21.3 || >=16} + + '@noble/secp256k1@1.7.1': + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@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'} + + '@nomicfoundation/edr-darwin-arm64@0.7.0': + resolution: {integrity: sha512-vAH20oh4GaSB/iQFTRcoO8jLc0CLd9XuLY9I7vtcqZWAiM4U1J4Y8cu67PWmtxbvUQOqXR7S6FtAr8/AlWm14g==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-darwin-x64@0.7.0': + resolution: {integrity: sha512-WHDdIrPvLlgXQr2eKypBM5xOZAwdxhDAEQIvEMQL8tEEm2qYW2bliUlssBPrs8E3bdivFbe1HizImslMAfU3+g==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-gnu@0.7.0': + resolution: {integrity: sha512-WXpJB54ukz1no7gxCPXVEw9pgl/9UZ/WO3l1ctyv/T7vOygjqA4SUd6kppTs6MNXAuTiisPtvJ/fmvHiMBLrsw==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-musl@0.7.0': + resolution: {integrity: sha512-1iZYOcEgc+zJI7JQrlAFziuy9sBz1WgnIx3HIIu0J7lBRZ/AXeHHgATb+4InqxtEx9O3W8A0s7f11SyFqJL4Aw==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-gnu@0.7.0': + resolution: {integrity: sha512-wSjC94WcR5MM8sg9w3OsAmT6+bbmChJw6uJKoXR3qscps/jdhjzJWzfgT0XGRq3XMUfimyafW2RWOyfX3ouhrQ==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-musl@0.7.0': + resolution: {integrity: sha512-Us22+AZ7wkG1mZwxqE4S4ZcuwkEA5VrUiBOJSvKHGOgy6vFvB/Euh5Lkp4GovwjrtiXuvyGO2UmtkzymZKDxZw==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-win32-x64-msvc@0.7.0': + resolution: {integrity: sha512-HAry0heTsWkzReVtjHwoIq3BgFCvXpVhJ5qPmTnegZGsr/KxqvMmHyDMifzKao4bycU8yrpTSyOiAJt27RWjzQ==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr@0.7.0': + resolution: {integrity: sha512-+Zyu7TE47TGNcPhOfWLPA/zISs32WDMXrhSWdWYyPHDVn/Uux5TVuOeScKb0BR/R8EJ+leR8COUF/EGxvDOVKg==} + engines: {node: '>= 18'} + + '@nomicfoundation/ethereumjs-common@4.0.4': + resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==} + + '@nomicfoundation/ethereumjs-rlp@5.0.4': + resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==} + engines: {node: '>=18'} + hasBin: 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 + + '@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 + + '@nomicfoundation/hardhat-foundry@1.1.3': + resolution: {integrity: sha512-30Ezc3hlZ4pC5Z/9W9euW5uoPKKQQKaecLETHJH8BPpd30zYOooy6HfjmcTY1/taOQjlwirOdNO7tHlje8Qcgw==} + peerDependencies: + hardhat: ^2.17.2 + + '@nomicfoundation/hardhat-ignition-viem@0.15.9': + resolution: {integrity: sha512-yV5Z7Tc/sHS7FIdpNDNbnrtXzEpDyvMijgqL9pYttcEGAWqG2YD754kuKKteI1oZxe70YDBQNUy94w/w3fdlqA==} + peerDependencies: + '@nomicfoundation/hardhat-ignition': ^0.15.9 + '@nomicfoundation/hardhat-viem': ^2.0.0 + '@nomicfoundation/ignition-core': ^0.15.9 + hardhat: ^2.18.0 + viem: ^2.7.6 + + '@nomicfoundation/hardhat-ignition@0.15.9': + resolution: {integrity: sha512-lSWqhaDOBt6gsqMadkRLvH6HdoFV1v8/bx7z+12cghaOloVwwn48CPoTH2iXXnkqilPGw8rdH5eVTE6UM+2v6Q==} + peerDependencies: + '@nomicfoundation/hardhat-verify': ^2.0.1 + hardhat: ^2.18.0 + + '@nomicfoundation/hardhat-network-helpers@1.0.12': + resolution: {integrity: sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA==} + peerDependencies: + hardhat: ^2.9.5 + + '@nomicfoundation/hardhat-toolbox-viem@3.0.0': + resolution: {integrity: sha512-cr+aRozCtTwaRz5qc9OVY1kegWrnVwyhHZonICmlcm21cvJ31uvJnuPG688tMbjUvwRDw8tpZYZK0kI5M+4CKg==} + peerDependencies: + '@nomicfoundation/hardhat-ignition-viem': ^0.15.0 + '@nomicfoundation/hardhat-network-helpers': ^1.0.0 + '@nomicfoundation/hardhat-verify': ^2.0.0 + '@nomicfoundation/hardhat-viem': ^2.0.0 + '@types/chai': ^4.2.0 + '@types/chai-as-promised': ^7.1.6 + '@types/mocha': '>=9.1.0' + '@types/node': '>=18.0.0' + chai: ^4.2.0 + hardhat: ^2.11.0 + hardhat-gas-reporter: ^1.0.8 + solidity-coverage: ^0.8.1 + ts-node: '>=8.0.0' + typescript: ^5.0.4 + viem: ^2.7.6 + + '@nomicfoundation/hardhat-verify@2.0.12': + resolution: {integrity: sha512-Lg3Nu7DCXASQRVI/YysjuAX2z8jwOCbS0w5tz2HalWGSTZThqA0v9N0v0psHbKNqzPJa8bNOeapIVSziyJTnAg==} + peerDependencies: + hardhat: ^2.0.4 + + '@nomicfoundation/hardhat-viem@2.0.6': + resolution: {integrity: sha512-Pl5pvYK5VYKflfoUk4fVBESqKMNBtAIGPIT4j+Q8KNFueAe1vB2PsbRESeNJyW5YLL9pqKaD1RVqLmgIa1yvDg==} + peerDependencies: + hardhat: ^2.17.0 + viem: ^2.7.6 + + '@nomicfoundation/ignition-core@0.15.9': + resolution: {integrity: sha512-X8W+7UP/UQPorpHUnGvA1OdsEr/edGi8tDpNwEqzaLm83FMZVbRWdOsr3vNICHN2XMzNY/xIm18Cx7xGKL2PQw==} + + '@nomicfoundation/ignition-ui@0.15.9': + resolution: {integrity: sha512-8lzbT7gpJ5PoowPQDQilkwdyqBviUKDMoHp/5rhgnwG1bDslnCS+Lxuo6s9R2akWu9LtEL14dNyqQb6WsURTag==} + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer@0.1.2': + resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} + engines: {node: '>= 12'} + + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} + + '@scure/base@1.2.4': + resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==} + + '@scure/bip32@1.1.5': + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + + '@scure/bip32@1.6.2': + resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==} + + '@scure/bip39@1.1.1': + resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} + + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + + '@scure/bip39@1.5.4': + resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==} + + '@sentry/core@5.30.0': + resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} + engines: {node: '>=6'} + + '@sentry/hub@5.30.0': + resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} + engines: {node: '>=6'} + + '@sentry/minimal@5.30.0': + resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} + engines: {node: '>=6'} + + '@sentry/node@5.30.0': + resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} + engines: {node: '>=6'} + + '@sentry/tracing@5.30.0': + resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} + engines: {node: '>=6'} + + '@sentry/types@5.30.0': + resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} + engines: {node: '>=6'} + + '@sentry/utils@5.30.0': + resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} + engines: {node: '>=6'} + + '@solidity-parser/parser@0.14.5': + resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} + + '@solidity-parser/parser@0.19.0': + resolution: {integrity: sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@typechain/ethers-v6@0.5.1': + resolution: {integrity: sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==} + peerDependencies: + ethers: 6.x + typechain: ^8.3.2 + typescript: '>=4.7.0' + + '@typechain/hardhat@9.1.0': + 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 + + '@types/bn.js@4.11.6': + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + + '@types/bn.js@5.1.6': + resolution: {integrity: sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==} + + '@types/chai-as-promised@7.1.8': + resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==} + + '@types/chai@4.3.20': + resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + + '@types/concat-stream@1.6.1': + resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} + + '@types/form-data@0.0.33': + resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} + + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + + '@types/lru-cache@5.1.1': + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/mocha@10.0.10': + resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} + + '@types/node@10.17.60': + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + + '@types/node@22.13.1': + resolution: {integrity: sha512-jK8uzQlrvXqEU91UxiK5J7pKHyzgnI1Qnl0QDHIgVGuolJhRb9EEl28Cj9b3rGR8B2lhFCtvIm5os8lFnO/1Ew==} + + '@types/node@22.7.5': + resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + + '@types/node@8.10.66': + resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} + + '@types/pbkdf2@3.1.2': + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + + '@types/prettier@2.7.3': + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + + '@types/secp256k1@4.0.6': + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + + abbrev@1.0.9: + resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} + + abitype@0.9.10: + resolution: {integrity: sha512-FIS7U4n7qwAT58KibwYig5iFG4K61rbhAqaQh/UWj8v1Y8mjX3F8TC9gd8cz9yT1TYel9f8nS5NO5kZp2RW0jQ==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + abitype@1.0.8: + resolution: {integrity: sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3 >=3.22.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + adm-zip@0.4.16: + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} + + aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + + aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + amdefine@1.0.1: + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} + engines: {node: '>=0.4.2'} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + antlr4ts@0.5.0-alpha.4: + resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-back@3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + + array-back@4.0.2: + resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} + engines: {node: '>=8'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async@1.5.2: + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + axios@1.7.9: + resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + + bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + + bn.js@4.11.6: + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + + bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58check@2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bound@1.0.3: + resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + cbor@8.1.0: + resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} + engines: {node: '>=12.19'} + + cbor@9.0.2: + resolution: {integrity: sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==} + engines: {node: '>=16'} + + chai-as-promised@7.1.2: + resolution: {integrity: sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==} + peerDependencies: + chai: '>= 2.1.2 < 6' + + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + cipher-base@1.0.6: + resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} + engines: {node: '>= 0.10'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + + cli-table3@0.5.1: + resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} + engines: {node: '>=6'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + 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'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + + command-line-args@5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + + command-line-usage@6.1.3: + resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} + engines: {node: '>=8.0.0'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + death@1.1.0: + resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + difflib@0.2.4: + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@1.8.1: + resolution: {integrity: sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==} + engines: {node: '>=0.12.0'} + hasBin: true + + esprima@2.7.3: + resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} + engines: {node: '>=0.10.0'} + hasBin: true + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@1.9.3: + resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==} + engines: {node: '>=0.10.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eth-gas-reporter@0.2.27: + resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} + peerDependencies: + '@codechecks/client': ^0.1.0 + peerDependenciesMeta: + '@codechecks/client': + optional: true + + ethereum-bloom-filters@1.2.0: + resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==} + + ethereum-cryptography@0.1.3: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + + ethereum-cryptography@1.2.0: + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} + + ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + + ethereumjs-abi@0.6.8: + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} + deprecated: This library has been deprecated and usage is discouraged. + + ethereumjs-util@6.2.1: + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} + + ethereumjs-util@7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + + ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + + ethers@6.13.5: + resolution: {integrity: sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ==} + engines: {node: '>=14.0.0'} + + ethjs-unit@0.1.6: + resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} + engines: {node: '>=6.5.0', npm: '>=3'} + + ethjs-util@0.1.6: + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastq@1.19.0: + resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-replace@3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + form-data@2.5.2: + resolution: {integrity: sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==} + engines: {node: '>= 0.12'} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fp-ts@1.19.3: + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-readdir-recursive@1.1.0: + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + + 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] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.7: + resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + engines: {node: '>= 0.4'} + + get-port@3.2.0: + resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} + engines: {node: '>=4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + ghost-testrpc@0.0.2: + resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@5.0.15: + resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + hardhat-gas-reporter@1.0.10: + resolution: {integrity: sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==} + peerDependencies: + hardhat: ^2.0.2 + + hardhat@2.22.18: + resolution: {integrity: sha512-2+kUz39gvMo56s75cfLBhiFedkQf+gXdrwCcz4R/5wW0oBdwiyfj2q9BIkMoaA0WIGYYMU2I1Cc4ucTunhfjzw==} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + + has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + http-basic@8.1.3: + resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} + engines: {node: '>=6.0.0'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-response-object@3.0.2: + resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immer@10.0.2: + resolution: {integrity: sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + 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. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + io-ts@1.10.4: + resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hex-prefixed@1.0.0: + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isows@1.0.6: + resolution: {integrity: sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==} + peerDependencies: + ws: '*' + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stream-stringify@3.1.6: + resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} + engines: {node: '>=7.10.1'} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonschema@1.5.0: + resolution: {integrity: sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + markdown-table@1.1.3: + resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + 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==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mnemonist@0.38.5: + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} + + mocha@10.8.2: + resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} + engines: {node: '>= 14.0.0'} + hasBin: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + ndjson@2.0.0: + resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} + engines: {node: '>=10'} + hasBin: true + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + + node-emoji@1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + nofilter@3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + + nopt@3.0.6: + resolution: {integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + number-to-bn@1.7.0: + resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} + engines: {node: '>=6.5.0', npm: '>=3'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + obliterator@2.0.5: + resolution: {integrity: sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + ox@0.6.7: + resolution: {integrity: sha512-17Gk/eFsFRAZ80p5eKqv89a57uXjd3NgIf1CaXojATPBuujVc/fQSVhBeAU9JCRB+k7J50WQAyWTxK19T9GgbA==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + parse-cache-control@1.0.1: + resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} + + 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'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-solidity@1.4.2: + resolution: {integrity: sha512-VVD/4XlDjSzyPWWCPW8JEleFa8JNKFYac5kNlMjVXemQyQZKfpekPMhFZSePuXB6L+RixlFvWe20iacGjFYrLw==} + engines: {node: '>=18'} + peerDependencies: + prettier: '>=2.3.0' + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.4.2: + resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + engines: {node: '>=14'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.1: + resolution: {integrity: sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw==} + engines: {node: '>= 14.18.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + + reduce-flatten@2.0.0: + resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} + engines: {node: '>=6'} + + req-cwd@2.0.0: + resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} + engines: {node: '>=4'} + + req-from@2.0.0: + resolution: {integrity: sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==} + engines: {node: '>=4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + + resolve@1.1.7: + resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} + + resolve@1.17.0: + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rlp@2.2.7: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sc-istanbul@0.4.6: + resolution: {integrity: sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==} + hasBin: true + + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + secp256k1@4.0.4: + resolution: {integrity: sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==} + engines: {node: '>=18.0.0'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + sha1@1.1.1: + resolution: {integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + solc@0.8.26: + resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} + engines: {node: '>=10.0.0'} + hasBin: true + + solidity-coverage@0.8.14: + resolution: {integrity: sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA==} + hasBin: true + peerDependencies: + hardhat: ^2.11.0 + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.2.0: + resolution: {integrity: sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==} + engines: {node: '>=0.8.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + string-format@2.0.0: + resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} + + string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-hex-prefix@1.0.0: + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + sync-request@6.1.0: + resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} + engines: {node: '>=8.0.0'} + + sync-rpc@1.3.6: + resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} + + table-layout@1.0.2: + resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} + engines: {node: '>=8.0.0'} + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + then-request@6.0.2: + resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} + engines: {node: '>=6.0.0'} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + tinyglobby@0.2.10: + resolution: {integrity: sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==} + engines: {node: '>=12.0.0'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + ts-command-line-args@2.5.1: + resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} + hasBin: true + + ts-essentials@7.0.3: + resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} + peerDependencies: + typescript: '>=3.7.0' + + ts-node@10.9.2: + 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 + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tsort@0.0.1: + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} + + tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + + typechain@8.3.2: + resolution: {integrity: sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==} + hasBin: true + peerDependencies: + typescript: '>=4.3.0' + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + engines: {node: '>=14.17'} + hasBin: true + + typical@4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + + typical@5.2.0: + resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} + engines: {node: '>=8'} + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + undici@5.28.5: + resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} + engines: {node: '>=14.0'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + viem@2.22.22: + resolution: {integrity: sha512-0z7EFheP+paC/KRlVpu7zXYiqkTX6GR86G0p84LnYr5NgaVxGz0mGsiERy41ThERX1ahkTdEWGGiNgfi6wVqBQ==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true + + web3-utils@1.10.4: + resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} + engines: {node: '>=8.0.0'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wordwrapjs@4.0.1: + resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} + engines: {node: '>=8.0.0'} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + 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 + + 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 + + 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 + + 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 + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@adraffy/ens-normalize@1.10.1': {} + + '@adraffy/ens-normalize@1.11.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@ethereumjs/rlp@4.0.1': {} + + '@ethereumjs/util@8.1.0': + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.2.1 + micro-ftch: 0.3.1 + + '@ethersproject/abi@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/abstract-provider@5.7.0': + 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 + + '@ethersproject/abstract-signer@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/address@5.6.1': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/base64@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + + '@ethersproject/basex@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + + '@ethersproject/contracts@5.7.0': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + + '@ethersproject/hash@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/hdnode@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/json-wallets@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/pbkdf2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/providers@5.7.2': + 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 + + '@ethersproject/random@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/sha2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + + '@ethersproject/signing-key@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + + '@ethersproject/solidity@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/transactions@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + + '@ethersproject/units@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/wallet@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/web@5.7.1': + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/wordlists@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@fastify/busboy@2.1.1': {} + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@metamask/eth-sig-util@4.0.1': + dependencies: + ethereumjs-abi: 0.6.8 + ethereumjs-util: 6.2.1 + ethjs-util: 0.1.6 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + + '@noble/curves@1.2.0': + dependencies: + '@noble/hashes': 1.3.2 + + '@noble/curves@1.4.2': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/curves@1.8.1': + dependencies: + '@noble/hashes': 1.7.1 + + '@noble/hashes@1.2.0': {} + + '@noble/hashes@1.3.2': {} + + '@noble/hashes@1.4.0': {} + + '@noble/hashes@1.7.1': {} + + '@noble/secp256k1@1.7.1': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.0 + + '@nomicfoundation/edr-darwin-arm64@0.7.0': {} + + '@nomicfoundation/edr-darwin-x64@0.7.0': {} + + '@nomicfoundation/edr-linux-arm64-gnu@0.7.0': {} + + '@nomicfoundation/edr-linux-arm64-musl@0.7.0': {} + + '@nomicfoundation/edr-linux-x64-gnu@0.7.0': {} + + '@nomicfoundation/edr-linux-x64-musl@0.7.0': {} + + '@nomicfoundation/edr-win32-x64-msvc@0.7.0': {} + + '@nomicfoundation/edr@0.7.0': + dependencies: + '@nomicfoundation/edr-darwin-arm64': 0.7.0 + '@nomicfoundation/edr-darwin-x64': 0.7.0 + '@nomicfoundation/edr-linux-arm64-gnu': 0.7.0 + '@nomicfoundation/edr-linux-arm64-musl': 0.7.0 + '@nomicfoundation/edr-linux-x64-gnu': 0.7.0 + '@nomicfoundation/edr-linux-x64-musl': 0.7.0 + '@nomicfoundation/edr-win32-x64-msvc': 0.7.0 + + '@nomicfoundation/ethereumjs-common@4.0.4': + dependencies: + '@nomicfoundation/ethereumjs-util': 9.0.4 + transitivePeerDependencies: + - c-kzg + + '@nomicfoundation/ethereumjs-rlp@5.0.4': {} + + '@nomicfoundation/ethereumjs-tx@5.0.4': + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-rlp': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 + ethereum-cryptography: 0.1.3 + + '@nomicfoundation/ethereumjs-util@9.0.4': + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.4 + ethereum-cryptography: 0.1.3 + + '@nomicfoundation/hardhat-foundry@1.1.3(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))': + dependencies: + hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + picocolors: 1.1.1 + + '@nomicfoundation/hardhat-ignition-viem@0.15.9(@nomicfoundation/hardhat-ignition@0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)))(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)))(@nomicfoundation/hardhat-viem@2.0.6(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(typescript@5.7.3)(viem@2.22.22(typescript@5.7.3)))(@nomicfoundation/ignition-core@0.15.9)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(viem@2.22.22(typescript@5.7.3))': + dependencies: + '@nomicfoundation/hardhat-ignition': 0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)))(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + '@nomicfoundation/hardhat-viem': 2.0.6(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(typescript@5.7.3)(viem@2.22.22(typescript@5.7.3)) + '@nomicfoundation/ignition-core': 0.15.9 + hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + viem: 2.22.22(typescript@5.7.3) + + '@nomicfoundation/hardhat-ignition@0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)))(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))': + dependencies: + '@nomicfoundation/hardhat-verify': 2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + '@nomicfoundation/ignition-core': 0.15.9 + '@nomicfoundation/ignition-ui': 0.15.9 + chalk: 4.1.2 + debug: 4.4.0(supports-color@8.1.1) + fs-extra: 10.1.0 + hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + json5: 2.2.3 + prompts: 2.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@nomicfoundation/hardhat-network-helpers@1.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))': + dependencies: + ethereumjs-util: 7.1.5 + hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + + '@nomicfoundation/hardhat-toolbox-viem@3.0.0(ja2ktglhrf4pd6ztwu6hbt3gne)': + dependencies: + '@nomicfoundation/hardhat-ignition-viem': 0.15.9(@nomicfoundation/hardhat-ignition@0.15.9(@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)))(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)))(@nomicfoundation/hardhat-viem@2.0.6(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(typescript@5.7.3)(viem@2.22.22(typescript@5.7.3)))(@nomicfoundation/ignition-core@0.15.9)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(viem@2.22.22(typescript@5.7.3)) + '@nomicfoundation/hardhat-network-helpers': 1.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + '@nomicfoundation/hardhat-verify': 2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + '@nomicfoundation/hardhat-viem': 2.0.6(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(typescript@5.7.3)(viem@2.22.22(typescript@5.7.3)) + '@types/chai': 4.3.20 + '@types/chai-as-promised': 7.1.8 + '@types/mocha': 10.0.10 + '@types/node': 22.13.1 + chai: 4.5.0 + chai-as-promised: 7.1.2(chai@4.5.0) + hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + hardhat-gas-reporter: 1.0.10(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + solidity-coverage: 0.8.14(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)) + ts-node: 10.9.2(@types/node@22.13.1)(typescript@5.7.3) + typescript: 5.7.3 + viem: 2.22.22(typescript@5.7.3) + + '@nomicfoundation/hardhat-verify@2.0.12(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 + cbor: 8.1.0 + debug: 4.4.0(supports-color@8.1.1) + hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + lodash.clonedeep: 4.5.0 + picocolors: 1.1.1 + semver: 6.3.1 + table: 6.9.0 + undici: 5.28.5 + transitivePeerDependencies: + - supports-color + + '@nomicfoundation/hardhat-viem@2.0.6(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(typescript@5.7.3)(viem@2.22.22(typescript@5.7.3))': + dependencies: + abitype: 0.9.10(typescript@5.7.3) + hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + lodash.memoize: 4.1.2 + viem: 2.22.22(typescript@5.7.3) + transitivePeerDependencies: + - typescript + - zod + + '@nomicfoundation/ignition-core@0.15.9': + dependencies: + '@ethersproject/address': 5.6.1 + '@nomicfoundation/solidity-analyzer': 0.1.2 + cbor: 9.0.2 + debug: 4.4.0(supports-color@8.1.1) + ethers: 6.13.5 + fs-extra: 10.1.0 + immer: 10.0.2 + lodash: 4.17.21 + ndjson: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@nomicfoundation/ignition-ui@0.15.9': {} + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer@0.1.2': + 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 + + '@scure/base@1.1.9': {} + + '@scure/base@1.2.4': {} + + '@scure/bip32@1.1.5': + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.9 + + '@scure/bip32@1.4.0': + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip32@1.6.2': + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + + '@scure/bip39@1.1.1': + dependencies: + '@noble/hashes': 1.2.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.3.0': + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.9 + + '@scure/bip39@1.5.4': + dependencies: + '@noble/hashes': 1.7.1 + '@scure/base': 1.2.4 + + '@sentry/core@5.30.0': + 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 + + '@sentry/hub@5.30.0': + dependencies: + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/minimal@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/types': 5.30.0 + tslib: 1.14.1 + + '@sentry/node@5.30.0': + 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 + + '@sentry/tracing@5.30.0': + 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 + + '@sentry/types@5.30.0': {} + + '@sentry/utils@5.30.0': + dependencies: + '@sentry/types': 5.30.0 + tslib: 1.14.1 + + '@solidity-parser/parser@0.14.5': + dependencies: + antlr4ts: 0.5.0-alpha.4 + + '@solidity-parser/parser@0.19.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@typechain/ethers-v6@0.5.1(ethers@6.13.5)(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3)': + dependencies: + ethers: 6.13.5 + lodash: 4.17.21 + ts-essentials: 7.0.3(typescript@5.7.3) + typechain: 8.3.2(typescript@5.7.3) + typescript: 5.7.3 + + '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.5)(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3))(ethers@6.13.5)(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3))(typechain@8.3.2(typescript@5.7.3))': + dependencies: + '@typechain/ethers-v6': 0.5.1(ethers@6.13.5)(typechain@8.3.2(typescript@5.7.3))(typescript@5.7.3) + ethers: 6.13.5 + fs-extra: 9.1.0 + hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + typechain: 8.3.2(typescript@5.7.3) + + '@types/bn.js@4.11.6': + dependencies: + '@types/node': 22.13.1 + + '@types/bn.js@5.1.6': + dependencies: + '@types/node': 22.13.1 + + '@types/chai-as-promised@7.1.8': + dependencies: + '@types/chai': 4.3.20 + + '@types/chai@4.3.20': {} + + '@types/concat-stream@1.6.1': + dependencies: + '@types/node': 22.13.1 + + '@types/form-data@0.0.33': + dependencies: + '@types/node': 22.13.1 + + '@types/glob@7.2.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 22.13.1 + + '@types/lru-cache@5.1.1': {} + + '@types/minimatch@5.1.2': {} + + '@types/mocha@10.0.10': {} + + '@types/node@10.17.60': {} + + '@types/node@22.13.1': + dependencies: + undici-types: 6.20.0 + + '@types/node@22.7.5': + dependencies: + undici-types: 6.19.8 + + '@types/node@8.10.66': {} + + '@types/pbkdf2@3.1.2': + dependencies: + '@types/node': 22.13.1 + + '@types/prettier@2.7.3': {} + + '@types/qs@6.9.18': {} + + '@types/secp256k1@4.0.6': + dependencies: + '@types/node': 22.13.1 + + abbrev@1.0.9: {} + + abitype@0.9.10(typescript@5.7.3): + optionalDependencies: + typescript: 5.7.3 + + abitype@1.0.8(typescript@5.7.3): + optionalDependencies: + typescript: 5.7.3 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@8.14.0: {} + + adm-zip@0.4.16: {} + + aes-js@3.0.0: {} + + aes-js@4.0.0-beta.5: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + amdefine@1.0.1: + optional: true + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@3.0.1: {} + + ansi-regex@5.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + antlr4ts@0.5.0-alpha.4: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-back@3.1.0: {} + + array-back@4.0.2: {} + + array-union@2.1.0: {} + + array-uniq@1.0.3: {} + + asap@2.0.6: {} + + assertion-error@1.1.0: {} + + astral-regex@2.0.0: {} + + async@1.5.2: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + axios@1.7.9: + dependencies: + follow-redirects: 1.15.9(debug@4.4.0) + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + balanced-match@1.0.2: {} + + base-x@3.0.10: + dependencies: + safe-buffer: 5.2.1 + + bech32@1.1.4: {} + + binary-extensions@2.3.0: {} + + blakejs@1.2.1: {} + + bn.js@4.11.6: {} + + bn.js@4.12.1: {} + + bn.js@5.2.1: {} + + boxen@5.1.2: + 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 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + browser-stdout@1.3.1: {} + + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.6 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + bs58@4.0.1: + dependencies: + base-x: 3.0.10 + + bs58check@2.1.2: + dependencies: + bs58: 4.0.1 + create-hash: 1.2.0 + safe-buffer: 5.2.1 + + buffer-from@1.1.2: {} + + buffer-xor@1.0.3: {} + + bytes@3.1.2: {} + + call-bind-apply-helpers@1.0.1: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bound@1.0.3: + dependencies: + call-bind-apply-helpers: 1.0.1 + get-intrinsic: 1.2.7 + + camelcase@6.3.0: {} + + caseless@0.12.0: {} + + cbor@8.1.0: + dependencies: + nofilter: 3.1.0 + + cbor@9.0.2: + dependencies: + nofilter: 3.1.0 + + chai-as-promised@7.1.2(chai@4.5.0): + dependencies: + chai: 4.5.0 + check-error: 1.0.3 + + chai@4.5.0: + 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 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + charenc@0.0.2: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.6.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 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.1 + + ci-info@2.0.0: {} + + cipher-base@1.0.6: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + clean-stack@2.2.0: {} + + cli-boxes@2.2.1: {} + + cli-table3@0.5.1: + dependencies: + object-assign: 4.1.1 + string-width: 2.1.1 + optionalDependencies: + colors: 1.4.0 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colors@1.4.0: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + command-exists@1.2.9: {} + + command-line-args@5.2.1: + dependencies: + array-back: 3.1.0 + find-replace: 3.0.0 + lodash.camelcase: 4.3.0 + typical: 4.0.0 + + command-line-usage@6.1.3: + dependencies: + array-back: 4.0.2 + chalk: 2.4.2 + table-layout: 1.0.2 + typical: 5.2.0 + + commander@8.3.0: {} + + concat-map@0.0.1: {} + + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + cookie@0.4.2: {} + + core-util-is@1.0.3: {} + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.6 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.6 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + create-require@1.1.1: {} + + crypt@0.0.2: {} + + death@1.1.0: {} + + debug@4.4.0(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + diff@4.0.2: {} + + diff@5.2.0: {} + + difflib@0.2.4: + dependencies: + heap: 0.2.7 + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + elliptic@6.5.4: + dependencies: + bn.js: 4.12.1 + 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 + + elliptic@6.6.1: + dependencies: + bn.js: 4.12.1 + 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 + + emoji-regex@8.0.0: {} + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + env-paths@2.2.1: {} + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escodegen@1.8.1: + dependencies: + esprima: 2.7.3 + estraverse: 1.9.3 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.2.0 + + esprima@2.7.3: {} + + esprima@4.0.1: {} + + estraverse@1.9.3: {} + + esutils@2.0.3: {} + + eth-gas-reporter@0.2.27: + dependencies: + '@solidity-parser/parser': 0.14.5 + axios: 1.7.9 + 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.8.2 + req-cwd: 2.0.0 + sha1: 1.1.1 + sync-request: 6.1.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + + ethereum-bloom-filters@1.2.0: + dependencies: + '@noble/hashes': 1.7.1 + + ethereum-cryptography@0.1.3: + 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.4 + setimmediate: 1.0.5 + + ethereum-cryptography@1.2.0: + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 + + ethereum-cryptography@2.2.1: + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + + ethereumjs-abi@0.6.8: + dependencies: + bn.js: 4.12.1 + ethereumjs-util: 6.2.1 + + ethereumjs-util@6.2.1: + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 4.12.1 + create-hash: 1.2.0 + elliptic: 6.6.1 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + + ethereumjs-util@7.1.5: + dependencies: + '@types/bn.js': 5.1.6 + bn.js: 5.2.1 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + + ethers@5.7.2: + 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 + + ethers@6.13.5: + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 22.7.5 + aes-js: 4.0.0-beta.5 + tslib: 2.7.0 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethjs-unit@0.1.6: + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + + ethjs-util@0.1.6: + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + + eventemitter3@5.0.1: {} + + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.3: + 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.8 + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.6: {} + + fastq@1.19.0: + dependencies: + reusify: 1.0.4 + + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-replace@3.0.0: + dependencies: + array-back: 3.1.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + follow-redirects@1.15.9(debug@4.4.0): + optionalDependencies: + debug: 4.4.0(supports-color@8.1.1) + + form-data@2.5.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + safe-buffer: 5.2.1 + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fp-ts@1.19.3: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-readdir-recursive@1.1.0: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.7: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-port@3.2.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + ghost-testrpc@0.0.2: + dependencies: + chalk: 2.4.2 + node-emoji: 1.11.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@5.0.15: + dependencies: + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.1.7: + 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 + + glob@7.2.3: + 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 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + + globby@10.0.2: + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + glob: 7.2.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + hardhat-gas-reporter@1.0.10(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)): + dependencies: + array-uniq: 1.0.3 + eth-gas-reporter: 0.2.27 + hardhat: 2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + sha1: 1.1.1 + transitivePeerDependencies: + - '@codechecks/client' + - bufferutil + - debug + - utf-8-validate + + hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3): + dependencies: + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/edr': 0.7.0 + '@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.6 + '@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 + chokidar: 4.0.3 + ci-info: 2.0.0 + debug: 4.4.0(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: 5.0.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + immutable: 4.3.7 + io-ts: 1.10.4 + json-stream-stringify: 3.1.6 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.8.2 + p-map: 4.0.0 + picocolors: 1.1.1 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.8.26(debug@4.4.0) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + tinyglobby: 0.2.10 + tsort: 0.0.1 + undici: 5.28.5 + uuid: 8.3.2 + ws: 7.5.10 + optionalDependencies: + ts-node: 10.9.2(@types/node@22.13.1)(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - bufferutil + - c-kzg + - supports-color + - utf-8-validate + + has-flag@1.0.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-symbols@1.1.0: {} + + hash-base@3.1.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + heap@0.2.7: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + http-basic@8.1.3: + dependencies: + caseless: 0.12.0 + concat-stream: 1.6.2 + http-response-object: 3.0.2 + parse-cache-control: 1.0.1 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-response-object@3.0.2: + dependencies: + '@types/node': 10.17.60 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.0(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ignore@5.3.2: {} + + immer@10.0.2: {} + + immutable@4.3.7: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + interpret@1.4.0: {} + + io-ts@1.10.4: + dependencies: + fp-ts: 1.19.3 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@2.0.0: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hex-prefixed@1.0.0: {} + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-unicode-supported@0.1.0: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + isows@1.0.6(ws@8.18.0): + dependencies: + ws: 8.18.0 + + js-sha3@0.8.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-schema-traverse@1.0.0: {} + + json-stream-stringify@3.1.6: {} + + json-stringify-safe@5.0.1: {} + + json5@2.2.3: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonschema@1.5.0: {} + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.4 + readable-stream: 3.6.2 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.clonedeep@4.5.0: {} + + lodash.memoize@4.1.2: {} + + lodash.truncate@4.4.2: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lru_map@0.3.3: {} + + make-error@1.3.6: {} + + markdown-table@1.1.3: {} + + math-intrinsics@1.1.0: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + memorystream@0.3.1: {} + + merge2@1.4.1: {} + + micro-ftch@0.3.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + mnemonist@0.38.5: + dependencies: + obliterator: 2.0.5 + + mocha@10.8.2: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.4.0(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 + + ms@2.1.3: {} + + ndjson@2.0.0: + dependencies: + json-stringify-safe: 5.0.1 + minimist: 1.2.8 + readable-stream: 3.6.2 + split2: 3.2.2 + through2: 4.0.2 + + neo-async@2.6.2: {} + + node-addon-api@2.0.2: {} + + node-addon-api@5.1.0: {} + + node-emoji@1.11.0: + dependencies: + lodash: 4.17.21 + + node-gyp-build@4.8.4: {} + + nofilter@3.1.0: {} + + nopt@3.0.6: + dependencies: + abbrev: 1.0.9 + + normalize-path@3.0.0: {} + + number-to-bn@1.7.0: + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 + + object-assign@4.1.1: {} + + object-inspect@1.13.4: {} + + obliterator@2.0.5: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.8.3: + 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 + + os-tmpdir@1.0.2: {} + + ox@0.6.7(typescript@5.7.3): + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8(typescript@5.7.3) + eventemitter3: 5.0.1 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - zod + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + parse-cache-control@1.0.1: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-parse@1.0.7: {} + + path-type@4.0.0: {} + + pathval@1.1.1: {} + + pbkdf2@3.1.2: + 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 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pify@4.0.1: {} + + prelude-ls@1.1.2: {} + + prettier-plugin-solidity@1.4.2(prettier@3.4.2): + dependencies: + '@solidity-parser/parser': 0.19.0 + prettier: 3.4.2 + semver: 7.7.1 + + prettier@2.8.8: {} + + prettier@3.4.2: {} + + process-nextick-args@2.0.1: {} + + promise@8.3.0: + dependencies: + asap: 2.0.6 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proxy-from-env@1.1.0: {} + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readable-stream@2.3.8: + 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 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.1: {} + + rechoir@0.6.2: + dependencies: + resolve: 1.22.10 + + recursive-readdir@2.2.3: + dependencies: + minimatch: 3.1.2 + + reduce-flatten@2.0.0: {} + + req-cwd@2.0.0: + dependencies: + req-from: 2.0.0 + + req-from@2.0.0: + dependencies: + resolve-from: 3.0.0 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-from@3.0.0: {} + + resolve@1.1.7: {} + + resolve@1.17.0: + dependencies: + path-parse: 1.0.7 + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + ripemd160@2.0.2: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + + rlp@2.2.7: + dependencies: + bn.js: 5.2.1 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + sc-istanbul@0.4.6: + 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 + + scrypt-js@3.0.1: {} + + secp256k1@4.0.4: + dependencies: + elliptic: 6.6.1 + node-addon-api: 5.1.0 + node-gyp-build: 4.8.4 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.7.1: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + setimmediate@1.0.5: {} + + setprototypeof@1.2.0: {} + + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + sha1@1.1.1: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.7 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + solc@0.8.26(debug@4.4.0): + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.9(debug@4.4.0) + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + + solidity-coverage@0.8.14(hardhat@2.22.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3)): + dependencies: + '@ethersproject/abi': 5.7.0 + '@solidity-parser/parser': 0.19.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.18(ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3))(typescript@5.7.3) + jsonschema: 1.5.0 + lodash: 4.17.21 + mocha: 10.8.2 + node-emoji: 1.11.0 + pify: 4.0.1 + recursive-readdir: 2.2.3 + sc-istanbul: 0.4.6 + semver: 7.7.1 + shelljs: 0.8.5 + web3-utils: 1.10.4 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.2.0: + dependencies: + amdefine: 1.0.1 + optional: true + + source-map@0.6.1: {} + + split2@3.2.2: + dependencies: + readable-stream: 3.6.2 + + sprintf-js@1.0.3: {} + + stacktrace-parser@0.1.10: + dependencies: + type-fest: 0.7.1 + + statuses@2.0.1: {} + + string-format@2.0.0: {} + + string-width@2.1.1: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@4.0.0: + dependencies: + ansi-regex: 3.0.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-hex-prefix@1.0.0: + dependencies: + is-hex-prefixed: 1.0.0 + + strip-json-comments@3.1.1: {} + + supports-color@3.2.3: + dependencies: + has-flag: 1.0.0 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + sync-request@6.1.0: + dependencies: + http-response-object: 3.0.2 + sync-rpc: 1.3.6 + then-request: 6.0.2 + + sync-rpc@1.3.6: + dependencies: + get-port: 3.2.0 + + table-layout@1.0.2: + dependencies: + array-back: 4.0.2 + deep-extend: 0.6.0 + typical: 5.2.0 + wordwrapjs: 4.0.1 + + table@6.9.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 + + then-request@6.0.2: + dependencies: + '@types/concat-stream': 1.6.1 + '@types/form-data': 0.0.33 + '@types/node': 8.10.66 + '@types/qs': 6.9.18 + caseless: 0.12.0 + concat-stream: 1.6.2 + form-data: 2.5.2 + http-basic: 8.1.3 + http-response-object: 3.0.2 + promise: 8.3.0 + qs: 6.14.0 + + through2@4.0.2: + dependencies: + readable-stream: 3.6.2 + + tinyglobby@0.2.10: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + ts-command-line-args@2.5.1: + dependencies: + chalk: 4.1.2 + command-line-args: 5.2.1 + command-line-usage: 6.1.3 + string-format: 2.0.0 + + ts-essentials@7.0.3(typescript@5.7.3): + dependencies: + typescript: 5.7.3 + + ts-node@10.9.2(@types/node@22.13.1)(typescript@5.7.3): + 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.13.1 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.7.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tslib@1.14.1: {} + + tslib@2.7.0: {} + + tsort@0.0.1: {} + + tweetnacl-util@0.15.1: {} + + tweetnacl@1.0.3: {} + + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + + type-detect@4.1.0: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@0.7.1: {} + + typechain@8.3.2(typescript@5.7.3): + dependencies: + '@types/prettier': 2.7.3 + debug: 4.4.0(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.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + typedarray@0.0.6: {} + + typescript@5.7.3: {} + + typical@4.0.0: {} + + typical@5.2.0: {} + + uglify-js@3.19.3: + optional: true + + undici-types@6.19.8: {} + + undici-types@6.20.0: {} + + undici@5.28.5: + dependencies: + '@fastify/busboy': 2.1.1 + + universalify@0.1.2: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + utf8@3.0.0: {} + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: {} + + viem@2.22.22(typescript@5.7.3): + dependencies: + '@noble/curves': 1.8.1 + '@noble/hashes': 1.7.1 + '@scure/bip32': 1.6.2 + '@scure/bip39': 1.5.4 + abitype: 1.0.8(typescript@5.7.3) + isows: 1.0.6(ws@8.18.0) + ox: 0.6.7(typescript@5.7.3) + ws: 8.18.0 + optionalDependencies: + typescript: 5.7.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + - zod + + web3-utils@1.10.4: + 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 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + + wordwrapjs@4.0.1: + dependencies: + reduce-flatten: 2.0.0 + typical: 5.2.0 + + workerpool@6.5.1: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrappy@1.0.2: {} + + ws@7.4.6: {} + + ws@7.5.10: {} + + ws@8.17.1: {} + + ws@8.18.0: {} + + y18n@5.0.8: {} + + yargs-parser@20.2.9: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + 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 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/snapshots-test-via-ir/TagTest.json b/snapshots-test-via-ir/TagTest.json deleted file mode 100644 index 7fb26f3..0000000 --- a/snapshots-test-via-ir/TagTest.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "Tag": "149", - "Tag_expected": "201" -} \ No newline at end of file diff --git a/snapshots-test-no-ir/ArrayTest.json b/snapshots/no-ir/ArrayTest.json similarity index 100% rename from snapshots-test-no-ir/ArrayTest.json rename to snapshots/no-ir/ArrayTest.json diff --git a/snapshots-test-no-ir/BignumTest.json b/snapshots/no-ir/BignumTest.json similarity index 79% rename from snapshots-test-no-ir/BignumTest.json rename to snapshots/no-ir/BignumTest.json index 535509e..8063a1f 100644 --- a/snapshots-test-no-ir/BignumTest.json +++ b/snapshots/no-ir/BignumTest.json @@ -1,7 +1,7 @@ { - "Integer": "235", + "Integer": "236", "NInt256_max": "914", - "NInt256_middle": "235", + "NInt256_middle": "236", "NInt256_multi": "816", "NInt256_single": "816", "UInt256_max": "770", diff --git a/snapshots-test-no-ir/BytesTest.json b/snapshots/no-ir/BytesTest.json similarity index 100% rename from snapshots-test-no-ir/BytesTest.json rename to snapshots/no-ir/BytesTest.json diff --git a/snapshots-test-no-ir/CidSha256Test.json b/snapshots/no-ir/CidSha256Test.json similarity index 100% rename from snapshots-test-no-ir/CidSha256Test.json rename to snapshots/no-ir/CidSha256Test.json diff --git a/snapshots-test-no-ir/IntTest.json b/snapshots/no-ir/IntTest.json similarity index 100% rename from snapshots-test-no-ir/IntTest.json rename to snapshots/no-ir/IntTest.json diff --git a/snapshots-test-no-ir/MapTest.json b/snapshots/no-ir/MapTest.json similarity index 100% rename from snapshots-test-no-ir/MapTest.json rename to snapshots/no-ir/MapTest.json diff --git a/snapshots-test-no-ir/NIntTest.json b/snapshots/no-ir/NIntTest.json similarity index 100% rename from snapshots-test-no-ir/NIntTest.json rename to snapshots/no-ir/NIntTest.json diff --git a/snapshots-test-no-ir/PeekTest.json b/snapshots/no-ir/PeekTest.json similarity index 100% rename from snapshots-test-no-ir/PeekTest.json rename to snapshots/no-ir/PeekTest.json diff --git a/snapshots-test-no-ir/SimpleTest.json b/snapshots/no-ir/SimpleTest.json similarity index 100% rename from snapshots-test-no-ir/SimpleTest.json rename to snapshots/no-ir/SimpleTest.json diff --git a/snapshots-test-no-ir/StringTest.json b/snapshots/no-ir/StringTest.json similarity index 100% rename from snapshots-test-no-ir/StringTest.json rename to snapshots/no-ir/StringTest.json diff --git a/snapshots-test-no-ir/TagTest.json b/snapshots/no-ir/TagTest.json similarity index 100% rename from snapshots-test-no-ir/TagTest.json rename to snapshots/no-ir/TagTest.json diff --git a/snapshots-test-no-ir/UIntTest.json b/snapshots/no-ir/UIntTest.json similarity index 100% rename from snapshots-test-no-ir/UIntTest.json rename to snapshots/no-ir/UIntTest.json diff --git a/test-no-ir.gas-snapshot b/snapshots/no-ir/comparison.gas-snapshot similarity index 100% rename from test-no-ir.gas-snapshot rename to snapshots/no-ir/comparison.gas-snapshot diff --git a/snapshots-test-via-ir/ArrayTest.json b/snapshots/via-ir/ArrayTest.json similarity index 100% rename from snapshots-test-via-ir/ArrayTest.json rename to snapshots/via-ir/ArrayTest.json diff --git a/snapshots-test-via-ir/BignumTest.json b/snapshots/via-ir/BignumTest.json similarity index 100% rename from snapshots-test-via-ir/BignumTest.json rename to snapshots/via-ir/BignumTest.json diff --git a/snapshots-test-via-ir/BytesTest.json b/snapshots/via-ir/BytesTest.json similarity index 100% rename from snapshots-test-via-ir/BytesTest.json rename to snapshots/via-ir/BytesTest.json diff --git a/snapshots-test-via-ir/CidSha256Test.json b/snapshots/via-ir/CidSha256Test.json similarity index 100% rename from snapshots-test-via-ir/CidSha256Test.json rename to snapshots/via-ir/CidSha256Test.json diff --git a/snapshots-test-via-ir/IntTest.json b/snapshots/via-ir/IntTest.json similarity index 100% rename from snapshots-test-via-ir/IntTest.json rename to snapshots/via-ir/IntTest.json diff --git a/snapshots-test-via-ir/MapTest.json b/snapshots/via-ir/MapTest.json similarity index 100% rename from snapshots-test-via-ir/MapTest.json rename to snapshots/via-ir/MapTest.json diff --git a/snapshots-test-via-ir/NIntTest.json b/snapshots/via-ir/NIntTest.json similarity index 100% rename from snapshots-test-via-ir/NIntTest.json rename to snapshots/via-ir/NIntTest.json diff --git a/snapshots-test-via-ir/PeekTest.json b/snapshots/via-ir/PeekTest.json similarity index 100% rename from snapshots-test-via-ir/PeekTest.json rename to snapshots/via-ir/PeekTest.json diff --git a/snapshots-test-via-ir/SimpleTest.json b/snapshots/via-ir/SimpleTest.json similarity index 100% rename from snapshots-test-via-ir/SimpleTest.json rename to snapshots/via-ir/SimpleTest.json diff --git a/snapshots-test-via-ir/StringTest.json b/snapshots/via-ir/StringTest.json similarity index 100% rename from snapshots-test-via-ir/StringTest.json rename to snapshots/via-ir/StringTest.json diff --git a/snapshots/via-ir/TagTest.json b/snapshots/via-ir/TagTest.json new file mode 100644 index 0000000..dbaa173 --- /dev/null +++ b/snapshots/via-ir/TagTest.json @@ -0,0 +1,4 @@ +{ + "Tag": "149", + "Tag_expected": "207" +} \ No newline at end of file diff --git a/snapshots-test-via-ir/UIntTest.json b/snapshots/via-ir/UIntTest.json similarity index 100% rename from snapshots-test-via-ir/UIntTest.json rename to snapshots/via-ir/UIntTest.json diff --git a/test-via-ir.gas-snapshot b/snapshots/via-ir/comparison.gas-snapshot similarity index 100% rename from test-via-ir.gas-snapshot rename to snapshots/via-ir/comparison.gas-snapshot diff --git a/src/ReadCbor.sol b/src/ReadCbor.sol index 6ab7a33..b6f1d54 100644 --- a/src/ReadCbor.sol +++ b/src/ReadCbor.sol @@ -30,12 +30,19 @@ library ReadCbor { /// @param minor The minor bits from the header byte /// @return n The new index /// @return arg The parsed argument value - function parseArg(bytes memory cbor, uint i, uint8 minor) private pure returns (uint n, uint64 arg) { + function parseArg( + bytes memory cbor, + uint i, + uint8 minor + ) private pure returns (uint n, uint64 arg) { if (minor < MinorExtendU8) { (n, arg) = (i, minor); } else if (minor == MinorExtendU8) { (n, arg) = u8(cbor, i); - require(arg >= MinorExtendU8, "invalid type argument (single-byte value too low)"); + require( + arg >= MinorExtendU8, + "invalid type argument (single-byte value too low)" + ); } else if (minor == MinorExtendU16) { (n, arg) = u16(cbor, i); } else if (minor == MinorExtendU32) { @@ -47,7 +54,10 @@ library ReadCbor { } } - function u8(bytes memory cbor, uint i) private pure returns (uint n, uint8 ret) { + function u8( + bytes memory cbor, + uint i + ) private pure returns (uint n, uint8 ret) { assembly ("memory-safe") { // Load 1 bytes directly into value starting at position i ret := shr(248, mload(add(add(cbor, 0x20), i))) // 248 = 256 - (8 bits) @@ -55,7 +65,10 @@ library ReadCbor { } } - function u16(bytes memory cbor, uint i) private pure returns (uint n, uint16 ret) { + function u16( + bytes memory cbor, + uint i + ) private pure returns (uint n, uint16 ret) { assembly ("memory-safe") { // Load 2 bytes directly into value starting at position i ret := shr(240, mload(add(add(cbor, 0x20), i))) // 240 = 256 - (16 bits) @@ -63,7 +76,10 @@ library ReadCbor { } } - function u32(bytes memory cbor, uint i) private pure returns (uint n, uint32 ret) { + function u32( + bytes memory cbor, + uint i + ) private pure returns (uint n, uint32 ret) { assembly ("memory-safe") { // Load 4 bytes directly into value starting at position i ret := shr(224, mload(add(add(cbor, 0x20), i))) // 224 = 256 - (32 bits) @@ -71,7 +87,10 @@ library ReadCbor { } } - function u64(bytes memory cbor, uint i) private pure returns (uint n, uint64 ret) { + function u64( + bytes memory cbor, + uint i + ) private pure returns (uint n, uint64 ret) { assembly ("memory-safe") { // Load 8 bytes directly into value starting at position i ret := shr(192, mload(add(add(cbor, 0x20), i))) // 192 = 256 - (64 bits) @@ -85,7 +104,10 @@ library ReadCbor { /// @return n The new index /// @return arg The type argument /// @return major The major type - function header(bytes memory cbor, uint i) internal pure returns (uint n, uint64 arg, uint8 major) { + function header( + bytes memory cbor, + uint i + ) internal pure returns (uint n, uint64 arg, uint8 major) { uint8 h; (n, h) = u8(cbor, i); major = h >> shiftMajor; @@ -100,7 +122,11 @@ library ReadCbor { /// @return n The new index /// @return arg The argument value /// @dev Reverts if major type doesn't match expected - function header(bytes memory cbor, uint i, uint8 expectMajor) internal pure returns (uint n, uint64 arg) { + function header( + bytes memory cbor, + uint i, + uint8 expectMajor + ) internal pure returns (uint n, uint64 arg) { uint8 h; (n, h) = u8(cbor, i); require(h >> shiftMajor == expectMajor, "unexpected major type"); @@ -115,11 +141,12 @@ library ReadCbor { /// @return n The new index /// @return arg The argument value /// @dev Reverts if major or minor types don't match expected - function header(bytes memory cbor, uint i, uint8 expectMajor, uint8 expectMinor) - internal - pure - returns (uint n, uint64 arg) - { + function header( + bytes memory cbor, + uint i, + uint8 expectMajor, + uint8 expectMinor + ) internal pure returns (uint n, uint64 arg) { uint8 h; (n, h) = u8(cbor, i); uint8 major = h >> shiftMajor; @@ -136,7 +163,11 @@ library ReadCbor { /// @return n The new index /// @return arg The argument value /// @dev For u8 type arguments only (literal minor or 1-byte extended) - function header8(bytes memory cbor, uint i, uint8 expectMajor) internal pure returns (uint n, uint8 arg) { + function header8( + bytes memory cbor, + uint i, + uint8 expectMajor + ) internal pure returns (uint n, uint8 arg) { uint8 major; assembly ("memory-safe") { @@ -167,7 +198,11 @@ library ReadCbor { /// @return n The new index /// @return arg The argument value /// @dev For type arguments expected to specify a length, uint is sufficient - function header32(bytes memory cbor, uint i, uint8 expectMajor) internal pure returns (uint n, uint32 arg) { + function header32( + bytes memory cbor, + uint i, + uint8 expectMajor + ) internal pure returns (uint n, uint32 arg) { uint8 major; assembly ("memory-safe") { @@ -207,9 +242,15 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is null - function isNull(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isNull( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { - indeed := eq(byte(0, mload(add(add(cbor, 0x20), i))), or(shl(shiftMajor, MajorPrimitive), SimpleNull)) + indeed := eq( + byte(0, mload(add(add(cbor, 0x20), i))), + or(shl(shiftMajor, MajorPrimitive), SimpleNull) + ) } } @@ -227,9 +268,15 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is undefined - function isUndefined(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isUndefined( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { - indeed := eq(byte(0, mload(add(add(cbor, 0x20), i))), or(shl(shiftMajor, MajorPrimitive), SimpleUndefined)) + indeed := eq( + byte(0, mload(add(add(cbor, 0x20), i))), + or(shl(shiftMajor, MajorPrimitive), SimpleUndefined) + ) } } @@ -238,7 +285,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @dev Reverts if item is not undefined - function Undefined(bytes memory cbor, uint i) internal pure returns (uint n) { + function Undefined( + bytes memory cbor, + uint i + ) internal pure returns (uint n) { require(isUndefined(cbor, i), "expected undefined"); n = i + 1; } @@ -247,14 +297,16 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is a boolean - function isBool(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isBool( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { let h := byte(0, mload(add(add(cbor, 0x20), i))) - indeed := - or( - eq(h, or(shl(shiftMajor, MajorPrimitive), SimpleTrue)), - eq(h, or(shl(shiftMajor, MajorPrimitive), SimpleFalse)) - ) + indeed := or( + eq(h, or(shl(shiftMajor, MajorPrimitive), SimpleTrue)), + eq(h, or(shl(shiftMajor, MajorPrimitive), SimpleFalse)) + ) } } @@ -264,7 +316,10 @@ library ReadCbor { /// @return n The new index /// @return isTrue The boolean value /// @dev Reverts if item is not a boolean - function Bool(bytes memory cbor, uint i) internal pure returns (uint n, bool isTrue) { + function Bool( + bytes memory cbor, + uint i + ) internal pure returns (uint n, bool isTrue) { bool isFalse; assembly ("memory-safe") { let h := byte(0, mload(add(add(cbor, 0x20), i))) @@ -279,7 +334,10 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is an array - function isArray(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isArray( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { indeed := eq(shr(253, mload(add(add(cbor, 0x20), i))), MajorArray) } @@ -290,7 +348,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return len The number of items in the array - function Array(bytes memory cbor, uint i) internal pure returns (uint, uint32) { + function Array( + bytes memory cbor, + uint i + ) internal pure returns (uint, uint32) { // An array of data items. The argument is the number of data items in the // array. Items in an array do not need to all be of the same type. return header32(cbor, i, MajorArray); @@ -300,7 +361,10 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is a map - function isMap(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isMap( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { indeed := eq(shr(253, mload(add(add(cbor, 0x20), i))), MajorMap) } @@ -311,7 +375,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return len The number of key-value pairs in the map - function Map(bytes memory cbor, uint i) internal pure returns (uint, uint32) { + function Map( + bytes memory cbor, + uint i + ) internal pure returns (uint, uint32) { // A map is comprised of pairs of data items, each pair consisting of a key // that is immediately followed by a value. The argument is the number of // pairs of data items in the map. @@ -322,7 +389,10 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is a string - function isString(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isString( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { indeed := eq(shr(253, mload(add(add(cbor, 0x20), i))), MajorText) } @@ -333,7 +403,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return str The string value - function String(bytes memory cbor, uint i) internal pure returns (uint n, string memory str) { + function String( + bytes memory cbor, + uint i + ) internal pure returns (uint n, string memory str) { uint32 len; (i, len) = header32(cbor, i, MajorText); @@ -354,7 +427,11 @@ library ReadCbor { /// @return str The bytes32 value /// @return len The string length /// @dev Reverts if string length exceeds maxLen - function String32(bytes memory cbor, uint i, uint8 maxLen) internal pure returns (uint n, bytes32 str, uint8 len) { + function String32( + bytes memory cbor, + uint i, + uint8 maxLen + ) internal pure returns (uint n, bytes32 str, uint8 len) { assert(maxLen <= 32); (i, len) = header8(cbor, i, MajorText); require(len <= maxLen); @@ -366,7 +443,10 @@ library ReadCbor { } } - function String32(bytes memory cbor, uint i) internal pure returns (uint, bytes32, uint8) { + function String32( + bytes memory cbor, + uint i + ) internal pure returns (uint, bytes32, uint8) { return String32(cbor, i, 32); } @@ -376,7 +456,10 @@ library ReadCbor { /// @return n The new index /// @return s The single-byte value /// @dev Reverts if string length is not exactly 1 - function String1(bytes memory cbor, uint i) internal pure returns (uint n, bytes1 s) { + function String1( + bytes memory cbor, + uint i + ) internal pure returns (uint n, bytes1 s) { bool validItemType; assembly ("memory-safe") { let h := shr(248, mload(add(add(cbor, 0x20), i))) // load header byte @@ -391,7 +474,10 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return n The new index after the string - function skipString(bytes memory cbor, uint i) internal pure returns (uint n) { + function skipString( + bytes memory cbor, + uint i + ) internal pure returns (uint n) { uint32 len; (i, len) = header32(cbor, i, MajorText); n = i + len; @@ -401,7 +487,10 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is a byte string - function isBytes(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isBytes( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { indeed := eq(shr(253, mload(add(add(cbor, 0x20), i))), MajorBytes) } @@ -412,7 +501,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return bts The byte string value - function Bytes(bytes memory cbor, uint i) internal pure returns (uint n, bytes memory bts) { + function Bytes( + bytes memory cbor, + uint i + ) internal pure returns (uint n, bytes memory bts) { uint32 len; (i, len) = header32(cbor, i, MajorBytes); @@ -433,7 +525,11 @@ library ReadCbor { /// @return bts The bytes32 value /// @return len The byte string length /// @dev Reverts if byte string length exceeds maxLen - function Bytes32(bytes memory cbor, uint i, uint8 maxLen) internal pure returns (uint n, bytes32 bts, uint8 len) { + function Bytes32( + bytes memory cbor, + uint i, + uint8 maxLen + ) internal pure returns (uint n, bytes32 bts, uint8 len) { assert(maxLen <= 32); (i, len) = header8(cbor, i, MajorBytes); require(len <= maxLen); @@ -445,7 +541,10 @@ library ReadCbor { } } - function Bytes32(bytes memory cbor, uint i) internal pure returns (uint, bytes32, uint8) { + function Bytes32( + bytes memory cbor, + uint i + ) internal pure returns (uint, bytes32, uint8) { return Bytes32(cbor, i, 32); } @@ -453,7 +552,10 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return n The new index after the byte string - function skipBytes(bytes memory cbor, uint i) internal pure returns (uint n) { + function skipBytes( + bytes memory cbor, + uint i + ) internal pure returns (uint n) { uint32 len; (i, len) = header32(cbor, i, MajorBytes); n = i + len; @@ -463,7 +565,10 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is a tag - function isTag(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isTag( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { indeed := eq(shr(253, mload(add(add(cbor, 0x20), i))), MajorTag) } @@ -474,7 +579,11 @@ library ReadCbor { /// @param i The current index /// @param expectTag The expected tag value /// @return indeed the next item is the expected tag - function isTag(bytes memory cbor, uint i, uint64 expectTag) internal pure returns (bool indeed) { + function isTag( + bytes memory cbor, + uint i, + uint64 expectTag + ) internal pure returns (bool indeed) { uint64 arg; assembly ("memory-safe") { let h := shr(248, mload(add(add(cbor, 0x20), i))) @@ -484,11 +593,21 @@ library ReadCbor { i := add(i, 1) if gt(arg, 0x17) { switch arg - case 0x18 { arg := shr(248, mload(add(add(cbor, 0x20), i))) } - case 0x19 { arg := shr(240, mload(add(add(cbor, 0x20), i))) } - case 0x1a { arg := shr(224, mload(add(add(cbor, 0x20), i))) } - case 0x1b { arg := shr(192, mload(add(add(cbor, 0x20), i))) } - default { arg := not(expectTag) } + case 0x18 { + arg := shr(248, mload(add(add(cbor, 0x20), i))) + } + case 0x19 { + arg := shr(240, mload(add(add(cbor, 0x20), i))) + } + case 0x1a { + arg := shr(224, mload(add(add(cbor, 0x20), i))) + } + case 0x1b { + arg := shr(192, mload(add(add(cbor, 0x20), i))) + } + default { + arg := not(expectTag) + } } indeed := eq(arg, expectTag) @@ -501,7 +620,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return tag The tag value - function Tag(bytes memory cbor, uint i) internal pure returns (uint, uint64) { + function Tag( + bytes memory cbor, + uint i + ) internal pure returns (uint, uint64) { return header(cbor, i, MajorTag); } @@ -511,7 +633,11 @@ library ReadCbor { /// @param expectTag The expected tag value /// @return n The new index /// @dev Reverts if tag doesn't match expected value - function Tag(bytes memory cbor, uint i, uint64 expectTag) internal pure returns (uint) { + function Tag( + bytes memory cbor, + uint i, + uint64 expectTag + ) internal pure returns (uint) { (uint n, uint64 tag) = header(cbor, i, MajorTag); require(tag == expectTag, "unexpected tag"); return n; @@ -521,9 +647,15 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is an unsigned integer - function isUInt(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isUInt( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { - indeed := eq(shr(253, mload(add(add(cbor, 0x20), i))), MajorUnsigned) + indeed := eq( + shr(253, mload(add(add(cbor, 0x20), i))), + MajorUnsigned + ) } } @@ -532,7 +664,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return arg The unsigned integer value - function UInt(bytes memory cbor, uint i) internal pure returns (uint, uint64) { + function UInt( + bytes memory cbor, + uint i + ) internal pure returns (uint, uint64) { return header(cbor, i, MajorUnsigned); } @@ -541,7 +676,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return arg The uint8 value - function UInt8(bytes memory cbor, uint i) internal pure returns (uint n, uint8 arg) { + function UInt8( + bytes memory cbor, + uint i + ) internal pure returns (uint n, uint8 arg) { return header8(cbor, i, MajorUnsigned); } @@ -550,7 +688,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return arg The uint16 value - function UInt16(bytes memory cbor, uint i) internal pure returns (uint n, uint16 arg) { + function UInt16( + bytes memory cbor, + uint i + ) internal pure returns (uint n, uint16 arg) { uint64 arg64; (n, arg64) = header(cbor, i, MajorUnsigned, MinorExtendU16); arg = uint16(arg64); @@ -561,7 +702,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return arg The uint32 value - function UInt32(bytes memory cbor, uint i) internal pure returns (uint n, uint32 arg) { + function UInt32( + bytes memory cbor, + uint i + ) internal pure returns (uint n, uint32 arg) { uint64 arg64; (n, arg64) = header(cbor, i, MajorUnsigned, MinorExtendU32); arg = uint32(arg64); @@ -572,7 +716,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return arg The uint64 value - function UInt64(bytes memory cbor, uint i) internal pure returns (uint, uint64) { + function UInt64( + bytes memory cbor, + uint i + ) internal pure returns (uint, uint64) { return header(cbor, i, MajorUnsigned, MinorExtendU64); } @@ -580,9 +727,15 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is a negative integer - function isNInt(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isNInt( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { - indeed := eq(shr(253, mload(add(add(cbor, 0x20), i))), MajorNegative) + indeed := eq( + shr(253, mload(add(add(cbor, 0x20), i))), + MajorNegative + ) } } @@ -591,7 +744,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return neg A signed int72 value - function NInt(bytes memory cbor, uint i) internal pure returns (uint n, int72 neg) { + function NInt( + bytes memory cbor, + uint i + ) internal pure returns (uint n, int72 neg) { uint64 arg; (n, arg) = header(cbor, i, MajorNegative); neg = -1 - int72(uint72(arg)); @@ -602,7 +758,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return neg A signed int16 value - function NInt8(bytes memory cbor, uint i) internal pure returns (uint n, int16 neg) { + function NInt8( + bytes memory cbor, + uint i + ) internal pure returns (uint n, int16 neg) { uint8 arg; (n, arg) = header8(cbor, i, MajorNegative); neg = -1 - int16(uint16(arg)); @@ -613,7 +772,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return neg A signed int24 value - function NInt16(bytes memory cbor, uint i) internal pure returns (uint n, int24 neg) { + function NInt16( + bytes memory cbor, + uint i + ) internal pure returns (uint n, int24 neg) { uint64 arg; (n, arg) = header(cbor, i, MajorNegative, MinorExtendU16); neg = -1 - int24(uint24(arg)); @@ -624,7 +786,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return neg A signed int40 value - function NInt32(bytes memory cbor, uint i) internal pure returns (uint n, int40 neg) { + function NInt32( + bytes memory cbor, + uint i + ) internal pure returns (uint n, int40 neg) { uint64 arg; (n, arg) = header(cbor, i, MajorNegative, MinorExtendU32); neg = -1 - int40(uint40(arg)); @@ -635,7 +800,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return neg A signed int72 value - function NInt64(bytes memory cbor, uint i) internal pure returns (uint n, int72 neg) { + function NInt64( + bytes memory cbor, + uint i + ) internal pure returns (uint n, int72 neg) { uint64 arg; (n, arg) = header(cbor, i, MajorNegative, MinorExtendU64); neg = -1 - int72(uint72(arg)); @@ -645,7 +813,10 @@ library ReadCbor { /// @param cbor The CBOR-encoded bytes /// @param i The current index /// @return indeed the next item is any integer - function isInt(bytes memory cbor, uint i) internal pure returns (bool indeed) { + function isInt( + bytes memory cbor, + uint i + ) internal pure returns (bool indeed) { assembly ("memory-safe") { let major := shr(253, mload(add(add(cbor, 0x20), i))) indeed := or(eq(major, MajorUnsigned), eq(major, MajorNegative)) @@ -657,7 +828,10 @@ library ReadCbor { /// @param i The current index /// @return n The new index /// @return integer A signed integer value - function Int(bytes memory cbor, uint i) internal pure returns (uint n, int72 integer) { + function Int( + bytes memory cbor, + uint i + ) internal pure returns (uint n, int72 integer) { uint8 major; uint64 arg; (n, arg, major) = header(cbor, i); diff --git a/src/tags/ReadBignum.sol b/src/tags/ReadBignum.sol index 612b59a..a3b5d1d 100644 --- a/src/tags/ReadBignum.sol +++ b/src/tags/ReadBignum.sol @@ -9,25 +9,30 @@ library ReadBignum { uint8 internal constant TagUnsignedBignum = 0x02; uint8 internal constant TagNegativeBignum = 0x03; - function UInt256(bytes memory cbor, uint i) internal pure returns (uint n, uint256 bn) { + function UInt256( + bytes memory cbor, + uint i + ) internal pure returns (uint n, uint256 bn) { uint8 len; i = cbor.Tag(i, TagUnsignedBignum); (i, len) = cbor.header8(i, MajorBytes); require(len <= 32, "bignum too large"); assembly ("memory-safe") { - bn := - shr( - // Shift length within word - mul(sub(32, len), 8), - // Load bytes - mload(add(add(cbor, 0x20), i)) - ) + bn := shr( + // Shift length within word + mul(sub(32, len), 8), + // Load bytes + mload(add(add(cbor, 0x20), i)) + ) n := add(i, len) } } - function NInt256(bytes memory cbor, uint i) internal pure returns (uint n, int256 nbn) { + function NInt256( + bytes memory cbor, + uint i + ) internal pure returns (uint n, int256 nbn) { uint8 len; i = cbor.Tag(i, TagNegativeBignum); (i, len) = cbor.header8(i, MajorBytes); @@ -35,13 +40,12 @@ library ReadBignum { uint256 bn; assembly ("memory-safe") { - bn := - shr( - // Shift length within word - mul(sub(32, len), 8), - // Load bytes - mload(add(add(cbor, 0x20), i)) - ) + bn := shr( + // Shift length within word + mul(sub(32, len), 8), + // Load bytes + mload(add(add(cbor, 0x20), i)) + ) n := add(i, len) } @@ -49,7 +53,10 @@ library ReadBignum { nbn = -1 - int256(bn); } - function Int256(bytes memory cbor, uint i) internal pure returns (uint n, int256 ibn) { + function Int256( + bytes memory cbor, + uint i + ) internal pure returns (uint n, int256 ibn) { (, uint64 tag) = cbor.Tag(i); if (tag == TagUnsignedBignum) { uint256 ubn; @@ -63,7 +70,10 @@ library ReadBignum { } } - function Integer(bytes memory cbor, uint i) internal pure returns (uint, int256) { + function Integer( + bytes memory cbor, + uint i + ) internal pure returns (uint, int256) { return cbor.isTag(i) ? Int256(cbor, i) : cbor.Int(i); } } diff --git a/src/tags/ReadCidSha256.sol b/src/tags/ReadCidSha256.sol index ec9edb6..d66180f 100644 --- a/src/tags/ReadCidSha256.sol +++ b/src/tags/ReadCidSha256.sol @@ -46,7 +46,8 @@ library ReadCidSha256 { // 12 │ multihash type sha-256 // 20 │ multihash size 32 bytes // ─────────┴───────── - bytes9 private constant cborTag42_cborBytes37_multibaseCidV1_multicodecZERO_multihashSha256_multihashBytes32 = + bytes9 + private constant cborTag42_cborBytes37_multibaseCidV1_multicodecZERO_multihashSha256_multihashBytes32 = hex"D82A58250001001220"; /** @@ -63,20 +64,26 @@ library ReadCidSha256 { * @return uint The next byte index after the CID * @return CidSha256 The representative hash */ - function Cid(bytes memory cbor, uint i) internal pure returns (uint, CidSha256) { + function Cid( + bytes memory cbor, + uint i + ) internal pure returns (uint, CidSha256) { return Cid(cbor, i, 0x71); } - function Cid(bytes memory cbor, uint i, bytes1 multicodec) internal pure returns (uint n, CidSha256 cidSha256) { + function Cid( + bytes memory cbor, + uint i, + bytes1 multicodec + ) internal pure returns (uint n, CidSha256 cidSha256) { bytes9 expect; bytes9 cborHeader; assembly ("memory-safe") { // expected head - expect := - or( - cborTag42_cborBytes37_multibaseCidV1_multicodecZERO_multihashSha256_multihashBytes32, - shr(0x30, multicodec) - ) + expect := or( + cborTag42_cborBytes37_multibaseCidV1_multicodecZERO_multihashSha256_multihashBytes32, + shr(0x30, multicodec) + ) // cbor header at index cborHeader := mload(add(cbor, add(0x20, i))) cidSha256 := mload(add(cbor, add(0x29, i))) @@ -94,7 +101,13 @@ library ReadCidSha256 { * @return Cid The decoded CID, or zero CID if null * @return uint The next byte index after the CID or null value */ - function NullableCid(bytes memory cbor, uint i) internal pure returns (uint, CidSha256) { - return cbor.isNull(i) ? (i + 1, CidSha256.wrap(0)) : ReadCidSha256.Cid(cbor, i); + function NullableCid( + bytes memory cbor, + uint i + ) internal pure returns (uint, CidSha256) { + return + cbor.isNull(i) + ? (i + 1, CidSha256.wrap(0)) + : ReadCidSha256.Cid(cbor, i); } } diff --git a/test-no-ir.lcov.info b/test-no-ir.lcov.info deleted file mode 100644 index 51f5fac..0000000 --- a/test-no-ir.lcov.info +++ /dev/null @@ -1,483 +0,0 @@ -TN: -SF:src/ReadCbor.sol -DA:33,818 -FN:33,ReadCbor.parseArg -FNDA:818,ReadCbor.parseArg -DA:34,818 -BRDA:34,0,0,541 -BRDA:34,0,1,256 -DA:35,541 -DA:36,277 -BRDA:36,1,0,3 -BRDA:36,1,1,256 -DA:37,3 -DA:38,3 -BRDA:38,2,0,1 -BRDA:38,2,1,2 -DA:39,274 -BRDA:39,3,0,7 -BRDA:39,3,1,256 -DA:40,7 -DA:41,267 -BRDA:41,4,0,4 -BRDA:41,4,1,256 -DA:42,4 -DA:43,263 -BRDA:43,5,0,7 -BRDA:43,5,1,256 -DA:44,7 -DA:46,256 -DA:50,827 -FN:50,ReadCbor.u8 -FNDA:827,ReadCbor.u8 -DA:53,827 -DA:54,827 -DA:58,7 -FN:58,ReadCbor.u16 -FNDA:7,ReadCbor.u16 -DA:61,7 -DA:62,7 -DA:66,4 -FN:66,ReadCbor.u32 -FNDA:4,ReadCbor.u32 -DA:69,4 -DA:70,4 -DA:74,7 -FN:74,ReadCbor.u64 -FNDA:7,ReadCbor.u64 -DA:77,7 -DA:78,7 -DA:88,274 -FN:88,ReadCbor.header -FNDA:274,ReadCbor.header -DA:89,274 -DA:90,274 -DA:91,274 -DA:92,274 -DA:93,274 -DA:103,540 -FN:103,ReadCbor.header -FNDA:540,ReadCbor.header -DA:104,540 -DA:105,540 -DA:106,540 -BRDA:106,6,0,2 -BRDA:106,6,1,538 -DA:107,538 -DA:118,10 -FN:118,ReadCbor.header -FNDA:10,ReadCbor.header -DA:123,10 -DA:124,10 -DA:125,10 -DA:126,10 -BRDA:126,7,0,2 -BRDA:126,7,1,8 -DA:127,8 -DA:128,8 -BRDA:128,8,0,2 -BRDA:128,8,1,6 -DA:129,6 -DA:139,575 -FN:139,ReadCbor.header8 -FNDA:575,ReadCbor.header8 -DA:140,575 -DA:143,575 -DA:144,575 -DA:145,575 -DA:146,575 -DA:149,575 -BRDA:149,9,0,1 -BRDA:149,9,1,574 -DA:151,574 -BRDA:151,10,0,531 -DA:152,531 -BRDA:152,11,0,2 -BRDA:152,11,1,529 -DA:154,529 -DA:155,529 -DA:157,529 -BRDA:157,12,0,2 -BRDA:157,12,1,527 -DA:160,570 -DA:170,40 -FN:170,ReadCbor.header32 -FNDA:40,ReadCbor.header32 -DA:171,40 -DA:174,40 -DA:175,40 -DA:176,40 -DA:177,40 -DA:180,40 -BRDA:180,13,0,2 -BRDA:180,13,1,38 -DA:182,38 -BRDA:182,14,0,2 -BRDA:182,14,1,1 -DA:184,2 -DA:185,2 -DA:187,2 -BRDA:187,15,0,1 -BRDA:187,15,1,1 -DA:188,36 -BRDA:188,16,0,3 -DA:189,3 -BRDA:189,17,0,1 -BRDA:189,17,1,2 -DA:190,2 -BRDA:190,18,0,1 -BRDA:190,18,1,1 -DA:192,1 -DA:193,1 -DA:195,1 -BRDA:195,19,0,1 -DA:197,1 -DA:198,1 -DA:203,36 -DA:210,262 -FN:210,ReadCbor.isNull -FNDA:262,ReadCbor.isNull -DA:212,262 -DA:221,2 -FN:221,ReadCbor.Null -FNDA:2,ReadCbor.Null -DA:222,2 -BRDA:222,20,0,1 -BRDA:222,20,1,1 -DA:223,1 -DA:230,4 -FN:230,ReadCbor.isUndefined -FNDA:4,ReadCbor.isUndefined -DA:232,4 -DA:241,2 -FN:241,ReadCbor.Undefined -FNDA:2,ReadCbor.Undefined -DA:242,2 -BRDA:242,21,0,1 -BRDA:242,21,1,1 -DA:243,1 -DA:250,3 -FN:250,ReadCbor.isBool -FNDA:3,ReadCbor.isBool -DA:252,3 -DA:253,3 -DA:267,3 -FN:267,ReadCbor.Bool -FNDA:3,ReadCbor.Bool -DA:268,3 -DA:270,3 -DA:271,3 -DA:272,3 -DA:273,3 -DA:275,3 -BRDA:275,22,0,1 -BRDA:275,22,1,2 -DA:282,2 -FN:282,ReadCbor.isArray -FNDA:2,ReadCbor.isArray -DA:284,2 -DA:293,13 -FN:293,ReadCbor.Array -FNDA:13,ReadCbor.Array -DA:296,13 -DA:303,2 -FN:303,ReadCbor.isMap -FNDA:2,ReadCbor.isMap -DA:305,2 -DA:314,9 -FN:314,ReadCbor.Map -FNDA:9,ReadCbor.Map -DA:318,9 -DA:325,2 -FN:325,ReadCbor.isString -FNDA:2,ReadCbor.isString -DA:327,2 -DA:336,7 -FN:336,ReadCbor.String -FNDA:7,ReadCbor.String -DA:337,7 -DA:338,7 -DA:340,7 -DA:342,7 -DA:343,7 -DA:344,7 -DA:345,7 -DA:357,14 -FN:357,ReadCbor.String32 -FNDA:14,ReadCbor.String32 -DA:358,14 -DA:359,13 -DA:360,13 -BRDA:360,23,0,1 -BRDA:360,23,1,12 -DA:363,12 -DA:364,12 -DA:365,12 -DA:369,2 -FN:369,ReadCbor.String32 -FNDA:2,ReadCbor.String32 -DA:370,2 -DA:379,2 -FN:379,ReadCbor.String1 -FNDA:2,ReadCbor.String1 -DA:380,2 -DA:382,2 -DA:383,2 -DA:384,2 -DA:385,2 -DA:387,2 -BRDA:387,24,0,1 -BRDA:387,24,1,1 -DA:394,2 -FN:394,ReadCbor.skipString -FNDA:2,ReadCbor.skipString -DA:395,2 -DA:396,2 -DA:397,1 -DA:404,2 -FN:404,ReadCbor.isBytes -FNDA:2,ReadCbor.isBytes -DA:406,2 -DA:415,3 -FN:415,ReadCbor.Bytes -FNDA:3,ReadCbor.Bytes -DA:416,3 -DA:417,3 -DA:419,3 -DA:421,3 -DA:422,3 -DA:423,3 -DA:424,3 -DA:436,3 -FN:436,ReadCbor.Bytes32 -FNDA:3,ReadCbor.Bytes32 -DA:437,3 -DA:438,2 -DA:439,2 -BRDA:439,25,0,1 -BRDA:439,25,1,1 -DA:442,1 -DA:443,1 -DA:444,1 -DA:448,2 -FN:448,ReadCbor.Bytes32 -FNDA:2,ReadCbor.Bytes32 -DA:449,2 -DA:456,2 -FN:456,ReadCbor.skipBytes -FNDA:2,ReadCbor.skipBytes -DA:457,2 -DA:458,2 -DA:459,1 -DA:466,15 -FN:466,ReadCbor.isTag -FNDA:15,ReadCbor.isTag -DA:468,15 -DA:477,770 -FN:477,ReadCbor.isTag -FNDA:770,ReadCbor.isTag -DA:478,770 -DA:480,770 -DA:482,770 -BRDA:482,26,0,- -DA:483,770 -DA:484,770 -DA:485,770 -BRDA:485,27,0,- -DA:487,768 -DA:488,768 -DA:489,512 -DA:490,256 -DA:491,0 -DA:494,770 -DA:504,7 -FN:504,ReadCbor.Tag -FNDA:7,ReadCbor.Tag -DA:505,7 -DA:514,530 -FN:514,ReadCbor.Tag -FNDA:530,ReadCbor.Tag -DA:515,530 -DA:516,530 -BRDA:516,28,0,1 -BRDA:516,28,1,529 -DA:517,529 -DA:524,2 -FN:524,ReadCbor.isUInt -FNDA:2,ReadCbor.isUInt -DA:526,2 -DA:535,1 -FN:535,ReadCbor.UInt -FNDA:1,ReadCbor.UInt -DA:536,1 -DA:544,24 -FN:544,ReadCbor.UInt8 -FNDA:24,ReadCbor.UInt8 -DA:545,24 -DA:553,2 -FN:553,ReadCbor.UInt16 -FNDA:2,ReadCbor.UInt16 -DA:554,2 -DA:555,2 -DA:556,1 -DA:564,1 -FN:564,ReadCbor.UInt32 -FNDA:1,ReadCbor.UInt32 -DA:565,1 -DA:566,1 -DA:567,1 -DA:575,1 -FN:575,ReadCbor.UInt64 -FNDA:1,ReadCbor.UInt64 -DA:576,1 -DA:583,2 -FN:583,ReadCbor.isNInt -FNDA:2,ReadCbor.isNInt -DA:585,2 -DA:594,1 -FN:594,ReadCbor.NInt -FNDA:1,ReadCbor.NInt -DA:595,1 -DA:596,1 -DA:597,1 -DA:605,7 -FN:605,ReadCbor.NInt8 -FNDA:7,ReadCbor.NInt8 -DA:606,7 -DA:607,7 -DA:608,5 -DA:616,3 -FN:616,ReadCbor.NInt16 -FNDA:3,ReadCbor.NInt16 -DA:617,3 -DA:618,3 -DA:619,1 -DA:627,1 -FN:627,ReadCbor.NInt32 -FNDA:1,ReadCbor.NInt32 -DA:628,1 -DA:629,1 -DA:630,1 -DA:638,1 -FN:638,ReadCbor.NInt64 -FNDA:1,ReadCbor.NInt64 -DA:639,1 -DA:640,1 -DA:641,1 -DA:648,3 -FN:648,ReadCbor.isInt -FNDA:3,ReadCbor.isInt -DA:650,3 -DA:651,3 -DA:660,16 -FN:660,ReadCbor.Int -FNDA:16,ReadCbor.Int -DA:661,16 -DA:662,16 -DA:663,16 -DA:664,16 -BRDA:664,29,0,8 -BRDA:664,29,1,1 -DA:665,8 -DA:666,8 -BRDA:666,30,0,7 -BRDA:666,30,1,1 -DA:667,7 -DA:669,1 -FNF:49 -FNH:49 -LF:229 -LH:228 -BRF:57 -BRH:55 -end_of_record -TN: -SF:src/tags/ReadBignum.sol -DA:12,263 -FN:12,ReadBignum.UInt256 -FNDA:263,ReadBignum.UInt256 -DA:13,263 -DA:14,263 -DA:15,263 -DA:16,263 -BRDA:16,0,0,1 -BRDA:16,0,1,262 -DA:19,262 -DA:26,262 -DA:30,265 -FN:30,ReadBignum.NInt256 -FNDA:265,ReadBignum.NInt256 -DA:31,265 -DA:32,265 -DA:33,265 -DA:34,265 -BRDA:34,1,0,1 -BRDA:34,1,1,264 -DA:36,264 -DA:38,264 -DA:45,264 -DA:48,264 -BRDA:48,2,0,2 -BRDA:48,2,1,262 -DA:49,262 -DA:52,5 -FN:52,ReadBignum.Int256 -FNDA:5,ReadBignum.Int256 -DA:53,5 -DA:54,5 -BRDA:54,3,0,2 -BRDA:54,3,1,1 -DA:55,2 -DA:56,2 -DA:57,2 -BRDA:57,4,0,1 -BRDA:57,4,1,1 -DA:58,1 -DA:59,3 -BRDA:59,5,0,2 -BRDA:59,5,1,1 -DA:60,2 -DA:62,1 -DA:66,13 -FN:66,ReadBignum.Integer -FNDA:13,ReadBignum.Integer -DA:67,13 -FNF:4 -FNH:4 -LF:29 -LH:29 -BRF:12 -BRH:12 -end_of_record -TN: -SF:src/tags/ReadCidSha256.sol -DA:66,512 -FN:66,ReadCidSha256.Cid -FNDA:512,ReadCidSha256.Cid -DA:67,512 -DA:70,513 -FN:70,ReadCidSha256.Cid -FNDA:513,ReadCidSha256.Cid -DA:71,513 -DA:72,513 -DA:75,513 -DA:81,513 -DA:82,513 -DA:83,513 -DA:86,513 -BRDA:86,0,0,1 -BRDA:86,0,1,512 -DA:87,512 -BRDA:87,1,0,2 -BRDA:87,1,1,510 -DA:97,258 -FN:97,ReadCidSha256.NullableCid -FNDA:258,ReadCidSha256.NullableCid -DA:98,258 -FNF:3 -FNH:3 -LF:13 -LH:13 -BRF:4 -BRH:4 -end_of_record diff --git a/test-via-ir.lcov.info b/test-via-ir.lcov.info deleted file mode 100644 index 51f5fac..0000000 --- a/test-via-ir.lcov.info +++ /dev/null @@ -1,483 +0,0 @@ -TN: -SF:src/ReadCbor.sol -DA:33,818 -FN:33,ReadCbor.parseArg -FNDA:818,ReadCbor.parseArg -DA:34,818 -BRDA:34,0,0,541 -BRDA:34,0,1,256 -DA:35,541 -DA:36,277 -BRDA:36,1,0,3 -BRDA:36,1,1,256 -DA:37,3 -DA:38,3 -BRDA:38,2,0,1 -BRDA:38,2,1,2 -DA:39,274 -BRDA:39,3,0,7 -BRDA:39,3,1,256 -DA:40,7 -DA:41,267 -BRDA:41,4,0,4 -BRDA:41,4,1,256 -DA:42,4 -DA:43,263 -BRDA:43,5,0,7 -BRDA:43,5,1,256 -DA:44,7 -DA:46,256 -DA:50,827 -FN:50,ReadCbor.u8 -FNDA:827,ReadCbor.u8 -DA:53,827 -DA:54,827 -DA:58,7 -FN:58,ReadCbor.u16 -FNDA:7,ReadCbor.u16 -DA:61,7 -DA:62,7 -DA:66,4 -FN:66,ReadCbor.u32 -FNDA:4,ReadCbor.u32 -DA:69,4 -DA:70,4 -DA:74,7 -FN:74,ReadCbor.u64 -FNDA:7,ReadCbor.u64 -DA:77,7 -DA:78,7 -DA:88,274 -FN:88,ReadCbor.header -FNDA:274,ReadCbor.header -DA:89,274 -DA:90,274 -DA:91,274 -DA:92,274 -DA:93,274 -DA:103,540 -FN:103,ReadCbor.header -FNDA:540,ReadCbor.header -DA:104,540 -DA:105,540 -DA:106,540 -BRDA:106,6,0,2 -BRDA:106,6,1,538 -DA:107,538 -DA:118,10 -FN:118,ReadCbor.header -FNDA:10,ReadCbor.header -DA:123,10 -DA:124,10 -DA:125,10 -DA:126,10 -BRDA:126,7,0,2 -BRDA:126,7,1,8 -DA:127,8 -DA:128,8 -BRDA:128,8,0,2 -BRDA:128,8,1,6 -DA:129,6 -DA:139,575 -FN:139,ReadCbor.header8 -FNDA:575,ReadCbor.header8 -DA:140,575 -DA:143,575 -DA:144,575 -DA:145,575 -DA:146,575 -DA:149,575 -BRDA:149,9,0,1 -BRDA:149,9,1,574 -DA:151,574 -BRDA:151,10,0,531 -DA:152,531 -BRDA:152,11,0,2 -BRDA:152,11,1,529 -DA:154,529 -DA:155,529 -DA:157,529 -BRDA:157,12,0,2 -BRDA:157,12,1,527 -DA:160,570 -DA:170,40 -FN:170,ReadCbor.header32 -FNDA:40,ReadCbor.header32 -DA:171,40 -DA:174,40 -DA:175,40 -DA:176,40 -DA:177,40 -DA:180,40 -BRDA:180,13,0,2 -BRDA:180,13,1,38 -DA:182,38 -BRDA:182,14,0,2 -BRDA:182,14,1,1 -DA:184,2 -DA:185,2 -DA:187,2 -BRDA:187,15,0,1 -BRDA:187,15,1,1 -DA:188,36 -BRDA:188,16,0,3 -DA:189,3 -BRDA:189,17,0,1 -BRDA:189,17,1,2 -DA:190,2 -BRDA:190,18,0,1 -BRDA:190,18,1,1 -DA:192,1 -DA:193,1 -DA:195,1 -BRDA:195,19,0,1 -DA:197,1 -DA:198,1 -DA:203,36 -DA:210,262 -FN:210,ReadCbor.isNull -FNDA:262,ReadCbor.isNull -DA:212,262 -DA:221,2 -FN:221,ReadCbor.Null -FNDA:2,ReadCbor.Null -DA:222,2 -BRDA:222,20,0,1 -BRDA:222,20,1,1 -DA:223,1 -DA:230,4 -FN:230,ReadCbor.isUndefined -FNDA:4,ReadCbor.isUndefined -DA:232,4 -DA:241,2 -FN:241,ReadCbor.Undefined -FNDA:2,ReadCbor.Undefined -DA:242,2 -BRDA:242,21,0,1 -BRDA:242,21,1,1 -DA:243,1 -DA:250,3 -FN:250,ReadCbor.isBool -FNDA:3,ReadCbor.isBool -DA:252,3 -DA:253,3 -DA:267,3 -FN:267,ReadCbor.Bool -FNDA:3,ReadCbor.Bool -DA:268,3 -DA:270,3 -DA:271,3 -DA:272,3 -DA:273,3 -DA:275,3 -BRDA:275,22,0,1 -BRDA:275,22,1,2 -DA:282,2 -FN:282,ReadCbor.isArray -FNDA:2,ReadCbor.isArray -DA:284,2 -DA:293,13 -FN:293,ReadCbor.Array -FNDA:13,ReadCbor.Array -DA:296,13 -DA:303,2 -FN:303,ReadCbor.isMap -FNDA:2,ReadCbor.isMap -DA:305,2 -DA:314,9 -FN:314,ReadCbor.Map -FNDA:9,ReadCbor.Map -DA:318,9 -DA:325,2 -FN:325,ReadCbor.isString -FNDA:2,ReadCbor.isString -DA:327,2 -DA:336,7 -FN:336,ReadCbor.String -FNDA:7,ReadCbor.String -DA:337,7 -DA:338,7 -DA:340,7 -DA:342,7 -DA:343,7 -DA:344,7 -DA:345,7 -DA:357,14 -FN:357,ReadCbor.String32 -FNDA:14,ReadCbor.String32 -DA:358,14 -DA:359,13 -DA:360,13 -BRDA:360,23,0,1 -BRDA:360,23,1,12 -DA:363,12 -DA:364,12 -DA:365,12 -DA:369,2 -FN:369,ReadCbor.String32 -FNDA:2,ReadCbor.String32 -DA:370,2 -DA:379,2 -FN:379,ReadCbor.String1 -FNDA:2,ReadCbor.String1 -DA:380,2 -DA:382,2 -DA:383,2 -DA:384,2 -DA:385,2 -DA:387,2 -BRDA:387,24,0,1 -BRDA:387,24,1,1 -DA:394,2 -FN:394,ReadCbor.skipString -FNDA:2,ReadCbor.skipString -DA:395,2 -DA:396,2 -DA:397,1 -DA:404,2 -FN:404,ReadCbor.isBytes -FNDA:2,ReadCbor.isBytes -DA:406,2 -DA:415,3 -FN:415,ReadCbor.Bytes -FNDA:3,ReadCbor.Bytes -DA:416,3 -DA:417,3 -DA:419,3 -DA:421,3 -DA:422,3 -DA:423,3 -DA:424,3 -DA:436,3 -FN:436,ReadCbor.Bytes32 -FNDA:3,ReadCbor.Bytes32 -DA:437,3 -DA:438,2 -DA:439,2 -BRDA:439,25,0,1 -BRDA:439,25,1,1 -DA:442,1 -DA:443,1 -DA:444,1 -DA:448,2 -FN:448,ReadCbor.Bytes32 -FNDA:2,ReadCbor.Bytes32 -DA:449,2 -DA:456,2 -FN:456,ReadCbor.skipBytes -FNDA:2,ReadCbor.skipBytes -DA:457,2 -DA:458,2 -DA:459,1 -DA:466,15 -FN:466,ReadCbor.isTag -FNDA:15,ReadCbor.isTag -DA:468,15 -DA:477,770 -FN:477,ReadCbor.isTag -FNDA:770,ReadCbor.isTag -DA:478,770 -DA:480,770 -DA:482,770 -BRDA:482,26,0,- -DA:483,770 -DA:484,770 -DA:485,770 -BRDA:485,27,0,- -DA:487,768 -DA:488,768 -DA:489,512 -DA:490,256 -DA:491,0 -DA:494,770 -DA:504,7 -FN:504,ReadCbor.Tag -FNDA:7,ReadCbor.Tag -DA:505,7 -DA:514,530 -FN:514,ReadCbor.Tag -FNDA:530,ReadCbor.Tag -DA:515,530 -DA:516,530 -BRDA:516,28,0,1 -BRDA:516,28,1,529 -DA:517,529 -DA:524,2 -FN:524,ReadCbor.isUInt -FNDA:2,ReadCbor.isUInt -DA:526,2 -DA:535,1 -FN:535,ReadCbor.UInt -FNDA:1,ReadCbor.UInt -DA:536,1 -DA:544,24 -FN:544,ReadCbor.UInt8 -FNDA:24,ReadCbor.UInt8 -DA:545,24 -DA:553,2 -FN:553,ReadCbor.UInt16 -FNDA:2,ReadCbor.UInt16 -DA:554,2 -DA:555,2 -DA:556,1 -DA:564,1 -FN:564,ReadCbor.UInt32 -FNDA:1,ReadCbor.UInt32 -DA:565,1 -DA:566,1 -DA:567,1 -DA:575,1 -FN:575,ReadCbor.UInt64 -FNDA:1,ReadCbor.UInt64 -DA:576,1 -DA:583,2 -FN:583,ReadCbor.isNInt -FNDA:2,ReadCbor.isNInt -DA:585,2 -DA:594,1 -FN:594,ReadCbor.NInt -FNDA:1,ReadCbor.NInt -DA:595,1 -DA:596,1 -DA:597,1 -DA:605,7 -FN:605,ReadCbor.NInt8 -FNDA:7,ReadCbor.NInt8 -DA:606,7 -DA:607,7 -DA:608,5 -DA:616,3 -FN:616,ReadCbor.NInt16 -FNDA:3,ReadCbor.NInt16 -DA:617,3 -DA:618,3 -DA:619,1 -DA:627,1 -FN:627,ReadCbor.NInt32 -FNDA:1,ReadCbor.NInt32 -DA:628,1 -DA:629,1 -DA:630,1 -DA:638,1 -FN:638,ReadCbor.NInt64 -FNDA:1,ReadCbor.NInt64 -DA:639,1 -DA:640,1 -DA:641,1 -DA:648,3 -FN:648,ReadCbor.isInt -FNDA:3,ReadCbor.isInt -DA:650,3 -DA:651,3 -DA:660,16 -FN:660,ReadCbor.Int -FNDA:16,ReadCbor.Int -DA:661,16 -DA:662,16 -DA:663,16 -DA:664,16 -BRDA:664,29,0,8 -BRDA:664,29,1,1 -DA:665,8 -DA:666,8 -BRDA:666,30,0,7 -BRDA:666,30,1,1 -DA:667,7 -DA:669,1 -FNF:49 -FNH:49 -LF:229 -LH:228 -BRF:57 -BRH:55 -end_of_record -TN: -SF:src/tags/ReadBignum.sol -DA:12,263 -FN:12,ReadBignum.UInt256 -FNDA:263,ReadBignum.UInt256 -DA:13,263 -DA:14,263 -DA:15,263 -DA:16,263 -BRDA:16,0,0,1 -BRDA:16,0,1,262 -DA:19,262 -DA:26,262 -DA:30,265 -FN:30,ReadBignum.NInt256 -FNDA:265,ReadBignum.NInt256 -DA:31,265 -DA:32,265 -DA:33,265 -DA:34,265 -BRDA:34,1,0,1 -BRDA:34,1,1,264 -DA:36,264 -DA:38,264 -DA:45,264 -DA:48,264 -BRDA:48,2,0,2 -BRDA:48,2,1,262 -DA:49,262 -DA:52,5 -FN:52,ReadBignum.Int256 -FNDA:5,ReadBignum.Int256 -DA:53,5 -DA:54,5 -BRDA:54,3,0,2 -BRDA:54,3,1,1 -DA:55,2 -DA:56,2 -DA:57,2 -BRDA:57,4,0,1 -BRDA:57,4,1,1 -DA:58,1 -DA:59,3 -BRDA:59,5,0,2 -BRDA:59,5,1,1 -DA:60,2 -DA:62,1 -DA:66,13 -FN:66,ReadBignum.Integer -FNDA:13,ReadBignum.Integer -DA:67,13 -FNF:4 -FNH:4 -LF:29 -LH:29 -BRF:12 -BRH:12 -end_of_record -TN: -SF:src/tags/ReadCidSha256.sol -DA:66,512 -FN:66,ReadCidSha256.Cid -FNDA:512,ReadCidSha256.Cid -DA:67,512 -DA:70,513 -FN:70,ReadCidSha256.Cid -FNDA:513,ReadCidSha256.Cid -DA:71,513 -DA:72,513 -DA:75,513 -DA:81,513 -DA:82,513 -DA:83,513 -DA:86,513 -BRDA:86,0,0,1 -BRDA:86,0,1,512 -DA:87,512 -BRDA:87,1,0,2 -BRDA:87,1,1,510 -DA:97,258 -FN:97,ReadCidSha256.NullableCid -FNDA:258,ReadCidSha256.NullableCid -DA:98,258 -FNF:3 -FNH:3 -LF:13 -LH:13 -BRF:4 -BRH:4 -end_of_record diff --git a/test/Array.t.sol b/test/Array.t.sol index a4739e0..9ba325e 100644 --- a/test/Array.t.sol +++ b/test/Array.t.sol @@ -21,7 +21,8 @@ contract ArrayTest is Test { function test_Array_large() public { // Array with 23 elements (just below the threshold for extended header) - bytes memory cbor = hex"97010101010101010101010101010101010101010101010101"; + bytes + memory cbor = hex"97010101010101010101010101010101010101010101010101"; uint i; uint32 len; diff --git a/test/Bytes.t.sol b/test/Bytes.t.sol index b8f04e3..4e6b617 100644 --- a/test/Bytes.t.sol +++ b/test/Bytes.t.sol @@ -22,7 +22,8 @@ contract BytesTest is Test { } function test_Bytes_short() public { - bytes memory cbor = hex"57000102030405060708090a0b0c0d0e0f1011121314151617"; + bytes + memory cbor = hex"57000102030405060708090a0b0c0d0e0f1011121314151617"; uint i; bytes memory value; @@ -34,7 +35,8 @@ contract BytesTest is Test { } function test_Bytes_extended() public { - bytes memory cbor = hex"5818000102030405060708090a0b0c0d0e0f101112131415161718"; + bytes + memory cbor = hex"5818000102030405060708090a0b0c0d0e0f101112131415161718"; uint i; bytes memory value; @@ -60,23 +62,31 @@ contract BytesTest is Test { assert(value == bytes32(hex"00")); } - function testFail_Bytes32_too_long() public pure { + function testRevert_Bytes32_too_long() public { // 33 bytes of data - bytes memory cbor = hex"5821000102030405060708090a0b0c0d0e0f101112131415161718192021"; + bytes + memory cbor = hex"5821000102030405060708090a0b0c0d0e0f101112131415161718192021"; uint i; bytes32 value; uint8 len; + vm.expectRevert(); (i, value, len) = cbor.Bytes32(0); assert(i == cbor.length); assert(len == 33); - assert(value == bytes32(hex"000102030405060708090a0b0c0d0e0f101112131415161718192021")); + assert( + value == + bytes32( + hex"000102030405060708090a0b0c0d0e0f101112131415161718192021" + ) + ); } - function testFail_Bytes32_parameter() public pure { + function testRevert_Bytes32_parameter() public { bytes memory cbor = hex"4100"; uint i; bytes32 value; uint8 len; + vm.expectRevert(); (i, value, len) = cbor.Bytes32(0, 33); } @@ -90,8 +100,9 @@ contract BytesTest is Test { assert(i == cbor.length); } - function testFail_skipBytes() public pure { + function testRevert_skipBytes() public { bytes memory cbor = hex"30"; + vm.expectRevert(); uint i = cbor.skipBytes(0); assert(i == cbor.length); } diff --git a/test/Hardhat.ts b/test/Hardhat.ts new file mode 100644 index 0000000..938b169 --- /dev/null +++ b/test/Hardhat.ts @@ -0,0 +1,104 @@ +import { loadFixture } from "@nomicfoundation/hardhat-network-helpers"; +import { expect } from "chai"; +import hre from "hardhat"; +import { getAddress, parseGwei } from "viem"; + +describe("TestFixture", function () { + // We define a fixture to reuse the same setup in every test. + // We use loadFixture to run this setup once, snapshot that state, + // and reset Hardhat Network to that snapshot in every test. + async function deployReadThisFixture() { + // Contracts are deployed using the first signer/account by default + const [owner, otherAccount] = await hre.viem.getWalletClients(); + + const reader = await hre.viem.deployContract("TestFixture", [], {}); + + const publicClient = await hre.viem.getPublicClient(); + + return { + reader, + owner, + otherAccount, + publicClient, + }; + } + + describe("Deployment", function () { + it("Should set the right owner", async function () { + const { reader, owner } = await loadFixture(deployReadThisFixture); + + expect(await reader.read.owner()).to.equal( + getAddress(owner.account.address), + ); + }); + }); + + describe("Parsing", function () { + describe("Validations", function () { + it("Should revert with the right error if called from another account", async function () { + const { reader, otherAccount } = await loadFixture( + deployReadThisFixture, + ); + + // We retrieve the contract with a different account to send a transaction + const readerAsOtherAccount = await hre.viem.getContractAt( + "TestFixture", + reader.address, + { client: { wallet: otherAccount } }, + ); + await expect( + readerAsOtherAccount.write.readThis([`0x421312`]), + ).to.be.rejectedWith("You aren't the owner"); + }); + + it("Should revert if called with truncated data", async function () { + const { reader } = await loadFixture(deployReadThisFixture); + await expect(reader.write.readThis([`0x4213`])).to.be.rejectedWith( + "TestFixture Must read within bounds of cbor", + ); + }); + + it("Should revert if called with extra data", async function () { + const { reader } = await loadFixture(deployReadThisFixture); + await expect(reader.write.readThis([`0x42131200`])).to.be.rejectedWith( + "TestFixture Must read entire cbor", + ); + }); + + it("Should revert if called with unexpected data", async function () { + const { reader } = await loadFixture(deployReadThisFixture); + await expect( + reader.write.readThis([ + `0x58211312000000000000000000000000000000000000000000000000000000000032`, + ]), + ).to.be.rejectedWith(""); // no reason string + }); + + it("Should parse bytes", async function () { + const { reader } = await loadFixture(deployReadThisFixture); + await expect(reader.write.readThis([`0x421312`])).to.be.fulfilled; + }); + }); + + describe("Events", function () { + it("Should emit an event on parsing bytes", async function () { + const { reader, publicClient } = await loadFixture( + deployReadThisFixture, + ); + + const hash = await reader.write.readThis([`0x421312`]); + await publicClient.waitForTransactionReceipt({ hash }); + + // get the withdrawal events in the latest block + const withdrawalEvents = await reader.getEvents.ParsedBytes32(); + expect(withdrawalEvents).to.have.lengthOf(1); + const { i, item, len } = withdrawalEvents[0].args; + expect(item).to.equal( + `0x1312000000000000000000000000000000000000000000000000000000000000`, + ); + expect(i).to.equal(3n); + expect(len).to.equal(2); + }); + }); + }); +}); diff --git a/test/Header.t.sol b/test/Header.t.sol index adff8f0..1bf1276 100644 --- a/test/Header.t.sol +++ b/test/Header.t.sol @@ -15,60 +15,83 @@ contract HeaderTest is Test { assert(major == MajorText); } - function testFail_parseArg_unsupportedMinor(uint8 minor) public pure { + function testRevert_parseArg_unsupportedMinor(uint8 minor) public { vm.assume(minor < 32); vm.assume(minor > MinorExtendU64); - bytes memory cbor = abi.encodePacked((uint8(MajorUnsigned) << shiftMajor | minor)); + bytes memory cbor = abi.encodePacked( + ((uint8(MajorUnsigned) << shiftMajor) | minor) + ); + vm.expectRevert(); (uint i, uint64 arg, uint8 major) = cbor.header(0); assert(i == 1); assert(arg > 0); assert(major == MajorUnsigned); } - function testFail_header_expectMajor() public pure { + function testRevert_header_expectMajor() public { bytes memory cbor = hex"00"; + vm.expectRevert(); cbor.header(0, 1); } - function testFail_header_expectMinor_failmajor() public pure { + function testRevert_header_expectMinor_failmajor() public { bytes memory cbor = hex"00"; + vm.expectRevert(); cbor.header(0, 1, 0); } - function testFail_header_badext() public pure { - bytes memory cbor = abi.encodePacked((uint8(MajorUnsigned) << shiftMajor | MinorExtendU8), uint8(0x00)); + function testRevert_header_badext() public { + bytes memory cbor = abi.encodePacked( + ((uint8(MajorUnsigned) << shiftMajor) | MinorExtendU8), + uint8(0x00) + ); + vm.expectRevert(); cbor.header(0); } - function testFail_header8_expectMajor() public pure { + function testRevert_header8_expectMajor() public { bytes memory cbor = hex"00"; + vm.expectRevert(); cbor.header8(0, 1); } - function testFail_header32_badu8() public pure { - bytes memory cbor = abi.encodePacked((uint8(MajorUnsigned) << shiftMajor | MinorExtendU8), uint8(0x00)); + function testRevert_header32_badu8() public { + bytes memory cbor = abi.encodePacked( + ((uint8(MajorUnsigned) << shiftMajor) | MinorExtendU8), + uint8(0x00) + ); + vm.expectRevert(); (uint i, uint32 arg) = cbor.header32(0, MajorUnsigned); assert(i == cbor.length); assert(arg == 0x00); } function test_header32_u16() public pure { - bytes memory cbor = abi.encodePacked((uint8(MajorUnsigned) << shiftMajor | MinorExtendU16), uint16(0xFFFF)); + bytes memory cbor = abi.encodePacked( + ((uint8(MajorUnsigned) << shiftMajor) | MinorExtendU16), + uint16(0xFFFF) + ); (uint i, uint32 arg) = cbor.header32(0, MajorUnsigned); assert(i == cbor.length); assert(arg == 0xFFFF); } function test_header32_u32() public pure { - bytes memory cbor = abi.encodePacked((uint8(MajorUnsigned) << shiftMajor | MinorExtendU32), uint32(0xFFFF1234)); + bytes memory cbor = abi.encodePacked( + ((uint8(MajorUnsigned) << shiftMajor) | MinorExtendU32), + uint32(0xFFFF1234) + ); (uint i, uint32 arg) = cbor.header32(0, MajorUnsigned); assert(i == cbor.length); assert(arg == 0xFFFF1234); } - function testFail_header32_u64() public pure { - bytes memory cbor = - abi.encodePacked((uint8(MajorUnsigned) << shiftMajor | MinorExtendU64), uint64(0xFFFF12345678)); + function testRevert_header32_u64() public { + bytes memory cbor = abi.encodePacked( + ((uint8(MajorUnsigned) << shiftMajor) | MinorExtendU64), + uint64(0xFFFF12345678) + ); + vm.expectRevert(); (uint i, uint32 arg) = cbor.header32(0, MajorUnsigned); assert(i == cbor.length); assert(arg == 0xFFFF12345678); diff --git a/test/Int.t.sol b/test/Int.t.sol index ca7a675..08e7224 100644 --- a/test/Int.t.sol +++ b/test/Int.t.sol @@ -72,13 +72,12 @@ contract IntTest is Test { assert(value == -1 - 0xFFFF_FFFF_FFFF_FFFF); } - function testFail_Int_not() public { + function testRevert_Int_not() public { bytes memory cbor = hex"f7"; uint i; int value; - vm.startSnapshotGas("Int_not"); + vm.expectRevert(); (i, value) = cbor.Int(0); - vm.stopSnapshotGas(); } } diff --git a/test/Map.t.sol b/test/Map.t.sol index b9fcce9..58ad2e4 100644 --- a/test/Map.t.sol +++ b/test/Map.t.sol @@ -87,23 +87,23 @@ contract MapTest is Test { (i, outerLen) = cbor.Map(0); assert(outerLen == 2); - (i, key,) = cbor.String32(i, 1); + (i, key, ) = cbor.String32(i, 1); assert(key == "a"); (i, innerLen) = cbor.Map(i); assert(innerLen == 2); - (i, key,) = cbor.String32(i, 1); + (i, key, ) = cbor.String32(i, 1); assert(key == "b"); (i, value) = cbor.UInt8(i); assert(value == 1); - (i, key,) = cbor.String32(i, 1); + (i, key, ) = cbor.String32(i, 1); assert(key == "c"); (i, value) = cbor.UInt8(i); assert(value == 2); - (i, key,) = cbor.String32(i, 1); + (i, key, ) = cbor.String32(i, 1); assert(key == "d"); (i, value) = cbor.UInt8(i); assert(value == 3); @@ -125,19 +125,19 @@ contract MapTest is Test { (i, len) = cbor.Map(0); assert(len == 1); - (i, key,) = cbor.String32(i, 1); + (i, key, ) = cbor.String32(i, 1); assert(bytes1(key) == "a"); (i, len) = cbor.Map(i); assert(len == 1); - (i, key,) = cbor.String32(i, 1); + (i, key, ) = cbor.String32(i, 1); assert(bytes1(key) == "b"); (i, len) = cbor.Map(i); assert(len == 1); - (i, key,) = cbor.String32(i, 1); + (i, key, ) = cbor.String32(i, 1); assert(bytes1(key) == "c"); (i, arrayLen) = cbor.Array(i); diff --git a/test/NInt.t.sol b/test/NInt.t.sol index 1842cab..63e159c 100644 --- a/test/NInt.t.sol +++ b/test/NInt.t.sol @@ -31,10 +31,11 @@ contract NIntTest is Test { assert(value == -25); // -1 - 24 } - function testFail_NInt8_invalid() public pure { + function testRevert_NInt8_invalid() public { bytes memory cbor = hex"3817"; // extended header too small uint i; int16 value; + vm.expectRevert(); (i, value) = cbor.NInt8(i); assert(value == -24); } @@ -50,10 +51,11 @@ contract NIntTest is Test { assert(value == -256); // -1 - 255 } - function testFail_NInt8_too_long() public pure { + function testRevert_NInt8_too_long() public { bytes memory cbor = hex"39ffff"; // uint16 value uint i; int16 value; + vm.expectRevert(); (i, value) = cbor.NInt8(0); // Should fail as value exceeds int8 } @@ -112,13 +114,15 @@ contract NIntTest is Test { assert(value == -2); } - function testFail_NInt16_too_long() public pure { + function testRevert_NInt16_too_long() public { bytes memory cbor = hex"3a00010000"; // uint32 value + vm.expectRevert(); cbor.NInt16(0); // Should fail as value exceeds int16 } - function testFail_NInt16_invalid() public pure { + function testRevert_NInt16_invalid() public { bytes memory cbor = hex"f4"; + vm.expectRevert(); cbor.NInt16(0); } diff --git a/test/Peek.t.sol b/test/Peek.t.sol index 7158155..d51d5cb 100644 --- a/test/Peek.t.sol +++ b/test/Peek.t.sol @@ -170,17 +170,26 @@ contract PeekTest is Test { } function test_fuzz_isTag_expect_rand_64(uint64 rand64) public pure { - bytes memory cbor = bytes.concat(bytes1(MajorTag << shiftMajor | MinorExtendU64), bytes8(rand64)); + bytes memory cbor = bytes.concat( + bytes1((MajorTag << shiftMajor) | MinorExtendU64), + bytes8(rand64) + ); assert(cbor.isTag(0, uint64(rand64))); } function test_fuzz_isTag_expect_rand_32(uint32 rand32) public pure { - bytes memory cbor = bytes.concat(bytes1(MajorTag << shiftMajor | MinorExtendU32), bytes4(rand32)); + bytes memory cbor = bytes.concat( + bytes1((MajorTag << shiftMajor) | MinorExtendU32), + bytes4(rand32) + ); assert(cbor.isTag(0, uint32(rand32))); } function test_fuzz_isTag_expect_rand_16(uint16 rand16) public pure { - bytes memory cbor = bytes.concat(bytes1(MajorTag << shiftMajor | MinorExtendU16), bytes2(rand16)); + bytes memory cbor = bytes.concat( + bytes1((MajorTag << shiftMajor) | MinorExtendU16), + bytes2(rand16) + ); assert(cbor.isTag(0, uint16(rand16))); } diff --git a/test/Simple.t.sol b/test/Simple.t.sol index ea44c2c..988c5f8 100644 --- a/test/Simple.t.sol +++ b/test/Simple.t.sol @@ -26,10 +26,11 @@ contract SimpleTest is Test { assert(i == cbor.length); } - function testFail_Boolean_invalid() public pure { + function testRevert_Boolean_invalid() public { bytes memory cbor = hex"f6"; uint i; bool value; + vm.expectRevert(); (i, value) = cbor.Bool(i); } @@ -42,9 +43,10 @@ contract SimpleTest is Test { vm.stopSnapshotGas(); } - function testFail_skipNull() public pure { + function testRevert_skipNull() public { bytes memory cbor = hex"f7"; uint i; + vm.expectRevert(); (i) = cbor.Null(i); } @@ -57,9 +59,10 @@ contract SimpleTest is Test { vm.stopSnapshotGas(); } - function testFail_skipUndefined() public pure { + function testRevert_skipUndefined() public { bytes memory cbor = hex"f6"; uint i; + vm.expectRevert(); (i) = cbor.Undefined(i); } } diff --git a/test/String.t.sol b/test/String.t.sol index 046004f..1d0278e 100644 --- a/test/String.t.sol +++ b/test/String.t.sol @@ -22,7 +22,8 @@ contract StringTest is Test { function test_String_short() public { // String with 23 bytes (just below the threshold for an extended header) - bytes memory cbor = hex"77414141414141414141414141414141414141414141414141"; + bytes + memory cbor = hex"77414141414141414141414141414141414141414141414141"; uint i; string memory value; @@ -35,7 +36,8 @@ contract StringTest is Test { function test_String_extended() public { // String with 24 bytes (just at the threshold for an extended header) - bytes memory cbor = hex"7741414141414141414141414141414141414141414141414141"; + bytes + memory cbor = hex"7741414141414141414141414141414141414141414141414141"; uint i; string memory value; @@ -62,23 +64,26 @@ contract StringTest is Test { assert(value == "a"); } - function testFail_String32_too_long() public pure { + function testRevert_String32_too_long() public { // 33 characters "thisisquitealongstringisuppose..." - bytes memory cbor = hex"78217468697369737175697465616C6F6E67737472696E6769737570706F73652E2E2E"; + bytes + memory cbor = hex"78217468697369737175697465616C6F6E67737472696E6769737570706F73652E2E2E"; uint i; bytes32 value; uint8 len; + vm.expectRevert(); (i, value, len) = cbor.String32(0); assert(len == 33); // missing the last character assert(value != bytes32("thisisquitealongstringisuppose..")); } - function testFail_String32_parameter() public pure { + function testRevert_String32_parameter() public { bytes memory cbor = hex"6161"; uint i; bytes32 value; uint8 len; + vm.expectRevert(); (i, value, len) = cbor.String32(0, 33); } @@ -92,8 +97,9 @@ contract StringTest is Test { assert(i == cbor.length); } - function testFail_skipString() public pure { + function testRevert_skipString() public { bytes memory cbor = hex"50"; + vm.expectRevert(); uint i = cbor.skipString(0); assert(cbor[i] == cbor[i]); } @@ -111,10 +117,11 @@ contract StringTest is Test { assert(value == bytes1("a")); } - function testFail_String1_empty() public pure { + function testRevert_String1_empty() public { bytes memory cbor = hex"60"; uint i; bytes1 value; + vm.expectRevert(); (i, value) = cbor.String1(0); } } diff --git a/test/Tag.t.sol b/test/Tag.t.sol index 058164f..8211ab8 100644 --- a/test/Tag.t.sol +++ b/test/Tag.t.sol @@ -32,15 +32,17 @@ contract TagTest is Test { assert(i == cbor.length); } - function testFail_Tag_unexpected() public pure { + function testRevert_Tag_unexpected() public { bytes memory cbor = hex"c0"; // Tag(0) uint i; + vm.expectRevert(); cbor.Tag(i, 1); } - function testFail_Tag_invalid() public pure { + function testRevert_Tag_invalid() public { bytes memory cbor = hex"01"; // unsigned int 1 uint i; + vm.expectRevert(); cbor.Tag(i); } } diff --git a/test/UInt.t.sol b/test/UInt.t.sol index 025ab12..de155e6 100644 --- a/test/UInt.t.sol +++ b/test/UInt.t.sol @@ -33,10 +33,11 @@ contract UIntTest is Test { assert(value == 0x18); } - function testFail_UInt8_invalid() public pure { + function testRevert_UInt8_invalid() public { bytes memory cbor = hex"1817"; // extended header too small uint i; uint8 value; + vm.expectRevert(); (i, value) = cbor.UInt8(i); assert(value == 0x17); } @@ -53,10 +54,11 @@ contract UIntTest is Test { assert(value == 0xff); } - function testFail_UInt8_too_long() public pure { + function testRevert_UInt8_too_long() public { bytes memory cbor = hex"19ffff"; // uint16 value uint i; uint8 value; + vm.expectRevert(); (i, value) = cbor.UInt8(0); // Should fail as value exceeds uint8 } @@ -133,10 +135,11 @@ contract UIntTest is Test { assert(value == 0xffff); } - function testFail_UInt16_too_long() public pure { + function testRevert_UInt16_too_long() public { bytes memory cbor = hex"1a00010000"; // uint32 value uint i; uint16 value; + vm.expectRevert(); (i, value) = cbor.UInt16(0); // Should fail as value exceeds uint16 } } diff --git a/test/comparison/CborDecode.sol b/test/comparison/CBORDecoder.sol similarity index 78% rename from test/comparison/CborDecode.sol rename to test/comparison/CBORDecoder.sol index 00d7010..884d55b 100644 --- a/test/comparison/CborDecode.sol +++ b/test/comparison/CBORDecoder.sol @@ -52,7 +52,10 @@ library CBORDecoder { /// @notice check if next value on the cbor encoded data is null /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes - function isNullNext(bytes memory cborData, uint byteIdx) internal pure returns (bool) { + function isNullNext( + bytes memory cborData, + uint byteIdx + ) internal pure returns (bool) { return cborData[byteIdx] == hex"f6"; } @@ -60,7 +63,10 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return a bool decoded from input bytes and the byte index after moving past the value - function readBool(bytes memory cborData, uint byteIdx) internal pure returns (bool, uint) { + function readBool( + bytes memory cborData, + uint byteIdx + ) internal pure returns (bool, uint) { uint8 maj; uint value; @@ -75,7 +81,10 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return length of the fixed array decoded from input bytes and the byte index after moving past the value - function readFixedArray(bytes memory cborData, uint byteIdx) internal pure returns (uint, uint) { + function readFixedArray( + bytes memory cborData, + uint byteIdx + ) internal pure returns (uint, uint) { uint8 maj; uint len; @@ -89,7 +98,10 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return arbitrary length string decoded from input bytes and the byte index after moving past the value - function readString(bytes memory cborData, uint byteIdx) internal pure returns (string memory, uint) { + function readString( + bytes memory cborData, + uint byteIdx + ) internal pure returns (string memory, uint) { uint8 maj; uint len; @@ -111,12 +123,18 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return arbitrary byte string decoded from input bytes and the byte index after moving past the value - function readBytes(bytes memory cborData, uint byteIdx) internal pure returns (bytes memory, uint) { + function readBytes( + bytes memory cborData, + uint byteIdx + ) internal pure returns (bytes memory, uint) { uint8 maj; uint len; (maj, len, byteIdx) = parseCborHeader(cborData, byteIdx); - require(maj == MajTag || maj == MajByteString, "invalid maj (expected MajTag or MajByteString)"); + require( + maj == MajTag || maj == MajByteString, + "invalid maj (expected MajTag or MajByteString)" + ); if (maj == MajTag) { (maj, len, byteIdx) = parseCborHeader(cborData, byteIdx); @@ -138,7 +156,10 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return a bytes32 decoded from input bytes and the byte index after moving past the value - function readBytes32(bytes memory cborData, uint byteIdx) internal pure returns (bytes32, uint) { + function readBytes32( + bytes memory cborData, + uint byteIdx + ) internal pure returns (bytes32, uint) { uint8 maj; uint len; @@ -160,19 +181,31 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an uint256 decoded from input bytes and the byte index after moving past the value - function readUInt256(bytes memory cborData, uint byteIdx) internal pure returns (uint256, uint) { + function readUInt256( + bytes memory cborData, + uint byteIdx + ) internal pure returns (uint256, uint) { uint8 maj; uint256 value; (maj, value, byteIdx) = parseCborHeader(cborData, byteIdx); - require(maj == MajTag || maj == MajUnsignedInt, "invalid maj (expected MajTag or MajUnsignedInt)"); + require( + maj == MajTag || maj == MajUnsignedInt, + "invalid maj (expected MajTag or MajUnsignedInt)" + ); if (maj == MajTag) { - require(value == TagTypeBigNum, "invalid tag (expected TagTypeBigNum)"); + require( + value == TagTypeBigNum, + "invalid tag (expected TagTypeBigNum)" + ); uint len; (maj, len, byteIdx) = parseCborHeader(cborData, byteIdx); - require(maj == MajByteString, "invalid maj (expected MajByteString)"); + require( + maj == MajByteString, + "invalid maj (expected MajByteString)" + ); require(cborData.length >= byteIdx + len, "slicing out of range"); assembly { @@ -189,19 +222,28 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an int256 decoded from input bytes and the byte index after moving past the value - function readInt256(bytes memory cborData, uint byteIdx) internal pure returns (int256, uint) { + function readInt256( + bytes memory cborData, + uint byteIdx + ) internal pure returns (int256, uint) { uint8 maj; uint value; (maj, value, byteIdx) = parseCborHeader(cborData, byteIdx); - require(maj == MajTag || maj == MajSignedInt, "invalid maj (expected MajTag or MajSignedInt)"); + require( + maj == MajTag || maj == MajSignedInt, + "invalid maj (expected MajTag or MajSignedInt)" + ); if (maj == MajTag) { assert(value == TagTypeNegativeBigNum); uint len; (maj, len, byteIdx) = parseCborHeader(cborData, byteIdx); - require(maj == MajByteString, "invalid maj (expected MajByteString)"); + require( + maj == MajByteString, + "invalid maj (expected MajByteString)" + ); require(cborData.length >= byteIdx + len, "slicing out of range"); assembly { @@ -218,7 +260,10 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an uint64 decoded from input bytes and the byte index after moving past the value - function readUInt64(bytes memory cborData, uint byteIdx) internal pure returns (uint64, uint) { + function readUInt64( + bytes memory cborData, + uint byteIdx + ) internal pure returns (uint64, uint) { uint8 maj; uint value; @@ -232,7 +277,10 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an uint32 decoded from input bytes and the byte index after moving past the value - function readUInt32(bytes memory cborData, uint byteIdx) internal pure returns (uint32, uint) { + function readUInt32( + bytes memory cborData, + uint byteIdx + ) internal pure returns (uint32, uint) { uint8 maj; uint value; @@ -246,7 +294,10 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an uint16 decoded from input bytes and the byte index after moving past the value - function readUInt16(bytes memory cborData, uint byteIdx) internal pure returns (uint16, uint) { + function readUInt16( + bytes memory cborData, + uint byteIdx + ) internal pure returns (uint16, uint) { uint8 maj; uint value; @@ -260,7 +311,10 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an uint8 decoded from input bytes and the byte index after moving past the value - function readUInt8(bytes memory cborData, uint byteIdx) internal pure returns (uint8, uint) { + function readUInt8( + bytes memory cborData, + uint byteIdx + ) internal pure returns (uint8, uint) { uint8 maj; uint value; @@ -274,12 +328,18 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an int64 decoded from input bytes and the byte index after moving past the value - function readInt64(bytes memory cborData, uint byteIdx) internal pure returns (int64, uint) { + function readInt64( + bytes memory cborData, + uint byteIdx + ) internal pure returns (int64, uint) { uint8 maj; uint value; (maj, value, byteIdx) = parseCborHeader(cborData, byteIdx); - require(maj == MajSignedInt || maj == MajUnsignedInt, "invalid maj (expected MajSignedInt or MajUnsignedInt)"); + require( + maj == MajSignedInt || maj == MajUnsignedInt, + "invalid maj (expected MajSignedInt or MajUnsignedInt)" + ); return (int64(uint64(value)), byteIdx); } @@ -288,12 +348,18 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an int32 decoded from input bytes and the byte index after moving past the value - function readInt32(bytes memory cborData, uint byteIdx) internal pure returns (int32, uint) { + function readInt32( + bytes memory cborData, + uint byteIdx + ) internal pure returns (int32, uint) { uint8 maj; uint value; (maj, value, byteIdx) = parseCborHeader(cborData, byteIdx); - require(maj == MajSignedInt || maj == MajUnsignedInt, "invalid maj (expected MajSignedInt or MajUnsignedInt)"); + require( + maj == MajSignedInt || maj == MajUnsignedInt, + "invalid maj (expected MajSignedInt or MajUnsignedInt)" + ); return (int32(uint32(value)), byteIdx); } @@ -302,12 +368,18 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an int16 decoded from input bytes and the byte index after moving past the value - function readInt16(bytes memory cborData, uint byteIdx) internal pure returns (int16, uint) { + function readInt16( + bytes memory cborData, + uint byteIdx + ) internal pure returns (int16, uint) { uint8 maj; uint value; (maj, value, byteIdx) = parseCborHeader(cborData, byteIdx); - require(maj == MajSignedInt || maj == MajUnsignedInt, "invalid maj (expected MajSignedInt or MajUnsignedInt)"); + require( + maj == MajSignedInt || maj == MajUnsignedInt, + "invalid maj (expected MajSignedInt or MajUnsignedInt)" + ); return (int16(uint16(value)), byteIdx); } @@ -316,12 +388,18 @@ library CBORDecoder { /// @param cborData cbor encoded bytes to parse from /// @param byteIdx current position to read on the cbor encoded bytes /// @return an int8 decoded from input bytes and the byte index after moving past the value - function readInt8(bytes memory cborData, uint byteIdx) internal pure returns (int8, uint) { + function readInt8( + bytes memory cborData, + uint byteIdx + ) internal pure returns (int8, uint) { uint8 maj; uint value; (maj, value, byteIdx) = parseCborHeader(cborData, byteIdx); - require(maj == MajSignedInt || maj == MajUnsignedInt, "invalid maj (expected MajSignedInt or MajUnsignedInt)"); + require( + maj == MajSignedInt || maj == MajUnsignedInt, + "invalid maj (expected MajSignedInt or MajUnsignedInt)" + ); return (int8(uint8(value)), byteIdx); } @@ -330,7 +408,10 @@ library CBORDecoder { /// @param bs bytes to slice from /// @param start current position to slice from bytes /// @return uint8 sliced from bytes - function sliceUInt8(bytes memory bs, uint start) internal pure returns (uint8) { + function sliceUInt8( + bytes memory bs, + uint start + ) internal pure returns (uint8) { require(bs.length >= start + 1, "slicing out of range"); return uint8(bs[start]); } @@ -339,7 +420,10 @@ library CBORDecoder { /// @param bs bytes to slice from /// @param start current position to slice from bytes /// @return uint16 sliced from bytes - function sliceUInt16(bytes memory bs, uint start) internal pure returns (uint16) { + function sliceUInt16( + bytes memory bs, + uint start + ) internal pure returns (uint16) { require(bs.length >= start + 2, "slicing out of range"); bytes2 x; assembly { @@ -352,7 +436,10 @@ library CBORDecoder { /// @param bs bytes to slice from /// @param start current position to slice from bytes /// @return uint32 sliced from bytes - function sliceUInt32(bytes memory bs, uint start) internal pure returns (uint32) { + function sliceUInt32( + bytes memory bs, + uint start + ) internal pure returns (uint32) { require(bs.length >= start + 4, "slicing out of range"); bytes4 x; assembly { @@ -365,7 +452,10 @@ library CBORDecoder { /// @param bs bytes to slice from /// @param start current position to slice from bytes /// @return uint64 sliced from bytes - function sliceUInt64(bytes memory bs, uint start) internal pure returns (uint64) { + function sliceUInt64( + bytes memory bs, + uint start + ) internal pure returns (uint64) { require(bs.length >= start + 8, "slicing out of range"); bytes8 x; assembly { @@ -378,7 +468,10 @@ library CBORDecoder { /// @param cbor cbor encoded bytes to parse from /// @param byteIndex current position to read on the cbor encoded bytes /// @return major type, extra info and the byte index after moving past header bytes - function parseCborHeader(bytes memory cbor, uint byteIndex) internal pure returns (uint8, uint64, uint) { + function parseCborHeader( + bytes memory cbor, + uint byteIndex + ) internal pure returns (uint8, uint64, uint) { uint8 first = sliceUInt8(cbor, byteIndex); byteIndex += 1; uint8 maj = (first & 0xe0) >> 5; diff --git a/test/comparison/CborDecode_CBORDecoder.t.sol b/test/comparison/ComparisonCBORDecoder.t.sol similarity index 89% rename from test/comparison/CborDecode_CBORDecoder.t.sol rename to test/comparison/ComparisonCBORDecoder.t.sol index cc4ba79..1657d0d 100644 --- a/test/comparison/CborDecode_CBORDecoder.t.sol +++ b/test/comparison/ComparisonCBORDecoder.t.sol @@ -22,7 +22,7 @@ pragma solidity ^0.8.17; import {Test} from "forge-std/Test.sol"; -import "./CborDecode.sol"; +import "./CBORDecoder.sol"; /// @notice This file is meant to serve as a deployable contract to test the cbor decode library /// @author Zondax AG @@ -31,7 +31,8 @@ contract ComparisonTest is Test { function test_decodeFixedArray_CBORDecoder() public pure { // [1,2,3,4,5,6,7,8,9,10,"test", h'01010101', false, null, true] - bytes memory input = hex"8F0102030405060708090A64746573744401010101F4F6F5"; + bytes + memory input = hex"8F0102030405060708090A64746573744401010101F4F6F5"; uint index = 0; uint arrayLen = 0; uint8 num; @@ -71,7 +72,11 @@ contract ComparisonTest is Test { require(num == 10, "num is not 1"); (str, index) = input.readString(index); - require(keccak256(abi.encodePacked(str)) == keccak256(abi.encodePacked("test")), "str is not 'test'"); + require( + keccak256(abi.encodePacked(str)) == + keccak256(abi.encodePacked("test")), + "str is not 'test'" + ); } function test_decodeFalse_CBORDecoder() public pure { @@ -116,7 +121,10 @@ contract ComparisonTest is Test { string memory expected = "test value"; (value, index) = input.readString(0); - require(keccak256(bytes(value)) == keccak256(bytes(expected)), "value is not 'test value'"); + require( + keccak256(bytes(value)) == keccak256(bytes(expected)), + "value is not 'test value'" + ); } function test_decodeStringWithWeirdChar_CBORDecoder() public pure { @@ -126,7 +134,10 @@ contract ComparisonTest is Test { (value, index) = input.readString(0); // Does solidity support this ? - require(keccak256(bytes(value)) == keccak256(bytes(unicode"zoé")), unicode"value is not 'zoé'"); + require( + keccak256(bytes(value)) == keccak256(bytes(unicode"zoé")), + unicode"value is not 'zoé'" + ); } function test_decodeArrayU8_CBORDecoder() public pure { diff --git a/test/comparison/CborDecode_ReadCbor.t.sol b/test/comparison/ComparisonReadCbor.t.sol similarity index 89% rename from test/comparison/CborDecode_ReadCbor.t.sol rename to test/comparison/ComparisonReadCbor.t.sol index 7317ccd..16c0c0a 100644 --- a/test/comparison/CborDecode_ReadCbor.t.sol +++ b/test/comparison/ComparisonReadCbor.t.sol @@ -31,7 +31,8 @@ contract ComparisonTest is Test { function test_decodeFixedArray_ReadCbor() public pure { // [1,2,3,4,5,6,7,8,9,10,"test", h'01010101', false, null, true] - bytes memory input = hex"8F0102030405060708090A64746573744401010101F4F6F5"; + bytes + memory input = hex"8F0102030405060708090A64746573744401010101F4F6F5"; uint index = 0; uint32 arrayLen = 0; uint8 num; @@ -71,7 +72,11 @@ contract ComparisonTest is Test { require(num == 10, "num is not 1"); (index, str) = input.String(index); - require(keccak256(abi.encodePacked(str)) == keccak256(abi.encodePacked("test")), "str is not 'test'"); + require( + keccak256(abi.encodePacked(str)) == + keccak256(abi.encodePacked("test")), + "str is not 'test'" + ); } function test_decodeFalse_ReadCbor() public pure { @@ -116,7 +121,10 @@ contract ComparisonTest is Test { string memory expected = "test value"; (index, value) = input.String(index); - require(keccak256(bytes(value)) == keccak256(bytes(expected)), "value is not 'test value'"); + require( + keccak256(bytes(value)) == keccak256(bytes(expected)), + "value is not 'test value'" + ); } function test_decodeStringWithWeirdChar_ReadCbor() public pure { @@ -126,7 +134,10 @@ contract ComparisonTest is Test { (index, value) = input.String(index); // Does solidity support this ? - require(keccak256(bytes(value)) == keccak256(bytes(unicode"zoé")), unicode"value is not 'zoé'"); + require( + keccak256(bytes(value)) == keccak256(bytes(unicode"zoé")), + unicode"value is not 'zoé'" + ); } function test_decodeArrayU8_ReadCbor() public pure { diff --git a/test/tags/Bignum.t.sol b/test/tags/Bignum.t.sol index b199ae8..9225754 100644 --- a/test/tags/Bignum.t.sol +++ b/test/tags/Bignum.t.sol @@ -6,20 +6,35 @@ import "../../src/tags/ReadBignum.sol"; import "../../src/ReadCbor.sol"; function bytesHead(uint8 len) pure returns (bytes memory) { - return len < MinorExtendU8 - ? abi.encodePacked(uint8(MajorBytes << shiftMajor | len)) - : abi.encodePacked(uint16(MajorBytes << shiftMajor | MinorExtendU8) << 8 | len); + return + len < MinorExtendU8 + ? abi.encodePacked(uint8((MajorBytes << shiftMajor) | len)) + : abi.encodePacked( + (uint16((MajorBytes << shiftMajor) | MinorExtendU8) << 8) | len + ); } function intHead(uint64 num) pure returns (bytes memory) { if (num <= uint8(type(uint8).max)) { - return abi.encodePacked(uint8(MajorUnsigned << shiftMajor | num)); + return abi.encodePacked(uint8((MajorUnsigned << shiftMajor) | num)); } else if (num <= uint16(type(uint16).max)) { - return abi.encodePacked(uint16(MajorUnsigned << shiftMajor | MinorExtendU8) << 8 | uint16(num)); + return + abi.encodePacked( + (uint16((MajorUnsigned << shiftMajor) | MinorExtendU8) << 8) | + uint16(num) + ); } else if (num <= uint32(type(uint32).max)) { - return abi.encodePacked(uint32(MajorUnsigned << shiftMajor | MinorExtendU16) << 16 | uint32(num)); + return + abi.encodePacked( + (uint32((MajorUnsigned << shiftMajor) | MinorExtendU16) << 16) | + uint32(num) + ); } else { - return abi.encodePacked(uint64(MajorUnsigned << shiftMajor | MinorExtendU32) << 32 | uint64(num)); + return + abi.encodePacked( + (uint64((MajorUnsigned << shiftMajor) | MinorExtendU32) << 32) | + uint64(num) + ); } } @@ -58,7 +73,11 @@ contract BignumTest is Test { } function test_UInt256_max() public { - bytes memory cbor = abi.encodePacked(HeadUBn, bytesHead(32), type(uint256).max); + bytes memory cbor = abi.encodePacked( + HeadUBn, + bytesHead(32), + type(uint256).max + ); uint i; uint256 value; @@ -70,12 +89,18 @@ contract BignumTest is Test { assert(i == cbor.length); } - function testFail_UInt256_large() public pure { + function testRevert_UInt256_large() public { // a 33-byte positive bigint is too large to be a uint256 - bytes memory cbor = abi.encodePacked(HeadUBn, bytesHead(32 + 1), type(uint256).max, hex"ff"); + bytes memory cbor = abi.encodePacked( + HeadUBn, + bytesHead(32 + 1), + type(uint256).max, + hex"ff" + ); uint i; uint256 value; + vm.expectRevert(); (i, value) = cbor.UInt256(i); // unreachable @@ -131,7 +156,11 @@ contract BignumTest is Test { } function test_NInt256_max() public { - bytes memory cbor = abi.encodePacked(HeadNBn, bytesHead(32), uint256(type(int256).min) - 1); + bytes memory cbor = abi.encodePacked( + HeadNBn, + bytesHead(32), + uint256(type(int256).min) - 1 + ); uint i; int256 value; @@ -143,39 +172,53 @@ contract BignumTest is Test { assert(i == cbor.length); } - function testFail_NInt256_overflow() public { + function testRevert_NInt256_overflow() public { // Invalid: one more than the 'maximum' negative number that can be represented as an int256 - bytes memory cbor = abi.encodePacked(HeadNBn, bytesHead(32), uint256(type(int256).min)); + bytes memory cbor = abi.encodePacked( + HeadNBn, + bytesHead(32), + uint256(type(int256).min) + ); uint i; int256 value; - vm.startSnapshotGas("NInt256_overflow"); + vm.expectRevert(); (i, value) = cbor.NInt256(i); - vm.stopSnapshotGas(); // unreachable assert(i == cbor.length); } - function testFail_NInt256_max() public pure { + function testRevert_NInt256_max() public { // Invalid: maximum uint256 value as negative bignum // 3(h'ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff') - bytes memory cbor = abi.encodePacked(HeadNBn, bytesHead(32), bytes32(type(uint256).max)); + bytes memory cbor = abi.encodePacked( + HeadNBn, + bytesHead(32), + bytes32(type(uint256).max) + ); uint i; int256 value; + vm.expectRevert(); (i, value) = cbor.NInt256(i); // unreachable assert(i == cbor.length); } - function testFail_NInt256_large() public pure { + function testRevert_NInt256_large() public { // Invalid: 33-byte negative bignum is too large for int256 - bytes memory cbor = abi.encodePacked(HeadNBn, bytesHead(32 + 1), bytes32(type(uint256).max), hex"ff"); + bytes memory cbor = abi.encodePacked( + HeadNBn, + bytesHead(32 + 1), + bytes32(type(uint256).max), + hex"ff" + ); uint i; int256 value; + vm.expectRevert(); (i, value) = cbor.NInt256(i); // unreachable @@ -215,7 +258,11 @@ contract BignumTest is Test { vm.assume(randN < 0); vm.assume(randN != type(int256).min); - bytes memory cbor = abi.encodePacked(HeadNBn, bytesHead(32), (randN < 0 ? -randN : randN) - 1); + bytes memory cbor = abi.encodePacked( + HeadNBn, + bytesHead(32), + (randN < 0 ? -randN : randN) - 1 + ); uint i; int256 value; @@ -225,8 +272,8 @@ contract BignumTest is Test { } function test_Integer() public { - bytes memory cbor = - hex"8C08387E18FF397FFE19FFFF3A7FFFFFFE1AFFFFFFFF3B7FFFFFFFFFFFFFFE1BFFFFFFFFFFFFFFFFC3507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC250FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC358207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; + bytes + memory cbor = hex"8C08387E18FF397FFE19FFFF3A7FFFFFFE1AFFFFFFFF3B7FFFFFFFFFFFFFFE1BFFFFFFFFFFFFFFFFC3507FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC250FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC358207FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"; uint j; int256 value; uint32 len; @@ -241,20 +288,26 @@ contract BignumTest is Test { assert(j == cbor.length); } - function testFail_Integer_UInt256_max() public pure { - bytes memory cbor = abi.encodePacked(HeadUBn, bytesHead(32), type(uint256).max); + function testRevert_Integer_UInt256_max() public { + bytes memory cbor = abi.encodePacked( + HeadUBn, + bytesHead(32), + type(uint256).max + ); uint i; int256 value; + vm.expectRevert(); (i, value) = cbor.Integer(i); assert(uint256(value) == type(uint256).max); assert(i == cbor.length); } - function testFail_Int256_notbignum() public pure { + function testRevert_Int256_notbignum() public { bytes memory cbor = hex"c4"; uint i; int256 value; + vm.expectRevert(); (i, value) = cbor.Int256(i); } } diff --git a/test/tags/CidSha256.t.sol b/test/tags/CidSha256.t.sol index 9318d34..ce851a5 100644 --- a/test/tags/CidSha256.t.sol +++ b/test/tags/CidSha256.t.sol @@ -50,7 +50,9 @@ contract CidSha256Test is Test { } function test_fuzz_NullableCid_random(uint256 randomHash) public pure { - bytes memory randomCidCbor = randomHash != 0 ? abi.encodePacked(dagHead, randomHash) : nullCbor; + bytes memory randomCidCbor = randomHash != 0 + ? abi.encodePacked(dagHead, randomHash) + : nullCbor; (uint i, CidSha256 rando) = randomCidCbor.NullableCid(0); assert(i == randomCidCbor.length); if (randomHash == 0) { @@ -60,15 +62,18 @@ contract CidSha256Test is Test { } } - function testFail_Cid_zeroCidCbor() public pure { + function testRevert_Cid_zeroCidCbor() public { + vm.expectRevert(); zeroCidCbor.Cid(0); } - function testFail_Cid_nullCbor() public pure { + function testRevert_Cid_nullCbor() public { + vm.expectRevert(); nullCbor.Cid(0); } - function testFail_Cid_NullableCid_zeroes() public pure { + function testRevert_Cid_NullableCid_zeroes() public { + vm.expectRevert(); zeroCidCbor.NullableCid(0); } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..f5affa4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "Node16", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + }, + //"include": ["hardhat.config.cts", "test/**/*.ts", "ignition/**/*.ts", "artifacts/contracts/**/*.ts"], + "ts-node": { + "experimentalResolver": true + } +}