diff --git a/.env.example b/.env.example index ce2374d..9d26125 100644 --- a/.env.example +++ b/.env.example @@ -1,11 +1,55 @@ -DEPLOY_RPC_URL=https://sepolia.drpc.org -STARKNET_CORE_ADDRESS=0xE2Bb56ee936fd6433DC0F6e7e3b8365C906AA057 -L2_RECIPIENT_ADDRESS= -AGGREGATORS_FACTORY_ADDRESS= -ETHERSCAN_API_KEY= -PRIVATE_KEY= -PARENT_HASH_FETCHER= - -OFFLINE=true -ALCHEMY_URL=https://eth-goerli.g.alchemy.com/v2/ -ALCHEMY_URL_MAINNET=https://eth-goerli.g.alchemy.com/v2/ \ No newline at end of file +# ETHEREUM + +L1_PRIVATE_KEY= +L1_ETHERSCAN_API_KEY= + +# mainnet +L1_MAINNET_CHAINID=1 +L1_MAINNET_RPC= +L1_MAINNET_AGGREGATORS_FACTORY=0x5C189aEdEcBc07830B64Ec8CAE51ce38E4365286 + +# sepolia +L1_SEPOLIA_CHAINID=11155111 +L1_SEPOLIA_RPC= +L1_SEPOLIA_AGGREGATORS_FACTORY=0x70C61dd17b7207B450Cb7DeDC92C1707A07a1213 + +# ZKSYNC + +ZKSYNC_PRIVATE_KEY= +ZKSYNC_ETHERSCAN_API_KEY= + +# sepolia +ZKSYNC_SEPOLIA_CHAINID=300 +ZKSYNC_SEPOLIA_RPC=https://sepolia.era.zksync.dev +ZKSYNC_SEPOLIA_MAILBOX=0x9A6DE0f62Aa270A8bCB1e2610078650D539B1Ef9 +ZKSYNC_SEPOLIA_VERIFIER=https://explorer.sepolia.era.zksync.dev/contract_verification + +# OPTIMISM + +OPTIMISM_PRIVATE_KEY= +OPTIMISM_ETHERSCAN_API_KEY= + +# sepolia +OPTIMISM_SEPOLIA_CHAINID=11155420 +OPTIMISM_SEPOLIA_RPC= +OPTIMISM_SEPOLIA_ETHERSCAN_API_URL=https://api-sepolia-optimistic.etherscan.io/api +OPTIMISM_SEPOLIA_ETHERSCAN_BROWSER_URL=https://sepolia-optimism.etherscan.io/ +OPTIMISM_SEPOLIA_CROSS_DOMAIN_MESSENGER=0x58Cc85b8D04EA49cC6DBd3CbFFd00B4B8D6cb3ef + +# ARBITRUM + +ARBITRUM_PRIVATE_KEY= +ARBITRUM_ETHERSCAN_API_KEY= + +# sepolia +ARBITRUM_SEPOLIA_CHAINID=421614 +ARBITRUM_SEPOLIA_RPC= +ARBITRUM_SEPOLIA_ETHERSCAN_API_URL=https://api-sepolia.arbiscan.io/api +ARBITRUM_SEPOLIA_ETHERSCAN_BROWSER_URL=https://sepolia.arbiscan.io/ +ARBITRUM_SEPOLIA_INBOX=0xaAe29B0366299461418F5324a79Afc425BE5ae21 + +# STARKNET + +STARKNET_SEPOLIA_CORE_ADDRESS=0xE2Bb56ee936fd6433DC0F6e7e3b8365C906AA057 +STARKNET_MAINNET_CORE_ADDRESS=0xc662c410C0ECf747543f5bA90660f6ABeBD9C8c4 +STARKNET_RECIPIENT_ADDRESS= diff --git a/.gitignore b/.gitignore index 530bb33..b4189c8 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,24 @@ broadcast artifacts-zk/ cache-zk/ + +node_modules +.env + +# Hardhat files +/cache +/artifacts +cache_hardhat/ +cache_hardhat-zk/ +deployments-zk/ + +# TypeChain files +/typechain +/typechain-types + +# solidity-coverage files +/coverage +/coverage.json + +# Hardhat Ignition default folder for deployments against a local node +ignition/deployments/chain-31337 diff --git a/README.md b/README.md index d49f027..51e51da 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,9 @@ forge install # Running tests requires .env to be configured forge test + +# Compile with hardhat +npx hardhat compile ``` ## Contracts Overview @@ -49,7 +52,16 @@ However, the contracts are designed to be chain-agnostic and can be used with an ## Deployment -`pnpm run deploy` +`pnpm run deploy:CONNECTION` + +Possible connections: + +- `11155111_to_11155111` - sepolia -> sepolia +- `11155111_to_300` - sepolia -> zkSyncSepolia +- `11155111_to_11155420` - sepolia -> op sepolia +- `11155111_to_421614` - sepolia -> arbitrum sepolia + +If not all contracts were verified, run `pnpm run verify:CONNECTION`. ## Documentation diff --git a/foundry.toml b/foundry.toml index 6615537..ff8057c 100644 --- a/foundry.toml +++ b/foundry.toml @@ -5,7 +5,7 @@ remappings = [ "forge-std/=lib/forge-std/src/", "@openzeppelin/=lib/openzeppelin-contracts/", "solidity-mmr/=lib/solidity-mmr/src/", - "@optimism/libraries=src/lib/external", + "@optimism/libraries/=src/lib/external/", ] out = 'out' libs = ['lib'] @@ -18,6 +18,4 @@ evm_version = "shanghai" sepolia = "https://sepolia.drpc.org" [etherscan] -goerli = { key = "${ETHERSCAN_API_KEY}" } - -# See more config options https://github.com/foundry-rs/foundry/tree/master/config +zksync_sepolia = { key = "${OPTIMISM_ETHERSCAN_API_KEY}", url = "https://explorer.sepolia.era.zksync.dev/contract_verification", chain = "300" } diff --git a/hardhat.config.ts b/hardhat.config.ts new file mode 100644 index 0000000..eba9d64 --- /dev/null +++ b/hardhat.config.ts @@ -0,0 +1,97 @@ +import { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox"; +import "@matterlabs/hardhat-zksync-deploy"; +import "@matterlabs/hardhat-zksync-solc"; +import "@nomicfoundation/hardhat-foundry"; +import "@matterlabs/hardhat-zksync-verify"; +import "@nomicfoundation/hardhat-verify"; +import { config as dotEnvConfig } from "dotenv"; + +dotEnvConfig(); + +const config: HardhatUserConfig = { + zksolc: {}, + solidity: { + version: "0.8.20", + settings: { + viaIR: true, + optimizer: { + enabled: true, + details: { + yulDetails: { + optimizerSteps: "u", + }, + }, + }, + }, + }, + paths: { + sources: "src", + deployPaths: "script", + }, + etherscan: { + apiKey: { + sepolia: process.env.L1_ETHERSCAN_API_KEY as string, + zkSyncSepolia: process.env.ZKSYNC_ETHERSCAN_API_KEY as string, + optimismSepolia: process.env.OPTIMISM_ETHERSCAN_API_KEY as string, + arbitrumSepolia: process.env.ARBITRUM_ETHERSCAN_API_KEY as string, + apeChainSepolia: process.env.APE_CHAIN_ETHERSCAN_API_KEY as string, + }, + customChains: [ + { + network: "optimismSepolia", + chainId: parseInt(process.env.OPTIMISM_SEPOLIA_CHAINID as string), + urls: { + apiURL: process.env.OPTIMISM_SEPOLIA_ETHERSCAN_API_URL as string, + browserURL: process.env + .OPTIMISM_SEPOLIA_ETHERSCAN_BROWSER_URL as string, + }, + }, + { + network: "arbitrumSepolia", + chainId: parseInt(process.env.ARBITRUM_SEPOLIA_CHAINID as string), + urls: { + apiURL: process.env.ARBITRUM_SEPOLIA_ETHERSCAN_API_URL as string, + browserURL: process.env + .ARBITRUM_SEPOLIA_ETHERSCAN_BROWSER_URL as string, + }, + }, + { + network: "apeChainSepolia", + chainId: parseInt(process.env.APE_CHAIN_SEPOLIA_CHAINID as string), + urls: { + apiURL: process.env.APE_CHAIN_SEPOLIA_ETHERSCAN_API_URL as string, + browserURL: process.env + .APE_CHAIN_SEPOLIA_ETHERSCAN_BROWSER_URL as string, + }, + }, + ], + }, + defaultNetwork: "zkSyncSepolia", + networks: { + sepolia: { + url: process.env.L1_SEPOLIA_RPC, + accounts: [process.env.L1_PRIVATE_KEY as string], + }, + zkSyncSepolia: { + url: process.env.ZKSYNC_SEPOLIA_RPC, + accounts: [process.env.ZKSYNC_PRIVATE_KEY as string], + ethNetwork: process.env.L1_SEPOLIA_RPC, + zksync: true, + verifyURL: process.env.ZKSYNC_SEPOLIA_VERIFIER, + }, + optimismSepolia: { + url: process.env.OPTIMISM_SEPOLIA_RPC, + accounts: [process.env.OPTIMISM_PRIVATE_KEY as string], + }, + arbitrumSepolia: { + url: process.env.ARBITRUM_SEPOLIA_RPC, + accounts: [process.env.ARBITRUM_PRIVATE_KEY as string], + }, + apeChainSepolia: { + url: process.env.APE_CHAIN_SEPOLIA_RPC, + accounts: [process.env.APE_CHAIN_PRIVATE_KEY as string], + }, + }, +}; +export default config; diff --git a/package.json b/package.json index 67cd3da..8a3341e 100644 --- a/package.json +++ b/package.json @@ -6,23 +6,41 @@ "license": "GPL-3.0", "scripts": { "preinstall": "npx only-allow pnpm", - "deploy:NativeParentHashesFetcher": "source .env; forge script script/Deploy_NativeParentHashesFetcher.s.sol:Deploy_NativeParentHashesFetcher --rpc-url $DEPLOY_RPC_URL --broadcast --verify -vvvv", - "deploy:L1ToL1MessagesSender": "source .env; forge script script/Deploy_L1ToL1MessagesSender.s.sol:Deploy_L1ToL1MessagesSender --rpc-url $DEPLOY_RPC_URL --broadcast --verify -vvvv", - "deploy:L1ToStarknetMessagesSender": "source .env; forge script script/Deploy_L1ToStarknetMessagesSender.s.sol:Deploy_L1ToStarknetMessagesSender --rpc-url $DEPLOY_RPC_URL --broadcast --verify -vvvv" + "deploy:11155111_to_300": "bash script/Deploy_11155111_to_300.sh", + "deploy:11155111_to_11155111": "npx hardhat run script/Deploy_11155111_to_11155111.ts --network sepolia", + "deploy:11155111_to_11155420": "bash script/Deploy_11155111_to_11155420.sh", + "deploy:11155111_to_421614": "bash script/Deploy_11155111_to_421614.sh", + "deploy:11155111_to_33111": "bash script/Deploy_11155111_to_33111.sh", + "verify:11155111_to_300": "bash script/Verify_11155111_to_300.sh", + "verify:11155111_to_11155111": "bash script/Verify_11155111_to_11155111.sh", + "verify:11155111_to_11155420": "bash script/Verify_11155111_to_11155420.sh", + "verify:11155111_to_421614": "bash script/Verify_11155111_to_421614.sh", + "verify:11155111_to_33111": "bash script/Verify_11155111_to_33111.sh" }, "dependencies": { "@accumulators/hashers": "^4.2.3", "@accumulators/memory": "^4.2.3", "@accumulators/merkle-mountain-range": "^4.2.3", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", "axios": "^1.6.2", - "ethers": "^5.7.2", "rlp": "2.2.7" }, "devDependencies": { + "@matterlabs/hardhat-zksync-deploy": "^1.5.0", + "@matterlabs/hardhat-zksync-solc": "^1.2.1", + "@matterlabs/hardhat-zksync-verify": "^1.6.0", + "@matterlabs/zksync-contracts": "^0.6.1", + "@nomicfoundation/hardhat-foundry": "^1.1.2", + "@nomicfoundation/hardhat-verify": "^2.0.9", "custom-env": "^2.0.2", "dotenv": "^16.3.1", + "ethers": "^6.13.2", + "hardhat": "^2.22.8", "only-allow": "^1.2.1", "prettier": "^3.1.1", - "prettier-plugin-solidity": "^1.2.0" + "prettier-plugin-solidity": "^1.2.0", + "ts-node": "^10.9.2", + "typescript": "^5.5.4", + "zksync-ethers": "^6.11.2" } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 41cdf04..d6466ae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,832 +1,5553 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -dependencies: - '@accumulators/hashers': - specifier: ^4.2.3 - version: 4.2.3 - '@accumulators/memory': - specifier: ^4.2.3 - version: 4.2.3 - '@accumulators/merkle-mountain-range': - specifier: ^4.2.3 - version: 4.2.3 - axios: - specifier: ^1.6.2 - version: 1.6.2 - ethers: - specifier: ^5.7.2 - version: 5.7.2 - rlp: - specifier: 2.2.7 - version: 2.2.7 - -devDependencies: - custom-env: - specifier: ^2.0.2 - version: 2.0.2 - dotenv: - specifier: ^16.3.1 - version: 16.3.1 - only-allow: - specifier: ^1.2.1 - version: 1.2.1 - prettier: - specifier: ^3.1.0 - version: 3.1.0 - prettier-plugin-solidity: - specifier: ^1.2.0 - version: 1.2.0(prettier@3.1.0) +importers: + + .: + dependencies: + '@accumulators/hashers': + specifier: ^4.2.3 + version: 4.2.3 + '@accumulators/memory': + specifier: ^4.2.3 + version: 4.2.3 + '@accumulators/merkle-mountain-range': + specifier: ^4.2.3 + version: 4.2.3 + '@nomicfoundation/hardhat-toolbox': + specifier: ^5.0.0 + version: 5.0.0(jqfxyfbi3v4n7yyzogs4zdbiqq) + axios: + specifier: ^1.6.2 + version: 1.6.2 + rlp: + specifier: 2.2.7 + version: 2.2.7 + devDependencies: + '@matterlabs/hardhat-zksync-deploy': + specifier: ^1.5.0 + version: 1.5.0(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))(zksync-ethers@6.11.2(ethers@6.13.2)) + '@matterlabs/hardhat-zksync-solc': + specifier: ^1.2.1 + version: 1.2.2(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@matterlabs/hardhat-zksync-verify': + specifier: ^1.6.0 + version: 1.6.0(@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@matterlabs/zksync-contracts': + specifier: ^0.6.1 + version: 0.6.1(@openzeppelin/contracts-upgradeable@4.6.0)(@openzeppelin/contracts@4.6.0) + '@nomicfoundation/hardhat-foundry': + specifier: ^1.1.2 + version: 1.1.2(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@nomicfoundation/hardhat-verify': + specifier: ^2.0.9 + version: 2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + custom-env: + specifier: ^2.0.2 + version: 2.0.2 + dotenv: + specifier: ^16.3.1 + version: 16.3.1 + ethers: + specifier: ^6.13.2 + version: 6.13.2 + hardhat: + specifier: ^2.22.8 + version: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + only-allow: + specifier: ^1.2.1 + version: 1.2.1 + prettier: + specifier: ^3.1.1 + version: 3.3.3 + prettier-plugin-solidity: + specifier: ^1.2.0 + version: 1.4.1(prettier@3.3.3) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@22.5.0)(typescript@5.5.4) + typescript: + specifier: ^5.5.4 + version: 5.5.4 + zksync-ethers: + specifier: ^6.11.2 + version: 6.11.2(ethers@6.13.2) packages: - /@accumulators/core@4.2.3: + '@accumulators/core@4.2.3': resolution: {integrity: sha512-+TzYeV2L+flGkOil6ltWOefoyPPkDU3eMlyuxQzwEwXRnKBgNdCFEzCpwDY3mzIr3ZvSTpM2kcBbmlHyIi5Isw==} - dev: false - /@accumulators/hashers@4.2.3: + '@accumulators/hashers@4.2.3': resolution: {integrity: sha512-Vdoo9zMhZTt8d6X2Ywi8DZuDBZikAJMCimze79Ygb9lF8cMuxbZiHDqTCWmVWrrYEE8ZGF3ff3OAXham2vG2JA==} - dependencies: - '@accumulators/core': 4.2.3 - '@ethersproject/solidity': 5.7.0 - circomlibjs: 0.1.7 - ethers: 6.6.0 - micro-starknet: 0.2.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@accumulators/memory@4.2.3: + '@accumulators/memory@4.2.3': resolution: {integrity: sha512-142jmxtYtIJTGmgIMr8xCKGJcsphnM1SGrnD819I3l06wJEHcWiBvXqQsbxGqd9obqKwhbhzIOS/gi53S7dwcw==} - dependencies: - '@accumulators/core': 4.2.3 - dev: false - /@accumulators/merkle-mountain-range@4.2.3: + '@accumulators/merkle-mountain-range@4.2.3': resolution: {integrity: sha512-+JIaJobDF0EDGKb8kdeLAHBsJEbcYMpAwJH6ucOH6PQC1ju8elEXih7gVnObagsN1kcBzqAaB9GcYJPiNhWKbQ==} - dependencies: - '@accumulators/core': 4.2.3 - ulid: 2.3.0 - dev: false - /@adraffy/ens-normalize@1.9.2: + '@adraffy/ens-normalize@1.10.1': + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + + '@adraffy/ens-normalize@1.9.2': resolution: {integrity: sha512-0h+FrQDqe2Wn+IIGFkTCd4aAwTJ+7834Ek1COohCyV26AXhwQ7WQaz+4F/nLOeVl/3BtWHOHLPsq46V8YB46Eg==} - dev: false - /@ethersproject/abi@5.7.0: + '@balena/dockerignore@1.0.2': + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@ethereumjs/rlp@4.0.1': + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + + '@ethereumjs/util@8.1.0': + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + + '@ethersproject/abi@5.7.0': resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} - dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - /@ethersproject/abstract-provider@5.7.0: + '@ethersproject/abstract-provider@5.7.0': resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - dev: false - /@ethersproject/abstract-signer@5.7.0: + '@ethersproject/abstract-signer@5.7.0': resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - dev: false - /@ethersproject/address@5.7.0: + '@ethersproject/address@5.6.1': + resolution: {integrity: sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q==} + + '@ethersproject/address@5.7.0': resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/rlp': 5.7.0 - dev: false - /@ethersproject/base64@5.7.0: + '@ethersproject/base64@5.7.0': resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} - dependencies: - '@ethersproject/bytes': 5.7.0 - dev: false - /@ethersproject/basex@5.7.0: + '@ethersproject/basex@5.7.0': resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/properties': 5.7.0 - dev: false - /@ethersproject/bignumber@5.7.0: + '@ethersproject/bignumber@5.7.0': resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - bn.js: 5.2.1 - dev: false - /@ethersproject/bytes@5.7.0: + '@ethersproject/bytes@5.7.0': resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} - dependencies: - '@ethersproject/logger': 5.7.0 - dev: false - /@ethersproject/constants@5.7.0: + '@ethersproject/constants@5.7.0': resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - dev: false - /@ethersproject/contracts@5.7.0: + '@ethersproject/contracts@5.7.0': resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} - dependencies: - '@ethersproject/abi': 5.7.0 - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - dev: false - /@ethersproject/hash@5.7.0: + '@ethersproject/hash@5.7.0': resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - /@ethersproject/hdnode@5.7.0: + '@ethersproject/hdnode@5.7.0': resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - dev: false - /@ethersproject/json-wallets@5.7.0: + '@ethersproject/json-wallets@5.7.0': resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - aes-js: 3.0.0 - scrypt-js: 3.0.1 - dev: false - /@ethersproject/keccak256@5.7.0: + '@ethersproject/keccak256@5.7.0': resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} - dependencies: - '@ethersproject/bytes': 5.7.0 - js-sha3: 0.8.0 - dev: false - /@ethersproject/logger@5.7.0: + '@ethersproject/logger@5.7.0': resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} - dev: false - /@ethersproject/networks@5.7.1: + '@ethersproject/networks@5.7.1': resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} - dependencies: - '@ethersproject/logger': 5.7.0 - dev: false - /@ethersproject/pbkdf2@5.7.0: + '@ethersproject/pbkdf2@5.7.0': resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/sha2': 5.7.0 - dev: false - /@ethersproject/properties@5.7.0: + '@ethersproject/properties@5.7.0': resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} - dependencies: - '@ethersproject/logger': 5.7.0 - dev: false - /@ethersproject/providers@5.7.2: + '@ethersproject/providers@5.7.2': resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - bech32: 1.1.4 - ws: 7.4.6 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /@ethersproject/random@5.7.0: + '@ethersproject/random@5.7.0': resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: false - /@ethersproject/rlp@5.7.0: + '@ethersproject/rlp@5.7.0': resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: false - /@ethersproject/sha2@5.7.0: + '@ethersproject/sha2@5.7.0': resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - hash.js: 1.1.7 - dev: false - /@ethersproject/signing-key@5.7.0: + '@ethersproject/signing-key@5.7.0': resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - bn.js: 5.2.1 - elliptic: 6.5.4 - hash.js: 1.1.7 - dev: false - /@ethersproject/solidity@5.7.0: + '@ethersproject/solidity@5.7.0': resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - /@ethersproject/strings@5.7.0: + '@ethersproject/strings@5.7.0': resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: false - /@ethersproject/transactions@5.7.0: + '@ethersproject/transactions@5.7.0': resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} - dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - dev: false - /@ethersproject/units@5.7.0: + '@ethersproject/units@5.7.0': resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - dev: false - /@ethersproject/wallet@5.7.0: + '@ethersproject/wallet@5.7.0': resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/json-wallets': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - dev: false - /@ethersproject/web@5.7.1: + '@ethersproject/web@5.7.1': resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} - dependencies: - '@ethersproject/base64': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - /@ethersproject/wordlists@5.7.0: + '@ethersproject/wordlists@5.7.0': resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - dev: false - /@noble/curves@1.0.0: - resolution: {integrity: sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==} + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@matterlabs/hardhat-zksync-deploy@1.5.0': + resolution: {integrity: sha512-7LAgYYwoKWHeR+3CyWEvA3NKBKtt7ktcr7SX6ZPgbEYqHAdXH02vxJZGwNADtMWpyYm8h+fEQkpPIgErD4NhmA==} + peerDependencies: + ethers: ^6.12.2 + hardhat: ^2.22.5 + zksync-ethers: ^6.8.0 + + '@matterlabs/hardhat-zksync-solc@1.2.2': + resolution: {integrity: sha512-UutCzXuAKh1RDR4NnF5bjmSsDdiUvyzeiQxKTu+ul244bthK2aw0nMeMTeT7XJakrVuLm3futIZiOXQjPieKbw==} + peerDependencies: + hardhat: ^2.22.5 + + '@matterlabs/hardhat-zksync-verify@1.6.0': + resolution: {integrity: sha512-RsWlQbI23BDXMsxTtvHXpzx1dBotI2p2trvdG+r1uN/KAmMJBOKIqxce2UNXl8skd5Gtysa4GPjXEp4yaf2KrA==} + peerDependencies: + '@nomicfoundation/hardhat-verify': ^2.0.8 + hardhat: ^2.22.5 + + '@matterlabs/zksync-contracts@0.6.1': + resolution: {integrity: sha512-+hucLw4DhGmTmQlXOTEtpboYCaOm/X2VJcWmnW4abNcOgQXEHX+mTxQrxEfPjIZT0ZE6z5FTUrOK9+RgUZwBMQ==} + peerDependencies: + '@openzeppelin/contracts': 4.6.0 + '@openzeppelin/contracts-upgradeable': 4.6.0 + + '@metamask/eth-sig-util@4.0.1': + resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} + engines: {node: '>=12.0.0'} + + '@noble/curves@1.0.0': + resolution: {integrity: sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==} + + '@noble/curves@1.2.0': + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + + '@noble/curves@1.4.2': + resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} + + '@noble/hashes@1.1.2': + resolution: {integrity: sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==} + + '@noble/hashes@1.2.0': + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + + '@noble/hashes@1.3.0': + resolution: {integrity: sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==} + + '@noble/hashes@1.3.2': + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + '@noble/hashes@1.3.3': + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + + '@noble/hashes@1.4.0': + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + + '@noble/secp256k1@1.7.1': + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nomicfoundation/edr-darwin-arm64@0.5.2': + resolution: {integrity: sha512-Gm4wOPKhbDjGTIRyFA2QUAPfCXA1AHxYOKt3yLSGJkQkdy9a5WW+qtqKeEKHc/+4wpJSLtsGQfpzyIzggFfo/A==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-darwin-x64@0.5.2': + resolution: {integrity: sha512-ClyABq2dFCsrYEED3/UIO0c7p4H1/4vvlswFlqUyBpOkJccr75qIYvahOSJRM62WgUFRhbSS0OJXFRwc/PwmVg==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-gnu@0.5.2': + resolution: {integrity: sha512-HWMTVk1iOabfvU2RvrKLDgtFjJZTC42CpHiw2h6rfpsgRqMahvIlx2jdjWYzFNy1jZKPTN1AStQ/91MRrg5KnA==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-arm64-musl@0.5.2': + resolution: {integrity: sha512-CwsQ10xFx/QAD5y3/g5alm9+jFVuhc7uYMhrZAu9UVF+KtVjeCvafj0PaVsZ8qyijjqVuVsJ8hD1x5ob7SMcGg==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-gnu@0.5.2': + resolution: {integrity: sha512-CWVCEdhWJ3fmUpzWHCRnC0/VLBDbqtqTGTR6yyY1Ep3S3BOrHEAvt7h5gx85r2vLcztisu2vlDq51auie4IU1A==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-linux-x64-musl@0.5.2': + resolution: {integrity: sha512-+aJDfwhkddy2pP5u1ISg3IZVAm0dO836tRlDTFWtvvSMQ5hRGqPcWwlsbobhDQsIxhPJyT7phL0orCg5W3WMeA==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr-win32-x64-msvc@0.5.2': + resolution: {integrity: sha512-CcvvuA3sAv7liFNPsIR/68YlH6rrybKzYttLlMr80d4GKJjwJ5OKb3YgE6FdZZnOfP19HEHhsLcE0DPLtY3r0w==} + engines: {node: '>= 18'} + + '@nomicfoundation/edr@0.5.2': + resolution: {integrity: sha512-hW/iLvUQZNTVjFyX/I40rtKvvDOqUEyIi96T28YaLfmPL+3LW2lxmYLUXEJ6MI14HzqxDqrLyhf6IbjAa2r3Dw==} + engines: {node: '>= 18'} + + '@nomicfoundation/ethereumjs-common@4.0.4': + resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==} + + '@nomicfoundation/ethereumjs-rlp@5.0.4': + resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==} + engines: {node: '>=18'} + hasBin: true + + '@nomicfoundation/ethereumjs-tx@5.0.4': + resolution: {integrity: sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + + '@nomicfoundation/ethereumjs-util@9.0.4': + resolution: {integrity: sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true + + '@nomicfoundation/hardhat-chai-matchers@2.0.7': + resolution: {integrity: sha512-RQfsiTwdf0SP+DtuNYvm4921X6VirCQq0Xyh+mnuGlTwEFSPZ/o27oQC+l+3Y/l48DDU7+ZcYBR+Fp+Rp94LfQ==} + peerDependencies: + '@nomicfoundation/hardhat-ethers': ^3.0.0 + chai: ^4.2.0 + ethers: ^6.1.0 + hardhat: ^2.9.4 + + '@nomicfoundation/hardhat-ethers@3.0.7': + resolution: {integrity: sha512-pxLWpDiqC208shoz/lMbVFbxcVxE+qIs8qDrwdcubWH99UO1p6uwXakMa36ICRfB/IEToSLDJGSsKhwY84feCQ==} + peerDependencies: + ethers: ^6.1.0 + hardhat: ^2.22.92.0.0 + + '@nomicfoundation/hardhat-foundry@1.1.2': + resolution: {integrity: sha512-f5Vhj3m2qvKGpr6NAINYwNgILDsai8dVCsFb1rAVLkJxOmD2pAtfCmOH5SBVr9yUI5B1z9rbTwPBJVrqnb+PXQ==} + peerDependencies: + hardhat: ^2.17.2 + + '@nomicfoundation/hardhat-ignition-ethers@0.15.5': + resolution: {integrity: sha512-W6s1QN9CFxzSVZS6w9Jcj3WLaK32z2FP5MxNU2OKY1Fn9ZzLr+miXbUbWYuRHl6dxrrl6sE8cv33Cybv19pmCg==} + peerDependencies: + '@nomicfoundation/hardhat-ethers': ^3.0.4 + '@nomicfoundation/hardhat-ignition': ^0.15.5 + '@nomicfoundation/ignition-core': ^0.15.5 + ethers: ^6.7.0 + hardhat: ^2.18.0 + + '@nomicfoundation/hardhat-ignition@0.15.5': + resolution: {integrity: sha512-Y5nhFXFqt4owA6Ooag8ZBFDF2RAZElMXViknVIsi3m45pbQimS50ti6FU8HxfRkDnBARa40CIn7UGV0hrelzDw==} + peerDependencies: + '@nomicfoundation/hardhat-verify': ^2.0.1 + hardhat: ^2.18.0 + + '@nomicfoundation/hardhat-network-helpers@1.0.11': + resolution: {integrity: sha512-uGPL7QSKvxrHRU69dx8jzoBvuztlLCtyFsbgfXIwIjnO3dqZRz2GNMHJoO3C3dIiUNM6jdNF4AUnoQKDscdYrA==} + peerDependencies: + hardhat: ^2.9.5 + + '@nomicfoundation/hardhat-toolbox@5.0.0': + resolution: {integrity: sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ==} + peerDependencies: + '@nomicfoundation/hardhat-chai-matchers': ^2.0.0 + '@nomicfoundation/hardhat-ethers': ^3.0.0 + '@nomicfoundation/hardhat-ignition-ethers': ^0.15.0 + '@nomicfoundation/hardhat-network-helpers': ^1.0.0 + '@nomicfoundation/hardhat-verify': ^2.0.0 + '@typechain/ethers-v6': ^0.5.0 + '@typechain/hardhat': ^9.0.0 + '@types/chai': ^4.2.0 + '@types/mocha': '>=9.1.0' + '@types/node': '>=18.0.0' + chai: ^4.2.0 + ethers: ^6.4.0 + hardhat: ^2.11.0 + hardhat-gas-reporter: ^1.0.8 + solidity-coverage: ^0.8.1 + ts-node: '>=8.0.0' + typechain: ^8.3.0 + typescript: '>=4.5.0' + + '@nomicfoundation/hardhat-verify@2.0.9': + resolution: {integrity: sha512-7kD8hu1+zlnX87gC+UN4S0HTKBnIsDfXZ/pproq1gYsK94hgCk+exvzXbwR0X2giiY/RZPkqY9oKRi0Uev91hQ==} + peerDependencies: + hardhat: ^2.22.72.0.4 + + '@nomicfoundation/ignition-core@0.15.5': + resolution: {integrity: sha512-FgvuoIXhakRSP524JzNQ4BviyzBBKpsFaOWubPZ4XACLT4/7vGqlJ/7DIn0D2NL2anQ2qs98/BNBY9WccXUX1Q==} + + '@nomicfoundation/ignition-ui@0.15.5': + resolution: {integrity: sha512-ZcE4rIn10qKahR4OqS8rl8NM2Fbg2QYiBXgMgj74ZI0++LlCcZgB5HyaBbX+lsnKHjTXtjYD3b+2mtg7jFbAMQ==} + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==} + engines: {node: '>= 12'} + + '@nomicfoundation/solidity-analyzer@0.1.2': + resolution: {integrity: sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==} + engines: {node: '>= 12'} + + '@nomiclabs/hardhat-docker@2.0.2': + resolution: {integrity: sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng==} + + '@openzeppelin/contracts-upgradeable@4.6.0': + resolution: {integrity: sha512-5OnVuO4HlkjSCJO165a4i2Pu1zQGzMs//o54LPrwUgxvEO2P3ax1QuaSI0cEHHTveA77guS0PnNugpR2JMsPfA==} + + '@openzeppelin/contracts@4.6.0': + resolution: {integrity: sha512-8vi4d50NNya/bQqCmaVzvHNmwHvS0OBKb7HNtuNwEE3scXWrP31fKQoGxNMT+KbzmrNZzatE3QK5p2gFONI/hg==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@scure/base@1.1.7': + resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==} + + '@scure/bip32@1.1.5': + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + + '@scure/bip32@1.4.0': + resolution: {integrity: sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==} + + '@scure/bip39@1.1.1': + resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} + + '@scure/bip39@1.3.0': + resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + + '@sentry/core@5.30.0': + resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} + engines: {node: '>=6'} + + '@sentry/hub@5.30.0': + resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} + engines: {node: '>=6'} + + '@sentry/minimal@5.30.0': + resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} + engines: {node: '>=6'} + + '@sentry/node@5.30.0': + resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} + engines: {node: '>=6'} + + '@sentry/tracing@5.30.0': + resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} + engines: {node: '>=6'} + + '@sentry/types@5.30.0': + resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} + engines: {node: '>=6'} + + '@sentry/utils@5.30.0': + resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} + engines: {node: '>=6'} + + '@sinonjs/commons@2.0.0': + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@11.2.2': + resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} + + '@sinonjs/samsam@8.0.0': + resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==} + + '@sinonjs/text-encoding@0.7.3': + resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} + + '@solidity-parser/parser@0.14.5': + resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} + + '@solidity-parser/parser@0.18.0': + resolution: {integrity: sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==} + + '@ts-morph/common@0.23.0': + resolution: {integrity: sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@typechain/ethers-v6@0.5.1': + resolution: {integrity: sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA==} + peerDependencies: + ethers: 6.x + typechain: ^8.3.2 + typescript: '>=4.7.0' + + '@typechain/hardhat@9.1.0': + resolution: {integrity: sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA==} + peerDependencies: + '@typechain/ethers-v6': ^0.5.1 + ethers: ^6.1.0 + hardhat: ^2.9.9 + typechain: ^8.3.2 + + '@types/bn.js@4.11.6': + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + + '@types/bn.js@5.1.5': + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + + '@types/chai-as-promised@7.1.8': + resolution: {integrity: sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw==} + + '@types/chai@4.3.17': + resolution: {integrity: sha512-zmZ21EWzR71B4Sscphjief5djsLre50M6lI622OSySTmn9DB3j+C3kWroHfBQWXbOBwbgg/M8CG/hUxDLIloow==} + + '@types/concat-stream@1.6.1': + resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} + + '@types/form-data@0.0.33': + resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} + + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + + '@types/lru-cache@5.1.1': + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/mocha@10.0.7': + resolution: {integrity: sha512-GN8yJ1mNTcFcah/wKEFIJckJx9iJLoMSzWcfRRuxz/Jk+U6KQNnml+etbtxFK8lPjzOw3zp4Ha/kjSst9fsHYw==} + + '@types/node@10.17.60': + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + + '@types/node@18.15.13': + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + + '@types/node@22.5.0': + resolution: {integrity: sha512-DkFrJOe+rfdHTqqMg0bSNlGlQ85hSoh2TPzZyhHsXnMtligRWpxUySiyw8FY14ITt24HVCiQPWxS3KO/QlGmWg==} + + '@types/node@8.10.66': + resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} + + '@types/pbkdf2@3.1.2': + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + + '@types/prettier@2.7.3': + resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==} + + '@types/qs@6.9.15': + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + + '@types/secp256k1@4.0.6': + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + + JSONStream@1.3.2: + resolution: {integrity: sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==} + hasBin: true + + abbrev@1.0.9: + resolution: {integrity: sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==} + + acorn-walk@8.3.3: + resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + engines: {node: '>=0.4.0'} + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + adm-zip@0.4.16: + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} + + aes-js@3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + + aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + amdefine@1.0.1: + resolution: {integrity: sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==} + engines: {node: '>=0.4.2'} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@3.0.1: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + antlr4ts@0.5.0-alpha.4: + resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-back@3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + + array-back@4.0.2: + resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} + engines: {node: '>=8'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async@1.5.2: + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + axios@1.6.2: + resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + + axios@1.7.4: + resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} + + b4a@1.6.6: + resolution: {integrity: sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base-x@3.0.10: + resolution: {integrity: sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + bech32@1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@1.2.3: + resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + blake-hash@2.0.0: + resolution: {integrity: sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w==} + engines: {node: '>= 10'} + + blake2b-wasm@2.4.0: + resolution: {integrity: sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==} + + blake2b@2.1.4: + resolution: {integrity: sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==} + + blakejs@1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + + bn.js@4.11.6: + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + + bn.js@4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + boxen@5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58check@2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + + buffer-alloc-unsafe@1.1.0: + resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + + buffer-alloc@1.2.0: + resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} + + buffer-fill@1.0.0: + resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buildcheck@0.0.6: + resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} + engines: {node: '>=10.0.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + cbor@8.1.0: + resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} + engines: {node: '>=12.19'} + + cbor@9.0.2: + resolution: {integrity: sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==} + engines: {node: '>=16'} + + chai-as-promised@7.1.2: + resolution: {integrity: sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw==} + peerDependencies: + chai: '>= 2.1.2 < 6' + + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + ci-info@2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + + cipher-base@1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + + circomlibjs@0.1.7: + resolution: {integrity: sha512-GRAUoAlKAsiiTa+PA725G9RmEmJJRc8tRFxw/zKktUxlQISGznT4hH4ESvW8FNTsrGg/nNd06sGP/Wlx0LUHVg==} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-boxes@2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + + cli-table3@0.5.1: + resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} + engines: {node: '>=6'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + code-block-writer@13.0.2: + resolution: {integrity: sha512-XfXzAGiStXSmCIwrkdfvc7FS5Dtj8yelCtyOf2p2skCAfvLd6zu0rGzuS9NSCO3bq1JKpFZ7tbKdKlcd5occQA==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-exists@1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + + command-line-args@5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + + command-line-usage@6.1.3: + resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} + engines: {node: '>=8.0.0'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + cookie@0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cpu-features@0.0.10: + resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} + engines: {node: '>=10.0.0'} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + custom-env@2.0.2: + resolution: {integrity: sha512-deuaipAA1Jhhjgma9z3A4cqO1kpWqXRxEmOMEDaIi6/u/HqRtchz1rb/Qju1PeSP7jS8EjPkJ6L1midhGkQo5Q==} + + death@1.1.0: + resolution: {integrity: sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w==} + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + difflib@0.2.4: + resolution: {integrity: sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + docker-modem@1.0.9: + resolution: {integrity: sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw==} + engines: {node: '>= 0.8'} + + docker-modem@5.0.3: + resolution: {integrity: sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==} + engines: {node: '>= 8.0'} + + dockerode@2.5.8: + resolution: {integrity: sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw==} + engines: {node: '>= 0.8'} + + dockerode@4.0.2: + resolution: {integrity: sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==} + engines: {node: '>= 8.0'} + + dotenv-expand@5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + + dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + elliptic@6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + + elliptic@6.5.7: + resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@1.8.1: + resolution: {integrity: sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==} + engines: {node: '>=0.12.0'} + hasBin: true + + esprima@2.7.3: + resolution: {integrity: sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==} + engines: {node: '>=0.10.0'} + hasBin: true + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + estraverse@1.9.3: + resolution: {integrity: sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==} + engines: {node: '>=0.10.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + eth-gas-reporter@0.2.27: + resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} + peerDependencies: + '@codechecks/client': ^0.1.0 + peerDependenciesMeta: + '@codechecks/client': + optional: true + + ethereum-bloom-filters@1.2.0: + resolution: {integrity: sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==} + + ethereum-cryptography@0.1.3: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + + ethereum-cryptography@1.2.0: + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} + + ethereum-cryptography@2.2.1: + resolution: {integrity: sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==} + + ethereumjs-abi@0.6.8: + resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} + + ethereumjs-util@6.2.1: + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} + + ethereumjs-util@7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + + ethers@5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + + ethers@6.13.2: + resolution: {integrity: sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==} + engines: {node: '>=14.0.0'} + + ethers@6.6.0: + resolution: {integrity: sha512-7D2U+n8eZYmh592VZqap9vBu50jN7YUDHqAmwBYTMntmUKC9RVgcqcFbd+3DTCOQ1jMyK6QHv1usbcfgiGaHOA==} + engines: {node: '>=14.0.0'} + + ethjs-unit@0.1.6: + resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} + engines: {node: '>=6.5.0', npm: '>=3'} + + ethjs-util@0.1.6: + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + ffjavascript@0.2.63: + resolution: {integrity: sha512-dBgdsfGks58b66JnUZeZpGxdMIDQ4QsD3VYlRJyFVrKQHb2kJy4R2gufx5oetrTxXPT+aEjg0dOvOLg1N0on4A==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-replace@3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@2.5.1: + resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + engines: {node: '>= 0.12'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + fp-ts@1.19.3: + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs-extra@7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-readdir-recursive@1.1.0: + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-port@3.2.0: + resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} + engines: {node: '>=4'} + + ghost-testrpc@0.0.2: + resolution: {integrity: sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ==} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@5.0.15: + resolution: {integrity: sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + hardhat-gas-reporter@1.0.10: + resolution: {integrity: sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==} + peerDependencies: + hardhat: ^2.0.2 + + hardhat@2.22.9: + resolution: {integrity: sha512-sWiuI/yRdFUPfndIvL+2H18Vs2Gav0XacCFYY5msT5dHOWkhLxESJySIk9j83mXL31aXL8+UMA9OgViFLexklg==} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + + has-flag@1.0.0: + resolution: {integrity: sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==} + engines: {node: '>=0.10.0'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hash-base@3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + http-basic@8.1.3: + resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} + engines: {node: '>=6.0.0'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-response-object@3.0.2: + resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + immer@10.0.2: + resolution: {integrity: sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA==} + + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + io-ts@1.10.4: + resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@2.0.0: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-hex-prefixed@1.0.0: + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + js-sha3@0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsonschema@1.4.1: + resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} + + just-extend@6.2.0: + resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} + + keccak@3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru_map@0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + markdown-table@1.1.3: + resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micro-ftch@0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + + micro-starknet@0.2.3: + resolution: {integrity: sha512-6XBcC+GerlwJSR4iA0VaeXtS2wrayWFcA4PEzrJPMuFmWCaUtuGIq5K/DB5F/XgnL54/zl2Bxo690Lj7mYVA8A==} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mnemonist@0.38.5: + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} + + mocha@10.7.3: + resolution: {integrity: sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==} + engines: {node: '>= 14.0.0'} + hasBin: true + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nan@2.20.0: + resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + + nanoassert@2.0.0: + resolution: {integrity: sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==} + + ndjson@2.0.0: + resolution: {integrity: sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==} + engines: {node: '>=10'} + hasBin: true + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nise@6.0.0: + resolution: {integrity: sha512-K8ePqo9BFvN31HXwEtTNGzgrPpmvgciDsFz8aztFjt4LqKO/JeFD8tBOeuDiCMXrIl/m1YvfH8auSpxfaD09wg==} + + node-addon-api@2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + + node-addon-api@3.2.1: + resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} + + node-emoji@1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} + hasBin: true + + nofilter@3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + + nopt@3.0.6: + resolution: {integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + number-to-bn@1.7.0: + resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} + engines: {node: '>=6.5.0', npm: '>=3'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + only-allow@1.2.1: + resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==} + hasBin: true + + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + + ordinal@1.0.3: + resolution: {integrity: sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ==} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + parse-cache-control@1.0.1: + resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-solidity@1.4.1: + resolution: {integrity: sha512-Mq8EtfacVZ/0+uDKTtHZGW3Aa7vEbX/BNx63hmVg6YTiTXSiuKP0amj0G6pGwjmLaOfymWh3QgXEZkjQbU8QRg==} + engines: {node: '>=16'} + peerDependencies: + prettier: '>=2.3.0' + + prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@1.0.3: + resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readable-stream@1.0.34: + resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} + + reduce-flatten@2.0.0: + resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} + engines: {node: '>=6'} + + req-cwd@2.0.0: + resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} + engines: {node: '>=4'} + + req-from@2.0.0: + resolution: {integrity: sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==} + engines: {node: '>=4'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-from@3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + + resolve@1.1.7: + resolution: {integrity: sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==} + + resolve@1.17.0: + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rlp@2.2.7: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sc-istanbul@0.4.6: + resolution: {integrity: sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g==} + hasBin: true + + scrypt-js@3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + + secp256k1@4.0.3: + resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} + engines: {node: '>=10.0.0'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + + sha1@1.1.1: + resolution: {integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sinon-chai@3.7.0: + resolution: {integrity: sha512-mf5NURdUaSdnatJx3uhoBOrY9dtL19fiOtAdT1Azxg3+lNJFiuN0uzaU3xX1LeAfL17kHQhTAJgpsfhbMJMY2g==} + peerDependencies: + chai: ^4.0.0 + sinon: '>=4.0.0' + + sinon@18.0.0: + resolution: {integrity: sha512-+dXDXzD1sBO6HlmZDd7mXZCR/y5ECiEiGCBSGuFD/kZ0bDTofPYc6JaeGmPSF+1j1MejGUWkORbYOLDyvqCWpA==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + solc@0.8.26: + resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} + engines: {node: '>=10.0.0'} + hasBin: true + + solidity-coverage@0.8.12: + resolution: {integrity: sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==} + hasBin: true + peerDependencies: + hardhat: ^2.11.0 + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.2.0: + resolution: {integrity: sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==} + engines: {node: '>=0.8.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + split-ca@1.0.1: + resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + + split2@3.2.2: + resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + ssh2@1.15.0: + resolution: {integrity: sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==} + engines: {node: '>=10.16.0'} + + stacktrace-parser@0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + string-format@2.0.0: + resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} + + string-width@2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@4.0.0: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-hex-prefix@1.0.0: + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supports-color@3.2.3: + resolution: {integrity: sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==} + engines: {node: '>=0.8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + sync-request@6.1.0: + resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} + engines: {node: '>=8.0.0'} + + sync-rpc@1.3.6: + resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} + + table-layout@1.0.2: + resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} + engines: {node: '>=8.0.0'} + + table@6.8.2: + resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} + engines: {node: '>=10.0.0'} + + tar-fs@1.16.3: + resolution: {integrity: sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==} + + tar-fs@2.0.1: + resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==} + + tar-stream@1.6.2: + resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==} + engines: {node: '>= 0.8.0'} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + then-request@6.0.2: + resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} + engines: {node: '>=6.0.0'} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-buffer@1.1.1: + resolution: {integrity: sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-command-line-args@2.5.1: + resolution: {integrity: sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw==} + hasBin: true + + ts-essentials@7.0.3: + resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} + peerDependencies: + typescript: '>=3.7.0' + + ts-morph@22.0.0: + resolution: {integrity: sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tsort@0.0.1: + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} + + tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + + typechain@8.3.2: + resolution: {integrity: sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q==} + hasBin: true + peerDependencies: + typescript: '>=4.3.0' + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + typical@4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + + typical@5.2.0: + resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} + engines: {node: '>=8'} + + uglify-js@3.19.2: + resolution: {integrity: sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + ulid@2.3.0: + resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==} + hasBin: true + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + + undici@6.19.8: + resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==} + engines: {node: '>=18.17'} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + wasmbuilder@0.0.16: + resolution: {integrity: sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==} + + wasmcurves@0.2.2: + resolution: {integrity: sha512-JRY908NkmKjFl4ytnTu5ED6AwPD+8VJ9oc94kdq7h5bIwbj0L4TDJ69mG+2aLs2SoCmGfqIesMWTEJjtYsoQXQ==} + + web-worker@1.2.0: + resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} + + web3-utils@1.10.4: + resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} + engines: {node: '>=8.0.0'} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-pm-runs@1.1.0: + resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} + engines: {node: '>=4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wordwrapjs@4.0.1: + resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} + engines: {node: '>=8.0.0'} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + zksync-ethers@6.11.2: + resolution: {integrity: sha512-m7KonDmrOaQGlA2BIM7JnejKPrEDXAnn0NY5HMU9Ynn8AApu81GHQiQkyHU9jtdHDlxR7c7+Sw+RgYS52qSf1A==} + engines: {node: '>=18.9.0'} + peerDependencies: + ethers: ^6.7.1 + +snapshots: + + '@accumulators/core@4.2.3': {} + + '@accumulators/hashers@4.2.3': + dependencies: + '@accumulators/core': 4.2.3 + '@ethersproject/solidity': 5.7.0 + circomlibjs: 0.1.7 + ethers: 6.6.0 + micro-starknet: 0.2.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@accumulators/memory@4.2.3': + dependencies: + '@accumulators/core': 4.2.3 + + '@accumulators/merkle-mountain-range@4.2.3': + dependencies: + '@accumulators/core': 4.2.3 + ulid: 2.3.0 + + '@adraffy/ens-normalize@1.10.1': {} + + '@adraffy/ens-normalize@1.9.2': {} + + '@balena/dockerignore@1.0.2': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@ethereumjs/rlp@4.0.1': {} + + '@ethereumjs/util@8.1.0': + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.2.1 + micro-ftch: 0.3.1 + + '@ethersproject/abi@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/abstract-provider@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + + '@ethersproject/abstract-signer@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/address@5.6.1': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/address@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + + '@ethersproject/base64@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + + '@ethersproject/basex@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + + '@ethersproject/bignumber@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + + '@ethersproject/bytes@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/constants@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + + '@ethersproject/contracts@5.7.0': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + + '@ethersproject/hash@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/hdnode@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/json-wallets@5.7.0': + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + + '@ethersproject/keccak256@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + js-sha3: 0.8.0 + + '@ethersproject/logger@5.7.0': {} + + '@ethersproject/networks@5.7.1': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/pbkdf2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/sha2': 5.7.0 + + '@ethersproject/properties@5.7.0': + dependencies: + '@ethersproject/logger': 5.7.0 + + '@ethersproject/providers@5.7.2': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@ethersproject/random@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/rlp@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/sha2@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + + '@ethersproject/signing-key@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + + '@ethersproject/solidity@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/strings@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/transactions@5.7.0': + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + + '@ethersproject/units@5.7.0': + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + + '@ethersproject/wallet@5.7.0': + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + + '@ethersproject/web@5.7.1': + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@ethersproject/wordlists@5.7.0': + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + + '@fastify/busboy@2.1.1': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@matterlabs/hardhat-zksync-deploy@1.5.0(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))(zksync-ethers@6.11.2(ethers@6.13.2))': + dependencies: + '@matterlabs/hardhat-zksync-solc': 1.2.2(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + chai: 4.5.0 + chalk: 4.1.2 + ethers: 6.13.2 + fs-extra: 11.2.0 + glob: 10.4.5 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + lodash: 4.17.21 + sinon: 18.0.0 + sinon-chai: 3.7.0(chai@4.5.0)(sinon@18.0.0) + ts-morph: 22.0.0 + zksync-ethers: 6.11.2(ethers@6.13.2) + transitivePeerDependencies: + - encoding + - supports-color + + '@matterlabs/hardhat-zksync-solc@1.2.2(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))': + dependencies: + '@nomiclabs/hardhat-docker': 2.0.2 + chai: 4.5.0 + chalk: 4.1.2 + debug: 4.3.6(supports-color@8.1.1) + dockerode: 4.0.2 + fs-extra: 11.2.0 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + proper-lockfile: 4.1.2 + semver: 7.6.3 + sinon: 18.0.0 + sinon-chai: 3.7.0(chai@4.5.0)(sinon@18.0.0) + undici: 6.19.8 + transitivePeerDependencies: + - encoding + - supports-color + + '@matterlabs/hardhat-zksync-verify@1.6.0(@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 + '@matterlabs/hardhat-zksync-solc': 1.2.2(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@nomicfoundation/hardhat-verify': 2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + axios: 1.7.4(debug@4.3.6) + cbor: 9.0.2 + chai: 4.5.0 + chalk: 4.1.2 + debug: 4.3.6(supports-color@8.1.1) + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + semver: 7.6.3 + sinon: 18.0.0 + sinon-chai: 3.7.0(chai@4.5.0)(sinon@18.0.0) + transitivePeerDependencies: + - encoding + - supports-color + + '@matterlabs/zksync-contracts@0.6.1(@openzeppelin/contracts-upgradeable@4.6.0)(@openzeppelin/contracts@4.6.0)': + dependencies: + '@openzeppelin/contracts': 4.6.0 + '@openzeppelin/contracts-upgradeable': 4.6.0 + + '@metamask/eth-sig-util@4.0.1': + dependencies: + ethereumjs-abi: 0.6.8 + ethereumjs-util: 6.2.1 + ethjs-util: 0.1.6 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + + '@noble/curves@1.0.0': + dependencies: + '@noble/hashes': 1.3.0 + + '@noble/curves@1.2.0': + dependencies: + '@noble/hashes': 1.3.2 + + '@noble/curves@1.4.2': + dependencies: + '@noble/hashes': 1.4.0 + + '@noble/hashes@1.1.2': {} + + '@noble/hashes@1.2.0': {} + + '@noble/hashes@1.3.0': {} + + '@noble/hashes@1.3.2': {} + + '@noble/hashes@1.3.3': {} + + '@noble/hashes@1.4.0': {} + + '@noble/secp256k1@1.7.1': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@nomicfoundation/edr-darwin-arm64@0.5.2': {} + + '@nomicfoundation/edr-darwin-x64@0.5.2': {} + + '@nomicfoundation/edr-linux-arm64-gnu@0.5.2': {} + + '@nomicfoundation/edr-linux-arm64-musl@0.5.2': {} + + '@nomicfoundation/edr-linux-x64-gnu@0.5.2': {} + + '@nomicfoundation/edr-linux-x64-musl@0.5.2': {} + + '@nomicfoundation/edr-win32-x64-msvc@0.5.2': {} + + '@nomicfoundation/edr@0.5.2': + dependencies: + '@nomicfoundation/edr-darwin-arm64': 0.5.2 + '@nomicfoundation/edr-darwin-x64': 0.5.2 + '@nomicfoundation/edr-linux-arm64-gnu': 0.5.2 + '@nomicfoundation/edr-linux-arm64-musl': 0.5.2 + '@nomicfoundation/edr-linux-x64-gnu': 0.5.2 + '@nomicfoundation/edr-linux-x64-musl': 0.5.2 + '@nomicfoundation/edr-win32-x64-msvc': 0.5.2 + + '@nomicfoundation/ethereumjs-common@4.0.4': + dependencies: + '@nomicfoundation/ethereumjs-util': 9.0.4 + transitivePeerDependencies: + - c-kzg + + '@nomicfoundation/ethereumjs-rlp@5.0.4': {} + + '@nomicfoundation/ethereumjs-tx@5.0.4': + dependencies: + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-rlp': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 + ethereum-cryptography: 0.1.3 + + '@nomicfoundation/ethereumjs-util@9.0.4': + dependencies: + '@nomicfoundation/ethereumjs-rlp': 5.0.4 + ethereum-cryptography: 0.1.3 + + '@nomicfoundation/hardhat-chai-matchers@2.0.7(@nomicfoundation/hardhat-ethers@3.0.7(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(chai@4.5.0)(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))': + dependencies: + '@nomicfoundation/hardhat-ethers': 3.0.7(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@types/chai-as-promised': 7.1.8 + chai: 4.5.0 + chai-as-promised: 7.1.2(chai@4.5.0) + deep-eql: 4.1.4 + ethers: 6.13.2 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + ordinal: 1.0.3 + + '@nomicfoundation/hardhat-ethers@3.0.7(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))': + dependencies: + debug: 4.3.6(supports-color@8.1.1) + ethers: 6.13.2 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + lodash.isequal: 4.5.0 + transitivePeerDependencies: + - supports-color + + '@nomicfoundation/hardhat-foundry@1.1.2(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))': + dependencies: + chalk: 2.4.2 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + + '@nomicfoundation/hardhat-ignition-ethers@0.15.5(@nomicfoundation/hardhat-ethers@3.0.7(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(@nomicfoundation/hardhat-ignition@0.15.5(@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(@nomicfoundation/ignition-core@0.15.5)(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))': + dependencies: + '@nomicfoundation/hardhat-ethers': 3.0.7(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@nomicfoundation/hardhat-ignition': 0.15.5(@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@nomicfoundation/ignition-core': 0.15.5 + ethers: 6.13.2 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + + '@nomicfoundation/hardhat-ignition@0.15.5(@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))': + dependencies: + '@nomicfoundation/hardhat-verify': 2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@nomicfoundation/ignition-core': 0.15.5 + '@nomicfoundation/ignition-ui': 0.15.5 + chalk: 4.1.2 + debug: 4.3.6(supports-color@8.1.1) + fs-extra: 10.1.0 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + prompts: 2.4.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@nomicfoundation/hardhat-network-helpers@1.0.11(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))': + dependencies: + ethereumjs-util: 7.1.5 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + + '@nomicfoundation/hardhat-toolbox@5.0.0(jqfxyfbi3v4n7yyzogs4zdbiqq)': + dependencies: + '@nomicfoundation/hardhat-chai-matchers': 2.0.7(@nomicfoundation/hardhat-ethers@3.0.7(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(chai@4.5.0)(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@nomicfoundation/hardhat-ethers': 3.0.7(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@nomicfoundation/hardhat-ignition-ethers': 0.15.5(@nomicfoundation/hardhat-ethers@3.0.7(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(@nomicfoundation/hardhat-ignition@0.15.5(@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)))(@nomicfoundation/ignition-core@0.15.5)(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@nomicfoundation/hardhat-network-helpers': 1.0.11(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@nomicfoundation/hardhat-verify': 2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + '@typechain/ethers-v6': 0.5.1(ethers@6.13.2)(typechain@8.3.2(typescript@5.5.4))(typescript@5.5.4) + '@typechain/hardhat': 9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.2)(typechain@8.3.2(typescript@5.5.4))(typescript@5.5.4))(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))(typechain@8.3.2(typescript@5.5.4)) + '@types/chai': 4.3.17 + '@types/mocha': 10.0.7 + '@types/node': 22.5.0 + chai: 4.5.0 + ethers: 6.13.2 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + hardhat-gas-reporter: 1.0.10(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + solidity-coverage: 0.8.12(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)) + ts-node: 10.9.2(@types/node@22.5.0)(typescript@5.5.4) + typechain: 8.3.2(typescript@5.5.4) + typescript: 5.5.4 + + '@nomicfoundation/hardhat-verify@2.0.9(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))': + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 + cbor: 8.1.0 + chalk: 2.4.2 + debug: 4.3.6(supports-color@8.1.1) + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + lodash.clonedeep: 4.5.0 + semver: 6.3.1 + table: 6.8.2 + undici: 5.28.4 + transitivePeerDependencies: + - supports-color + + '@nomicfoundation/ignition-core@0.15.5': + dependencies: + '@ethersproject/address': 5.6.1 + '@nomicfoundation/solidity-analyzer': 0.1.2 + cbor: 9.0.2 + debug: 4.3.6(supports-color@8.1.1) + ethers: 6.13.2 + fs-extra: 10.1.0 + immer: 10.0.2 + lodash: 4.17.21 + ndjson: 2.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@nomicfoundation/ignition-ui@0.15.5': {} + + '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': + optional: true + + '@nomicfoundation/solidity-analyzer@0.1.2': + optionalDependencies: + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.2 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.2 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.2 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.2 + + '@nomiclabs/hardhat-docker@2.0.2': + dependencies: + dockerode: 2.5.8 + fs-extra: 7.0.1 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + - supports-color + + '@openzeppelin/contracts-upgradeable@4.6.0': {} + + '@openzeppelin/contracts@4.6.0': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@scure/base@1.1.7': {} + + '@scure/bip32@1.1.5': + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.7 + + '@scure/bip32@1.4.0': + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.7 + + '@scure/bip39@1.1.1': + dependencies: + '@noble/hashes': 1.2.0 + '@scure/base': 1.1.7 + + '@scure/bip39@1.3.0': + dependencies: + '@noble/hashes': 1.4.0 + '@scure/base': 1.1.7 + + '@sentry/core@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/hub@5.30.0': + dependencies: + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/minimal@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/types': 5.30.0 + tslib: 1.14.1 + + '@sentry/node@5.30.0': + dependencies: + '@sentry/core': 5.30.0 + '@sentry/hub': 5.30.0 + '@sentry/tracing': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + + '@sentry/tracing@5.30.0': + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + + '@sentry/types@5.30.0': {} + + '@sentry/utils@5.30.0': + dependencies: + '@sentry/types': 5.30.0 + tslib: 1.14.1 + + '@sinonjs/commons@2.0.0': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@11.2.2': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@sinonjs/samsam@8.0.0': + dependencies: + '@sinonjs/commons': 2.0.0 + lodash.get: 4.4.2 + type-detect: 4.1.0 + + '@sinonjs/text-encoding@0.7.3': {} + + '@solidity-parser/parser@0.14.5': + dependencies: + antlr4ts: 0.5.0-alpha.4 + + '@solidity-parser/parser@0.18.0': {} + + '@ts-morph/common@0.23.0': + dependencies: + fast-glob: 3.3.2 + minimatch: 9.0.5 + mkdirp: 3.0.1 + path-browserify: 1.0.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@typechain/ethers-v6@0.5.1(ethers@6.13.2)(typechain@8.3.2(typescript@5.5.4))(typescript@5.5.4)': + dependencies: + ethers: 6.13.2 + lodash: 4.17.21 + ts-essentials: 7.0.3(typescript@5.5.4) + typechain: 8.3.2(typescript@5.5.4) + typescript: 5.5.4 + + '@typechain/hardhat@9.1.0(@typechain/ethers-v6@0.5.1(ethers@6.13.2)(typechain@8.3.2(typescript@5.5.4))(typescript@5.5.4))(ethers@6.13.2)(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4))(typechain@8.3.2(typescript@5.5.4))': + dependencies: + '@typechain/ethers-v6': 0.5.1(ethers@6.13.2)(typechain@8.3.2(typescript@5.5.4))(typescript@5.5.4) + ethers: 6.13.2 + fs-extra: 9.1.0 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + typechain: 8.3.2(typescript@5.5.4) + + '@types/bn.js@4.11.6': + dependencies: + '@types/node': 22.5.0 + + '@types/bn.js@5.1.5': + dependencies: + '@types/node': 22.5.0 + + '@types/chai-as-promised@7.1.8': + dependencies: + '@types/chai': 4.3.17 + + '@types/chai@4.3.17': {} + + '@types/concat-stream@1.6.1': + dependencies: + '@types/node': 22.5.0 + + '@types/form-data@0.0.33': + dependencies: + '@types/node': 22.5.0 + + '@types/glob@7.2.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 22.5.0 + + '@types/lru-cache@5.1.1': {} + + '@types/minimatch@5.1.2': {} + + '@types/mocha@10.0.7': {} + + '@types/node@10.17.60': {} + + '@types/node@18.15.13': {} + + '@types/node@22.5.0': + dependencies: + undici-types: 6.19.8 + + '@types/node@8.10.66': {} + + '@types/pbkdf2@3.1.2': + dependencies: + '@types/node': 22.5.0 + + '@types/prettier@2.7.3': {} + + '@types/qs@6.9.15': {} + + '@types/secp256k1@4.0.6': + dependencies: + '@types/node': 22.5.0 + + JSONStream@1.3.2: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + abbrev@1.0.9: {} + + acorn-walk@8.3.3: + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + adm-zip@0.4.16: {} + + aes-js@3.0.0: {} + + aes-js@4.0.0-beta.5: {} + + agent-base@6.0.2: + dependencies: + debug: 4.3.6(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + amdefine@1.0.1: + optional: true + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@3.0.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + antlr4ts@0.5.0-alpha.4: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-back@3.1.0: {} + + array-back@4.0.2: {} + + array-union@2.1.0: {} + + array-uniq@1.0.3: {} + + asap@2.0.6: {} + + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assertion-error@1.1.0: {} + + astral-regex@2.0.0: {} + + async@1.5.2: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + axios@1.6.2: + dependencies: + follow-redirects: 1.15.6(debug@4.3.6) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.7.4(debug@4.3.6): + dependencies: + follow-redirects: 1.15.6(debug@4.3.6) + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + b4a@1.6.6: {} + + balanced-match@1.0.2: {} + + base-x@3.0.10: + dependencies: + safe-buffer: 5.2.1 + + base64-js@1.5.1: {} + + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + + bech32@1.1.4: {} + + binary-extensions@2.3.0: {} + + bl@1.2.3: + dependencies: + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + blake-hash@2.0.0: + dependencies: + node-addon-api: 3.2.1 + node-gyp-build: 4.8.1 + readable-stream: 3.6.2 + + blake2b-wasm@2.4.0: + dependencies: + b4a: 1.6.6 + nanoassert: 2.0.0 + + blake2b@2.1.4: + dependencies: + blake2b-wasm: 2.4.0 + nanoassert: 2.0.0 + + blakejs@1.2.1: {} + + bn.js@4.11.6: {} + + bn.js@4.12.0: {} + + bn.js@5.2.1: {} + + boxen@5.1.2: + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + browser-stdout@1.3.1: {} + + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + bs58@4.0.1: + dependencies: + base-x: 3.0.10 + + bs58check@2.1.2: + dependencies: + bs58: 4.0.1 + create-hash: 1.2.0 + safe-buffer: 5.2.1 + + buffer-alloc-unsafe@1.1.0: {} + + buffer-alloc@1.2.0: + dependencies: + buffer-alloc-unsafe: 1.1.0 + buffer-fill: 1.0.0 + + buffer-fill@1.0.0: {} + + buffer-from@1.1.2: {} + + buffer-xor@1.0.3: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buildcheck@0.0.6: + optional: true + + bytes@3.1.2: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + camelcase@6.3.0: {} + + caseless@0.12.0: {} + + cbor@8.1.0: + dependencies: + nofilter: 3.1.0 + + cbor@9.0.2: + dependencies: + nofilter: 3.1.0 + + chai-as-promised@7.1.2(chai@4.5.0): + dependencies: + chai: 4.5.0 + check-error: 1.0.3 + + chai@4.5.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + charenc@0.0.2: {} + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@1.1.4: {} + + ci-info@2.0.0: {} + + cipher-base@1.0.4: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + circomlibjs@0.1.7: + dependencies: + blake-hash: 2.0.0 + blake2b: 2.1.4 + ethers: 5.7.2 + ffjavascript: 0.2.63 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + clean-stack@2.2.0: {} + + cli-boxes@2.2.1: {} + + cli-table3@0.5.1: + dependencies: + object-assign: 4.1.1 + string-width: 2.1.1 + optionalDependencies: + colors: 1.4.0 + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + code-block-writer@13.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + colors@1.4.0: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + command-exists@1.2.9: {} + + command-line-args@5.2.1: + dependencies: + array-back: 3.1.0 + find-replace: 3.0.0 + lodash.camelcase: 4.3.0 + typical: 4.0.0 + + command-line-usage@6.1.3: + dependencies: + array-back: 4.0.2 + chalk: 2.4.2 + table-layout: 1.0.2 + typical: 5.2.0 + + commander@8.3.0: {} + + concat-map@0.0.1: {} + + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + cookie@0.4.2: {} + + core-util-is@1.0.3: {} + + cpu-features@0.0.10: + dependencies: + buildcheck: 0.0.6 + nan: 2.20.0 + optional: true + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + create-require@1.1.1: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + custom-env@2.0.2: + dependencies: + dotenv: 16.3.1 + dotenv-expand: 5.1.0 + + death@1.1.0: {} + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.6(supports-color@8.1.1): + dependencies: + ms: 2.1.2 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + delayed-stream@1.0.0: {} + + depd@2.0.0: {} + + diff@4.0.2: {} + + diff@5.2.0: {} + + difflib@0.2.4: + dependencies: + heap: 0.2.7 + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + docker-modem@1.0.9: + dependencies: + JSONStream: 1.3.2 + debug: 3.2.7 + readable-stream: 1.0.34 + split-ca: 1.0.1 + transitivePeerDependencies: + - supports-color + + docker-modem@5.0.3: + dependencies: + debug: 4.3.6(supports-color@8.1.1) + readable-stream: 3.6.2 + split-ca: 1.0.1 + ssh2: 1.15.0 + transitivePeerDependencies: + - supports-color + + dockerode@2.5.8: + dependencies: + concat-stream: 1.6.2 + docker-modem: 1.0.9 + tar-fs: 1.16.3 + transitivePeerDependencies: + - supports-color + + dockerode@4.0.2: + dependencies: + '@balena/dockerignore': 1.0.2 + docker-modem: 5.0.3 + tar-fs: 2.0.1 + transitivePeerDependencies: + - supports-color + + dotenv-expand@5.1.0: {} + + dotenv@16.3.1: {} + + eastasianwidth@0.2.0: {} + + elliptic@6.5.4: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + elliptic@6.5.7: + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + env-paths@2.2.1: {} + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + escalade@3.1.2: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escodegen@1.8.1: + dependencies: + esprima: 2.7.3 + estraverse: 1.9.3 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.2.0 + + esprima@2.7.3: {} + + esprima@4.0.1: {} + + estraverse@1.9.3: {} + + esutils@2.0.3: {} + + eth-gas-reporter@0.2.27: + dependencies: + '@solidity-parser/parser': 0.14.5 + axios: 1.6.2 + cli-table3: 0.5.1 + colors: 1.4.0 + ethereum-cryptography: 1.2.0 + ethers: 5.7.2 + fs-readdir-recursive: 1.1.0 + lodash: 4.17.21 + markdown-table: 1.1.3 + mocha: 10.7.3 + req-cwd: 2.0.0 + sha1: 1.1.1 + sync-request: 6.1.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + + ethereum-bloom-filters@1.2.0: + dependencies: + '@noble/hashes': 1.4.0 + + ethereum-cryptography@0.1.3: + dependencies: + '@types/pbkdf2': 3.1.2 + '@types/secp256k1': 4.0.6 + blakejs: 1.2.1 + browserify-aes: 1.2.0 + bs58check: 2.1.2 + create-hash: 1.2.0 + create-hmac: 1.1.7 + hash.js: 1.1.7 + keccak: 3.0.4 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + scrypt-js: 3.0.1 + secp256k1: 4.0.3 + setimmediate: 1.0.5 + + ethereum-cryptography@1.2.0: + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 + + ethereum-cryptography@2.2.1: + dependencies: + '@noble/curves': 1.4.2 + '@noble/hashes': 1.4.0 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + + ethereumjs-abi@0.6.8: + dependencies: + bn.js: 4.12.0 + ethereumjs-util: 6.2.1 + + ethereumjs-util@6.2.1: + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 4.12.0 + create-hash: 1.2.0 + elliptic: 6.5.7 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + + ethereumjs-util@7.1.5: + dependencies: + '@types/bn.js': 5.1.5 + bn.js: 5.2.1 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + + ethers@5.7.2: + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethers@6.13.2: + dependencies: + '@adraffy/ens-normalize': 1.10.1 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethers@6.6.0: + dependencies: + '@adraffy/ens-normalize': 1.9.2 + '@noble/hashes': 1.1.2 + '@noble/secp256k1': 1.7.1 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + ethjs-unit@0.1.6: + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + + ethjs-util@0.1.6: + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + fast-levenshtein@2.0.6: {} + + fast-uri@3.0.1: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + ffjavascript@0.2.63: + dependencies: + wasmbuilder: 0.0.16 + wasmcurves: 0.2.2 + web-worker: 1.2.0 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-replace@3.0.0: + dependencies: + array-back: 3.1.0 + + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat@5.0.2: {} + + follow-redirects@1.15.6(debug@4.3.6): + optionalDependencies: + debug: 4.3.6(supports-color@8.1.1) + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data@2.5.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fp-ts@1.19.3: {} + + fs-constants@1.0.0: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@11.2.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@7.0.1: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-readdir-recursive@1.1.0: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + get-caller-file@2.0.5: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-port@3.2.0: {} + + ghost-testrpc@0.0.2: + dependencies: + chalk: 2.4.2 + node-emoji: 1.11.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + + glob@5.0.15: + dependencies: + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.1.7: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.2.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + + globby@10.0.2: + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + glob: 7.2.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.2 + + hardhat-gas-reporter@1.0.10(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)): + dependencies: + array-uniq: 1.0.3 + eth-gas-reporter: 0.2.27 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + sha1: 1.1.1 + transitivePeerDependencies: + - '@codechecks/client' + - bufferutil + - debug + - utf-8-validate + + hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4): + dependencies: + '@ethersproject/abi': 5.7.0 + '@metamask/eth-sig-util': 4.0.1 + '@nomicfoundation/edr': 0.5.2 + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-tx': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 + '@nomicfoundation/solidity-analyzer': 0.1.2 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.5 + '@types/lru-cache': 5.1.1 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + boxen: 5.1.2 + chalk: 2.4.2 + chokidar: 3.6.0 + ci-info: 2.0.0 + debug: 4.3.6(supports-color@8.1.1) + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + ethereumjs-abi: 0.6.8 + find-up: 2.1.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + glob: 7.2.0 + immutable: 4.3.7 + io-ts: 1.10.4 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.7.3 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.8.26(debug@4.3.6) + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + tsort: 0.0.1 + undici: 5.28.4 + uuid: 8.3.2 + ws: 7.5.10 + optionalDependencies: + ts-node: 10.9.2(@types/node@22.5.0)(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - bufferutil + - c-kzg + - supports-color + - utf-8-validate + + has-flag@1.0.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + hash-base@3.1.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + heap@0.2.7: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + http-basic@8.1.3: + dependencies: + caseless: 0.12.0 + concat-stream: 1.6.2 + http-response-object: 3.0.2 + parse-cache-control: 1.0.1 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-response-object@3.0.2: + dependencies: + '@types/node': 10.17.60 + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.6(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.2: {} + + immer@10.0.2: {} + + immutable@4.3.7: {} + + indent-string@4.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + interpret@1.4.0: {} + + io-ts@1.10.4: + dependencies: + fp-ts: 1.19.3 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@2.0.0: {} + + is-fullwidth-code-point@3.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-hex-prefixed@1.0.0: {} + + is-number@7.0.0: {} + + is-plain-obj@2.1.0: {} + + is-unicode-supported@0.1.0: {} + + isarray@0.0.1: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + js-sha3@0.8.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-schema-traverse@1.0.0: {} + + json-stringify-safe@5.0.1: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonparse@1.3.1: {} + + jsonschema@1.4.1: {} + + just-extend@6.2.0: {} + + keccak@3.0.4: + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.1 + readable-stream: 3.6.2 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.clonedeep@4.5.0: {} + + lodash.get@4.4.2: {} + + lodash.isequal@4.5.0: {} + + lodash.truncate@4.4.2: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + lru-cache@10.4.3: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru_map@0.3.3: {} + + make-error@1.3.6: {} + + markdown-table@1.1.3: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + memorystream@0.3.1: {} + + merge2@1.4.1: {} + + micro-ftch@0.3.1: {} + + micro-starknet@0.2.3: + dependencies: + '@noble/curves': 1.0.0 + '@noble/hashes': 1.3.3 + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + mkdirp-classic@0.5.3: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + mkdirp@3.0.1: {} + + mnemonist@0.38.5: + dependencies: + obliterator: 2.0.4 + + mocha@10.7.3: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.3.6(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 8.1.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 16.2.0 + yargs-parser: 20.2.9 + yargs-unparser: 2.0.0 + + ms@2.1.2: {} + + ms@2.1.3: {} + + nan@2.20.0: + optional: true + + nanoassert@2.0.0: {} + + ndjson@2.0.0: + dependencies: + json-stringify-safe: 5.0.1 + minimist: 1.2.8 + readable-stream: 3.6.2 + split2: 3.2.2 + through2: 4.0.2 + + neo-async@2.6.2: {} + + nise@6.0.0: + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 11.2.2 + '@sinonjs/text-encoding': 0.7.3 + just-extend: 6.2.0 + path-to-regexp: 6.2.2 + + node-addon-api@2.0.2: {} + + node-addon-api@3.2.1: {} + + node-emoji@1.11.0: + dependencies: + lodash: 4.17.21 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.1: {} + + nofilter@3.1.0: {} + + nopt@3.0.6: + dependencies: + abbrev: 1.0.9 + + normalize-path@3.0.0: {} + + number-to-bn@1.7.0: + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 + + object-assign@4.1.1: {} + + object-inspect@1.13.2: {} + + obliterator@2.0.4: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + only-allow@1.2.1: + dependencies: + which-pm-runs: 1.1.0 + + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.5 + + ordinal@1.0.3: {} + + os-tmpdir@1.0.2: {} + + p-limit@1.3.0: + dependencies: + p-try: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-try@1.0.0: {} + + package-json-from-dist@1.0.0: {} + + parse-cache-control@1.0.1: {} + + path-browserify@1.0.1: {} + + path-exists@3.0.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-to-regexp@6.2.2: {} + + path-type@4.0.0: {} + + pathval@1.1.1: {} + + pbkdf2@3.1.2: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + + picomatch@2.3.1: {} + + pify@4.0.1: {} + + prelude-ls@1.1.2: {} + + prettier-plugin-solidity@1.4.1(prettier@3.3.3): + dependencies: + '@solidity-parser/parser': 0.18.0 + prettier: 3.3.3 + semver: 7.5.4 + + prettier@2.8.8: {} + + prettier@3.3.3: {} + + process-nextick-args@2.0.1: {} + + promise@8.3.0: + dependencies: + asap: 2.0.6 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + + proxy-from-env@1.1.0: {} + + pump@1.0.3: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + pump@3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + qs@6.13.0: + dependencies: + side-channel: 1.0.6 + + queue-microtask@1.2.3: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + readable-stream@1.0.34: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + rechoir@0.6.2: + dependencies: + resolve: 1.22.8 + + recursive-readdir@2.2.3: + dependencies: + minimatch: 3.1.2 + + reduce-flatten@2.0.0: {} + + req-cwd@2.0.0: + dependencies: + req-from: 2.0.0 + + req-from@2.0.0: + dependencies: + resolve-from: 3.0.0 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-from@3.0.0: {} + + resolve@1.1.7: {} + + resolve@1.17.0: + dependencies: + path-parse: 1.0.7 + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + retry@0.12.0: {} + + reusify@1.0.4: {} + + ripemd160@2.0.2: + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + + rlp@2.2.7: + dependencies: + bn.js: 5.2.1 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safer-buffer@2.1.2: {} + + sc-istanbul@0.4.6: + dependencies: + abbrev: 1.0.9 + async: 1.5.2 + escodegen: 1.8.1 + esprima: 2.7.3 + glob: 5.0.15 + handlebars: 4.7.8 + js-yaml: 3.14.1 + mkdirp: 0.5.6 + nopt: 3.0.6 + once: 1.4.0 + resolve: 1.1.7 + supports-color: 3.2.3 + which: 1.3.1 + wordwrap: 1.0.0 + + scrypt-js@3.0.1: {} + + secp256k1@4.0.3: + dependencies: + elliptic: 6.5.7 + node-addon-api: 2.0.2 + node-gyp-build: 4.8.1 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + semver@7.6.3: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + setimmediate@1.0.5: {} + + setprototypeof@1.2.0: {} + + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + sha1@1.1.1: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + sinon-chai@3.7.0(chai@4.5.0)(sinon@18.0.0): + dependencies: + chai: 4.5.0 + sinon: 18.0.0 + + sinon@18.0.0: + dependencies: + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 11.2.2 + '@sinonjs/samsam': 8.0.0 + diff: 5.2.0 + nise: 6.0.0 + supports-color: 7.2.0 + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + solc@0.8.26(debug@4.3.6): + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.6(debug@4.3.6) + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + + solidity-coverage@0.8.12(hardhat@2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4)): + dependencies: + '@ethersproject/abi': 5.7.0 + '@solidity-parser/parser': 0.18.0 + chalk: 2.4.2 + death: 1.1.0 + difflib: 0.2.4 + fs-extra: 8.1.0 + ghost-testrpc: 0.0.2 + global-modules: 2.0.0 + globby: 10.0.2 + hardhat: 2.22.9(ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4))(typescript@5.5.4) + jsonschema: 1.4.1 + lodash: 4.17.21 + mocha: 10.7.3 + node-emoji: 1.11.0 + pify: 4.0.1 + recursive-readdir: 2.2.3 + sc-istanbul: 0.4.6 + semver: 7.5.4 + shelljs: 0.8.5 + web3-utils: 1.10.4 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.2.0: + dependencies: + amdefine: 1.0.1 + optional: true + + source-map@0.6.1: {} + + split-ca@1.0.1: {} + + split2@3.2.2: + dependencies: + readable-stream: 3.6.2 + + sprintf-js@1.0.3: {} + + ssh2@1.15.0: dependencies: - '@noble/hashes': 1.3.0 - dev: false + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.10 + nan: 2.20.0 - /@noble/hashes@1.1.2: - resolution: {integrity: sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA==} - dev: false + stacktrace-parser@0.1.10: + dependencies: + type-fest: 0.7.1 - /@noble/hashes@1.3.0: - resolution: {integrity: sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==} - dev: false + statuses@2.0.1: {} - /@noble/hashes@1.3.1: - resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} - engines: {node: '>= 16'} - dev: false + string-format@2.0.0: {} - /@noble/secp256k1@1.7.1: - resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} - dev: false + string-width@2.1.1: + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 - /@solidity-parser/parser@0.16.2: - resolution: {integrity: sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==} + string-width@4.2.3: dependencies: - antlr4ts: 0.5.0-alpha.4 - dev: true + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 - /@types/node@18.15.13: - resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} - dev: false + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 - /aes-js@3.0.0: - resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} - dev: false + string_decoder@0.10.31: {} - /aes-js@4.0.0-beta.5: - resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} - dev: false + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 - /antlr4ts@0.5.0-alpha.4: - resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} - dev: true + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false + strip-ansi@4.0.0: + dependencies: + ansi-regex: 3.0.1 - /axios@1.6.2: - resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + strip-ansi@6.0.1: dependencies: - follow-redirects: 1.15.2 - form-data: 4.0.0 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - dev: false + ansi-regex: 5.0.1 - /b4a@1.6.4: - resolution: {integrity: sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==} - dev: false + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 - /bech32@1.1.4: - resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} - dev: false + strip-hex-prefix@1.0.0: + dependencies: + is-hex-prefixed: 1.0.0 - /blake-hash@2.0.0: - resolution: {integrity: sha512-Igj8YowDu1PRkRsxZA7NVkdFNxH5rKv5cpLxQ0CVXSIA77pVYwCPRQJ2sMew/oneUpfuYRyjG6r8SmmmnbZb1w==} - engines: {node: '>= 10'} - requiresBuild: true + strip-json-comments@3.1.1: {} + + supports-color@3.2.3: dependencies: - node-addon-api: 3.2.1 - node-gyp-build: 4.6.0 - readable-stream: 3.6.2 - dev: false + has-flag: 1.0.0 - /blake2b-wasm@2.4.0: - resolution: {integrity: sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==} + supports-color@5.5.0: dependencies: - b4a: 1.6.4 - nanoassert: 2.0.0 - dev: false + has-flag: 3.0.0 - /blake2b@2.1.4: - resolution: {integrity: sha512-AyBuuJNI64gIvwx13qiICz6H6hpmjvYS5DGkG6jbXMOT8Z3WUJ3V1X0FlhIoT1b/5JtHE3ki+xjtMvu1nn+t9A==} + supports-color@7.2.0: dependencies: - blake2b-wasm: 2.4.0 - nanoassert: 2.0.0 - dev: false + has-flag: 4.0.0 - /bn.js@4.12.0: - resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - dev: false + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 - /bn.js@5.2.1: - resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false + supports-preserve-symlinks-flag@1.0.0: {} - /brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: false + sync-request@6.1.0: + dependencies: + http-response-object: 3.0.2 + sync-rpc: 1.3.6 + then-request: 6.0.2 - /circomlibjs@0.1.7: - resolution: {integrity: sha512-GRAUoAlKAsiiTa+PA725G9RmEmJJRc8tRFxw/zKktUxlQISGznT4hH4ESvW8FNTsrGg/nNd06sGP/Wlx0LUHVg==} + sync-rpc@1.3.6: dependencies: - blake-hash: 2.0.0 - blake2b: 2.1.4 - ethers: 5.7.2 - ffjavascript: 0.2.59 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false + get-port: 3.2.0 - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + table-layout@1.0.2: dependencies: - delayed-stream: 1.0.0 - dev: false + array-back: 4.0.2 + deep-extend: 0.6.0 + typical: 5.2.0 + wordwrapjs: 4.0.1 - /custom-env@2.0.2: - resolution: {integrity: sha512-deuaipAA1Jhhjgma9z3A4cqO1kpWqXRxEmOMEDaIi6/u/HqRtchz1rb/Qju1PeSP7jS8EjPkJ6L1midhGkQo5Q==} + table@6.8.2: dependencies: - dotenv: 16.3.1 - dotenv-expand: 5.1.0 - dev: true + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: false + tar-fs@1.16.3: + dependencies: + chownr: 1.1.4 + mkdirp: 0.5.6 + pump: 1.0.3 + tar-stream: 1.6.2 - /dotenv-expand@5.1.0: - resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} - dev: true + tar-fs@2.0.1: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} - engines: {node: '>=12'} - dev: true + tar-stream@1.6.2: + dependencies: + bl: 1.2.3 + buffer-alloc: 1.2.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + readable-stream: 2.3.8 + to-buffer: 1.1.1 + xtend: 4.0.2 - /elliptic@6.5.4: - resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + tar-stream@2.2.0: dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: false + readable-stream: 3.6.2 - /ethers@5.7.2: - resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + then-request@6.0.2: dependencies: - '@ethersproject/abi': 5.7.0 - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/contracts': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/json-wallets': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/providers': 5.7.2 - '@ethersproject/random': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/solidity': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/units': 5.7.0 - '@ethersproject/wallet': 5.7.0 - '@ethersproject/web': 5.7.1 - '@ethersproject/wordlists': 5.7.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false + '@types/concat-stream': 1.6.1 + '@types/form-data': 0.0.33 + '@types/node': 8.10.66 + '@types/qs': 6.9.15 + caseless: 0.12.0 + concat-stream: 1.6.2 + form-data: 2.5.1 + http-basic: 8.1.3 + http-response-object: 3.0.2 + promise: 8.3.0 + qs: 6.13.0 - /ethers@6.6.0: - resolution: {integrity: sha512-7D2U+n8eZYmh592VZqap9vBu50jN7YUDHqAmwBYTMntmUKC9RVgcqcFbd+3DTCOQ1jMyK6QHv1usbcfgiGaHOA==} - engines: {node: '>=14.0.0'} + through2@4.0.2: dependencies: - '@adraffy/ens-normalize': 1.9.2 - '@noble/hashes': 1.1.2 - '@noble/secp256k1': 1.7.1 - '@types/node': 18.15.13 - aes-js: 4.0.0-beta.5 - tslib: 2.4.0 - ws: 8.5.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false + readable-stream: 3.6.2 - /ffjavascript@0.2.59: - resolution: {integrity: sha512-QssOEUv+wilz9Sg7Zaj6KWAm7QceOAEsFuEBTltUsDo1cjn11rA/LGYvzFBPbzNfxRlZxwgJ7uxpCQcdDlrNfw==} + through@2.3.8: {} + + tmp@0.0.33: dependencies: - wasmbuilder: 0.0.16 - wasmcurves: 0.2.1 - web-worker: 1.2.0 - dev: false + os-tmpdir: 1.0.2 - /follow-redirects@1.15.2: - resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false + to-buffer@1.1.1: {} - /form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} + to-regex-range@5.0.1: dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false + is-number: 7.0.0 - /hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: false + toidentifier@1.0.1: {} - /hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - dev: false + tr46@0.0.3: {} - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false + ts-command-line-args@2.5.1: + dependencies: + chalk: 4.1.2 + command-line-args: 5.2.1 + command-line-usage: 6.1.3 + string-format: 2.0.0 - /js-sha3@0.8.0: - resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} - dev: false + ts-essentials@7.0.3(typescript@5.5.4): + dependencies: + typescript: 5.5.4 - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + ts-morph@22.0.0: dependencies: - yallist: 4.0.0 - dev: true + '@ts-morph/common': 0.23.0 + code-block-writer: 13.0.2 - /micro-starknet@0.2.3: - resolution: {integrity: sha512-6XBcC+GerlwJSR4iA0VaeXtS2wrayWFcA4PEzrJPMuFmWCaUtuGIq5K/DB5F/XgnL54/zl2Bxo690Lj7mYVA8A==} + ts-node@10.9.2(@types/node@22.5.0)(typescript@5.5.4): dependencies: - '@noble/curves': 1.0.0 - '@noble/hashes': 1.3.1 - dev: false + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.5.0 + acorn: 8.12.1 + acorn-walk: 8.3.3 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.5.4 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: false + tslib@1.14.1: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + tslib@2.4.0: {} + + tsort@0.0.1: {} + + tweetnacl-util@0.15.1: {} + + tweetnacl@0.14.5: {} + + tweetnacl@1.0.3: {} + + type-check@0.3.2: dependencies: - mime-db: 1.52.0 - dev: false + prelude-ls: 1.1.2 - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: false + type-detect@4.0.8: {} - /minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: false + type-detect@4.1.0: {} - /nanoassert@2.0.0: - resolution: {integrity: sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==} - dev: false + type-fest@0.20.2: {} - /node-addon-api@3.2.1: - resolution: {integrity: sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==} - dev: false + type-fest@0.21.3: {} - /node-gyp-build@4.6.0: - resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} - hasBin: true - dev: false + type-fest@0.7.1: {} - /only-allow@1.2.1: - resolution: {integrity: sha512-M7CJbmv7UCopc0neRKdzfoGWaVZC+xC1925GitKH9EAqYFzX9//25Q7oX4+jw0tiCCj+t5l6VZh8UPH23NZkMA==} - hasBin: true + typechain@8.3.2(typescript@5.5.4): dependencies: - which-pm-runs: 1.1.0 - dev: true + '@types/prettier': 2.7.3 + debug: 4.3.6(supports-color@8.1.1) + fs-extra: 7.0.1 + glob: 7.1.7 + js-sha3: 0.8.0 + lodash: 4.17.21 + mkdirp: 1.0.4 + prettier: 2.8.8 + ts-command-line-args: 2.5.1 + ts-essentials: 7.0.3(typescript@5.5.4) + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color - /prettier-plugin-solidity@1.2.0(prettier@3.1.0): - resolution: {integrity: sha512-fgxcUZpVAP+LlRfy5JI5oaAkXGkmsje2VJ5krv/YMm+rcTZbIUwFguSw5f+WFuttMjpDm6wB4UL7WVkArEfiVA==} - engines: {node: '>=16'} - peerDependencies: - prettier: '>=2.3.0' + typedarray@0.0.6: {} + + typescript@5.5.4: {} + + typical@4.0.0: {} + + typical@5.2.0: {} + + uglify-js@3.19.2: + optional: true + + ulid@2.3.0: {} + + undici-types@6.19.8: {} + + undici@5.28.4: dependencies: - '@solidity-parser/parser': 0.16.2 - prettier: 3.1.0 - semver: 7.5.4 - solidity-comments-extractor: 0.0.7 - dev: true + '@fastify/busboy': 2.1.1 - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} - engines: {node: '>=14'} - hasBin: true - dev: true + undici@6.19.8: {} - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: false + universalify@0.1.2: {} - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + utf8@3.0.0: {} + + util-deprecate@1.0.2: {} + + uuid@8.3.2: {} + + v8-compile-cache-lib@3.0.1: {} + + wasmbuilder@0.0.16: {} + + wasmcurves@0.2.2: dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: false + wasmbuilder: 0.0.16 - /rlp@2.2.7: - resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} - hasBin: true + web-worker@1.2.0: {} + + web3-utils@1.10.4: dependencies: + '@ethereumjs/util': 8.1.0 bn.js: 5.2.1 - dev: false + ethereum-bloom-filters: 1.2.0 + ethereum-cryptography: 2.2.1 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false + webidl-conversions@3.0.1: {} - /scrypt-js@3.0.1: - resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} - dev: false + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + which-pm-runs@1.1.0: {} + + which@1.3.1: dependencies: - lru-cache: 6.0.0 - dev: true + isexe: 2.0.0 - /solidity-comments-extractor@0.0.7: - resolution: {integrity: sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw==} - dev: true + which@2.0.2: + dependencies: + isexe: 2.0.0 - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + widest-line@3.1.0: dependencies: - safe-buffer: 5.2.1 - dev: false + string-width: 4.2.3 - /tslib@2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - dev: false + word-wrap@1.2.5: {} - /ulid@2.3.0: - resolution: {integrity: sha512-keqHubrlpvT6G2wH0OEfSW4mquYRcbe/J8NMmveoQOjUqmo+hXtO+ORCpWhdbZ7k72UtY61BL7haGxW6enBnjw==} - hasBin: true - dev: false + wordwrap@1.0.0: {} - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: false + wordwrapjs@4.0.1: + dependencies: + reduce-flatten: 2.0.0 + typical: 5.2.0 - /wasmbuilder@0.0.16: - resolution: {integrity: sha512-Qx3lEFqaVvp1cEYW7Bfi+ebRJrOiwz2Ieu7ZG2l7YyeSJIok/reEQCQCuicj/Y32ITIJuGIM9xZQppGx5LrQdA==} - dev: false + workerpool@6.5.1: {} - /wasmcurves@0.2.1: - resolution: {integrity: sha512-9ciO7bUE5bgpbOcdK7IO3enrSVIKHwrQmPibok4GLJWaCA7Wyqc9PRYnu5HbiFv9NDFNqVKPtU5R6Is5KujBLg==} + wrap-ansi@7.0.0: dependencies: - wasmbuilder: 0.0.16 - dev: false + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 - /web-worker@1.2.0: - resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} - dev: false + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 - /which-pm-runs@1.1.0: - resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==} - engines: {node: '>=4'} - dev: true + wrappy@1.0.2: {} - /ws@7.4.6: - resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false + ws@7.4.6: {} - /ws@8.5.0: - resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: false + ws@7.5.10: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + ws@8.17.1: {} + + ws@8.5.0: {} + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@4.0.0: {} + + yargs-parser@20.2.9: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} + + zksync-ethers@6.11.2(ethers@6.13.2): + dependencies: + ethers: 6.13.2 diff --git a/script/Deploy_11155111_to_11155111.ts b/script/Deploy_11155111_to_11155111.ts new file mode 100644 index 0000000..63a8c78 --- /dev/null +++ b/script/Deploy_11155111_to_11155111.ts @@ -0,0 +1,132 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const chainId = process.env.L1_SEPOLIA_CHAINID || ""; +const aggregatorsFactory = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; + +if (!chainId) { + throw new Error("L1_SEPOLIA_CHAINID is not set in .env"); +} +if (!aggregatorsFactory) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set in .env"); +} + +export async function main() { + // deploy SimpleMessagesInbox + const SimpleMessagesInbox = await hre.ethers.getContractFactory( + "SimpleMessagesInbox", + ); + const simpleMessagesInbox = await SimpleMessagesInbox.deploy(); + const simpleMessagesInboxAddress = await simpleMessagesInbox.getAddress(); + await simpleMessagesInbox.waitForDeployment(); + console.log("Deployed SimpleMessagesInbox at:", simpleMessagesInboxAddress); + + // deploy HeaderStore + const HeadersStore = await hre.ethers.getContractFactory("HeadersStore"); + const headersStore = await HeadersStore.deploy(simpleMessagesInboxAddress); + const headersStoreAddress = await headersStore.getAddress(); + await headersStore.waitForDeployment(); + console.log("Deployed HeadersStore at:", headersStoreAddress); + + // deploy FactsRegistry + const FactsRegistry = await hre.ethers.getContractFactory("FactsRegistry"); + const factsRegistry = await FactsRegistry.deploy(headersStoreAddress); + const factsRegistryAddress = await factsRegistry.getAddress(); + await factsRegistry.waitForDeployment(); + console.log("Deployed FactsRegistry at:", factsRegistryAddress); + + // set SimpleMessagesInbox variables + await simpleMessagesInbox.setHeadersStore(headersStoreAddress); + await simpleMessagesInbox.setMessagesOriginChainId(chainId); + // setCrossDomainMsgSender will be called at after L1ToL1MessagesSender deployment + + // deploy NativeParentHashesFetcher + const NativeParentHashesFetcher = await hre.ethers.getContractFactory( + "NativeParentHashesFetcher", + ); + const nativeParentHashesFetcher = await NativeParentHashesFetcher.deploy(); + const nativeParentHashesFetcherAddress = + await nativeParentHashesFetcher.getAddress(); + await nativeParentHashesFetcher.waitForDeployment(); + console.log( + "Deployed NativeParentHashesFetcher at:", + nativeParentHashesFetcherAddress, + ); + + // deploy L1ToL1MessagesSender + const L1ToL1MessagesSender = await hre.ethers.getContractFactory( + "L1ToL1MessagesSender", + ); + const l1ToL1MessagesSender = await L1ToL1MessagesSender.deploy( + aggregatorsFactory, + nativeParentHashesFetcherAddress, + simpleMessagesInboxAddress, + ); + const l1ToL1MessagesSenderAddress = await l1ToL1MessagesSender.getAddress(); + await l1ToL1MessagesSender.waitForDeployment(); + console.log("Deployed L1ToL1MessagesSender at:", l1ToL1MessagesSenderAddress); + + // set crossDomainMsgSender of SimpleMessagesInbox + const tx = await simpleMessagesInbox.setCrossDomainMsgSender( + l1ToL1MessagesSenderAddress, + ); + await tx.wait(); + console.log( + `crossDomainMsgSender of SimpleMessagesInbox(${simpleMessagesInboxAddress}) has been set to ${l1ToL1MessagesSenderAddress}`, + ); + + // verify SimpleMessagesInbox + await hre.run("verify:verify", { + address: simpleMessagesInboxAddress, + constructorArguments: [], + force: true, + }); + + // verify HeadersStore + await hre.run("verify:verify", { + address: headersStoreAddress, + constructorArguments: [simpleMessagesInboxAddress], + force: true, + }); + + // verify FactsRegistry + await hre.run("verify:verify", { + address: factsRegistryAddress, + constructorArguments: [headersStoreAddress], + force: true, + }); + + // verify NativeParentHashesFetcher + await hre.run("verify:verify", { + address: nativeParentHashesFetcherAddress, + constructorArguments: [], + force: true, + }); + + // verify L1ToL1MessagesSender + await hre.run("verify:verify", { + address: l1ToL1MessagesSenderAddress, + constructorArguments: [ + aggregatorsFactory, + nativeParentHashesFetcherAddress, + simpleMessagesInboxAddress, + ], + force: true, + }); + + console.log( + "===============================================================", + ); + console.log("HeadersStore:", headersStoreAddress); + console.log("FactsRegistry:", factsRegistryAddress); + console.log("SimpleMessagesInbox:", simpleMessagesInboxAddress); + console.log("NativeParentHashesFetcher:", nativeParentHashesFetcherAddress); + console.log("L1ToL1MessagesSender:", l1ToL1MessagesSenderAddress); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_11155420.sh b/script/Deploy_11155111_to_11155420.sh new file mode 100644 index 0000000..b3062b1 --- /dev/null +++ b/script/Deploy_11155111_to_11155420.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source .env +while IFS= read -r line; do + echo "$line" + + if [[ "$line" =~ ^Deployed\ OpMessagesInbox\ at:\ (0x[0-9A-Fa-f]+)$ ]]; then + DEPLOYED_L2_INBOX="${BASH_REMATCH[1]}" + fi +done < <(npx hardhat run script/Deploy_11155111_to_11155420_part1.ts --network optimismSepolia) + +if [ -z "$DEPLOYED_L2_INBOX" ]; then + echo "Didn't find deployment address of OpMessagesInbox" + exit 1 +fi + +while IFS= read -r line; do + echo "$line" + + if [[ "$line" =~ ^Deployed\ L1ToOptimismMessagesSender\ at:\ (0x[0-9A-Fa-f]+)$ ]]; then + DEPLOYED_L1_OUTBOX="${BASH_REMATCH[1]}" + fi +done < <(DEPLOYED_L2_INBOX=$DEPLOYED_L2_INBOX npx hardhat run script/Deploy_11155111_to_11155420_part2.ts --network sepolia) + +if [ -z "$DEPLOYED_L1_OUTBOX" ]; then + echo "Didn't find deployment address of L1ToOptimismMessagesSender" + exit 1 +fi + +DEPLOYED_L2_INBOX=$DEPLOYED_L2_INBOX DEPLOYED_L1_OUTBOX=$DEPLOYED_L1_OUTBOX npx hardhat run script/Deploy_11155111_to_11155420_part3.ts --network optimismSepolia diff --git a/script/Deploy_11155111_to_11155420_part1.ts b/script/Deploy_11155111_to_11155420_part1.ts new file mode 100644 index 0000000..8f68d19 --- /dev/null +++ b/script/Deploy_11155111_to_11155420_part1.ts @@ -0,0 +1,76 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const PRIVATE_KEY = process.env.OPTIMISM_PRIVATE_KEY || ""; +const CHAINID = process.env.L1_SEPOLIA_CHAINID || ""; + +if (!PRIVATE_KEY) { + throw new Error("OPTIMISM_PRIVATE_KEY is not set in .env"); +} +if (!CHAINID) { + throw new Error("L1_SEPOLIA_CHAINID is not set in .env"); +} + +export async function main() { + // deploy OpMessagesInbox + const OpMessagesInbox = + await hre.ethers.getContractFactory("OpMessagesInbox"); + const opMessagesInbox = await OpMessagesInbox.deploy(); + const opMessagesInboxAddr = await opMessagesInbox.getAddress(); + await opMessagesInbox.waitForDeployment(); + console.log("Deployed OpMessagesInbox at:", opMessagesInboxAddr); + + // deploy HeaderStore + const HeadersStore = await hre.ethers.getContractFactory("HeadersStore"); + const headersStore = await HeadersStore.deploy(opMessagesInboxAddr); + const headersStoreAddr = await headersStore.getAddress(); + await headersStore.waitForDeployment(); + console.log("Deployed HeadersStore at:", headersStoreAddr); + + // deploy FactsRegistry + const FactsRegistry = await hre.ethers.getContractFactory("FactsRegistry"); + const factsRegistry = await FactsRegistry.deploy(headersStoreAddr); + const factsRegistryAddr = await factsRegistry.getAddress(); + await factsRegistry.waitForDeployment(); + console.log("Deployed FactsRegistry at:", factsRegistryAddr); + + // set OpMessagesInbox variables + await opMessagesInbox.setHeadersStore(headersStoreAddr); + await opMessagesInbox.setMessagesOriginChainId(CHAINID); + // setCrossDomainMsgSender will be called at step 3 + + // verify OpMessagesInbox + await hre.run("verify:verify", { + address: opMessagesInboxAddr, + constructorArguments: [], + force: true, + }); + + // verify HeadersStore + await hre.run("verify:verify", { + address: headersStoreAddr, + constructorArguments: [opMessagesInboxAddr], + force: true, + }); + + // verify FactsRegistry + await hre.run("verify:verify", { + address: factsRegistryAddr, + constructorArguments: [headersStoreAddr], + force: true, + }); + + console.log( + "===============================================================", + ); + console.log("HeadersStore:", headersStoreAddr); + console.log("FactsRegistry:", factsRegistryAddr); + console.log("OpMessagesInbox:", opMessagesInboxAddr); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_11155420_part2.ts b/script/Deploy_11155111_to_11155420_part2.ts new file mode 100644 index 0000000..39e0d4e --- /dev/null +++ b/script/Deploy_11155111_to_11155420_part2.ts @@ -0,0 +1,85 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const aggregatorsFactory = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; +const l2Target = process.env.DEPLOYED_L2_INBOX || ""; +const crossDomainMsgSender = + process.env.OPTIMISM_SEPOLIA_CROSS_DOMAIN_MESSENGER || ""; + +if (!aggregatorsFactory) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set in .env"); +} +if (!l2Target) { + throw new Error("DEPLOYED_L2_INBOX is not set in .env"); +} +if (!crossDomainMsgSender) { + throw new Error("OPTIMISM_SEPOLIA_CROSS_DOMAIN_MESSENGER is not set in .env"); +} + +export async function main() { + // deploy NativeParentHashesFetcher + const NativeParentHashesFetcher = await hre.ethers.getContractFactory( + "NativeParentHashesFetcher", + ); + const nativeParentHashesFetcher = await NativeParentHashesFetcher.deploy(); + const nativeParentHashesFetcherAddress = + await nativeParentHashesFetcher.getAddress(); + await nativeParentHashesFetcher.waitForDeployment(); + console.log( + "Deployed NativeParentHashesFetcher at:", + nativeParentHashesFetcherAddress, + ); + + // deploy L1ToOptimismMessagesSender + const L1ToOptimismMessagesSender = await hre.ethers.getContractFactory( + "L1ToOptimismMessagesSender", + ); + const l1ToOptimismMessagesSender = await L1ToOptimismMessagesSender.deploy( + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + crossDomainMsgSender, + ); + const l1ToOptimismMessagesSenderAddress = + await l1ToOptimismMessagesSender.getAddress(); + await l1ToOptimismMessagesSender.waitForDeployment(); + console.log( + "Deployed L1ToOptimismMessagesSender at:", + l1ToOptimismMessagesSenderAddress, + ); + + // verify NativeParentHashesFetcher + await hre.run("verify:verify", { + address: nativeParentHashesFetcherAddress, + constructorArguments: [], + force: true, + }); + + // verify L1ToOptimismMessagesSender + await hre.run("verify:verify", { + address: l1ToOptimismMessagesSenderAddress, + constructorArguments: [ + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + crossDomainMsgSender, + ], + force: true, + }); + + console.log( + "===============================================================", + ); + console.log("NativeParentHashesFetcher:", nativeParentHashesFetcherAddress); + console.log( + "L1ToOptimismMessagesSenderAddress:", + l1ToOptimismMessagesSenderAddress, + ); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_11155420_part3.ts b/script/Deploy_11155111_to_11155420_part3.ts new file mode 100644 index 0000000..bae21f5 --- /dev/null +++ b/script/Deploy_11155111_to_11155420_part3.ts @@ -0,0 +1,39 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const PRIVATE_KEY = process.env.OPTIMISM_PRIVATE_KEY || ""; +const opMessagesInboxAddress = process.env.DEPLOYED_L2_INBOX || ""; +const crossDomainMsgSenderAddress = process.env.DEPLOYED_L1_OUTBOX || ""; + +if (!PRIVATE_KEY) { + throw new Error("OPTIMISM_PRIVATE_KEY is not set in .env"); +} +if (!opMessagesInboxAddress) { + throw new Error("DEPLOYED_L2_INBOX is not set in .env"); +} +if (!crossDomainMsgSenderAddress) { + throw new Error("DEPLOYED_L1_OUTBOX is not set in .env"); +} + +export async function main() { + // Call setCrossDomainMsgSender on OpMessagesInbox + const opMessagesInbox = await hre.ethers.getContractAt( + "OpMessagesInbox", + opMessagesInboxAddress, + ); + const tx = await opMessagesInbox.setCrossDomainMsgSender( + crossDomainMsgSenderAddress, + ); + await tx.wait(); + + console.log( + `crossDomainMsgSender of OpMessagesInbox(${opMessagesInboxAddress}) has been set to ${crossDomainMsgSenderAddress}`, + ); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_300.sh b/script/Deploy_11155111_to_300.sh new file mode 100644 index 0000000..991d2f8 --- /dev/null +++ b/script/Deploy_11155111_to_300.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source .env +while IFS= read -r line; do + echo "$line" + + if [[ "$line" =~ ^Deployed\ SimpleMessagesInbox\ at:\ (0x[0-9A-Fa-f]+)$ ]]; then + DEPLOYED_L2_INBOX="${BASH_REMATCH[1]}" + fi +done < <(npx hardhat run script/Deploy_11155111_to_300_part1.ts --network zkSyncSepolia) + +if [ -z "$DEPLOYED_L2_INBOX" ]; then + echo "Didn't find deployment address of SimpleMessagesInbox" + exit 1 +fi + +while IFS= read -r line; do + echo "$line" + + if [[ "$line" =~ ^Deployed\ L1ToZkSyncMessagesSender\ at:\ (0x[0-9A-Fa-f]+)$ ]]; then + DEPLOYED_L1_OUTBOX="${BASH_REMATCH[1]}" + fi +done < <(DEPLOYED_L2_INBOX=$DEPLOYED_L2_INBOX npx hardhat run script/Deploy_11155111_to_300_part2.ts --network sepolia) + +if [ -z "$DEPLOYED_L1_OUTBOX" ]; then + echo "Didn't find deployment address of L1ToZkSyncMessagesSender" + exit 1 +fi + +DEPLOYED_L2_INBOX=$DEPLOYED_L2_INBOX DEPLOYED_L1_OUTBOX=$DEPLOYED_L1_OUTBOX npx hardhat deploy-zksync --script Deploy_11155111_to_300_part3.ts --network zkSyncSepolia diff --git a/script/Deploy_11155111_to_300_part1.ts b/script/Deploy_11155111_to_300_part1.ts new file mode 100644 index 0000000..a772e54 --- /dev/null +++ b/script/Deploy_11155111_to_300_part1.ts @@ -0,0 +1,86 @@ +import { Wallet } from "zksync-ethers"; +import { Deployer } from "@matterlabs/hardhat-zksync-deploy"; +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const PRIVATE_KEY = process.env.ZKSYNC_PRIVATE_KEY || ""; +const CHAINID = process.env.L1_SEPOLIA_CHAINID || ""; + +if (!PRIVATE_KEY) { + throw new Error("ZKSYNC_PRIVATE_KEY is not set in .env"); +} +if (!CHAINID) { + throw new Error("L1_SEPOLIA_CHAINID is not set in .env"); +} + +export async function main() { + const wallet = new Wallet(PRIVATE_KEY); + const deployer = new Deployer(hre, wallet); + + // deploy SimpleMessagesInbox + const simpleMessagesInbox = await deployer.deploy( + await deployer.loadArtifact("SimpleMessagesInbox"), + [], + ); + const simpleMessagesInboxAddr = await simpleMessagesInbox.getAddress(); + await simpleMessagesInbox.waitForDeployment(); + console.log("Deployed SimpleMessagesInbox at:", simpleMessagesInboxAddr); + + // deploy HeaderStore + const headersStore = await deployer.deploy( + await deployer.loadArtifact("HeadersStore"), + [simpleMessagesInboxAddr], + ); + const headersStoreAddr = await headersStore.getAddress(); + await headersStore.waitForDeployment(); + console.log("Deployed HeadersStore at:", headersStoreAddr); + + // deploy FactsRegistry + const factsRegistry = await deployer.deploy( + await deployer.loadArtifact("FactsRegistry"), + [headersStoreAddr], + ); + const factsRegistryAddr = await factsRegistry.getAddress(); + await factsRegistry.waitForDeployment(); + console.log("Deployed FactsRegistry at:", factsRegistryAddr); + + // set SimpleMessagesInbox variables + await simpleMessagesInbox.setHeadersStore(headersStoreAddr); + await simpleMessagesInbox.setMessagesOriginChainId(CHAINID); + // setCrossDomainMsgSender will be called at step 3 + + // verify SimpleMessagesInbox + await hre.run("verify:verify", { + address: simpleMessagesInboxAddr, + constructorArguments: [], + force: true, + }); + + // verify HeadersStore + await hre.run("verify:verify", { + address: headersStoreAddr, + constructorArguments: [simpleMessagesInboxAddr], + force: true, + }); + + // verify FactsRegistry + await hre.run("verify:verify", { + address: factsRegistryAddr, + constructorArguments: [headersStoreAddr], + force: true, + }); + + console.log( + "===============================================================", + ); + console.log("HeadersStore:", headersStoreAddr); + console.log("FactsRegistry:", factsRegistryAddr); + console.log("SimpleMessagesInbox:", simpleMessagesInboxAddr); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_300_part2.ts b/script/Deploy_11155111_to_300_part2.ts new file mode 100644 index 0000000..ff6d12b --- /dev/null +++ b/script/Deploy_11155111_to_300_part2.ts @@ -0,0 +1,81 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const aggregatorsFactory = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; +const l2Target = process.env.DEPLOYED_L2_INBOX || ""; +const zksyncMailbox = process.env.ZKSYNC_SEPOLIA_MAILBOX || ""; + +if (!aggregatorsFactory) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set in .env"); +} +if (!l2Target) { + throw new Error("DEPLOYED_L2_INBOX is not set in .env"); +} +if (!zksyncMailbox) { + throw new Error("ZKSYNC_SEPOLIA_MAILBOX is not set in .env"); +} + +export async function main() { + // deploy NativeParentHashesFetcher + const NativeParentHashesFetcher = await hre.ethers.getContractFactory( + "NativeParentHashesFetcher", + ); + const nativeParentHashesFetcher = await NativeParentHashesFetcher.deploy(); + const nativeParentHashesFetcherAddress = + await nativeParentHashesFetcher.getAddress(); + await nativeParentHashesFetcher.waitForDeployment(); + console.log( + "Deployed NativeParentHashesFetcher at:", + nativeParentHashesFetcherAddress, + ); + + // deploy L1ToZkSyncMessagesSender + const L1ToZkSyncMessagesSender = await hre.ethers.getContractFactory( + "L1ToZkSyncMessagesSender", + ); + const l1ToZkSyncMessagesSender = await L1ToZkSyncMessagesSender.deploy( + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + zksyncMailbox, + ); + const l1ToZkSyncMessagesSenderAddress = + await l1ToZkSyncMessagesSender.getAddress(); + await l1ToZkSyncMessagesSender.waitForDeployment(); + console.log( + "Deployed L1ToZkSyncMessagesSender at:", + l1ToZkSyncMessagesSenderAddress, + ); + + // verify NativeParentHashesFetcher + await hre.run("verify:verify", { + address: nativeParentHashesFetcherAddress, + constructorArguments: [], + force: true, + }); + + // verify L1ToZkSyncMessagesSender + await hre.run("verify:verify", { + address: l1ToZkSyncMessagesSenderAddress, + constructorArguments: [ + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + zksyncMailbox, + ], + force: true, + }); + + console.log( + "===============================================================", + ); + console.log("NativeParentHashesFetcher:", nativeParentHashesFetcherAddress); + console.log("L1ToZkSyncMessagesSender:", l1ToZkSyncMessagesSenderAddress); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_300_part3.ts b/script/Deploy_11155111_to_300_part3.ts new file mode 100644 index 0000000..628ab63 --- /dev/null +++ b/script/Deploy_11155111_to_300_part3.ts @@ -0,0 +1,50 @@ +import { Provider } from "zksync-ethers"; +import * as ethers from "ethers"; +import { HardhatRuntimeEnvironment } from "hardhat/types"; +import dotenv from "dotenv"; +import * as SimpleMessagesInboxArtifact from "../artifacts-zk/src/core/x-rollup-messaging/inbox/SimpleMessagesInbox.sol/SimpleMessagesInbox.json"; + +dotenv.config(); + +const PRIVATE_KEY = process.env.ZKSYNC_PRIVATE_KEY || ""; +const simpleMessagesInboxAddress = process.env.DEPLOYED_L2_INBOX || ""; +const crossDomainMsgSenderAddress = process.env.DEPLOYED_L1_OUTBOX || ""; + +if (!PRIVATE_KEY) { + throw new Error("ZKSYNC_PRIVATE_KEY is not set in .env"); +} +if (!simpleMessagesInboxAddress) { + throw new Error("DEPLOYED_L2_INBOX is not set in .env"); +} +if (!crossDomainMsgSenderAddress) { + throw new Error("DEPLOYED_L1_OUTBOX is not set in .env"); +} + +export default async function (hre: HardhatRuntimeEnvironment) { + const provider = new Provider( + (hre.userConfig.networks?.zkSyncSepolia as any)?.url, + ); + const signer = new ethers.Wallet(PRIVATE_KEY, provider); + + const aliasedAddress = + "0x" + + ( + (BigInt(crossDomainMsgSenderAddress) + + BigInt("0x1111000000000000000000000000000000001111")) % + BigInt("0x10000000000000000000000000000000000000000") + ).toString(16); + + // Call setCrossDomainMsgSender on SimpleMessagesInbox + const simpleMessagesInbox = new ethers.Contract( + simpleMessagesInboxAddress, + SimpleMessagesInboxArtifact.abi, + signer, + ); + + const tx = await simpleMessagesInbox.setCrossDomainMsgSender(aliasedAddress); + await tx.wait(); + + console.log( + `crossDomainMsgSender of SimpleMessagesInbox(${simpleMessagesInboxAddress}) has been set to ${aliasedAddress} (aliased from ${crossDomainMsgSenderAddress})`, + ); +} diff --git a/script/Deploy_11155111_to_33111.sh b/script/Deploy_11155111_to_33111.sh new file mode 100644 index 0000000..5edac11 --- /dev/null +++ b/script/Deploy_11155111_to_33111.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +source .env + +while IFS= read -r line; do + echo "$line" + + if [[ "$line" =~ ^Deployed\ ApeChainMessageForwarder\ at:\ (0x[0-9A-Fa-f]+)$ ]]; then + DEPLOYED_L2_MSG_FORWARDER="${BASH_REMATCH[1]}" + fi +done < <(npx hardhat run script/Deploy_11155111_to_33111_part1.ts --network arbitrumSepolia) + +if [ -z "$DEPLOYED_L2_MSG_FORWARDER" ]; then + echo "Didn't find deployment address of ApeChainMessageForwarder" + exit 1 +fi + +while IFS= read -r line; do + echo "$line" + + if [[ "$line" =~ ^Deployed\ SimpleMessagesInbox\ at:\ (0x[0-9A-Fa-f]+)$ ]]; then + DEPLOYED_L3_INBOX="${BASH_REMATCH[1]}" + fi +done < <(DEPLOYED_L2_MSG_FORWARDER=$DEPLOYED_L2_MSG_FORWARDER npx hardhat run script/Deploy_11155111_to_33111_part2.ts --network apeChainSepolia) + +if [ -z "$DEPLOYED_L3_INBOX" ]; then + echo "Didn't find deployment address of SimpleMessagesInbox" + exit 1 +fi + +while IFS= read -r line; do + echo "$line" + + if [[ "$line" =~ ^Deployed\ L1ToApeChainMessagesSender\ at:\ (0x[0-9A-Fa-f]+)$ ]]; then + DEPLOYED_L1_OUTBOX="${BASH_REMATCH[1]}" + fi +done < <(DEPLOYED_L3_INBOX=$DEPLOYED_L3_INBOX DEPLOYED_L2_MSG_FORWARDER=$DEPLOYED_L2_MSG_FORWARDER npx hardhat run script/Deploy_11155111_to_33111_part3.ts --network sepolia) + +if [ -z "$DEPLOYED_L1_OUTBOX" ]; then + echo "Didn't find deployment address of L1ToApeChainMessagesSender" + exit 1 +fi + +DEPLOYED_L2_MSG_FORWARDER=$DEPLOYED_L2_MSG_FORWARDER DEPLOYED_L1_OUTBOX=$DEPLOYED_L1_OUTBOX npx hardhat run script/Deploy_11155111_to_33111_part4.ts --network arbitrumSepolia diff --git a/script/Deploy_11155111_to_33111_part1.ts b/script/Deploy_11155111_to_33111_part1.ts new file mode 100644 index 0000000..2c9e48e --- /dev/null +++ b/script/Deploy_11155111_to_33111_part1.ts @@ -0,0 +1,61 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const PRIVATE_KEY = process.env.ARBITRUM_PRIVATE_KEY || ""; +const CHAINID = process.env.L1_SEPOLIA_CHAINID || ""; +const apeChainInbox = process.env.APE_CHAIN_SEPOLIA_INBOX || ""; +const apeCoin = process.env.APE_CHAIN_SEPOLIA_ARBITRUM_APE_COIN || ""; + +if (!PRIVATE_KEY) { + throw new Error("ARBITRUM_PRIVATE_KEY is not set in .env"); +} +if (!CHAINID) { + throw new Error("L1_SEPOLIA_CHAINID is not set in .env"); +} +if (!apeChainInbox) { + throw new Error("APE_CHAIN_SEPOLIA_INBOX is not set in .env"); +} +if (!apeCoin) { + throw new Error("APE_CHAIN_SEPOLIA_ARBITRUM_APE_COIN is not set in .env"); +} + +export async function main() { + // deploy ApeChainMessageForwarder + const ApeChainMessageForwarder = await hre.ethers.getContractFactory( + "ApeChainMessageForwarder", + ); + const apeChainMessageForwarder = await ApeChainMessageForwarder.deploy( + apeChainInbox, + apeCoin, + ); + const apeChainMessageForwarderAddr = + await apeChainMessageForwarder.getAddress(); + await apeChainMessageForwarder.waitForDeployment(); + console.log( + "Deployed ApeChainMessageForwarder at:", + apeChainMessageForwarderAddr, + ); + // setCrossDomainMsgSender will be called at step 4 + + // verify ApeChainMessageForwarder + await hre.run("verify:verify", { + address: apeChainMessageForwarderAddr, + constructorArguments: [apeChainInbox, apeCoin], + force: true, + }); + + console.log( + "===============================================================", + ); + console.log("ApeChainMessageForwarder:", apeChainMessageForwarderAddr); + console.log( + "===============================================================", + ); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_33111_part2.ts b/script/Deploy_11155111_to_33111_part2.ts new file mode 100644 index 0000000..bb90c9e --- /dev/null +++ b/script/Deploy_11155111_to_33111_part2.ts @@ -0,0 +1,110 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const PRIVATE_KEY = process.env.APE_CHAIN_PRIVATE_KEY || ""; +const CHAINID = process.env.L1_SEPOLIA_CHAINID || ""; +const crossDomainMsgSenderAddress = process.env.DEPLOYED_L2_MSG_FORWARDER || ""; + +if (!PRIVATE_KEY) { + throw new Error("APE_CHAIN_PRIVATE_KEY is not set in .env"); +} +if (!CHAINID) { + throw new Error("L1_SEPOLIA_CHAINID is not set in .env"); +} +if (!crossDomainMsgSenderAddress) { + throw new Error("DEPLOYED_L2_MSG_FORWARDER is not set in .env"); +} + +export async function main() { + // deploy SimpleMessagesInbox + const SimpleMessagesInbox = await hre.ethers.getContractFactory( + "SimpleMessagesInbox", + ); + const simpleMessagesInbox = await SimpleMessagesInbox.deploy(); + const simpleMessagesInboxAddr = await simpleMessagesInbox.getAddress(); + await simpleMessagesInbox.waitForDeployment(); + console.log("Deployed SimpleMessagesInbox at:", simpleMessagesInboxAddr); + + // deploy HeaderStore + const HeadersStore = await hre.ethers.getContractFactory("HeadersStore"); + const headersStore = await HeadersStore.deploy(simpleMessagesInboxAddr); + const headersStoreAddr = await headersStore.getAddress(); + await headersStore.waitForDeployment(); + console.log("Deployed HeadersStore at:", headersStoreAddr); + + // deploy FactsRegistry + const FactsRegistry = await hre.ethers.getContractFactory("FactsRegistry"); + const factsRegistry = await FactsRegistry.deploy(headersStoreAddr); + const factsRegistryAddr = await factsRegistry.getAddress(); + await factsRegistry.waitForDeployment(); + console.log("Deployed FactsRegistry at:", factsRegistryAddr); + + // set SimpleMessagesInbox variables + await simpleMessagesInbox.setHeadersStore(headersStoreAddr); + await simpleMessagesInbox.setMessagesOriginChainId(CHAINID); + + const aliasedAddress = + "0x" + + ( + (BigInt(crossDomainMsgSenderAddress) + + BigInt("0x1111000000000000000000000000000000001111")) % + BigInt("0x10000000000000000000000000000000000000000") + ) + .toString(16) + .padStart(40, "0"); + + await simpleMessagesInbox.setCrossDomainMsgSender(aliasedAddress); + + // verify SimpleMessagesInbox + await hre + .run("verify:verify", { + address: simpleMessagesInboxAddr, + constructorArguments: [], + force: true, + }) + .catch((error) => { + console.error("Verification of SimpleMessagesInbox failed:", error); + }); + + // verify HeadersStore + await hre + .run("verify:verify", { + address: headersStoreAddr, + constructorArguments: [simpleMessagesInboxAddr], + force: true, + }) + .catch((error) => { + console.error("Verification of HeadersStore failed:", error); + }); + + // verify FactsRegistry + await hre + .run("verify:verify", { + address: factsRegistryAddr, + constructorArguments: [headersStoreAddr], + force: true, + }) + .catch((error) => { + console.error("Verification of FactsRegistry failed:", error); + }); + + console.log( + "===============================================================", + ); + console.log("HeadersStore:", headersStoreAddr); + console.log("FactsRegistry:", factsRegistryAddr); + console.log("SimpleMessagesInbox:", simpleMessagesInboxAddr); + console.log( + `crossDomainMsgSender of SimpleMessagesInbox(${simpleMessagesInboxAddr}) has been set to ${aliasedAddress} (aliased from ${crossDomainMsgSenderAddress})`, + ); + console.log( + "===============================================================", + ); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_33111_part3.ts b/script/Deploy_11155111_to_33111_part3.ts new file mode 100644 index 0000000..0aca902 --- /dev/null +++ b/script/Deploy_11155111_to_33111_part3.ts @@ -0,0 +1,104 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const aggregatorsFactory = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; +const l2Target = process.env.DEPLOYED_L2_MSG_FORWARDER || ""; +const l3Target = process.env.DEPLOYED_L3_INBOX || ""; +const arbitrumInbox = process.env.ARBITRUM_SEPOLIA_INBOX || ""; + +if (!aggregatorsFactory) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set in .env"); +} +if (!l2Target) { + throw new Error("DEPLOYED_L2_MSG_FORWARDER is not set in .env"); +} +if (!l3Target) { + throw new Error("DEPLOYED_L3_INBOX is not set in .env"); +} +if (!arbitrumInbox) { + throw new Error("ARBITRUM_SEPOLIA_INBOX is not set in .env"); +} + +export async function main() { + // deploy NativeParentHashesFetcher + const NativeParentHashesFetcher = await hre.ethers.getContractFactory( + "NativeParentHashesFetcher", + ); + const nativeParentHashesFetcher = await NativeParentHashesFetcher.deploy(); + const nativeParentHashesFetcherAddress = + await nativeParentHashesFetcher.getAddress(); + await nativeParentHashesFetcher.waitForDeployment(); + console.log( + "Deployed NativeParentHashesFetcher at:", + nativeParentHashesFetcherAddress, + ); + + // deploy L1ToApeChainMessagesSender + const L1ToApeChainMessagesSender = await hre.ethers.getContractFactory( + "L1ToApeChainMessagesSender", + ); + const l1ToApeChainMessagesSender = await L1ToApeChainMessagesSender.deploy( + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + l3Target, + arbitrumInbox, + ); + const l1ToApeChainMessagesSenderAddress = + await l1ToApeChainMessagesSender.getAddress(); + await l1ToApeChainMessagesSender.waitForDeployment(); + console.log( + "Deployed L1ToApeChainMessagesSender at:", + l1ToApeChainMessagesSenderAddress, + ); + + // verify NativeParentHashesFetcher + await hre + .run("verify:verify", { + address: nativeParentHashesFetcherAddress, + constructorArguments: [], + force: true, + }) + .catch((error) => { + console.error("Verification of NativeParentHashesFetcher failed:", error); + }); + + // verify L1ToApeChainMessagesSender + await hre + .run("verify:verify", { + address: l1ToApeChainMessagesSenderAddress, + constructorArguments: [ + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + l3Target, + arbitrumInbox, + ], + force: true, + }) + .catch((error) => { + console.error( + "Verification of L1ToApeChainMessagesSender failed:", + error, + ); + }); + + console.log( + "===============================================================", + ); + console.log("NativeParentHashesFetcher:", nativeParentHashesFetcherAddress); + console.log( + "L1ToApeChainMessagesSenderAddress:", + l1ToApeChainMessagesSenderAddress, + ); + console.log( + "===============================================================", + ); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_33111_part4.ts b/script/Deploy_11155111_to_33111_part4.ts new file mode 100644 index 0000000..4af509d --- /dev/null +++ b/script/Deploy_11155111_to_33111_part4.ts @@ -0,0 +1,56 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const PRIVATE_KEY = process.env.ARBITRUM_PRIVATE_KEY || ""; +const apeChainMessageForwarderAddress = + process.env.DEPLOYED_L2_MSG_FORWARDER || ""; +const crossDomainMsgSenderAddress = process.env.DEPLOYED_L1_OUTBOX || ""; + +if (!PRIVATE_KEY) { + throw new Error("ARBITRUM_PRIVATE_KEY is not set in .env"); +} +if (!apeChainMessageForwarderAddress) { + throw new Error("DEPLOYED_L2_MSG_FORWARDER is not set in .env"); +} +if (!crossDomainMsgSenderAddress) { + throw new Error("DEPLOYED_L1_OUTBOX is not set in .env"); +} + +export async function main() { + // Call setCrossDomainMsgSender on ApeChainMessageForwarder + const apeChainMessageForwarder = await hre.ethers.getContractAt( + "ApeChainMessageForwarder", + apeChainMessageForwarderAddress, + ); + + const aliasedAddress = + "0x" + + ( + (BigInt(crossDomainMsgSenderAddress) + + BigInt("0x1111000000000000000000000000000000001111")) % + BigInt("0x10000000000000000000000000000000000000000") + ) + .toString(16) + .padStart(40, "0"); + + const tx = + await apeChainMessageForwarder.setCrossDomainMsgSender(aliasedAddress); + await tx.wait(); + + console.log( + "===============================================================", + ); + console.log( + `crossDomainMsgSender of ApeChainMessageForwarder(${apeChainMessageForwarderAddress}) has been set to ${aliasedAddress} (aliased from ${crossDomainMsgSenderAddress})`, + ); + console.log( + "===============================================================", + ); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_421614.sh b/script/Deploy_11155111_to_421614.sh new file mode 100644 index 0000000..4202dd9 --- /dev/null +++ b/script/Deploy_11155111_to_421614.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +source .env +while IFS= read -r line; do + echo "$line" + + if [[ "$line" =~ ^Deployed\ SimpleMessagesInbox\ at:\ (0x[0-9A-Fa-f]+)$ ]]; then + DEPLOYED_L2_INBOX="${BASH_REMATCH[1]}" + fi +done < <(npx hardhat run script/Deploy_11155111_to_421614_part1.ts --network arbitrumSepolia) + +if [ -z "$DEPLOYED_L2_INBOX" ]; then + echo "Didn't find deployment address of SimpleMessagesInbox" + exit 1 +fi + +while IFS= read -r line; do + echo "$line" + + if [[ "$line" =~ ^Deployed\ L1ToArbitrumMessagesSender\ at:\ (0x[0-9A-Fa-f]+)$ ]]; then + DEPLOYED_L1_OUTBOX="${BASH_REMATCH[1]}" + fi +done < <(DEPLOYED_L2_INBOX=$DEPLOYED_L2_INBOX npx hardhat run script/Deploy_11155111_to_421614_part2.ts --network sepolia) + +if [ -z "$DEPLOYED_L1_OUTBOX" ]; then + echo "Didn't find deployment address of L1ToArbitrumMessagesSender" + exit 1 +fi + +DEPLOYED_L2_INBOX=$DEPLOYED_L2_INBOX DEPLOYED_L1_OUTBOX=$DEPLOYED_L1_OUTBOX npx hardhat run script/Deploy_11155111_to_421614_part3.ts --network arbitrumSepolia diff --git a/script/Deploy_11155111_to_421614_part1.ts b/script/Deploy_11155111_to_421614_part1.ts new file mode 100644 index 0000000..b8ff01d --- /dev/null +++ b/script/Deploy_11155111_to_421614_part1.ts @@ -0,0 +1,77 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const PRIVATE_KEY = process.env.ARBITRUM_PRIVATE_KEY || ""; +const CHAINID = process.env.L1_SEPOLIA_CHAINID || ""; + +if (!PRIVATE_KEY) { + throw new Error("ARBITRUM_PRIVATE_KEY is not set in .env"); +} +if (!CHAINID) { + throw new Error("L1_SEPOLIA_CHAINID is not set in .env"); +} + +export async function main() { + // deploy SimpleMessagesInbox + const SimpleMessagesInbox = await hre.ethers.getContractFactory( + "SimpleMessagesInbox", + ); + const simpleMessagesInbox = await SimpleMessagesInbox.deploy(); + const simpleMessagesInboxAddr = await simpleMessagesInbox.getAddress(); + await simpleMessagesInbox.waitForDeployment(); + console.log("Deployed SimpleMessagesInbox at:", simpleMessagesInboxAddr); + + // deploy HeaderStore + const HeadersStore = await hre.ethers.getContractFactory("HeadersStore"); + const headersStore = await HeadersStore.deploy(simpleMessagesInboxAddr); + const headersStoreAddr = await headersStore.getAddress(); + await headersStore.waitForDeployment(); + console.log("Deployed HeadersStore at:", headersStoreAddr); + + // deploy FactsRegistry + const FactsRegistry = await hre.ethers.getContractFactory("FactsRegistry"); + const factsRegistry = await FactsRegistry.deploy(headersStoreAddr); + const factsRegistryAddr = await factsRegistry.getAddress(); + await factsRegistry.waitForDeployment(); + console.log("Deployed FactsRegistry at:", factsRegistryAddr); + + // set SimpleMessagesInbox variables + await simpleMessagesInbox.setHeadersStore(headersStoreAddr); + await simpleMessagesInbox.setMessagesOriginChainId(CHAINID); + // setCrossDomainMsgSender will be called at step 3 + + // verify SimpleMessagesInbox + await hre.run("verify:verify", { + address: simpleMessagesInboxAddr, + constructorArguments: [], + force: true, + }); + + // verify HeadersStore + await hre.run("verify:verify", { + address: headersStoreAddr, + constructorArguments: [simpleMessagesInboxAddr], + force: true, + }); + + // verify FactsRegistry + await hre.run("verify:verify", { + address: factsRegistryAddr, + constructorArguments: [headersStoreAddr], + force: true, + }); + + console.log( + "===============================================================", + ); + console.log("HeadersStore:", headersStoreAddr); + console.log("FactsRegistry:", factsRegistryAddr); + console.log("SimpleMessagesInbox:", simpleMessagesInboxAddr); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_421614_part2.ts b/script/Deploy_11155111_to_421614_part2.ts new file mode 100644 index 0000000..d2a7e3f --- /dev/null +++ b/script/Deploy_11155111_to_421614_part2.ts @@ -0,0 +1,84 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const aggregatorsFactory = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; +const l2Target = process.env.DEPLOYED_L2_INBOX || ""; +const arbitrumInbox = process.env.ARBITRUM_SEPOLIA_INBOX || ""; + +if (!aggregatorsFactory) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set in .env"); +} +if (!l2Target) { + throw new Error("DEPLOYED_L2_INBOX is not set in .env"); +} +if (!arbitrumInbox) { + throw new Error("ARBITRUM_SEPOLIA_INBOX is not set in .env"); +} + +export async function main() { + // deploy NativeParentHashesFetcher + const NativeParentHashesFetcher = await hre.ethers.getContractFactory( + "NativeParentHashesFetcher", + ); + const nativeParentHashesFetcher = await NativeParentHashesFetcher.deploy(); + const nativeParentHashesFetcherAddress = + await nativeParentHashesFetcher.getAddress(); + await nativeParentHashesFetcher.waitForDeployment(); + console.log( + "Deployed NativeParentHashesFetcher at:", + nativeParentHashesFetcherAddress, + ); + + // deploy L1ToArbitrumMessagesSender + const L1ToArbitrumMessagesSender = await hre.ethers.getContractFactory( + "L1ToArbitrumMessagesSender", + ); + const l1ToArbitrumMessagesSender = await L1ToArbitrumMessagesSender.deploy( + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + arbitrumInbox, + ); + const l1ToArbitrumMessagesSenderAddress = + await l1ToArbitrumMessagesSender.getAddress(); + await l1ToArbitrumMessagesSender.waitForDeployment(); + console.log( + "Deployed L1ToArbitrumMessagesSender at:", + l1ToArbitrumMessagesSenderAddress, + ); + + // verify NativeParentHashesFetcher + await hre.run("verify:verify", { + address: nativeParentHashesFetcherAddress, + constructorArguments: [], + force: true, + }); + + // verify L1ToArbitrumMessagesSender + await hre.run("verify:verify", { + address: l1ToArbitrumMessagesSenderAddress, + constructorArguments: [ + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + arbitrumInbox, + ], + force: true, + }); + + console.log( + "===============================================================", + ); + console.log("NativeParentHashesFetcher:", nativeParentHashesFetcherAddress); + console.log( + "L1ToArbitrumMessagesSenderAddress:", + l1ToArbitrumMessagesSenderAddress, + ); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_11155111_to_421614_part3.ts b/script/Deploy_11155111_to_421614_part3.ts new file mode 100644 index 0000000..eaf5790 --- /dev/null +++ b/script/Deploy_11155111_to_421614_part3.ts @@ -0,0 +1,46 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const PRIVATE_KEY = process.env.ARBITRUM_PRIVATE_KEY || ""; +const simpleMessagesInboxAddress = process.env.DEPLOYED_L2_INBOX || ""; +const crossDomainMsgSenderAddress = process.env.DEPLOYED_L1_OUTBOX || ""; + +if (!PRIVATE_KEY) { + throw new Error("ARBITRUM_PRIVATE_KEY is not set in .env"); +} +if (!simpleMessagesInboxAddress) { + throw new Error("DEPLOYED_L2_INBOX is not set in .env"); +} +if (!crossDomainMsgSenderAddress) { + throw new Error("DEPLOYED_L1_OUTBOX is not set in .env"); +} + +export async function main() { + // Call setCrossDomainMsgSender on SimpleMessagesInbox + const simpleMessagesInbox = await hre.ethers.getContractAt( + "SimpleMessagesInbox", + simpleMessagesInboxAddress, + ); + + const aliasedAddress = + "0x" + + ( + (BigInt(crossDomainMsgSenderAddress) + + BigInt("0x1111000000000000000000000000000000001111")) % + BigInt("0x10000000000000000000000000000000000000000") + ).toString(16); + + const tx = await simpleMessagesInbox.setCrossDomainMsgSender(aliasedAddress); + await tx.wait(); + + console.log( + `crossDomainMsgSender of SimpleMessagesInbox(${simpleMessagesInboxAddress}) has been set to ${aliasedAddress} (aliased from ${crossDomainMsgSenderAddress})`, + ); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Deploy_FactsRegistry.s.sol b/script/Deploy_FactsRegistry.s.sol deleted file mode 100644 index 80b3884..0000000 --- a/script/Deploy_FactsRegistry.s.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import "forge-std/Script.sol"; -import {FactsRegistry} from "src/core/FactsRegistry.sol"; -import {console2} from "forge-std/console2.sol"; - -contract Deploy_FactsRegistry is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - address headersProcessor = vm.envAddress("HEADERS_PROCESSOR"); - - vm.startBroadcast(deployerPrivateKey); - - FactsRegistry factsRegistry = new FactsRegistry(headersProcessor); - - console2.log("FactsRegistry deployed at address: %s", address(factsRegistry)); - - vm.stopBroadcast(); - } -} diff --git a/script/Deploy_HeadersStore.s.sol b/script/Deploy_HeadersStore.s.sol deleted file mode 100644 index 391d94c..0000000 --- a/script/Deploy_HeadersStore.s.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import "forge-std/Script.sol"; -import {HeadersStore} from "src/core/HeadersStore.sol"; -import {console2} from "forge-std/console2.sol"; - -contract Deploy_HeadersStore is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - address messagesInbox = vm.envAddress("MESSAGES_INBOX"); - - vm.startBroadcast(deployerPrivateKey); - - HeadersStore headersStore = new HeadersStore(messagesInbox); - - console2.log("HeadersStore deployed at address: %s", address(headersStore)); - - vm.stopBroadcast(); - } -} diff --git a/script/Deploy_L1ToArbitrumMessageSender.s.sol b/script/Deploy_L1ToArbitrumMessageSender.s.sol deleted file mode 100644 index 32043ae..0000000 --- a/script/Deploy_L1ToArbitrumMessageSender.s.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import "forge-std/Script.sol"; - -import {L1ToArbitrumMessagesSender} from "../src/core/x-rollup-messaging/outbox/L1ToArbitrumMessagesSender.sol"; -import {IArbitrumInbox} from "../src/core/x-rollup-messaging/interfaces/IArbitrumInbox.sol"; -import {IParentHashFetcher} from "../src/core/x-rollup-messaging/interfaces/IParentHashFetcher.sol"; -import {ISharpProofsAggregatorsFactory} from "../src/core/interfaces/ISharpProofsAggregatorsFactory.sol"; -import {console2} from "forge-std/console2.sol"; - -contract Deploy_L1ToArbitrumMessagesSender is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - - address proofsAggregatorsFactory = vm.envAddress("PROOFS_AGGREGATORS_FACTORY"); - address parentHashFetcher = vm.envAddress("PARENT_HASH_FETCHER"); - address l2Target = vm.envAddress("L2_TARGET"); - address arbitrumMessenger = vm.envAddress("ARBITRUM_INBOX"); - - vm.startBroadcast(deployerPrivateKey); - - L1ToArbitrumMessagesSender l1ToArbitrumMessagesSender = new L1ToArbitrumMessagesSender( - ISharpProofsAggregatorsFactory(proofsAggregatorsFactory), - IParentHashFetcher(parentHashFetcher), - l2Target, - IArbitrumInbox(arbitrumMessenger) - ); - - console2.log("L1ToArbitrumMessagesSender address: %s", address(l1ToArbitrumMessagesSender)); - - vm.stopBroadcast(); - } -} diff --git a/script/Deploy_L1ToL1MessagesSender.s.sol b/script/Deploy_L1ToL1MessagesSender.s.sol deleted file mode 100644 index 8bb0ac1..0000000 --- a/script/Deploy_L1ToL1MessagesSender.s.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import "forge-std/Script.sol"; - -import {L1ToL1MessagesSender} from "src/core/x-rollup-messaging/outbox/L1ToL1MessagesSender.sol"; -import {IParentHashFetcher} from "src/core/x-rollup-messaging/interfaces/IParentHashFetcher.sol"; -import {ISharpProofsAggregatorsFactory} from "src/core/interfaces/ISharpProofsAggregatorsFactory.sol"; - -import {SimpleMessagesInbox} from "src/core/x-rollup-messaging/inbox/SimpleMessagesInbox.sol"; -import {HeadersStore} from "src/core/HeadersStore.sol"; -import {FactsRegistry} from "src/core/FactsRegistry.sol"; - -contract Deploy_L1ToL1MessagesSender is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - address proofsAggregatorsFactory = vm.envAddress("PROOFS_AGGREGATORS_FACTORY"); - address parentHashFetcher = vm.envAddress("PARENT_HASH_FETCHER"); - - SimpleMessagesInbox messagesInbox = new SimpleMessagesInbox(); - - HeadersStore headersStore = new HeadersStore(address(messagesInbox)); - - FactsRegistry factsRegistry = new FactsRegistry(address(headersStore)); - - L1ToL1MessagesSender l1ToL1MessagesSender = new L1ToL1MessagesSender( - ISharpProofsAggregatorsFactory(proofsAggregatorsFactory), - IParentHashFetcher(parentHashFetcher), - address(messagesInbox) - ); - - messagesInbox.setCrossDomainMsgSender(address(l1ToL1MessagesSender)); - messagesInbox.setHeadersStore(address(headersStore)); - messagesInbox.setMessagesOriginChainId(5); - - console.log("MessagesInbox deployed at address: %s", address(messagesInbox)); - console.log("HeadersStore deployed at address: %s", address(headersStore)); - console.log("FactsRegistry deployed at address: %s", address(factsRegistry)); - console.log("L1ToL1MessagesSender deployed at address: %s", address(l1ToL1MessagesSender)); - - vm.stopBroadcast(); - } -} diff --git a/script/Deploy_L1ToOptimismMessagesSender.s.sol b/script/Deploy_L1ToOptimismMessagesSender.s.sol deleted file mode 100644 index 07e119c..0000000 --- a/script/Deploy_L1ToOptimismMessagesSender.s.sol +++ /dev/null @@ -1,34 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import "forge-std/Script.sol"; - -import {L1ToOptimismMessagesSender} from "src/core/x-rollup-messaging/outbox/L1ToOptimismMessagesSender.sol"; -import {IOptimismCrossDomainMessenger} from "src/core/x-rollup-messaging/interfaces/IOptimismCrossDomainMessenger.sol"; -import {IParentHashFetcher} from "src/core/x-rollup-messaging/interfaces/IParentHashFetcher.sol"; -import {ISharpProofsAggregatorsFactory} from "src/core/interfaces/ISharpProofsAggregatorsFactory.sol"; -import {console2} from "forge-std/console2.sol"; - -contract Deploy_L1ToOptimismMessagesSender is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - - address proofsAggregatorsFactory = vm.envAddress("PROOFS_AGGREGATORS_FACTORY"); - address parentHashFetcher = vm.envAddress("PARENT_HASH_FETCHER"); - address l2Target = vm.envAddress("L2_TARGET"); - address optimismMessenger = vm.envAddress("OPTIMISM_CROSS_DOMAIN_MESSENGER"); - - vm.startBroadcast(deployerPrivateKey); - - L1ToOptimismMessagesSender l1ToOptimismMessagesSender = new L1ToOptimismMessagesSender( - ISharpProofsAggregatorsFactory(proofsAggregatorsFactory), - IParentHashFetcher(parentHashFetcher), - l2Target, - IOptimismCrossDomainMessenger(optimismMessenger) - ); - - console2.log("L1ToOptimismMessagesSender address: %s", address(l1ToOptimismMessagesSender)); - - vm.stopBroadcast(); - } -} diff --git a/script/Deploy_L1ToStarknetMessagesSender.s.sol b/script/Deploy_L1ToStarknetMessagesSender.s.sol index dd58050..109eb3f 100644 --- a/script/Deploy_L1ToStarknetMessagesSender.s.sol +++ b/script/Deploy_L1ToStarknetMessagesSender.s.sol @@ -7,20 +7,24 @@ import "forge-std/console.sol"; import {L1ToStarknetMessagesSender} from "../src/core/x-rollup-messaging/outbox/L1ToStarknetMessagesSender.sol"; import {IStarknetCore} from "../src/core/x-rollup-messaging/interfaces/IStarknetCore.sol"; import {IParentHashFetcher} from "../src/core/x-rollup-messaging/interfaces/IParentHashFetcher.sol"; +import {NativeParentHashesFetcher} from "src/core/x-rollup-messaging/parent-hashes-fetchers/NativeParentHashesFetcher.sol"; contract Deploy_L1ToStarknetMessagesSender is Script { function run() external { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); + uint256 deployerPrivateKey = vm.envUint("L1_PRIVATE_KEY"); vm.startBroadcast(deployerPrivateKey); + NativeParentHashesFetcher parentHashFetcher = new NativeParentHashesFetcher(); + L1ToStarknetMessagesSender l1MessagesSender = new L1ToStarknetMessagesSender( - IStarknetCore(vm.envAddress("STARKNET_CORE_ADDRESS")), - vm.envUint("L2_RECIPIENT_ADDRESS"), - vm.envAddress("AGGREGATORS_FACTORY_ADDRESS"), - IParentHashFetcher(vm.envAddress("PARENT_HASH_FETCHER")) + IStarknetCore(vm.envAddress("STARKNET_SEPOLIA_CORE_ADDRESS")), + vm.envUint("STARKNET_RECIPIENT_ADDRESS"), + vm.envAddress("L1_MAINNET_AGGREGATORS_FACTORY"), + IParentHashFetcher(address(parentHashFetcher)) ); console.log("L1MessagesSender address: %s", address(l1MessagesSender)); + console.log("NativeParentHashesFetcher address: %s", address(parentHashFetcher)); vm.stopBroadcast(); } diff --git a/script/Deploy_MessagesSimpleInbox.s.sol b/script/Deploy_MessagesSimpleInbox.s.sol deleted file mode 100644 index 8d4a653..0000000 --- a/script/Deploy_MessagesSimpleInbox.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import "forge-std/Script.sol"; - -import {SimpleMessagesInbox} from "src/core/x-rollup-messaging/inbox/SimpleMessagesInbox.sol"; -import {console2} from "forge-std/console2.sol"; - -contract Deploy_MessagesSimpleInbox is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - SimpleMessagesInbox messagesInbox = new SimpleMessagesInbox(); - - console2.log("MessagesInbox deployed at address: %s", address(messagesInbox)); - - vm.stopBroadcast(); - } -} diff --git a/script/Deploy_NativeParentHashesFetcher.s.sol b/script/Deploy_NativeParentHashesFetcher.s.sol deleted file mode 100644 index 38f5e73..0000000 --- a/script/Deploy_NativeParentHashesFetcher.s.sol +++ /dev/null @@ -1,21 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import "forge-std/Script.sol"; - -import {NativeParentHashesFetcher} from - "src/core/x-rollup-messaging/parent-hashes-fetchers/NativeParentHashesFetcher.sol"; - -import {console2} from "forge-std/console2.sol"; - -contract Deploy_NativeParentHashesFetcher is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - NativeParentHashesFetcher nativeParentHashesFetcher = new NativeParentHashesFetcher(); - - console2.log("NativeParentHashesFetcher address: %s", address(nativeParentHashesFetcher)); - - vm.stopBroadcast(); - } -} diff --git a/script/Deploy_OpMessagesInbox.s.sol b/script/Deploy_OpMessagesInbox.s.sol deleted file mode 100644 index 94108b8..0000000 --- a/script/Deploy_OpMessagesInbox.s.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import "forge-std/Script.sol"; - -import {OpMessagesInbox} from "src/core/x-rollup-messaging/inbox/OpMessagesInbox.sol"; -import {console2} from "forge-std/console2.sol"; - -contract Deploy_OpMessagesInbox is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - OpMessagesInbox messagesInbox = new OpMessagesInbox(); - - console2.log("MessagesInbox deployed at address: %s", address(messagesInbox)); - - vm.stopBroadcast(); - } -} diff --git a/script/Deploy_OpStackParentHashesFetcher.s.sol b/script/Deploy_OpStackParentHashesFetcher.s.sol deleted file mode 100644 index 35874a5..0000000 --- a/script/Deploy_OpStackParentHashesFetcher.s.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import "forge-std/Script.sol"; - -import {OpStackParentHashesFetcher} from "src/core/x-rollup-messaging/parent-hashes-fetchers/OpStackParentHashesFetcher.sol"; -import {IL2OutputOracle} from "src/core/x-rollup-messaging/parent-hashes-fetchers/interfaces/IL2OutputOracle.sol"; - -import {console2} from "forge-std/console2.sol"; - -contract Deploy_OpStackParentHashesFetcher is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - - address l2OutputOracle = vm.envAddress("L2_OUTPUT_ORACLE"); - - OpStackParentHashesFetcher opStackParentHashesFetcher = new OpStackParentHashesFetcher(IL2OutputOracle(l2OutputOracle), 11155111); - - console2.log("OpStackParentHashesFetcher address: %s", address(opStackParentHashesFetcher)); - - vm.stopBroadcast(); - } -} diff --git a/script/Verify_11155111_to_11155111.sh b/script/Verify_11155111_to_11155111.sh new file mode 100644 index 0000000..b07c2c6 --- /dev/null +++ b/script/Verify_11155111_to_11155111.sh @@ -0,0 +1,25 @@ +source .env + +echo -e "Please enter contract addresses for the following contracts:\n" + +echo -n "HeadersStore: " +read HEADERS_STORE + +echo -n "FactsRegistry: " +read FACTS_REGISTRY + +echo -n "SimpleMessagesInbox: " +read SIMPLE_MESSAGES_INBOX + +echo -n "NativeParentHashesFetcher: " +read NATIVE_PARENT_HASHES_FETCHER + +echo -n "L1ToL1MessagesSender: " +read L1_TO_L1_MESSAGES_SENDER + +HEADERS_STORE=$HEADERS_STORE \ + FACTS_REGISTRY=$FACTS_REGISTRY \ + SIMPLE_MESSAGES_INBOX=$SIMPLE_MESSAGES_INBOX \ + NATIVE_PARENT_HASHES_FETCHER=$NATIVE_PARENT_HASHES_FETCHER \ + L1_TO_L1_MESSAGES_SENDER=$L1_TO_L1_MESSAGES_SENDER \ + npx hardhat run script/Verify_11155111_to_11155111.ts --network sepolia diff --git a/script/Verify_11155111_to_11155111.ts b/script/Verify_11155111_to_11155111.ts new file mode 100644 index 0000000..6d9af19 --- /dev/null +++ b/script/Verify_11155111_to_11155111.ts @@ -0,0 +1,77 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const aggregatorsFactory = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; +const simpleMessagesInboxAddress = process.env.SIMPLE_MESSAGES_INBOX || ""; +const headersStoreAddress = process.env.HEADERS_STORE || ""; +const factsRegistryAddress = process.env.FACTS_REGISTRY || ""; +const nativeParentHashesFetcherAddress = + process.env.NATIVE_PARENT_HASHES_FETCHER || ""; +const l1ToL1MessagesSenderAddress = process.env.L1_TO_L1_MESSAGES_SENDER || ""; + +if (!aggregatorsFactory) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set in .env"); +} +if (!simpleMessagesInboxAddress) { + throw new Error("SIMPLE_MESSAGES_INBOX is not set"); +} +if (!headersStoreAddress) { + throw new Error("HEADERS_STORE is not set"); +} +if (!factsRegistryAddress) { + throw new Error("FACTS_REGISTRY is not set"); +} +if (!nativeParentHashesFetcherAddress) { + throw new Error("NATIVE_PARENT_HASHES_FETCHER is not set"); +} +if (!l1ToL1MessagesSenderAddress) { + throw new Error("L1_TO_L1_MESSAGES_SENDER is not set"); +} + +export async function main() { + // verify SimpleMessagesInbox + await hre.run("verify:verify", { + address: simpleMessagesInboxAddress, + constructorArguments: [], + force: true, + }); + + // verify HeadersStore + await hre.run("verify:verify", { + address: headersStoreAddress, + constructorArguments: [simpleMessagesInboxAddress], + force: true, + }); + + // verify FactsRegistry + await hre.run("verify:verify", { + address: factsRegistryAddress, + constructorArguments: [headersStoreAddress], + force: true, + }); + + // verify NativeParentHashesFetcher + await hre.run("verify:verify", { + address: nativeParentHashesFetcherAddress, + constructorArguments: [], + force: true, + }); + + // verify L1ToL1MessagesSender + await hre.run("verify:verify", { + address: l1ToL1MessagesSenderAddress, + constructorArguments: [ + aggregatorsFactory, + nativeParentHashesFetcherAddress, + simpleMessagesInboxAddress, + ], + force: true, + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Verify_11155111_to_11155420.sh b/script/Verify_11155111_to_11155420.sh new file mode 100644 index 0000000..ea01336 --- /dev/null +++ b/script/Verify_11155111_to_11155420.sh @@ -0,0 +1,28 @@ +source .env + +echo -e "Please enter contract addresses for the following contracts:\n" + +echo -n "HeadersStore: " +read HEADERS_STORE + +echo -n "FactsRegistry: " +read FACTS_REGISTRY + +echo -n "OpMessagesInbox: " +read OP_MESSAGES_INBOX + +echo -n "NativeParentHashesFetcher: " +read NATIVE_PARENT_HASHES_FETCHER + +echo -n "L1ToOptimismMessagesSender: " +read L1_TO_OPTIMISM_MESSAGES_SENDER + +HEADERS_STORE=$HEADERS_STORE \ + FACTS_REGISTRY=$FACTS_REGISTRY \ + OP_MESSAGES_INBOX=$OP_MESSAGES_INBOX \ + npx hardhat run script/Verify_11155111_to_11155420_part1.ts --network optimismSepolia + +OP_MESSAGES_INBOX=$OP_MESSAGES_INBOX \ + NATIVE_PARENT_HASHES_FETCHER=$NATIVE_PARENT_HASHES_FETCHER \ + L1_TO_OPTIMISM_MESSAGES_SENDER=$L1_TO_OPTIMISM_MESSAGES_SENDER \ + npx hardhat run script/Verify_11155111_to_11155420_part2.ts --network sepolia diff --git a/script/Verify_11155111_to_11155420_part1.ts b/script/Verify_11155111_to_11155420_part1.ts new file mode 100644 index 0000000..6f22456 --- /dev/null +++ b/script/Verify_11155111_to_11155420_part1.ts @@ -0,0 +1,46 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const opMessagesInboxAddr = process.env.OP_MESSAGES_INBOX || ""; +const headersStoreAddr = process.env.HEADERS_STORE || ""; +const factsRegistryAddr = process.env.FACTS_REGISTRY || ""; + +if (!opMessagesInboxAddr) { + throw new Error("OP_MESSAGES_INBOX is not set"); +} +if (!headersStoreAddr) { + throw new Error("HEADERS_STORE is not set"); +} +if (!factsRegistryAddr) { + throw new Error("FACTS_REGISTRY is not set"); +} + +export async function main() { + // verify OpMessagesInbox + await hre.run("verify:verify", { + address: opMessagesInboxAddr, + constructorArguments: [], + force: true, + }); + + // verify HeadersStore + await hre.run("verify:verify", { + address: headersStoreAddr, + constructorArguments: [opMessagesInboxAddr], + force: true, + }); + + // verify FactsRegistry + await hre.run("verify:verify", { + address: factsRegistryAddr, + constructorArguments: [headersStoreAddr], + force: true, + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Verify_11155111_to_11155420_part2.ts b/script/Verify_11155111_to_11155420_part2.ts new file mode 100644 index 0000000..14995d2 --- /dev/null +++ b/script/Verify_11155111_to_11155420_part2.ts @@ -0,0 +1,55 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const aggregatorsFactory = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; +const l2Target = process.env.OP_MESSAGES_INBOX || ""; +const crossDomainMsgSender = + process.env.OPTIMISM_SEPOLIA_CROSS_DOMAIN_MESSENGER || ""; +const nativeParentHashesFetcherAddress = + process.env.NATIVE_PARENT_HASHES_FETCHER || ""; +const l1ToOptimismMessagesSenderAddress = + process.env.L1_TO_OPTIMISM_MESSAGES_SENDER || ""; + +if (!aggregatorsFactory) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set in .env"); +} +if (!crossDomainMsgSender) { + throw new Error("OPTIMISM_SEPOLIA_CROSS_DOMAIN_MESSENGER is not set in .env"); +} +if (!l2Target) { + throw new Error("OP_MESSAGES_INBOX is not set in .env"); +} +if (!nativeParentHashesFetcherAddress) { + throw new Error("NATIVE_PARENT_HASHES_FETCHER is not set"); +} +if (!l1ToOptimismMessagesSenderAddress) { + throw new Error("L1_TO_OPTIMISM_MESSAGES_SENDER is not set"); +} + +export async function main() { + // verify NativeParentHashesFetcher + await hre.run("verify:verify", { + address: nativeParentHashesFetcherAddress, + constructorArguments: [], + force: true, + }); + + // verify L1ToOptimismMessagesSender + await hre.run("verify:verify", { + address: l1ToOptimismMessagesSenderAddress, + constructorArguments: [ + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + crossDomainMsgSender, + ], + force: true, + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Verify_11155111_to_300.sh b/script/Verify_11155111_to_300.sh new file mode 100644 index 0000000..034f390 --- /dev/null +++ b/script/Verify_11155111_to_300.sh @@ -0,0 +1,28 @@ +source .env + +echo -e "Please enter contract addresses for the following contracts:\n" + +echo -n "HeadersStore: " +read HEADERS_STORE + +echo -n "FactsRegistry: " +read FACTS_REGISTRY + +echo -n "SimpleMessagesInbox: " +read SIMPLE_MESSAGES_INBOX + +echo -n "NativeParentHashesFetcher: " +read NATIVE_PARENT_HASHES_FETCHER + +echo -n "L1ToZkSyncMessagesSender: " +read L1_TO_ZKSYNC_MESSAGES_SENDER + +HEADERS_STORE=$HEADERS_STORE \ + FACTS_REGISTRY=$FACTS_REGISTRY \ + SIMPLE_MESSAGES_INBOX=$SIMPLE_MESSAGES_INBOX \ + npx hardhat run script/Verify_11155111_to_300_part1.ts --network zkSyncSepolia + +SIMPLE_MESSAGES_INBOX=$SIMPLE_MESSAGES_INBOX \ + NATIVE_PARENT_HASHES_FETCHER=$NATIVE_PARENT_HASHES_FETCHER \ + L1_TO_ZKSYNC_MESSAGES_SENDER=$L1_TO_ZKSYNC_MESSAGES_SENDER \ + npx hardhat run script/Verify_11155111_to_300_part2.ts --network sepolia diff --git a/script/Verify_11155111_to_300_part1.ts b/script/Verify_11155111_to_300_part1.ts new file mode 100644 index 0000000..84bc6cc --- /dev/null +++ b/script/Verify_11155111_to_300_part1.ts @@ -0,0 +1,46 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const simpleMessagesInboxAddr = process.env.SIMPLE_MESSAGES_INBOX || ""; +const headersStoreAddr = process.env.HEADERS_STORE || ""; +const factsRegistryAddr = process.env.FACTS_REGISTRY || ""; + +if (!simpleMessagesInboxAddr) { + throw new Error("SIMPLE_MESSAGES_INBOX is not set"); +} +if (!headersStoreAddr) { + throw new Error("HEADERS_STORE is not set"); +} +if (!factsRegistryAddr) { + throw new Error("FACTS_REGISTRY is not set"); +} + +export async function main() { + // verify SimpleMessagesInbox + await hre.run("verify:verify", { + address: simpleMessagesInboxAddr, + constructorArguments: [], + force: true, + }); + + // verify HeadersStore + await hre.run("verify:verify", { + address: headersStoreAddr, + constructorArguments: [simpleMessagesInboxAddr], + force: true, + }); + + // verify FactsRegistry + await hre.run("verify:verify", { + address: factsRegistryAddr, + constructorArguments: [headersStoreAddr], + force: true, + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Verify_11155111_to_300_part2.ts b/script/Verify_11155111_to_300_part2.ts new file mode 100644 index 0000000..cbe96f9 --- /dev/null +++ b/script/Verify_11155111_to_300_part2.ts @@ -0,0 +1,54 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const aggregatorsFactory = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; +const l2Target = process.env.SIMPLE_MESSAGES_INBOX || ""; +const zksyncMailbox = process.env.ZKSYNC_SEPOLIA_MAILBOX || ""; +const nativeParentHashesFetcherAddress = + process.env.NATIVE_PARENT_HASHES_FETCHER || ""; +const l1ToZkSyncMessagesSenderAddress = + process.env.L1_TO_ZKSYNC_MESSAGES_SENDER || ""; + +if (!aggregatorsFactory) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set in .env"); +} +if (!zksyncMailbox) { + throw new Error("ZKSYNC_SEPOLIA_MAILBOX is not set in .env"); +} +if (!l2Target) { + throw new Error("SIMPLE_MESSAGES_INBOX is not set in .env"); +} +if (!nativeParentHashesFetcherAddress) { + throw new Error("NATIVE_PARENT_HASHES_FETCHER is not set"); +} +if (!l1ToZkSyncMessagesSenderAddress) { + throw new Error("L1_TO_ZKSYNC_MESSAGES_SENDER is not set"); +} + +export async function main() { + // verify NativeParentHashesFetcher + await hre.run("verify:verify", { + address: nativeParentHashesFetcherAddress, + constructorArguments: [], + force: true, + }); + + // verify L1ToZkSyncMessagesSender + await hre.run("verify:verify", { + address: l1ToZkSyncMessagesSenderAddress, + constructorArguments: [ + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + zksyncMailbox, + ], + force: true, + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Verify_11155111_to_33111.sh b/script/Verify_11155111_to_33111.sh new file mode 100644 index 0000000..332cf3c --- /dev/null +++ b/script/Verify_11155111_to_33111.sh @@ -0,0 +1,35 @@ +source .env + +echo -e "Please enter contract addresses for the following contracts:\n" + +echo -n "SimpleMessagesInbox: " +read SIMPLE_MESSAGES_INBOX + +echo -n "HeadersStore: " +read HEADERS_STORE + +echo -n "FactsRegistry: " +read FACTS_REGISTRY + +echo -n "ApeChainMessageForwarder: " +read APE_CHAIN_MESSAGE_FORWARDER + +echo -n "NativeParentHashesFetcher: " +read NATIVE_PARENT_HASHES_FETCHER + +echo -n "L1ToApeChainMessagesSender: " +read L1_TO_APE_CHAIN_MESSAGES_SENDER + +HEADERS_STORE=$HEADERS_STORE \ + FACTS_REGISTRY=$FACTS_REGISTRY \ + SIMPLE_MESSAGES_INBOX=$SIMPLE_MESSAGES_INBOX \ + npx hardhat run script/Verify_11155111_to_33111_part1.ts --network apeChainSepolia + +APE_CHAIN_MESSAGE_FORWARDER=$APE_CHAIN_MESSAGE_FORWARDER \ + npx hardhat run script/Verify_11155111_to_33111_part2.ts --network arbitrumSepolia + +APE_CHAIN_MESSAGE_FORWARDER=$APE_CHAIN_MESSAGE_FORWARDER \ + SIMPLE_MESSAGES_INBOX=$SIMPLE_MESSAGES_INBOX \ + NATIVE_PARENT_HASHES_FETCHER=$NATIVE_PARENT_HASHES_FETCHER \ + L1_TO_APE_CHAIN_MESSAGES_SENDER=$L1_TO_APE_CHAIN_MESSAGES_SENDER \ + npx hardhat run script/Verify_11155111_to_33111_part3.ts --network sepolia diff --git a/script/Verify_11155111_to_33111_part1.ts b/script/Verify_11155111_to_33111_part1.ts new file mode 100644 index 0000000..9c3633a --- /dev/null +++ b/script/Verify_11155111_to_33111_part1.ts @@ -0,0 +1,58 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const simpleMessagesInboxAddr = process.env.SIMPLE_MESSAGES_INBOX || ""; +const headersStoreAddr = process.env.HEADERS_STORE || ""; +const factsRegistryAddr = process.env.FACTS_REGISTRY || ""; + +if (!simpleMessagesInboxAddr) { + throw new Error("SIMPLE_MESSAGES_INBOX is not set"); +} +if (!headersStoreAddr) { + throw new Error("HEADERS_STORE is not set"); +} +if (!factsRegistryAddr) { + throw new Error("FACTS_REGISTRY is not set"); +} + +export async function main() { + // verify SimpleMessagesInbox + await hre + .run("verify:verify", { + address: simpleMessagesInboxAddr, + constructorArguments: [], + force: true, + }) + .catch((error) => { + console.error("Verification of SimpleMessagesInbox failed:", error); + }); + + // verify HeadersStore + await hre + .run("verify:verify", { + address: headersStoreAddr, + constructorArguments: [simpleMessagesInboxAddr], + force: true, + }) + .catch((error) => { + console.error("Verification of HeadersStore failed:", error); + }); + + // verify FactsRegistry + await hre + .run("verify:verify", { + address: factsRegistryAddr, + constructorArguments: [headersStoreAddr], + force: true, + }) + .catch((error) => { + console.error("Verification of FactsRegistry failed:", error); + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Verify_11155111_to_33111_part2.ts b/script/Verify_11155111_to_33111_part2.ts new file mode 100644 index 0000000..5fec315 --- /dev/null +++ b/script/Verify_11155111_to_33111_part2.ts @@ -0,0 +1,37 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const apeChainMessageForwarderAddr = + process.env.APE_CHAIN_MESSAGE_FORWARDER || ""; +const apeChainInbox = process.env.APE_CHAIN_SEPOLIA_INBOX || ""; +const apeCoin = process.env.APE_CHAIN_SEPOLIA_ARBITRUM_APE_COIN || ""; + +if (!apeChainMessageForwarderAddr) { + throw new Error("APE_CHAIN_MESSAGE_FORWARDER is not set in .env"); +} +if (!apeChainInbox) { + throw new Error("APE_CHAIN_SEPOLIA_INBOX is not set in .env"); +} +if (!apeCoin) { + throw new Error("APE_CHAIN_SEPOLIA_ARBITRUM_APE_COIN is not set in .env"); +} + +export async function main() { + // verify ApeChainMessageForwarder + await hre + .run("verify:verify", { + address: apeChainMessageForwarderAddr, + constructorArguments: [apeChainInbox, apeCoin], + force: true, + }) + .catch((error) => { + console.error("Verification of ApeChainMessageForwarder failed:", error); + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Verify_11155111_to_33111_part3.ts b/script/Verify_11155111_to_33111_part3.ts new file mode 100644 index 0000000..6ac11bd --- /dev/null +++ b/script/Verify_11155111_to_33111_part3.ts @@ -0,0 +1,71 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const nativeParentHashesFetcherAddr = + process.env.NATIVE_PARENT_HASHES_FETCHER || ""; +const l1ToApeChainMessagesSenderAddr = + process.env.L1_TO_APE_CHAIN_MESSAGES_SENDER || ""; +const apeChainMessageForwarderAddr = + process.env.APE_CHAIN_MESSAGE_FORWARDER || ""; +const simpleMessageInboxAddr = process.env.SIMPLE_MESSAGES_INBOX || ""; +const aggregatorsFactoryAddr = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; +const arbitrumInboxAddr = process.env.ARBITRUM_SEPOLIA_INBOX || ""; + +if (!nativeParentHashesFetcherAddr) { + throw new Error("NATIVE_PARENT_HASHES_FETCHER is not set"); +} +if (!l1ToApeChainMessagesSenderAddr) { + throw new Error("L1_TO_APE_CHAIN_MESSAGES_SENDER is not set"); +} +if (!apeChainMessageForwarderAddr) { + throw new Error("APE_CHAIN_MESSAGE_FORWARDER is not set"); +} +if (!simpleMessageInboxAddr) { + throw new Error("SIMPLE_MESSAGES_INBOX is not set"); +} +if (!aggregatorsFactoryAddr) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set"); +} +if (!arbitrumInboxAddr) { + throw new Error("ARBITRUM_SEPOLIA_INBOX is not set"); +} + +export async function main() { + // verify NativeParentHashesFetcher + await hre + .run("verify:verify", { + address: nativeParentHashesFetcherAddr, + constructorArguments: [], + force: true, + }) + .catch((error) => { + console.error("Verification of NativeParentHashesFetcher failed:", error); + }); + + // verify L1ToApeChainMessagesSender + await hre + .run("verify:verify", { + address: l1ToApeChainMessagesSenderAddr, + constructorArguments: [ + aggregatorsFactoryAddr, + nativeParentHashesFetcherAddr, + apeChainMessageForwarderAddr, + simpleMessageInboxAddr, + arbitrumInboxAddr, + ], + force: true, + }) + .catch((error) => { + console.error( + "Verification of L1ToApeChainMessagesSender failed:", + error, + ); + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Verify_11155111_to_421614.sh b/script/Verify_11155111_to_421614.sh new file mode 100644 index 0000000..af408f6 --- /dev/null +++ b/script/Verify_11155111_to_421614.sh @@ -0,0 +1,28 @@ +source .env + +echo -e "Please enter contract addresses for the following contracts:\n" + +echo -n "HeadersStore: " +read HEADERS_STORE + +echo -n "FactsRegistry: " +read FACTS_REGISTRY + +echo -n "SimpleMessagesInbox: " +read SIMPLE_MESSAGES_INBOX + +echo -n "NativeParentHashesFetcher: " +read NATIVE_PARENT_HASHES_FETCHER + +echo -n "L1ToArbitrumMessagesSender: " +read L1_TO_ARBITRUM_MESSAGES_SENDER + +HEADERS_STORE=$HEADERS_STORE \ + FACTS_REGISTRY=$FACTS_REGISTRY \ + SIMPLE_MESSAGES_INBOX=$SIMPLE_MESSAGES_INBOX \ + npx hardhat run script/Verify_11155111_to_421614_part1.ts --network arbitrumSepolia + +SIMPLE_MESSAGES_INBOX=$SIMPLE_MESSAGES_INBOX \ + NATIVE_PARENT_HASHES_FETCHER=$NATIVE_PARENT_HASHES_FETCHER \ + L1_TO_ARBITRUM_MESSAGES_SENDER=$L1_TO_ARBITRUM_MESSAGES_SENDER \ + npx hardhat run script/Verify_11155111_to_421614_part2.ts --network sepolia diff --git a/script/Verify_11155111_to_421614_part1.ts b/script/Verify_11155111_to_421614_part1.ts new file mode 100644 index 0000000..84bc6cc --- /dev/null +++ b/script/Verify_11155111_to_421614_part1.ts @@ -0,0 +1,46 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const simpleMessagesInboxAddr = process.env.SIMPLE_MESSAGES_INBOX || ""; +const headersStoreAddr = process.env.HEADERS_STORE || ""; +const factsRegistryAddr = process.env.FACTS_REGISTRY || ""; + +if (!simpleMessagesInboxAddr) { + throw new Error("SIMPLE_MESSAGES_INBOX is not set"); +} +if (!headersStoreAddr) { + throw new Error("HEADERS_STORE is not set"); +} +if (!factsRegistryAddr) { + throw new Error("FACTS_REGISTRY is not set"); +} + +export async function main() { + // verify SimpleMessagesInbox + await hre.run("verify:verify", { + address: simpleMessagesInboxAddr, + constructorArguments: [], + force: true, + }); + + // verify HeadersStore + await hre.run("verify:verify", { + address: headersStoreAddr, + constructorArguments: [simpleMessagesInboxAddr], + force: true, + }); + + // verify FactsRegistry + await hre.run("verify:verify", { + address: factsRegistryAddr, + constructorArguments: [headersStoreAddr], + force: true, + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/script/Verify_11155111_to_421614_part2.ts b/script/Verify_11155111_to_421614_part2.ts new file mode 100644 index 0000000..5783d3a --- /dev/null +++ b/script/Verify_11155111_to_421614_part2.ts @@ -0,0 +1,54 @@ +import dotenv from "dotenv"; +import hre from "hardhat"; + +dotenv.config(); + +const aggregatorsFactory = process.env.L1_SEPOLIA_AGGREGATORS_FACTORY || ""; +const l2Target = process.env.SIMPLE_MESSAGES_INBOX || ""; +const arbitrumInbox = process.env.ARBITRUM_SEPOLIA_INBOX || ""; +const nativeParentHashesFetcherAddress = + process.env.NATIVE_PARENT_HASHES_FETCHER || ""; +const l1ToArbitrumMessagesSenderAddress = + process.env.L1_TO_ARBITRUM_MESSAGES_SENDER || ""; + +if (!aggregatorsFactory) { + throw new Error("L1_SEPOLIA_AGGREGATORS_FACTORY is not set in .env"); +} +if (!arbitrumInbox) { + throw new Error("ARBITRUM_SEPOLIA_INBOX is not set in .env"); +} +if (!l2Target) { + throw new Error("SIMPLE_MESSAGES_INBOX is not set in .env"); +} +if (!nativeParentHashesFetcherAddress) { + throw new Error("NATIVE_PARENT_HASHES_FETCHER is not set"); +} +if (!l1ToArbitrumMessagesSenderAddress) { + throw new Error("L1_TO_ARBITRUM_MESSAGES_SENDER is not set"); +} + +export async function main() { + // verify NativeParentHashesFetcher + await hre.run("verify:verify", { + address: nativeParentHashesFetcherAddress, + constructorArguments: [], + force: true, + }); + + // verify L1ToArbitrumMessagesSender + await hre.run("verify:verify", { + address: l1ToArbitrumMessagesSenderAddress, + constructorArguments: [ + aggregatorsFactory, + nativeParentHashesFetcherAddress, + l2Target, + arbitrumInbox, + ], + force: true, + }); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/src/core/FactsRegistry.sol b/src/core/FactsRegistry.sol index 18da402..78d0388 100644 --- a/src/core/FactsRegistry.sol +++ b/src/core/FactsRegistry.sol @@ -2,24 +2,19 @@ pragma solidity ^0.8.19; import {StatelessMmr} from "solidity-mmr/lib/StatelessMmr.sol"; -import {Lib_SecureMerkleTrie as SecureMerkleTrie} from "@optimism/libraries/trie/Lib_SecureMerkleTrie.sol"; -import {Lib_RLPReader as RLPReader} from "@optimism/libraries/rlp/Lib_RLPReader.sol"; +import {Lib_SecureMerkleTrie as SecureMerkleTrie} from "../lib/external/trie/Lib_SecureMerkleTrie.sol"; +import {Lib_RLPReader as RLPReader} from "../lib/external/rlp/Lib_RLPReader.sol"; import {HeadersStore} from "./HeadersStore.sol"; import {Types} from "../lib/Types.sol"; -import {Bitmap16} from "../lib/Bitmap16.sol"; import {NullableStorageSlot} from "../lib/NullableStorageSlot.sol"; contract FactsRegistry { - using Bitmap16 for uint16; - using RLPReader for bytes; using RLPReader for RLPReader.RLPItem; - event AccountProven( - address account, uint256 blockNumber, uint256 nonce, uint256 balance, bytes32 codeHash, bytes32 storageHash - ); + event AccountProven(address account, uint256 blockNumber, uint256 nonce, uint256 balance, bytes32 codeHash, bytes32 storageHash); event StorageSlotProven(address account, uint256 blockNumber, bytes32 slot, bytes32 slotValue); uint8 private constant ACCOUNT_NONCE_INDEX = 0; @@ -40,48 +35,37 @@ contract FactsRegistry { headersStore = HeadersStore(_headersStore); } - function proveAccount( - address account, - uint16 accountFieldsToSave, - Types.BlockHeaderProof calldata headerProof, - bytes calldata accountTrieProof - ) external { + function proveAccount(address account, uint16 accountFieldsToSave, Types.BlockHeaderProof calldata headerProof, bytes calldata accountTrieProof) external { // Verify the proof and decode the account fields - (uint256 nonce, uint256 accountBalance, bytes32 codeHash, bytes32 storageRoot) = - verifyAccount(account, headerProof, accountTrieProof); + (uint256 nonce, uint256 accountBalance, bytes32 codeHash, bytes32 storageRoot) = verifyAccount(account, headerProof, accountTrieProof); // Save the desired account properties to the storage - if (accountFieldsToSave.readBitAtIndexFromRight(0)) { + if (_readBitAtIndexFromRight(accountFieldsToSave, 0)) { uint256 nonceNullable = NullableStorageSlot.toNullable(nonce); _accountField[account][headerProof.blockNumber][Types.AccountFields.NONCE] = bytes32(nonceNullable); } - if (accountFieldsToSave.readBitAtIndexFromRight(1)) { + if (_readBitAtIndexFromRight(accountFieldsToSave, 1)) { uint256 accountBalanceNullable = NullableStorageSlot.toNullable(accountBalance); - _accountField[account][headerProof.blockNumber][Types.AccountFields.BALANCE] = - bytes32(accountBalanceNullable); + _accountField[account][headerProof.blockNumber][Types.AccountFields.BALANCE] = bytes32(accountBalanceNullable); } - if (accountFieldsToSave.readBitAtIndexFromRight(2)) { + if (_readBitAtIndexFromRight(accountFieldsToSave, 2)) { uint256 codeHashNullable = NullableStorageSlot.toNullable(uint256(codeHash)); _accountField[account][headerProof.blockNumber][Types.AccountFields.CODE_HASH] = bytes32(codeHashNullable); } - if (accountFieldsToSave.readBitAtIndexFromRight(3)) { + if (_readBitAtIndexFromRight(accountFieldsToSave, 3)) { uint256 storageRootNullable = NullableStorageSlot.toNullable(uint256(storageRoot)); - _accountField[account][headerProof.blockNumber][Types.AccountFields.STORAGE_ROOT] = - bytes32(storageRootNullable); + _accountField[account][headerProof.blockNumber][Types.AccountFields.STORAGE_ROOT] = bytes32(storageRootNullable); } emit AccountProven(account, headerProof.blockNumber, nonce, accountBalance, codeHash, storageRoot); } - function proveStorage(address account, uint256 blockNumber, bytes32 slot, bytes calldata storageSlotTrieProof) - external - { + function proveStorage(address account, uint256 blockNumber, bytes32 slot, bytes calldata storageSlotTrieProof) external { // Verify the proof and decode the slot value - uint256 slotValueNullable = - NullableStorageSlot.toNullable(uint256(verifyStorage(account, blockNumber, slot, storageSlotTrieProof))); + uint256 slotValueNullable = NullableStorageSlot.toNullable(uint256(verifyStorage(account, blockNumber, slot, storageSlotTrieProof))); _accountStorageSlotValues[account][blockNumber][slot] = bytes32(slotValueNullable); emit StorageSlotProven(account, blockNumber, slot, bytes32(NullableStorageSlot.fromNullable(slotValueNullable))); } @@ -97,17 +81,12 @@ contract FactsRegistry { // Verify the account state proof bytes32 stateRoot = _getStateRoot(headerProof.provenBlockHeader); - (bool doesAccountExist, bytes memory accountRLP) = - SecureMerkleTrie.get(abi.encodePacked(account), accountTrieProof, stateRoot); + (bool doesAccountExist, bytes memory accountRLP) = SecureMerkleTrie.get(abi.encodePacked(account), accountTrieProof, stateRoot); // Decode the account fields (nonce, accountBalance, storageRoot, codeHash) = _decodeAccountFields(doesAccountExist, accountRLP); } - function verifyStorage(address account, uint256 blockNumber, bytes32 slot, bytes calldata storageSlotTrieProof) - public - view - returns (bytes32 slotValue) - { + function verifyStorage(address account, uint256 blockNumber, bytes32 slot, bytes calldata storageSlotTrieProof) public view returns (bytes32 slotValue) { bytes32 storageRootRaw = _accountField[account][blockNumber][Types.AccountFields.STORAGE_ROOT]; // Convert from nullable bytes32 storageRoot = bytes32(NullableStorageSlot.fromNullable(uint256(storageRootRaw))); @@ -117,11 +96,7 @@ contract FactsRegistry { slotValue = slotValueRLP.toRLPItem().readBytes32(); } - function accountField(address account, uint256 blockNumber, Types.AccountFields field) - external - view - returns (bytes32) - { + function accountField(address account, uint256 blockNumber, Types.AccountFields field) external view returns (bytes32) { bytes32 valueRaw = _accountField[account][blockNumber][field]; // If value is null revert if (NullableStorageSlot.isNull(uint256(valueRaw))) { @@ -130,11 +105,7 @@ contract FactsRegistry { return bytes32(NullableStorageSlot.fromNullable(uint256(valueRaw))); } - function accountStorageSlotValues(address account, uint256 blockNumber, bytes32 slot) - external - view - returns (bytes32) - { + function accountStorageSlotValues(address account, uint256 blockNumber, bytes32 slot) external view returns (bytes32) { bytes32 valueRaw = _accountStorageSlotValues[account][blockNumber][slot]; // If value is null revert if (NullableStorageSlot.isNull(uint256(valueRaw))) { @@ -149,24 +120,13 @@ contract FactsRegistry { bytes32 blockHeaderHash = keccak256(proof.provenBlockHeader); - StatelessMmr.verifyProof( - proof.blockProofLeafIndex, - blockHeaderHash, - proof.mmrElementInclusionProof, - proof.mmrPeaks, - proof.mmrTreeSize, - mmrRoot - ); + StatelessMmr.verifyProof(proof.blockProofLeafIndex, blockHeaderHash, proof.mmrElementInclusionProof, proof.mmrPeaks, proof.mmrTreeSize, mmrRoot); uint256 actualBlockNumber = _decodeBlockNumber(proof.provenBlockHeader); require(actualBlockNumber == proof.blockNumber, "ERR_INVALID_BLOCK_NUMBER"); } - function _decodeAccountFields(bool doesAccountExist, bytes memory accountRLP) - internal - pure - returns (uint256 nonce, uint256 balance, bytes32 storageRoot, bytes32 codeHash) - { + function _decodeAccountFields(bool doesAccountExist, bytes memory accountRLP) internal pure returns (uint256 nonce, uint256 balance, bytes32 storageRoot, bytes32 codeHash) { if (!doesAccountExist) { return (0, 0, EMPTY_TRIE_ROOT_HASH, EMPTY_CODE_HASH); } @@ -186,4 +146,9 @@ contract FactsRegistry { function _decodeBlockNumber(bytes memory headerRlp) internal pure returns (uint256) { return RLPReader.toRLPItem(headerRlp).readList()[8].readUint256(); } + + function _readBitAtIndexFromRight(uint16 bitmap, uint256 index) internal pure returns (bool value) { + require(15 >= index, "ERR_OUR_OF_RANGE"); + return (bitmap & (1 << index)) > 0; + } } diff --git a/src/core/HeadersStore.sol b/src/core/HeadersStore.sol index eecafb1..642c441 100644 --- a/src/core/HeadersStore.sol +++ b/src/core/HeadersStore.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.19; -import {Lib_RLPReader as RLPReader} from "@optimism/libraries/rlp/Lib_RLPReader.sol"; +import {Lib_RLPReader as RLPReader} from "../lib/external/rlp/Lib_RLPReader.sol"; import {StatelessMmr} from "solidity-mmr/lib/StatelessMmr.sol"; contract HeadersStore { diff --git a/src/core/x-rollup-messaging/ApeChainMessageForwarder.sol b/src/core/x-rollup-messaging/ApeChainMessageForwarder.sol new file mode 100644 index 0000000..3057b31 --- /dev/null +++ b/src/core/x-rollup-messaging/ApeChainMessageForwarder.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.19; + +import {Ownable2Step} from "@openzeppelin/contracts/access/Ownable2Step.sol"; +import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import {IApeChainInbox} from "./interfaces/IApeChainInbox.sol"; + +contract ApeChainMessageForwarder is Ownable2Step { + address public crossDomainMsgSender; + IApeChainInbox public immutable apeChainInbox; + IERC20 public immutable apeCoin; + + constructor(IApeChainInbox _apeChainInbox, IERC20 _apeCoin) Ownable(msg.sender) { + apeChainInbox = _apeChainInbox; + apeCoin = _apeCoin; + } + + function forwardMessageToApeChain( + address l3Target, + uint l3MaxSubmissionCost, + uint l3GasLimit, + uint l3MaxFeePerGas, + uint tokenTotalFeeAmount, + bytes calldata messageData + ) external payable { + require(msg.sender == crossDomainMsgSender, "Not authorized cross-domain message. Only cross-domain counterpart can call this function."); + + apeCoin.approve(address(apeChainInbox), tokenTotalFeeAmount); + + apeChainInbox.createRetryableTicket(l3Target, 0, l3MaxSubmissionCost, address(this), address(0), l3GasLimit, l3MaxFeePerGas, tokenTotalFeeAmount, messageData); + } + + function transferFunds(address recipient, uint amount) external onlyOwner { + apeCoin.transfer(recipient, amount); + } + + function setCrossDomainMsgSender(address _crossDomainMsgSender) external onlyOwner { + crossDomainMsgSender = _crossDomainMsgSender; + } +} diff --git a/src/core/x-rollup-messaging/interfaces/IApeChainInbox.sol b/src/core/x-rollup-messaging/interfaces/IApeChainInbox.sol new file mode 100644 index 0000000..e36fdaa --- /dev/null +++ b/src/core/x-rollup-messaging/interfaces/IApeChainInbox.sol @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.19; + +interface IApeChainInbox { + /** + * @notice Put a message in the L2 inbox that can be reexecuted for some fixed amount of time if it reverts + * @dev all tokenTotalFeeAmount will be deposited to callValueRefundAddress on L2 + * @dev Gas limit and maxFeePerGas should not be set to 1 as that is used to trigger the RetryableData error + * @param to destination L2 contract address + * @param l2CallValue call value for retryable L2 message + * @param maxSubmissionCost Max gas deducted from user's L2 balance to cover base submission fee + * @param excessFeeRefundAddress gasLimit x maxFeePerGas - execution cost gets credited here on L2 balance + * @param callValueRefundAddress l2Callvalue gets credited here on L2 if retryable txn times out or gets cancelled + * @param gasLimit Max gas deducted from user's L2 balance to cover L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param maxFeePerGas price bid for L2 execution. Should not be set to 1 (magic value used to trigger the RetryableData error) + * @param tokenTotalFeeAmount amount of fees to be deposited in native token to cover for retryable ticket cost + * @param data ABI encoded data of L2 message + * @return unique message number of the retryable transaction + */ + function createRetryableTicket( + address to, + uint256 l2CallValue, + uint256 maxSubmissionCost, + address excessFeeRefundAddress, + address callValueRefundAddress, + uint256 gasLimit, + uint256 maxFeePerGas, + uint256 tokenTotalFeeAmount, + bytes calldata data + ) external returns (uint256); +} diff --git a/src/core/x-rollup-messaging/outbox/AbstractL1ToL3MessagesSender.sol b/src/core/x-rollup-messaging/outbox/AbstractL1ToL3MessagesSender.sol new file mode 100644 index 0000000..92f46c7 --- /dev/null +++ b/src/core/x-rollup-messaging/outbox/AbstractL1ToL3MessagesSender.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.19; + +import {ISharpProofsAggregator} from "../../interfaces/ISharpProofsAggregator.sol"; +import {ISharpProofsAggregatorsFactory} from "../../interfaces/ISharpProofsAggregatorsFactory.sol"; +import {IParentHashFetcher} from "../interfaces/IParentHashFetcher.sol"; + +abstract contract AbstractL1ToL3MessagesSender { + ISharpProofsAggregatorsFactory public immutable proofsAggregatorsFactory; + IParentHashFetcher public immutable parentHashFetcher; + address public immutable l2Target; + address public immutable l3Target; + + constructor(ISharpProofsAggregatorsFactory _proofsAggregatorsFactory, IParentHashFetcher _parentHashFetcher, address _l2Target, address _l3Target) { + proofsAggregatorsFactory = _proofsAggregatorsFactory; + parentHashFetcher = _parentHashFetcher; + l2Target = _l2Target; + l3Target = _l3Target; + } + + /// @notice Send an exact L1 parent hash to L3 + /// @param _parentHashFetcherCtx ABI encoded context for the parent hash fetcher + /// @param _xDomainL2MsgGasData the gas data for the cross-domain message, depends on the destination L2 + /// @param _xDomainL3MsgGasData the gas data for the cross-domain message, depends on the destination L3 + function sendExactParentHashToL3(bytes calldata _parentHashFetcherCtx, bytes memory _xDomainL2MsgGasData, bytes memory _xDomainL3MsgGasData) external payable { + (uint256 parentHashFetchedForBlock, bytes32 parentHash) = parentHashFetcher.fetchParentHash(_parentHashFetcherCtx); + require(parentHash != bytes32(0), "ERR_INVALID_BLOCK_NUMBER"); + _sendMessage( + l2Target, + l3Target, + abi.encodeWithSignature("receiveHashForBlock(uint256,bytes32)", parentHashFetchedForBlock, parentHash), + _xDomainL2MsgGasData, + _xDomainL3MsgGasData + ); + } + + function sendKeccakMMRTreeToL3(uint256 aggregatorId, uint256 newMmrId, bytes memory _xDomainL2MsgGasData, bytes memory _xDomainL3MsgGasData) external payable { + address existingAggregatorAddr = proofsAggregatorsFactory.aggregatorsById(aggregatorId); + require(existingAggregatorAddr != address(0), "Unknown aggregator"); + ISharpProofsAggregator aggregator = ISharpProofsAggregator(existingAggregatorAddr); + + bytes32 keccakMMRRoot = aggregator.getMMRKeccakRoot(); + uint256 mmrSize = aggregator.getMMRSize(); + + // Ensure initialized aggregator + require(mmrSize >= 1, "Invalid tree size"); + require(keccakMMRRoot != bytes32(0), "Invalid root (keccak)"); + + _sendMessage( + l2Target, + l3Target, + abi.encodeWithSignature("receiveKeccakMMR(uint256,uint256,bytes32,uint256)", aggregatorId, mmrSize, keccakMMRRoot, newMmrId), + _xDomainL2MsgGasData, + _xDomainL3MsgGasData + ); + } + + function _sendMessage(address _l2Target, address _l3Target, bytes memory _data, bytes memory _xDomainL2MsgGasData, bytes memory _xDomainL3MsgGasData) internal virtual; +} diff --git a/src/core/x-rollup-messaging/outbox/L1ToApeChainMessagesSender.sol b/src/core/x-rollup-messaging/outbox/L1ToApeChainMessagesSender.sol new file mode 100644 index 0000000..10a2bae --- /dev/null +++ b/src/core/x-rollup-messaging/outbox/L1ToApeChainMessagesSender.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity ^0.8.19; + +import {AbstractL1ToL3MessagesSender} from "./AbstractL1ToL3MessagesSender.sol"; +import {IArbitrumInbox} from "../interfaces/IArbitrumInbox.sol"; +import {ISharpProofsAggregatorsFactory} from "../../interfaces/ISharpProofsAggregatorsFactory.sol"; +import {IParentHashFetcher} from "../interfaces/IParentHashFetcher.sol"; + +contract L1ToApeChainMessagesSender is AbstractL1ToL3MessagesSender { + IArbitrumInbox public immutable arbitrumInbox; + + constructor( + ISharpProofsAggregatorsFactory _proofsAggregatorsFactory, + IParentHashFetcher _parentHashFetcher, + address _l2Target, + address _l3Target, + IArbitrumInbox _arbitrumInbox + ) AbstractL1ToL3MessagesSender(_proofsAggregatorsFactory, _parentHashFetcher, _l2Target, _l3Target) { + arbitrumInbox = _arbitrumInbox; + } + + function _sendMessage(address _l2Target, address _l3Target, bytes memory _data, bytes memory _xDomainL2MsgGasData, bytes memory _xDomainL3MsgGasData) internal override { + (uint256 l2GasLimit, uint256 l2MaxFeePerGas, uint256 l2MaxSubmissionCost) = abi.decode(_xDomainL2MsgGasData, (uint256, uint256, uint256)); + + (uint256 l3GasLimit, uint256 l3MaxFeePerGas, uint256 l3MaxSubmissionCost, uint256 tokenTotalFeeAmount) = abi.decode( + _xDomainL3MsgGasData, + (uint256, uint256, uint256, uint256) + ); + + bytes memory l2ToL3Message = abi.encodeWithSignature( + "forwardMessageToApeChain(address,uint256,uint256,uint256,uint256,bytes)", + _l3Target, + l3MaxSubmissionCost, + l3GasLimit, + l3MaxFeePerGas, + tokenTotalFeeAmount, + _data + ); + + arbitrumInbox.createRetryableTicket{value: msg.value}(_l2Target, 0, l2MaxSubmissionCost, msg.sender, address(0), l2GasLimit, l2MaxFeePerGas, l2ToL3Message); + } +} diff --git a/src/core/x-rollup-messaging/outbox/L1ToArbitrumMessagesSender.sol b/src/core/x-rollup-messaging/outbox/L1ToArbitrumMessagesSender.sol index 86b072e..774cd0d 100644 --- a/src/core/x-rollup-messaging/outbox/L1ToArbitrumMessagesSender.sol +++ b/src/core/x-rollup-messaging/outbox/L1ToArbitrumMessagesSender.sol @@ -20,6 +20,6 @@ contract L1ToArbitrumMessagesSender is AbstractMessagesSender { function _sendMessage(address _l2Target, bytes memory _data, bytes memory _xDomainMsgGasData) internal override { (uint256 l2GasLimit, uint256 maxFeePerGas, uint256 maxSubmissionCost) = abi.decode(_xDomainMsgGasData, (uint256, uint256, uint256)); - arbitrumInbox.createRetryableTicket(_l2Target, 0, maxSubmissionCost, msg.sender, address(0), l2GasLimit, maxFeePerGas, _data); + arbitrumInbox.createRetryableTicket{value: msg.value}(_l2Target, 0, maxSubmissionCost, msg.sender, address(0), l2GasLimit, maxFeePerGas, _data); } } diff --git a/src/core/x-rollup-messaging/outbox/L1ToZksyncMessagesSender.sol b/src/core/x-rollup-messaging/outbox/L1ToZksyncMessagesSender.sol index c2fcb44..6c5ce7a 100644 --- a/src/core/x-rollup-messaging/outbox/L1ToZksyncMessagesSender.sol +++ b/src/core/x-rollup-messaging/outbox/L1ToZksyncMessagesSender.sol @@ -20,6 +20,6 @@ contract L1ToZkSyncMessagesSender is AbstractMessagesSender { function _sendMessage(address _l2Target, bytes memory _data, bytes memory _xDomainMsgGasData) internal override { (uint256 l2GasLimit, uint256 l2GasPerPubdataByteLimit) = abi.decode(_xDomainMsgGasData, (uint256, uint256)); - zksyncMailbox.requestL2Transaction(_l2Target, 0, _data, l2GasLimit, l2GasPerPubdataByteLimit, new bytes[](0), msg.sender); + zksyncMailbox.requestL2Transaction{value: msg.value}(_l2Target, 0, _data, l2GasLimit, l2GasPerPubdataByteLimit, new bytes[](0), msg.sender); } } diff --git a/src/remappers/TimestampRemapper.sol b/src/remappers/TimestampRemapper.sol index 6b44bc7..32bf197 100644 --- a/src/remappers/TimestampRemapper.sol +++ b/src/remappers/TimestampRemapper.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.20; import {HeadersStore} from "../core/HeadersStore.sol"; import {Types} from "../lib/Types.sol"; -import {Lib_RLPReader as RLPReader} from "@optimism/libraries/rlp/Lib_RLPReader.sol"; +import {Lib_RLPReader as RLPReader} from "../lib/external/rlp/Lib_RLPReader.sol"; import {StatelessMmr} from "solidity-mmr/lib/StatelessMmr.sol"; import {StatelessMmrHelpers} from "solidity-mmr/lib/StatelessMmrHelpers.sol"; import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; @@ -12,11 +12,8 @@ import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; contract TimestampRemapper { using RLPReader for RLPReader.RLPItem; - event MapperCreated(uint256 mapperId, uint256 startsFromBlock); - event RemappedBlocksBatch( - uint256 mapperId, uint256 startsFromBlock, uint256 endsAtBlock, bytes32 mmrRoot, uint256 mmrSize - ); + event RemappedBlocksBatch(uint256 mapperId, uint256 startsFromBlock, uint256 endsAtBlock, bytes32 mmrRoot, uint256 mmrSize); /// @notice struct stored in the contract storage, represents the mapper struct MapperInfo { @@ -68,11 +65,7 @@ contract TimestampRemapper { /// @param targettedMapId the id of the mapper to which the headers are appended /// @param lastPeaks the peaks of the grown remapping MMR /// @param headersWithProofs the headers with their proofs against the MMR managed by the headers processor - function reindexBatch( - uint256 targettedMapId, - bytes32[] calldata lastPeaks, - Types.BlockHeaderProof[] calldata headersWithProofs - ) external { + function reindexBatch(uint256 targettedMapId, bytes32[] calldata lastPeaks, Types.BlockHeaderProof[] calldata headersWithProofs) external { // Ensure that remapper exists at the given id bool isInitialized = mappers[targettedMapId].initialized; require(isInitialized, "ERR_UNINITIALIZED_MAPPER"); @@ -119,8 +112,7 @@ contract TimestampRemapper { uint256 timestamp = _decodeBlockTimestamp(headersWithProofs[i].provenBlockHeader); // Append the timestamp to the remapping MMR - (nextSize, nextRoot, nextPeaks) = - StatelessMmr.appendWithPeaksRetrieval(bytes32(timestamp), nextPeaks, nextSize, nextRoot); + (nextSize, nextRoot, nextPeaks) = StatelessMmr.appendWithPeaksRetrieval(bytes32(timestamp), nextPeaks, nextSize, nextRoot); // Increment the next expected block number nextExpectedBlockAppended++; @@ -155,14 +147,7 @@ contract TimestampRemapper { uint256 currentElement = (lowerBound + upperBound) / 2; require(leafIndex == currentElement, "ERR_INVALID_SEARCH_PATH"); - StatelessMmr.verifyProof( - searchPath[i].elementIndex, - searchPath[i].leafValue, - searchPath[i].inclusionProof, - peaks, - searchAtSize, - remappedRoot - ); + StatelessMmr.verifyProof(searchPath[i].elementIndex, searchPath[i].leafValue, searchPath[i].inclusionProof, peaks, searchAtSize, remappedRoot); if (timestamp < uint256(searchPath[i].leafValue)) { require(currentElement >= 1, "ERR_SEARCH_BOUND_OUT_OF_RANGE"); diff --git a/test/HeadersStore.t.sol b/test/HeadersStore.t.sol index 35f307b..794e8b5 100644 --- a/test/HeadersStore.t.sol +++ b/test/HeadersStore.t.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.9; import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; import {StatelessMmr} from "solidity-mmr/lib/StatelessMmr.sol"; import {StatelessMmrHelpers} from "solidity-mmr/lib/StatelessMmrHelpers.sol"; -import {Lib_RLPReader as RLPReader} from "@optimism/libraries/rlp/Lib_RLPReader.sol"; +import {Lib_RLPReader as RLPReader} from "../src/lib/external/rlp/Lib_RLPReader.sol"; import {Test} from "forge-std/Test.sol"; import {EOA} from "./helpers/EOA.sol"; diff --git a/test/lib/Bitmap16.t.sol b/test/lib/Bitmap16.t.sol deleted file mode 100644 index 7af9755..0000000 --- a/test/lib/Bitmap16.t.sol +++ /dev/null @@ -1,28 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.8.9; - -import {Test} from "forge-std/Test.sol"; - -import {Bitmap16} from "../../src/lib/Bitmap16.sol"; - -contract Bitmap16Lib_Test is Test { - using Bitmap16 for uint16; - - function test_readFromRight_16_i0() public { - uint16 bitmap = 16; // 0b10000 - bool isFirstBitHigh = bitmap.readBitAtIndexFromRight(0); - assertEq(isFirstBitHigh, false); - } - - function test_readFromRight_17_i0() public { - uint16 bitmap = 17; // 0b10001 - bool isFirstBitHigh = bitmap.readBitAtIndexFromRight(0); - assertEq(isFirstBitHigh, true); - } - - function test_readFromRight_17_i4() public { - uint16 bitmap = 17; // 0b10001 - bool isFirstBitHigh = bitmap.readBitAtIndexFromRight(4); - assertEq(isFirstBitHigh, true); - } -} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..574e785 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "resolveJsonModule": true + } +}