diff --git a/.github/workflows/defi.yml b/.github/workflows/defi.yml index e4118c0bde..7666fc33ef 100644 --- a/.github/workflows/defi.yml +++ b/.github/workflows/defi.yml @@ -42,8 +42,8 @@ jobs: - run: yarn prettier:check working-directory: ./contracts - contracts-test: - name: "Mainnet Unit Tests" + contracts-unit-coverage: + name: "Mainnet Unit Coverage" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -58,15 +58,20 @@ jobs: - run: yarn install --frozen-lockfile working-directory: ./contracts - # this will run the unit tests and report the gas usage - - name: Run Unit Tests - env: - REPORT_GAS: true - run: yarn run test + - name: Run Mainnet Unit Coverage + run: yarn run test:coverage working-directory: ./contracts - contracts-unit-coverage: - name: "Mainnet Unit Coverage" + - uses: actions/upload-artifact@v4 + with: + name: unit-test-coverage-${{ github.sha }} + path: | + ./contracts/coverage.json + ./contracts/coverage/**/* + retention-days: 1 + + contracts-base-test: + name: "Base Unit Coverage" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -81,20 +86,22 @@ jobs: - run: yarn install --frozen-lockfile working-directory: ./contracts - - name: Run Mainnet Unit Coverage - run: yarn run test:coverage + - name: Run Base Unit Coverage + env: + UNIT_TESTS_NETWORK: base + run: yarn run test:coverage:base working-directory: ./contracts - uses: actions/upload-artifact@v4 with: - name: unit-test-coverage-${{ github.sha }} + name: base-unit-test-coverage-${{ github.sha }} path: | ./contracts/coverage.json ./contracts/coverage/**/* retention-days: 1 - contracts-base-test: - name: "Base Unit Coverage" + contracts-sonic-test: + name: "Sonic Unit Coverage" runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -109,15 +116,15 @@ jobs: - run: yarn install --frozen-lockfile working-directory: ./contracts - - name: Run Base Unit Coverage + - name: Run Sonic Unit Coverage env: - UNIT_TESTS_NETWORK: base - run: yarn run test:coverage:base + UNIT_TESTS_NETWORK: sonic + run: yarn run test:coverage:sonic working-directory: ./contracts - uses: actions/upload-artifact@v4 with: - name: base-unit-test-coverage-${{ github.sha }} + name: sonic-unit-test-coverage-${{ github.sha }} path: | ./contracts/coverage.json ./contracts/coverage/**/* @@ -287,6 +294,46 @@ jobs: ./contracts/coverage.json ./contracts/coverage/**/* retention-days: 1 + + contracts-sonic-forktest: + name: "Sonic Fork Tests" + runs-on: ubuntu-latest + continue-on-error: true + env: + HARDHAT_CACHE_DIR: ./cache + PROVIDER_URL: ${{ secrets.PROVIDER_URL }} + SONIC_PROVIDER_URL: ${{ secrets.SONIC_PROVIDER_URL }} + steps: + - uses: actions/checkout@v4 + + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: "20.x" + cache: "yarn" + cache-dependency-path: contracts/yarn.lock + + - uses: actions/cache@v4 + id: hardhat-cache + with: + path: contracts/cache + key: ${{ runner.os }}-hardhat-${{ hashFiles('contracts/cache/*.json') }} + restore-keys: | + ${{ runner.os }}-hardhat-cache + + - run: yarn install --frozen-lockfile + working-directory: ./contracts + + - run: yarn run test:coverage:sonic-fork + working-directory: ./contracts + + - uses: actions/upload-artifact@v4 + with: + name: fork-test-sonic-coverage-${{ github.sha }} + path: | + ./contracts/coverage.json + ./contracts/coverage/**/* + retention-days: 1 coverage-uploader: name: "Upload Coverage Reports" @@ -294,10 +341,12 @@ jobs: needs: - contracts-unit-coverage - contracts-base-test + - contracts-sonic-test - contracts-forktest - contracts-arb-forktest - contracts-hol-forktest - contracts-base-forktest + - contracts-sonic-forktest env: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} steps: diff --git a/contracts/contracts/mocks/MockRebornMinter.sol b/contracts/contracts/mocks/MockRebornMinter.sol index c78d54ea43..200ec50390 100644 --- a/contracts/contracts/mocks/MockRebornMinter.sol +++ b/contracts/contracts/mocks/MockRebornMinter.sol @@ -11,6 +11,8 @@ contract Sanctum { address public vault; address public reborner; bool public shouldAttack = false; + // should selfdestruct in the constructor + bool public shouldDestruct = false; uint256 public targetMethod; address public ousdContract; @@ -51,6 +53,11 @@ contract Sanctum { shouldAttack = _shouldAttack; } + // should call selfdestruct in the constructor + function setShouldDesctruct(bool _shouldDestruct) public { + shouldDestruct = _shouldDestruct; + } + function setTargetMethod(uint256 target) public { targetMethod = target; } @@ -80,6 +87,10 @@ contract Reborner { mint(); } } + + if (sanctum.shouldDestruct()) { + bye(); + } } function mint() public { diff --git a/contracts/deployments/sonic/.chainId b/contracts/deployments/sonic/.chainId new file mode 100644 index 0000000000..bc768da71a --- /dev/null +++ b/contracts/deployments/sonic/.chainId @@ -0,0 +1 @@ +146 \ No newline at end of file diff --git a/contracts/deployments/sonic/.migrations.json b/contracts/deployments/sonic/.migrations.json new file mode 100644 index 0000000000..9e26dfeeb6 --- /dev/null +++ b/contracts/deployments/sonic/.migrations.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/contracts/dev.env b/contracts/dev.env index eae459ee53..9012e9a1b4 100644 --- a/contracts/dev.env +++ b/contracts/dev.env @@ -1,12 +1,16 @@ #providers PROVIDER_URL=[SET PROVIDER URL HERE] -HOLESKY_PROVIDER_URL=[SET HOLESKY PROVIDER URL HERE] +# HOLESKY_PROVIDER_URL=[SET HOLESKY PROVIDER URL HERE] +# BASE_PROVIDER_URL= +SONIC_PROVIDER_URL=https://rpc.soniclabs.com # Set it to latest block number or leave it empty -BLOCK_NUMBER= -HOLESKY_BLOCK_NUMBER= +# BLOCK_NUMBER= +# BASE_BLOCK_NUMBER= +# SONIC_BLOCK_NUMBER= +# HOLESKY_BLOCK_NUMBER= -ARBITRUM_PROVIDER_URL=[SET PROVIDER URL HERE] +# ARBITRUM_PROVIDER_URL=[SET PROVIDER URL HERE] # Add a list of comma separated accounts you want funded in node running forked mode ACCOUNTS_TO_FUND= @@ -22,6 +26,8 @@ ACCOUNTS_TO_FUND= # Used for verifying contracts on Etherscan # ETHERSCAN_API_KEY=[SET API Key] +# BASESCAN_API_KEY= +# SONICSCAN_API_KEY= # The 1Inch enterprise API # ONEINCH_API=https://[SET DOMAIN HERE]/v5.0/1/swap @@ -63,4 +69,4 @@ VALIDATOR_KEYS_S3_BUCKET_NAME=[validator-keys-test | validator-keys] VALIDATOR_MASTER_ENCRYPTED_PRIVATE_KEY= # Beaconcha.in API key can be obtained by creating an account -BEACONCHAIN_API_KEY= +BEACONCHAIN_API_KEY= \ No newline at end of file diff --git a/contracts/fork-test.sh b/contracts/fork-test.sh index ce5f4d93e8..97b4c47ec0 100755 --- a/contracts/fork-test.sh +++ b/contracts/fork-test.sh @@ -45,6 +45,9 @@ main() elif [[ $FORK_NETWORK_NAME == "base" ]]; then PROVIDER_URL=$BASE_PROVIDER_URL; BLOCK_NUMBER=$BASE_BLOCK_NUMBER; + elif [[ $FORK_NETWORK_NAME == "sonic" ]]; then + PROVIDER_URL=$SONIC_PROVIDER_URL; + BLOCK_NUMBER=$SONIC_BLOCK_NUMBER; fi if $is_local; then diff --git a/contracts/hardhat.config.js b/contracts/hardhat.config.js index ab81ef5886..2a3bb95870 100644 --- a/contracts/hardhat.config.js +++ b/contracts/hardhat.config.js @@ -10,7 +10,12 @@ const { isBaseFork, isBaseForkTest, isBaseUnitTest, + isSonic, + isSonicFork, + isSonicForkTest, + isSonicUnitTest, baseProviderUrl, + sonicProviderUrl, arbitrumProviderUrl, holeskyProviderUrl, adjustTheForkBlockNumber, @@ -49,6 +54,10 @@ const HOLESKY_DEPLOYER = "0x1b94CA50D3Ad9f8368851F8526132272d1a5028C"; const BASE_DEPLOYER = MAINNET_DEPLOYER; const BASE_GOVERNOR = "0x92A19381444A001d62cE67BaFF066fA1111d7202"; const BASE_STRATEGIST = "0x28bce2eE5775B652D92bB7c2891A89F036619703"; +const SONIC_DEPLOYER = MAINNET_DEPLOYER; +// TODO: update Sonic Governor and strategist +const SONIC_GOVERNOR = MAINNET_DEPLOYER; +const SONIC_STRATEGIST = MAINNET_DEPLOYER; const mnemonic = "replace hover unaware super where filter stone fine garlic address matrix basic"; @@ -74,6 +83,8 @@ if (isHolesky || isHoleskyForkTest || isHoleskyFork) { paths.deploy = "deploy/holesky"; } else if (isBase || isBaseFork || isBaseForkTest || isBaseUnitTest) { paths.deploy = "deploy/base"; +} else if (isSonic || isSonicFork || isSonicForkTest || isSonicUnitTest) { + paths.deploy = "deploy/sonic"; } else { // holesky deployment files are in contracts/deploy/mainnet paths.deploy = "deploy/mainnet"; @@ -110,6 +121,8 @@ module.exports = { ? { tags: ["arbitrumOne"] } : isBaseFork ? { tags: ["base"] } + : isSonicFork + ? { tags: ["sonic"] } : {}), ...(isForkTest ? { @@ -136,6 +149,8 @@ module.exports = { ? { tags: ["arbitrumOne"] } : isBaseFork ? { tags: ["base"] } + : isSonicFork + ? { tags: ["sonic"] } : {}), }, mainnet: { @@ -179,6 +194,17 @@ module.exports = { live: true, saveDeployments: true, }, + sonic: { + url: sonicProviderUrl, + accounts: [ + process.env.DEPLOYER_PK || privateKeys[0], + process.env.GOVERNOR_PK || privateKeys[0], + ], + chainId: 146, + tags: ["sonic"], + live: true, + saveDeployments: true, + }, }, mocha: { bail: process.env.BAIL === "true", @@ -192,18 +218,27 @@ module.exports = { process.env.FORK === "true" ? isHoleskyFork ? HOLESKY_DEPLOYER + : isBaseFork + ? BASE_DEPLOYER + : isSonicFork + ? SONIC_DEPLOYER : MAINNET_DEPLOYER : 0, hardhat: process.env.FORK === "true" ? isHoleskyFork ? HOLESKY_DEPLOYER + : isBaseFork + ? BASE_DEPLOYER + : isSonicFork + ? SONIC_DEPLOYER : MAINNET_DEPLOYER : 0, mainnet: MAINNET_DEPLOYER, arbitrumOne: MAINNET_DEPLOYER, holesky: HOLESKY_DEPLOYER, - base: MAINNET_DEPLOYER, + base: BASE_DEPLOYER, + sonic: SONIC_DEPLOYER, }, governorAddr: { default: 1, @@ -214,6 +249,8 @@ module.exports = { ? HOLESKY_DEPLOYER : isBaseFork ? BASE_GOVERNOR + : isSonicFork + ? SONIC_GOVERNOR : MAINNET_GOVERNOR : 1, hardhat: @@ -222,11 +259,14 @@ module.exports = { ? HOLESKY_DEPLOYER : isBaseFork ? BASE_GOVERNOR + : isSonicFork + ? SONIC_GOVERNOR : MAINNET_GOVERNOR : 1, mainnet: MAINNET_GOVERNOR, holesky: HOLESKY_DEPLOYER, // on Holesky the deployer is also the governor base: BASE_GOVERNOR, + sonic: SONIC_GOVERNOR, }, /* Local node environment currently has no access to Decentralized governance * address, since the contract is in another repo. Once we merge the ousd-governance @@ -282,6 +322,7 @@ module.exports = { : ethers.constants.AddressZero, mainnet: MAINNET_TIMELOCK, base: addresses.base.timelock, + sonic: addresses.sonic.timelock, }, guardianAddr: { default: 1, @@ -304,6 +345,8 @@ module.exports = { ? HOLESKY_DEPLOYER : isBaseFork ? BASE_STRATEGIST + : isSonicFork + ? SONIC_STRATEGIST : MAINNET_STRATEGIST : 0, hardhat: @@ -312,11 +355,14 @@ module.exports = { ? HOLESKY_DEPLOYER : isBaseFork ? BASE_STRATEGIST + : isSonicFork + ? SONIC_STRATEGIST : MAINNET_STRATEGIST : 0, mainnet: MAINNET_STRATEGIST, holesky: HOLESKY_DEPLOYER, // on Holesky the deployer is also the strategist base: BASE_STRATEGIST, + sonic: SONIC_STRATEGIST, }, }, contractSizer: { @@ -329,6 +375,7 @@ module.exports = { arbitrumOne: process.env.ARBISCAN_API_KEY, holesky: process.env.ETHERSCAN_API_KEY, base: process.env.BASESCAN_API_KEY, + sonic: process.env.SONICSCAN_API_KEY, }, customChains: [ { @@ -347,6 +394,14 @@ module.exports = { browserURL: "https://basescan.org", }, }, + { + network: "sonic", + chainId: 146, + urls: { + apiURL: "https://api.sonicscan.org/api", + browserURL: "https://sonicscan.org", + }, + }, ], }, gasReporter: { diff --git a/contracts/node.sh b/contracts/node.sh index 3fa6356927..8391de3d75 100755 --- a/contracts/node.sh +++ b/contracts/node.sh @@ -37,6 +37,10 @@ main() PROVIDER_URL=$BASE_PROVIDER_URL; BLOCK_NUMBER=$BASE_BLOCK_NUMBER; params+=" --tags base"; + elif [[ $FORK_NETWORK_NAME == "sonic" ]]; then + PROVIDER_URL=$SONIC_PROVIDER_URL; + BLOCK_NUMBER=$SONIC_BLOCK_NUMBER; + params+=" --tags sonic"; fi echo "Fork Network: $FORK_NETWORK_NAME" @@ -95,4 +99,4 @@ main() fi } -main "$@" +main "$@" \ No newline at end of file diff --git a/contracts/package.json b/contracts/package.json index b3e8e07af3..f1a635b25b 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -9,6 +9,7 @@ "deploy:arbitrum": "npx hardhat deploy --network arbitrumOne --tags arbitrumOne --verbose", "deploy:holesky": "NETWORK_NAME=holesky npx hardhat deploy --network holesky --verbose", "deploy:base": "NETWORK_NAME=base npx hardhat deploy --network base --verbose", + "deploy:sonic": "NETWORK_NAME=sonic npx hardhat deploy --network sonic --verbose", "abi:generate": "(rm -rf deployments/hardhat && mkdir -p dist/abi && npx hardhat deploy --export '../dist/network.json')", "abi:dist": "find ./artifacts/contracts -name \"*.json\" -type f -exec cp {} ./dist/abi \\; && rm -rf dist/abi/*.dbg.json dist/abi/Mock*.json && cp ./abi.package.json dist/package.json && cp ./.npmrc.abi dist/.npmrc", "node": "yarn run node:fork", @@ -16,20 +17,24 @@ "node:arb": "FORK_NETWORK_NAME=arbitrumOne yarn run node:fork", "node:hol": "FORK_NETWORK_NAME=holesky yarn run node:fork", "node:base": "FORK_NETWORK_NAME=base yarn run node:fork", + "node:sonic": "FORK_NETWORK_NAME=sonic yarn run node:fork", "node:anvil": "anvil --fork-url $PROVIDER_URL --port 8545 --block-base-fee-per-gas 0 --auto-impersonate --disable-block-gas-limit", "node:anvil:base": "anvil --fork-url $BASE_PROVIDER_URL --port 8545 --block-base-fee-per-gas 0 --auto-impersonate --disable-block-gas-limit", + "node:anvil:sonic": "anvil --fork-url $SONIC_PROVIDER_URL --port 8545 --block-base-fee-per-gas 0 --auto-impersonate --disable-block-gas-limit", "lint": "yarn run lint:js && yarn run lint:sol", "lint:js": "eslint \"test/**/*.js\" \"tasks/**/*.js\" \"deploy/**/*.js\"", "lint:sol": "solhint \"contracts/**/*.sol\"", "prettier": "yarn run prettier:js && yarn run prettier:sol", - "prettier:check": "prettier -c \"contracts/**/*.sol\" \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"smoke/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", + "prettier:check": "prettier -c \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"smoke/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:js": "prettier --write \"*.js\" \"deploy/**/*.js\" \"scripts/**/*.js\" \"smoke/**/*.js\" \"scripts/**/*.js\" \"tasks/**/*.js\" \"test/**/*.js\" \"utils/**/*.js\"", "prettier:sol": "prettier --write \"contracts/**/*.sol\"", "test": "rm -rf deployments/hardhat && IS_TEST=true npx hardhat test", "test:base": "rm -rf deployments/hardhat && UNIT_TESTS_NETWORK=base IS_TEST=true npx hardhat test", + "test:sonic": "rm -rf deployments/hardhat && UNIT_TESTS_NETWORK=sonic IS_TEST=true npx hardhat test", "test:fork": "./fork-test.sh", "test:arb-fork": "FORK_NETWORK_NAME=arbitrumOne ./fork-test.sh", "test:base-fork": "FORK_NETWORK_NAME=base ./fork-test.sh", + "test:sonic-fork": "FORK_NETWORK_NAME=sonic ./fork-test.sh", "test:hol-fork": "FORK_NETWORK_NAME=holesky ./fork-test.sh", "test:fork:w_trace": "TRACE=true ./fork-test.sh", "fund": "FORK=true npx hardhat fund --network localhost", @@ -42,9 +47,11 @@ "cache-clean:light": "rm -rf cache/hardhat-network-fork/network-1337/", "test:coverage": "IS_TEST=true npx hardhat coverage", "test:coverage:base": "UNIT_TESTS_NETWORK=base IS_TEST=true npx hardhat coverage", + "test:coverage:sonic": "UNIT_TESTS_NETWORK=sonic IS_TEST=true npx hardhat coverage", "test:coverage:fork": "REPORT_COVERAGE=true ./fork-test.sh", "test:coverage:arb-fork": "REPORT_COVERAGE=true FORK_NETWORK_NAME=arbitrumOne ./fork-test.sh", "test:coverage:base-fork": "REPORT_COVERAGE=true FORK_NETWORK_NAME=base ./fork-test.sh", + "test:coverage:sonic-fork": "REPORT_COVERAGE=true FORK_NETWORK_NAME=sonic ./fork-test.sh", "test:coverage:hol-fork": "REPORT_COVERAGE=true FORK_NETWORK_NAME=holesky ./fork-test.sh" }, "author": "Origin Protocol Inc ", @@ -77,12 +84,12 @@ "eslint-plugin-no-only-tests": "^3.1.0", "ethereum-waffle": "^4.0.10", "ethers": "^5.4.6", - "hardhat": "^2.14.1", + "hardhat": "^2.22.17", "hardhat-contract-sizer": "^2.9.0", "hardhat-deploy": "^0.11.30", "hardhat-deploy-ethers": "^0.3.0-beta.13", "hardhat-gas-reporter": "^1.0.9", - "hardhat-tracer": "^2.3.2", + "hardhat-tracer": "^3.1.0", "husky": "^7.0.2", "lodash": "^4.17.21", "mocha": "^10.2.0", @@ -94,7 +101,7 @@ "solc": "0.8.6", "solhint": "^3.4.1", "solidifier": "^2.2.3", - "solidity-coverage": "^0.8.2", + "solidity-coverage": "^0.8.14", "ssv-keys": "^1.1.0", "ssv-scanner": "github:bloxapp/ssv-scanner", "sync-fetch": "^0.5.2", @@ -110,4 +117,4 @@ "@chainlink/contracts-ccip": "^1.2.1", "ganache": "^7.9.2" } -} +} \ No newline at end of file diff --git a/contracts/tasks/storageSlots.js b/contracts/tasks/storageSlots.js index 0ff0f45239..e8369d6eda 100644 --- a/contracts/tasks/storageSlots.js +++ b/contracts/tasks/storageSlots.js @@ -17,8 +17,10 @@ const isFork = process.env.FORK === "true"; const getStorageFileLocation = (hre, contractName) => { const isMainnet = hre.network.name === "mainnet"; const isArbitrum = hre.network.name === "arbitrumOne"; + const isSonic = hre.network.name === "sonic"; const forkNetworkName = process.env.FORK_NETWORK_NAME; const isArbitrumFork = isFork && forkNetworkName == "arbitrumOne"; + const isSonicFork = isFork && forkNetworkName == "sonic"; const isMainnetFork = isFork && forkNetworkName == "mainnet"; let folder = "localhost"; @@ -26,6 +28,8 @@ const getStorageFileLocation = (hre, contractName) => { folder = "mainnet"; } else if (isArbitrumFork || isArbitrum) { folder = "arbitrumOne"; + } else if (isSonicFork || isSonic) { + folder = "sonic"; } const layoutFolder = `./storageLayout/${folder}/`; diff --git a/contracts/test/_fixture-base.js b/contracts/test/_fixture-base.js index 4b73d0f896..0895098ecc 100644 --- a/contracts/test/_fixture-base.js +++ b/contracts/test/_fixture-base.js @@ -9,7 +9,7 @@ const addresses = require("../utils/addresses"); const erc20Abi = require("./abi/erc20.json"); const hhHelpers = require("@nomicfoundation/hardhat-network-helpers"); -const log = require("../utils/logger")("test:fixtures-arb"); +const log = require("../utils/logger")("test:fixtures-base"); const aeroSwapRouterAbi = require("./abi/aerodromeSwapRouter.json"); const aeroNonfungiblePositionManagerAbi = require("./abi/aerodromeNonfungiblePositionManager.json"); diff --git a/contracts/test/hacks/reborn.js b/contracts/test/hacks/reborn.js index 3e8f51283f..993e46d645 100644 --- a/contracts/test/hacks/reborn.js +++ b/contracts/test/hacks/reborn.js @@ -15,48 +15,75 @@ describe("Reborn Attack Protection", function () { fixture = await loadFixture(); }); it("Should correctly do accounting when reborn calls mint as different types of addresses", async function () { - const { dai, ousd, matt, reborner, rebornAttack } = fixture; - await dai.connect(matt).transfer(reborner.address, daiUnits("4")); + const { dai, ousd, matt, rebornAddress, reborner, deployAndCall } = + fixture; + await dai.connect(matt).transfer(rebornAddress, daiUnits("4")); + // call mint and self destruct (since account.code.length = 0) in constructor this is done + // as an EOA from OUSD.sol's point of view + await deployAndCall({ shouldAttack: true, shouldDestruct: true }); + // just deploy reborner contract + await deployAndCall({ shouldAttack: false }); + // call mint and expect to be migrated to a contract address await reborner.mint(); - await reborner.bye(); - await rebornAttack(true); - await expect(reborner).to.have.a.balanceOf("2", ousd); + await expect(await ousd.balanceOf(rebornAddress)).to.equal( + ousdUnits("2") + ); expect(await ousd.nonRebasingSupply()).to.equal(ousdUnits("2")); }); it("Should correctly do accounting when reborn calls burn as different types of addresses", async function () { - const { dai, ousd, matt, reborner, rebornAttack } = fixture; + const { dai, ousd, matt, reborner, rebornAddress, deployAndCall } = + fixture; await dai.connect(matt).transfer(reborner.address, daiUnits("4")); - await reborner.mint(); - await reborner.bye(); - await rebornAttack(true, 1); - await expect(reborner).to.have.a.balanceOf("0", ousd); - expect(await ousd.nonRebasingSupply()).to.equal(ousdUnits("0")); + // call mint and self destruct (since account.code.length = 0) in constructor this is done + // as an EOA from OUSD.sol's point of view + await deployAndCall({ shouldAttack: true, shouldDestruct: true }); + await deployAndCall({ shouldAttack: true, shouldDestruct: true }); + + await deployAndCall({ shouldAttack: false }); + // call redeem and expect to be migrated to a contract address + await reborner.redeem(); + await expect(await ousd.balanceOf(rebornAddress)).to.equal( + ousdUnits("1") + ); + expect(await ousd.nonRebasingSupply()).to.equal(ousdUnits("1")); }); it("Should correctly do accounting when reborn calls transfer as different types of addresses", async function () { - const { dai, ousd, matt, reborner, rebornAttack } = fixture; + const { dai, ousd, matt, reborner, rebornAddress, deployAndCall } = + fixture; await dai.connect(matt).transfer(reborner.address, daiUnits("4")); + // call mint and self destruct (since account.code.length = 0) in constructor this is done + // as an EOA from OUSD.sol's point of view + await deployAndCall({ shouldAttack: true, shouldDestruct: true }); + expect(await ousd.nonRebasingSupply()).to.equal(ousdUnits("0")); + expect(await ousd.nonRebasingSupply()).to.equal(ousdUnits("0")); + + await deployAndCall({ shouldAttack: false }); + // call transfer and expect to be migrated to a contract address + await reborner.transfer(); + await expect(await ousd.balanceOf(rebornAddress)).to.equal( + ousdUnits("0") + ); + expect(await ousd.nonRebasingSupply()).to.equal(ousdUnits("0")); await reborner.mint(); - await reborner.bye(); + await expect(await ousd.balanceOf(rebornAddress)).to.equal( + ousdUnits("1") + ); expect(await ousd.nonRebasingSupply()).to.equal(ousdUnits("1")); - await rebornAttack(true, 2); - await expect(reborner).to.have.a.balanceOf("0", ousd); - expect(await ousd.nonRebasingSupply()).to.equal(ousdUnits("0")); }); it("Should have correct balance even after recreating", async function () { - const { dai, matt, reborner, rebornAttack, ousd } = fixture; + const { dai, matt, reborner, deployAndCall, ousd } = fixture; // Mint one OUSD and self-destruct await dai.connect(matt).transfer(reborner.address, daiUnits("4")); - await reborner.mint(); + await deployAndCall({ shouldAttack: true, shouldDestruct: true }); await expect(reborner).to.have.a.balanceOf("1", ousd); - await reborner.bye(); // Recreate the contract at the same address but expect // to not have any change in balance (outside constructor) - await rebornAttack(false); + await deployAndCall({ shouldAttack: false }); await expect(reborner).to.have.a.balanceOf("1", ousd); await reborner.mint(); await expect(reborner).to.have.a.balanceOf("2", ousd); diff --git a/contracts/test/helpers.js b/contracts/test/helpers.js index eae2879037..f0ebd61011 100644 --- a/contracts/test/helpers.js +++ b/contracts/test/helpers.js @@ -305,6 +305,10 @@ const isBase = hre.network.name == "base"; const isBaseFork = isFork && process.env.FORK_NETWORK_NAME == "base"; const isBaseOrFork = isBase || isBaseFork; const isBaseUnitTest = process.env.UNIT_TESTS_NETWORK === "base"; +const isSonic = hre.network.name == "sonic"; +const isSonicFork = isFork && process.env.FORK_NETWORK_NAME == "sonic"; +const isSonicOrFork = isSonic || isSonicFork; +const isSonicUnitTest = process.env.UNIT_TESTS_NETWORK === "sonic"; /// Advances the EVM time by the given number of seconds const advanceTime = async (seconds) => { @@ -838,6 +842,10 @@ module.exports = { isBaseFork, isBaseOrFork, isBaseUnitTest, + isSonic, + isSonicFork, + isSonicOrFork, + isSonicUnitTest, getOracleAddress, setOracleTokenPriceUsd, getOracleAddresses, diff --git a/contracts/utils/addresses.js b/contracts/utils/addresses.js index 5424ea9fef..3f18675d38 100644 --- a/contracts/utils/addresses.js +++ b/contracts/utils/addresses.js @@ -335,6 +335,16 @@ addresses.base.oethbBribesContract = addresses.base.OZRelayerAddress = "0xc0D6fa24D135c006dE5B8b2955935466A03D920a"; +// Sonic +addresses.sonic = {}; +addresses.sonic.wS = "0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38"; +addresses.sonic.WETH = "0x309C92261178fA0CF748A855e90Ae73FDb79EBc7"; +addresses.sonic.SFC = "0xFC00FACE00000000000000000000000000000000"; +addresses.sonic.nodeDriver = "0xd100a01e00000000000000000000000000000001"; +addresses.sonic.nodeDriveAuth = "0xd100ae0000000000000000000000000000000000"; +addresses.sonic.validatorRegistrator = + "0x531B8D5eD6db72A56cF1238D4cE478E7cB7f2825"; + // Holesky addresses.holesky.WETH = "0x94373a4919B3240D86eA41593D5eBa789FEF3848"; diff --git a/contracts/utils/deploy-l2.js b/contracts/utils/deploy-l2.js index 0d4564c78d..4a142aaf3e 100644 --- a/contracts/utils/deploy-l2.js +++ b/contracts/utils/deploy-l2.js @@ -1,4 +1,9 @@ -const { isFork, isArbFork, isBaseFork } = require("../test/helpers"); +const { + isFork, + isArbFork, + isBaseFork, + isSonicFork, +} = require("../test/helpers"); const addresses = require("./addresses"); const { deployWithConfirmation, @@ -202,8 +207,53 @@ function deployOnBaseWithGuardian(opts, fn) { return main; } +function deployOnSonic(opts, fn) { + const { deployName, dependencies, forceSkip } = opts; + + const runDeployment = async (hre) => { + const tools = { + deployWithConfirmation, + ethers: hre.ethers, + getTxOpts: getTxOpts, + withConfirmation, + }; + + if (isFork) { + const { deployerAddr } = await getNamedAccounts(); + await impersonateAndFund(deployerAddr); + } + + await fn(tools); + }; + + const main = async (hre) => { + console.log(`Running ${deployName} deployment...`); + if (!hre) { + hre = require("hardhat"); + } + await runDeployment(hre); + console.log(`${deployName} deploy done.`); + return true; + }; + + main.id = deployName; + main.dependencies = dependencies || []; + + main.tags = ["sonic"]; + + main.skip = () => + forceSkip || + !( + isSonicFork || + hre.network.name == "sonic" || + hre.network.config.chainId == 146 + ); + return main; +} + module.exports = { deployOnArb, deployOnBase, deployOnBaseWithGuardian, + deployOnSonic, }; diff --git a/contracts/utils/deploy.js b/contracts/utils/deploy.js index d2cba63269..de19bfd578 100644 --- a/contracts/utils/deploy.js +++ b/contracts/utils/deploy.js @@ -23,6 +23,8 @@ const { isArbitrumOne, isBase, isBaseFork, + isSonic, + isSonicFork, isCI, isTest, } = require("../test/helpers.js"); @@ -92,7 +94,10 @@ const deployWithConfirmation = async ( const { deployerAddr } = await getNamedAccounts(); if (!args) args = null; if (!contract) contract = contractName; - const feeData = await hre.ethers.provider.getFeeData(); + let feeData; + if (!useFeeData && !isSonic) { + feeData = await hre.ethers.provider.getFeeData(); + } const result = await withConfirmation( deploy(contractName, { from: deployerAddr, @@ -110,7 +115,7 @@ const deployWithConfirmation = async ( ); // if upgrade happened on the mainnet save the new storage slot layout to the repo - if (isMainnet || isArbitrumOne || isBase) { + if (isMainnet || isArbitrumOne || isBase || isSonic) { await storeStorageLayoutForContract(hre, contractName); } @@ -155,8 +160,9 @@ const withConfirmation = async ( }; const _verifyProxyInitializedWithCorrectGovernor = (transactionData) => { - if (isBaseFork) { - // Skip proxy check on base for now + if (isSonicFork) { + // Skip proxy check on sonic for now + console.log("Skipping proxy check on Sonic for now"); return; } @@ -167,6 +173,7 @@ const _verifyProxyInitializedWithCorrectGovernor = (transactionData) => { ![ addresses.mainnet.Timelock.toLowerCase(), addresses.mainnet.OldTimelock.toLowerCase(), + addresses.base.timelock.toLowerCase(), ].includes(initProxyGovernor) ) { throw new Error( @@ -1050,7 +1057,11 @@ async function handleTransitionGovernance(propDesc, propArgs) { const guardian = !isFork ? undefined : await impersonateAndFund( - isBaseFork ? addresses.base.governor : addresses.mainnet.Guardian + isBaseFork + ? addresses.base.governor + : isSonicFork + ? addresses.sonic.governor + : addresses.mainnet.Guardian ); if (!isScheduled) { diff --git a/contracts/utils/hardhat-helpers.js b/contracts/utils/hardhat-helpers.js index a40632a9e5..a69b495ee3 100644 --- a/contracts/utils/hardhat-helpers.js +++ b/contracts/utils/hardhat-helpers.js @@ -7,12 +7,16 @@ const isHoleskyFork = process.env.FORK_NETWORK_NAME === "holesky"; const isHolesky = process.env.NETWORK_NAME === "holesky"; const isBase = process.env.NETWORK_NAME === "base"; const isBaseFork = process.env.FORK_NETWORK_NAME === "base"; +const isSonic = process.env.NETWORK_NAME === "sonic"; +const isSonicFork = process.env.FORK_NETWORK_NAME === "sonic"; const isForkTest = isFork && process.env.IS_TEST === "true"; const isArbForkTest = isForkTest && isArbitrumFork; const isHoleskyForkTest = isForkTest && isHoleskyFork; const isBaseForkTest = isForkTest && isBaseFork; const isBaseUnitTest = process.env.UNIT_TESTS_NETWORK === "base"; +const isSonicForkTest = isForkTest && isSonicFork; +const isSonicUnitTest = process.env.UNIT_TESTS_NETWORK === "sonic"; const providerUrl = `${ process.env.LOCAL_PROVIDER_URL || process.env.PROVIDER_URL @@ -20,6 +24,7 @@ const providerUrl = `${ const arbitrumProviderUrl = `${process.env.ARBITRUM_PROVIDER_URL}`; const holeskyProviderUrl = `${process.env.HOLESKY_PROVIDER_URL}`; const baseProviderUrl = `${process.env.BASE_PROVIDER_URL}`; +const sonicProviderUrl = `${process.env.SONIC_PROVIDER_URL}`; const standaloneLocalNodeRunning = !!process.env.LOCAL_PROVIDER_URL; /** @@ -44,6 +49,10 @@ const adjustTheForkBlockNumber = () => { forkBlockNumber = process.env.BASE_BLOCK_NUMBER ? process.env.BASE_BLOCK_NUMBER : undefined; + } else if (isSonicForkTest) { + forkBlockNumber = process.env.SONIC_BLOCK_NUMBER + ? process.env.SONIC_BLOCK_NUMBER + : undefined; } else { forkBlockNumber = process.env.BLOCK_NUMBER ? Number(process.env.BLOCK_NUMBER) @@ -108,6 +117,8 @@ const getHardhatNetworkProperties = () => { chainId = 17000; } else if (isBaseFork && isFork) { chainId = 8453; + } else if (isSonicFork && isFork) { + chainId = 146; } else if (isFork) { // is mainnet fork chainId = 1; @@ -121,6 +132,8 @@ const getHardhatNetworkProperties = () => { provider = holeskyProviderUrl; } else if (isBaseForkTest) { provider = baseProviderUrl; + } else if (isSonicForkTest) { + provider = sonicProviderUrl; } } @@ -133,6 +146,7 @@ const networkMap = { 42161: "arbitrumOne", 1337: "hardhat", 8453: "base", + 146: "sonic", }; module.exports = { @@ -142,6 +156,10 @@ module.exports = { isBaseFork, isBaseForkTest, isBaseUnitTest, + isSonic, + isSonicFork, + isSonicForkTest, + isSonicUnitTest, isHoleskyFork, isHolesky, isForkTest, @@ -154,4 +172,5 @@ module.exports = { getHardhatNetworkProperties, networkMap, baseProviderUrl, + sonicProviderUrl, }; diff --git a/contracts/yarn.lock b/contracts/yarn.lock index 1afacc50d2..ab01adbfa3 100644 --- a/contracts/yarn.lock +++ b/contracts/yarn.lock @@ -827,42 +827,6 @@ "@openzeppelin/contracts-upgradeable-4.7.3" "npm:@openzeppelin/contracts-upgradeable@v4.7.3" "@openzeppelin/contracts-v0.7" "npm:@openzeppelin/contracts@v3.4.2" -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" - "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -1261,7 +1225,7 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.0", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -1559,140 +1523,84 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomicfoundation/ethereumjs-block@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d" - integrity sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - -"@nomicfoundation/ethereumjs-blockchain@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726" - integrity sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-ethash" "3.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - abstract-level "^1.0.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0" - integrity sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g== - dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.1" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz#65ca494d53e71e8415c9a49ef48bc921c538fc41" - integrity sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1" - integrity sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ== +"@nomicfoundation/edr-darwin-arm64@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.6.5.tgz#37a31565d7ef42bed9028ac44aed82144de30bd1" + integrity sha512-A9zCCbbNxBpLgjS1kEJSpqxIvGGAX4cYbpDYCU2f3jVqOwaZ/NU761y1SvuCRVpOwhoCXqByN9b7HPpHi0L4hw== + +"@nomicfoundation/edr-darwin-x64@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.6.5.tgz#3252f6e86397af460b7a480bfe1b889464d75b89" + integrity sha512-x3zBY/v3R0modR5CzlL6qMfFMdgwd6oHrWpTkuuXnPFOX8SU31qq87/230f4szM+ukGK8Hi+mNq7Ro2VF4Fj+w== + +"@nomicfoundation/edr-linux-arm64-gnu@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.6.5.tgz#e7dc2934920b6cfabeb5ee7a5e26c8fb0d4964ac" + integrity sha512-HGpB8f1h8ogqPHTyUpyPRKZxUk2lu061g97dOQ/W4CxevI0s/qiw5DB3U3smLvSnBHKOzYS1jkxlMeGN01ky7A== + +"@nomicfoundation/edr-linux-arm64-musl@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.6.5.tgz#00459cd53e9fb7bd5b7e32128b508a6e89079d89" + integrity sha512-ESvJM5Y9XC03fZg9KaQg3Hl+mbx7dsSkTIAndoJS7X2SyakpL9KZpOSYrDk135o8s9P9lYJdPOyiq+Sh+XoCbQ== + +"@nomicfoundation/edr-linux-x64-gnu@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.6.5.tgz#5c9e4e2655caba48e0196977cba395bbde6fe97d" + integrity sha512-HCM1usyAR1Ew6RYf5AkMYGvHBy64cPA5NMbaeY72r0mpKaH3txiMyydcHibByOGdQ8iFLWpyUdpl1egotw+Tgg== + +"@nomicfoundation/edr-linux-x64-musl@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.6.5.tgz#9c220751b66452dc43a365f380e1e236a0a8c5a9" + integrity sha512-nB2uFRyczhAvWUH7NjCsIO6rHnQrof3xcCe6Mpmnzfl2PYcGyxN7iO4ZMmRcQS7R1Y670VH6+8ZBiRn8k43m7A== + +"@nomicfoundation/edr-win32-x64-msvc@0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.6.5.tgz#90d3ac2a6a8a687522bda5ff2e92dd97e68126ea" + integrity sha512-B9QD/4DSSCFtWicO8A3BrsnitO1FPv7axB62wq5Q+qeJ50yJlTmyeGY3cw62gWItdvy2mh3fRM6L1LpnHiB77A== + +"@nomicfoundation/edr@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.6.5.tgz#b3b1ebcdd0148cfe67cca128e7ebe8092e200359" + integrity sha512-tAqMslLP+/2b2sZP4qe9AuGxG3OkQ5gGgHE4isUuq6dUVjwCRPFhAOhpdFl+OjY5P3yEv3hmq9HjUGRa2VNjng== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.6.5" + "@nomicfoundation/edr-darwin-x64" "0.6.5" + "@nomicfoundation/edr-linux-arm64-gnu" "0.6.5" + "@nomicfoundation/edr-linux-arm64-musl" "0.6.5" + "@nomicfoundation/edr-linux-x64-gnu" "0.6.5" + "@nomicfoundation/edr-linux-x64-musl" "0.6.5" + "@nomicfoundation/edr-win32-x64-msvc" "0.6.5" + +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" + "@nomicfoundation/ethereumjs-util" "9.0.4" -"@nomicfoundation/ethereumjs-rlp@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28" - integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ== - -"@nomicfoundation/ethereumjs-statemanager@2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz#8824a97938db4471911e2d2f140f79195def5935" - integrity sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - js-sdsl "^4.1.4" +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== -"@nomicfoundation/ethereumjs-trie@6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717" - integrity sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA== +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - "@types/readable-stream" "^2.3.13" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" -"@nomicfoundation/ethereumjs-tx@5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d" - integrity sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w== +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== dependencies: - "@chainsafe/ssz" "^0.9.2" - "@ethersproject/providers" "^5.7.2" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" -"@nomicfoundation/ethereumjs-util@9.0.1": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz#530cda8bae33f8b5020a8f199ed1d0a2ce48ec89" - integrity sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA== - dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-vm@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz#7d035e0993bcad10716c8b36e61dfb87fa3ca05f" - integrity sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-blockchain" "7.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-evm" "2.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-statemanager" "2.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - "@nomicfoundation/hardhat-network-helpers@^1.0.9": version "1.0.9" resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.9.tgz#767449e8a2acda79306ac84626117583d95d25aa" @@ -2809,7 +2717,7 @@ dependencies: antlr4ts "^0.5.0-alpha.4" -"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": +"@solidity-parser/parser@^0.14.0": version "0.14.5" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== @@ -2823,6 +2731,11 @@ dependencies: antlr4ts "^0.5.0-alpha.4" +"@solidity-parser/parser@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.19.0.tgz#37a8983b2725af9b14ff8c4a475fa0e98d773c3f" + integrity sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA== + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -3047,14 +2960,6 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== -"@types/readable-stream@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - "@types/resolve@1.20.2": version "1.20.2" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.2.tgz#97d26e00cd4a0423b4af620abecf3e6f442b7975" @@ -3137,19 +3042,12 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - abortcontroller-polyfill@^1.7.5: version "1.7.5" resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== -abstract-level@1.0.3, abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3: +abstract-level@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== @@ -3219,11 +3117,6 @@ acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -address@^1.0.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" - integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== - adm-zip@^0.4.16: version "0.4.16" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" @@ -3306,6 +3199,13 @@ amdefine@>=0.0.4: resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" @@ -3620,11 +3520,6 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bigint-crypto-utils@^3.0.23: - version "3.2.2" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.2.2.tgz#e30a49ec38357c6981cd3da5aaa6480b1f752ee4" - integrity sha512-U1RbE3aX9ayCUVcIPHuPDPKcK3SFOXf93J1UK/iHlJuQB7bhagPIX06/CLpLEsDThJ7KA4Dhrnzynl+d2weTiw== - bignumber.js@^9.0.0: version "9.1.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" @@ -3703,6 +3598,20 @@ bowser@^2.11.0: resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3730,16 +3639,6 @@ brorand@^1.0.1, brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -4000,22 +3899,17 @@ camelcase@^5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: +catering@^2.0.0, catering@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== @@ -4107,7 +4001,7 @@ chokidar@3.3.0: optionalDependencies: fsevents "~2.1.1" -chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: +chokidar@3.5.3, chokidar@^3.5.2: version "3.5.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== @@ -4122,6 +4016,13 @@ chokidar@3.5.3, chokidar@^3.4.0, chokidar@^3.5.2: optionalDependencies: fsevents "~2.3.2" +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -4164,22 +4065,16 @@ class-validator@^0.13.2: libphonenumber-js "^1.9.43" validator "^13.7.0" -classic-level@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8" - integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "^2.2.2" - node-gyp-build "^4.3.0" - clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" @@ -4719,14 +4614,6 @@ destroy@1.2.0: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== -detect-port@^1.3.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" - integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== - dependencies: - address "^1.0.1" - debug "4" - diff@3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -5460,7 +5347,7 @@ ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.4.6, ethers@^5.5.3, ethers@^5.6.1, ethers@^5.7.1, ethers@^5.7.2: +ethers@^5.4.6, ethers@^5.5.3, ethers@^5.6.1, ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -5533,11 +5420,6 @@ event-emitter@^0.3.5: d "1" es5-ext "~0.10.14" -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - eventemitter3@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" @@ -5674,6 +5556,11 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +fdir@^6.4.2: + version "6.4.2" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.2.tgz#ddaa7ce1831b161bc3657bb99cb36e1622702689" + integrity sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ== + figlet@^1.5.2: version "1.7.0" resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.7.0.tgz#46903a04603fd19c3e380358418bb2703587a72e" @@ -5734,7 +5621,7 @@ find-up@3.0.0, find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@5.0.0: +find-up@5.0.0, find-up@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== @@ -5742,13 +5629,6 @@ find-up@5.0.0: locate-path "^6.0.0" path-exists "^4.0.0" -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -6392,65 +6272,61 @@ hardhat-gas-reporter@^1.0.9: eth-gas-reporter "^0.2.25" sha1 "^1.1.1" -hardhat-tracer@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/hardhat-tracer/-/hardhat-tracer-2.4.0.tgz#c650251cc504e68e890edf3675b132bcd7cc2322" - integrity sha512-MFWN0Suu2KsUBDntdKemmuqh8M6DraIfW2yd+erCtTdzZjGfF09PzJ1gW/n3Gu2TFR1pwwMqQeilyspQ8G3KNw== +hardhat-tracer@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hardhat-tracer/-/hardhat-tracer-3.1.0.tgz#460ced6bd6919928fc679a8d5764f2b861283b3b" + integrity sha512-Ip16HQAuzbqbNJUIEVfqmbPmOY90bxZSpwu5Q73cwloy+LUYA04BATUM9Gui5H7zcgsgZ1IVy7pSYn6ZMjLmag== dependencies: chalk "^4.1.2" + debug "^4.3.4" ethers "^5.6.1" + semver "^7.6.2" -hardhat@^2.14.1: - version "2.15.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.15.0.tgz#0cacb2b44c4c4651aa8ab649fef12804848b0267" - integrity sha512-cC9tM/N10YaES04zPOp7yR13iX3YibqaNmi0//Ep40Nt9ELIJx3kFpQmucur0PAIfXYpGnw5RuXHNLkxpnVHEw== +hardhat@^2.22.17: + version "2.22.17" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.17.tgz#96036bbe6bad8eb6a6b65c54dc5fbc1324541612" + integrity sha512-tDlI475ccz4d/dajnADUTRc1OJ3H8fpP9sWhXhBPpYsQOg8JHq5xrDimo53UhWPl7KJmAeDCm1bFG74xvpGRpg== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "5.0.1" - "@nomicfoundation/ethereumjs-blockchain" "7.0.1" - "@nomicfoundation/ethereumjs-common" "4.0.1" - "@nomicfoundation/ethereumjs-evm" "2.0.1" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-statemanager" "2.0.1" - "@nomicfoundation/ethereumjs-trie" "6.0.1" - "@nomicfoundation/ethereumjs-tx" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - "@nomicfoundation/ethereumjs-vm" "7.0.1" + "@nomicfoundation/edr" "^0.6.5" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" - abort-controller "^3.0.0" adm-zip "^0.4.16" aggregate-error "^3.0.0" ansi-escapes "^4.3.0" - chalk "^2.4.2" - chokidar "^3.4.0" + boxen "^5.1.2" + chokidar "^4.0.0" ci-info "^2.0.0" debug "^4.1.1" enquirer "^2.3.0" env-paths "^2.2.0" ethereum-cryptography "^1.0.3" ethereumjs-abi "^0.6.8" - find-up "^2.1.0" + find-up "^5.0.0" fp-ts "1.19.3" fs-extra "^7.0.1" - glob "7.2.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" + json-stream-stringify "^3.1.4" keccak "^3.0.2" lodash "^4.17.11" mnemonist "^0.38.0" mocha "^10.0.0" p-map "^4.0.0" - qs "^6.7.0" + picocolors "^1.1.0" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - solc "0.7.3" + solc "0.8.26" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" + tinyglobby "^0.2.6" tsort "0.0.1" undici "^5.14.0" uuid "^8.3.2" @@ -7096,11 +6972,6 @@ js-cookie@^2.2.1: resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== -js-sdsl@^4.1.4: - version "4.4.1" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.1.tgz#9e3c7b566d8d9a7e1fe8fc26d00b5ab0f8918ab3" - integrity sha512-6Gsx8R0RucyePbWqPssR8DyfuXmLBooYN5cZFZKjHGnQuaf7pEzhtpceagJxVu4LqhYY5EYA7nko3FmeHZ1KbA== - js-sha3@0.5.7, js-sha3@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" @@ -7196,6 +7067,11 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== +json-stream-stringify@^3.1.4: + version "3.1.6" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz#ebe32193876fb99d4ec9f612389a8d8e2b5d54d4" + integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" @@ -7396,14 +7272,6 @@ level-ws@^2.0.0: readable-stream "^3.1.0" xtend "^4.0.1" -level@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394" - integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ== - dependencies: - browser-level "^1.0.1" - classic-level "^1.2.0" - leveldown@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" @@ -7457,14 +7325,6 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -7616,15 +7476,6 @@ memdown@^5.0.0: ltgt "~2.2.0" safe-buffer "~5.2.0" -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -7813,36 +7664,6 @@ mnemonist@^0.38.0: dependencies: obliterator "^2.0.0" -mocha@7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.1.2.tgz#8e40d198acf91a52ace122cd7599c9ab857b29e6" - integrity sha512-o96kdRKMKI3E8U0bjnfqW4QMk12MwZ4mhdBTf+B5a1q9+aq2HRnj+3ZdJu0B/ZhJeK78MgYuv6L8d/rA5AeBJA== - dependencies: - ansi-colors "3.2.3" - browser-stdout "1.3.1" - chokidar "3.3.0" - debug "3.2.6" - diff "3.5.0" - escape-string-regexp "1.0.5" - find-up "3.0.0" - glob "7.1.3" - growl "1.10.5" - he "1.2.0" - js-yaml "3.13.1" - log-symbols "3.0.0" - minimatch "3.0.4" - mkdirp "0.5.5" - ms "2.1.1" - node-environment-flags "1.0.6" - object.assign "4.1.0" - strip-json-comments "2.0.1" - supports-color "6.0.0" - which "1.3.1" - wide-align "1.1.3" - yargs "13.3.2" - yargs-parser "13.1.2" - yargs-unparser "1.6.0" - mocha@^10.0.0, mocha@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" @@ -7905,7 +7726,7 @@ mock-fs@^4.1.0: resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== -module-error@^1.0.1, module-error@^1.0.2: +module-error@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== @@ -7999,11 +7820,6 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== -napi-macros@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" - integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== - napi-macros@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" @@ -8270,13 +8086,6 @@ p-cancelable@^3.0.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -8291,13 +8100,6 @@ p-limit@^3.0.2: dependencies: yocto-queue "^0.1.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -8319,11 +8121,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -8462,11 +8259,21 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== +picocolors@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -8633,7 +8440,7 @@ qs@6.11.0: dependencies: side-channel "^1.0.4" -qs@^6.11.0, qs@^6.4.0, qs@^6.7.0, qs@^6.9.4: +qs@^6.11.0, qs@^6.4.0, qs@^6.9.4: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== @@ -8716,6 +8523,11 @@ readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" + integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== + readdirp@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" @@ -9004,13 +8816,6 @@ run-async@^2.2.0: resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -9142,6 +8947,11 @@ semver@^7.5.1: dependencies: lru-cache "^6.0.0" +semver@^7.6.2: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -9326,25 +9136,23 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== +solc@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.15.tgz#d274dca4d5a8b7d3c9295d4cbdc9291ee1c52152" + integrity sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w== dependencies: command-exists "^1.2.8" - commander "3.0.2" + commander "^8.1.0" follow-redirects "^1.12.1" - fs-extra "^0.30.0" js-sha3 "0.8.0" memorystream "^0.3.1" - require-from-string "^2.0.0" semver "^5.5.0" tmp "0.0.33" -solc@0.8.15: - version "0.8.15" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.15.tgz#d274dca4d5a8b7d3c9295d4cbdc9291ee1c52152" - integrity sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w== +solc@0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.26.tgz#afc78078953f6ab3e727c338a2fefcd80dd5b01a" + integrity sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g== dependencies: command-exists "^1.2.8" commander "^8.1.0" @@ -9431,24 +9239,23 @@ solidity-comments-extractor@^0.0.7: resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== -solidity-coverage@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.2.tgz#bc39604ab7ce0a3fa7767b126b44191830c07813" - integrity sha512-cv2bWb7lOXPE9/SSleDO6czkFiMHgP4NXPj+iW9W7iEKLBk7Cj0AGBiNmGX3V1totl9wjPrT0gHmABZKZt65rQ== +solidity-coverage@^0.8.14: + version "0.8.14" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.14.tgz#db9bfcc10e3bc369fc074b35b267d665bcc6ae2e" + integrity sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA== dependencies: "@ethersproject/abi" "^5.0.9" - "@solidity-parser/parser" "^0.14.1" + "@solidity-parser/parser" "^0.19.0" chalk "^2.4.2" death "^1.1.0" - detect-port "^1.3.0" difflib "^0.2.4" fs-extra "^8.1.0" ghost-testrpc "^0.0.2" global-modules "^2.0.0" globby "^10.0.1" jsonschema "^1.2.4" - lodash "^4.17.15" - mocha "7.1.2" + lodash "^4.17.21" + mocha "^10.2.0" node-emoji "^1.10.0" pify "^4.0.1" recursive-readdir "^2.2.2" @@ -9604,7 +9411,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9853,6 +9660,14 @@ timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== +tinyglobby@^0.2.6: + version "0.2.10" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f" + integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew== + dependencies: + fdir "^6.4.2" + picomatch "^4.0.2" + tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -10818,6 +10633,13 @@ wide-align@1.1.3: dependencies: string-width "^1.0.2 || 2" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"