From 20793d7302712588d2910bbbf3cf3609c9d2d75a Mon Sep 17 00:00:00 2001 From: Don Perignom <10616301+madlabman@users.noreply.github.com> Date: Fri, 1 Mar 2024 09:52:01 +0100 Subject: [PATCH] Revamp tooling (#83) * build: move deps to node_modules * build: bump solidity version * chore: update foundry.toml * docs: update README.md --- .github/workflows/test.yml | 79 +++++++++++++++---- .gitmodules | 9 --- .solhint.json | 2 +- Justfile | 17 ++-- README.md | 31 +++++--- foundry.toml | 28 ++++--- lib/forge-std | 1 - lib/openzeppelin-contracts | 1 - lib/openzeppelin-contracts-v4.4 | 1 - package.json | 4 + remappings.txt | 8 +- script/DeployBase.s.sol | 2 +- script/DeployGoerli.s.sol | 2 +- script/DeployHolesky.s.sol | 2 +- script/DeployMainnetish.s.sol | 2 +- script/utils/Json.sol | 2 +- src/CSAccounting.sol | 2 +- src/CSBondCore.sol | 2 +- src/CSBondCurve.sol | 2 +- src/CSBondLock.sol | 2 +- src/CSFeeDistributor.sol | 2 +- src/CSFeeOracle.sol | 2 +- src/CSModule.sol | 2 +- src/CSVerifier.sol | 2 +- src/interfaces/IBurner.sol | 2 +- src/interfaces/ICSAccounting.sol | 2 +- src/interfaces/ICSBondCore.sol | 2 +- src/interfaces/ICSBondCurve.sol | 2 +- src/interfaces/ICSBondLock.sol | 2 +- src/interfaces/ICSFeeDistributor.sol | 2 +- src/interfaces/ICSFeeOracle.sol | 2 +- src/interfaces/ICSModule.sol | 2 +- src/interfaces/ICSVerifier.sol | 2 +- src/interfaces/ILido.sol | 2 +- src/interfaces/ILidoLocator.sol | 2 +- src/interfaces/IStETH.sol | 2 +- src/interfaces/IStakingModule.sol | 2 +- src/interfaces/IStakingRouter.sol | 2 +- src/interfaces/IWithdrawalQueue.sol | 2 +- src/interfaces/IWstETH.sol | 2 +- src/lib/Batch.sol | 2 +- src/lib/GIndex.sol | 2 +- src/lib/Math.sol | 2 +- src/lib/QueueLib.sol | 2 +- src/lib/SSZ.sol | 2 +- src/lib/SigningKeys.sol | 2 +- src/lib/Types.sol | 2 +- src/lib/UnstructuredStorage.sol | 2 +- src/lib/ValidatorCountsReport.sol | 2 +- test/Batch.t.sol | 2 +- test/CSAccounting.t.sol | 2 +- test/CSBondCore.t.sol | 2 +- test/CSBondCurve.t.sol | 2 +- test/CSBondLock.t.sol | 2 +- test/CSFeeDistributor.t.sol | 2 +- test/CSFeeOracle.t.sol | 2 +- test/CSModule.t.sol | 2 +- test/CSVerifier.t.sol | 2 +- test/CSVerifierHistorical.t.sol | 2 +- test/GIndex.t.sol | 2 +- test/Math.t.sol | 2 +- test/QueueLib.t.sol | 2 +- test/helpers/Fixtures.sol | 2 +- test/helpers/MerkleTree.sol | 2 +- test/helpers/Permit.sol | 2 +- test/helpers/Utilities.sol | 2 +- test/helpers/mocks/BurnerMock.sol | 2 +- .../mocks/CommunityStakingModuleMock.sol | 2 +- test/helpers/mocks/DistributorMock.sol | 2 +- test/helpers/mocks/LidoLocatorMock.sol | 2 +- test/helpers/mocks/LidoMock.sol | 2 +- test/helpers/mocks/OracleMock.sol | 2 +- test/helpers/mocks/StETHMock.sol | 2 +- test/helpers/mocks/Stub.sol | 2 +- test/helpers/mocks/WithdrawalQueueMock.sol | 2 +- test/helpers/mocks/WstETHMock.sol | 2 +- test/integration/Deploy.t.sol | 2 +- test/integration/DepositInTokens.t.sol | 2 +- test/integration/StakingRouter.t.sol | 2 +- yarn.lock | 18 +++++ 80 files changed, 208 insertions(+), 127 deletions(-) delete mode 160000 lib/forge-std delete mode 160000 lib/openzeppelin-contracts delete mode 160000 lib/openzeppelin-contracts-v4.4 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 22f3f45d..a2c1eb9f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,15 +14,57 @@ jobs: actions: uses: lidofinance/linters/.github/workflows/actions.yml@master + # Maybe to make it reusable workflow instead? + bootstrap: + name: Bootstrap environment + runs-on: ubuntu-latest + outputs: + cache-path: ${{ steps.cache.outputs.path }} + cache-key: ${{ steps.cache.outputs.key }} + env: + FORGE_REV: d58ab7f + JUST_TAG: 1.24.0 + steps: + - name: Build cache params + id: cache + run: | + echo "path=$CACHE_PATH" >> "$GITHUB_OUTPUT" + echo "$KEY_INPUT" | md5sum | awk '{print $1}' | xargs -I% echo "key=cargobin-%-${RUNNER_OS}" >> "$GITHUB_OUTPUT" + env: + CACHE_PATH: | + ~/.cargo/bin/ + KEY_INPUT: | + forge:${FORGE_REV} + just:${JUST_TAG} + + - uses: actions/cache@v3 + id: get-cache + with: + path: ${{ steps.cache.outputs.path }} + key: ${{ steps.cache.outputs.key }} + + - name: Install just + run: cargo install "just@$JUST_TAG" + if: steps.get-cache.outputs.cache-hit != 'true' + + - name: Install forge + run: cargo install --git https://github.com/foundry-rs/foundry --rev "$FORGE_REV" --profile local forge + if: steps.get-cache.outputs.cache-hit != 'true' + linters: name: Linters runs-on: ubuntu-latest + needs: bootstrap steps: - uses: actions/checkout@v3 with: - submodules: recursive persist-credentials: false + - uses: actions/cache@v3 + with: + path: ${{ needs.bootstrap.outputs.cache-path }} + key: ${{ needs.bootstrap.outputs.cache-key }} + - name: Install node uses: actions/setup-node@v3 with: @@ -30,33 +72,40 @@ jobs: cache: yarn cache-dependency-path: "**/yarn.lock" - - name: Install Node dependencies - run: yarn install --immutable + - name: Install dependencies + run: just deps - name: Linters check - run: yarn lint:check + run: just lint foundry: name: Foundry project runs-on: ubuntu-latest + needs: bootstrap steps: - uses: actions/checkout@v3 with: - submodules: recursive persist-credentials: false - - name: Install Foundry - uses: foundry-rs/foundry-toolchain@v1 + - uses: actions/cache@v3 with: - version: nightly + path: ${{ needs.bootstrap.outputs.cache-path }} + key: ${{ needs.bootstrap.outputs.cache-key }} - - name: Run Forge build - run: | - forge --version - forge build --sizes + - name: Install node + uses: actions/setup-node@v3 + with: + node-version-file: ".nvmrc" + cache: yarn + cache-dependency-path: "**/yarn.lock" - - name: Run Forge tests - run: | - forge test -vvv + - name: Install dependencies + run: just deps + + - name: Build + run: just build --sizes + + - name: Run tests + run: just test env: RPC_URL: ${{ secrets.RPC_URL }} diff --git a/.gitmodules b/.gitmodules index 43b9b6fe..e69de29b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,9 +0,0 @@ -[submodule "lib/forge-std"] - path = lib/forge-std - url = https://github.com/foundry-rs/forge-std -[submodule "lib/openzeppelin-contracts-v4.4"] - path = lib/openzeppelin-contracts-v4.4 - url = https://github.com/OpenZeppelin/openzeppelin-contracts -[submodule "lib/openzeppelin-contracts"] - path = lib/openzeppelin-contracts - url = https://github.com/OpenZeppelin/openzeppelin-contracts diff --git a/.solhint.json b/.solhint.json index b2889923..e37dfa64 100644 --- a/.solhint.json +++ b/.solhint.json @@ -2,7 +2,7 @@ "extends": "solhint:recommended", "plugins": ["lido-csm"], "rules": { - "compiler-version": ["error", "0.8.21"], + "compiler-version": ["error", "0.8.24"], "no-inline-assembly": "off", "no-unused-import": "error", "func-named-parameters": "error", diff --git a/Justfile b/Justfile index b1fb735b..05443974 100644 --- a/Justfile +++ b/Justfile @@ -14,24 +14,27 @@ deploy_script_path := if chain == "mainnet" { anvil_host := env_var_or_default("ANVIL_IP_ADDR", "127.0.0.1") anvil_port := "8545" -default: clean build test-all +default: clean deps build test-all -build: - forge build --force +build *args: + forge build --force {{args}} clean: forge clean - rm -rf cache broadcast out + rm -rf cache broadcast out node_modules + +deps: + yarn install --immutable lint-solhint: yarn lint:solhint -lint-check: - yarn lint:check - lint-fix: yarn lint:fix +lint: + yarn lint:check + test-all: just test-unit & just test-integration diff --git a/README.md b/README.md index 97928cfc..63aaf247 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,12 @@ - Install [Foundry tools](https://book.getfoundry.sh/getting-started/installation) +- Install [Just](https://github.com/casey/just) + - Install project dependencies ```bash -forge install +just deps ``` - Config environment variables @@ -21,35 +23,44 @@ cp .env.sample .env Fill vars in the `.env` file with your own values +- Build and test contracts + +```bash +just +``` + ### Features - Run tests ```bash -make test # run all tests -make test-unit -make test-inegration +just test # run all tests +# or run specific tests +just test-unit +just test-inegration ``` -- Install libraries +- Install dependencies + +Dependencies are managed using yarn. To install new dependencies, run: ```bash -forge install rari-capital/solmate +yarn add ``` - Deploy to local fork ```bash -make deploy-local +just deploy-local ``` - Deploy to local fork of non-mainnet chain ```bash -CHAIN=holesky make deploy-local +CHAIN=holesky just deploy-local ``` ### Notes -Whenever you install new libraries using Foundry, make sure to update your -`remappings.txt` file by running `forge remappings > remappings.txt` +Whenever you install new libraries using yarn, make sure to update your +`remappings.txt`. diff --git a/foundry.toml b/foundry.toml index 6ce49fde..8540052b 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,17 +1,25 @@ [profile.default] +solc = "0.8.24" +evm_version = "cancun" +optimizer = true +optimizer_runs = 1_000 +bytecode_hash = "none" # The metadata hash removed from the bytecode (not the metadata itself). + src = "src" out = "out" -libs = ["lib"] +libs = ["lib", "node_modules"] cache_path = "cache" -optimizer = true -optimizer_runs = 1_000 -evm_version = "shanghai" + block_gas_limit = 30_000_000 -fs_permissions = [{ access = "write", path = "./out" }, { access = "read", path = "./test/fixtures" }] +fuzz = { runs = 256 } + +fs_permissions = [ + { access = "write", path = "./out" }, + { access = "read", path = "./test/fixtures" } +] -[fmt] -line_length = 80 -tab_width = 4 -bracket_spacing = true +[profile.ci] +verbosity = 3 +fuzz = { runs = 10_000 } -# See more config options https://github.com/foundry-rs/foundry/tree/master/config +# See more config options https://github.com/foundry-rs/foundry/tree/master/crates/config diff --git a/lib/forge-std b/lib/forge-std deleted file mode 160000 index 3725a22a..00000000 --- a/lib/forge-std +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3725a22ae52065de9966beaf32de69aee46fb530 diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts deleted file mode 160000 index 01ef4489..00000000 --- a/lib/openzeppelin-contracts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 01ef448981be9d20ca85f2faf6ebdf591ce409f3 diff --git a/lib/openzeppelin-contracts-v4.4 b/lib/openzeppelin-contracts-v4.4 deleted file mode 160000 index 6bd6b76d..00000000 --- a/lib/openzeppelin-contracts-v4.4 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6bd6b76d1156e20e45d1016f355d154141c7e5b9 diff --git a/package.json b/package.json index 7cb7590f..1ae6b63c 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,10 @@ "postinstall": "husky install" }, "devDependencies": { + "@openzeppelin/contracts": "5.0.1", + "@openzeppelin/contracts-v4.4": "npm:@openzeppelin/contracts@4.4.1", + "ds-test": "https://github.com/dapphub/ds-test", + "forge-std": "https://github.com/foundry-rs/forge-std.git#v1.7.6", "husky": "^8.0.3", "lint-staged": "^14.0.1", "prettier": "^3.0.3", diff --git a/remappings.txt b/remappings.txt index d2fb6ff0..53683e24 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,4 +1,4 @@ -@openzeppelin/contracts=lib/openzeppelin-contracts/contracts/ -ds-test/=lib/forge-std/lib/ds-test/src/ -forge-std/=lib/forge-std/src/ -@openzeppelin/contracts-v4.4=lib/openzeppelin-contracts-v4.4/contracts/ +@openzeppelin/contracts-v4.4/=node_modules/@openzeppelin/contracts-v4.4/ +@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/ +forge-std/=node_modules/forge-std/src/ +ds-test/=node_modules/ds-test/src/ diff --git a/script/DeployBase.s.sol b/script/DeployBase.s.sol index e8bb775c..a1d68e14 100644 --- a/script/DeployBase.s.sol +++ b/script/DeployBase.s.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Script.sol"; diff --git a/script/DeployGoerli.s.sol b/script/DeployGoerli.s.sol index b5c51794..7aa6c48c 100644 --- a/script/DeployGoerli.s.sol +++ b/script/DeployGoerli.s.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { DeployBase } from "./DeployBase.s.sol"; diff --git a/script/DeployHolesky.s.sol b/script/DeployHolesky.s.sol index a297f81b..df82039e 100644 --- a/script/DeployHolesky.s.sol +++ b/script/DeployHolesky.s.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { DeployBase } from "./DeployBase.s.sol"; diff --git a/script/DeployMainnetish.s.sol b/script/DeployMainnetish.s.sol index b67813cd..dffa9c65 100644 --- a/script/DeployMainnetish.s.sol +++ b/script/DeployMainnetish.s.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { DeployBase } from "./DeployBase.s.sol"; diff --git a/script/utils/Json.sol b/script/utils/Json.sol index 54a173af..1ec3251a 100644 --- a/script/utils/Json.sol +++ b/script/utils/Json.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { Vm } from "forge-std/Vm.sol"; diff --git a/src/CSAccounting.sol b/src/CSAccounting.sol index 146e66d5..65683a74 100644 --- a/src/CSAccounting.sol +++ b/src/CSAccounting.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 // solhint-disable-next-line one-contract-per-file -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { PausableUntil } from "base-oracle/utils/PausableUntil.sol"; import { AccessControlEnumerable } from "@openzeppelin/contracts/access/extensions/AccessControlEnumerable.sol"; diff --git a/src/CSBondCore.sol b/src/CSBondCore.sol index b417bca2..bfadebf3 100644 --- a/src/CSBondCore.sol +++ b/src/CSBondCore.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 // solhint-disable-next-line one-contract-per-file -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { ILidoLocator } from "./interfaces/ILidoLocator.sol"; import { ILido } from "./interfaces/ILido.sol"; diff --git a/src/CSBondCurve.sol b/src/CSBondCurve.sol index 411e00b1..acd07a67 100644 --- a/src/CSBondCurve.sol +++ b/src/CSBondCurve.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 // solhint-disable-next-line one-contract-per-file -pragma solidity 0.8.21; +pragma solidity 0.8.24; abstract contract CSBondCurveBase { event BondCurveAdded(uint256[] bondCurve); diff --git a/src/CSBondLock.sol b/src/CSBondLock.sol index c28382b2..9473cc3a 100644 --- a/src/CSBondLock.sol +++ b/src/CSBondLock.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 // solhint-disable-next-line one-contract-per-file -pragma solidity 0.8.21; +pragma solidity 0.8.24; abstract contract CSBondLockBase { event BondLockChanged( diff --git a/src/CSFeeDistributor.sol b/src/CSFeeDistributor.sol index 885d10a7..8192b491 100644 --- a/src/CSFeeDistributor.sol +++ b/src/CSFeeDistributor.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 // solhint-disable-next-line one-contract-per-file -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { MerkleProof } from "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol"; diff --git a/src/CSFeeOracle.sol b/src/CSFeeOracle.sol index 4b546ccd..7bfa427b 100644 --- a/src/CSFeeOracle.sol +++ b/src/CSFeeOracle.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { PausableUntil } from "base-oracle/utils/PausableUntil.sol"; import { BaseOracle } from "base-oracle/oracle/BaseOracle.sol"; diff --git a/src/CSModule.sol b/src/CSModule.sol index 826a8439..14d54c8e 100644 --- a/src/CSModule.sol +++ b/src/CSModule.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 // solhint-disable-next-line one-contract-per-file -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { SafeCast } from "@openzeppelin/contracts/utils/math/SafeCast.sol"; import { Math } from "@openzeppelin/contracts/utils/math/Math.sol"; diff --git a/src/CSVerifier.sol b/src/CSVerifier.sol index a2eb285e..130e4190 100644 --- a/src/CSVerifier.sol +++ b/src/CSVerifier.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { ILidoLocator } from "./interfaces/ILidoLocator.sol"; import { ICSVerifier } from "./interfaces/ICSVerifier.sol"; diff --git a/src/interfaces/IBurner.sol b/src/interfaces/IBurner.sol index 42a861af..fca9d40a 100644 --- a/src/interfaces/IBurner.sol +++ b/src/interfaces/IBurner.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface IBurner { function requestBurnShares( diff --git a/src/interfaces/ICSAccounting.sol b/src/interfaces/ICSAccounting.sol index b55d332b..8feae47f 100644 --- a/src/interfaces/ICSAccounting.sol +++ b/src/interfaces/ICSAccounting.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { ICSBondCore } from "./ICSBondCore.sol"; import { ICSBondCurve } from "./ICSBondCurve.sol"; diff --git a/src/interfaces/ICSBondCore.sol b/src/interfaces/ICSBondCore.sol index b5f61e03..6b579949 100644 --- a/src/interfaces/ICSBondCore.sol +++ b/src/interfaces/ICSBondCore.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface ICSBondCore { function getBondShares( diff --git a/src/interfaces/ICSBondCurve.sol b/src/interfaces/ICSBondCurve.sol index 009338c5..63b62147 100644 --- a/src/interfaces/ICSBondCurve.sol +++ b/src/interfaces/ICSBondCurve.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface ICSBondCurve { struct BondCurve { diff --git a/src/interfaces/ICSBondLock.sol b/src/interfaces/ICSBondLock.sol index f00d9571..e5a1691a 100644 --- a/src/interfaces/ICSBondLock.sol +++ b/src/interfaces/ICSBondLock.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface ICSBondLock { struct BondLock { diff --git a/src/interfaces/ICSFeeDistributor.sol b/src/interfaces/ICSFeeDistributor.sol index 91e35a64..74b87ca5 100644 --- a/src/interfaces/ICSFeeDistributor.sol +++ b/src/interfaces/ICSFeeDistributor.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface ICSFeeDistributor { function getFeesToDistribute( diff --git a/src/interfaces/ICSFeeOracle.sol b/src/interfaces/ICSFeeOracle.sol index 57725196..1f2c9d41 100644 --- a/src/interfaces/ICSFeeOracle.sol +++ b/src/interfaces/ICSFeeOracle.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface ICSFeeOracle { /// @notice Merkle Tree root diff --git a/src/interfaces/ICSModule.sol b/src/interfaces/ICSModule.sol index 175dc8e8..104e6dd7 100644 --- a/src/interfaces/ICSModule.sol +++ b/src/interfaces/ICSModule.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { IStakingModule } from "./IStakingModule.sol"; diff --git a/src/interfaces/ICSVerifier.sol b/src/interfaces/ICSVerifier.sol index 3aa125e1..b70dcbc4 100644 --- a/src/interfaces/ICSVerifier.sol +++ b/src/interfaces/ICSVerifier.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { BeaconBlockHeader } from "../lib/Types.sol"; import { GIndex } from "../lib/GIndex.sol"; diff --git a/src/interfaces/ILido.sol b/src/interfaces/ILido.sol index a2da5dab..67a56476 100644 --- a/src/interfaces/ILido.sol +++ b/src/interfaces/ILido.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { IStETH } from "./IStETH.sol"; diff --git a/src/interfaces/ILidoLocator.sol b/src/interfaces/ILidoLocator.sol index c86f5513..846a9ea7 100644 --- a/src/interfaces/ILidoLocator.sol +++ b/src/interfaces/ILidoLocator.sol @@ -3,7 +3,7 @@ // See contracts/COMPILERS.md // solhint-disable-next-line -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface ILidoLocator { error ZeroAddress(); diff --git a/src/interfaces/IStETH.sol b/src/interfaces/IStETH.sol index 1d081802..a50b46ec 100644 --- a/src/interfaces/IStETH.sol +++ b/src/interfaces/IStETH.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; /** * @title Interface defining ERC20-compatible StETH token diff --git a/src/interfaces/IStakingModule.sol b/src/interfaces/IStakingModule.sol index 70bf0328..72752cde 100644 --- a/src/interfaces/IStakingModule.sol +++ b/src/interfaces/IStakingModule.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; /// @title Lido's Staking Module interface interface IStakingModule { diff --git a/src/interfaces/IStakingRouter.sol b/src/interfaces/IStakingRouter.sol index 7ac5308e..1c0e09d9 100644 --- a/src/interfaces/IStakingRouter.sol +++ b/src/interfaces/IStakingRouter.sol @@ -3,7 +3,7 @@ // See contracts/COMPILERS.md // solhint-disable-next-line -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface IStakingRouter { event ContractVersionSet(uint256 version); diff --git a/src/interfaces/IWithdrawalQueue.sol b/src/interfaces/IWithdrawalQueue.sol index 00458142..26e41ef8 100644 --- a/src/interfaces/IWithdrawalQueue.sol +++ b/src/interfaces/IWithdrawalQueue.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface IWithdrawalQueue { /// @notice minimal amount of stETH that is possible to withdraw diff --git a/src/interfaces/IWstETH.sol b/src/interfaces/IWstETH.sol index 15e1a0ca..d5854620 100644 --- a/src/interfaces/IWstETH.sol +++ b/src/interfaces/IWstETH.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; interface IWstETH { function balanceOf(address account) external view returns (uint256); diff --git a/src/lib/Batch.sol b/src/lib/Batch.sol index e3a24258..c9bc65ca 100644 --- a/src/lib/Batch.sol +++ b/src/lib/Batch.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; /// @author madlabman library Batch { diff --git a/src/lib/GIndex.sol b/src/lib/GIndex.sol index ac587f4b..944e3ee4 100644 --- a/src/lib/GIndex.sol +++ b/src/lib/GIndex.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { Math } from "./Math.sol"; diff --git a/src/lib/Math.sol b/src/lib/Math.sol index a0f7cd07..ff12cea6 100644 --- a/src/lib/Math.sol +++ b/src/lib/Math.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; error Log2Undefined(); diff --git a/src/lib/QueueLib.sol b/src/lib/QueueLib.sol index c189ae52..c9df6990 100644 --- a/src/lib/QueueLib.sol +++ b/src/lib/QueueLib.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; /// @author madlabman library QueueLib { diff --git a/src/lib/SSZ.sol b/src/lib/SSZ.sol index 9a8244a6..2aa7c285 100644 --- a/src/lib/SSZ.sol +++ b/src/lib/SSZ.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { BeaconBlockHeader, Withdrawal, Validator } from "./Types.sol"; import { GIndex } from "./GIndex.sol"; diff --git a/src/lib/SigningKeys.sol b/src/lib/SigningKeys.sol index 2b1b779e..0c3545d5 100644 --- a/src/lib/SigningKeys.sol +++ b/src/lib/SigningKeys.sol @@ -2,7 +2,7 @@ // SPDX-License-Identifier: GPL-3.0 // See contracts/COMPILERS.md -pragma solidity 0.8.21; +pragma solidity 0.8.24; /// @title Library for manage operator keys in storage /// @author KRogLA diff --git a/src/lib/Types.sol b/src/lib/Types.sol index 5410fd8e..50e20c78 100644 --- a/src/lib/Types.sol +++ b/src/lib/Types.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; // As defined in phase0/beacon-chain.md:159 type Slot is uint64; diff --git a/src/lib/UnstructuredStorage.sol b/src/lib/UnstructuredStorage.sol index c893cdeb..8ee28b13 100644 --- a/src/lib/UnstructuredStorage.sol +++ b/src/lib/UnstructuredStorage.sol @@ -2,7 +2,7 @@ * SPDX-License-Identifier: MIT */ -pragma solidity 0.8.21; +pragma solidity 0.8.24; /** * @notice Aragon Unstructured Storage library diff --git a/src/lib/ValidatorCountsReport.sol b/src/lib/ValidatorCountsReport.sol index 2d69496f..31001e85 100644 --- a/src/lib/ValidatorCountsReport.sol +++ b/src/lib/ValidatorCountsReport.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; /// @author skhomuti library ValidatorCountsReport { diff --git a/test/Batch.t.sol b/test/Batch.t.sol index cc93af46..b5e523bd 100644 --- a/test/Batch.t.sol +++ b/test/Batch.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/test/CSAccounting.t.sol b/test/CSAccounting.t.sol index 1847fc05..55770b23 100644 --- a/test/CSAccounting.t.sol +++ b/test/CSAccounting.t.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/test/CSBondCore.t.sol b/test/CSBondCore.t.sol index 5f89512d..d3b96895 100644 --- a/test/CSBondCore.t.sol +++ b/test/CSBondCore.t.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/test/CSBondCurve.t.sol b/test/CSBondCurve.t.sol index 6ca7fc65..86914a8f 100644 --- a/test/CSBondCurve.t.sol +++ b/test/CSBondCurve.t.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/test/CSBondLock.t.sol b/test/CSBondLock.t.sol index 1373caa6..04f21d86 100644 --- a/test/CSBondLock.t.sol +++ b/test/CSBondLock.t.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/test/CSFeeDistributor.t.sol b/test/CSFeeDistributor.t.sol index 3a3eb37b..eb1143bc 100644 --- a/test/CSFeeDistributor.t.sol +++ b/test/CSFeeDistributor.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/test/CSFeeOracle.t.sol b/test/CSFeeOracle.t.sol index eb653196..44f50570 100644 --- a/test/CSFeeOracle.t.sol +++ b/test/CSFeeOracle.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/test/CSModule.t.sol b/test/CSModule.t.sol index c2531140..e5f75fe2 100644 --- a/test/CSModule.t.sol +++ b/test/CSModule.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; import "../src/CSModule.sol"; diff --git a/test/CSVerifier.t.sol b/test/CSVerifier.t.sol index 1df613ea..af06b44d 100644 --- a/test/CSVerifier.t.sol +++ b/test/CSVerifier.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; import { stdJson } from "forge-std/StdJson.sol"; diff --git a/test/CSVerifierHistorical.t.sol b/test/CSVerifierHistorical.t.sol index 806bf28e..6d19fba1 100644 --- a/test/CSVerifierHistorical.t.sol +++ b/test/CSVerifierHistorical.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; import { stdJson } from "forge-std/StdJson.sol"; diff --git a/test/GIndex.t.sol b/test/GIndex.t.sol index 9aecd837..01e7666b 100644 --- a/test/GIndex.t.sol +++ b/test/GIndex.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2024 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { Test } from "forge-std/Test.sol"; diff --git a/test/Math.t.sol b/test/Math.t.sol index 8c6e91ca..f2014e15 100644 --- a/test/Math.t.sol +++ b/test/Math.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2024 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { Test } from "forge-std/Test.sol"; diff --git a/test/QueueLib.t.sol b/test/QueueLib.t.sol index eb8d8f12..774cbdf6 100644 --- a/test/QueueLib.t.sol +++ b/test/QueueLib.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; import "forge-std/console.sol"; diff --git a/test/helpers/Fixtures.sol b/test/helpers/Fixtures.sol index e02a0a50..4cc13b72 100644 --- a/test/helpers/Fixtures.sol +++ b/test/helpers/Fixtures.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { StdCheats } from "forge-std/StdCheats.sol"; import { LidoMock } from "./mocks/LidoMock.sol"; diff --git a/test/helpers/MerkleTree.sol b/test/helpers/MerkleTree.sol index 8388a624..eb6ebabf 100644 --- a/test/helpers/MerkleTree.sol +++ b/test/helpers/MerkleTree.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; /// @dev See https://github.com/succinctlabs/telepathy-contracts/blob/main/src/libraries/MerkleProof.sol contract MerkleTree { diff --git a/test/helpers/Permit.sol b/test/helpers/Permit.sol index acf22006..316855df 100644 --- a/test/helpers/Permit.sol +++ b/test/helpers/Permit.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; diff --git a/test/helpers/Utilities.sol b/test/helpers/Utilities.sol index 566532af..005a2a0c 100644 --- a/test/helpers/Utilities.sol +++ b/test/helpers/Utilities.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { CommonBase } from "forge-std/Base.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; diff --git a/test/helpers/mocks/BurnerMock.sol b/test/helpers/mocks/BurnerMock.sol index bb6839b9..c6293913 100644 --- a/test/helpers/mocks/BurnerMock.sol +++ b/test/helpers/mocks/BurnerMock.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; contract BurnerMock { function requestBurnShares( diff --git a/test/helpers/mocks/CommunityStakingModuleMock.sol b/test/helpers/mocks/CommunityStakingModuleMock.sol index 2104debe..8116426f 100644 --- a/test/helpers/mocks/CommunityStakingModuleMock.sol +++ b/test/helpers/mocks/CommunityStakingModuleMock.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; contract CommunityStakingModuleMock { struct NodeOperator { diff --git a/test/helpers/mocks/DistributorMock.sol b/test/helpers/mocks/DistributorMock.sol index ee94827c..5adc5ac0 100644 --- a/test/helpers/mocks/DistributorMock.sol +++ b/test/helpers/mocks/DistributorMock.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; contract DistributorMock { function receiveFees(uint256 shares) external { diff --git a/test/helpers/mocks/LidoLocatorMock.sol b/test/helpers/mocks/LidoLocatorMock.sol index dfc8579d..794b6c73 100644 --- a/test/helpers/mocks/LidoLocatorMock.sol +++ b/test/helpers/mocks/LidoLocatorMock.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; contract LidoLocatorMock { address public l; diff --git a/test/helpers/mocks/LidoMock.sol b/test/helpers/mocks/LidoMock.sol index e98f30b5..35bbff8c 100644 --- a/test/helpers/mocks/LidoMock.sol +++ b/test/helpers/mocks/LidoMock.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { StETHMock } from "./StETHMock.sol"; diff --git a/test/helpers/mocks/OracleMock.sol b/test/helpers/mocks/OracleMock.sol index a441d654..d1f8e346 100644 --- a/test/helpers/mocks/OracleMock.sol +++ b/test/helpers/mocks/OracleMock.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { ICSFeeOracle } from "../../../src/interfaces/ICSFeeOracle.sol"; import { MerkleTree } from "../../helpers/MerkleTree.sol"; diff --git a/test/helpers/mocks/StETHMock.sol b/test/helpers/mocks/StETHMock.sol index b9de9bf1..443003b1 100644 --- a/test/helpers/mocks/StETHMock.sol +++ b/test/helpers/mocks/StETHMock.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { PermitTokenBase } from "../Permit.sol"; diff --git a/test/helpers/mocks/Stub.sol b/test/helpers/mocks/Stub.sol index 500018c5..af39ce8d 100644 --- a/test/helpers/mocks/Stub.sol +++ b/test/helpers/mocks/Stub.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; contract Stub { receive() external payable {} diff --git a/test/helpers/mocks/WithdrawalQueueMock.sol b/test/helpers/mocks/WithdrawalQueueMock.sol index 2064c240..2b825955 100644 --- a/test/helpers/mocks/WithdrawalQueueMock.sol +++ b/test/helpers/mocks/WithdrawalQueueMock.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; contract WithdrawalQueueMock { /// @notice minimal amount of stETH that is possible to withdraw diff --git a/test/helpers/mocks/WstETHMock.sol b/test/helpers/mocks/WstETHMock.sol index 89058c6c..6a85cf6d 100644 --- a/test/helpers/mocks/WstETHMock.sol +++ b/test/helpers/mocks/WstETHMock.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { IStETH } from "../../../src/interfaces/IStETH.sol"; import { PermitTokenBase } from "../Permit.sol"; diff --git a/test/integration/Deploy.t.sol b/test/integration/Deploy.t.sol index 208b2146..a8032934 100644 --- a/test/integration/Deploy.t.sol +++ b/test/integration/Deploy.t.sol @@ -1,6 +1,6 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import { Test } from "forge-std/Test.sol"; import { DeployMainnetish } from "../../script/DeployMainnetish.s.sol"; diff --git a/test/integration/DepositInTokens.t.sol b/test/integration/DepositInTokens.t.sol index 31f1f89d..e6dbf25c 100644 --- a/test/integration/DepositInTokens.t.sol +++ b/test/integration/DepositInTokens.t.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/test/integration/StakingRouter.t.sol b/test/integration/StakingRouter.t.sol index ddafa2f8..dfbccfa5 100644 --- a/test/integration/StakingRouter.t.sol +++ b/test/integration/StakingRouter.t.sol @@ -1,7 +1,7 @@ // SPDX-FileCopyrightText: 2023 Lido // SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.8.21; +pragma solidity 0.8.24; import "forge-std/Test.sol"; diff --git a/yarn.lock b/yarn.lock index bcdf8d32..a197fcf7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24,6 +24,16 @@ chalk "^2.4.2" js-tokens "^4.0.0" +"@openzeppelin/contracts-v4.4@npm:@openzeppelin/contracts@4.4.1": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.4.1.tgz#3382db2cd83ab565ed9626765e7da92944b45de8" + integrity sha512-o+pHCf/yMLSlV5MkDQEzEQL402i6SoRnktru+0rdSxVEFZcTzzGhZCAtZjUFyKGazMSv1TilzMg+RbED1N8XHQ== + +"@openzeppelin/contracts@5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.0.1.tgz#93da90fc209a0a4ff09c1deb037fbb35e4020890" + integrity sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w== + "@solidity-parser/parser@^0.16.0": version "0.16.1" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" @@ -238,6 +248,10 @@ debug@4.3.4: dependencies: ms "2.1.2" +"ds-test@https://github.com/dapphub/ds-test": + version "1.0.0" + resolved "https://github.com/dapphub/ds-test#e282159d5170298eb2455a6c05280ab5a73a4ef0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -307,6 +321,10 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +"forge-std@https://github.com/foundry-rs/forge-std.git#v1.7.6": + version "1.7.6" + resolved "https://github.com/foundry-rs/forge-std.git#ae570fec082bfe1c1f45b0acca4a2b4f84d345ce" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"