diff --git a/.github/workflows/deploy-market.yaml b/.github/workflows/deploy-market.yaml index 39c472c73..81bd240bb 100644 --- a/.github/workflows/deploy-market.yaml +++ b/.github/workflows/deploy-market.yaml @@ -55,7 +55,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '18' - name: Install packages run: yarn install --non-interactive --frozen-lockfile @@ -69,7 +69,7 @@ jobs: - name: Run Deploy run: | yarn hardhat deploy --network ${{ github.event.inputs.network }} --deployment ${{ github.event.inputs.deployment }} ${{ fromJSON('["", "--simulate"]')[github.event.inputs.simulate == 'true'] }} - env: + env: DEBUG: true ETH_PK: "${{ inputs.eth_pk }}" NETWORK_PROVIDER: ${{ fromJSON('["", "http://localhost:8585"]')[github.event.inputs.eth_pk == ''] }} diff --git a/.github/workflows/enact-migration.yaml b/.github/workflows/enact-migration.yaml index d9120c2d4..caa5d0da9 100644 --- a/.github/workflows/enact-migration.yaml +++ b/.github/workflows/enact-migration.yaml @@ -94,7 +94,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '18' - name: Install packages run: yarn install --non-interactive --frozen-lockfile diff --git a/.github/workflows/prepare-migration.yaml b/.github/workflows/prepare-migration.yaml index b98832a04..70fc864cc 100644 --- a/.github/workflows/prepare-migration.yaml +++ b/.github/workflows/prepare-migration.yaml @@ -58,7 +58,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '18' - name: Install packages run: yarn install --non-interactive --frozen-lockfile diff --git a/.github/workflows/run-contract-linter.yaml b/.github/workflows/run-contract-linter.yaml index cc840f887..b56a23156 100644 --- a/.github/workflows/run-contract-linter.yaml +++ b/.github/workflows/run-contract-linter.yaml @@ -24,7 +24,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '18' - name: Install packages run: yarn install --non-interactive --frozen-lockfile && yarn build diff --git a/.github/workflows/run-coverage.yaml b/.github/workflows/run-coverage.yaml index 7eff80fba..b70496156 100644 --- a/.github/workflows/run-coverage.yaml +++ b/.github/workflows/run-coverage.yaml @@ -26,7 +26,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: 'yarn' - node-version: '16' + node-version: '18' - name: Install packages run: yarn install --non-interactive --frozen-lockfile diff --git a/.github/workflows/run-eslint.yaml b/.github/workflows/run-eslint.yaml index 42b758479..0a7cb40f3 100644 --- a/.github/workflows/run-eslint.yaml +++ b/.github/workflows/run-eslint.yaml @@ -24,7 +24,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: 'yarn' - node-version: '16' + node-version: '18' - name: Install packages run: yarn install --non-interactive --frozen-lockfile && yarn build diff --git a/.github/workflows/run-gas-profiler.yaml b/.github/workflows/run-gas-profiler.yaml index fb6718e73..c295420ec 100644 --- a/.github/workflows/run-gas-profiler.yaml +++ b/.github/workflows/run-gas-profiler.yaml @@ -24,7 +24,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '18' - name: Install packages run: yarn install --non-interactive --frozen-lockfile && yarn build diff --git a/.github/workflows/run-scenarios.yaml b/.github/workflows/run-scenarios.yaml index 4c0c97110..7acb1dbf6 100644 --- a/.github/workflows/run-scenarios.yaml +++ b/.github/workflows/run-scenarios.yaml @@ -31,7 +31,7 @@ jobs: - uses: actions/setup-node@v4 with: cache: 'yarn' - node-version: '16' + node-version: '18' - name: Cache Deployments uses: actions/cache@v4 diff --git a/.github/workflows/run-slither.yaml b/.github/workflows/run-slither.yaml index 80dfa2f8c..f8e031b6f 100644 --- a/.github/workflows/run-slither.yaml +++ b/.github/workflows/run-slither.yaml @@ -12,7 +12,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '18' - uses: actions/setup-python@v4 with: diff --git a/.github/workflows/run-unit-tests.yaml b/.github/workflows/run-unit-tests.yaml index a5e2d681d..f8734db2c 100644 --- a/.github/workflows/run-unit-tests.yaml +++ b/.github/workflows/run-unit-tests.yaml @@ -23,7 +23,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version: '16' + node-version: '18' - name: Install packages run: yarn install --non-interactive --frozen-lockfile diff --git a/contracts/IGovernorBravo.sol b/contracts/IGovernorBravo.sol index 99e0f00f1..b1f53215c 100644 --- a/contracts/IGovernorBravo.sol +++ b/contracts/IGovernorBravo.sol @@ -49,7 +49,8 @@ interface IGovernorBravo { function MIN_VOTING_DELAY() external view returns (uint256); function MIN_PROPOSAL_THRESHOLD() external view returns (uint256); - function comp() external view returns (address); + function token() external view returns (address); + function proposalEta(uint256) external view returns (uint256); function proposalCount() external view returns (uint256); function proposals(uint256 proposalId) external view returns (Proposal memory); function votingDelay() external view returns (uint256); @@ -58,7 +59,6 @@ interface IGovernorBravo { function propose( address[] memory targets, uint256[] memory values, - string[] memory signatures, bytes[] memory calldatas, string memory description ) external returns (uint256 proposalId); diff --git a/deployments/arbitrum/usdc/migrations/1735299626_update_comet_to_support_more_collaterals.ts b/deployments/arbitrum/usdc/migrations/1735299626_update_comet_to_support_more_collaterals.ts index 552151c5a..2535cfb94 100644 --- a/deployments/arbitrum/usdc/migrations/1735299626_update_comet_to_support_more_collaterals.ts +++ b/deployments/arbitrum/usdc/migrations/1735299626_update_comet_to_support_more_collaterals.ts @@ -13,7 +13,6 @@ let newCometExtAddressWETH: string; let newCometExtAddressUSDCE: string; const USDCE_COMET = '0xA5EDBDD9646f8dFF606d7448e414884C7d905dCA'; -const USDCE_EXT = '0x1B2E88cC7365d90e7E81392432482925BD8437E9'; const USDT_COMET = '0xd98Be00b5D27fc98112BdE293e487f8D4cA57d07'; const USDT_EXT = '0x698A949f3b4f7a5DdE236106F25Fa0eAcA0FcEF1'; const WETH_COMET = '0x6f7D514bbD4aFf3BcD1140B7344b32f063dEe486'; @@ -108,16 +107,8 @@ export default migration('1735299626_update_comet_to_support_more_collaterals', true ); - const extensionDelegateUSDCE = new Contract( - USDCE_EXT, - [ - 'function name() external view returns (string)', - 'function symbol() external view returns (string)', - ], - await deploymentManager.getSigner() - ); - const nameUSDCE = await extensionDelegateUSDCE.name(); - const symbolUSDCE = await extensionDelegateUSDCE.symbol(); + const nameUSDCE = 'Compound USDCe'; + const symbolUSDCE = 'cUSDCev3'; const _newCometExtUSDCE = await deploymentManager.deploy( 'CometExtAssetList', diff --git a/deployments/optimism/usdc/migrations/1735299799_update_comet_to_support_more_collaterals.ts b/deployments/optimism/usdc/migrations/1735299799_update_comet_to_support_more_collaterals.ts index 742c3536e..b4c1960e5 100644 --- a/deployments/optimism/usdc/migrations/1735299799_update_comet_to_support_more_collaterals.ts +++ b/deployments/optimism/usdc/migrations/1735299799_update_comet_to_support_more_collaterals.ts @@ -207,7 +207,7 @@ export default migration('1735299799_update_comet_to_support_more_collaterals', }, ]; - const description = '# Update USDC, USDT and WETH Comets on Optimism to support more collaterals\n\n## Proposal summary\n\nCompound Growth Program [AlphaGrowth] proposes to update 4 Comets to a new version, which supports up to 24 collaterals. This proposal takes the governance steps recommended and necessary to update Compound III USDT, USDC and WETH markets on Optimism. Simulations have confirmed the market’s readiness, as much as possible, using the [Comet scenario suite](https://github.com/compound-finance/comet/tree/main/scenario).\n\nDetailed information can be found on the corresponding [proposal pull request](https://github.com/compound-finance/comet/pull/904) and [forum discussion](https://www.comp.xyz/t/increase-amount-of-collaterals-in-comet/5465).\n\n\n## Proposal Actions\n\nThe first action sets the factory to the newly deployed factory, extension delegate to the newly deployed contract and deploys and upgrades Comet to a new version for all 3 comets: cUSDTv3, cUSDCv3 and cWETHv3.'; + const description = '# Update USDC, USDT and WETH Comets on Optimism to support more collaterals\n\n## Proposal summary\n\nCompound Growth Program [AlphaGrowth] proposes to update 3 Comets to a new version, which supports up to 24 collaterals. This proposal takes the governance steps recommended and necessary to update Compound III USDT, USDC and WETH markets on Optimism. Simulations have confirmed the market’s readiness, as much as possible, using the [Comet scenario suite](https://github.com/compound-finance/comet/tree/main/scenario).\n\nDetailed information can be found on the corresponding [proposal pull request](https://github.com/compound-finance/comet/pull/904) and [forum discussion](https://www.comp.xyz/t/increase-amount-of-collaterals-in-comet/5465).\n\n\n## Proposal Actions\n\nThe first action sets the factory to the newly deployed factory, extension delegate to the newly deployed contract and deploys and upgrades Comet to a new version for all 3 comets: cUSDTv3, cUSDCv3 and cWETHv3.'; const txn = await deploymentManager.retry(async () => trace( await governor.propose(...(await proposal(mainnetActions, description))) diff --git a/deployments/relations.ts b/deployments/relations.ts index 1655c90c6..d7aa853a9 100644 --- a/deployments/relations.ts +++ b/deployments/relations.ts @@ -100,11 +100,16 @@ const relationConfigMap: RelationConfigMap = { governor: { artifact: 'contracts/IProxy.sol:IProxy', delegates: { - field: async (governor) => governor.implementation(), + field: { + slot: '0x10d6a54a4754c8869d6886b5f5d7fbfa5b4522237ea5c60d11bc4e7a1ff9390b', + } }, relations: { COMP: { - field: async (governor) => governor.comp(), + field: async (governor) => { + if (governor.address === '0x309a862bbC1A00e45506cB8A802D1ff10004c8C0') return governor.token(); + return governor.comp(); + }, } } }, diff --git a/forge/test/Comet.t.sol b/forge/test/Comet.t.sol index 98ec5ab70..9428a501c 100644 --- a/forge/test/Comet.t.sol +++ b/forge/test/Comet.t.sol @@ -4,6 +4,9 @@ pragma solidity ^0.8.13; import "forge-std/Test.sol"; import "../../contracts/Comet.sol"; import "../../contracts/CometConfiguration.sol"; +import { CometExtAssetList } from "../../contracts/CometExtAssetList.sol"; +import { AssetListFactory } from "../../contracts/AssetListFactory.sol"; + contract CometTest is Test { Comet public comet; @@ -12,7 +15,7 @@ contract CometTest is Test { // XXX } - function testFailXXX() public { + function test_RevertIf_Condition_XXX() public { CometConfiguration.AssetConfig[] memory assets = new CometConfiguration.AssetConfig[](0); CometConfiguration.Configuration memory config = CometConfiguration.Configuration(address(0), @@ -36,6 +39,7 @@ contract CometTest is Test { 0, 0, assets); + vm.expectRevert(); comet = new Comet(config); } } diff --git a/hardhat.config.ts b/hardhat.config.ts index 81c5a6b90..1c33259e6 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -228,7 +228,17 @@ const config: HardhatUserConfig = { : { mnemonic: MNEMONIC, accountsBalance: (10n ** 36n).toString() }, // this should only be relied upon for test harnesses and coverage (which does not use viaIR flag) allowUnlimitedContractSize: true, - hardfork: 'shanghai' + hardfork: 'cancun', + chains: networkConfigs.reduce((acc, { chainId }) => { + if (chainId === 1) return acc; + acc[chainId] = { + hardforkHistory: { + berlin: 1, + london: 2, + }, + }; + return acc; + }, {}), }, }, diff --git a/package.json b/package.json index cb4495ca8..88a98ec0f 100644 --- a/package.json +++ b/package.json @@ -55,9 +55,10 @@ "undici": "^5.21.2" }, "devDependencies": { + "@nomicfoundation/ethereumjs-rlp": "^5.0.4", "@arbitrum/sdk": "^3.1.2", "@compound-finance/hardhat-import": "^1.0.3", - "@ethersproject/experimental": "^5.6.3", + "@ethersproject/experimental": "^5.7.0", "@nomiclabs/hardhat-ethers": "^2.0.4", "@nomiclabs/hardhat-etherscan": "3.1.7", "@safe-global/safe-core-sdk": "^3.3.2", @@ -75,7 +76,7 @@ "eslint": "^8.12.0", "ethers": "^5.7.2", "fast-glob": "^3.2.7", - "hardhat": "^2.12.2", + "hardhat": "2.22.14", "hardhat-chai-matchers": "https://github.com/jflatow/hardhat/releases/download/viaIR/nomicfoundation-hardhat-chai-matchers-v1.0.4.tgz", "hardhat-change-network": "^0.0.7", "hardhat-contract-sizer": "^2.10.0", diff --git a/plugins/deployment_manager/Deploy.ts b/plugins/deployment_manager/Deploy.ts index c4c45570c..01bf459de 100644 --- a/plugins/deployment_manager/Deploy.ts +++ b/plugins/deployment_manager/Deploy.ts @@ -8,7 +8,7 @@ import { putVerifyArgs } from './VerifyArgs'; import { Cache } from './Cache'; import { storeBuildFile } from './ContractMap'; import { BuildFile, TraceFn } from './Types'; -import { debug, getPrimaryContract, stringifyJson } from './Utils'; +import { debug, getPrimaryContract, stringifyJson, asyncCallWithTimeout } from './Utils'; import { VerifyArgs, verifyContract, VerificationStrategy } from './Verify'; export interface DeployOpts { @@ -20,6 +20,27 @@ export interface DeployOpts { trace?: TraceFn; // the trace fn to use verificationStrategy?: VerificationStrategy; // strategy for verifying contracts on etherscan } +/** + * Call an async function with a given amount of retries + * @param fn an async function that takes a signer as an argument. The function takes a signer + * because a new instance of a signer needs to be used on each retry + * @param retries the number of times to retry the function. Default is 7 retries + * @param timeLimit time limit before timeout in milliseconds + * @param wait time to wait between tries in milliseconds + */ +async function retry(fn: () => Promise, retries: number = 7, timeLimit?: number, wait: number = 500) { + try { + return await asyncCallWithTimeout(fn(), timeLimit); + } catch (e) { + if (retries === 0) throw e; + + console.warn(`Retrying with retries left: ${retries}, wait: ${wait}, error is: `, e); + await this.resetSignersPendingCounts(); + + await new Promise(ok => setTimeout(ok, wait)); + return retry(fn, retries - 1, timeLimit, wait * 2); + } +} async function doDeploy( name: string, @@ -105,16 +126,19 @@ export async function deploy( address: contract.address, constructorArguments: deployArgs, }; - if (deployOpts.verificationStrategy === 'lazy') { - // Cache params for verification - await putVerifyArgs(deployOpts.cache, contract.address, verifyArgs); - } else if (deployOpts.verificationStrategy === 'eager') { - await verifyContract( - verifyArgs, - hre, - deployOpts.raiseOnVerificationFailure - ); - } + + await retry(async () => { + if (deployOpts.verificationStrategy === 'lazy') { + // Cache params for verification + await putVerifyArgs(deployOpts.cache, contract.address, verifyArgs); + } else if (deployOpts.verificationStrategy === 'eager') { + await verifyContract( + verifyArgs, + hre, + deployOpts.raiseOnVerificationFailure + ); + } + }, 3, undefined, 5000); await maybeStoreCache(deployOpts, contract, buildFile); diff --git a/plugins/deployment_manager/Spider.ts b/plugins/deployment_manager/Spider.ts index 62e36570d..3af246c9a 100644 --- a/plugins/deployment_manager/Spider.ts +++ b/plugins/deployment_manager/Spider.ts @@ -1,4 +1,4 @@ -import { Contract } from 'ethers'; +import { Contract, constants } from 'ethers'; import { HardhatRuntimeEnvironment as HRE } from 'hardhat/types'; import { Cache } from './Cache'; @@ -42,6 +42,9 @@ function maybeStore(alias: Alias, address: Address, into: Aliases): boolean { if (maybeExists) { if (maybeExists === address) { return false; + } else if (maybeExists === constants.AddressZero && address !== constants.AddressZero) { + into.set(alias, address); + return true; } else { throw new Error(`Had ${alias} -> ${maybeExists}, not ${address}`); } diff --git a/plugins/scenario/World.ts b/plugins/scenario/World.ts index 35c0b53c6..e0e5cc7bb 100644 --- a/plugins/scenario/World.ts +++ b/plugins/scenario/World.ts @@ -40,7 +40,8 @@ export class World { const auxiliaryBase = hre.config.scenario.bases.find(b => b.name === this.base.auxiliaryBase); this.auxiliaryDeploymentManager = new DeploymentManager(auxiliaryBase.network, auxiliaryBase.deployment, await hreForBase(auxiliaryBase)); this.snapshotAuxiliaryDeploymentManager = this.auxiliaryDeploymentManager; - } + } + await this.deploymentManager.hre.network.provider.send('evm_mine'); } isRemoteFork(): boolean { diff --git a/plugins/scenario/utils/hreForBase.ts b/plugins/scenario/utils/hreForBase.ts index 616fdba1d..233cf9845 100644 --- a/plugins/scenario/utils/hreForBase.ts +++ b/plugins/scenario/utils/hreForBase.ts @@ -55,8 +55,8 @@ export async function nonForkedHreForBase(base: ForkSpec): Promise allows a user to authorize a manager', {}, async ({ comet, actors }) => { +scenario('Comet#allow > allows a user to authorize a manager', {}, async ({ comet, actors }, context) => { const { albert, betty } = actors; + await context.world.deploymentManager.hre.network.provider.send('evm_mine', []); + const txn = await albert.allow(betty, true); expect(await comet.isAllowed(albert.address, betty.address)).to.be.true; diff --git a/scenario/LiquidationScenario.ts b/scenario/LiquidationScenario.ts index c39389d65..051b7a0e4 100644 --- a/scenario/LiquidationScenario.ts +++ b/scenario/LiquidationScenario.ts @@ -210,7 +210,7 @@ scenario( Math.round(await timeUntilUnderwater({ comet, actor: albert, - }) * 1.1) // XXX why is this off? better to use a price constraint? + }) * 1.001) // XXX why is this off? better to use a price constraint? ); const ab0 = await betty.absorb({ absorber: betty.address, accounts: [albert.address] }); diff --git a/scenario/constraints/ProposalConstraint.ts b/scenario/constraints/ProposalConstraint.ts index 9c339eca4..54e995cc5 100644 --- a/scenario/constraints/ProposalConstraint.ts +++ b/scenario/constraints/ProposalConstraint.ts @@ -3,10 +3,10 @@ import { IGovernorBravo, ProposalState, OpenProposal } from '../context/Gov'; import { CometContext } from '../context/CometContext'; import { fetchLogs } from '../utils'; import { DeploymentManager } from '../../plugins/deployment_manager'; -import { isBridgedDeployment, executeOpenProposal, executeOpenProposalAndRelay } from '../utils'; +import { isBridgedDeployment, executeOpenProposal, voteForOpenProposal, executeOpenProposalAndRelay } from '../utils'; import { getOpenBridgedProposals, executeBridgedProposal } from '../utils/bridgeProposal'; -async function getOpenProposals(deploymentManager: DeploymentManager, governor: IGovernorBravo): Promise { +export async function getOpenProposals(deploymentManager: DeploymentManager, governor: IGovernorBravo): Promise { const timelockBuf = 30000; // XXX this should be timelock.delay + timelock.GRACE_PERIOD const votingDelay = (await governor.votingDelay()).toNumber(); const votingPeriod = (await governor.votingPeriod()).toNumber(); @@ -18,7 +18,7 @@ async function getOpenProposals(deploymentManager: DeploymentManager, governor: if (logs) { for (let log of logs) { if (log.args === undefined) continue; - const [id, , , , , , startBlock, endBlock] = log.args; + const [id, proposer, targets, values, signatures, calldatas, startBlock, endBlock] = log.args; const state = await governor.state(id); if ([ ProposalState.Pending, @@ -26,7 +26,18 @@ async function getOpenProposals(deploymentManager: DeploymentManager, governor: ProposalState.Succeeded, ProposalState.Queued, ].includes(state)) { - proposals.push({ id, startBlock, endBlock }); + proposals.push( + { + id, + proposer, + targets, + values, + signatures, + calldatas, + startBlock, + endBlock + } + ); } } } @@ -53,6 +64,11 @@ export class ProposalConstraint implements StaticConstra const governanceDeploymentManager = ctx.world.auxiliaryDeploymentManager || deploymentManager; const governor = await governanceDeploymentManager.contract('governor') as IGovernorBravo; const proposals = await getOpenProposals(governanceDeploymentManager, governor); + + for (const proposal of proposals) { + await voteForOpenProposal(governanceDeploymentManager, proposal); + } + for (const proposal of proposals) { const preExecutionBlockNumber = await ctx.world.deploymentManager.hre.ethers.provider.getBlockNumber(); let migrationData; diff --git a/scenario/constraints/UtilizationConstraint.ts b/scenario/constraints/UtilizationConstraint.ts index 4d962cbf7..d239a490f 100644 --- a/scenario/constraints/UtilizationConstraint.ts +++ b/scenario/constraints/UtilizationConstraint.ts @@ -58,6 +58,8 @@ export class UtilizationConstraint => { let comet = await context.getComet(); + const baseScale = (await comet.baseScale()).toBigInt(); + const basePrice = (await comet.getPrice(await comet.baseTokenPriceFeed())).toBigInt(); let baseToken = context.getAssetByAddress(await comet.baseToken()); let utilizationFactor = factor(utilization!); @@ -66,7 +68,7 @@ export class UtilizationConstraint 0) { await mineBlocks(dm, blocksUntilEnd); } @@ -466,13 +474,49 @@ export async function executeOpenProposal( // Execute proposal (maybe, w/ gas limit so we see if exec reverts, not a gas estimation error) if (await governor.state(id) == ProposalState.Queued) { const block = await dm.hre.ethers.provider.getBlock('latest'); - const proposal = await governor.proposals(id); - await setNextBlockTimestamp(dm, Math.max(block.timestamp, proposal.eta.toNumber()) + 1); + if(governor.address !== '0x309a862bbC1A00e45506cB8A802D1ff10004c8C0') { + const proposal = await governor.proposals(id); + await setNextBlockTimestamp(dm, Math.max(block.timestamp, proposal.eta.toNumber()) + 1); + } + else{ + const eta = await governor.proposalEta(id); + await setNextBlockTimestamp(dm, Math.max(block.timestamp, eta.toNumber()) + 1); + } await setNextBaseFeeToZero(dm); - await governor.execute(id, { gasPrice: 0, gasLimit: 24000000 }); + await governor.execute(id, { gasPrice: 0, gasLimit: 120000000 }); } await redeployRenzoOracle(dm); await mockAllRedstoneOracles(dm); + // mine a block + await dm.hre.ethers.provider.send('evm_mine', []); +} + +async function testnetPropose( + dm: DeploymentManager, + proposer: SignerWithAddress, + targets: string[], + values: BigNumberish[], + signatures: string[], + calldatas: string[], + description: string, + gasPrice: BigNumberish +) { + const governor = await dm.getContractOrThrow('governor'); + const testnetGovernor = new Contract( + governor.address, [ + 'function propose(address[] memory targets, uint256[] memory values, string[] memory signatures, bytes[] memory calldatas, string memory description) external returns (uint256 proposalId)', + 'event ProposalCreated(uint256 proposalId, address proposer, address[] targets, uint256[] values, string[] signatures, bytes[] calldatas, uint256 startBlock, uint256 endBlock, string description)' + ], governor.signer + ); + + return testnetGovernor.connect(proposer).propose( + targets, + values, + signatures, + calldatas, + description, + { gasPrice } + ); } // Instantly executes some actions through the governance proposal process @@ -488,20 +532,24 @@ export async function fastGovernanceExecute( await setNextBaseFeeToZero(dm); - const proposeTxn = await ( + const proposeTxn = dm.network === 'mainnet' ? await ( await governor.connect(proposer).propose( targets, values, - signatures, - calldatas, + calldatas.map((calldata, i) => { + return utils.id(signatures[i]).slice(0, 10) + calldata.slice(2); + }), 'FastExecuteProposal', { gasPrice: 0 } ) + ).wait() : await ( + await testnetPropose(dm, proposer, targets, values, signatures, calldatas, 'FastExecuteProposal', 0) ).wait(); const proposeEvent = proposeTxn.events.find(event => event.event === 'ProposalCreated'); const [id, , , , , , startBlock, endBlock] = proposeEvent.args; - await executeOpenProposal(dm, { id, startBlock, endBlock }); + await voteForOpenProposal(dm, { id, proposer: proposer.address, targets, values, signatures, calldatas, startBlock, endBlock }); + await executeOpenProposal(dm, { id, proposer: proposer.address, targets, values, signatures, calldatas, startBlock, endBlock }); } export async function fastL2GovernanceExecute( diff --git a/scenario/utils/isBridgeProposal.ts b/scenario/utils/isBridgeProposal.ts index 2f4f1218f..19fd2d6de 100644 --- a/scenario/utils/isBridgeProposal.ts +++ b/scenario/utils/isBridgeProposal.ts @@ -9,67 +9,72 @@ export async function isBridgeProposal( const bridgeNetwork = bridgeDeploymentManager.network; switch (bridgeNetwork) { case 'arbitrum': { - const governor = await governanceDeploymentManager.getContractOrThrow('governor'); const inbox = await governanceDeploymentManager.getContractOrThrow('arbitrumInbox'); const l1GatewayRouter = await governanceDeploymentManager.getContractOrThrow( 'arbitrumL1GatewayRouter' ); - const { targets } = await governor.getActions(openProposal.id); + const targets = openProposal.targets; return targets.includes(inbox.address) || targets.includes(l1GatewayRouter.address); } case 'polygon': { const { - governor, fxRoot, RootChainManager } = await governanceDeploymentManager.getContracts(); const bridgeAddresses = [fxRoot, RootChainManager] .filter(x => x) .map(x => x.address.toLowerCase()); - const { targets } = await governor.getActions(openProposal.id); + const targets = openProposal.targets; return targets.some(t => bridgeAddresses.includes(t.toLowerCase())); } case 'base': { - const governor = await governanceDeploymentManager.getContractOrThrow('governor'); const baseL1CrossDomainMessenger = await governanceDeploymentManager.getContractOrThrow( 'baseL1CrossDomainMessenger' ); const baseL1StandardBridge = await governanceDeploymentManager.getContractOrThrow( 'baseL1StandardBridge' ); - const { targets } = await governor.getActions(openProposal.id); const bridgeContracts = [baseL1CrossDomainMessenger.address, baseL1StandardBridge.address]; + const targets = openProposal.targets; return targets.some(t => bridgeContracts.includes(t)); } case 'linea': { - const governor = await governanceDeploymentManager.getContractOrThrow('governor'); const lineaMessageService = await governanceDeploymentManager.getContractOrThrow( 'lineaMessageService' ); - const { targets } = await governor.getActions(openProposal.id); - return targets.includes(lineaMessageService.address); + const lineaL1USDCBridge = await governanceDeploymentManager.getContractOrThrow( + 'lineaL1USDCBridge' + ); + const lineaL1TokenBridge = await governanceDeploymentManager.getContractOrThrow( + 'lineaL1TokenBridge' + ); + const bridgeContracts = [ + lineaMessageService.address, + lineaL1USDCBridge.address, + lineaL1TokenBridge.address + ]; + const targets = openProposal.targets; + return targets.some(t => bridgeContracts.includes(t)); } case 'optimism': { - const governor = await governanceDeploymentManager.getContractOrThrow('governor'); const opL1CrossDomainMessenger = await governanceDeploymentManager.getContractOrThrow( 'opL1CrossDomainMessenger' ); const opL1StandardBridge = await governanceDeploymentManager.getContractOrThrow( 'opL1StandardBridge' ); - const { targets } = await governor.getActions(openProposal.id); + const targets = openProposal.targets; const bridgeContracts = [opL1CrossDomainMessenger.address, opL1StandardBridge.address]; return targets.some(t => bridgeContracts.includes(t)); } case 'mantle': { - const governor = await governanceDeploymentManager.getContractOrThrow('governor'); const mantleL1CrossDomainMessenger = await governanceDeploymentManager.getContractOrThrow( 'mantleL1CrossDomainMessenger' ); const mantleL1StandardBridge = await governanceDeploymentManager.getContractOrThrow( 'mantleL1StandardBridge' ); - const { targets } = await governor.getActions(openProposal.id); + const targets = openProposal.targets; const bridgeContracts = [ mantleL1CrossDomainMessenger.address, mantleL1StandardBridge.address @@ -77,11 +82,10 @@ export async function isBridgeProposal( return targets.some(t => bridgeContracts.includes(t)); } case 'scroll': { - const governor = await governanceDeploymentManager.getContractOrThrow('governor'); const scrollMessenger = await governanceDeploymentManager.getContractOrThrow( 'scrollMessenger' ); - const { targets } = await governor.getActions(openProposal.id); + const targets = openProposal.targets; return targets.includes(scrollMessenger.address); } default: { diff --git a/scenario/utils/relayBaseMessage.ts b/scenario/utils/relayBaseMessage.ts index 3625deb78..5f1d19ee2 100644 --- a/scenario/utils/relayBaseMessage.ts +++ b/scenario/utils/relayBaseMessage.ts @@ -69,8 +69,8 @@ export default async function relayBaseMessage( const messageWithoutSigHash = '0x' + messageWithoutPrefix.slice(8); try { // 1a. Bridging ERC20 token - const { l1Token, _l2Token, _from, to, amount, _data } = ethers.utils.defaultAbiCoder.decode( - ['address l1Token', 'address l2Token', 'address from', 'address to', 'uint256 amount', 'bytes data'], + const { _l2Token, l1Token, _from, to, amount, _data } = ethers.utils.defaultAbiCoder.decode( + ['address l2Token', 'address l1Token', 'address from', 'address to', 'uint256 amount', 'bytes data'], messageWithoutSigHash ); diff --git a/scenario/utils/scenarioHelper.ts b/scenario/utils/scenarioHelper.ts index 65db50b97..343479954 100644 --- a/scenario/utils/scenarioHelper.ts +++ b/scenario/utils/scenarioHelper.ts @@ -60,7 +60,20 @@ export function getConfigForScenario(ctx: CometContext) { config.interestSeconds = 110; } + if (ctx.world.base.network === 'arbitrum' && ctx.world.base.deployment === 'usdc') { + config.withdrawAsset = 3500; + } + + if (ctx.world.base.network === 'arbitrum' && ctx.world.base.deployment === 'usdt') { + config.withdrawAsset = 3500; + } + if (ctx.world.base.network === 'arbitrum' && ctx.world.base.deployment === 'usdc.e') { + config.withdrawAsset = 7000; + config.bulkerAsset = 10000; + config.bulkerAsset1 = 10000; + config.transferAsset = 10000; + config.transferAsset1 = 10000; config.liquidationDenominator = 84; config.liquidationBase = 100000; config.liquidationBase1 = 50000; diff --git a/src/deploy/Network.ts b/src/deploy/Network.ts index db2e0438a..2a0907f73 100644 --- a/src/deploy/Network.ts +++ b/src/deploy/Network.ts @@ -27,7 +27,7 @@ export async function cloneGov( const COMP = await deploymentManager.clone('COMP', clone.comp, [admin.address]); - const governorImpl = await deploymentManager.clone('governor:implementation', clone.governorBravoImpl, []); + const governorImpl = await deploymentManager.clone('governor:implementation', clone.governorBravoImpl, [], 'mainnet', true); const governorProxy = await deploymentManager.clone('governor', clone.governorBravo, [ timelock.address, COMP.address, @@ -226,7 +226,7 @@ export async function deployNetworkComet( 'configurator:implementation', 'Configurator.sol', [], - maybeForce(deploySpec.cometMain) + maybeForce() ); // If we deploy a new proxy, we initialize it to the current/new impl @@ -259,7 +259,7 @@ export async function deployNetworkComet( // Call initializeStorage if storage not initialized // Note: we now rely on the fact that anyone may call, which helps separate the proposal await deploymentManager.idempotent( - async () => (await comet.totalsBasic()).lastAccrualTime == 0, + async () => (await comet.connect(admin).totalsBasic()).lastAccrualTime == 0, async () => { trace(`Initializing Comet at ${comet.address}`); trace(await wait(comet.connect(admin).initializeStorage())); @@ -338,5 +338,5 @@ export async function deployNetworkComet( } ); - return { comet, configurator, rewards }; + return { comet, configurator, rewards, cometFactory }; } diff --git a/src/deploy/index.ts b/src/deploy/index.ts index 9175cf457..d9fd03694 100644 --- a/src/deploy/index.ts +++ b/src/deploy/index.ts @@ -1,5 +1,5 @@ import { AssetConfigStruct } from '../../build/types/Comet'; -import { BigNumberish, Contract, PopulatedTransaction } from 'ethers'; +import { BigNumberish, Contract, PopulatedTransaction, utils } from 'ethers'; export { cloneGov, deployNetworkComet as deployComet, sameAddress } from './Network'; export { getConfiguration, getConfigurationStruct } from './NetworkConfiguration'; @@ -58,6 +58,13 @@ export interface TargetAction { export type ProposalAction = ContractAction | TargetAction; export type Proposal = [ + string[], // targets + BigNumberish[], // values + string[], // calldatas + string // description +]; + +export type TestnetProposal = [ string[], // targets BigNumberish[], // values string[], // signatures @@ -139,6 +146,7 @@ export const WHALES = { '0x2A82Ae142b2e62Cb7D10b55E323ACB1Cab663a26', // OP whale '0x8af3827a41c26c7f32c81e93bb66e837e0210d5c', // USDC whale '0xc45A479877e1e9Dfe9FcD4056c699575a1045dAA', // wstETH whale + '0x6e57181D6b4b7c138a6F956AD16DAF4f27FC5E04', // COMP whale ], mantle: [ '0x588846213A30fd36244e0ae0eBB2374516dA836C', // USDe whale @@ -146,6 +154,10 @@ export const WHALES = { '0x651C9D1F9da787688225f49d63ad1623ba89A8D5', // FBTC whale '0xC455fE28a76da80022d4C35A37eB08FF405Eb78f', // FBTC whale '0x524db930F0886CdE7B5FFFc920Aae85e98C2abfb', // FBTC whale + '0x651C9D1F9da787688225f49d63ad1623ba89A8D5', // FBTC whale + '0x72c7d27320e042417506e594697324dB5Fbf334C', // FBTC whale + '0x3880233e78966eb13a9c2881d5f162d646633178', // FBTC whale + '0x233493E9DC68e548AC27E4933A600A3A4682c0c3', // FBTC whale '0xCd83CbBFCE149d141A5171C3D6a0F0fCCeE225Ab', // COMP whale ], linea: [ @@ -157,6 +169,7 @@ export const WHALES = { '0x7160570BB153Edd0Ea1775EC2b2Ac9b65F1aB61B', // wstETH whale '0x0684FC172a0B8e6A65cF4684eDb2082272fe9050', // ezETH whale '0x3A0ee670EE34D889B52963bD20728dEcE4D9f8FE', // ezETH whale + '0x6a72F4F191720c411Cd1fF6A5EA8DeDEC3A64771', // USDT whale ], }; @@ -166,6 +179,26 @@ export async function calldata(req: Promise): Promise { + const targets = [], + values = [], + calldatas = []; + for (const action of actions) { + if (action['contract']) { + const { contract, value, signature, args } = action as ContractAction; + targets.push(contract.address); + values.push(value ?? 0); + calldatas.push(utils.id(signature).slice(0, 10) + (await calldata(contract.populateTransaction[signature](...args))).slice(2)); + } else { + const { target, value, signature, calldata } = action as TargetAction; + targets.push(target); + values.push(value ?? 0); + calldatas.push(utils.id(signature).slice(0, 10) + calldata.slice(2)); + } + } + return [targets, values, calldatas, description]; +} + +export async function testnetProposal(actions: ProposalAction[], description: string): Promise { const targets = [], values = [], signatures = [], @@ -185,5 +218,5 @@ export async function proposal(actions: ProposalAction[], description: string): calldatas.push(calldata); } } - return [targets, values, signatures, calldatas, description]; -} \ No newline at end of file + return [targets, values, signatures, calldatas, description]; +} diff --git a/tasks/deployment_manager/task.ts b/tasks/deployment_manager/task.ts index 5715a19a2..89446812c 100644 --- a/tasks/deployment_manager/task.ts +++ b/tasks/deployment_manager/task.ts @@ -74,7 +74,7 @@ task('deploy', 'Deploys market') maybeForkEnv, { writeCacheToDisk: !simulate || overwrite, // Don't write to disk when simulating, unless overwrite is set - verificationStrategy: 'lazy', + verificationStrategy: simulate? 'lazy' : 'eager', } ); @@ -261,7 +261,7 @@ task('deploy_and_migrate', 'Runs deploy and migration') maybeForkEnv, { writeCacheToDisk: !simulate || overwrite, // Don't write to disk when simulating, unless overwrite is set - verificationStrategy: 'lazy', + verificationStrategy: simulate? 'lazy' : 'eager', } ); diff --git a/yarn.lock b/yarn.lock index 6de081cc3..6f78aca3d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -33,42 +33,6 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@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" @@ -211,7 +175,7 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/transactions" "^5.7.0" -"@ethersproject/experimental@^5.6.3": +"@ethersproject/experimental@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/experimental/-/experimental-5.7.0.tgz#9759639434d37beaedfd8acab6f3af7db246b92d" integrity sha512-DWvhuw7Dg8JPyhMbh/CNYOwsTLjXRx/HGkacIL5rBocG8jJC0kmixwoK/J3YblO4vtcyBLMa+sV74RJZK2iyHg== @@ -333,7 +297,7 @@ bech32 "1.1.4" ws "7.4.6" -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": +"@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== @@ -583,18 +547,53 @@ "@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/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.4": + 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-block@^4.0.0": version "4.0.0" @@ -608,25 +607,6 @@ "@nomicfoundation/ethereumjs-util" "^8.0.0" ethereum-cryptography "0.1.3" -"@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-blockchain@^6.0.0": version "6.0.0" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.0.0.tgz#1a8c243a46d4d3691631f139bfb3a4a157187b0c" @@ -645,13 +625,12 @@ 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== +"@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: - "@nomicfoundation/ethereumjs-util" "9.0.1" - crc-32 "^1.2.0" + "@nomicfoundation/ethereumjs-util" "9.0.4" "@nomicfoundation/ethereumjs-common@^3.0.0": version "3.0.0" @@ -661,18 +640,6 @@ "@nomicfoundation/ethereumjs-util" "^8.0.0" 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-ethash@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.0.tgz#11539c32fe0990e1122ff987d1b84cfa34774e81" @@ -685,20 +652,6 @@ 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== - 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-evm@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.0.0.tgz#99cd173c03b59107c156a69c5e215409098a370b" @@ -713,28 +666,16 @@ mcl-wasm "^0.7.1" rustbn.js "~0.2.0" -"@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-rlp@5.0.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-rlp@^4.0.0", "@nomicfoundation/ethereumjs-rlp@^4.0.0-beta.2": version "4.0.0" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.0.tgz#d9a9c5f0f10310c8849b6525101de455a53e771d" integrity sha512-GaSOGk5QbUk4eBP5qFbpXoZoZUj/NrW7MRa0tKY4Ew4c2HAS0GXArEMAamtFrkazp0BO4K5p2ZCG3b2FmbShmw== -"@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-statemanager@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.0.tgz#14a9d4e1c828230368f7ab520c144c34d8721e4b" @@ -748,17 +689,6 @@ ethereum-cryptography "0.1.3" functional-red-black-tree "^1.0.1" -"@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== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.1" - "@nomicfoundation/ethereumjs-util" "9.0.1" - "@types/readable-stream" "^2.3.13" - ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" - "@nomicfoundation/ethereumjs-trie@^5.0.0": version "5.0.0" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.0.tgz#dcfbe3be53a94bc061c9767a396c16702bc2f5b7" @@ -769,16 +699,14 @@ 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== - 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-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-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" ethereum-cryptography "0.1.3" "@nomicfoundation/ethereumjs-tx@^4.0.0": @@ -791,13 +719,12 @@ "@nomicfoundation/ethereumjs-util" "^8.0.0" 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== +"@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.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.1" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" ethereum-cryptography "0.1.3" "@nomicfoundation/ethereumjs-util@^8.0.0": @@ -808,25 +735,6 @@ "@nomicfoundation/ethereumjs-rlp" "^4.0.0-beta.2" 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/ethereumjs-vm@^6.0.0": version "6.0.0" resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.0.0.tgz#2bb50d332bf41790b01a3767ffec3987585d1de6" @@ -1219,14 +1127,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/secp256k1@^4.0.1": version "4.0.3" resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" @@ -1425,6 +1325,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@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1695,6 +1602,20 @@ bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== +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" @@ -1827,16 +1748,11 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -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" @@ -1926,6 +1842,13 @@ chokidar@3.5.3, chokidar@^3.4.0: 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" + ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -1955,6 +1878,11 @@ clean-stack@^2.0.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" @@ -2066,6 +1994,11 @@ commander@3.0.2: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2690,7 +2623,7 @@ ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.5: ethereum-cryptography "^0.1.3" rlp "^2.2.4" -ethers@5.7.2, ethers@^5.1.0, ethers@^5.7.1, ethers@^5.7.2: +ethers@5.7.2, ethers@^5.1.0, ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -3260,33 +3193,27 @@ hardhat-gas-reporter@^1.0.7: eth-gas-reporter "^0.2.25" sha1 "^1.1.1" -hardhat@^2.0.4: - version "2.12.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.0.tgz#51e59f1ff4991bcb66d1a380ea807e6c15fcac34" - integrity sha512-mNJFbVG479HwOzxiaLxobyvED2M1aEAuPPYhEo1+88yicMDSTrU2JIS7vV+V0GSNQKaDoiHCmV6bcKjiljT/dQ== +hardhat@2.22.14: + version "2.22.14" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.14.tgz#389bb3789a52adc0b1a3b4bfc9b891239d5a2b42" + integrity sha512-sD8vHtS9l5QQVHzyPPe3auwZDJyZ0fG3Z9YENVa4oOqVEefCuHcPzdU736rei3zUKTqkX0zPIHkSMHpu02Fq1A== dependencies: "@ethersproject/abi" "^5.1.2" "@metamask/eth-sig-util" "^4.0.0" - "@nomicfoundation/ethereumjs-block" "^4.0.0" - "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" - "@nomicfoundation/ethereumjs-common" "^3.0.0" - "@nomicfoundation/ethereumjs-evm" "^1.0.0" - "@nomicfoundation/ethereumjs-rlp" "^4.0.0" - "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" - "@nomicfoundation/ethereumjs-trie" "^5.0.0" - "@nomicfoundation/ethereumjs-tx" "^4.0.0" - "@nomicfoundation/ethereumjs-util" "^8.0.0" - "@nomicfoundation/ethereumjs-vm" "^6.0.0" + "@nomicfoundation/edr" "^0.6.4" + "@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" + boxen "^5.1.2" chalk "^2.4.2" - chokidar "^3.4.0" + chokidar "^4.0.0" ci-info "^2.0.0" debug "^4.1.1" enquirer "^2.3.0" @@ -3299,40 +3226,40 @@ hardhat@^2.0.4: 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" raw-body "^2.4.1" resolve "1.17.0" semver "^6.3.0" - solc "0.7.3" + solc "0.8.26" source-map-support "^0.5.13" stacktrace-parser "^0.1.10" tsort "0.0.1" - undici "^5.4.0" + undici "^5.14.0" uuid "^8.3.2" ws "^7.4.6" -hardhat@^2.12.2: - version "2.14.0" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.14.0.tgz#b60c74861494aeb1b50803cf04cc47865a42b87a" - integrity sha512-73jsInY4zZahMSVFurSK+5TNCJTXMv+vemvGia0Ac34Mm19fYp6vEPVGF3sucbumszsYxiTT2TbS8Ii2dsDSoQ== +hardhat@^2.0.4: + version "2.12.0" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.12.0.tgz#51e59f1ff4991bcb66d1a380ea807e6c15fcac34" + integrity sha512-mNJFbVG479HwOzxiaLxobyvED2M1aEAuPPYhEo1+88yicMDSTrU2JIS7vV+V0GSNQKaDoiHCmV6bcKjiljT/dQ== 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/ethereumjs-block" "^4.0.0" + "@nomicfoundation/ethereumjs-blockchain" "^6.0.0" + "@nomicfoundation/ethereumjs-common" "^3.0.0" + "@nomicfoundation/ethereumjs-evm" "^1.0.0" + "@nomicfoundation/ethereumjs-rlp" "^4.0.0" + "@nomicfoundation/ethereumjs-statemanager" "^1.0.0" + "@nomicfoundation/ethereumjs-trie" "^5.0.0" + "@nomicfoundation/ethereumjs-tx" "^4.0.0" + "@nomicfoundation/ethereumjs-util" "^8.0.0" + "@nomicfoundation/ethereumjs-vm" "^6.0.0" "@nomicfoundation/solidity-analyzer" "^0.1.0" "@sentry/node" "^5.18.1" "@types/bn.js" "^5.1.0" @@ -3368,7 +3295,7 @@ hardhat@^2.12.2: source-map-support "^0.5.13" stacktrace-parser "^0.1.10" tsort "0.0.1" - undici "^5.14.0" + undici "^5.4.0" uuid "^8.3.2" ws "^7.4.6" @@ -3787,6 +3714,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, 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" @@ -4550,6 +4482,11 @@ readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.1.tgz#bd115327129672dc47f87408f05df9bd9ca3ef55" + integrity sha512-h80JrZu/MHUZCyHu5ciuoI0+WxsCxzxJTILn6Fs8rxSnFPh+UVHYfeIxK1nVGugMqkfC4vJcBOYbkfkwYK0+gw== + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -4925,6 +4862,19 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" +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" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + solhint@^3.3.6: version "3.3.7" resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.7.tgz#b5da4fedf7a0fee954cb613b6c55a5a2b0063aa7" @@ -5031,7 +4981,7 @@ string-width@^3.0.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.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== @@ -5678,6 +5628,13 @@ which@^1.1.1, which@^1.2.9: dependencies: isexe "^2.0.0" +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"