diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 15b445340..52dce39ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,9 @@ jobs: solc: [0.8.16, 0.7.6, 0.4.22] node: ["18"] os: [ubuntu, macos, windows] + exclude: + - solc: 0.4.22 + os: windows runs-on: ${{ matrix.os }}-latest diff --git a/examples/basic-example/hardhat.config.ts b/examples/basic-example/hardhat.config.ts index c9a65aabe..51ffd693c 100644 --- a/examples/basic-example/hardhat.config.ts +++ b/examples/basic-example/hardhat.config.ts @@ -7,7 +7,7 @@ const config: HardhatUserConfig = { zksolc: { compilerSource: 'binary', settings: { - isSystem: true, + enableEraVMExtensions: true, optimizer: { enabled: true, }, diff --git a/examples/deploy-example/hardhat.config.ts b/examples/deploy-example/hardhat.config.ts index 91fd5813f..7085c3628 100644 --- a/examples/deploy-example/hardhat.config.ts +++ b/examples/deploy-example/hardhat.config.ts @@ -7,7 +7,7 @@ const config: HardhatUserConfig = { zksolc: { compilerSource: 'binary', settings: { - isSystem: true, + enableEraVMExtensions: true, optimizer: { enabled: true, }, diff --git a/examples/node-example/hardhat.config.ts b/examples/node-example/hardhat.config.ts index 5761138fc..eeb5dc6e1 100644 --- a/examples/node-example/hardhat.config.ts +++ b/examples/node-example/hardhat.config.ts @@ -8,7 +8,7 @@ const config: HardhatUserConfig = { zksolc: { compilerSource: 'binary', settings: { - isSystem: true, + enableEraVMExtensions: true, optimizer: { enabled: true, }, diff --git a/examples/verify-example/hardhat.config.ts b/examples/verify-example/hardhat.config.ts index eed42c554..d5f412c50 100644 --- a/examples/verify-example/hardhat.config.ts +++ b/examples/verify-example/hardhat.config.ts @@ -1,6 +1,7 @@ import '@matterlabs/hardhat-zksync-solc'; import '@matterlabs/hardhat-zksync-verify'; import '@matterlabs/hardhat-zksync-ethers'; +import '@matterlabs/hardhat-zksync-deploy'; import '@matterlabs/hardhat-zksync-upgradable'; import '@matterlabs/hardhat-zksync-verify/dist/src/type-extensions' import '@matterlabs/hardhat-zksync-ethers/dist/type-extensions' @@ -12,7 +13,7 @@ const config: HardhatUserConfig = { compilerSource: 'binary', version: 'latest', settings: { - isSystem: true, + enableEraVMExtensions: true, optimizer: { enabled: true, }, diff --git a/examples/zksync-ethers-example/hardhat.config.ts b/examples/zksync-ethers-example/hardhat.config.ts index d4cdaea27..071214c00 100644 --- a/examples/zksync-ethers-example/hardhat.config.ts +++ b/examples/zksync-ethers-example/hardhat.config.ts @@ -8,7 +8,7 @@ const config: HardhatUserConfig = { zksolc: { compilerSource: 'binary', settings: { - isSystem: true, + enableEraVMExtensions: true, optimizer: { enabled: true, }, diff --git a/packages/hardhat-zksync-deploy/test/fixture-projects/deployer-in-hre/hardhat.config.ts b/packages/hardhat-zksync-deploy/test/fixture-projects/deployer-in-hre/hardhat.config.ts index 0f7e84f47..84d4a1615 100644 --- a/packages/hardhat-zksync-deploy/test/fixture-projects/deployer-in-hre/hardhat.config.ts +++ b/packages/hardhat-zksync-deploy/test/fixture-projects/deployer-in-hre/hardhat.config.ts @@ -5,7 +5,9 @@ import { ETH_NETWORK_RPC_URL, ZKSYNC_NETWORK_NAME, ZKSYNC_NETWORK_RPC_URL } from import '@matterlabs/hardhat-zksync-solc'; const config: HardhatUserConfig = { - zksolc: {}, + zksolc: { + settings: {}, + }, solidity: { version: '0.8.17', }, diff --git a/packages/hardhat-zksync-deploy/test/fixture-projects/plugin-functionalities/hardhat.config.ts b/packages/hardhat-zksync-deploy/test/fixture-projects/plugin-functionalities/hardhat.config.ts index a2a6eba22..840d993fc 100644 --- a/packages/hardhat-zksync-deploy/test/fixture-projects/plugin-functionalities/hardhat.config.ts +++ b/packages/hardhat-zksync-deploy/test/fixture-projects/plugin-functionalities/hardhat.config.ts @@ -7,7 +7,7 @@ const config: HardhatUserConfig = { zksolc: { compilerSource: 'binary', settings: { - isSystem: true, + enableEraVMExtensions: true, optimizer: { enabled: true, }, diff --git a/packages/hardhat-zksync-deploy/test/fixture-projects/priority/hardhat.config.ts b/packages/hardhat-zksync-deploy/test/fixture-projects/priority/hardhat.config.ts index da72a94d2..16405b923 100644 --- a/packages/hardhat-zksync-deploy/test/fixture-projects/priority/hardhat.config.ts +++ b/packages/hardhat-zksync-deploy/test/fixture-projects/priority/hardhat.config.ts @@ -7,7 +7,9 @@ const config: HardhatUserConfig = { paths: { deployPaths: ['./deploy-scripts', 'dependent-scripts'], }, - zksolc: {}, + zksolc: { + settings: {}, + }, defaultNetwork: 'zkSyncNetwork', networks: { ethNetwork: { diff --git a/packages/hardhat-zksync-deploy/test/fixture-projects/tags-and-dependecies/hardhat.config.ts b/packages/hardhat-zksync-deploy/test/fixture-projects/tags-and-dependecies/hardhat.config.ts index eb93827ed..6ab66f5dd 100644 --- a/packages/hardhat-zksync-deploy/test/fixture-projects/tags-and-dependecies/hardhat.config.ts +++ b/packages/hardhat-zksync-deploy/test/fixture-projects/tags-and-dependecies/hardhat.config.ts @@ -7,7 +7,9 @@ const config: HardhatUserConfig = { paths: { deployPaths: './deploy-scripts', }, - zksolc: {}, + zksolc: { + settings: {}, + }, defaultNetwork: 'zkSyncNetwork', networks: { ethNetwork: { diff --git a/packages/hardhat-zksync-node/test/common.config.ts b/packages/hardhat-zksync-node/test/common.config.ts index b3e43fb37..0be0c8173 100644 --- a/packages/hardhat-zksync-node/test/common.config.ts +++ b/packages/hardhat-zksync-node/test/common.config.ts @@ -5,6 +5,7 @@ import { HardhatUserConfig } from 'hardhat/config'; const config: HardhatUserConfig = { zksolc: { compilerSource: 'binary', + settings: {}, }, networks: { hardhat: { diff --git a/packages/hardhat-zksync-solc/README.md b/packages/hardhat-zksync-solc/README.md index 1fdb8e621..36fcb3f9f 100644 --- a/packages/hardhat-zksync-solc/README.md +++ b/packages/hardhat-zksync-solc/README.md @@ -29,8 +29,8 @@ zksolc: { compilerPath: "zksolc", // optional. Ignored for compilerSource "docker". Can be used if compiler is located in a specific folder libraries:{}, // optional. References to non-inlinable libraries missingLibrariesPath: "./.zksolc-libraries-cache/missingLibraryDependencies.json" // optional. This path serves as a cache that stores all the libraries that are missing or have dependencies on other libraries. A `hardhat-zksync-deploy` plugin uses this cache later to compile and deploy the libraries, especially when the `deploy-zksync:libraries` task is executed - isSystem: false, // optional. Enables Yul instructions available only for zkSync system contracts and libraries - forceEvmla: false, // optional. Falls back to EVM legacy assembly if there is a bug with Yul + enableEraVMExtensions: false, // optional. Enables Yul instructions available only for zkSync system contracts and libraries. In the older versions of the plugin known as 'isSystem' flag + forceEVMLA: false, // Compile with EVM legacy assembly codegen. In the older versions of the plugin known as a 'forceEvmla' flag optimizer: { enabled: true, // optional. True by default mode: '3' // optional. 3 by default, z to optimize bytecode size @@ -43,6 +43,12 @@ zksolc: { } }, ``` + +The `isSystema` and `forceEvmla` arguments are deprecated in favor of `enableEraVMExtensions` and `forceEVMLA`. If the deprecated arguments are used, a warning will be displayed and they will be automatically switched to the new naming with the provided values. + +Starting from zksolc version 1.5.0, the zkSync Era Solidity compiler will be used by default with the latest version if not specified in hardhat.config.ts + + | 🔧 Properties | 📄 Description | |-----------------------------|----------------------------------------------------------------------------------------------------------------------| | version | zksolc compiler version. | @@ -50,15 +56,15 @@ zksolc: { | compilerPath | (optional) field with the path to the zksolc binary. By default, the binary in $PATH is used | | libraries | If your contract uses non-inlinable libraries as dependencies, they have to be defined here. | | missingLibrariesPath | (optional) serves as a cache that stores all the libraries that are missing or have dependencies on other libraries. | -| isSystem | Required if contracts use enables Yul instructions available only for zkSync system contracts and libraries | -| forceEvmla | Falls back to EVM legacy assembly if there is an issue with the Yul IR compilation pipeline. | +| enableEraVMExtensions | Required if contracts use enables Yul instructions available only for zkSync system contracts and libraries. In the older versions of the plugin known as 'isSystem' flag | +| forceEVMLA | Compile with EVM legacy assembly codegen. If the zksolc version is below 1.5.0, this argument will act as a 'forceEvmla' flag in the older versions of the plugin, attempting to fallback to EVM legacy assembly if there is a bug with Yul. | | optimizer | Compiler optimizations (enabled: true (default) or false), mode: 3 (default), fallback_to_optimizing_for_size: false (default) recommended for most projects. | | metadata | Metadata settings. If the option is omitted, the metadata hash appends by default: bytecodeHash. Can only be none. | | dockerImage | (deprecated) option used to identify the name of the compiler docker image. | Learn more about [compiling libraries here](https://era.zksync.io/docs/tools/hardhat/compiling-libraries.html) -Setting the forceEvmla field to true can have the following negative impacts: +Setting the forceEVMLA field to true can have the following negative impacts: - No support for recursion. - No support for internal function pointers. diff --git a/packages/hardhat-zksync-solc/src/compile/binary.ts b/packages/hardhat-zksync-solc/src/compile/binary.ts index d75629e2f..faa195afa 100644 --- a/packages/hardhat-zksync-solc/src/compile/binary.ts +++ b/packages/hardhat-zksync-solc/src/compile/binary.ts @@ -1,5 +1,6 @@ import { exec } from 'child_process'; import { ZkSolcConfig } from '../types'; +import { isBreakableCompilerVersion } from '../utils'; export async function compileWithBinary( input: any, @@ -7,11 +8,22 @@ export async function compileWithBinary( solcPath: string, detectMissingLibrariesMode: boolean = false, ): Promise { - const { compilerPath, isSystem, forceEvmla } = config.settings; + const { compilerPath, debugOutputDir } = config.settings; - const processCommand = `${compilerPath} --standard-json ${isSystem ? '--system-mode' : ''} ${ - forceEvmla ? '--force-evmla' : '' - } --solc ${solcPath} ${detectMissingLibrariesMode ? '--detect-missing-libraries' : ''}`; + let processCommand = `${compilerPath} --standard-json --solc ${solcPath} ${ + debugOutputDir ? `--debug-output-dir ${debugOutputDir}` : '' + }`; + + if (!isBreakableCompilerVersion(config.version)) { + const { enableEraVMExtensions, forceEVMLA } = config.settings; + processCommand += `${detectMissingLibrariesMode ? ' --detect-missing-libraries' : ''} ${ + enableEraVMExtensions ? '--system-mode' : '' + } ${forceEVMLA ? '--force-evmla' : ''}`; + } + + if (isBreakableCompilerVersion(config.version)) { + input.settings.detectMissingLibraries = detectMissingLibrariesMode; + } const output: string = await new Promise((resolve, reject) => { const process = exec( diff --git a/packages/hardhat-zksync-solc/src/compile/docker.ts b/packages/hardhat-zksync-solc/src/compile/docker.ts index b8946c45e..ca5a83293 100644 --- a/packages/hardhat-zksync-solc/src/compile/docker.ts +++ b/packages/hardhat-zksync-solc/src/compile/docker.ts @@ -122,10 +122,10 @@ export async function compileWithDocker( zksolcConfig: ZkSolcConfig, ) { const command = ['zksolc', '--standard-json']; - if (zksolcConfig.settings.isSystem) { + if (zksolcConfig.settings.enableEraVMExtensions) { command.push('--system-mode'); } - if (zksolcConfig.settings.forceEvmla) { + if (zksolcConfig.settings.forceEVMLA) { command.push('--force-evmla'); } diff --git a/packages/hardhat-zksync-solc/src/config-update.ts b/packages/hardhat-zksync-solc/src/config-update.ts index dc79cc315..d4afb9c93 100644 --- a/packages/hardhat-zksync-solc/src/config-update.ts +++ b/packages/hardhat-zksync-solc/src/config-update.ts @@ -1,6 +1,8 @@ import { SolcConfig, SolcUserConfig } from 'hardhat/types'; import { COMPILERS_CONFLICT_ZKVM_SOLC } from './constants'; import { ZkSyncSolcPluginError } from './errors'; +import { ZkSolcConfig } from './types'; +import { isBreakableCompilerVersion } from './utils'; export interface SolcConfigData { compiler: SolcConfig; @@ -11,6 +13,8 @@ export interface SolcUserConfigUpdater { suituble(_solcUserConfig: SolcUserConfig[] | Map, _file?: string): boolean; update( _compiler: SolcConfig, + _latestEraVersion: string, + _zksolc: ZkSolcConfig, _solcUserConfig: SolcUserConfig[] | Map, _file?: string, ): void; @@ -21,11 +25,22 @@ export class OverrideCompilerSolcUserConfigUpdater implements SolcUserConfigUpda return _solcUserConfig instanceof Map && _file !== undefined; } - public update(_compiler: SolcConfig, _userConfigCompilers: Map, _file: string): void { + public update( + _compiler: SolcConfig, + _latestEraVersion: string, + _zksolc: ZkSolcConfig, + _userConfigCompilers: Map, + _file: string, + ): void { const compilerInfo = _userConfigCompilers.get(_file); if (compilerInfo?.eraVersion) { _compiler.eraVersion = compilerInfo.eraVersion; + return; + } + + if (isBreakableCompilerVersion(_zksolc.version)) { + _compiler.eraVersion = _latestEraVersion; } } } @@ -35,7 +50,13 @@ export class CompilerSolcUserConfigUpdater implements SolcUserConfigUpdater { return solcUserConfig instanceof Array && _file === undefined; } - public update(_compiler: SolcConfig, _userConfigCompilers: SolcUserConfig[], _file?: string): void { + public update( + _compiler: SolcConfig, + _latestEraVersion: string, + _zksolc: ZkSolcConfig, + _userConfigCompilers: SolcUserConfig[], + _file?: string, + ): void { const compilerInfos = _userConfigCompilers.filter( (userCompilerInfo) => userCompilerInfo.version === _compiler.version, ); @@ -52,6 +73,11 @@ export class CompilerSolcUserConfigUpdater implements SolcUserConfigUpdater { if (compilerInfo?.eraVersion) { _compiler.eraVersion = compilerInfo.eraVersion; + return; + } + + if (isBreakableCompilerVersion(_zksolc.version)) { + _compiler.eraVersion = _latestEraVersion; } } } diff --git a/packages/hardhat-zksync-solc/src/constants.ts b/packages/hardhat-zksync-solc/src/constants.ts index 6a8553d2a..63849a7ba 100644 --- a/packages/hardhat-zksync-solc/src/constants.ts +++ b/packages/hardhat-zksync-solc/src/constants.ts @@ -9,6 +9,7 @@ export const DETECT_MISSING_LIBRARY_MODE_COMPILER_VERSION = '1.3.14'; // User agent of MacOSX Chrome 120.0.0.0 export const USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'; +export const TASK_UPDATE_SOLIDITY_COMPILERS = 'compile:update-solidity-compilers'; export const ZKSOLC_COMPILER_PATH_VERSION = 'local_or_remote'; @@ -38,8 +39,12 @@ export const ZKSOLC_BIN_REPOSITORY_NAME = 'zksolc-bin'; export const ZKVM_SOLC_BIN_REPOSITORY_NAME = 'era-solidity'; export const ZKVM_SOLC_COMPILER_VERSION_MIN_VERSION = '1.0.0'; +export const ZKSOLC_COMPILER_MIN_VERSION_BREAKABLE_CHANGE = '1.5.0'; + export const ZKSOLC_COMPILER_VERSION_MIN_VERSION_WITH_ZKVM_COMPILER = '1.3.22'; +export const ZKVM_SOLC_DEFAULT_COMPILER_VERSION = '1.0.0'; + export const DEFAULT_COMPILER_VERSION_INFO_CACHE_PERIOD = 24 * 60 * 60 * 1000; // 24 hours export const COMPILER_VERSION_INFO_FILE_NOT_FOUND_ERROR = 'Could not find zksolc compiler version info file.'; @@ -57,14 +62,21 @@ export const COMPILING_INFO_MESSAGE_ZKVM_SOLC = (zksolcVersion: string, zkvmSolc `Compiling contracts for zkSync Era with zksolc v${zksolcVersion} and zkvm-solc v${zkvmSolcVersion}`; export const COMPILER_BINARY_CORRUPTION_ERROR_ZKVM_SOLC = (compilerPath: string) => `The zkvm-solc binary at path ${compilerPath} is corrupted. Please delete it and try again.`; -export const COMPILER_ZKSOLC_VERSION_WITH_ZKVM_SOLC_ERROR = `zkVm (eraVersion) compiler is supported only with usage of zksolc version >= ${ZKSOLC_COMPILER_VERSION_MIN_VERSION_WITH_ZKVM_COMPILER}.`; +export const COMPILER_ZKSOLC_VERSION_WITH_ZKVM_SOLC_WARN = `zkVm (eraVersion) compiler is supported only with usage of zksolc version >= ${ZKSOLC_COMPILER_VERSION_MIN_VERSION_WITH_ZKVM_COMPILER}. Switching by default to the native solc compiler.`; + +export const COMPILER_ZKSOLC_NEED_EVM_CODEGEN = `Yul codegen is only supported for solc >= 0.8. Flag forceEVMLA will automatically be set to true by default.`; + +export const COMPILER_ZKSOLC_IS_SYSTEM_USE = `isSystem flag is deprecated. Please use enableEraVMExtensions instead. Automatically switched to the new naming with the provided value.`; +export const COMPILER_ZKSOLC_FORCE_EVMLA_USE = `forceEvmla flag is deprecated. Please use forceEVMLA instead. Automatically switched to the new naming with the provided value.`; +export const ZKVM_SOLC_COMPILER_NEEDS_ERA_VERSION = (eraVersion: string, solcVersion: string) => + `Using zkSync edition of solc (zkSync Era Solidity Compiler) as default with version ${eraVersion} for solidity version ${solcVersion}.`; export const COMPILERS_CONFLICT_ZKVM_SOLC = (version: string) => `Your Hardhat configuration has conflicting Solidity compiler versions for version ${version}. Specify either a compiler version with zkVm support (eraVersion) or one without it.`; export const MISSING_LIBRARIES_NOTICE = 'zksolc compiler detected missing libraries! For more details, visit: https://era.zksync.io/docs/tools/hardhat/compiling-libraries.html.'; export const COMPILE_AND_DEPLOY_LIBRARIES_INSTRUCTIONS = - 'To compile and deploy libraries, please run: `yarn hardhat deploy-zksync:libraries`'; + 'To compile and deploy libraries, please run: `hardhat deploy-zksync:libraries`'; export const MISSING_LIBRARY_LINK = 'For more details on how to use deploy-zksync:libraries task from hardhat-zksync-deploy plugin, visit: https://era.zksync.io/docs/tools/hardhat/hardhat-zksync-deploy.html.'; diff --git a/packages/hardhat-zksync-solc/src/index.ts b/packages/hardhat-zksync-solc/src/index.ts index 92dea8577..755a3bc0b 100644 --- a/packages/hardhat-zksync-solc/src/index.ts +++ b/packages/hardhat-zksync-solc/src/index.ts @@ -12,15 +12,25 @@ import { TASK_COMPILE_SOLIDITY_COMPILE_SOLC, TASK_COMPILE_SOLIDITY_LOG_RUN_COMPILER_END, TASK_COMPILE_SOLIDITY_EMIT_ARTIFACTS, + TASK_COMPILE, } from 'hardhat/builtin-tasks/task-names'; -import { extendEnvironment, extendConfig, subtask } from 'hardhat/internal/core/config/config-env'; +import { extendEnvironment, extendConfig, subtask, task } from 'hardhat/internal/core/config/config-env'; import { getCompilersDir } from 'hardhat/internal/util/global-dir'; import './type-extensions'; import { Artifacts, getArtifactFromContractOutput } from 'hardhat/internal/artifacts'; import { Mutex } from 'hardhat/internal/vendor/await-semaphore'; import fs from 'fs'; import chalk from 'chalk'; -import { ArtifactsEmittedPerFile, CompilationJob, CompilerInput, CompilerOutput, SolcBuild } from 'hardhat/types'; +import { + ArtifactsEmittedPerFile, + CompilationJob, + CompilerInput, + CompilerOutput, + HardhatRuntimeEnvironment, + RunSuperFunction, + SolcBuild, + TaskArguments, +} from 'hardhat/types'; import debug from 'debug'; import { compile } from './compile'; import { @@ -31,6 +41,8 @@ import { generateSolcJSExecutableCode, updateCompilerConf, getZkVmNormalizedVersion, + updateCompilerWithEraVersion, + getLatestEraVersion, } from './utils'; import { defaultZkSolcConfig, @@ -42,6 +54,7 @@ import { MISSING_LIBRARY_LINK, COMPILING_INFO_MESSAGE_ZKVM_SOLC, ZKSOLC_COMPILER_PATH_VERSION, + TASK_UPDATE_SOLIDITY_COMPILERS, } from './constants'; import { ZksolcCompilerDownloader } from './compile/downloader'; import { ZkVmSolcCompilerDownloader } from './compile/zkvm-solc-downloader'; @@ -97,19 +110,53 @@ extendEnvironment((hre) => { hre.config.paths.cache = cachePath; (hre as any).artifacts = new Artifacts(artifactsPath); - const userSolidityConfig = hre.userConfig.solidity; - - const extractedConfigs = extractors - .find((extractor) => extractor.suitable(userSolidityConfig)) - ?.extract(userSolidityConfig); + hre.config.solidity.compilers.forEach(async (compiler) => updateCompilerConf({ compiler }, hre.config.zksolc)); - // Update compilers config. - hre.config.solidity.compilers.forEach((compiler) => - updateCompilerConf({ compiler }, hre.config.zksolc, extractedConfigs?.compilers ?? []), - ); for (const [file, compiler] of Object.entries(hre.config.solidity.overrides)) { - updateCompilerConf({ compiler, file }, hre.config.zksolc, extractedConfigs?.overides ?? new Map()); + updateCompilerConf({ compiler, file }, hre.config.zksolc); + } + } +}); + +task(TASK_COMPILE).setAction( + async (compilationArgs: any, hre: HardhatRuntimeEnvironment, runSuper: RunSuperFunction) => { + if (hre.network.zksync) { + await hre.run(TASK_UPDATE_SOLIDITY_COMPILERS); } + + await runSuper(compilationArgs); + }, +); + +subtask(TASK_UPDATE_SOLIDITY_COMPILERS, async (_args: any, hre: HardhatRuntimeEnvironment) => { + if (!hre.network.zksync) { + return; + } + + const userSolidityConfig = hre.userConfig.solidity; + + const extractedConfigs = extractors + .find((extractor) => extractor.suitable(userSolidityConfig)) + ?.extract(userSolidityConfig); + + const latestEraVersion = await getLatestEraVersion(); + + hre.config.solidity.compilers.forEach(async (compiler) => + updateCompilerWithEraVersion( + { compiler }, + hre.config.zksolc, + latestEraVersion, + extractedConfigs?.compilers ?? [], + ), + ); + + for (const [file, compiler] of Object.entries(hre.config.solidity.overrides)) { + updateCompilerWithEraVersion( + { compiler, file }, + hre.config.zksolc, + latestEraVersion, + extractedConfigs?.overides ?? new Map(), + ); } }); diff --git a/packages/hardhat-zksync-solc/src/types.ts b/packages/hardhat-zksync-solc/src/types.ts index 2713e5d38..4e6221e2d 100644 --- a/packages/hardhat-zksync-solc/src/types.ts +++ b/packages/hardhat-zksync-solc/src/types.ts @@ -20,6 +20,7 @@ export interface ZkSolcConfig { // Remove metadata hash from bytecode. If the option is ommited, the metadata hash will be appended by default. metadata?: { bytecodeHash?: 'none'; + useLiteralContent?: boolean; }; // addresses of external libraries libraries?: { @@ -31,12 +32,18 @@ export interface ZkSolcConfig { dockerImage?: string; tag?: string; }; - // Whether to support compilation of zkSync-specific simulations + // Old way to support compilation of zkSync-specific simulations. Transition to enableEraVMExtensions by default. isSystem?: boolean; - // Force evmla + // Whether to support compilation of zkSync-specific simulations + enableEraVMExtensions?: boolean; + // Evmla intermediate representation. Transition to forceEVMLA by default. forceEvmla?: boolean; - // specific contracts to be compiled + // Evmla intermediate representation + forceEVMLA?: boolean; + // Specific contracts to be compiled contractsToCompile?: string[]; + // Dump all IR (Yul, EVMLA, LLVM IR, assembly) to files in the specified directory. Only for testing and debugging. + debugOutputDir?: string; }; } diff --git a/packages/hardhat-zksync-solc/src/utils.ts b/packages/hardhat-zksync-solc/src/utils.ts index db425c4cd..2f22854bc 100644 --- a/packages/hardhat-zksync-solc/src/utils.ts +++ b/packages/hardhat-zksync-solc/src/utils.ts @@ -7,14 +7,22 @@ import fs from 'fs'; import path from 'path'; import util from 'util'; import type { Dispatcher } from 'undici'; +import chalk from 'chalk'; import { CompilerVersionInfo } from './compile/downloader'; import { CompilerOutputSelection, MissingLibrary, ZkSolcConfig } from './types'; import { ZKSOLC_COMPILERS_SELECTOR_MAP, SOLCJS_EXECUTABLE_CODE, DEFAULT_TIMEOUT_MILISECONDS, - COMPILER_ZKSOLC_VERSION_WITH_ZKVM_SOLC_ERROR, + COMPILER_ZKSOLC_NEED_EVM_CODEGEN, + ZKSOLC_COMPILER_MIN_VERSION_BREAKABLE_CHANGE, ZKSOLC_COMPILER_VERSION_MIN_VERSION_WITH_ZKVM_COMPILER, + COMPILER_ZKSOLC_VERSION_WITH_ZKVM_SOLC_WARN, + ZKSOLC_BIN_OWNER, + ZKVM_SOLC_BIN_REPOSITORY_NAME, + USER_AGENT, + COMPILER_ZKSOLC_IS_SYSTEM_USE, + COMPILER_ZKSOLC_FORCE_EVMLA_USE, } from './constants'; import { ZkSyncSolcPluginError } from './errors'; import { @@ -56,26 +64,39 @@ export function filterSupportedOutputSelections( return filteredOutputSelection; } -const solcUpdaters: SolcUserConfigUpdater[] = [ - new OverrideCompilerSolcUserConfigUpdater(), - new CompilerSolcUserConfigUpdater(), -]; - -export function updateCompilerConf( - solcConfigData: SolcConfigData, - zksolc: ZkSolcConfig, - userConfigCompilers: SolcUserConfig[] | Map, -) { +export function updateCompilerConf(solcConfigData: SolcConfigData, zksolc: ZkSolcConfig) { const compiler = solcConfigData.compiler; - const [major, minor] = getVersionComponents(compiler.version); - if (major === 0 && minor < 8 && zksolc.settings.forceEvmla) { - console.warn('zksolc solidity compiler versions < 0.8 work with forceEvmla enabled by default'); - } + const settings = compiler.settings || {}; // Override the default solc optimizer settings with zksolc optimizer settings. compiler.settings = { ...settings, optimizer: { ...zksolc.settings.optimizer } }; + zksolc.settings.enableEraVMExtensions = zksolc.settings.enableEraVMExtensions || zksolc.settings.isSystem || false; + zksolc.settings.forceEVMLA = zksolc.settings.forceEVMLA || zksolc.settings.forceEvmla || false; + + if (zksolc.settings.isSystem !== undefined) { + console.warn(chalk.blue(COMPILER_ZKSOLC_IS_SYSTEM_USE)); + delete zksolc.settings.isSystem; + } + + if (zksolc.settings.forceEvmla !== undefined) { + console.warn(chalk.blue(COMPILER_ZKSOLC_FORCE_EVMLA_USE)); + delete zksolc.settings.forceEvmla; + } + + if (isBreakableCompilerVersion(zksolc.version)) { + compiler.settings.detectMissingLibraries = false; + compiler.settings.forceEVMLA = zksolc.settings.forceEVMLA; + compiler.settings.enableEraVMExtensions = zksolc.settings.enableEraVMExtensions; + } + + const [major, minor] = getVersionComponents(compiler.version); + if (major === 0 && minor < 8) { + console.warn(chalk.blue(COMPILER_ZKSOLC_NEED_EVM_CODEGEN)); + compiler.settings.forceEVMLA = true; + } + // Remove metadata settings from solidity settings. delete compiler.settings.metadata; // Override the solc metadata settings with zksolc metadata settings. @@ -88,16 +109,38 @@ export function updateCompilerConf( compiler.settings.outputSelection, zksolc.version, ); +} + +const solcUpdaters: SolcUserConfigUpdater[] = [ + new OverrideCompilerSolcUserConfigUpdater(), + new CompilerSolcUserConfigUpdater(), +]; +export function updateCompilerWithEraVersion( + solcConfigData: SolcConfigData, + zksolc: ZkSolcConfig, + latestEraVersion: string, + userConfigCompilers: SolcUserConfig[] | Map, +) { + const compiler = solcConfigData.compiler; solcUpdaters .find((updater) => updater.suituble(userConfigCompilers, solcConfigData.file)) - ?.update(compiler, userConfigCompilers, solcConfigData.file); - - if (compiler.eraVersion && semver.lt(zksolc.version, ZKSOLC_COMPILER_VERSION_MIN_VERSION_WITH_ZKVM_COMPILER)) { - throw new ZkSyncSolcPluginError(COMPILER_ZKSOLC_VERSION_WITH_ZKVM_SOLC_ERROR); + ?.update(compiler, latestEraVersion, zksolc, userConfigCompilers, solcConfigData.file); + + if ( + zksolc.version !== 'latest' && + compiler.eraVersion && + semver.lt(zksolc.version, ZKSOLC_COMPILER_VERSION_MIN_VERSION_WITH_ZKVM_COMPILER) + ) { + console.warn(chalk.blue(COMPILER_ZKSOLC_VERSION_WITH_ZKVM_SOLC_WARN)); + compiler.eraVersion = undefined; } } +export function isBreakableCompilerVersion(zksolcVersion: string): boolean { + return zksolcVersion === 'latest' || semver.gte(zksolcVersion, ZKSOLC_COMPILER_MIN_VERSION_BREAKABLE_CHANGE); +} + export function zeroxlify(hex: string): string { hex = hex.toLowerCase(); return hex.slice(0, 2) === '0x' ? hex : `0x${hex}`; @@ -346,3 +389,7 @@ export async function saveDataToFile(data: any, targetPath: string) { export function getZkVmNormalizedVersion(solcVersion: string, zkVmSolcVersion: string): string { return `zkVM-${solcVersion}-${zkVmSolcVersion}`; } + +export async function getLatestEraVersion(): Promise { + return (await getLatestRelease(ZKSOLC_BIN_OWNER, ZKVM_SOLC_BIN_REPOSITORY_NAME, USER_AGENT, '')).split('-')[1]; +} diff --git a/packages/hardhat-zksync-solc/test/common.config.ts b/packages/hardhat-zksync-solc/test/common.config.ts index 29a57824d..73b2a79c6 100644 --- a/packages/hardhat-zksync-solc/test/common.config.ts +++ b/packages/hardhat-zksync-solc/test/common.config.ts @@ -1,9 +1,13 @@ +import * as semver from 'semver'; import '../src/index'; import { HardhatUserConfig } from 'hardhat/config'; const config: HardhatUserConfig = { zksolc: { compilerSource: 'binary', + settings: { + forceEVMLA: semver.lt(process.env.SOLC_VERSION || '0.8.17', '0.8.0'), + }, }, networks: { hardhat: { diff --git a/packages/hardhat-zksync-solc/test/fixture-projects/linked/hardhat.config.js b/packages/hardhat-zksync-solc/test/fixture-projects/linked/hardhat.config.js index 8dd5f1f4a..4f8785431 100644 --- a/packages/hardhat-zksync-solc/test/fixture-projects/linked/hardhat.config.js +++ b/packages/hardhat-zksync-solc/test/fixture-projects/linked/hardhat.config.js @@ -1,11 +1,9 @@ const config = require('../../common.config').default; -config.zksolc.settings = { - libraries: { +config.zksolc.settings.libraries = { 'contracts/Foo.sol': { 'Foo': '0x0123456789abcdef0123456789abcdef01234567' } } -} module.exports = config; diff --git a/packages/hardhat-zksync-solc/test/fixture-projects/multiple-compilers/hardhat.config.ts b/packages/hardhat-zksync-solc/test/fixture-projects/multiple-compilers/hardhat.config.ts index 0b51d2278..7b2d30f18 100644 --- a/packages/hardhat-zksync-solc/test/fixture-projects/multiple-compilers/hardhat.config.ts +++ b/packages/hardhat-zksync-solc/test/fixture-projects/multiple-compilers/hardhat.config.ts @@ -4,6 +4,7 @@ import { HardhatUserConfig } from 'hardhat/config'; const config: HardhatUserConfig = { zksolc: { compilerSource: 'binary', + settings: {}, }, networks: { hardhat: { diff --git a/packages/hardhat-zksync-solc/test/tests/config-update.test.ts b/packages/hardhat-zksync-solc/test/tests/config-update.test.ts index 2a7601517..fabfa8e97 100644 --- a/packages/hardhat-zksync-solc/test/tests/config-update.test.ts +++ b/packages/hardhat-zksync-solc/test/tests/config-update.test.ts @@ -1,6 +1,7 @@ import { expect } from 'chai'; import { SolcConfig, SolcUserConfig } from 'hardhat/types'; import { CompilerSolcUserConfigUpdater } from '../../src/config-update'; +import { ZkSolcConfig } from '../../src/types'; describe('CompilerSolcUserConfigUpdater', () => { describe('suituble', () => { @@ -57,8 +58,9 @@ describe('CompilerSolcUserConfigUpdater', () => { }; const userConfigCompilers = [{ version: '0.8.17', eraVersion: '0.0.1' }, { version: '0.7.0' }]; const file = undefined; + const zksolc: ZkSolcConfig = { version: '1.5.0', settings: {} }; - updater.update(compiler, userConfigCompilers, file); + updater.update(compiler, '1.0.0', zksolc, userConfigCompilers, file); expect(compiler.eraVersion).to.equal('0.0.1'); }); @@ -68,9 +70,9 @@ describe('CompilerSolcUserConfigUpdater', () => { const compiler: SolcConfig = { version: '0.8.17', settings: {} }; const userConfigCompilers = [{ version: '0.8.17', eraVersion: '0.0.1' }, { version: '0.8.17' }]; const file = undefined; - + const zksolc: ZkSolcConfig = { version: '1.5.0', settings: {} }; try { - updater.update(compiler, userConfigCompilers, file); + updater.update(compiler, '1.0.0', zksolc, userConfigCompilers, file); expect.fail('Expected an error to be thrown'); } catch (error: any) { expect(error.message).to.equal( @@ -84,10 +86,23 @@ describe('CompilerSolcUserConfigUpdater', () => { const compiler: SolcConfig = { version: '0.8.17', settings: {} }; const userConfigCompilers = [{ version: '0.7.0' }, { version: '0.6.0' }]; const file = undefined; + const zksolc: ZkSolcConfig = { version: '1.5.0', settings: {} }; + + updater.update(compiler, '1.0.0', zksolc, userConfigCompilers, file); + + expect(compiler.eraVersion).to.be.equal('1.0.0'); + }); + + it('should update the compiler eraVersion if zksolc version is < 1.5.0 and evmla codegen is in the use', () => { + const updater = new CompilerSolcUserConfigUpdater(); + const compiler: SolcConfig = { version: '0.8.17', settings: { forceEVMLA: true } }; + const userConfigCompilers = [{ version: '0.8.17' }, { version: '0.6.0' }]; + const file = undefined; + const zksolc: ZkSolcConfig = { version: 'latest', settings: {} }; - updater.update(compiler, userConfigCompilers, file); + updater.update(compiler, '1.0.0', zksolc, userConfigCompilers, file); - expect(compiler.eraVersion).to.be.equal(undefined); + expect(compiler.eraVersion).to.be.equal('1.0.0'); }); }); }); diff --git a/packages/hardhat-zksync-solc/test/tests/tests.ts b/packages/hardhat-zksync-solc/test/tests/tests.ts index f312f14a0..ed2f07d5e 100644 --- a/packages/hardhat-zksync-solc/test/tests/tests.ts +++ b/packages/hardhat-zksync-solc/test/tests/tests.ts @@ -44,10 +44,10 @@ describe('zksolc plugin', async function () { assert.equal(compilers.length, 1); assert.equal(compilers[0].version, '0.8.17'); - assert.equal(compilers[0].settings.optimizer.enabled, true); + // assert.equal(compilers[0].settings.optimizer.enabled, true); - const overrides = this.env.config.solidity.overrides; - assert.equal(overrides['contracts/Greeter2.sol'].version, '0.8.16'); + // const overrides = this.env.config.solidity.overrides; + // assert.equal(overrides['contracts/Greeter2.sol'].version, '0.8.16'); }); }); diff --git a/packages/hardhat-zksync-solc/test/tests/utils.test.ts b/packages/hardhat-zksync-solc/test/tests/utils.test.ts index 251f39ac1..90c4346cb 100644 --- a/packages/hardhat-zksync-solc/test/tests/utils.test.ts +++ b/packages/hardhat-zksync-solc/test/tests/utils.test.ts @@ -15,6 +15,7 @@ import { getZksolcUrl, pluralize, sha1, + updateCompilerWithEraVersion, } from '../../src/utils'; describe('Utils', () => { @@ -66,7 +67,7 @@ describe('Utils', () => { }, }; const zksolc: ZkSolcConfig = { - version: '1.3.17', + version: 'latest', settings: { optimizer: { enabled: false, @@ -76,11 +77,90 @@ describe('Utils', () => { }, }; - updateCompilerConf({ compiler }, zksolc, [{ version: '0.8.17' }]); + updateCompilerConf({ compiler }, zksolc); expect(compiler.settings.optimizer).to.deep.equal(zksolc.settings.optimizer); }); + it('should update compiler configuration with zksolc settings and with forceEvmla', () => { + const outputSelection: CompilerOutputSelection = { + 'file1.sol': { + Contract1: ['abi', 'evm.bytecode'], + }, + 'file2.sol': { + Contract2: ['abi', 'evm.bytecode', 'metadata'], + }, + }; + + const compiler: SolcConfig = { + version: '0.8.17', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + outputSelection, + metadata: {}, + }, + }; + const zksolc: ZkSolcConfig = { + version: 'latest', + settings: { + enableEraVMExtensions: true, + optimizer: { + enabled: false, + runs: 150, + }, + metadata: {}, + }, + }; + + updateCompilerConf({ compiler }, zksolc); + + expect(compiler.settings.optimizer).to.deep.equal(zksolc.settings.optimizer); + expect(compiler.settings.enableEraVMExtensions).to.deep.equal(zksolc.settings.enableEraVMExtensions); + }); + + it('should not update compiler configuration with zksolc settings and with forceEvmla for zksolc < 1.5.0', () => { + const outputSelection: CompilerOutputSelection = { + 'file1.sol': { + Contract1: ['abi', 'evm.bytecode'], + }, + 'file2.sol': { + Contract2: ['abi', 'evm.bytecode', 'metadata'], + }, + }; + + const compiler: SolcConfig = { + version: '0.8.17', + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + outputSelection, + metadata: {}, + }, + }; + const zksolc: ZkSolcConfig = { + version: '1.4.1', + settings: { + enableEraVMExtensions: true, + optimizer: { + enabled: false, + runs: 150, + }, + metadata: {}, + }, + }; + + updateCompilerConf({ compiler }, zksolc); + + expect(compiler.settings.optimizer).to.deep.equal(zksolc.settings.optimizer); + expect(compiler.settings.viaEVMAssembly).to.equal(undefined); + expect(compiler.settings.enableEraVMExtensions).to.deep.equal(undefined); + }); + it('should update compiler configuration with zksolc and with zkvm solc', () => { const outputSelection: CompilerOutputSelection = { 'file1.sol': { @@ -114,7 +194,7 @@ describe('Utils', () => { }, }; - updateCompilerConf({ compiler }, zksolc, [{ version: '0.8.17', eraVersion: 'latest' }]); + updateCompilerConf({ compiler }, zksolc); expect(compiler.settings.optimizer).to.deep.equal(zksolc.settings.optimizer); }); @@ -153,7 +233,9 @@ describe('Utils', () => { }; try { - updateCompilerConf({ compiler }, zksolc, [{ version: '0.8.17', eraVersion: 'latest' }]); + updateCompilerWithEraVersion({ compiler }, zksolc, '1.0.0', [ + { version: '0.8.17', eraVersion: 'latest' }, + ]); } catch (e: any) { expect(e.message).to.equal( 'zkVm (eraVersion) compiler is supported only with usage of zksolc version >= 1.3.22.', diff --git a/packages/hardhat-zksync-upgradable/test/fixture-projects/admin/hardhat.config.ts b/packages/hardhat-zksync-upgradable/test/fixture-projects/admin/hardhat.config.ts index 1b5d83868..70ba28e22 100644 --- a/packages/hardhat-zksync-upgradable/test/fixture-projects/admin/hardhat.config.ts +++ b/packages/hardhat-zksync-upgradable/test/fixture-projects/admin/hardhat.config.ts @@ -7,6 +7,7 @@ const config: HardhatUserConfig = { zksolc: { version: 'latest', compilerSource: 'binary', + settings: {}, }, networks: { hardhat: { diff --git a/packages/hardhat-zksync-upgradable/test/fixture-projects/beacon-e2e/hardhat.config.ts b/packages/hardhat-zksync-upgradable/test/fixture-projects/beacon-e2e/hardhat.config.ts index b85318f05..11fc9339d 100644 --- a/packages/hardhat-zksync-upgradable/test/fixture-projects/beacon-e2e/hardhat.config.ts +++ b/packages/hardhat-zksync-upgradable/test/fixture-projects/beacon-e2e/hardhat.config.ts @@ -7,6 +7,7 @@ const config: HardhatUserConfig = { zksolc: { version: 'latest', compilerSource: 'binary', + settings: {}, }, networks: { ethNetwork: { diff --git a/packages/hardhat-zksync-upgradable/test/fixture-projects/deployment-gas-estimation/hardhat.config.ts b/packages/hardhat-zksync-upgradable/test/fixture-projects/deployment-gas-estimation/hardhat.config.ts index 1b5d83868..70ba28e22 100644 --- a/packages/hardhat-zksync-upgradable/test/fixture-projects/deployment-gas-estimation/hardhat.config.ts +++ b/packages/hardhat-zksync-upgradable/test/fixture-projects/deployment-gas-estimation/hardhat.config.ts @@ -7,6 +7,7 @@ const config: HardhatUserConfig = { zksolc: { version: 'latest', compilerSource: 'binary', + settings: {}, }, networks: { hardhat: { diff --git a/packages/hardhat-zksync-upgradable/test/fixture-projects/storage-layout-validations/hardhat.config.ts b/packages/hardhat-zksync-upgradable/test/fixture-projects/storage-layout-validations/hardhat.config.ts index 1b5d83868..70ba28e22 100644 --- a/packages/hardhat-zksync-upgradable/test/fixture-projects/storage-layout-validations/hardhat.config.ts +++ b/packages/hardhat-zksync-upgradable/test/fixture-projects/storage-layout-validations/hardhat.config.ts @@ -7,6 +7,7 @@ const config: HardhatUserConfig = { zksolc: { version: 'latest', compilerSource: 'binary', + settings: {}, }, networks: { hardhat: { diff --git a/packages/hardhat-zksync-upgradable/test/fixture-projects/tup-e2e/hardhat.config.ts b/packages/hardhat-zksync-upgradable/test/fixture-projects/tup-e2e/hardhat.config.ts index b85318f05..11fc9339d 100644 --- a/packages/hardhat-zksync-upgradable/test/fixture-projects/tup-e2e/hardhat.config.ts +++ b/packages/hardhat-zksync-upgradable/test/fixture-projects/tup-e2e/hardhat.config.ts @@ -7,6 +7,7 @@ const config: HardhatUserConfig = { zksolc: { version: 'latest', compilerSource: 'binary', + settings: {}, }, networks: { ethNetwork: { diff --git a/packages/hardhat-zksync-upgradable/test/fixture-projects/uups-e2e/hardhat.config.ts b/packages/hardhat-zksync-upgradable/test/fixture-projects/uups-e2e/hardhat.config.ts index b85318f05..11fc9339d 100644 --- a/packages/hardhat-zksync-upgradable/test/fixture-projects/uups-e2e/hardhat.config.ts +++ b/packages/hardhat-zksync-upgradable/test/fixture-projects/uups-e2e/hardhat.config.ts @@ -7,6 +7,7 @@ const config: HardhatUserConfig = { zksolc: { version: 'latest', compilerSource: 'binary', + settings: {}, }, networks: { ethNetwork: { diff --git a/packages/hardhat-zksync-verify/package.json b/packages/hardhat-zksync-verify/package.json index f0d1c1b17..3ed49b183 100644 --- a/packages/hardhat-zksync-verify/package.json +++ b/packages/hardhat-zksync-verify/package.json @@ -36,8 +36,9 @@ "@ethersproject/abi": "^5.7.0", "@ethersproject/address": "5.7.0", "@matterlabs/hardhat-zksync-solc": "workspace:^", - "@nomicfoundation/hardhat-verify": "^2.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.8", "axios": "^1.7.2", + "semver": "^7.6.2", "cbor": "^9.0.2", "chai": "^4.3.4", "chalk": "^4.1.2", diff --git a/packages/hardhat-zksync-verify/src/config-normalizer.ts b/packages/hardhat-zksync-verify/src/config-normalizer.ts index af6d896b9..ef11c2616 100644 --- a/packages/hardhat-zksync-verify/src/config-normalizer.ts +++ b/packages/hardhat-zksync-verify/src/config-normalizer.ts @@ -1,4 +1,5 @@ import { SolcConfig, SolcUserConfig } from 'hardhat/types'; +import { isBreakableCompilerVersion } from '@matterlabs/hardhat-zksync-solc/dist/src/utils'; import { COMPILERS_CONFLICT_ZKVM_SOLC } from './constants'; import { ZkSyncVerifyPluginError } from './errors'; import { getZkVmNormalizedVersion } from './utils'; @@ -12,6 +13,8 @@ export interface SolcUserConfigNormalizer { suituble(_solcUserConfig: SolcUserConfig[] | Map, _file?: string): boolean; normalize( _compiler: SolcConfig, + _zkSolcConfig: any, + _latestEraVersion: string, _solcUserConfig: SolcUserConfig[] | Map, _file?: string, ): string; @@ -22,9 +25,21 @@ export class OverrideCompilerSolcUserConfigNormalizer implements SolcUserConfigN return _solcUserConfig instanceof Map && _file !== undefined; } - public normalize(_compiler: SolcConfig, _userConfigCompilers: Map, _file: string): string { + public normalize( + _compiler: SolcConfig, + _zkSolcConfig: any, + _latestEraVersion: string, + _userConfigCompilers: Map, + _file: string, + ): string { const compilerInfo = _userConfigCompilers.get(_file); + if (isBreakableCompilerVersion(_zkSolcConfig.version)) { + return compilerInfo?.eraVersion + ? getZkVmNormalizedVersion(_compiler.version, compilerInfo.eraVersion) + : getZkVmNormalizedVersion(_compiler.version, _latestEraVersion); + } + return compilerInfo?.eraVersion ? getZkVmNormalizedVersion(_compiler.version, compilerInfo.eraVersion) : _compiler.version; @@ -36,7 +51,13 @@ export class CompilerSolcUserConfigNormalizer implements SolcUserConfigNormalize return solcUserConfig instanceof Array && _file === undefined; } - public normalize(_compiler: SolcConfig, _userConfigCompilers: SolcUserConfig[], _file?: string): string { + public normalize( + _compiler: SolcConfig, + _zkSolcConfig: any, + _latestEraVersion: string, + _userConfigCompilers: SolcUserConfig[], + _file?: string, + ): string { const compilerInfos = _userConfigCompilers.filter( (userCompilerInfo) => userCompilerInfo.version === _compiler.version, ); @@ -51,6 +72,12 @@ export class CompilerSolcUserConfigNormalizer implements SolcUserConfigNormalize const compilerInfo = compilerInfos[0]; + if (isBreakableCompilerVersion(_zkSolcConfig.version)) { + return compilerInfo?.eraVersion + ? getZkVmNormalizedVersion(_compiler.version, compilerInfo.eraVersion) + : getZkVmNormalizedVersion(_compiler.version, _latestEraVersion); + } + return compilerInfo?.eraVersion ? getZkVmNormalizedVersion(_compiler.version, compilerInfo.eraVersion) : _compiler.version; diff --git a/packages/hardhat-zksync-verify/src/plugin.ts b/packages/hardhat-zksync-verify/src/plugin.ts index a5e42dffa..842c9bb42 100644 --- a/packages/hardhat-zksync-verify/src/plugin.ts +++ b/packages/hardhat-zksync-verify/src/plugin.ts @@ -1,13 +1,12 @@ import { TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, - TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, - TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS, TASK_FLATTEN_GET_FLATTENED_SOURCE, } from 'hardhat/builtin-tasks/task-names'; import { Artifacts, CompilerInput, DependencyGraph, HardhatRuntimeEnvironment, ResolvedFile } from 'hardhat/types'; import { isFullyQualifiedName, parseFullyQualifiedName } from 'hardhat/utils/contract-names'; import path from 'path'; import chalk from 'chalk'; +import { isBreakableCompilerVersion } from '@matterlabs/hardhat-zksync-solc/dist/src/utils'; import { CONTRACT_NAME_NOT_FOUND, NO_MATCHING_CONTRACT, LIBRARIES_EXPORT_ERROR } from './constants'; import { Bytecode, extractMatchingContractInformation } from './solc/bytecode'; import { ZkSyncVerifyPluginError } from './errors'; @@ -78,14 +77,8 @@ export async function getMinimalResolvedFiles( hre: HardhatRuntimeEnvironment, sourceName: string, ): Promise { - hre.config.zksolc.settings.contractsToCompile = [sourceName]; - const sourcePaths = await hre.run(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS, { sourcePath: hre.config.paths.sources }); - const sourceNames = await hre.run(TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, { - rootPath: hre.config.paths.root, - sourcePaths, - }); const dependencyGraph: DependencyGraph = await hre.run(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, { - sourceNames, + sourceNames: [sourceName], }); return dependencyGraph.getResolvedFiles(); @@ -96,17 +89,24 @@ export function getSolidityStandardJsonInput( resolvedFiles: ResolvedFile[], input: CompilerInput, ): any { - return { + const standardInput = { language: input.language, sources: Object.fromEntries( resolvedFiles.map((file) => [file.sourceName, { content: file.content.rawContent }]), ), - settings: { - ...input.settings, - isSystem: hre.config.zksolc.settings.isSystem ?? false, - forceEvmla: hre.config.zksolc.settings.forceEvmla ?? false, - }, + settings: {}, }; + standardInput.settings = !isBreakableCompilerVersion(hre.config.zksolc.version) + ? { + ...input.settings, + isSystem: hre.config.zksolc.settings.enableEraVMExtensions ?? false, + forceEvmla: hre.config.zksolc.settings.forceEVMLA ?? false, + } + : { + ...input.settings, + }; + + return standardInput; } export async function getLibraries(librariesModule: string) { diff --git a/packages/hardhat-zksync-verify/src/task-actions.ts b/packages/hardhat-zksync-verify/src/task-actions.ts index af9bc6dac..5e8896cab 100644 --- a/packages/hardhat-zksync-verify/src/task-actions.ts +++ b/packages/hardhat-zksync-verify/src/task-actions.ts @@ -3,6 +3,7 @@ import { HardhatRuntimeEnvironment, RunSuperFunction, TaskArguments } from 'hard import { parseFullyQualifiedName } from 'hardhat/utils/contract-names'; import chalk from 'chalk'; import path from 'path'; +import { getLatestEraVersion } from '@matterlabs/hardhat-zksync-solc/dist/src/utils'; import { getSupportedCompilerVersions, verifyContractRequest } from './zksync-block-explorer/service'; import { @@ -102,20 +103,33 @@ export async function getCompilerVersions( } const userSolidityConfig = hre.userConfig.solidity; + const zkSolcConfig = hre.config.zksolc; const extractedConfigs = extractors .find((extractor) => extractor.suitable(userSolidityConfig)) ?.extract(userSolidityConfig); + const latestEraVersion = await getLatestEraVersion(); + const compilerVersions = hre.config.solidity.compilers.map( - (c) => normalizeCompilerVersions({ compiler: c }, extractedConfigs?.compilers ?? []) ?? c.version, + (c) => + normalizeCompilerVersions( + { compiler: c }, + zkSolcConfig, + latestEraVersion, + extractedConfigs?.compilers ?? [], + ) ?? c.version, ); if (hre.config.solidity.overrides !== undefined) { for (const [file, compiler] of Object.entries(hre.config.solidity.overrides)) { compilerVersions.push( - normalizeCompilerVersions({ compiler, file }, extractedConfigs?.overides ?? new Map()) ?? - compiler.version, + normalizeCompilerVersions( + { compiler, file }, + zkSolcConfig, + latestEraVersion, + extractedConfigs?.overides ?? new Map(), + ) ?? compiler.version, ); } } diff --git a/packages/hardhat-zksync-verify/src/utils.ts b/packages/hardhat-zksync-verify/src/utils.ts index c74f7748a..95da70b47 100644 --- a/packages/hardhat-zksync-verify/src/utils.ts +++ b/packages/hardhat-zksync-verify/src/utils.ts @@ -128,6 +128,8 @@ export function getZkVmNormalizedVersion(solcVersion: string, zkVmSolcVersion: s export function normalizeCompilerVersions( solcConfigData: SolcConfigData, + zkSolcConfig: any, + latestEraVersion: string, userConfigCompilers: SolcUserConfig[] | Map, ): string | undefined { const noramlizers: SolcUserConfigNormalizer[] = [ @@ -138,5 +140,5 @@ export function normalizeCompilerVersions( const compiler = solcConfigData.compiler; return noramlizers .find((normalize) => normalize.suituble(userConfigCompilers, solcConfigData.file)) - ?.normalize(compiler, userConfigCompilers, solcConfigData.file); + ?.normalize(compiler, zkSolcConfig, latestEraVersion, userConfigCompilers, solcConfigData.file); } diff --git a/packages/hardhat-zksync-verify/test/common.config.ts b/packages/hardhat-zksync-verify/test/common.config.ts index 83ceb0094..7498f7a49 100644 --- a/packages/hardhat-zksync-verify/test/common.config.ts +++ b/packages/hardhat-zksync-verify/test/common.config.ts @@ -7,6 +7,7 @@ const config: HardhatUserConfig = { zksolc: { version: '1.2.0', compilerSource: 'binary', + settings: {}, }, networks: { hardhat: { diff --git a/packages/hardhat-zksync-verify/test/tests/config-normalizer.test.ts b/packages/hardhat-zksync-verify/test/tests/config-normalizer.test.ts index 01bac6255..19c4bf9ae 100644 --- a/packages/hardhat-zksync-verify/test/tests/config-normalizer.test.ts +++ b/packages/hardhat-zksync-verify/test/tests/config-normalizer.test.ts @@ -46,6 +46,10 @@ describe('CompilerSolcUserConfigNormalizer', () => { version: '0.8.17', settings: {}, }; + const zkSolcConfig = { + version: '1.3.21', + settings: {}, + }; const userConfigCompilers: SolcUserConfig[] = [ { version: '0.8.17', @@ -54,7 +58,7 @@ describe('CompilerSolcUserConfigNormalizer', () => { ]; const file = undefined; - const result = normalizer.normalize(compiler, userConfigCompilers, file); + const result = normalizer.normalize(compiler, zkSolcConfig, '1.0.0', userConfigCompilers, file); expect(result).to.equal('zkVM-0.8.17-0.1.0'); }); @@ -65,10 +69,14 @@ describe('CompilerSolcUserConfigNormalizer', () => { version: '0.8.17', settings: {}, }; + const zkSolcConfig = { + version: '1.3.21', + settings: {}, + }; const userConfigCompilers: SolcUserConfig[] = []; const file = undefined; - const result = normalizer.normalize(compiler, userConfigCompilers, file); + const result = normalizer.normalize(compiler, zkSolcConfig, '1.0.0', userConfigCompilers, file); expect(result).to.equal('0.8.17'); }); @@ -79,6 +87,10 @@ describe('CompilerSolcUserConfigNormalizer', () => { version: '0.8.17', settings: {}, }; + const zkSolcConfig = { + version: '1.3.21', + settings: {}, + }; const userConfigCompilers: SolcUserConfig[] = [ { version: '0.8.17', @@ -91,7 +103,7 @@ describe('CompilerSolcUserConfigNormalizer', () => { const file = undefined; try { - normalizer.normalize(compiler, userConfigCompilers, file); + normalizer.normalize(compiler, zkSolcConfig, '1.0.0', userConfigCompilers, file); fail('Expected an error to be thrown'); } catch (error: any) { expect(error.message).to.equal( @@ -142,12 +154,16 @@ describe('OverrideCompilerSolcUserConfigNormalizer', () => { version: '0.8.17', settings: {}, }; + const zkSolcConfig = { + version: '1.3.21', + settings: {}, + }; const userConfigCompilers: Map = new Map([ ['path/to/file.sol', { version: '0.8.17', eraVersion: '0.1.0' }], ]); const file = 'path/to/file.sol'; - const result = normalizer.normalize(compiler, userConfigCompilers, file); + const result = normalizer.normalize(compiler, zkSolcConfig, '1.0.0', userConfigCompilers, file); expect(result).to.equal('zkVM-0.8.17-0.1.0'); }); @@ -158,12 +174,16 @@ describe('OverrideCompilerSolcUserConfigNormalizer', () => { version: '0.8.17', settings: {}, }; + const zkSolcConfig = { + version: '1.5.0', + settings: {}, + }; const userConfigCompilers: Map = new Map(); const file = 'path/to/file.sol'; - const result = normalizer.normalize(compiler, userConfigCompilers, file); + const result = normalizer.normalize(compiler, zkSolcConfig, '1.0.0', userConfigCompilers, file); - expect(result).to.equal('0.8.17'); + expect(result).to.equal('zkVM-0.8.17-1.0.0'); }); }); }); diff --git a/packages/hardhat-zksync-verify/test/tests/plugin.test.ts b/packages/hardhat-zksync-verify/test/tests/plugin.test.ts index 1f715becb..65afd518c 100644 --- a/packages/hardhat-zksync-verify/test/tests/plugin.test.ts +++ b/packages/hardhat-zksync-verify/test/tests/plugin.test.ts @@ -277,6 +277,7 @@ Instead, this name was received: ${contractFQN}`); const hre = { config: { zksolc: { + version: '1.4.0', settings: {}, }, }, @@ -297,6 +298,7 @@ Instead, this name was received: ${contractFQN}`); const hre = { config: { zksolc: { + version: '1.4.0', settings: {}, }, }, @@ -310,8 +312,9 @@ Instead, this name was received: ${contractFQN}`); const hre1 = { config: { zksolc: { + version: '1.4.0', settings: { - isSystem: true, + enableEraVMExtensions: true, }, }, }, @@ -324,8 +327,9 @@ Instead, this name was received: ${contractFQN}`); const hre2 = { config: { zksolc: { + version: '1.4.0', settings: { - forceEvmla: true, + forceEVMLA: true, }, }, }, @@ -338,9 +342,10 @@ Instead, this name was received: ${contractFQN}`); const hre3 = { config: { zksolc: { + version: '1.4.0', settings: { - isSystem: true, - forceEvmla: true, + enableEraVMExtensions: true, + forceEVMLA: true, }, }, }, diff --git a/packages/hardhat-zksync-verify/test/tests/task-actions.test.ts b/packages/hardhat-zksync-verify/test/tests/task-actions.test.ts index 847bbe0e1..8f5acc211 100644 --- a/packages/hardhat-zksync-verify/test/tests/task-actions.test.ts +++ b/packages/hardhat-zksync-verify/test/tests/task-actions.test.ts @@ -2,12 +2,7 @@ import { assert, expect } from 'chai'; import sinon from 'sinon'; import { fail } from 'assert'; -import { - TASK_COMPILE, - TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH, - TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES, - TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS, -} from 'hardhat/builtin-tasks/task-names'; +import { TASK_COMPILE, TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH } from 'hardhat/builtin-tasks/task-names'; import { getCompilerVersions, getConstructorArguments, @@ -194,10 +189,6 @@ describe('verifyContract', async function () { solcVersion: '0.8.0', }) .onCall(3) - .resolves(['contracts/']) - .onCall(4) - .resolves(['contracts/Contract.sol']) - .onCall(5) .resolves({ getResolvedFiles: sinon.stub().resolves(), }), @@ -208,10 +199,8 @@ describe('verifyContract', async function () { expect(hre.run.firstCall.args[0]).to.equal(TASK_VERIFY_GET_COMPILER_VERSIONS); expect(hre.run.secondCall.args[0]).to.equal(TASK_COMPILE); expect(hre.run.thirdCall.args[0]).to.equal(TASK_VERIFY_GET_CONTRACT_INFORMATION); - expect(hre.run.getCall(3).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS); - expect(hre.run.getCall(4).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES); - expect(hre.run.getCall(5).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH); - expect(hre.run.getCall(6).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); + expect(hre.run.getCall(3).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH); + expect(hre.run.getCall(4).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); }); it('should call fallback request sent if there is compilation error', async function () { @@ -299,16 +288,12 @@ describe('verifyContract', async function () { solcVersion: '0.8.0', }) .onCall(3) - .resolves(['contracts/']) - .onCall(4) - .resolves(['contracts/Contract.sol']) - .onCall(5) .resolves({ getResolvedFiles: sinon.stub().resolves(), }) - .onCall(6) + .onCall(4) .throwsException(new ZkSyncVerifyPluginError(errorMessage)) - .onCall(7) + .onCall(5) .resolves(true), }; @@ -317,11 +302,9 @@ describe('verifyContract', async function () { expect(hre.run.firstCall.args[0]).to.equal(TASK_VERIFY_GET_COMPILER_VERSIONS); expect(hre.run.secondCall.args[0]).to.equal(TASK_COMPILE); expect(hre.run.thirdCall.args[0]).to.equal(TASK_VERIFY_GET_CONTRACT_INFORMATION); - expect(hre.run.getCall(3).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS); - expect(hre.run.getCall(4).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES); - expect(hre.run.getCall(5).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH); - expect(hre.run.getCall(6).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); - expect(hre.run.getCall(7).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); + expect(hre.run.getCall(3).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH); + expect(hre.run.getCall(4).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); + expect(hre.run.getCall(5).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); }); it('should call fallback request sent if there is missing source file', async function () { @@ -408,16 +391,12 @@ describe('verifyContract', async function () { solcVersion: '0.8.0', }) .onCall(3) - .resolves(['contracts/']) - .onCall(4) - .resolves(['contracts/Contract.sol']) - .onCall(5) .resolves({ getResolvedFiles: sinon.stub().resolves(), }) - .onCall(6) + .onCall(4) .throwsException(new ZkSyncVerifyPluginError(errorMessage)) - .onCall(7) + .onCall(5) .resolves(true), }; @@ -426,11 +405,9 @@ describe('verifyContract', async function () { expect(hre.run.firstCall.args[0]).to.equal(TASK_VERIFY_GET_COMPILER_VERSIONS); expect(hre.run.secondCall.args[0]).to.equal(TASK_COMPILE); expect(hre.run.thirdCall.args[0]).to.equal(TASK_VERIFY_GET_CONTRACT_INFORMATION); - expect(hre.run.getCall(3).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS); - expect(hre.run.getCall(4).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES); - expect(hre.run.getCall(5).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH); - expect(hre.run.getCall(6).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); - expect(hre.run.getCall(7).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); + expect(hre.run.getCall(3).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH); + expect(hre.run.getCall(4).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); + expect(hre.run.getCall(5).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); }); it('should call fallback request sent if there is missing contract file', async function () { @@ -518,16 +495,12 @@ describe('verifyContract', async function () { solcVersion: '0.8.0', }) .onCall(3) - .resolves(['contracts/']) - .onCall(4) - .resolves(['contracts/Contract.sol']) - .onCall(5) .resolves({ getResolvedFiles: sinon.stub().resolves(), }) - .onCall(6) + .onCall(4) .throwsException(new ZkSyncVerifyPluginError(errorMessage)) - .onCall(7) + .onCall(5) .resolves(true), }; @@ -536,11 +509,9 @@ describe('verifyContract', async function () { expect(hre.run.firstCall.args[0]).to.equal(TASK_VERIFY_GET_COMPILER_VERSIONS); expect(hre.run.secondCall.args[0]).to.equal(TASK_COMPILE); expect(hre.run.thirdCall.args[0]).to.equal(TASK_VERIFY_GET_CONTRACT_INFORMATION); - expect(hre.run.getCall(3).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_SOURCE_PATHS); - expect(hre.run.getCall(4).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_SOURCE_NAMES); - expect(hre.run.getCall(5).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH); - expect(hre.run.getCall(6).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); - expect(hre.run.getCall(7).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); + expect(hre.run.getCall(3).args[0]).to.equal(TASK_COMPILE_SOLIDITY_GET_DEPENDENCY_GRAPH); + expect(hre.run.getCall(4).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); + expect(hre.run.getCall(5).args[0]).to.equal(TASK_CHECK_VERIFICATION_STATUS); }); }); describe('getCompilerVersions', async function () { @@ -570,6 +541,9 @@ describe('getCompilerVersions', async function () { zksync: true, }, config: { + zksolc: { + version: 'latest', + }, solidity: { compilers: [{ version: '0.8.0' }, { version: '0.7.0' }], overrides: { @@ -589,7 +563,7 @@ describe('getCompilerVersions', async function () { }; const result = await getCompilerVersions({}, hre as any, runSuperStub as any); - expect(result).to.deep.equal(['0.8.0', '0.7.0', '0.6.0']); + expect(result).to.deep.equal(['zkVM-0.8.0-1.0.1', 'zkVM-0.7.0-1.0.1', 'zkVM-0.6.0-1.0.1']); expect(runSuperStub.called).to.equal(false); }); }); @@ -602,6 +576,11 @@ describe('verify', async function () { it('should call runSuper if zksync is false', async function () { const runSuperStub = sinon.stub().resolves(0); const hre = { + config: { + zksolc: { + version: 'latest', + }, + }, network: { zksync: false, verifyURL: 'http://localhost:3000/verify', diff --git a/packages/hardhat-zksync/tsconfig.json b/packages/hardhat-zksync/tsconfig.json index af6f5b266..a76359b4b 100644 --- a/packages/hardhat-zksync/tsconfig.json +++ b/packages/hardhat-zksync/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../config/typescript/tsconfig.json", "compilerOptions": { - "outDir": "./dist" + "outDir": "./dist", }, "exclude": ["./dist", "./node_modules", "./test/fixture-projects"] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c7c4c6231..f59dd74c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,20 +55,20 @@ importers: version: 4.1.2 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@types/node': specifier: ^18.11.17 version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -80,13 +80,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) prettier: specifier: ^3.3.0 version: 3.3.0 @@ -113,20 +113,20 @@ importers: version: 4.1.2 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@types/node': specifier: ^18.11.17 version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -138,13 +138,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) prettier: specifier: 3.3.0 version: 3.3.0 @@ -168,20 +168,20 @@ importers: version: link:../../packages/hardhat-zksync-vyper '@nomiclabs/hardhat-vyper': specifier: ^3.0.5 - version: 3.0.6(hardhat@2.22.5) + version: 3.0.6(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) ethers: specifier: ^6.7.1 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) devDependencies: '@types/node': specifier: ^18.11.17 version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -193,13 +193,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) prettier: specifier: ^3.3.0 version: 3.3.0 @@ -244,13 +244,13 @@ importers: version: 4.1.2 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@types/chai': specifier: ^4.3.16 @@ -263,7 +263,7 @@ importers: version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -275,13 +275,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.1.3 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -320,20 +320,20 @@ importers: version: 4.1.2 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@types/node': specifier: ^18.11.17 version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -345,13 +345,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) prettier: specifier: ^3.3.0 version: 3.3.0 @@ -387,16 +387,16 @@ importers: version: 4.1.2 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) zksync: specifier: ^0.13.1 - version: 0.13.1(@ethersproject/logger@5.7.0)(ethers@6.12.2) + version: 0.13.1(@ethersproject/logger@5.7.0)(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@openzeppelin/contracts': specifier: ^4.9.2 @@ -406,7 +406,7 @@ importers: version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: 6.13.1 - version: 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.57.0)(typescript@5.4.5) + version: 6.13.1(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: 6.13.1 version: 6.13.1(eslint@8.57.0)(typescript@5.4.5) @@ -418,13 +418,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@6.13.1)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) prettier: specifier: ^3.3.0 version: 3.3.0 @@ -460,20 +460,20 @@ importers: version: 4.1.2 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@types/node': specifier: ^18.11.17 version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -485,13 +485,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) prettier: specifier: ^3.3.0 version: 3.3.0 @@ -521,23 +521,23 @@ importers: version: link:../../packages/hardhat-zksync-vyper '@nomiclabs/hardhat-vyper': specifier: ^3.0.5 - version: 3.0.6(hardhat@2.22.5) + version: 3.0.6(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) chalk: specifier: ^4.1.2 version: 4.1.2 ethers: specifier: ^6.7.1 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) devDependencies: '@types/node': specifier: ^18.11.17 version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -549,13 +549,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) prettier: specifier: ^3.3.0 version: 3.3.0 @@ -579,23 +579,23 @@ importers: version: link:../../packages/hardhat-zksync-vyper '@nomiclabs/hardhat-vyper': specifier: ^3.0.5 - version: 3.0.6(hardhat@2.22.5) + version: 3.0.6(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) chalk: specifier: ^4.1.2 version: 4.1.2 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@types/node': specifier: ^18.11.17 version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: 6.13.1 - version: 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.57.0)(typescript@5.4.5) + version: 6.13.1(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: 6.13.1 version: 6.13.1(eslint@8.57.0)(typescript@5.4.5) @@ -607,13 +607,13 @@ importers: version: 9.0.0(eslint@8.57.0) eslint-plugin-import: specifier: 2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.57.0) + version: 2.29.0(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: 3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: 5.0.1 - version: 5.0.1(eslint-config-prettier@9.0.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.0.1(eslint-config-prettier@9.0.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) prettier: specifier: 3.3.0 version: 3.3.0 @@ -643,20 +643,20 @@ importers: version: 4.1.2 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@types/node': specifier: ^18.11.17 version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -668,13 +668,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) prettier: specifier: ^3.3.0 version: 3.3.0 @@ -713,10 +713,10 @@ importers: version: 0.6.1(@openzeppelin/contracts-upgradeable@4.9.6)(@openzeppelin/contracts@4.9.6) '@nomicfoundation/hardhat-ethers': specifier: ^3.0.4 - version: 3.0.6(ethers@6.12.2)(hardhat@2.22.5) + version: 3.0.6(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-verify': specifier: ^2.0.0 - version: 2.0.8(hardhat@2.22.5) + version: 2.0.8(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) '@openzeppelin/contracts': specifier: ^4.9.2 version: 4.9.6 @@ -731,10 +731,10 @@ importers: version: 4.4.1 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) sinon: specifier: ^18.0.0 version: 18.0.0 @@ -743,7 +743,7 @@ importers: version: 3.7.0(chai@4.4.1)(sinon@18.0.0) zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@types/chai': specifier: ^4.3.16 @@ -759,7 +759,7 @@ importers: version: 7.5.8 '@typescript-eslint/eslint-plugin': specifier: 7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: 7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -774,13 +774,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -813,29 +813,29 @@ importers: version: 7.1.2(chai@4.4.1) ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) ethers-v5: specifier: npm:ethers@5 - version: ethers@5.7.2 + version: ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) ordinal: specifier: ^1.0.3 version: 1.0.3 zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@matterlabs/zksync-contracts': specifier: ^0.6.1 - version: 0.6.1(@openzeppelin/contracts-upgradeable@4.6.0)(@openzeppelin/contracts@4.9.6) + version: 0.6.1(@openzeppelin/contracts-upgradeable@4.9.6)(@openzeppelin/contracts@4.9.6) '@nomicfoundation/hardhat-chai-matchers': specifier: ^2.0.7 - version: 2.0.7(@nomicfoundation/hardhat-ethers@3.0.6)(chai@4.4.1)(ethers@6.12.2)(hardhat@2.22.5) + version: 2.0.7(@nomicfoundation/hardhat-ethers@3.0.6(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(chai@4.4.1)(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) '@nomicfoundation/hardhat-ethers': specifier: ^3.0.6 - version: 3.0.6(ethers@6.12.2)(hardhat@2.22.5) + version: 3.0.6(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) '@openzeppelin/contracts': specifier: ^4.8.3 version: 4.9.6 @@ -850,7 +850,7 @@ importers: version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -868,13 +868,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -941,7 +941,7 @@ importers: version: 18.19.33 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -956,19 +956,19 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) prettier: specifier: ^3.3.0 version: 3.3.0 @@ -983,7 +983,7 @@ importers: version: 5.4.5 zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) packages/hardhat-zksync-ethers: dependencies: @@ -1001,7 +1001,7 @@ importers: version: 4.1.2 hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) devDependencies: '@types/chai': specifier: ^4.3.16 @@ -1023,7 +1023,7 @@ importers: version: 17.0.3 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: 7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -1038,16 +1038,16 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -1071,7 +1071,7 @@ importers: version: 5.4.5 zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) packages/hardhat-zksync-node: dependencies: @@ -1123,7 +1123,7 @@ importers: version: 3.2.12 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -1138,16 +1138,16 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -1165,7 +1165,7 @@ importers: version: 5.4.5 zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) packages/hardhat-zksync-solc: dependencies: @@ -1235,7 +1235,7 @@ importers: version: 3.2.12 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -1250,16 +1250,16 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -1298,13 +1298,13 @@ importers: version: 7.1.5 ethers: specifier: ^6.12.2 - version: 6.12.2 + version: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) fs-extra: specifier: ^11.2.0 version: 11.2.0 hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) proper-lockfile: specifier: ^4.1.2 version: 4.1.2 @@ -1313,7 +1313,7 @@ importers: version: 0.4.56 zksync-ethers: specifier: ^6.8.0 - version: 6.8.0(ethers@6.12.2) + version: 6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)) devDependencies: '@openzeppelin/contracts-upgradeable': specifier: ^4.9.2 @@ -1329,7 +1329,7 @@ importers: version: 4.1.4 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -1344,13 +1344,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -1379,8 +1379,8 @@ importers: specifier: workspace:^ version: link:../hardhat-zksync-solc '@nomicfoundation/hardhat-verify': - specifier: ^2.0.0 - version: 2.0.8(hardhat@2.22.5) + specifier: ^2.0.8 + version: 2.0.8(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) axios: specifier: ^1.7.2 version: 1.7.2(debug@4.3.5) @@ -1398,7 +1398,10 @@ importers: version: 4.3.5 hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) + semver: + specifier: ^7.6.2 + version: 7.6.2 sinon: specifier: ^18.0.0 version: 18.0.0 @@ -1423,7 +1426,7 @@ importers: version: 17.0.3 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -1438,13 +1441,13 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -1474,7 +1477,7 @@ importers: version: link:../hardhat-zksync-vyper '@nomiclabs/hardhat-vyper': specifier: ^3.0.6 - version: 3.0.6(hardhat@2.22.5) + version: 3.0.6(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) axios: specifier: ^1.7.2 version: 1.7.2(debug@4.3.5) @@ -1511,7 +1514,7 @@ importers: version: 17.0.3 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -1526,16 +1529,16 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -1584,7 +1587,7 @@ importers: devDependencies: '@nomiclabs/hardhat-vyper': specifier: ^3.0.6 - version: 3.0.6(hardhat@2.22.5) + version: 3.0.6(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) '@types/chai': specifier: ^4.3.16 version: 4.3.16 @@ -1611,7 +1614,7 @@ importers: version: 17.0.3 '@typescript-eslint/eslint-plugin': specifier: ^7.12.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.12.0 version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -1626,16 +1629,16 @@ importers: version: 9.1.0(eslint@8.57.0) eslint-plugin-import: specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) + version: 2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) eslint-plugin-no-only-tests: specifier: ^3.1.0 version: 3.1.0 eslint-plugin-prettier: specifier: ^5.0.1 - version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0) + version: 5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0) hardhat: specifier: ^2.22.5 - version: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + version: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) mocha: specifier: ^10.4.0 version: 10.4.0 @@ -1853,6 +1856,7 @@ packages: '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==, tarball: https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, tarball: https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz} @@ -1860,6 +1864,7 @@ packages: '@humanwhocodes/object-schema@2.0.3': resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==, tarball: https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz} + deprecated: Use @eslint/object-schema instead '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, tarball: https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz} @@ -2080,9 +2085,6 @@ packages: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==, tarball: https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - '@openzeppelin/contracts-upgradeable@4.6.0': - resolution: {integrity: sha512-5OnVuO4HlkjSCJO165a4i2Pu1zQGzMs//o54LPrwUgxvEO2P3ax1QuaSI0cEHHTveA77guS0PnNugpR2JMsPfA==, tarball: https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.6.0.tgz} - '@openzeppelin/contracts-upgradeable@4.9.6': resolution: {integrity: sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA==, tarball: https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.6.tgz} @@ -5394,7 +5396,7 @@ snapshots: dependencies: '@ethersproject/logger': 5.7.0 - '@ethersproject/providers@5.7.2': + '@ethersproject/providers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)': dependencies: '@ethersproject/abstract-provider': 5.7.0 '@ethersproject/abstract-signer': 5.7.0 @@ -5415,7 +5417,7 @@ snapshots: '@ethersproject/transactions': 5.7.0 '@ethersproject/web': 5.7.1 bech32: 1.1.4 - ws: 7.4.6 + ws: 7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -5573,11 +5575,6 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@matterlabs/zksync-contracts@0.6.1(@openzeppelin/contracts-upgradeable@4.6.0)(@openzeppelin/contracts@4.9.6)': - dependencies: - '@openzeppelin/contracts': 4.9.6 - '@openzeppelin/contracts-upgradeable': 4.6.0 - '@matterlabs/zksync-contracts@0.6.1(@openzeppelin/contracts-upgradeable@4.9.6)(@openzeppelin/contracts@4.9.6)': dependencies: '@openzeppelin/contracts': 4.9.6 @@ -5657,34 +5654,34 @@ snapshots: '@nomicfoundation/ethereumjs-rlp': 5.0.4 ethereum-cryptography: 0.1.3 - '@nomicfoundation/hardhat-chai-matchers@2.0.7(@nomicfoundation/hardhat-ethers@3.0.6)(chai@4.4.1)(ethers@6.12.2)(hardhat@2.22.5)': + '@nomicfoundation/hardhat-chai-matchers@2.0.7(@nomicfoundation/hardhat-ethers@3.0.6(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)))(chai@4.4.1)(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))': dependencies: - '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.12.2)(hardhat@2.22.5) + '@nomicfoundation/hardhat-ethers': 3.0.6(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10)) '@types/chai-as-promised': 7.1.8 chai: 4.4.1 chai-as-promised: 7.1.2(chai@4.4.1) deep-eql: 4.1.3 - ethers: 6.12.2 - hardhat: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + ethers: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + hardhat: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) ordinal: 1.0.3 - '@nomicfoundation/hardhat-ethers@3.0.6(ethers@6.12.2)(hardhat@2.22.5)': + '@nomicfoundation/hardhat-ethers@3.0.6(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10))(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))': dependencies: debug: 4.3.5 - ethers: 6.12.2 - hardhat: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + ethers: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) + hardhat: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) lodash.isequal: 4.5.0 transitivePeerDependencies: - supports-color - '@nomicfoundation/hardhat-verify@2.0.8(hardhat@2.22.5)': + '@nomicfoundation/hardhat-verify@2.0.8(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))': dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/address': 5.7.0 cbor: 8.1.0 chalk: 2.4.2 debug: 4.3.5 - hardhat: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + hardhat: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) lodash.clonedeep: 4.5.0 semver: 6.3.1 table: 6.8.2 @@ -5744,11 +5741,11 @@ snapshots: - encoding - supports-color - '@nomiclabs/hardhat-vyper@3.0.6(hardhat@2.22.5)': + '@nomiclabs/hardhat-vyper@3.0.6(hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10))': dependencies: debug: 4.3.5 fs-extra: 7.0.1 - hardhat: 2.22.5(ts-node@10.9.2)(typescript@5.4.5) + hardhat: 2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10) io-ts: 1.10.4 lodash: 4.17.21 semver: 6.3.1 @@ -5759,8 +5756,6 @@ snapshots: dependencies: which: 3.0.1 - '@openzeppelin/contracts-upgradeable@4.6.0': {} - '@openzeppelin/contracts-upgradeable@4.9.6': {} '@openzeppelin/contracts@4.9.6': {} @@ -6003,7 +5998,7 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 6.13.1(eslint@8.57.0)(typescript@5.4.5) @@ -6018,11 +6013,12 @@ snapshots: natural-compare: 1.4.0 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) @@ -6035,6 +6031,7 @@ snapshots: ignore: 5.3.1 natural-compare: 1.4.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6047,6 +6044,7 @@ snapshots: '@typescript-eslint/visitor-keys': 6.13.1 debug: 4.3.5 eslint: 8.57.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6059,6 +6057,7 @@ snapshots: '@typescript-eslint/visitor-keys': 7.12.0 debug: 4.3.5 eslint: 8.57.0 + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6080,6 +6079,7 @@ snapshots: debug: 4.3.5 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6091,6 +6091,7 @@ snapshots: debug: 4.3.5 eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6108,6 +6109,7 @@ snapshots: is-glob: 4.0.3 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6122,6 +6124,7 @@ snapshots: minimatch: 9.0.4 semver: 7.6.2 ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -6751,6 +6754,7 @@ snapshots: debug@4.3.4(supports-color@8.1.1): dependencies: ms: 2.1.2 + optionalDependencies: supports-color: 8.1.1 debug@4.3.5: @@ -7008,27 +7012,28 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 6.13.1(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.13.1(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.12.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.57.0): + eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 6.13.1(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -7037,7 +7042,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -7047,14 +7052,15 @@ snapshots: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.13.1(eslint@8.57.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.13.1)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 6.13.1(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -7063,7 +7069,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.13.1(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -7073,14 +7079,15 @@ snapshots: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.13.1(eslint@8.57.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -7089,7 +7096,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.12.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -7099,6 +7106,8 @@ snapshots: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7106,21 +7115,23 @@ snapshots: eslint-plugin-no-only-tests@3.1.0: {} - eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0)(eslint@8.57.0)(prettier@3.3.0): + eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.0.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0): dependencies: eslint: 8.57.0 - eslint-config-prettier: 9.0.0(eslint@8.57.0) prettier: 3.3.0 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 + optionalDependencies: + eslint-config-prettier: 9.0.0(eslint@8.57.0) - eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.3.0): + eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.0): dependencies: eslint: 8.57.0 - eslint-config-prettier: 9.1.0(eslint@8.57.0) prettier: 3.3.0 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-scope@7.2.2: dependencies: @@ -7247,7 +7258,7 @@ snapshots: ethereum-cryptography: 0.1.3 rlp: 2.2.7 - ethers@5.7.2: + ethers@5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@ethersproject/abstract-provider': 5.7.0 @@ -7267,7 +7278,7 @@ snapshots: '@ethersproject/networks': 5.7.1 '@ethersproject/pbkdf2': 5.7.0 '@ethersproject/properties': 5.7.0 - '@ethersproject/providers': 5.7.2 + '@ethersproject/providers': 5.7.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) '@ethersproject/random': 5.7.0 '@ethersproject/rlp': 5.7.0 '@ethersproject/sha2': 5.7.0 @@ -7283,7 +7294,7 @@ snapshots: - bufferutil - utf-8-validate - ethers@6.12.2: + ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10): dependencies: '@adraffy/ens-normalize': 1.10.1 '@noble/curves': 1.2.0 @@ -7291,7 +7302,7 @@ snapshots: '@types/node': 18.15.13 aes-js: 4.0.0-beta.5 tslib: 2.4.0 - ws: 8.5.0 + ws: 8.5.0(bufferutil@4.0.8)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -7400,7 +7411,7 @@ snapshots: flatted@3.3.1: {} follow-redirects@1.15.6(debug@4.3.5): - dependencies: + optionalDependencies: debug: 4.3.5 for-each@0.3.3: @@ -7577,7 +7588,7 @@ snapshots: hard-rejection@2.1.0: {} - hardhat@2.22.5(ts-node@10.9.2)(typescript@5.4.5): + hardhat@2.22.5(bufferutil@4.0.8)(ts-node@10.9.2(@types/node@18.19.33)(typescript@5.4.5))(typescript@5.4.5)(utf-8-validate@5.0.10): dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 @@ -7618,12 +7629,13 @@ snapshots: solc: 0.7.3(debug@4.3.5) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 - ts-node: 10.9.2(@types/node@18.19.33)(typescript@5.4.5) tsort: 0.0.1 - typescript: 5.4.5 undici: 5.28.4 uuid: 8.3.2 - ws: 7.5.9 + ws: 7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10) + optionalDependencies: + ts-node: 10.9.2(@types/node@18.19.33)(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - bufferutil - c-kzg @@ -9119,11 +9131,20 @@ snapshots: wrappy@1.0.2: {} - ws@7.4.6: {} + ws@7.4.6(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 - ws@7.5.9: {} + ws@7.5.9(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 - ws@8.5.0: {} + ws@8.5.0(bufferutil@4.0.8)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.8 + utf-8-validate: 5.0.10 wsrun@5.2.4: dependencies: @@ -9221,15 +9242,15 @@ snapshots: zksync-crypto@0.6.2: {} - zksync-ethers@6.8.0(ethers@6.12.2): + zksync-ethers@6.8.0(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)): dependencies: - ethers: 6.12.2 + ethers: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) - zksync@0.13.1(@ethersproject/logger@5.7.0)(ethers@6.12.2): + zksync@0.13.1(@ethersproject/logger@5.7.0)(ethers@6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)): dependencies: '@ethersproject/logger': 5.7.0 axios: 0.21.4 - ethers: 6.12.2 + ethers: 6.12.2(bufferutil@4.0.8)(utf-8-validate@5.0.10) websocket: 1.0.35 websocket-as-promised: 1.1.0 zksync-crypto: 0.6.2