diff --git a/.github/workflows/certora-review-controller.yml b/.github/workflows/certora-review-controller.yml index 0588f709..a6d6e1e6 100644 --- a/.github/workflows/certora-review-controller.yml +++ b/.github/workflows/certora-review-controller.yml @@ -32,9 +32,9 @@ jobs: - name: Install solc run: | - wget https://github.com/ethereum/solidity/releases/download/v0.8.19/solc-static-linux + wget https://github.com/ethereum/solidity/releases/download/v0.8.20/solc-static-linux chmod +x solc-static-linux - sudo mv solc-static-linux /usr/local/bin/solc8.19 + sudo mv solc-static-linux /usr/local/bin/solc8.20 - name: Verify rule ${{ matrix.rule }} run: | diff --git a/.github/workflows/certora-review-forwarder.yml b/.github/workflows/certora-review-forwarder.yml index 7dd33e68..3ecbf4c5 100644 --- a/.github/workflows/certora-review-forwarder.yml +++ b/.github/workflows/certora-review-forwarder.yml @@ -32,9 +32,9 @@ jobs: - name: Install solc run: | - wget https://github.com/ethereum/solidity/releases/download/v0.8.19/solc-static-linux + wget https://github.com/ethereum/solidity/releases/download/v0.8.20/solc-static-linux chmod +x solc-static-linux - sudo mv solc-static-linux /usr/local/bin/solc8.19 + sudo mv solc-static-linux /usr/local/bin/solc8.20 - name: Verify rule ${{ matrix.rule }} run: | diff --git a/.github/workflows/certora-review-receiver.yml b/.github/workflows/certora-review-receiver.yml index b8034950..0f9ee687 100644 --- a/.github/workflows/certora-review-receiver.yml +++ b/.github/workflows/certora-review-receiver.yml @@ -32,9 +32,9 @@ jobs: - name: Install solc run: | - wget https://github.com/ethereum/solidity/releases/download/v0.8.19/solc-static-linux + wget https://github.com/ethereum/solidity/releases/download/v0.8.20/solc-static-linux chmod +x solc-static-linux - sudo mv solc-static-linux /usr/local/bin/solc8.19 + sudo mv solc-static-linux /usr/local/bin/solc8.20 - name: Verify rule ${{ matrix.rule }} run: | @@ -51,6 +51,6 @@ jobs: max-parallel: 16 matrix: rule: - - verifyCrossChainReceiver.conf + - verifyCrossChainReceiver.conf diff --git a/.gitmodules b/.gitmodules index 161bb59b..45ff88e3 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,3 @@ -[submodule "lib/openzeppelin-contracts"] - path = lib/openzeppelin-contracts - url = https://github.com/OpenZeppelin/openzeppelin-contracts - branch = release-v4.9 [submodule "lib/solidity-utils"] path = lib/solidity-utils url = https://github.com/bgd-labs/solidity-utils diff --git a/foundry.toml b/foundry.toml index a79d80c1..8a02a0e6 100644 --- a/foundry.toml +++ b/foundry.toml @@ -13,7 +13,7 @@ evm_version = 'shanghai' fs_permissions = [{ access = "read-write", path = "./"}] -solc = "0.8.19" +solc = "0.8.20" [profile.default.zksync] fallback_oz = true diff --git a/lib/openzeppelin-contracts b/lib/openzeppelin-contracts deleted file mode 160000 index dc44c9f1..00000000 --- a/lib/openzeppelin-contracts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit dc44c9f1a4c3b10af99492eed84f83ed244203f6 diff --git a/remappings.txt b/remappings.txt index 595674b7..d71e0ca8 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,3 +1,3 @@ solidity-utils/=lib/solidity-utils/src/ forge-std/=lib/solidity-utils/lib/forge-std/src/ -openzeppelin-contracts/=lib/openzeppelin-contracts/ +openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/ diff --git a/security/certora/confs/verifyCrossChainControllerWithEmergency.conf b/security/certora/confs/verifyCrossChainControllerWithEmergency.conf index cd324aef..0aeb5dd7 100644 --- a/security/certora/confs/verifyCrossChainControllerWithEmergency.conf +++ b/security/certora/confs/verifyCrossChainControllerWithEmergency.conf @@ -10,14 +10,14 @@ "packages": [ "solidity-utils/=lib/solidity-utils/src", "forge-std/=lib/solidity-utils/lib/forge-std/src", - "openzeppelin-contracts/=lib/openzeppelin-contracts", + "openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", ], "process": "emv", "prover_args": [ " -copyLoopUnroll 8" ], "smt_timeout": "6000", - "solc": "solc8.19", + "solc": "solc8.20", // "rule_sanity": "basic", "verify": "CrossChainControllerWithEmergencyModeHarness:security/certora/specs/CrossChainControllerWithEmergencyMode.spec" } diff --git a/security/certora/confs/verifyCrossChainForwarder-encode-decode-correct.conf b/security/certora/confs/verifyCrossChainForwarder-encode-decode-correct.conf index 39e3f808..ae2a6934 100644 --- a/security/certora/confs/verifyCrossChainForwarder-encode-decode-correct.conf +++ b/security/certora/confs/verifyCrossChainForwarder-encode-decode-correct.conf @@ -7,10 +7,10 @@ "packages": [ "solidity-utils/=lib/solidity-utils/src", "forge-std/=lib/solidity-utils/lib/forge-std/src", - "openzeppelin-contracts/=lib/openzeppelin-contracts", + "openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", ], "verify": "CrossChainForwarderHarnessED:security/certora/specs/CrossChainForwarder-encode-decode-correct.spec", - "solc": "solc8.19", + "solc": "solc8.20", "optimistic_hashing": true, "hashing_length_bound": "384", // This is the minimal value that passes sanity "optimistic_loop": true, diff --git a/security/certora/confs/verifyCrossChainForwarder-envelopRetry.conf b/security/certora/confs/verifyCrossChainForwarder-envelopRetry.conf index 297853c0..b1ccd3ed 100644 --- a/security/certora/confs/verifyCrossChainForwarder-envelopRetry.conf +++ b/security/certora/confs/verifyCrossChainForwarder-envelopRetry.conf @@ -7,10 +7,10 @@ "packages": [ "solidity-utils/=lib/solidity-utils/src", "forge-std/=lib/solidity-utils/lib/forge-std/src", - "openzeppelin-contracts/=lib/openzeppelin-contracts", + "openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", ], "verify": "CrossChainForwarderHarness:security/certora/specs/CrossChainForwarder-envelopRetry.spec", - "solc": "solc8.19", + "solc": "solc8.20", "optimistic_hashing": true, "hashing_length_bound": "384", // This is the minimal value that passes sanity "optimistic_loop": true, diff --git a/security/certora/confs/verifyCrossChainForwarder-invariants.conf b/security/certora/confs/verifyCrossChainForwarder-invariants.conf index f5c6f08a..bcebfa2b 100644 --- a/security/certora/confs/verifyCrossChainForwarder-invariants.conf +++ b/security/certora/confs/verifyCrossChainForwarder-invariants.conf @@ -7,10 +7,10 @@ "packages": [ "solidity-utils/=lib/solidity-utils/src", "forge-std/=lib/solidity-utils/lib/forge-std/src", - "openzeppelin-contracts/=lib/openzeppelin-contracts", + "openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", ], "verify": "CrossChainForwarderHarness:security/certora/specs/invariants.spec", - "solc": "solc8.19", + "solc": "solc8.20", "optimistic_hashing": true, "hashing_length_bound": "384", // This is the minimal value that passes sanity "optimistic_loop": true, diff --git a/security/certora/confs/verifyCrossChainForwarder-newEnvelope.conf b/security/certora/confs/verifyCrossChainForwarder-newEnvelope.conf index a2ac3dbd..f8b83a75 100644 --- a/security/certora/confs/verifyCrossChainForwarder-newEnvelope.conf +++ b/security/certora/confs/verifyCrossChainForwarder-newEnvelope.conf @@ -7,10 +7,10 @@ "packages": [ "solidity-utils/=lib/solidity-utils/src", "forge-std/=lib/solidity-utils/lib/forge-std/src", - "openzeppelin-contracts/=lib/openzeppelin-contracts", + "openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", ], "verify": "CrossChainForwarderHarness:security/certora/specs/CrossChainForwarder-newEnvelope.spec", - "solc": "solc8.19", + "solc": "solc8.20", "optimistic_hashing": true, "hashing_length_bound": "384", // This is the minimal value that passes sanity "optimistic_loop": true, diff --git a/security/certora/confs/verifyCrossChainForwarder-sanity.conf b/security/certora/confs/verifyCrossChainForwarder-sanity.conf index 92c0d449..461ea773 100644 --- a/security/certora/confs/verifyCrossChainForwarder-sanity.conf +++ b/security/certora/confs/verifyCrossChainForwarder-sanity.conf @@ -7,10 +7,10 @@ "packages": [ "solidity-utils/=lib/solidity-utils/src", "forge-std/=lib/solidity-utils/lib/forge-std/src", - "openzeppelin-contracts/=lib/openzeppelin-contracts", + "openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", ], "verify": "CrossChainForwarderHarness:security/certora/specs/CrossChainForwarder-sanity.spec", - "solc": "solc8.19", + "solc": "solc8.20", "optimistic_hashing": true, "hashing_length_bound": "384", // This is the minimal value that passes sanity "optimistic_loop": true, diff --git a/security/certora/confs/verifyCrossChainForwarder-shuffle.conf b/security/certora/confs/verifyCrossChainForwarder-shuffle.conf index 705b7af9..c797053f 100644 --- a/security/certora/confs/verifyCrossChainForwarder-shuffle.conf +++ b/security/certora/confs/verifyCrossChainForwarder-shuffle.conf @@ -7,10 +7,10 @@ "packages": [ "solidity-utils/=lib/solidity-utils/src", "forge-std/=lib/solidity-utils/lib/forge-std/src", - "openzeppelin-contracts/=lib/openzeppelin-contracts", + "openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", ], "verify": "CrossChainForwarderHarness:security/certora/specs/CrossChainForwarder-shuffle.spec", - "solc": "solc8.19", + "solc": "solc8.20", "optimistic_hashing": true, "hashing_length_bound": "384", // This is the minimal value that passes sanity "optimistic_loop": true, diff --git a/security/certora/confs/verifyCrossChainForwarder-simpleRules.conf b/security/certora/confs/verifyCrossChainForwarder-simpleRules.conf index 2b587820..b8fd0323 100644 --- a/security/certora/confs/verifyCrossChainForwarder-simpleRules.conf +++ b/security/certora/confs/verifyCrossChainForwarder-simpleRules.conf @@ -7,10 +7,10 @@ "packages": [ "solidity-utils/=lib/solidity-utils/src", "forge-std/=lib/solidity-utils/lib/forge-std/src", - "openzeppelin-contracts/=lib/openzeppelin-contracts", + "openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", ], "verify": "CrossChainForwarderHarness:security/certora/specs/CrossChainForwarder-simpleRules.spec", - "solc": "solc8.19", + "solc": "solc8.20", "optimistic_hashing": true, "hashing_length_bound": "384", // This is the minimal value that passes sanity "optimistic_loop": true, diff --git a/security/certora/confs/verifyCrossChainReceiver.conf b/security/certora/confs/verifyCrossChainReceiver.conf index 5accc08f..118acb3a 100644 --- a/security/certora/confs/verifyCrossChainReceiver.conf +++ b/security/certora/confs/verifyCrossChainReceiver.conf @@ -13,7 +13,7 @@ "packages": [ "solidity-utils/=lib/solidity-utils/src", "forge-std/=lib/solidity-utils/lib/forge-std/src", - "openzeppelin-contracts/=lib/openzeppelin-contracts", + "openzeppelin-contracts/=lib/solidity-utils/lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/", ], "process": "emv", "prover_args": [ @@ -22,7 +22,7 @@ //"prover_version" : "EyalH/FixSanityRuleToBaseMatching", "smt_timeout": "6000", "disable_auto_cache_key_gen" :true, - "solc": "solc8.19", + "solc": "solc8.20", "rule_sanity": "basic", "verify": "CrossChainReceiverHarness:security/certora/specs/CrossChainReceiver.spec" } diff --git a/src/contracts/BaseCrossChainController.sol b/src/contracts/BaseCrossChainController.sol index b8ce0bf7..ae66889e 100644 --- a/src/contracts/BaseCrossChainController.sol +++ b/src/contracts/BaseCrossChainController.sol @@ -2,8 +2,8 @@ pragma solidity ^0.8.8; import {Initializable} from 'solidity-utils/contracts/transparent-proxy/Initializable.sol'; -import {Rescuable} from 'solidity-utils/contracts/utils/Rescuable.sol'; -import {IRescuable} from 'solidity-utils/contracts/utils/interfaces/IRescuable.sol'; +import {Rescuable, RescuableBase, IERC20} from 'solidity-utils/contracts/utils/Rescuable.sol'; +import {IRescuable, IRescuableBase} from 'solidity-utils/contracts/utils/interfaces/IRescuable.sol'; import {CrossChainReceiver} from './CrossChainReceiver.sol'; import {CrossChainForwarder} from './CrossChainForwarder.sol'; import {Errors} from './libs/Errors.sol'; @@ -61,11 +61,18 @@ contract BaseCrossChainController is ); } - /// @inheritdoc IRescuable - function whoCanRescue() public view override(IRescuable, Rescuable) returns (address) { + /// @inheritdoc Rescuable + function whoCanRescue() public view override(Rescuable) returns (address) { return owner(); } + /// @inheritdoc IRescuableBase + function maxRescue( + address erc20Token + ) public view override(IRescuableBase, RescuableBase) returns (uint256) { + return IERC20(erc20Token).balanceOf(address(this)); + } + /// @notice Enable contract to receive ETH/Native token receive() external payable {} } diff --git a/src/contracts/access_control/GranularGuardianAccessControl.sol b/src/contracts/access_control/GranularGuardianAccessControl.sol index e007a638..57bfdcca 100644 --- a/src/contracts/access_control/GranularGuardianAccessControl.sol +++ b/src/contracts/access_control/GranularGuardianAccessControl.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.8; import {ICrossChainForwarder} from '../interfaces/ICrossChainForwarder.sol'; import {ICrossChainControllerWithEmergencyMode} from '../interfaces/ICrossChainControllerWithEmergencyMode.sol'; import {IGranularGuardianAccessControl, Envelope, ICrossChainReceiver} from './IGranularGuardianAccessControl.sol'; -import {AccessControlEnumerable} from 'openzeppelin-contracts/contracts/access/AccessControlEnumerable.sol'; +import {AccessControlEnumerable} from 'openzeppelin-contracts/contracts/access/extensions/AccessControlEnumerable.sol'; import {IWithGuardian} from 'solidity-utils/contracts/access-control/OwnableWithGuardian.sol'; import {ICrossChainControllerWithEmergencyModeDeprecated} from '../interfaces/ICrossChainControllerWithEmergencyModeDeprecated.sol'; diff --git a/tests/BaseCrossChainController.t.sol b/tests/BaseCrossChainController.t.sol index 179c217f..8e1568d1 100644 --- a/tests/BaseCrossChainController.t.sol +++ b/tests/BaseCrossChainController.t.sol @@ -11,6 +11,8 @@ import {TransparentProxyFactory} from 'solidity-utils/contracts/transparent-prox import {ChainIds} from 'solidity-utils/contracts/utils/ChainHelpers.sol'; import {Errors} from '../src/contracts/libs/Errors.sol'; import {IBaseAdapter} from '../src/contracts/adapters/IBaseAdapter.sol'; +import {ProxyAdmin} from 'solidity-utils/contracts/transparent-proxy/ProxyAdmin.sol'; +import {IRescuable} from 'solidity-utils/contracts/utils/interfaces/IRescuable.sol'; abstract contract BaseCrossChainControllerTest is Test { address public constant OWNER = address(65536 + 123); @@ -104,7 +106,7 @@ abstract contract BaseCrossChainControllerTest is Test { crossChainController = IBaseCrossChainController( proxyFactory.createDeterministic( crossChainControllerImpl, - proxyAdmin, + ProxyAdmin(proxyAdmin), _getEncodedInitializer( OWNER, GUARDIAN, @@ -144,7 +146,7 @@ abstract contract BaseCrossChainControllerTest is Test { vm.expectRevert(bytes(Errors.INVALID_REQUIRED_CONFIRMATIONS)); proxyFactory.createDeterministic( crossChainControllerImpl, - proxyAdmin, + ProxyAdmin(proxyAdmin), _getEncodedInitializer( OWNER, GUARDIAN, @@ -191,7 +193,7 @@ abstract contract BaseCrossChainControllerTest is Test { address recipient = address(1230123519); - vm.expectRevert((bytes('ONLY_RESCUE_GUARDIAN'))); + vm.expectRevert(abi.encodeWithSelector(IRescuable.OnlyRescueGuardian.selector)); crossChainController.emergencyEtherTransfer(recipient, 5 ether); } @@ -224,7 +226,7 @@ abstract contract BaseCrossChainControllerTest is Test { address recipient = address(1230123519); - vm.expectRevert((bytes('ONLY_RESCUE_GUARDIAN'))); + vm.expectRevert(abi.encodeWithSelector(IRescuable.OnlyRescueGuardian.selector)); crossChainController.emergencyTokenTransfer(address(testToken), recipient, 3 ether); } } diff --git a/tests/CrossChainControllerWithEmergencyMode.t.sol b/tests/CrossChainControllerWithEmergencyMode.t.sol index 8b0d8746..2c5054aa 100644 --- a/tests/CrossChainControllerWithEmergencyMode.t.sol +++ b/tests/CrossChainControllerWithEmergencyMode.t.sol @@ -74,7 +74,7 @@ contract CrossChainControllerWithEmergencyModeTest is BaseCrossChainControllerTe vm.expectRevert(bytes(Errors.INVALID_EMERGENCY_ORACLE)); proxyFactory.createDeterministic( crossChainControllerImpl, - proxyAdmin, + ProxyAdmin(proxyAdmin), abi.encodeWithSelector( ICrossChainControllerWithEmergencyMode.initialize.selector, OWNER, diff --git a/tests/access_control/GranularGuardianAccessControl.t.sol b/tests/access_control/GranularGuardianAccessControl.t.sol index 087f76b2..6602d743 100644 --- a/tests/access_control/GranularGuardianAccessControl.t.sol +++ b/tests/access_control/GranularGuardianAccessControl.t.sol @@ -5,6 +5,7 @@ import {TestUtils} from '../utils/TestUtils.sol'; import '../../src/contracts/access_control/GranularGuardianAccessControl.sol'; import {OwnableWithGuardian, IWithGuardian} from 'solidity-utils/contracts/access-control/OwnableWithGuardian.sol'; import '../BaseTest.sol'; +import {IAccessControl} from 'openzeppelin-contracts/contracts/access/IAccessControl.sol'; contract GranularGuardianAccessControlTest is BaseTest { bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; @@ -105,13 +106,12 @@ contract GranularGuardianAccessControlTest is BaseTest { ) public setUpGranularGuardians(defaultAdmin, retryGuardian, solveEmergencyGuardian, ccc) { vm.assume(retryCaller != retryGuardian); hoax(retryCaller); + vm.expectRevert( - bytes( - string.concat( - 'AccessControl: account 0x', - TestUtils.toAsciiString(retryCaller), - ' is missing role 0xc448b9502bbdf9850cc39823b6ea40cfe96d3ac63008e89edd2b8e98c6cc0af3' - ) + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + retryCaller, + 0xc448b9502bbdf9850cc39823b6ea40cfe96d3ac63008e89edd2b8e98c6cc0af3 ) ); _retryTx(ccc); @@ -141,13 +141,12 @@ contract GranularGuardianAccessControlTest is BaseTest { ) public setUpGranularGuardians(defaultAdmin, retryGuardian, solveEmergencyGuardian, ccc) { vm.assume(retryCaller != retryGuardian); hoax(retryCaller); + vm.expectRevert( - bytes( - string.concat( - 'AccessControl: account 0x', - TestUtils.toAsciiString(retryCaller), - ' is missing role 0xc448b9502bbdf9850cc39823b6ea40cfe96d3ac63008e89edd2b8e98c6cc0af3' - ) + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + retryCaller, + 0xc448b9502bbdf9850cc39823b6ea40cfe96d3ac63008e89edd2b8e98c6cc0af3 ) ); _retryEnvelope(ccc, mockEnvId); @@ -174,12 +173,10 @@ contract GranularGuardianAccessControlTest is BaseTest { vm.assume(solveCaller != solveEmergencyGuardian); hoax(solveCaller); vm.expectRevert( - bytes( - string.concat( - 'AccessControl: account 0x', - TestUtils.toAsciiString(solveCaller), - ' is missing role 0xf4cdc679c22cbf47d6de8e836ce79ffdae51f38408dcde3f0645de7634fa607d' - ) + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + solveCaller, + 0xf4cdc679c22cbf47d6de8e836ce79ffdae51f38408dcde3f0645de7634fa607d ) ); _solveEmergency(ccc); @@ -213,13 +210,12 @@ contract GranularGuardianAccessControlTest is BaseTest { ) public setUpGranularGuardians(defaultAdmin, retryGuardian, solveEmergencyGuardian, ccc) { vm.assume(guardianCaller != defaultAdmin); hoax(guardianCaller); + vm.expectRevert( - bytes( - string.concat( - 'AccessControl: account 0x', - TestUtils.toAsciiString(guardianCaller), - ' is missing role 0x0000000000000000000000000000000000000000000000000000000000000000' - ) + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + guardianCaller, + 0x0000000000000000000000000000000000000000000000000000000000000000 ) ); control.updateGuardian(newGuardian); diff --git a/yarn.lock b/yarn.lock index d3a2172f..ff9fd089 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,50 +4,50 @@ "@solidity-parser/parser@^0.16.0": version "0.16.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c" + resolved "https://registry.npmjs.org/@solidity-parser/parser/-/parser-0.16.1.tgz" integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw== dependencies: antlr4ts "^0.5.0-alpha.4" antlr4ts@^0.5.0-alpha.4: version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + resolved "https://registry.npmjs.org/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz" integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" prettier-plugin-solidity@^1.1.1: version "1.1.3" - resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz#9a35124f578404caf617634a8cab80862d726cba" + resolved "https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.1.3.tgz" integrity sha512-fQ9yucPi2sBbA2U2Xjh6m4isUTJ7S7QLc/XDDsktqqxYfTwdYKJ0EnnywXHwCGAaYbQNK+HIYPL1OemxuMsgeg== dependencies: "@solidity-parser/parser" "^0.16.0" semver "^7.3.8" solidity-comments-extractor "^0.0.7" -prettier@^2.8.3: +prettier@^2.8.3, "prettier@>=2.3.0 || >=3.0.0-alpha.0": version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz" integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== semver@^7.3.8: version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" solidity-comments-extractor@^0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" + resolved "https://registry.npmjs.org/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz" integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==