diff --git a/.gitignore b/.gitignore index 42b1b92093..2f749745d3 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,5 @@ tsconfig.build.tsbuildinfo /packages/smart-contracts/cache/ /packages/smart-contracts/types/ /packages/smart-contracts/src/types/ +/packages/smart-contracts/build-zk/ +/packages/smart-contracts/cache-zk/ \ No newline at end of file diff --git a/packages/currency/src/chains/evm/data/zksync-era-testnet.ts b/packages/currency/src/chains/evm/data/zksync-era-testnet.ts new file mode 100644 index 0000000000..fe5179a96b --- /dev/null +++ b/packages/currency/src/chains/evm/data/zksync-era-testnet.ts @@ -0,0 +1 @@ +export const chainId = 280; diff --git a/packages/currency/src/chains/evm/data/zksync-era.ts b/packages/currency/src/chains/evm/data/zksync-era.ts new file mode 100644 index 0000000000..293661efc3 --- /dev/null +++ b/packages/currency/src/chains/evm/data/zksync-era.ts @@ -0,0 +1 @@ +export const chainId = 324; diff --git a/packages/currency/src/chains/evm/index.ts b/packages/currency/src/chains/evm/index.ts index de90682169..8ef7f838e7 100644 --- a/packages/currency/src/chains/evm/index.ts +++ b/packages/currency/src/chains/evm/index.ts @@ -25,6 +25,8 @@ import * as RoninDefinition from './data/ronin'; import * as SokolDefinition from './data/sokol'; import * as TombchainDefinition from './data/tombchain'; import * as XDaiDefinition from './data/xdai'; +import * as ZkSyncEraTestnetDefinition from './data/zksync-era-testnet'; +import * as ZkSyncEraDefinition from './data/zksync-era'; export type EvmChain = Chain & { chainId: number; @@ -55,4 +57,6 @@ export const chains: Record = { sokol: SokolDefinition, tombchain: TombchainDefinition, xdai: XDaiDefinition, + zkSyncEraTestnet: ZkSyncEraTestnetDefinition, + zkSyncEra: ZkSyncEraDefinition, }; diff --git a/packages/currency/src/native.ts b/packages/currency/src/native.ts index d14ea7b9ad..be366309cf 100644 --- a/packages/currency/src/native.ts +++ b/packages/currency/src/native.ts @@ -147,6 +147,18 @@ export const nativeCurrencies: Record = { mantle: { chainId: 5000, name: 'mantle' }, 'mantle-testnet': { chainId: 5001, name: 'mantle-testnet' }, core: { chainId: 1116, name: 'core' }, + zkSyncEraTestnet: { chainId: 280, name: 'zkSyncEraTestnet' }, + zkSyncEra: { chainId: 324, name: 'zkSyncEra' }, }; /** @@ -66,6 +68,10 @@ export class MultichainExplorerApiProvider extends ethers.providers.EtherscanPro return 'https://explorer.testnet.mantle.xyz/api'; case 'core': return 'https://openapi.coredao.org/'; + case 'zkSyncEraTestnet': + return 'https://goerli.explorer.zksync.io/'; + case 'zkSyncEra': + return 'https://explorer.zksync.io/'; default: return super.getBaseUrl(); } diff --git a/packages/payment-processor/test/payment/erc777-stream.test.ts b/packages/payment-processor/test/payment/erc777-stream.test.ts index 3e1fa26455..58c04bbce3 100644 --- a/packages/payment-processor/test/payment/erc777-stream.test.ts +++ b/packages/payment-processor/test/payment/erc777-stream.test.ts @@ -96,7 +96,7 @@ describe('erc777-stream', () => { it.each([ { network: 'goerli' }, { network: 'matic' }, - { network: 'xdai' }, + // { network: 'xdai' }, { network: 'optimism' }, { network: 'avalanche' }, { network: 'arbitrum-one' }, diff --git a/packages/smart-contracts/README.md b/packages/smart-contracts/README.md index 583fac61a2..49ce4d80cf 100644 --- a/packages/smart-contracts/README.md +++ b/packages/smart-contracts/README.md @@ -215,6 +215,40 @@ yarn hardhat deploy-live-payments --network private --force yarn hardhat deploy-live-payments --network private --force --dry-run ``` +## ZkSyncEra support + +### Compilation + +To compile the contracts with the zkSync compiler, we use the same compile task but with the zkSync network specified. + +```bash +yarn hardhat compile --network zkSyncEra +``` + +The compiled results go in separate directories build-zk and cache-zk. +In order for the zkSync compiler to be activated, this networks has the `zksync: true` flag in the hardhat.config.ts file. + +### Deployment + +We have deployment scripts in the /deploy directory for contracts ERC20FeeProxy, EthereumFeeProxy and BatchPayments. +These are different deploy scripts than regular EVM ones because they use the zkSync deploy package. + +We deploy with the following commands: + +First deploy the Proxy contracts: + +```bash +yarn hardhat deploy-zksync --script deploy-zk-proxy-contracts --network zkSyncEra +``` + +Then deploy the Batch contract: + +```bash +yarn hardhat deploy-zksync --script deploy-zk-batch-contracts --network zkSyncEra +``` + +We don't have deploy scripts for our Conversion proxy because there is no Chainlink feed yet on this chain. + ## Administrate the contracts The contracts to be updated are listed in the array `create2ContractDeploymentList` in [Utils](scripts-create2/utils.ts). diff --git a/packages/smart-contracts/deploy/deploy-zk-batch-contracts.ts b/packages/smart-contracts/deploy/deploy-zk-batch-contracts.ts new file mode 100644 index 0000000000..ecb64c0293 --- /dev/null +++ b/packages/smart-contracts/deploy/deploy-zk-batch-contracts.ts @@ -0,0 +1,23 @@ +import { erc20FeeProxyArtifact, ethereumFeeProxyArtifact } from '../src/lib'; +import { deployContract } from './utils-zk'; +import * as hre from 'hardhat'; +import { CurrencyTypes } from '@requestnetwork/types'; + +/** + * Deploys Batch payments contracts to zkSync network. + * This script is supposed to be run with the deploy-zksync plugin + * check zkSync section in smart-contracts/README file + */ +export default async function () { + const [deployer] = await hre.ethers.getSigners(); + const constructorArguments = [ + erc20FeeProxyArtifact.getAddress(hre.network.name as CurrencyTypes.EvmChainName), + ethereumFeeProxyArtifact.getAddress(hre.network.name as CurrencyTypes.EvmChainName), + hre.ethers.constants.AddressZero, + hre.ethers.constants.AddressZero, + hre.ethers.constants.AddressZero, + deployer.address, + ]; + console.log(`Deploying BatchConversionPayments to zkSync ...`); + await deployContract('BatchConversionPayments', constructorArguments); +} diff --git a/packages/smart-contracts/deploy/deploy-zk-proxy-contracts.ts b/packages/smart-contracts/deploy/deploy-zk-proxy-contracts.ts new file mode 100644 index 0000000000..ab58e819ab --- /dev/null +++ b/packages/smart-contracts/deploy/deploy-zk-proxy-contracts.ts @@ -0,0 +1,16 @@ +import { deployContract } from './utils-zk'; + +/** + * Deploys Proxy contracts to zkSync network. + * This script is supposed to be run with the deploy-zksync plugin + * check zkSync section in smart-contracts/README file + */ +export default async function () { + const deployList: string[] = ['ERC20FeeProxy', 'EthereumFeeProxy']; + + for (let index = 0; index < deployList.length; index++) { + const contractName = deployList[index]; + console.log(`Deploying ${contractName} to zkSync ...`); + await deployContract(contractName, []); + } +} diff --git a/packages/smart-contracts/deploy/utils-zk.ts b/packages/smart-contracts/deploy/utils-zk.ts new file mode 100644 index 0000000000..99caa8a457 --- /dev/null +++ b/packages/smart-contracts/deploy/utils-zk.ts @@ -0,0 +1,172 @@ +import { Provider, Wallet, Contract } from 'zksync-web3'; +import * as hre from 'hardhat'; +import { Deployer } from '@matterlabs/hardhat-zksync-deploy'; +import { formatEther } from 'ethers/lib/utils'; +import { BigNumberish } from 'ethers'; + +import { config } from 'dotenv'; +import { networkRpcs } from '@requestnetwork/utils/dist/providers'; + +config(); + +const accounts = process.env.DEPLOYMENT_PRIVATE_KEY + ? [process.env.DEPLOYMENT_PRIVATE_KEY] + : process.env.DEPLOYER_MASTER_KEY + ? [process.env.DEPLOYER_MASTER_KEY] + : process.env.ADMIN_PRIVATE_KEY + ? [process.env.ADMIN_PRIVATE_KEY] + : undefined; + +const WALLET_PRIVATE_KEY = (accounts || [])[0]; + +export const getProvider = () => { + const rpcUrl = networkRpcs[hre.network.name]; + if (!rpcUrl) + throw `⛔️ RPC URL wasn't found in "${hre.network.name}"! Please add a "url" field to the network config in hardhat.config.ts`; + + // Initialize zkSync Provider + const provider = new Provider(rpcUrl); + + return provider; +}; + +export const getWallet = (privateKey?: string): Wallet => { + if (!privateKey) { + // Get wallet private key from .env file + if (!WALLET_PRIVATE_KEY) throw "⛔️ Wallet private key wasn't found in .env file!"; + } + + const provider = getProvider(); + + // Initialize zkSync Wallet + const wallet = new Wallet(privateKey ?? WALLET_PRIVATE_KEY!, provider); + + return wallet; +}; + +export const verifyEnoughBalance = async (wallet: Wallet, amount: BigNumberish) => { + // Check if the wallet has enough balance + const balance = await wallet.getBalance(); + if (balance.lt(amount)) + throw `⛔️ Wallet balance is too low! Required ${formatEther(amount)} ETH, but current ${ + wallet.address + } balance is ${formatEther(balance)} ETH`; +}; + +/** + * @param {string} data.contract The contract's path and name. E.g., "contracts/Greeter.sol:Greeter" + */ +export const verifyContract = async (data: { + address: string; + contract: string; + constructorArguments: string | []; + bytecode: string; +}) => { + const verificationRequestId: number = await hre.run('verify:verify', { + ...data, + noCompile: true, + }); + return verificationRequestId; +}; + +type DeployContractOptions = { + /** + * If true, the deployment process will not print any logs + */ + silent?: boolean; + /** + * If true, the contract will not be verified on Block Explorer + */ + noVerify?: boolean; + /** + * If specified, the contract will be deployed using this wallet + */ + wallet?: Wallet; +}; + +export const verifyContractByName = async ( + contractArtifactName: string, + contractAddress: string, +) => { + const wallet = getWallet(); + const deployer = new Deployer(hre, wallet); + + const artifact = await deployer.loadArtifact(contractArtifactName).catch((error) => { + if (error?.message?.includes(`Artifact for contract "${contractArtifactName}" not found.`)) { + console.error(error.message); + throw `⛔️ Please make sure you have compiled your contracts or specified the correct contract name!`; + } else { + throw error; + } + }); + + const fullContractSource = `${artifact.sourceName}:${artifact.contractName}`; + + // Display contract deployment info + console.log(`\n"${artifact.contractName}" was successfully deployed:`); + console.log(` - Contract address: ${contractAddress}`); + console.log(` - Contract source: ${fullContractSource}`); + + console.log(`Requesting contract verification...`); + await verifyContract({ + address: contractAddress, + contract: fullContractSource, + constructorArguments: [], + bytecode: artifact.bytecode, + }); +}; + +export const deployContract = async ( + contractArtifactName: string, + constructorArguments?: any[], + options?: DeployContractOptions, +): Promise => { + const log = (message: string) => { + if (!options?.silent) console.log(message); + }; + + log(`\nStarting deployment process of "${contractArtifactName}"...`); + + const wallet = options?.wallet ?? getWallet(); + const deployer = new Deployer(hre, wallet); + + const artifact = await deployer.loadArtifact(contractArtifactName).catch((error) => { + if (error?.message?.includes(`Artifact for contract "${contractArtifactName}" not found.`)) { + console.error(error.message); + throw `⛔️ Please make sure you have compiled your contracts or specified the correct contract name!`; + } else { + throw error; + } + }); + + // Estimate contract deployment fee + const deploymentFee = await deployer.estimateDeployFee(artifact, constructorArguments || []); + log(`Estimated deployment cost: ${formatEther(deploymentFee)} ETH`); + + // Check if the wallet has enough balance + await verifyEnoughBalance(wallet, deploymentFee); + + // Deploy the contract to zkSync + const contract = await deployer.deploy(artifact, constructorArguments); + + const constructorArgs = contract.interface.encodeDeploy(constructorArguments); + const fullContractSource = `${artifact.sourceName}:${artifact.contractName}`; + + // Display contract deployment info + log(`\n"${artifact.contractName}" was successfully deployed:`); + log(` - Contract address: ${contract.address}`); + log(` - Contract source: ${fullContractSource}`); + log(` - Encoded constructor arguments: ${constructorArgs}\n`); + + if (!options?.noVerify && hre.network.config.verifyURL) { + log(`Requesting contract verification...`); + await verifyContract({ + address: contract.address, + contract: fullContractSource, + constructorArguments: constructorArgs, + bytecode: artifact.bytecode, + }); + } + + return contract; +}; diff --git a/packages/smart-contracts/hardhat.config.ts b/packages/smart-contracts/hardhat.config.ts index 0dbb31aced..3dec55eff6 100644 --- a/packages/smart-contracts/hardhat.config.ts +++ b/packages/smart-contracts/hardhat.config.ts @@ -1,7 +1,12 @@ import '@typechain/hardhat'; import '@nomiclabs/hardhat-waffle'; -import '@nomicfoundation/hardhat-verify'; import '@nomiclabs/hardhat-ethers'; + +import '@matterlabs/hardhat-zksync-node'; +import '@matterlabs/hardhat-zksync-deploy'; +import '@matterlabs/hardhat-zksync-solc'; +import '@matterlabs/hardhat-zksync-verify'; + import { subtask, task } from 'hardhat/config'; import { config } from 'dotenv'; import deployAllContracts from './scripts/test-deploy-all'; @@ -161,6 +166,23 @@ export default { chainId: 1116, accounts, }, + zkSyncEraTestnet: { + url: url('zkSyncEraTestnet'), + ethNetwork: 'goerli', + zksync: true, + verifyURL: 'https://zksync2-testnet-explorer.zksync.dev/contract_verification', + accounts, + }, + zkSyncEra: { + url: url('zkSyncEra'), + ethNetwork: 'mainnet', + zksync: true, + verifyURL: 'https://zksync2-mainnet-explorer.zksync.io/contract_verification', + accounts, + }, + }, + zksolc: { + version: '1.3.16', }, etherscan: { apiKey: { diff --git a/packages/smart-contracts/package.json b/packages/smart-contracts/package.json index a2ab704889..8910bd2408 100644 --- a/packages/smart-contracts/package.json +++ b/packages/smart-contracts/package.json @@ -54,6 +54,11 @@ "tslib": "2.5.0" }, "devDependencies": { + "@matterlabs/hardhat-zksync-deploy": "0.6.5", + "@matterlabs/hardhat-zksync-node": "0.0.1-beta.6", + "@matterlabs/hardhat-zksync-solc": "0.4.2", + "@matterlabs/hardhat-zksync-verify": "0.2.1", + "@matterlabs/zksync-contracts": "0.6.1", "@nomicfoundation/hardhat-verify": "2.0.0", "@nomiclabs/hardhat-ethers": "2.0.2", "@nomiclabs/hardhat-waffle": "2.0.1", @@ -79,6 +84,7 @@ "shx": "0.3.2", "solhint": "3.3.6", "typechain": "5.1.1", - "web3": "1.7.3" + "web3": "1.7.3", + "zksync-web3": "0.14.3" } } diff --git a/packages/smart-contracts/src/lib/artifacts/BatchConversionPayments/index.ts b/packages/smart-contracts/src/lib/artifacts/BatchConversionPayments/index.ts index 1dc0a289f4..dc723e76df 100644 --- a/packages/smart-contracts/src/lib/artifacts/BatchConversionPayments/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/BatchConversionPayments/index.ts @@ -63,6 +63,15 @@ export const batchConversionPaymentsArtifact = new ContractArtifact( address: '0x0DD57FFe83a53bCbd657e234B16A3e74fEDb8fBA', creationBlockNumber: 35498688, }, + zkSyncEra: { + address: '0x0C41700ee1B363DB2ebC1a985f65cAf6eC4b1023', + creationBlockNumber: 19545614, + }, }, }, }, diff --git a/packages/smart-contracts/src/lib/artifacts/ERC20FeeProxy/index.ts b/packages/smart-contracts/src/lib/artifacts/ERC20FeeProxy/index.ts index 9b9a139bb7..91551b1527 100644 --- a/packages/smart-contracts/src/lib/artifacts/ERC20FeeProxy/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/ERC20FeeProxy/index.ts @@ -147,6 +147,14 @@ export const erc20FeeProxyArtifact = new ContractArtifact( address: '0x399F5EE127ce7432E4921a61b8CF52b0af52cbfE', creationBlockNumber: 8317450, }, + zkSyncEraTestnet: { + address: '0xb4E10de047b72Af2a44F64892419d248d58d9dF5', + creationBlockNumber: 13616167, + }, + zkSyncEra: { + address: '0x6e28Cc56C2E64c9250f39Cb134686C87dB196532', + creationBlockNumber: 19545285, + }, }, }, near: { diff --git a/packages/smart-contracts/src/lib/artifacts/EthereumFeeProxy/index.ts b/packages/smart-contracts/src/lib/artifacts/EthereumFeeProxy/index.ts index d75957e11c..a207ae8314 100644 --- a/packages/smart-contracts/src/lib/artifacts/EthereumFeeProxy/index.ts +++ b/packages/smart-contracts/src/lib/artifacts/EthereumFeeProxy/index.ts @@ -134,6 +134,14 @@ export const ethereumFeeProxyArtifact = new ContractArtifact( address: '0xe11BF2fDA23bF0A98365e1A4c04A87C9339e8687', creationBlockNumber: 8317446, }, + zkSyncEraTestnet: { + address: '0x0de6a1FB56a141086E0192269399af8b8a9e334A', + creationBlockNumber: 13616655, + }, + zkSyncEra: { + address: '0xE9A708db0D30409e39810C44cA240fd15cdA9b1a', + creationBlockNumber: 19545294, + }, }, }, }, diff --git a/packages/smart-contracts/tsconfig.json b/packages/smart-contracts/tsconfig.json index c067f90db1..e3110afaea 100644 --- a/packages/smart-contracts/tsconfig.json +++ b/packages/smart-contracts/tsconfig.json @@ -9,6 +9,7 @@ "test/", "scripts/", "scripts-create2/", + "deploy/", "hardhat.config.ts" ] } diff --git a/packages/types/src/currency-types.ts b/packages/types/src/currency-types.ts index 1502d6f159..76e6a01044 100644 --- a/packages/types/src/currency-types.ts +++ b/packages/types/src/currency-types.ts @@ -25,7 +25,9 @@ export type EvmChainName = | 'ronin' | 'sokol' | 'tombchain' - | 'xdai'; + | 'xdai' + | 'zkSyncEraTestnet' + | 'zkSyncEra'; /** * List of supported BTC chains diff --git a/packages/utils/src/providers.ts b/packages/utils/src/providers.ts index 1ced8e0858..f9fca0365e 100644 --- a/packages/utils/src/providers.ts +++ b/packages/utils/src/providers.ts @@ -49,6 +49,8 @@ const networkRpcs: Record = { mantle: 'https://rpc.mantle.xyz/', 'mantle-testnet': 'https://rpc.testnet.mantle.xyz/', core: 'https://rpc.coredao.org/', + zkSyncEraTestnet: 'https://testnet.era.zksync.dev', + zkSyncEra: 'https://mainnet.era.zksync.io', }; /** diff --git a/yarn.lock b/yarn.lock index 3f7056f0ff..c59f76104b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -856,6 +856,11 @@ "@babel/helper-validator-identifier" "^7.22.20" to-fast-properties "^2.0.0" +"@balena/dockerignore@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@balena/dockerignore/-/dockerignore-1.0.2.tgz#9ffe4726915251e8eb69f44ef3547e0da2c03e0d" + integrity sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q== + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" @@ -3722,6 +3727,77 @@ npmlog "^4.1.2" write-file-atomic "^2.3.0" +"@matterlabs/hardhat-zksync-deploy@^0.6.5": + version "0.6.5" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-0.6.5.tgz#fe56bf30850e71c8d328ac1a06a100c1a0af6e3e" + integrity sha512-EZpvn8pDslfO3UA2obT8FOi5jsHhxYS5ndIR7tjL2zXKbvkbpoJR5rgKoGTJJm0riaCud674sQcxMOybVQ+2gg== + dependencies: + "@matterlabs/hardhat-zksync-solc" "0.4.2" + chalk "4.1.2" + ts-morph "^19.0.0" + +"@matterlabs/hardhat-zksync-node@^0.0.1-beta.6": + version "0.0.1-beta.7" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-node/-/hardhat-zksync-node-0.0.1-beta.7.tgz#01e0b28f844e02aa52e9474b5b5c124ed7bf7566" + integrity sha512-14yfpSDMDai5a2AOHumR69T9GTvW94MVI8GJpbJxhMZwF+XGBEpxk281JlTZATwWVzE0AZh0jYt3p8AIxtwvDg== + dependencies: + "@matterlabs/hardhat-zksync-solc" "1.0.0" + axios "^1.4.0" + chalk "4.1.2" + fs-extra "^11.1.1" + ts-morph "^19.0.0" + +"@matterlabs/hardhat-zksync-solc@0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.4.1.tgz#e8e67d947098d7bb8925f968544d34e522af5a9c" + integrity sha512-fdlGf/2yZR5ihVNc2ubea1R/nNFXRONL29Fgz5FwB3azB13rPb76fkQgcFIg9zSufHsEy6zUUT029NkxLNA9Sw== + dependencies: + "@nomiclabs/hardhat-docker" "^2.0.0" + chalk "4.1.2" + dockerode "^3.3.4" + fs-extra "^11.1.1" + semver "^7.5.1" + +"@matterlabs/hardhat-zksync-solc@0.4.2", "@matterlabs/hardhat-zksync-solc@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.4.2.tgz#64121082e88c5ab22eb4e9594d120e504f6af499" + integrity sha512-6NFWPSZiOAoo7wNuhMg4ztj7mMEH+tLrx09WuCbcURrHPijj/KxYNsJD6Uw5lapKr7G8H7SQISGid1/MTXVmXQ== + dependencies: + "@nomiclabs/hardhat-docker" "^2.0.0" + chalk "4.1.2" + dockerode "^3.3.4" + fs-extra "^11.1.1" + proper-lockfile "^4.1.2" + semver "^7.5.1" + +"@matterlabs/hardhat-zksync-solc@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-1.0.0.tgz#4da54b59fb4fa9c2ba22a3bb2e6150cf1d70028c" + integrity sha512-N6uUcmbAwZtu60WooUGJ1ssUdFFCd8MU1PdOSXcCJQ3vzjej2p3Ra8t3DrbJSWf3LRJoM18mZkZD2AktlF/ONw== + dependencies: + "@nomiclabs/hardhat-docker" "^2.0.0" + chalk "4.1.2" + dockerode "^3.3.4" + fs-extra "^11.1.1" + proper-lockfile "^4.1.2" + semver "^7.5.1" + +"@matterlabs/hardhat-zksync-verify@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-verify/-/hardhat-zksync-verify-0.2.1.tgz#f52cbe3670b7a6b01c8c4d0bbf3e6e13583e5d99" + integrity sha512-6awofVwsGHlyFMNTZcp05DPHpriSmmhBw0q+OC/Kn9xbdqT8E7fMJa6irvJH590UugxGerKrZDIY6uM6rwAjqQ== + dependencies: + "@matterlabs/hardhat-zksync-solc" "0.4.1" + "@nomicfoundation/hardhat-verify" "^1.0.2" + axios "^1.4.0" + chalk "4.1.2" + dockerode "^3.3.4" + +"@matterlabs/zksync-contracts@^0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@matterlabs/zksync-contracts/-/zksync-contracts-0.6.1.tgz#39f061959d5890fd0043a2f1ae710f764b172230" + integrity sha512-+hucLw4DhGmTmQlXOTEtpboYCaOm/X2VJcWmnW4abNcOgQXEHX+mTxQrxEfPjIZT0ZE6z5FTUrOK9+RgUZwBMQ== + "@metamask/contract-metadata@1.31.0": version "1.31.0" resolved "https://registry.npmjs.org/@metamask/contract-metadata/-/contract-metadata-1.31.0.tgz" @@ -4054,6 +4130,21 @@ table "^6.8.0" undici "^5.14.0" +"@nomicfoundation/hardhat-verify@^1.0.2": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-1.1.1.tgz#6a433d777ce0172d1f0edf7f2d3e1df14b3ecfc1" + integrity sha512-9QsTYD7pcZaQFEA3tBb/D/oCStYDiEVDN7Dxeo/4SCyHRSm86APypxxdOMEPlGmXsAvd+p1j/dTODcpxb8aztA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + chalk "^2.4.2" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.0.tgz#83a7367342bd053a76d04bbcf4f373fef07cf760" @@ -4120,6 +4211,15 @@ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.0" "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.0" +"@nomiclabs/hardhat-docker@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-docker/-/hardhat-docker-2.0.2.tgz#ae964be17951275a55859ff7358e9e7c77448846" + integrity sha512-XgGEpRT3wlA1VslyB57zyAHV+oll8KnV1TjwnxxC1tpAL04/lbdwpdO5KxInVN8irMSepqFpsiSkqlcnvbE7Ng== + dependencies: + dockerode "^2.5.8" + fs-extra "^7.0.1" + node-fetch "^2.6.0" + "@nomiclabs/hardhat-ethers@2.0.2": version "2.0.2" resolved "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz" @@ -4691,6 +4791,16 @@ strip-ansi "^4.0.0" strip-indent "^2.0.0" +"@ts-morph/common@~0.20.0": + version "0.20.0" + resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.20.0.tgz#3f161996b085ba4519731e4d24c35f6cba5b80af" + integrity sha512-7uKjByfbPpwuzkstL3L5MQyuXPSKdoNG93Fmi2JoDcTf3pEP731JdRFAduRVkOs8oqxPsXKA+ScrWkdQ8t/I+Q== + dependencies: + fast-glob "^3.2.12" + minimatch "^7.4.3" + mkdirp "^2.1.6" + path-browserify "^1.0.1" + "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" @@ -5410,6 +5520,14 @@ mkdirp-promise "^5.0.1" mz "^2.5.0" +JSONStream@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" + integrity sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + JSONStream@^1.0.3, JSONStream@^1.0.4, JSONStream@^1.3.4: version "1.3.5" resolved "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz" @@ -6025,6 +6143,13 @@ asn1.js@^5.2.0: minimalistic-assert "^1.0.0" safer-buffer "^2.1.0" +asn1@^0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + asn1@~0.2.3: version "0.2.4" resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz" @@ -6178,6 +6303,15 @@ axios@0.27.2: follow-redirects "^1.14.9" form-data "^4.0.0" +axios@^1.4.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.1.tgz#76550d644bf0a2d469a01f9244db6753208397d7" + integrity sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz" @@ -6868,7 +7002,7 @@ batch@0.6.1: resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= -bcrypt-pbkdf@^1.0.0: +bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= @@ -6965,7 +7099,15 @@ bip39@2.5.0: safe-buffer "^5.0.1" unorm "^1.3.3" -bl@^4.1.0: +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +bl@^4.0.3, bl@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== @@ -7354,6 +7496,19 @@ btoa-lite@^1.0.0: resolved "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz" integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" @@ -7364,6 +7519,11 @@ buffer-equal@0.0.1: resolved "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz" integrity sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs= +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ== + buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" @@ -7417,6 +7577,11 @@ bufferutil@^4.0.1: dependencies: node-gyp-build "^4.2.0" +buildcheck@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238" + integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A== + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz" @@ -7755,6 +7920,14 @@ chalk@4.1.0, chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@4.1.2, chalk@^4.1.1: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz" @@ -7775,14 +7948,6 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4 escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.1.1: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - change-case-all@1.0.14: version "1.0.14" resolved "https://registry.npmjs.org/change-case-all/-/change-case-all-1.0.14.tgz" @@ -7976,7 +8141,7 @@ chokidar@^3.1.1, chokidar@^3.4.0, chokidar@^3.5.1: optionalDependencies: fsevents "~2.3.1" -chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: +chownr@^1.0.1, chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -8195,6 +8360,11 @@ co@^4.6.0: resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= +code-block-writer@^12.0.0: + version "12.0.0" + resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-12.0.0.tgz#4dd58946eb4234105aff7f0035977b2afdc2a770" + integrity sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w== + code-block-writer@^7.2.0: version "7.3.1" resolved "https://registry.npmjs.org/code-block-writer/-/code-block-writer-7.3.1.tgz" @@ -8359,7 +8529,7 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0, concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: +concat-stream@^1.5.0, concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0, concat-stream@~1.6.2: version "1.6.2" resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -8665,6 +8835,14 @@ coveralls@3.1.0: minimist "^1.2.5" request "^2.88.2" +cpu-features@~0.0.8: + version "0.0.9" + resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.9.tgz#5226b92f0f1c63122b0a3eb84cb8335a4de499fc" + integrity sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ== + dependencies: + buildcheck "~0.0.6" + nan "^2.17.0" + crc-32@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/crc-32/-/crc-32-1.2.0.tgz" @@ -8968,7 +9146,7 @@ debug@4, debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, de dependencies: ms "2.1.2" -debug@^3.1.0, debug@^3.2.7: +debug@^3.1.0, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== @@ -9292,6 +9470,44 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +docker-modem@^1.0.8: + version "1.0.9" + resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-1.0.9.tgz#a1f13e50e6afb6cf3431b2d5e7aac589db6aaba8" + integrity sha512-lVjqCSCIAUDZPAZIeyM125HXfNvOmYYInciphNrLrylUtKyW66meAjSPXWchKVzoIYZx69TPnAepVSSkeawoIw== + dependencies: + JSONStream "1.3.2" + debug "^3.2.6" + readable-stream "~1.0.26-4" + split-ca "^1.0.0" + +docker-modem@^3.0.0: + version "3.0.8" + resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-3.0.8.tgz#ef62c8bdff6e8a7d12f0160988c295ea8705e77a" + integrity sha512-f0ReSURdM3pcKPNS30mxOHSbaFLcknGmQjwSfmbcdOw1XWKXVhukM3NJHhr7NpY9BIyyWQb0EBo3KQvvuU5egQ== + dependencies: + debug "^4.1.1" + readable-stream "^3.5.0" + split-ca "^1.0.1" + ssh2 "^1.11.0" + +dockerode@^2.5.8: + version "2.5.8" + resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-2.5.8.tgz#1b661e36e1e4f860e25f56e0deabe9f87f1d0acc" + integrity sha512-+7iOUYBeDTScmOmQqpUYQaE7F4vvIt6+gIZNHWhqAQEI887tiPFB9OvXI/HzQYqfUNvukMK+9myLW63oTJPZpw== + dependencies: + concat-stream "~1.6.2" + docker-modem "^1.0.8" + tar-fs "~1.16.3" + +dockerode@^3.3.4: + version "3.3.5" + resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-3.3.5.tgz#7ae3f40f2bec53ae5e9a741ce655fff459745629" + integrity sha512-/0YNa3ZDNeLr/tSckmD69+Gq+qVNhvKfAHNeZJBnp7EOP6RGKV8ORrJHkUn20So5wU+xxT7+1n5u8PjHbfjbSA== + dependencies: + "@balena/dockerignore" "^1.0.2" + docker-modem "^3.0.0" + tar-fs "~2.0.1" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz" @@ -9591,7 +9807,7 @@ encoding@^0.1.11: dependencies: iconv-lite "^0.6.2" -end-of-stream@^1.0.0, end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== @@ -11118,6 +11334,17 @@ fast-glob@^3.1.1: micromatch "^4.0.2" picomatch "^2.2.1" +fast-glob@^3.2.12: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" @@ -11439,6 +11666,11 @@ follow-redirects@^1.14.9: resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== +follow-redirects@^1.15.0: + version "1.15.3" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" + integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== + fontkit@^1.8.0: version "1.8.1" resolved "https://registry.npmjs.org/fontkit/-/fontkit-1.8.1.tgz" @@ -11579,6 +11811,11 @@ fromentries@^1.2.0: resolved "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz" integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz" @@ -11590,6 +11827,15 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" +fs-extra@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" + integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^4.0.1, fs-extra@^4.0.2, fs-extra@^4.0.3: version "4.0.3" resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz" @@ -11939,7 +12185,7 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0, glob-parent@~5.1.2: +glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -15701,6 +15947,13 @@ minimatch@5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^7.4.3: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0, minimist-options@^4.0.2: version "4.1.0" resolved "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz" @@ -15844,6 +16097,11 @@ mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5: dependencies: minimist "^1.2.5" +mkdirp@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" + integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== + mnemonist@^0.38.0: version "0.38.3" resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz" @@ -16082,6 +16340,11 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.17.0.tgz#c0150a2368a182f033e9aa5195ec76ea41a199cb" integrity sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ== +nan@^2.17.0: + version "2.18.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.18.0.tgz#26a6faae7ffbeb293a39660e88a76b82e30b7554" + integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== + nano-base32@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/nano-base32/-/nano-base32-1.0.1.tgz" @@ -16224,7 +16487,7 @@ node-fetch@2.6.7, node-fetch@^2.5.0, node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.12: +node-fetch@^2.6.0, node-fetch@^2.6.12: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -17207,7 +17470,7 @@ patch-package@^6.2.2: slash "^2.0.0" tmp "^0.0.33" -path-browserify@^1.0.0: +path-browserify@^1.0.0, path-browserify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz" integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== @@ -17652,6 +17915,15 @@ promzard@^0.3.0: dependencies: read "1" +proper-lockfile@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" @@ -17696,6 +17968,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + proxy-middleware@latest: version "0.15.0" resolved "https://registry.yarnpkg.com/proxy-middleware/-/proxy-middleware-0.15.0.tgz#a3fdf1befb730f951965872ac2f6074c61477a56" @@ -17776,6 +18053,14 @@ pull-window@^2.1.4: dependencies: looper "^2.0.0" +pump@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pump@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" @@ -18107,7 +18392,20 @@ readable-stream@^1.0.33: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^3.6.2: +readable-stream@^2.3.0, readable-stream@^2.3.5: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.1.1, readable-stream@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -18116,7 +18414,7 @@ readable-stream@^3.6.2: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.0.15: +readable-stream@~1.0.15, readable-stream@~1.0.26-4: version "1.0.34" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz" integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= @@ -18551,6 +18849,11 @@ retry@^0.10.0: resolved "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" @@ -18796,7 +19099,7 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.5.3, semver@^7.5.4: +semver@^7.5.1, semver@^7.5.3, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== @@ -19456,6 +19759,11 @@ spdx-license-ids@^3.0.0: resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz" integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== +split-ca@^1.0.0, split-ca@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" + integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== + split-on-first@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz" @@ -19508,6 +19816,17 @@ sprintf-js@~1.0.2: resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= +ssh2@^1.11.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.14.0.tgz#8f68440e1b768b66942c9e4e4620b2725b3555bb" + integrity sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA== + dependencies: + asn1 "^0.2.6" + bcrypt-pbkdf "^1.0.2" + optionalDependencies: + cpu-features "~0.0.8" + nan "^2.17.0" + sshpk@^1.7.0: version "1.16.1" resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz" @@ -20111,6 +20430,50 @@ tape@^4.6.3: string.prototype.trim "~1.2.1" through "~2.3.8" +tar-fs@~1.16.3: + version "1.16.3" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.3.tgz#966a628841da2c4010406a82167cbd5e0c72d509" + integrity sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw== + dependencies: + chownr "^1.0.1" + mkdirp "^0.5.1" + pump "^1.0.0" + tar-stream "^1.1.2" + +tar-fs@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" + integrity sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.0.0" + +tar-stream@^1.1.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" + integrity sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A== + dependencies: + bl "^1.0.0" + buffer-alloc "^1.2.0" + end-of-stream "^1.0.0" + fs-constants "^1.0.0" + readable-stream "^2.3.0" + to-buffer "^1.1.1" + xtend "^4.0.0" + +tar-stream@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + tar@^4.0.2, tar@^4.4.10, tar@^4.4.12, tar@^4.4.8: version "4.4.19" resolved "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz" @@ -20341,6 +20704,11 @@ tmpl@1.0.5: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== +to-buffer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" + integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== + to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz" @@ -20518,6 +20886,14 @@ ts-log@^2.2.3: resolved "https://registry.npmjs.org/ts-log/-/ts-log-2.2.3.tgz" integrity sha512-XvB+OdKSJ708Dmf9ore4Uf/q62AYDTzFcAdxc8KNML1mmAWywRFVt/dn1KYJH8Agt5UJNujfM3znU5PxgAzA2w== +ts-morph@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-19.0.0.tgz#43e95fb0156c3fe3c77c814ac26b7d0be2f93169" + integrity sha512-D6qcpiJdn46tUqV45vr5UGM2dnIEuTGNxVhg0sk5NX11orcouwj6i1bMqZIz2mZTZB1Hcgy7C3oEVhAT+f6mbQ== + dependencies: + "@ts-morph/common" "~0.20.0" + code-block-writer "^12.0.0" + ts-node-dev@1.0.0-pre.62: version "1.0.0-pre.62" resolved "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.0.0-pre.62.tgz" @@ -22833,3 +23209,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zksync-web3@^0.14.3: + version "0.14.4" + resolved "https://registry.yarnpkg.com/zksync-web3/-/zksync-web3-0.14.4.tgz#0b70a7e1a9d45cc57c0971736079185746d46b1f" + integrity sha512-kYehMD/S6Uhe1g434UnaMN+sBr9nQm23Ywn0EUP5BfQCsbjcr3ORuS68PosZw8xUTu3pac7G6YMSnNHk+fwzvg==