diff --git a/.dockerignore b/.dockerignore
index b890d7a4367a..603386e55e3b 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -4,9 +4,10 @@
!docker/external-node/entrypoint.sh
!docker/contract-verifier/install-all-solc.sh
!etc/test_config
-!etc/env/dev.env.example
-!etc/env/docker.env
+!etc/env/target/dev.env.example
+!etc/env/target/docker.env
!etc/env/base
+!etc/env/configs
!etc/tokens
!etc/ERC20
!artifacts
diff --git a/.github/workflows/ci-core-reusable.yml b/.github/workflows/ci-core-reusable.yml
index 26bf1d87b4f9..307c773e07d4 100644
--- a/.github/workflows/ci-core-reusable.yml
+++ b/.github/workflows/ci-core-reusable.yml
@@ -59,7 +59,7 @@ jobs:
ci_run zk contract build
- name: Contracts unit tests
- run: ci_run zk test l1-contracts
+ run: ci_run yarn l1-contracts test
- name: Rust unit tests
run: ci_run zk test rust
@@ -99,13 +99,16 @@ jobs:
ci_run git config --global --add safe.directory /usr/src/zksync/contracts
ci_run zk
- ci_run zk init
+ ci_run zk init --local-legacy-bridge-testing
- # `sleep 30` because we need to wait until server added all the tokens
+ # `sleep 60` because we need to wait until server added all the tokens
- name: Run server
run: |
- ci_run zk server --uring --components api,tree,eth,state_keeper,housekeeper &>server.log &
- ci_run sleep 30
+ ci_run zk server --uring --components api,tree,eth,state_keeper,housekeeper,commitment_generator &>server.log &
+ ci_run sleep 60
+
+ - name: Deploy legacy era contracts
+ run: ci_run zk contract setup-legacy-bridge-era
- name: Perform loadtest
run: ci_run zk run loadtest
@@ -119,15 +122,16 @@ jobs:
run: |
ci_run sccache --show-stats
ci_run cat /tmp/sccache_log.txt
+
integration:
- name: Integration (consensus=${{ matrix.consensus }}, deployment_mode=${{ matrix.deployment_mode }})
+ name: Integration (consensus=${{ matrix.consensus }}, base_token=${{ matrix.base_token }})
strategy:
# In matrix jobs, fail-fast is true by default.
# To be consistent with the rest of the workflow we disable it explicitly.
fail-fast: false
matrix:
consensus: [false, true]
- deployment_mode: ["Rollup", "Validium"]
+ base_token: ["Eth", "Custom"]
env:
SERVER_COMPONENTS: "api,tree,eth,state_keeper,housekeeper,basic_witness_input_producer,commitment_generator${{ matrix.consensus && ',consensus' || '' }}"
@@ -186,13 +190,8 @@ jobs:
ci_run git config --global --add safe.directory /usr/src/zksync/contracts/system-contracts
ci_run git config --global --add safe.directory /usr/src/zksync/contracts
ci_run zk
- if [[ "${{ matrix.deployment_mode }}" == "Rollup" ]]; then
- ci_run zk init
- elif [[ "${{ matrix.deployment_mode }}" == "Validium" ]]; then
- ci_run zk env dev_validium_docker
- ci_run zk config compile dev_validium_docker
- ci_run zk init --validium-mode
- fi
+ ci_run zk config compile
+ ci_run zk init ${{ matrix.base_token == 'Custom' && '--base-token-name BAT' || ''}}
# `sleep 5` because we need to wait until server started properly
- name: Run server
@@ -213,11 +212,7 @@ jobs:
# An empty topmost environment helps avoid a mess when redefining env vars shared between both envs
# (e.g., DATABASE_URL).
run: |
- if [[ "${{ matrix.deployment_mode }}" == "Validium" ]]; then
- ci_run zk config compile ext-node-validium
- ci_run zk config compile ext-node-validium-docker
- fi
- ENABLE_CONSENSUS=${{ matrix.consensus }} DEPLOYMENT_MODE=${{ matrix.deployment_mode }} PASSED_ENV_VARS="ENABLE_CONSENSUS,DEPLOYMENT_MODE" ci_run yarn snapshot-recovery-test snapshot-recovery-test
+ ENABLE_CONSENSUS=${{ matrix.consensus }} DEPLOYMENT_MODE=Rollup PASSED_ENV_VARS="ENABLE_CONSENSUS,DEPLOYMENT_MODE" ci_run yarn snapshot-recovery-test snapshot-recovery-test
- name: Fee projection tests
run: ci_run zk test i fees
@@ -226,7 +221,8 @@ jobs:
run: |
ci_run pkill zksync_server || true
ci_run sleep 2
- ENABLE_CONSENSUS=${{ matrix.consensus }} DEPLOYMENT_MODE=${{ matrix.deployment_mode }} PASSED_ENV_VARS="ENABLE_CONSENSUS,DEPLOYMENT_MODE" ci_run zk test i revert
+ ENABLE_CONSENSUS=${{ matrix.consensus }} DEPLOYMENT_MODE=Rollup PASSED_ENV_VARS="ENABLE_CONSENSUS,DEPLOYMENT_MODE" ci_run zk test i revert
+
# This test should be the last one as soon as it
# finished bootloader will be different
@@ -266,12 +262,12 @@ jobs:
ci_run cat /tmp/sccache_log.txt
external-node:
- name: External node (consensus=${{ matrix.consensus }}, deployment_mode=${{ matrix.deployment_mode }})
+ name: External node (consensus=${{ matrix.consensus }}, base_token=${{ matrix.base_token }})
strategy:
fail-fast: false
matrix:
consensus: [false, true]
- deployment_mode: ["Rollup", "Validium"]
+ base_token: ["Eth", "Custom"]
runs-on: [matterlabs-ci-runner]
env:
@@ -305,13 +301,8 @@ jobs:
ci_run git config --global --add safe.directory /usr/src/zksync/contracts/system-contracts
ci_run git config --global --add safe.directory /usr/src/zksync/contracts
ci_run zk
- if [[ "${{ matrix.deployment_mode }}" == "Rollup" ]]; then
- ci_run zk init
- elif [[ "${{ matrix.deployment_mode }}" == "Validium" ]]; then
- ci_run zk env dev_validium_docker
- ci_run zk config compile dev_validium_docker
- ci_run zk init --validium-mode
- fi
+ ci_run zk config compile
+ ci_run zk init ${{ matrix.base_token == 'Custom' && '--base-token-name BAT' || ''}}
# `sleep 30` because we need to wait until server started properly
- name: Run server
@@ -321,11 +312,7 @@ jobs:
- name: Run external node
run: |
- if [[ "${{ matrix.deployment_mode }}" == "Rollup" ]]; then
- ci_run zk env ext-node-docker
- elif [[ "${{ matrix.deployment_mode }}" == "Validium" ]]; then
- ci_run zk env ext-node-validium-docker
- fi
+ ci_run zk env ext-node-docker
ci_run zk db setup
ci_run zk external-node $EXT_NODE_FLAGS &>>ext-node.log &
ci_run sleep 30
@@ -335,24 +322,15 @@ jobs:
- name: Run revert test
run: |
- ENABLE_CONSENSUS=${{ matrix.consensus }} DEPLOYMENT_MODE=${{ matrix.deployment_mode }} PASSED_ENV_VARS="ENABLE_CONSENSUS,DEPLOYMENT_MODE" ci_run zk test i revert-en
+ ENABLE_CONSENSUS=${{ matrix.consensus }} DEPLOYMENT_MODE=Rollup PASSED_ENV_VARS="ENABLE_CONSENSUS,DEPLOYMENT_MODE" ci_run zk test i revert-en
# test terminates the nodes, so we restart them.
- if [[ "${{ matrix.deployment_mode }}" == "Rollup" ]]; then
- ZKSYNC_ENV=docker ci_run zk server --components=$SERVER_COMPONENTS &>>server.log &
- ZKSYNC_ENV=ext-node-docker ci_run zk external-node $EXT_NODE_FLAGS &>>ext-node.log &
- elif [[ "${{ matrix.deployment_mode }}" == "Validium" ]]; then
- ZKSYNC_ENV=dev_validium_docker ci_run zk server --components=$SERVER_COMPONENTS &>>server.log &
- ZKSYNC_ENV=ext-node-validium-docker ci_run zk external-node $EXT_NODE_FLAGS &>>ext-node.log &
- fi
+ ZKSYNC_ENV=docker ci_run zk server --components=$SERVER_COMPONENTS &>>server.log &
+ ZKSYNC_ENV=ext-node-docker ci_run zk external-node $EXT_NODE_FLAGS &>>ext-node.log &
ci_run sleep 30
- name: Run upgrade test
run: |
- if [[ "${{ matrix.deployment_mode }}" == "Rollup" ]]; then
- ci_run zk env docker
- elif [[ "${{ matrix.deployment_mode }}" == "Validium" ]]; then
- ci_run zk env dev_validium_docker
- fi
+ ci_run zk env docker
CHECK_EN_URL="http://0.0.0.0:3060" ci_run zk test i upgrade
- name: Show server.log logs
diff --git a/.gitignore b/.gitignore
index 9e7bfcc294e1..9e1b4c3b8fd9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,7 +31,16 @@ Cargo.lock
!/infrastructure/zksync-crypto/Cargo.lock
!/prover/Cargo.lock
-/etc/env/*
+/etc/env/target/*
+/etc/env/.current
+/etc/env/configs
+!/etc/env/configs/dev.toml
+!/etc/env/configs/dev_validium.toml
+!/etc/env/configs/dev_validium_docker.toml
+!/etc/env/configs/ext-node.toml
+!/etc/env/configs/ext-node-docker.toml
+/etc/env/l1-inits
+/etc/env/l2-inits
!/etc/env/base
!/etc/env/file_based
!/etc/env/dev.toml
diff --git a/Cargo.lock b/Cargo.lock
index 5b191e0e6840..54bb4af27a26 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2621,9 +2621,9 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.13.1"
+version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33ff8ae62cd3a9102e5637afc8452c55acf3844001bd5374e0b0bd7b6616c038"
+checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
dependencies = [
"ahash 0.8.7",
]
@@ -3662,13 +3662,13 @@ dependencies = [
[[package]]
name = "metrics-util"
-version = "0.15.1"
+version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4de2ed6e491ed114b40b732e4d1659a9d53992ebd87490c44a6ffe23739d973e"
+checksum = "111cb375987443c3de8d503580b536f77dc8416d32db62d9456db5d93bd7ac47"
dependencies = [
"crossbeam-epoch 0.9.15",
"crossbeam-utils 0.8.16",
- "hashbrown 0.13.1",
+ "hashbrown 0.13.2",
"metrics",
"num_cpus",
"quanta 0.11.1",
@@ -8588,6 +8588,7 @@ dependencies = [
"serde",
"zksync_basic_types",
"zksync_config",
+ "zksync_system_constants",
]
[[package]]
diff --git a/checks-config/era.dic b/checks-config/era.dic
index 3b6bc0acd23a..66ecf0a86809 100644
--- a/checks-config/era.dic
+++ b/checks-config/era.dic
@@ -84,6 +84,7 @@ L2s
L1
json
l1
+l2
G1
G2
SystemConfig
@@ -679,6 +680,7 @@ StateKeeper
enum_index
virtual_block_start_batch
virtual_block_finish_l2_block
+base_token_address
maxFeePerGas
maxPriorityFeePerGas
structs
@@ -802,6 +804,7 @@ threadpool
IntrinsicGas
InsufficientFundsForTransfer
ChainId
+hyperchains
eth_getLogs
façade
virtual_blocks_per_miniblock
@@ -939,4 +942,5 @@ demuxer
superset
80M
780kb
+hyperchain
storages
diff --git a/contracts b/contracts
index a1a05513c110..4d6def2f8f8a 160000
--- a/contracts
+++ b/contracts
@@ -1 +1 @@
-Subproject commit a1a05513c110586f7a1d8b5fa46115cc7307587a
+Subproject commit 4d6def2f8f8a3fdeb2a4a521ba52108e825b8ce7
diff --git a/core/bin/external_node/README.md b/core/bin/external_node/README.md
index e6a2e95ab8c5..d6fa78dbd3d3 100644
--- a/core/bin/external_node/README.md
+++ b/core/bin/external_node/README.md
@@ -19,9 +19,9 @@ The easiest way to see everything that is used is to compile the `ext-node` conf
Note: not all the config values from the main node are actually used, so this is temporary, and in the future external
node would require a much smaller set of config variables.
-To change the configuration, edit the `etc/env/ext-node.toml`, add the overrides from the `base` config if you need any.
-Remove `etc/env/ext-node.env`, if it exists. On the next launch of the external node, new config would be compiled and
-will be written to the `etc/env/ext-node.env` file.
+To change the configuration, edit the `etc/env/chains/ext-node.toml`, add the overrides from the `base` config if you
+need any. Remove `etc/env/chains/ext-node.env`, if it exists. On the next launch of the external node, new config would
+be compiled and will be written to the `etc/env/chains/ext-node.env` file.
### Running
diff --git a/core/bin/external_node/src/config/mod.rs b/core/bin/external_node/src/config/mod.rs
index d046a31ff4d3..0e3b3d9c383d 100644
--- a/core/bin/external_node/src/config/mod.rs
+++ b/core/bin/external_node/src/config/mod.rs
@@ -28,14 +28,13 @@ use zksync_core::{
use zksync_dal::{ConnectionPool, Core};
use zksync_protobuf_config::proto;
use zksync_snapshots_applier::SnapshotsApplierConfig;
-use zksync_types::{api::BridgeAddresses, fee_model::FeeParams};
+use zksync_types::{api::BridgeAddresses, fee_model::FeeParams, ETHEREUM_ADDRESS};
use zksync_web3_decl::{
client::L2Client,
error::ClientRpcContext,
- jsonrpsee::http_client::HttpClientBuilder,
+ jsonrpsee::{core::ClientError, http_client::HttpClientBuilder, types::error::ErrorCode},
namespaces::{EnNamespaceClient, EthNamespaceClient, ZksNamespaceClient},
};
-
pub(crate) mod observability;
#[cfg(test)]
mod tests;
@@ -49,13 +48,19 @@ pub(crate) struct RemoteENConfig {
pub state_transition_proxy_addr: Option
,
pub transparent_proxy_admin_addr: Option,
pub diamond_proxy_addr: Address,
- pub l1_erc20_bridge_proxy_addr: Address,
- pub l2_erc20_bridge_addr: Address,
- pub l1_weth_bridge_proxy_addr: Option,
+ // While on L1 shared bridge and legacy bridge are different contracts with different addresses,
+ // the `l2_erc20_bridge_addr` and `l2_shared_bridge_addr` are basically the same contract, but with
+ // a different name, with names adapted only for consistency.
+ pub l1_shared_bridge_proxy_addr: Option,
+ pub l2_shared_bridge_addr: Option,
+ pub l1_erc20_bridge_proxy_addr: Option,
+ pub l2_erc20_bridge_addr: Option,
+ pub l1_weth_bridge_addr: Option,
pub l2_weth_bridge_addr: Option,
pub l2_testnet_paymaster_addr: Option,
pub l2_chain_id: L2ChainId,
pub l1_chain_id: L1ChainId,
+ pub base_token_addr: Address,
pub max_pubdata_per_batch: u64,
pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode,
pub dummy_verifier: bool,
@@ -77,6 +82,22 @@ impl RemoteENConfig {
.get_main_contract()
.rpc_context("get_main_contract")
.await?;
+ let base_token_addr = match client.get_base_token_l1_address().await {
+ Err(ClientError::Call(err))
+ if [
+ ErrorCode::MethodNotFound.code(),
+ // This what `Web3Error::NotImplemented` gets
+ // `casted` into in the `api` server.
+ ErrorCode::InternalError.code(),
+ ]
+ .contains(&(err.code())) =>
+ {
+ // This is the fallback case for when the EN tries to interact
+ // with a node that does not implement the `zks_baseTokenL1Address` endpoint.
+ ETHEREUM_ADDRESS
+ }
+ response => response.context("Failed to fetch base token address")?,
+ };
let l2_chain_id = client.chain_id().rpc_context("chain_id").await?;
let l2_chain_id = L2ChainId::try_from(l2_chain_id.as_u64())
.map_err(|err| anyhow::anyhow!("invalid chain ID supplied by main node: {err}"))?;
@@ -96,6 +117,23 @@ impl RemoteENConfig {
FeeParams::V2(params) => params.config.max_pubdata_per_batch,
};
+ // These two config variables should always have the same value.
+ // TODO(EVM-578): double check and potentially forbid both of them being `None`.
+ let l2_erc20_default_bridge = bridges
+ .l2_erc20_default_bridge
+ .or(bridges.l2_shared_default_bridge);
+ let l2_erc20_shared_bridge = bridges
+ .l2_shared_default_bridge
+ .or(bridges.l2_erc20_default_bridge);
+
+ if let (Some(legacy_addr), Some(shared_addr)) =
+ (l2_erc20_default_bridge, l2_erc20_shared_bridge)
+ {
+ if legacy_addr != shared_addr {
+ panic!("L2 erc20 bridge address and L2 shared bridge address are different.");
+ }
+ }
+
Ok(Self {
bridgehub_proxy_addr: shared_bridge.as_ref().map(|a| a.bridgehub_proxy_addr),
state_transition_proxy_addr: shared_bridge
@@ -107,11 +145,14 @@ impl RemoteENConfig {
diamond_proxy_addr,
l2_testnet_paymaster_addr,
l1_erc20_bridge_proxy_addr: bridges.l1_erc20_default_bridge,
- l2_erc20_bridge_addr: bridges.l2_erc20_default_bridge,
- l1_weth_bridge_proxy_addr: bridges.l1_weth_bridge,
+ l2_erc20_bridge_addr: l2_erc20_default_bridge,
+ l1_shared_bridge_proxy_addr: bridges.l1_shared_default_bridge,
+ l2_shared_bridge_addr: l2_erc20_shared_bridge,
+ l1_weth_bridge_addr: bridges.l1_weth_bridge,
l2_weth_bridge_addr: bridges.l2_weth_bridge,
l2_chain_id,
l1_chain_id,
+ base_token_addr,
max_pubdata_per_batch,
l1_batch_commit_data_generator_mode: genesis
.as_ref()
@@ -131,13 +172,16 @@ impl RemoteENConfig {
state_transition_proxy_addr: None,
transparent_proxy_admin_addr: None,
diamond_proxy_addr: Address::repeat_byte(1),
- l1_erc20_bridge_proxy_addr: Address::repeat_byte(2),
- l2_erc20_bridge_addr: Address::repeat_byte(3),
- l1_weth_bridge_proxy_addr: None,
+ l1_erc20_bridge_proxy_addr: Some(Address::repeat_byte(2)),
+ l2_erc20_bridge_addr: Some(Address::repeat_byte(3)),
l2_weth_bridge_addr: None,
l2_testnet_paymaster_addr: None,
l2_chain_id: L2ChainId::default(),
l1_chain_id: L1ChainId(9),
+ base_token_addr: Address::repeat_byte(4),
+ l1_shared_bridge_proxy_addr: Some(Address::repeat_byte(5)),
+ l1_weth_bridge_addr: None,
+ l2_shared_bridge_addr: Some(Address::repeat_byte(6)),
max_pubdata_per_batch: 1 << 17,
l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode::Rollup,
dummy_verifier: true,
@@ -803,7 +847,9 @@ impl From for InternalApiConfig {
bridge_addresses: BridgeAddresses {
l1_erc20_default_bridge: config.remote.l1_erc20_bridge_proxy_addr,
l2_erc20_default_bridge: config.remote.l2_erc20_bridge_addr,
- l1_weth_bridge: config.remote.l1_weth_bridge_proxy_addr,
+ l1_shared_default_bridge: config.remote.l1_shared_bridge_proxy_addr,
+ l2_shared_default_bridge: config.remote.l2_shared_bridge_addr,
+ l1_weth_bridge: config.remote.l1_weth_bridge_addr,
l2_weth_bridge: config.remote.l2_weth_bridge_addr,
},
bridgehub_proxy_addr: config.remote.bridgehub_proxy_addr,
@@ -813,6 +859,7 @@ impl From for InternalApiConfig {
l2_testnet_paymaster_addr: config.remote.l2_testnet_paymaster_addr,
req_entities_limit: config.optional.req_entities_limit,
fee_history_limit: config.optional.fee_history_limit,
+ base_token_address: Some(config.remote.base_token_addr),
filters_disabled: config.optional.filters_disabled,
dummy_verifier: config.remote.dummy_verifier,
l1_batch_commit_data_generator_mode: config.remote.l1_batch_commit_data_generator_mode,
diff --git a/core/bin/external_node/src/main.rs b/core/bin/external_node/src/main.rs
index 80da90c89c0f..97ce975969ad 100644
--- a/core/bin/external_node/src/main.rs
+++ b/core/bin/external_node/src/main.rs
@@ -206,7 +206,10 @@ async fn run_core(
let (persistence, miniblock_sealer) = StateKeeperPersistence::new(
connection_pool.clone(),
- config.remote.l2_erc20_bridge_addr,
+ config
+ .remote
+ .l2_shared_bridge_addr
+ .expect("L2 shared bridge address is not set"),
config.optional.miniblock_seal_queue_capacity,
);
task_handles.push(tokio::spawn(miniblock_sealer.run()));
diff --git a/core/bin/genesis_generator/src/main.rs b/core/bin/genesis_generator/src/main.rs
index f3cedd90c48e..555c27775717 100644
--- a/core/bin/genesis_generator/src/main.rs
+++ b/core/bin/genesis_generator/src/main.rs
@@ -1,6 +1,6 @@
/// Each protocol upgrade required to update genesis config values.
/// This tool generates the new correct genesis file that could be used for the new chain
-/// Please note, this tool update only yaml file, if you are still use env based configuration,
+/// Please note, this tool update only yaml file, if you still use env based configuration,
/// update env values correspondingly
use std::fs;
@@ -22,10 +22,10 @@ use zksync_protobuf::{
use zksync_protobuf_config::proto::genesis::Genesis;
use zksync_types::ProtocolVersionId;
-const DEFAULT_GENESIS_FILE_PATH: &str = "./etc/env/file_based//genesis.yaml";
+const DEFAULT_GENESIS_FILE_PATH: &str = "./etc/env/file_based/genesis.yaml";
#[derive(Debug, Parser)]
-#[command(author = "Matter Labs", version, about = "zkSync operator node", long_about = None)]
+#[command(author = "Matter Labs", version, about = "Genesis config generator", long_about = None)]
struct Cli {
#[arg(long)]
config_path: Option,
@@ -74,6 +74,7 @@ async fn generate_new_config(
.build()
.await
.context("failed to build connection_pool")?;
+
let mut storage = pool.connection().await.context("connection()")?;
let mut transaction = storage.start_transaction().await?;
@@ -92,16 +93,19 @@ async fn generate_new_config(
..genesis_config
};
+ // This tool doesn't really insert the batch. It doesn't commit the transaction,
+ // so the database is clean after using the tool
let params = GenesisParams::load_genesis_params(updated_genesis.clone())?;
let batch_params = insert_genesis_batch(&mut transaction, ¶ms).await?;
updated_genesis.genesis_commitment = Some(batch_params.commitment);
updated_genesis.genesis_root_hash = Some(batch_params.root_hash);
updated_genesis.rollup_last_leaf_index = Some(batch_params.rollup_last_leaf_index);
+
Ok(updated_genesis)
}
-/// Encodes a generated proto message to json for arbitrary Proto.
+/// Encodes a generated proto message to json for arbitrary `ProtoFmt`.
pub(crate) fn encode_yaml(x: &T) -> anyhow::Result {
let mut serializer = Serializer::new(vec![]);
let opts = prost_reflect::SerializeOptions::new()
diff --git a/core/bin/system-constants-generator/src/utils.rs b/core/bin/system-constants-generator/src/utils.rs
index d1057d8f7f07..eb2795e0d23d 100644
--- a/core/bin/system-constants-generator/src/utils.rs
+++ b/core/bin/system-constants-generator/src/utils.rs
@@ -228,7 +228,7 @@ pub(super) fn execute_internal_transfer_test() -> u32 {
chain_id: L2ChainId::default(),
};
- let eth_token_sys_contract = load_sys_contract("L2EthToken");
+ let eth_token_sys_contract = load_sys_contract("L2BaseToken");
let transfer_from_to = ð_token_sys_contract
.functions
.get("transferFromTo")
diff --git a/core/bin/zksync_server/src/main.rs b/core/bin/zksync_server/src/main.rs
index 6ba9772d696c..eb539ef7ff7d 100644
--- a/core/bin/zksync_server/src/main.rs
+++ b/core/bin/zksync_server/src/main.rs
@@ -38,9 +38,6 @@ struct Cli {
/// Generate genesis block for the first contract deployment using temporary DB.
#[arg(long)]
genesis: bool,
- /// Set chain id (temporary will be moved to genesis config)
- #[arg(long)]
- set_chain_id: bool,
/// Rebuild tree.
#[arg(long)]
rebuild_tree: bool,
@@ -180,15 +177,9 @@ async fn main() -> anyhow::Result<()> {
genesis_init(genesis.clone(), &postgres_config)
.await
.context("genesis_init")?;
- if opt.genesis {
- return Ok(());
- }
- }
-
- if opt.set_chain_id {
- let eth_client = configs.eth.as_ref().context("eth config")?;
if let Some(shared_bridge) = &genesis.shared_bridge {
+ let eth_client = configs.eth.as_ref().context("eth config")?;
genesis::save_set_chain_id_tx(
ð_client.web3_url,
contracts_config.diamond_proxy_addr,
@@ -198,6 +189,10 @@ async fn main() -> anyhow::Result<()> {
.await
.context("Failed to save SetChainId upgrade transaction")?;
}
+
+ if opt.genesis {
+ return Ok(());
+ }
}
let components = if opt.rebuild_tree {
diff --git a/core/lib/basic_types/src/protocol_version.rs b/core/lib/basic_types/src/protocol_version.rs
index fedec53aebcc..8d407b7d867e 100644
--- a/core/lib/basic_types/src/protocol_version.rs
+++ b/core/lib/basic_types/src/protocol_version.rs
@@ -100,8 +100,7 @@ impl ProtocolVersionId {
}
pub fn is_pre_shared_bridge(&self) -> bool {
- // TODO: review this when we actually deploy shared bridge
- true
+ self <= &Self::Version22
}
pub fn is_1_4_0(&self) -> bool {
diff --git a/core/lib/config/src/configs/contracts.rs b/core/lib/config/src/configs/contracts.rs
index e36155b3f56e..abdbeddf63a2 100644
--- a/core/lib/config/src/configs/contracts.rs
+++ b/core/lib/config/src/configs/contracts.rs
@@ -11,12 +11,15 @@ pub struct ContractsConfig {
pub default_upgrade_addr: Address,
pub diamond_proxy_addr: Address,
pub validator_timelock_addr: Address,
- pub l1_erc20_bridge_proxy_addr: Address,
- pub l2_erc20_bridge_addr: Address,
+ pub l1_shared_bridge_proxy_addr: Option,
+ pub l2_shared_bridge_addr: Option,
+ pub l1_erc20_bridge_proxy_addr: Option,
+ pub l2_erc20_bridge_addr: Option,
pub l1_weth_bridge_proxy_addr: Option,
pub l2_weth_bridge_addr: Option,
pub l2_testnet_paymaster_addr: Option,
pub l1_multicall3_addr: Address,
+ pub base_token_addr: Option,
}
impl ContractsConfig {
@@ -26,13 +29,16 @@ impl ContractsConfig {
default_upgrade_addr: Address::repeat_byte(0x06),
diamond_proxy_addr: Address::repeat_byte(0x09),
validator_timelock_addr: Address::repeat_byte(0x0a),
- l1_erc20_bridge_proxy_addr: Address::repeat_byte(0x0b),
- l2_erc20_bridge_addr: Address::repeat_byte(0x0d),
- l1_weth_bridge_proxy_addr: Some(Address::repeat_byte(0x0e)),
- l2_weth_bridge_addr: Some(Address::repeat_byte(0x0f)),
+ l1_erc20_bridge_proxy_addr: Some(Address::repeat_byte(0x0b)),
+ l2_erc20_bridge_addr: Some(Address::repeat_byte(0x0c)),
+ l1_shared_bridge_proxy_addr: Some(Address::repeat_byte(0x0e)),
+ l2_shared_bridge_addr: Some(Address::repeat_byte(0x0f)),
+ l1_weth_bridge_proxy_addr: Some(Address::repeat_byte(0x0b)),
+ l2_weth_bridge_addr: Some(Address::repeat_byte(0x0c)),
l2_testnet_paymaster_addr: Some(Address::repeat_byte(0x11)),
l1_multicall3_addr: Address::repeat_byte(0x12),
governance_addr: Address::repeat_byte(0x13),
+ base_token_addr: Some(Address::repeat_byte(0x14)),
}
}
}
diff --git a/core/lib/config/src/configs/eth_sender.rs b/core/lib/config/src/configs/eth_sender.rs
index 818cd7f51cf8..078810285245 100644
--- a/core/lib/config/src/configs/eth_sender.rs
+++ b/core/lib/config/src/configs/eth_sender.rs
@@ -22,7 +22,7 @@ impl EthConfig {
pub fn for_tests() -> Self {
Self {
sender: Some(SenderConfig {
- aggregated_proof_sizes: vec![1, 4],
+ aggregated_proof_sizes: vec![1],
wait_confirmations: Some(1),
tx_poll_period: 1,
aggregate_tx_poll_period: 1,
diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs
index 2d87524b2454..15d22be73e78 100644
--- a/core/lib/config/src/testonly.rs
+++ b/core/lib/config/src/testonly.rs
@@ -248,10 +248,13 @@ impl Distribution for EncodeDist {
validator_timelock_addr: g.gen(),
l1_erc20_bridge_proxy_addr: g.gen(),
l2_erc20_bridge_addr: g.gen(),
+ l1_shared_bridge_proxy_addr: g.gen(),
+ l2_shared_bridge_addr: g.gen(),
l1_weth_bridge_proxy_addr: g.gen(),
l2_weth_bridge_addr: g.gen(),
l2_testnet_paymaster_addr: g.gen(),
l1_multicall3_addr: g.gen(),
+ base_token_addr: g.gen(),
}
}
}
diff --git a/core/lib/constants/src/contracts.rs b/core/lib/constants/src/contracts.rs
index 8a33c1bfc70e..d2c9f99bc90b 100644
--- a/core/lib/constants/src/contracts.rs
+++ b/core/lib/constants/src/contracts.rs
@@ -53,7 +53,7 @@ pub const KECCAK256_PRECOMPILE_ADDRESS: Address = H160([
0x00, 0x00, 0x80, 0x10,
]);
-pub const L2_ETH_TOKEN_ADDRESS: Address = H160([
+pub const L2_BASE_TOKEN_ADDRESS: Address = H160([
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x80, 0x0a,
]);
@@ -128,5 +128,16 @@ pub const ERC20_TRANSFER_TOPIC: H256 = H256([
// TODO (SMA-240): Research whether using zero address is ok
pub const MINT_AND_BURN_ADDRESS: H160 = H160::zero();
-// The `storage_log.value` database value for a contract that was deployed in a failed transaction.
+/// The `storage_log.value` database value for a contract that was deployed in a failed transaction.
pub const FAILED_CONTRACT_DEPLOYMENT_BYTECODE_HASH: H256 = H256::zero();
+
+/// The number that is used in the shared bridge to present ETH token. Note that it is not an address of any token,
+/// but rather a representation of the ETH token, since it does not have any formal address.
+pub const SHARED_BRIDGE_ETHER_TOKEN_ADDRESS: Address = H160([
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x01,
+]);
+
+/// Default `ERA_CHAIN_ID`. All hyperchains start with this chain id and later on during their registration
+/// an "initial upgrade" transaction overrides it with the correct value.
+pub const DEFAULT_ERA_CHAIN_ID: u32 = 270;
diff --git a/core/lib/contracts/src/lib.rs b/core/lib/contracts/src/lib.rs
index 20ec434c0bf4..357e109d9626 100644
--- a/core/lib/contracts/src/lib.rs
+++ b/core/lib/contracts/src/lib.rs
@@ -25,16 +25,24 @@ pub enum ContractLanguage {
Yul,
}
+const BRIDGEHUB_CONTRACT_FILE: &str =
+ "contracts/l1-contracts/artifacts/contracts/bridgehub/IBridgehub.sol/IBridgehub.json";
+const STATE_TRANSITION_CONTRACT_FILE: &str =
+ "contracts/l1-contracts/artifacts/contracts/state-transition/IStateTransitionManager.sol/IStateTransitionManager.json";
+const ZKSYNC_HYPERCHAIN_CONTRACT_FILE: &str =
+ "contracts/l1-contracts/artifacts/contracts/state-transition/chain-interfaces/IZkSyncHyperchain.sol/IZkSyncHyperchain.json";
+const DIAMOND_INIT_CONTRACT_FILE: &str =
+ "contracts/l1-contracts/artifacts/contracts/state-transition/chain-interfaces/IDiamondInit.sol/IDiamondInit.json";
const GOVERNANCE_CONTRACT_FILE: &str =
- "contracts/l1-contracts/artifacts/cache/solpp-generated-contracts/governance/IGovernance.sol/IGovernance.json";
-const ZKSYNC_CONTRACT_FILE: &str =
- "contracts/l1-contracts/artifacts/cache/solpp-generated-contracts/zksync/interfaces/IZkSync.sol/IZkSync.json";
+ "contracts/l1-contracts/artifacts/contracts/governance/IGovernance.sol/IGovernance.json";
const MULTICALL3_CONTRACT_FILE: &str =
- "contracts/l1-contracts/artifacts/cache/solpp-generated-contracts/dev-contracts/Multicall3.sol/Multicall3.json";
+ "contracts/l1-contracts/artifacts/contracts/dev-contracts/Multicall3.sol/Multicall3.json";
const VERIFIER_CONTRACT_FILE: &str =
- "contracts/l1-contracts/artifacts/cache/solpp-generated-contracts/zksync/Verifier.sol/Verifier.json";
-const L2_BRIDGE_CONTRACT_FILE: &str =
- "contracts/l2-contracts/artifacts-zk/contracts-preprocessed/bridge/interfaces/IL2Bridge.sol/IL2Bridge.json";
+ "contracts/l1-contracts/artifacts/contracts/state-transition/Verifier.sol/Verifier.json";
+const _IERC20_CONTRACT_FILE: &str =
+ "contracts/l1-contracts/artifacts/contracts/common/interfaces/IERC20.sol/IERC20.json";
+const _FAIL_ON_RECEIVE_CONTRACT_FILE: &str =
+ "contracts/l1-contracts/artifacts/contracts/zksync/dev-contracts/FailOnReceive.sol/FailOnReceive.json";
const LOADNEXT_CONTRACT_FILE: &str =
"etc/contracts-test-data/artifacts-zk/contracts/loadnext/loadnext_contract.sol/LoadnextContract.json";
const LOADNEXT_SIMPLE_CONTRACT_FILE: &str =
@@ -71,20 +79,35 @@ pub fn load_sys_contract(contract_name: &str) -> Contract {
))
}
+pub fn read_contract_abi(path: impl AsRef) -> String {
+ read_file_to_json_value(path)["abi"]
+ .as_str()
+ .expect("Failed to parse abi")
+ .to_string()
+}
+
+pub fn bridgehub_contract() -> Contract {
+ load_contract(BRIDGEHUB_CONTRACT_FILE)
+}
+
pub fn governance_contract() -> Contract {
load_contract_if_present(GOVERNANCE_CONTRACT_FILE).expect("Governance contract not found")
}
-pub fn zksync_contract() -> Contract {
- load_contract(ZKSYNC_CONTRACT_FILE)
+pub fn state_transition_manager_contract() -> Contract {
+ load_contract(STATE_TRANSITION_CONTRACT_FILE)
}
-pub fn multicall_contract() -> Contract {
- load_contract(MULTICALL3_CONTRACT_FILE)
+pub fn hyperchain_contract() -> Contract {
+ load_contract(ZKSYNC_HYPERCHAIN_CONTRACT_FILE)
}
-pub fn l2_bridge_contract() -> Contract {
- load_contract(L2_BRIDGE_CONTRACT_FILE)
+pub fn diamond_init_contract() -> Contract {
+ load_contract(DIAMOND_INIT_CONTRACT_FILE)
+}
+
+pub fn multicall_contract() -> Contract {
+ load_contract(MULTICALL3_CONTRACT_FILE)
}
pub fn verifier_contract() -> Contract {
@@ -126,6 +149,14 @@ pub fn l1_messenger_contract() -> Contract {
load_sys_contract("L1Messenger")
}
+pub fn eth_contract() -> Contract {
+ load_sys_contract("L2BaseToken")
+}
+
+pub fn known_codes_contract() -> Contract {
+ load_sys_contract("KnownCodesStorage")
+}
+
/// Reads bytecode from the path RELATIVE to the ZKSYNC_HOME environment variable.
pub fn read_bytecode(relative_path: impl AsRef) -> Vec {
let zksync_home = std::env::var("ZKSYNC_HOME").unwrap_or_else(|_| ".".into());
diff --git a/core/lib/env_config/Cargo.toml b/core/lib/env_config/Cargo.toml
index 0de13c90b5a4..e63b33ecae2d 100644
--- a/core/lib/env_config/Cargo.toml
+++ b/core/lib/env_config/Cargo.toml
@@ -10,6 +10,7 @@ keywords.workspace = true
categories.workspace = true
[dependencies]
+zksync_system_constants.workspace = true
zksync_basic_types.workspace = true
zksync_config.workspace = true
diff --git a/core/lib/env_config/src/contracts.rs b/core/lib/env_config/src/contracts.rs
index 4f7d406c4419..699726239f35 100644
--- a/core/lib/env_config/src/contracts.rs
+++ b/core/lib/env_config/src/contracts.rs
@@ -4,12 +4,35 @@ use crate::{envy_load, FromEnv};
impl FromEnv for ContractsConfig {
fn from_env() -> anyhow::Result {
- envy_load("contracts", "CONTRACTS_")
+ let mut contracts: ContractsConfig = envy_load("contracts", "CONTRACTS_")?;
+ // Note: we are renaming the bridge, the address remains the same
+ // These two config variables should always have the same value.
+ // TODO(EVM-578): double check and potentially forbid both of them being `None`.
+
+ contracts.l2_erc20_bridge_addr = contracts
+ .l2_erc20_bridge_addr
+ .or(contracts.l2_shared_bridge_addr);
+ contracts.l2_shared_bridge_addr = contracts
+ .l2_shared_bridge_addr
+ .or(contracts.l2_erc20_bridge_addr);
+
+ if let (Some(legacy_addr), Some(shared_addr)) = (
+ contracts.l2_erc20_bridge_addr,
+ contracts.l2_shared_bridge_addr,
+ ) {
+ if legacy_addr != shared_addr {
+ panic!("L2 erc20 bridge address and L2 shared bridge address are different.");
+ }
+ }
+
+ Ok(contracts)
}
}
#[cfg(test)]
mod tests {
+ use zksync_system_constants::SHARED_BRIDGE_ETHER_TOKEN_ADDRESS;
+
use super::*;
use crate::test_utils::{addr, EnvMutex};
@@ -22,12 +45,15 @@ mod tests {
default_upgrade_addr: addr("0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9"),
diamond_proxy_addr: addr("F00B988a98Ca742e7958DeF9F7823b5908715f4a"),
validator_timelock_addr: addr("F00B988a98Ca742e7958DeF9F7823b5908715f4a"),
- l1_erc20_bridge_proxy_addr: addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888"),
- l2_erc20_bridge_addr: addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888"),
+ l1_erc20_bridge_proxy_addr: Some(addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888")),
+ l2_erc20_bridge_addr: Some(addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888")),
l1_weth_bridge_proxy_addr: Some(addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888")),
l2_weth_bridge_addr: Some(addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888")),
+ l1_shared_bridge_proxy_addr: Some(addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888")),
+ l2_shared_bridge_addr: Some(addr("8656770FA78c830456B00B4fFCeE6b1De0e1b888")),
l2_testnet_paymaster_addr: Some(addr("FC073319977e314F251EAE6ae6bE76B0B3BAeeCF")),
l1_multicall3_addr: addr("0xcA11bde05977b3631167028862bE2a173976CA11"),
+ base_token_addr: Some(SHARED_BRIDGE_ETHER_TOKEN_ADDRESS),
}
}
@@ -36,42 +62,19 @@ mod tests {
let mut lock = MUTEX.lock();
let config = r#"
CONTRACTS_GOVERNANCE_ADDR="0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"
-CONTRACTS_MAILBOX_FACET_ADDR="0x0f6Fa881EF414Fc6E818180657c2d5CD7Ac6cCAd"
-CONTRACTS_EXECUTOR_FACET_ADDR="0x18B631537801963A964211C0E86645c1aBfbB2d3"
-CONTRACTS_ADMIN_FACET_ADDR="0x1e12b20BE86bEc3A0aC95aA52ade345cB9AE7a32"
-CONTRACTS_GETTERS_FACET_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888"
CONTRACTS_VERIFIER_ADDR="0x34782eE00206EAB6478F2692caa800e4A581687b"
-CONTRACTS_DIAMOND_INIT_ADDR="0xFFC35A5e767BE36057c34586303498e3de7C62Ba"
-CONTRACTS_DIAMOND_UPGRADE_INIT_ADDR="0xFFC35A5e767BE36057c34586303498e3de7C62Ba"
CONTRACTS_DEFAULT_UPGRADE_ADDR="0x5e6d086f5ec079adff4fb3774cdf3e8d6a34f7e9"
CONTRACTS_DIAMOND_PROXY_ADDR="0xF00B988a98Ca742e7958DeF9F7823b5908715f4a"
CONTRACTS_VALIDATOR_TIMELOCK_ADDR="0xF00B988a98Ca742e7958DeF9F7823b5908715f4a"
-CONTRACTS_GENESIS_TX_HASH="0xb99ebfea46cbe05a21cd80fe5597d97b204befc52a16303f579c607dc1ac2e2e"
CONTRACTS_L1_ERC20_BRIDGE_PROXY_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888"
-CONTRACTS_L1_ALLOW_LIST_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888"
-CONTRACTS_L1_ERC20_BRIDGE_IMPL_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888"
CONTRACTS_L2_ERC20_BRIDGE_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888"
CONTRACTS_L1_WETH_BRIDGE_PROXY_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888"
CONTRACTS_L2_WETH_BRIDGE_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888"
CONTRACTS_L2_TESTNET_PAYMASTER_ADDR="FC073319977e314F251EAE6ae6bE76B0B3BAeeCF"
-CONTRACTS_RECURSION_SCHEDULER_LEVEL_VK_HASH="0x1186ec268d49f1905f8d9c1e9d39fc33e98c74f91d91a21b8f7ef78bd09a8db8"
-CONTRACTS_RECURSION_NODE_LEVEL_VK_HASH="0x1186ec268d49f1905f8d9c1e9d39fc33e98c74f91d91a21b8f7ef78bd09a8db8"
-CONTRACTS_RECURSION_LEAF_LEVEL_VK_HASH="0x101e08b00193e529145ee09823378ef51a3bc8966504064f1f6ba3f1ba863210"
-CONTRACTS_RECURSION_CIRCUITS_SET_VKS_HASH="0x142a364ef2073132eaf07aa7f3d8495065be5b92a2dc14fda09b4216affed9c0"
CONTRACTS_L1_MULTICALL3_ADDR="0xcA11bde05977b3631167028862bE2a173976CA11"
-CONTRACTS_FRI_RECURSION_SCHEDULER_LEVEL_VK_HASH="0x201d4c7d8e781d51a3bbd451a43a8f45240bb765b565ae6ce69192d918c3563d"
-CONTRACTS_FRI_RECURSION_NODE_LEVEL_VK_HASH="0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080"
-CONTRACTS_FRI_RECURSION_LEAF_LEVEL_VK_HASH="0x72167c43a46cf38875b267d67716edc4563861364a3c03ab7aee73498421e828"
-CONTRACTS_PROVER_AT_GENESIS="fri"
-CONTRACTS_SNARK_WRAPPER_VK_HASH="0x4be443afd605a782b6e56d199df2460a025c81b3dea144e135bece83612563f2"
-CONTRACTS_BRIDGEHUB_PROXY_ADDR="0x35ea7f92f4c5f433efe15284e99c040110cf6297"
-CONTRACTS_BRIDGEHUB_IMPL_ADDR="0x87d456da9ed212eb49d80d96afb44afddf36adf8"
-CONTRACTS_STATE_TRANSITION_PROXY_ADDR="0xd90f1c081c6117241624e97cb6147257c3cb2097"
-CONTRACTS_STATE_TRANSITION_IMPL_ADDR="0xc957c0e82d3bafb5ad46ffbcc66900648784eb05"
-CONTRACTS_TRANSPARENT_PROXY_ADMIN_ADDR="0xdd6fa5c14e7550b4caf2aa2818d24c69cbc347e5"
-CONTRACTS_GENESIS_ROOT=0x1f50e4eda06a68d96a0272ba4581a342df2227ad12c23759ab7d78157950e69a
-CONTRACTS_GENESIS_BATCH_COMMITMENT=0x84d7b576b9374729e0b38439c97aaf5074335e2a8d1c7a2e4581c1c1ec611631
-CONTRACTS_GENESIS_ROLLUP_LEAF_INDEX=46
+CONTRACTS_L1_SHARED_BRIDGE_PROXY_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888"
+CONTRACTS_L2_SHARED_BRIDGE_ADDR="0x8656770FA78c830456B00B4fFCeE6b1De0e1b888"
+CONTRACTS_BASE_TOKEN_ADDR="0x0000000000000000000000000000000000000001"
"#;
lock.set_env(config);
diff --git a/core/lib/env_config/src/genesis.rs b/core/lib/env_config/src/genesis.rs
index 7bbc78d43d1a..9c1ec27fb5fd 100644
--- a/core/lib/env_config/src/genesis.rs
+++ b/core/lib/env_config/src/genesis.rs
@@ -29,6 +29,8 @@ struct ContractsForGenesis {
pub state_transition_proxy_addr: Option,
pub state_transition_impl_addr: Option,
pub transparent_proxy_admin_addr: Option,
+ pub l1_shared_bridge_proxy_addr: Option,
+ pub l2_shared_bridge_addr: Option,
}
impl FromEnv for ContractsForGenesis {
@@ -51,11 +53,11 @@ impl FromEnv for GenesisConfig {
Some(SharedBridge {
bridgehub_proxy_addr: contracts_config
.bridgehub_proxy_addr
- .context("Must be specified with state_transition_proxy_addr")?,
+ .context("Must be specified with bridgehub_proxy_addr")?,
state_transition_proxy_addr,
transparent_proxy_admin_addr: contracts_config
.transparent_proxy_admin_addr
- .context("Must be specified with state_transition_proxy_addr")?,
+ .context("Must be specified with transparent_proxy_admin_addr")?,
})
} else {
None
diff --git a/core/lib/eth_client/src/clients/http/signing.rs b/core/lib/eth_client/src/clients/http/signing.rs
index ff78043b1f9c..66e1724d8716 100644
--- a/core/lib/eth_client/src/clients/http/signing.rs
+++ b/core/lib/eth_client/src/clients/http/signing.rs
@@ -2,7 +2,7 @@ use std::{fmt, sync::Arc};
use async_trait::async_trait;
use zksync_config::{configs::ContractsConfig, EthConfig};
-use zksync_contracts::zksync_contract;
+use zksync_contracts::hyperchain_contract;
use zksync_eth_signer::{raw_ethereum_tx::TransactionParameters, EthereumSigner, PrivateKeySigner};
use zksync_types::{
web3::{
@@ -58,7 +58,7 @@ impl PKSigningClient {
tracing::info!("Operator address: {:?}", operator_address);
SigningClient::new(
transport,
- zksync_contract(),
+ hyperchain_contract(),
operator_address,
signer,
diamond_proxy_addr,
diff --git a/core/lib/multivm/src/tracers/prestate_tracer/mod.rs b/core/lib/multivm/src/tracers/prestate_tracer/mod.rs
index 080ca1af08db..ca95f16a9a6e 100644
--- a/core/lib/multivm/src/tracers/prestate_tracer/mod.rs
+++ b/core/lib/multivm/src/tracers/prestate_tracer/mod.rs
@@ -4,7 +4,7 @@ use once_cell::sync::OnceCell;
use zksync_state::{StoragePtr, WriteStorage};
use zksync_types::{
get_code_key, get_nonce_key, web3::signing::keccak256, AccountTreeId, Address, StorageKey,
- StorageValue, H160, H256, L2_ETH_TOKEN_ADDRESS, U256,
+ StorageValue, H160, H256, L2_BASE_TOKEN_ADDRESS, U256,
};
use zksync_utils::{address_to_h256, h256_to_u256};
@@ -113,7 +113,7 @@ fn get_balance_key(account: &AccountTreeId) -> StorageKey {
let address_h256 = address_to_h256(account.address());
let bytes = [address_h256.as_bytes(), &[0; 32]].concat();
let balance_key: H256 = keccak256(&bytes).into();
- StorageKey::new(AccountTreeId::new(L2_ETH_TOKEN_ADDRESS), balance_key)
+ StorageKey::new(AccountTreeId::new(L2_BASE_TOKEN_ADDRESS), balance_key)
}
fn get_storage_if_present(
diff --git a/core/lib/multivm/src/tracers/validator/mod.rs b/core/lib/multivm/src/tracers/validator/mod.rs
index f2e888afb3eb..b997d96d7c5e 100644
--- a/core/lib/multivm/src/tracers/validator/mod.rs
+++ b/core/lib/multivm/src/tracers/validator/mod.rs
@@ -4,7 +4,7 @@ use once_cell::sync::OnceCell;
use zksync_state::{StoragePtr, WriteStorage};
use zksync_system_constants::{
ACCOUNT_CODE_STORAGE_ADDRESS, BOOTLOADER_ADDRESS, CONTRACT_DEPLOYER_ADDRESS,
- L2_ETH_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS, SYSTEM_CONTEXT_ADDRESS,
+ L2_BASE_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS, SYSTEM_CONTEXT_ADDRESS,
};
use zksync_types::{
vm_trace::ViolatedValidationRule, web3::signing::keccak256, AccountTreeId, Address, StorageKey,
@@ -219,7 +219,7 @@ fn valid_eth_token_call(address: Address, msg_sender: Address) -> bool {
let is_valid_caller = msg_sender == MSG_VALUE_SIMULATOR_ADDRESS
|| msg_sender == CONTRACT_DEPLOYER_ADDRESS
|| msg_sender == BOOTLOADER_ADDRESS;
- address == L2_ETH_TOKEN_ADDRESS && is_valid_caller
+ address == L2_BASE_TOKEN_ADDRESS && is_valid_caller
}
impl IntoOldVmTracer for ValidationTracer {}
diff --git a/core/lib/multivm/src/versions/vm_1_3_2/oracles/tracer/validation.rs b/core/lib/multivm/src/versions/vm_1_3_2/oracles/tracer/validation.rs
index caea2688bb99..63d6b2183d9d 100644
--- a/core/lib/multivm/src/versions/vm_1_3_2/oracles/tracer/validation.rs
+++ b/core/lib/multivm/src/versions/vm_1_3_2/oracles/tracer/validation.rs
@@ -9,7 +9,7 @@ use zk_evm_1_3_3::{
use zksync_state::{StoragePtr, WriteStorage};
use zksync_system_constants::{
ACCOUNT_CODE_STORAGE_ADDRESS, BOOTLOADER_ADDRESS, CONTRACT_DEPLOYER_ADDRESS,
- KECCAK256_PRECOMPILE_ADDRESS, L2_ETH_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS,
+ KECCAK256_PRECOMPILE_ADDRESS, L2_BASE_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS,
SYSTEM_CONTEXT_ADDRESS,
};
use zksync_types::{
@@ -126,7 +126,7 @@ fn valid_eth_token_call(address: Address, msg_sender: Address) -> bool {
let is_valid_caller = msg_sender == MSG_VALUE_SIMULATOR_ADDRESS
|| msg_sender == CONTRACT_DEPLOYER_ADDRESS
|| msg_sender == BOOTLOADER_ADDRESS;
- address == L2_ETH_TOKEN_ADDRESS && is_valid_caller
+ address == L2_BASE_TOKEN_ADDRESS && is_valid_caller
}
/// Tracer that is used to ensure that the validation adheres to all the rules
diff --git a/core/lib/multivm/src/versions/vm_latest/tests/default_aa.rs b/core/lib/multivm/src/versions/vm_latest/tests/default_aa.rs
index d23fa74edebc..34297d991d10 100644
--- a/core/lib/multivm/src/versions/vm_latest/tests/default_aa.rs
+++ b/core/lib/multivm/src/versions/vm_latest/tests/default_aa.rs
@@ -1,4 +1,4 @@
-use zksync_system_constants::L2_ETH_TOKEN_ADDRESS;
+use zksync_system_constants::L2_BASE_TOKEN_ADDRESS;
use zksync_types::{
get_code_key, get_known_code_key, get_nonce_key,
system_contracts::{DEPLOYMENT_NONCE_INCREMENT, TX_NONCE_INCREMENT},
@@ -67,7 +67,7 @@ fn test_default_aa_interaction() {
- U256::from(result.refunds.gas_refunded)
* U256::from(get_batch_base_fee(&vm.vm.batch_env));
let operator_balance = get_balance(
- AccountTreeId::new(L2_ETH_TOKEN_ADDRESS),
+ AccountTreeId::new(L2_BASE_TOKEN_ADDRESS),
&vm.fee_account,
vm.vm.state.storage.storage.get_ptr(),
);
diff --git a/core/lib/multivm/src/versions/vm_latest/tests/migration.rs b/core/lib/multivm/src/versions/vm_latest/tests/migration.rs
new file mode 100644
index 000000000000..6bd0e87615ed
--- /dev/null
+++ b/core/lib/multivm/src/versions/vm_latest/tests/migration.rs
@@ -0,0 +1,51 @@
+use zksync_types::{get_code_key, H256, SYSTEM_CONTEXT_ADDRESS};
+
+use crate::{
+ interface::{TxExecutionMode, VmExecutionMode, VmInterface},
+ vm_latest::{
+ tests::{
+ tester::{get_empty_storage, DeployContractsTx, TxType, VmTesterBuilder},
+ utils::read_test_contract,
+ },
+ HistoryEnabled,
+ },
+};
+
+/// This test checks that the new bootloader will work fine even if the previous system context contract is not
+/// compatible with it, i.e. the bootloader will upgrade it before starting any transaction.
+#[test]
+fn test_migration_for_system_context_aa_interaction() {
+ let mut storage = get_empty_storage();
+ // We will set the system context bytecode to zero.
+ storage.set_value(get_code_key(&SYSTEM_CONTEXT_ADDRESS), H256::zero());
+
+ // In this test, we aim to test whether a simple account interaction (without any fee logic)
+ // will work. The account will try to deploy a simple contract from integration tests.
+ let mut vm = VmTesterBuilder::new(HistoryEnabled)
+ .with_storage(storage)
+ .with_execution_mode(TxExecutionMode::VerifyExecute)
+ .with_random_rich_accounts(1)
+ .build();
+
+ // Now, we will just proceed with standard transaction execution.
+ // The bootloader should be able to update system context regardless of whether
+ // the upgrade transaction is there or not.
+ let account = &mut vm.rich_accounts[0];
+ let counter = read_test_contract();
+ let DeployContractsTx { tx, .. } = account.get_deploy_tx(&counter, None, TxType::L2);
+
+ vm.vm.push_transaction(tx);
+ let result = vm.vm.execute(VmExecutionMode::OneTx);
+ assert!(
+ !result.result.is_failed(),
+ "Transaction wasn't successful {:#?}",
+ result.result
+ );
+
+ let batch_result = vm.vm.execute(VmExecutionMode::Batch);
+ assert!(
+ !batch_result.result.is_failed(),
+ "Batch transaction wasn't successful {:#?}",
+ batch_result.result
+ );
+}
diff --git a/core/lib/multivm/src/versions/vm_latest/tests/mod.rs b/core/lib/multivm/src/versions/vm_latest/tests/mod.rs
index d416e2107b85..409b67ce9e06 100644
--- a/core/lib/multivm/src/versions/vm_latest/tests/mod.rs
+++ b/core/lib/multivm/src/versions/vm_latest/tests/mod.rs
@@ -12,6 +12,7 @@ mod get_used_contracts;
mod is_write_initial;
mod l1_tx_execution;
mod l2_blocks;
+mod migration;
mod nonce_holder;
mod precompiles;
mod prestate_tracer;
diff --git a/core/lib/multivm/src/versions/vm_latest/tests/require_eip712.rs b/core/lib/multivm/src/versions/vm_latest/tests/require_eip712.rs
index c3c5ba896b83..747861c552af 100644
--- a/core/lib/multivm/src/versions/vm_latest/tests/require_eip712.rs
+++ b/core/lib/multivm/src/versions/vm_latest/tests/require_eip712.rs
@@ -2,7 +2,7 @@ use std::convert::TryInto;
use ethabi::Token;
use zksync_eth_signer::{raw_ethereum_tx::TransactionParameters, EthereumSigner};
-use zksync_system_constants::L2_ETH_TOKEN_ADDRESS;
+use zksync_system_constants::L2_BASE_TOKEN_ADDRESS;
use zksync_types::{
fee::Fee, l2::L2Tx, transaction_request::TransactionRequest,
utils::storage_key_for_standard_token_balance, AccountTreeId, Address, Eip712Domain, Execute,
@@ -23,7 +23,7 @@ use crate::{
impl VmTester {
pub(crate) fn get_eth_balance(&mut self, address: Address) -> U256 {
let key = storage_key_for_standard_token_balance(
- AccountTreeId::new(L2_ETH_TOKEN_ADDRESS),
+ AccountTreeId::new(L2_BASE_TOKEN_ADDRESS),
&address,
);
self.vm.state.storage.storage.read_from_storage(&key)
diff --git a/core/lib/multivm/src/versions/vm_latest/tests/transfer.rs b/core/lib/multivm/src/versions/vm_latest/tests/transfer.rs
index 7e2ad46cdb20..6351c216f3ae 100644
--- a/core/lib/multivm/src/versions/vm_latest/tests/transfer.rs
+++ b/core/lib/multivm/src/versions/vm_latest/tests/transfer.rs
@@ -1,6 +1,6 @@
use ethabi::Token;
use zksync_contracts::{load_contract, read_bytecode};
-use zksync_system_constants::L2_ETH_TOKEN_ADDRESS;
+use zksync_system_constants::L2_BASE_TOKEN_ADDRESS;
use zksync_types::{utils::storage_key_for_eth_balance, AccountTreeId, Address, Execute, U256};
use zksync_utils::u256_to_h256;
@@ -92,7 +92,7 @@ fn test_send_or_transfer(test_option: TestOptions) {
assert!(!batch_result.result.is_failed(), "Batch wasn't successful");
let new_recipient_balance = get_balance(
- AccountTreeId::new(L2_ETH_TOKEN_ADDRESS),
+ AccountTreeId::new(L2_BASE_TOKEN_ADDRESS),
&recipient_address,
vm.vm.state.storage.storage.get_ptr(),
);
diff --git a/core/lib/multivm/src/versions/vm_m5/oracles/tracer.rs b/core/lib/multivm/src/versions/vm_m5/oracles/tracer.rs
index 481e8a7e02e6..fd00b2da7821 100644
--- a/core/lib/multivm/src/versions/vm_m5/oracles/tracer.rs
+++ b/core/lib/multivm/src/versions/vm_m5/oracles/tracer.rs
@@ -19,7 +19,7 @@ use zksync_types::{
get_code_key, web3::signing::keccak256, AccountTreeId, Address, StorageKey,
ACCOUNT_CODE_STORAGE_ADDRESS, BOOTLOADER_ADDRESS, CONTRACT_DEPLOYER_ADDRESS, H256,
KECCAK256_PRECOMPILE_ADDRESS, KNOWN_CODES_STORAGE_ADDRESS, L1_MESSENGER_ADDRESS,
- L2_ETH_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS, SYSTEM_CONTEXT_ADDRESS, U256,
+ L2_BASE_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS, SYSTEM_CONTEXT_ADDRESS, U256,
};
use zksync_utils::{
be_bytes_to_safe_address, h256_to_account_address, u256_to_account_address, u256_to_h256,
@@ -200,7 +200,7 @@ fn valid_eth_token_call(address: Address, msg_sender: Address) -> bool {
let is_valid_caller = msg_sender == MSG_VALUE_SIMULATOR_ADDRESS
|| msg_sender == CONTRACT_DEPLOYER_ADDRESS
|| msg_sender == BOOTLOADER_ADDRESS;
- address == L2_ETH_TOKEN_ADDRESS && is_valid_caller
+ address == L2_BASE_TOKEN_ADDRESS && is_valid_caller
}
/// Tracer that is used to ensure that the validation adheres to all the rules
diff --git a/core/lib/multivm/src/versions/vm_m6/oracles/tracer/validation.rs b/core/lib/multivm/src/versions/vm_m6/oracles/tracer/validation.rs
index 704a967548be..084c25310ecb 100644
--- a/core/lib/multivm/src/versions/vm_m6/oracles/tracer/validation.rs
+++ b/core/lib/multivm/src/versions/vm_m6/oracles/tracer/validation.rs
@@ -8,7 +8,7 @@ use zk_evm_1_3_1::{
};
use zksync_system_constants::{
ACCOUNT_CODE_STORAGE_ADDRESS, BOOTLOADER_ADDRESS, CONTRACT_DEPLOYER_ADDRESS,
- KECCAK256_PRECOMPILE_ADDRESS, L2_ETH_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS,
+ KECCAK256_PRECOMPILE_ADDRESS, L2_BASE_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS,
SYSTEM_CONTEXT_ADDRESS,
};
use zksync_types::{
@@ -122,7 +122,7 @@ fn valid_eth_token_call(address: Address, msg_sender: Address) -> bool {
let is_valid_caller = msg_sender == MSG_VALUE_SIMULATOR_ADDRESS
|| msg_sender == CONTRACT_DEPLOYER_ADDRESS
|| msg_sender == BOOTLOADER_ADDRESS;
- address == L2_ETH_TOKEN_ADDRESS && is_valid_caller
+ address == L2_BASE_TOKEN_ADDRESS && is_valid_caller
}
/// Tracer that is used to ensure that the validation adheres to all the rules
diff --git a/core/lib/protobuf_config/src/contracts.rs b/core/lib/protobuf_config/src/contracts.rs
index 7a5e7553e369..1c18cd66cf7b 100644
--- a/core/lib/protobuf_config/src/contracts.rs
+++ b/core/lib/protobuf_config/src/contracts.rs
@@ -11,6 +11,7 @@ impl ProtoRepr for proto::Contracts {
let l1 = required(&self.l1).context("l1")?;
let l2 = required(&self.l2).context("l2")?;
let bridges = required(&self.bridges).context("bridges")?;
+ let shared = required(&bridges.shared).context("shared")?;
let erc20 = required(&bridges.erc20).context("erc20")?;
let weth_bridge = required(&bridges.weth).context("weth_bridge")?;
Ok(Self::Type {
@@ -29,18 +30,36 @@ impl ProtoRepr for proto::Contracts {
validator_timelock_addr: required(&l1.validator_timelock_addr)
.and_then(|x| parse_h160(x))
.context("validator_timelock_addr")?,
- l1_erc20_bridge_proxy_addr: required(&erc20.l1_address)
- .and_then(|x| parse_h160(x))
- .context("l1_erc20_bridge_proxy_addr")?,
- l2_erc20_bridge_addr: required(&erc20.l2_address)
- .and_then(|x| parse_h160(x))
- .context("l2_erc20_bridge_addr")?,
+ l1_erc20_bridge_proxy_addr: erc20
+ .l1_address
+ .as_ref()
+ .map(|x| parse_h160(x))
+ .transpose()
+ .context("l1_erc20_bridge_addr")?,
+ l2_erc20_bridge_addr: erc20
+ .l2_address
+ .as_ref()
+ .map(|x| parse_h160(x))
+ .transpose()
+ .context("l1_erc20_bridge_impl_addr")?,
+ l1_shared_bridge_proxy_addr: shared
+ .l1_address
+ .as_ref()
+ .map(|x| parse_h160(x))
+ .transpose()
+ .context("l1_shared_bridge_proxy_addr")?,
+ l2_shared_bridge_addr: shared
+ .l2_address
+ .as_ref()
+ .map(|x| parse_h160(x))
+ .transpose()
+ .context("l2_shared_bridge_proxy_addr")?,
l1_weth_bridge_proxy_addr: weth_bridge
.l1_address
.as_ref()
.map(|x| parse_h160(x))
.transpose()
- .context("l1_weth_bridge_proxy_addr")?,
+ .context("l1_weth_bridge_addr")?,
l2_weth_bridge_addr: weth_bridge
.l2_address
.as_ref()
@@ -56,6 +75,12 @@ impl ProtoRepr for proto::Contracts {
l1_multicall3_addr: required(&l1.multicall3_addr)
.and_then(|x| parse_h160(x))
.context("l1_multicall3_addr")?,
+ base_token_addr: l1
+ .base_token_addr
+ .as_ref()
+ .map(|x| parse_h160(x))
+ .transpose()
+ .context("base_token_addr")?,
})
}
@@ -68,14 +93,19 @@ impl ProtoRepr for proto::Contracts {
validator_timelock_addr: Some(format!("{:?}", this.validator_timelock_addr)),
default_upgrade_addr: Some(format!("{:?}", this.default_upgrade_addr)),
multicall3_addr: Some(format!("{:?}", this.l1_multicall3_addr)),
+ base_token_addr: this.base_token_addr.map(|a| format!("{:?}", a)),
}),
l2: Some(proto::L2 {
testnet_paymaster_addr: this.l2_testnet_paymaster_addr.map(|a| format!("{:?}", a)),
}),
bridges: Some(proto::Bridges {
+ shared: Some(proto::Bridge {
+ l1_address: this.l1_shared_bridge_proxy_addr.map(|a| format!("{:?}", a)),
+ l2_address: this.l2_shared_bridge_addr.map(|a| format!("{:?}", a)),
+ }),
erc20: Some(proto::Bridge {
- l1_address: Some(format!("{:?}", this.l1_erc20_bridge_proxy_addr)),
- l2_address: Some(format!("{:?}", this.l2_erc20_bridge_addr)),
+ l1_address: this.l1_erc20_bridge_proxy_addr.map(|a| format!("{:?}", a)),
+ l2_address: this.l2_erc20_bridge_addr.map(|a| format!("{:?}", a)),
}),
weth: Some(proto::Bridge {
l1_address: this.l1_weth_bridge_proxy_addr.map(|a| format!("{:?}", a)),
diff --git a/core/lib/protobuf_config/src/proto/config/contracts.proto b/core/lib/protobuf_config/src/proto/config/contracts.proto
index bcdb4dd9ffc7..1af96b06beb6 100644
--- a/core/lib/protobuf_config/src/proto/config/contracts.proto
+++ b/core/lib/protobuf_config/src/proto/config/contracts.proto
@@ -9,6 +9,7 @@ message L1 {
optional string validator_timelock_addr = 4; // required; H160
optional string default_upgrade_addr = 5; // required; H160
optional string multicall3_addr = 6; // required; H160
+ optional string base_token_addr = 7; // required; H160
}
message L2 {
@@ -23,6 +24,7 @@ message Bridge {
message Bridges {
optional Bridge erc20 = 1;
optional Bridge weth = 2;
+ optional Bridge shared = 3;
}
message Contracts {
diff --git a/core/lib/types/src/api/mod.rs b/core/lib/types/src/api/mod.rs
index 6097c816fd64..ad22c325cdbe 100644
--- a/core/lib/types/src/api/mod.rs
+++ b/core/lib/types/src/api/mod.rs
@@ -193,8 +193,10 @@ pub struct L2ToL1LogProof {
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BridgeAddresses {
- pub l1_erc20_default_bridge: Address,
- pub l2_erc20_default_bridge: Address,
+ pub l1_shared_default_bridge: Option,
+ pub l2_shared_default_bridge: Option,
+ pub l1_erc20_default_bridge: Option,
+ pub l2_erc20_default_bridge: Option,
pub l1_weth_bridge: Option,
pub l2_weth_bridge: Option,
}
diff --git a/core/lib/types/src/event/mod.rs b/core/lib/types/src/event/mod.rs
index 404a6ec2d04e..960d2438be79 100644
--- a/core/lib/types/src/event/mod.rs
+++ b/core/lib/types/src/event/mod.rs
@@ -155,7 +155,7 @@ static PUBLISHED_BYTECODE_SIGNATURE: Lazy = Lazy::new(|| {
// moved from Runtime Context
pub fn extract_added_tokens(
- l2_erc20_bridge_addr: Address,
+ l2_shared_bridge_addr: Address,
all_generated_events: &[VmEvent],
) -> Vec {
let deployed_tokens = all_generated_events
@@ -165,7 +165,7 @@ pub fn extract_added_tokens(
event.address == CONTRACT_DEPLOYER_ADDRESS
&& event.indexed_topics.len() == 4
&& event.indexed_topics[0] == *DEPLOY_EVENT_SIGNATURE
- && h256_to_account_address(&event.indexed_topics[1]) == l2_erc20_bridge_addr
+ && h256_to_account_address(&event.indexed_topics[1]) == l2_shared_bridge_addr
})
.map(|event| h256_to_account_address(&event.indexed_topics[3]));
diff --git a/core/lib/types/src/event/tests.rs b/core/lib/types/src/event/tests.rs
index 1c8a344c587e..f63e33ef6009 100644
--- a/core/lib/types/src/event/tests.rs
+++ b/core/lib/types/src/event/tests.rs
@@ -1,4 +1,4 @@
-use zksync_system_constants::{BOOTLOADER_ADDRESS, L2_ETH_TOKEN_ADDRESS};
+use zksync_system_constants::{BOOTLOADER_ADDRESS, L2_BASE_TOKEN_ADDRESS};
use super::*;
@@ -108,7 +108,7 @@ fn test_extract_l2tol1logs_from_l1_messenger() {
create_l2_to_l1_log_vm_event(
BOOTLOADER_ADDRESS,
U256::from(6),
- L2_ETH_TOKEN_ADDRESS,
+ L2_BASE_TOKEN_ADDRESS,
U256::from(6),
U256::from(8),
),
@@ -138,7 +138,7 @@ fn test_extract_bytecode_publication_requests_from_l1_messenger() {
];
let events = vec![
- create_bytecode_publication_vm_event(L2_ETH_TOKEN_ADDRESS, U256::from(1337)),
+ create_bytecode_publication_vm_event(L2_BASE_TOKEN_ADDRESS, U256::from(1337)),
create_bytecode_publication_vm_event(L1_MESSENGER_ADDRESS, U256::from(1438284388)),
create_bytecode_publication_vm_event(L1_MESSENGER_ADDRESS, U256::from(1231014388)),
];
diff --git a/core/lib/types/src/protocol_upgrade.rs b/core/lib/types/src/protocol_upgrade.rs
index 4d17cd426d8e..21103ad0eebc 100644
--- a/core/lib/types/src/protocol_upgrade.rs
+++ b/core/lib/types/src/protocol_upgrade.rs
@@ -14,7 +14,7 @@ use crate::{
};
/// Represents a call to be made during governance operation.
-#[derive(Debug, Clone, Serialize, Deserialize)]
+#[derive(Clone, Serialize, Deserialize)]
pub struct Call {
/// The address to which the call will be made.
pub target: Address,
@@ -28,6 +28,18 @@ pub struct Call {
pub eth_block: u64,
}
+impl std::fmt::Debug for Call {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ f.debug_struct("Call")
+ .field("target", &self.target)
+ .field("value", &self.value)
+ .field("data", &hex::encode(&self.data))
+ .field("eth_hash", &self.eth_hash)
+ .field("eth_block", &self.eth_block)
+ .finish()
+ }
+}
+
/// Defines the structure of an operation that Governance contract executes.
#[derive(Debug, Clone, Default)]
pub struct GovernanceOperation {
@@ -125,7 +137,6 @@ impl TryFrom for ProtocolUpgrade {
ParamType::Bytes, // l1 post-upgrade custom data
ParamType::Uint(256), // timestamp
ParamType::Uint(256), // version id
- ParamType::Address, // allow list address
])],
init_calldata
.get(4..)
@@ -173,8 +184,6 @@ impl TryFrom for ProtocolUpgrade {
panic!("Version ID is too big, max expected is {}", u16::MAX);
}
- let _allow_list_address = decoded.remove(0).into_address().unwrap();
-
Ok(Self {
id: ProtocolVersionId::try_from(version_id.as_u32() as u16)
.expect("Version is not supported"),
diff --git a/core/lib/types/src/system_contracts.rs b/core/lib/types/src/system_contracts.rs
index 4f358e769763..3b51e447e59e 100644
--- a/core/lib/types/src/system_contracts.rs
+++ b/core/lib/types/src/system_contracts.rs
@@ -13,7 +13,7 @@ use crate::{
COMPLEX_UPGRADER_ADDRESS, CONTRACT_DEPLOYER_ADDRESS, ECRECOVER_PRECOMPILE_ADDRESS,
EC_ADD_PRECOMPILE_ADDRESS, EC_MUL_PRECOMPILE_ADDRESS, IMMUTABLE_SIMULATOR_STORAGE_ADDRESS,
KECCAK256_PRECOMPILE_ADDRESS, KNOWN_CODES_STORAGE_ADDRESS, L1_MESSENGER_ADDRESS,
- L2_ETH_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS, NONCE_HOLDER_ADDRESS,
+ L2_BASE_TOKEN_ADDRESS, MSG_VALUE_SIMULATOR_ADDRESS, NONCE_HOLDER_ADDRESS,
SHA256_PRECOMPILE_ADDRESS, SYSTEM_CONTEXT_ADDRESS,
};
@@ -70,8 +70,8 @@ static SYSTEM_CONTRACT_LIST: [(&str, &str, Address, ContractLanguage); 23] = [
),
(
"",
- "L2EthToken",
- L2_ETH_TOKEN_ADDRESS,
+ "L2BaseToken",
+ L2_BASE_TOKEN_ADDRESS,
ContractLanguage::Sol,
),
(
diff --git a/core/lib/types/src/tx/execute.rs b/core/lib/types/src/tx/execute.rs
index 889c276a3e7a..baafe3746750 100644
--- a/core/lib/types/src/tx/execute.rs
+++ b/core/lib/types/src/tx/execute.rs
@@ -5,7 +5,7 @@ use zksync_utils::ZeroPrefixHexSerde;
use crate::{web3::ethabi, Address, EIP712TypedStructure, StructBuilder, H256, U256};
/// `Execute` transaction executes a previously deployed smart contract in the L2 rollup.
-#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
+#[derive(Clone, Default, Serialize, Deserialize, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct Execute {
pub contract_address: Address,
@@ -22,6 +22,21 @@ pub struct Execute {
pub factory_deps: Option>>,
}
+impl std::fmt::Debug for Execute {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+ let factory_deps = match &self.factory_deps {
+ Some(deps) => format!("Some(<{} factory deps>)", deps.len()),
+ None => "None".to_string(),
+ };
+ f.debug_struct("Execute")
+ .field("contract_address", &self.contract_address)
+ .field("calldata", &hex::encode(&self.calldata))
+ .field("value", &self.value)
+ .field("factory_deps", &factory_deps)
+ .finish()
+ }
+}
+
impl EIP712TypedStructure for Execute {
const TYPE_NAME: &'static str = "Transaction";
diff --git a/core/lib/types/src/utils.rs b/core/lib/types/src/utils.rs
index b14432d7cfed..df9a88fde008 100644
--- a/core/lib/types/src/utils.rs
+++ b/core/lib/types/src/utils.rs
@@ -6,7 +6,7 @@ use zksync_utils::{address_to_h256, u256_to_h256};
use crate::{
system_contracts::DEPLOYMENT_NONCE_INCREMENT, web3::signing::keccak256, AccountTreeId,
- StorageKey, L2_ETH_TOKEN_ADDRESS, U256,
+ StorageKey, L2_BASE_TOKEN_ADDRESS, U256,
};
/// Displays a Unix timestamp (seconds since epoch) in human-readable form. Useful for logging.
@@ -77,7 +77,7 @@ pub fn storage_key_for_standard_token_balance(
) -> StorageKey {
// We have different implementation of the standard ERC20 contract and native
// eth contract. The key for the balance is different for each.
- let key = if token_contract.address() == &L2_ETH_TOKEN_ADDRESS {
+ let key = if token_contract.address() == &L2_BASE_TOKEN_ADDRESS {
key_for_eth_balance(address)
} else {
key_for_erc20_balance(address)
@@ -87,7 +87,7 @@ pub fn storage_key_for_standard_token_balance(
}
pub fn storage_key_for_eth_balance(address: &Address) -> StorageKey {
- storage_key_for_standard_token_balance(AccountTreeId::new(L2_ETH_TOKEN_ADDRESS), address)
+ storage_key_for_standard_token_balance(AccountTreeId::new(L2_BASE_TOKEN_ADDRESS), address)
}
/// Pre-calculated the address of the to-be-deployed contract (via CREATE, not CREATE2).
diff --git a/core/lib/web3_decl/src/namespaces/zks.rs b/core/lib/web3_decl/src/namespaces/zks.rs
index 1a29bde79951..1ec78676ca3c 100644
--- a/core/lib/web3_decl/src/namespaces/zks.rs
+++ b/core/lib/web3_decl/src/namespaces/zks.rs
@@ -45,6 +45,9 @@ pub trait ZksNamespace {
#[method(name = "getBridgeContracts")]
async fn get_bridge_contracts(&self) -> RpcResult;
+ #[method(name = "getBaseTokenL1Address")]
+ async fn get_base_token_l1_address(&self) -> RpcResult;
+
#[method(name = "L1ChainId")]
async fn l1_chain_id(&self) -> RpcResult;
diff --git a/core/lib/zksync_core/src/api_server/web3/backend_jsonrpsee/namespaces/zks.rs b/core/lib/zksync_core/src/api_server/web3/backend_jsonrpsee/namespaces/zks.rs
index 42b64ce0a361..ebcb9ca19702 100644
--- a/core/lib/zksync_core/src/api_server/web3/backend_jsonrpsee/namespaces/zks.rs
+++ b/core/lib/zksync_core/src/api_server/web3/backend_jsonrpsee/namespaces/zks.rs
@@ -167,4 +167,9 @@ impl ZksNamespaceServer for ZksNamespace {
.await
.map_err(|err| self.current_method().map_err(err))
}
+
+ async fn get_base_token_l1_address(&self) -> RpcResult {
+ self.get_base_token_l1_address_impl()
+ .map_err(|err| self.current_method().map_err(err))
+ }
}
diff --git a/core/lib/zksync_core/src/api_server/web3/namespaces/eth.rs b/core/lib/zksync_core/src/api_server/web3/namespaces/eth.rs
index 89b3f4f87377..8d8e7fb3aefa 100644
--- a/core/lib/zksync_core/src/api_server/web3/namespaces/eth.rs
+++ b/core/lib/zksync_core/src/api_server/web3/namespaces/eth.rs
@@ -13,7 +13,7 @@ use zksync_types::{
self,
types::{FeeHistory, SyncInfo, SyncState},
},
- AccountTreeId, Bytes, L2BlockNumber, StorageKey, H256, L2_ETH_TOKEN_ADDRESS, U256,
+ AccountTreeId, Bytes, L2BlockNumber, StorageKey, H256, L2_BASE_TOKEN_ADDRESS, U256,
};
use zksync_utils::u256_to_h256;
use zksync_web3_decl::{
@@ -152,7 +152,7 @@ impl EthNamespace {
let balance = connection
.storage_web3_dal()
.standard_token_historical_balance(
- AccountTreeId::new(L2_ETH_TOKEN_ADDRESS),
+ AccountTreeId::new(L2_BASE_TOKEN_ADDRESS),
AccountTreeId::new(address),
block_number,
)
diff --git a/core/lib/zksync_core/src/api_server/web3/namespaces/zks.rs b/core/lib/zksync_core/src/api_server/web3/namespaces/zks.rs
index c2a1e10ff99f..294de2009a57 100644
--- a/core/lib/zksync_core/src/api_server/web3/namespaces/zks.rs
+++ b/core/lib/zksync_core/src/api_server/web3/namespaces/zks.rs
@@ -18,7 +18,7 @@ use zksync_types::{
transaction_request::CallRequest,
utils::storage_key_for_standard_token_balance,
AccountTreeId, L1BatchNumber, L2BlockNumber, ProtocolVersionId, StorageKey, Transaction,
- L1_MESSENGER_ADDRESS, L2_ETH_TOKEN_ADDRESS, REQUIRED_L1_TO_L2_GAS_PER_PUBDATA_BYTE, U256, U64,
+ L1_MESSENGER_ADDRESS, L2_BASE_TOKEN_ADDRESS, REQUIRED_L1_TO_L2_GAS_PER_PUBDATA_BYTE, U256, U64,
};
use zksync_utils::{address_to_h256, h256_to_u256};
use zksync_web3_decl::{
@@ -122,6 +122,11 @@ impl ZksNamespace {
self.state.api_config.bridge_addresses.clone()
}
+ #[tracing::instrument(skip(self))]
+ pub fn get_base_token_l1_address(&self) -> Option {
+ self.state.api_config.base_token_address
+ }
+
#[tracing::instrument(skip(self))]
pub fn l1_chain_id_impl(&self) -> U64 {
U64::from(*self.state.api_config.l1_chain_id)
@@ -168,7 +173,7 @@ impl ZksNamespace {
.map_err(DalError::generalize)?;
let hashed_balance_keys = tokens.iter().map(|&token_address| {
let token_account = AccountTreeId::new(if token_address == ETHEREUM_ADDRESS {
- L2_ETH_TOKEN_ADDRESS
+ L2_BASE_TOKEN_ADDRESS
} else {
token_address
});
@@ -558,4 +563,12 @@ impl ZksNamespace {
storage_proof,
}))
}
+
+ #[tracing::instrument(skip_all)]
+ pub fn get_base_token_l1_address_impl(&self) -> Result {
+ self.state
+ .api_config
+ .base_token_address
+ .ok_or(Web3Error::NotImplemented)
+ }
}
diff --git a/core/lib/zksync_core/src/api_server/web3/state.rs b/core/lib/zksync_core/src/api_server/web3/state.rs
index 3ba13a24029b..52ada6d34069 100644
--- a/core/lib/zksync_core/src/api_server/web3/state.rs
+++ b/core/lib/zksync_core/src/api_server/web3/state.rs
@@ -110,6 +110,7 @@ pub struct InternalApiConfig {
pub l2_testnet_paymaster_addr: Option,
pub req_entities_limit: usize,
pub fee_history_limit: u64,
+ pub base_token_address: Option,
pub filters_disabled: bool,
pub dummy_verifier: bool,
pub l1_batch_commit_data_generator_mode: L1BatchCommitDataGeneratorMode,
@@ -131,6 +132,8 @@ impl InternalApiConfig {
bridge_addresses: api::BridgeAddresses {
l1_erc20_default_bridge: contracts_config.l1_erc20_bridge_proxy_addr,
l2_erc20_default_bridge: contracts_config.l2_erc20_bridge_addr,
+ l1_shared_default_bridge: contracts_config.l1_shared_bridge_proxy_addr,
+ l2_shared_default_bridge: contracts_config.l2_shared_bridge_addr,
l1_weth_bridge: contracts_config.l1_weth_bridge_proxy_addr,
l2_weth_bridge: contracts_config.l2_weth_bridge_addr,
},
@@ -150,6 +153,7 @@ impl InternalApiConfig {
l2_testnet_paymaster_addr: contracts_config.l2_testnet_paymaster_addr,
req_entities_limit: web3_config.req_entities_limit(),
fee_history_limit: web3_config.fee_history_limit(),
+ base_token_address: contracts_config.base_token_addr,
filters_disabled: web3_config.filters_disabled,
dummy_verifier: genesis_config.dummy_verifier,
l1_batch_commit_data_generator_mode: genesis_config.l1_batch_commit_data_generator_mode,
diff --git a/core/lib/zksync_core/src/consistency_checker/mod.rs b/core/lib/zksync_core/src/consistency_checker/mod.rs
index cefc4b6a17ed..764092fbaa3a 100644
--- a/core/lib/zksync_core/src/consistency_checker/mod.rs
+++ b/core/lib/zksync_core/src/consistency_checker/mod.rs
@@ -206,6 +206,13 @@ impl LocalL1BatchCommitData {
.map_or(true, |version| version.is_pre_boojum())
}
+ fn is_pre_shared_bridge(&self) -> bool {
+ self.l1_batch
+ .header
+ .protocol_version
+ .map_or(true, |version| version.is_pre_shared_bridge())
+ }
+
/// All returned errors are validation errors.
fn verify_commitment(&self, reference: ðabi::Token) -> anyhow::Result<()> {
let protocol_version = self
@@ -322,7 +329,7 @@ impl ConsistencyChecker {
) -> anyhow::Result {
let (health_check, health_updater) = ConsistencyCheckerHealthUpdater::new();
Ok(Self {
- contract: zksync_contracts::zksync_contract(),
+ contract: zksync_contracts::hyperchain_contract(),
diamond_proxy_addr: None,
max_batches_to_recheck,
sleep_interval: Self::DEFAULT_SLEEP_INTERVAL,
@@ -412,14 +419,18 @@ impl ConsistencyChecker {
}
}
- // TODO: Add support for post shared bridge commits
let commit_function = if local.is_pre_boojum() {
&*PRE_BOOJUM_COMMIT_FUNCTION
- } else {
+ } else if local.is_pre_shared_bridge() {
self.contract
.function("commitBatches")
.context("L1 contract does not have `commitBatches` function")
.map_err(CheckError::Internal)?
+ } else {
+ self.contract
+ .function("commitBatchesSharedBridge")
+ .context("L1 contract does not have `commitBatchesSharedBridge` function")
+ .map_err(CheckError::Internal)?
};
let commitment =
diff --git a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs
index cdae040004a8..e73d25dfa908 100644
--- a/core/lib/zksync_core/src/consistency_checker/tests/mod.rs
+++ b/core/lib/zksync_core/src/consistency_checker/tests/mod.rs
@@ -37,6 +37,7 @@ pub(crate) fn create_l1_batch_with_metadata(number: u32) -> L1BatchWithMetadata
const PRE_BOOJUM_PROTOCOL_VERSION: ProtocolVersionId = ProtocolVersionId::Version10;
const DIAMOND_PROXY_ADDR: Address = Address::repeat_byte(1);
const VALIDATOR_TIMELOCK_ADDR: Address = Address::repeat_byte(23);
+const CHAIN_ID: u32 = 270;
pub(crate) fn create_pre_boojum_l1_batch_with_metadata(number: u32) -> L1BatchWithMetadata {
let mut l1_batch = L1BatchWithMetadata {
@@ -56,24 +57,35 @@ pub(crate) fn build_commit_tx_input_data(
) -> Vec {
let pubdata_da = PubdataDA::Calldata;
- let is_pre_boojum = batches[0].header.protocol_version.unwrap().is_pre_boojum();
- let contract;
- let commit_function = if is_pre_boojum {
- &*PRE_BOOJUM_COMMIT_FUNCTION
- } else {
- contract = zksync_contracts::zksync_contract();
- contract.function("commitBatches").unwrap()
- };
+ let protocol_version = batches[0].header.protocol_version.unwrap();
+ let contract = zksync_contracts::hyperchain_contract();
- let mut encoded = vec![];
- encoded.extend_from_slice(&commit_function.short_signature());
// Mock an additional argument used in real `commitBlocks` / `commitBatches`. In real transactions,
// it's taken from the L1 batch previous to `batches[0]`, but since this argument is not checked,
// it's OK to use `batches[0]`.
- encoded.extend_from_slice(ðabi::encode(
- &l1_batch_commit_data_generator.l1_commit_batches(&batches[0], batches, &pubdata_da),
- ));
- encoded
+ let tokens =
+ l1_batch_commit_data_generator.l1_commit_batches(&batches[0], batches, &pubdata_da);
+
+ if protocol_version.is_pre_boojum() {
+ PRE_BOOJUM_COMMIT_FUNCTION.encode_input(&tokens).unwrap()
+ } else if protocol_version.is_pre_shared_bridge() {
+ contract
+ .function("commitBatches")
+ .unwrap()
+ .encode_input(&tokens)
+ .unwrap()
+ } else {
+ // Post shared bridge transactions also require chain id
+ let tokens: Vec<_> = vec![Token::Uint(CHAIN_ID.into())]
+ .into_iter()
+ .chain(tokens)
+ .collect();
+ contract
+ .function("commitBatchesSharedBridge")
+ .unwrap()
+ .encode_input(&tokens)
+ .unwrap()
+ }
}
pub(crate) fn create_mock_checker(
@@ -83,7 +95,7 @@ pub(crate) fn create_mock_checker(
) -> ConsistencyChecker {
let (health_check, health_updater) = ConsistencyCheckerHealthUpdater::new();
ConsistencyChecker {
- contract: zksync_contracts::zksync_contract(),
+ contract: zksync_contracts::hyperchain_contract(),
diamond_proxy_addr: Some(DIAMOND_PROXY_ADDR),
max_batches_to_recheck: 100,
sleep_interval: Duration::from_millis(10),
@@ -132,8 +144,8 @@ fn build_commit_tx_input_data_is_correct(deployment_mode: DeploymentMode) {
DeploymentMode::Rollup => Arc::new(ValidiumModeL1BatchCommitDataGenerator {}),
};
- let contract = zksync_contracts::zksync_contract();
- let commit_function = contract.function("commitBatches").unwrap();
+ let contract = zksync_contracts::hyperchain_contract();
+ let commit_function = contract.function("commitBatchesSharedBridge").unwrap();
let batches = vec![
create_l1_batch_with_metadata(1),
create_l1_batch_with_metadata(2),
@@ -158,7 +170,7 @@ fn build_commit_tx_input_data_is_correct(deployment_mode: DeploymentMode) {
#[test]
fn extracting_commit_data_for_boojum_batch() {
- let contract = zksync_contracts::zksync_contract();
+ let contract = zksync_contracts::hyperchain_contract();
let commit_function = contract.function("commitBatches").unwrap();
// Calldata taken from the commit transaction for `https://sepolia.explorer.zksync.io/batch/4470`;
// `https://sepolia.etherscan.io/tx/0x300b9115037028b1f8aa2177abf98148c3df95c9b04f95a4e25baf4dfee7711f`
@@ -188,7 +200,7 @@ fn extracting_commit_data_for_boojum_batch() {
#[test]
fn extracting_commit_data_for_multiple_batches() {
- let contract = zksync_contracts::zksync_contract();
+ let contract = zksync_contracts::hyperchain_contract();
let commit_function = contract.function("commitBatches").unwrap();
// Calldata taken from the commit transaction for `https://explorer.zksync.io/batch/351000`;
// `https://etherscan.io/tx/0xbd8dfe0812df0da534eb95a2d2a4382d65a8172c0b648a147d60c1c2921227fd`
@@ -344,7 +356,7 @@ const SAVE_ACTION_MAPPERS: [(&str, SaveActionMapper); 4] = [
fn l1_batch_commit_log(l1_batch: &L1BatchWithMetadata) -> Log {
static BLOCK_COMMIT_EVENT_HASH: Lazy = Lazy::new(|| {
- zksync_contracts::zksync_contract()
+ zksync_contracts::hyperchain_contract()
.event("BlockCommit")
.unwrap()
.signature()
diff --git a/core/lib/zksync_core/src/eth_sender/eth_tx_aggregator.rs b/core/lib/zksync_core/src/eth_sender/eth_tx_aggregator.rs
index 2ec08cd951e1..65bbb4d02b26 100644
--- a/core/lib/zksync_core/src/eth_sender/eth_tx_aggregator.rs
+++ b/core/lib/zksync_core/src/eth_sender/eth_tx_aggregator.rs
@@ -53,7 +53,7 @@ pub struct EthTxAggregator {
config: SenderConfig,
timelock_contract_address: Address,
l1_multicall3_address: Address,
- pub(super) main_zksync_contract_address: Address,
+ pub(super) state_transition_chain_contract: Address,
functions: ZkSyncFunctions,
base_nonce: u64,
base_nonce_custom_commit_sender: Option,
@@ -81,7 +81,7 @@ impl EthTxAggregator {
eth_client: Arc,
timelock_contract_address: Address,
l1_multicall3_address: Address,
- main_zksync_contract_address: Address,
+ state_transition_chain_contract: Address,
rollup_chain_id: L2ChainId,
custom_commit_sender_addr: Option,
l1_commit_data_generator: Arc,
@@ -109,7 +109,7 @@ impl EthTxAggregator {
eth_client,
timelock_contract_address,
l1_multicall3_address,
- main_zksync_contract_address,
+ state_transition_chain_contract,
functions,
base_nonce,
base_nonce_custom_commit_sender,
@@ -164,7 +164,7 @@ impl EthTxAggregator {
.encode_input(&[])
.unwrap();
let get_bootloader_hash_call = Multicall3Call {
- target: self.main_zksync_contract_address,
+ target: self.state_transition_chain_contract,
allow_failure: ALLOW_FAILURE,
calldata: get_l2_bootloader_hash_input,
};
@@ -176,7 +176,7 @@ impl EthTxAggregator {
.encode_input(&[])
.unwrap();
let get_default_aa_hash_call = Multicall3Call {
- target: self.main_zksync_contract_address,
+ target: self.state_transition_chain_contract,
allow_failure: ALLOW_FAILURE,
calldata: get_l2_default_aa_hash_input,
};
@@ -188,7 +188,7 @@ impl EthTxAggregator {
.encode_input(&[])
.unwrap();
let get_verifier_params_call = Multicall3Call {
- target: self.main_zksync_contract_address,
+ target: self.state_transition_chain_contract,
allow_failure: ALLOW_FAILURE,
calldata: get_verifier_params_input,
};
@@ -196,7 +196,7 @@ impl EthTxAggregator {
// Fourth zksync contract call
let get_verifier_input = self.functions.get_verifier.encode_input(&[]).unwrap();
let get_verifier_call = Multicall3Call {
- target: self.main_zksync_contract_address,
+ target: self.state_transition_chain_contract,
allow_failure: ALLOW_FAILURE,
calldata: get_verifier_input,
};
@@ -208,7 +208,7 @@ impl EthTxAggregator {
.encode_input(&[])
.unwrap();
let get_protocol_version_call = Multicall3Call {
- target: self.main_zksync_contract_address,
+ target: self.state_transition_chain_contract,
allow_failure: ALLOW_FAILURE,
calldata: get_protocol_version_input,
};
diff --git a/core/lib/zksync_core/src/eth_sender/tests.rs b/core/lib/zksync_core/src/eth_sender/tests.rs
index 6cfa56a8e784..15c3708a7285 100644
--- a/core/lib/zksync_core/src/eth_sender/tests.rs
+++ b/core/lib/zksync_core/src/eth_sender/tests.rs
@@ -247,7 +247,7 @@ async fn confirm_many(
.save_eth_tx(
&mut tester.conn.connection().await.unwrap(),
&DUMMY_OPERATION,
- true,
+ false,
)
.await?;
let hash = tester
@@ -332,7 +332,7 @@ async fn resend_each_block(deployment_mode: DeploymentMode) -> anyhow::Result<()
.save_eth_tx(
&mut tester.conn.connection().await.unwrap(),
&DUMMY_OPERATION,
- true,
+ false,
)
.await?;
@@ -437,7 +437,7 @@ async fn dont_resend_already_mined(deployment_mode: DeploymentMode) -> anyhow::R
.save_eth_tx(
&mut tester.conn.connection().await.unwrap(),
&DUMMY_OPERATION,
- true,
+ false,
)
.await
.unwrap();
@@ -519,7 +519,7 @@ async fn three_scenarios(deployment_mode: DeploymentMode) -> anyhow::Result<()>
.save_eth_tx(
&mut tester.conn.connection().await.unwrap(),
&DUMMY_OPERATION,
- true,
+ false,
)
.await
.unwrap();
@@ -596,7 +596,7 @@ async fn failed_eth_tx(deployment_mode: DeploymentMode) {
.save_eth_tx(
&mut tester.conn.connection().await.unwrap(),
&DUMMY_OPERATION,
- true,
+ false,
)
.await
.unwrap();
@@ -1070,7 +1070,7 @@ async fn send_operation(
.save_eth_tx(
&mut tester.conn.connection().await.unwrap(),
&aggregated_operation,
- true,
+ false,
)
.await
.unwrap();
diff --git a/core/lib/zksync_core/src/eth_sender/zksync_functions.rs b/core/lib/zksync_core/src/eth_sender/zksync_functions.rs
index 00ca15707638..8f13f0e63ae8 100644
--- a/core/lib/zksync_core/src/eth_sender/zksync_functions.rs
+++ b/core/lib/zksync_core/src/eth_sender/zksync_functions.rs
@@ -1,4 +1,4 @@
-use zksync_contracts::{multicall_contract, verifier_contract, zksync_contract};
+use zksync_contracts::{hyperchain_contract, multicall_contract, verifier_contract};
use zksync_types::ethabi::{Contract, Function};
#[derive(Debug)]
@@ -42,7 +42,7 @@ fn get_optional_function(contract: &Contract, name: &str) -> Option {
impl Default for ZkSyncFunctions {
fn default() -> Self {
- let zksync_contract = zksync_contract();
+ let zksync_contract = hyperchain_contract();
let verifier_contract = verifier_contract();
let multicall_contract = multicall_contract();
diff --git a/core/lib/zksync_core/src/genesis.rs b/core/lib/zksync_core/src/genesis.rs
index 28936f9b064c..160e167e536c 100644
--- a/core/lib/zksync_core/src/genesis.rs
+++ b/core/lib/zksync_core/src/genesis.rs
@@ -16,7 +16,7 @@ use zksync_contracts::{BaseSystemContracts, BaseSystemContractsHashes, SET_CHAIN
use zksync_dal::{Connection, ConnectionPool, Core, CoreDal, DalError};
use zksync_eth_client::{clients::QueryClient, EthInterface};
use zksync_merkle_tree::domain::ZkSyncTree;
-use zksync_system_constants::PRIORITY_EXPIRATION;
+use zksync_system_constants::{DEFAULT_ERA_CHAIN_ID, PRIORITY_EXPIRATION};
use zksync_types::{
block::{
BlockGasCount, DeployedContract, L1BatchHeader, L1BatchTreeData, L2BlockHasher,
@@ -203,7 +203,6 @@ pub async fn insert_genesis_batch(
create_genesis_l1_batch(
&mut transaction,
- genesis_params.config.l2_chain_id,
genesis_params.protocol_version(),
genesis_params.base_system_contracts(),
genesis_params.system_contracts(),
@@ -340,9 +339,13 @@ async fn insert_base_system_contracts_to_factory_deps(
async fn insert_system_contracts(
storage: &mut Connection<'_, Core>,
contracts: &[DeployedContract],
- chain_id: L2ChainId,
) -> Result<(), GenesisError> {
- let system_context_init_logs = (H256::default(), get_system_context_init_logs(chain_id));
+ let system_context_init_logs = (
+ H256::default(),
+ // During the genesis all chains have the same id.
+ // TODO(EVM-579): make sure that the logic is compatible with Era.
+ get_system_context_init_logs(L2ChainId::from(DEFAULT_ERA_CHAIN_ID)),
+ );
let known_code_storage_logs: Vec<_> = contracts
.iter()
@@ -462,7 +465,6 @@ async fn insert_system_contracts(
#[allow(clippy::too_many_arguments)]
pub(crate) async fn create_genesis_l1_batch(
storage: &mut Connection<'_, Core>,
- chain_id: L2ChainId,
protocol_version: ProtocolVersionId,
base_system_contracts: &BaseSystemContracts,
system_contracts: &[DeployedContract],
@@ -526,7 +528,7 @@ pub(crate) async fn create_genesis_l1_batch(
.await?;
insert_base_system_contracts_to_factory_deps(&mut transaction, base_system_contracts).await?;
- insert_system_contracts(&mut transaction, system_contracts, chain_id).await?;
+ insert_system_contracts(&mut transaction, system_contracts).await?;
add_eth_token(&mut transaction).await?;
transaction.commit().await?;
@@ -597,7 +599,7 @@ pub async fn save_set_chain_id_tx(
let eth_client = QueryClient::new(eth_client_url)?;
let to = eth_client.block_number("fetch_chain_id_tx").await?.as_u64();
- let from = to - PRIORITY_EXPIRATION;
+ let from = to.saturating_sub(PRIORITY_EXPIRATION);
let filter = FilterBuilder::default()
.address(vec![state_transition_manager_address])
.topics(
@@ -618,6 +620,8 @@ pub async fn save_set_chain_id_tx(
);
let (version_id, upgrade_tx) =
decode_set_chain_id_event(logs.remove(0)).context("Chain id event is incorrect")?;
+
+ tracing::info!("New version id {:?}", version_id);
storage
.protocol_versions_dal()
.save_genesis_upgrade_with_tx(version_id, &upgrade_tx)
diff --git a/core/lib/zksync_core/src/lib.rs b/core/lib/zksync_core/src/lib.rs
index fb5840d2534e..f1a078ac8922 100644
--- a/core/lib/zksync_core/src/lib.rs
+++ b/core/lib/zksync_core/src/lib.rs
@@ -546,6 +546,12 @@ pub async fn initialize_components(
tracing::info!("initialized State Keeper in {elapsed:?}");
}
+ let diamond_proxy_addr = contracts_config.diamond_proxy_addr;
+ let state_transition_manager_addr = genesis_config
+ .shared_bridge
+ .as_ref()
+ .map(|a| a.state_transition_proxy_addr);
+
if components.contains(&Component::Consensus) {
let secrets = secrets.consensus.as_ref().context("Secrets are missing")?;
let cfg = consensus::config::main_node(
@@ -578,8 +584,6 @@ pub async fn initialize_components(
tracing::info!("initialized Consensus in {elapsed:?}");
}
- let main_zksync_contract_address = contracts_config.diamond_proxy_addr;
-
if components.contains(&Component::EthWatcher) {
let started_at = Instant::now();
tracing::info!("initializing ETH-Watcher");
@@ -599,7 +603,8 @@ pub async fn initialize_components(
eth_watch_config,
eth_watch_pool,
Arc::new(query_client.clone()),
- main_zksync_contract_address,
+ diamond_proxy_addr,
+ state_transition_manager_addr,
governance,
stop_receiver.clone(),
)
@@ -672,7 +677,7 @@ pub async fn initialize_components(
Arc::new(eth_client),
contracts_config.validator_timelock_addr,
contracts_config.l1_multicall3_addr,
- main_zksync_contract_address,
+ diamond_proxy_addr,
l2_chain_id,
operator_blobs_address,
l1_batch_commit_data_generator,
@@ -849,7 +854,9 @@ async fn add_state_keeper_to_task_futures(
.context("failed to build miniblock_sealer_pool")?;
let (persistence, miniblock_sealer) = StateKeeperPersistence::new(
miniblock_sealer_pool,
- contracts_config.l2_erc20_bridge_addr,
+ contracts_config
+ .l2_shared_bridge_addr
+ .expect("`l2_shared_bridge_addr` config is missing"),
state_keeper_config.l2_block_seal_queue_capacity,
);
task_futures.push(tokio::spawn(miniblock_sealer.run()));
@@ -899,23 +906,26 @@ async fn add_state_keeper_to_task_futures(
Ok(())
}
-async fn start_eth_watch(
+pub async fn start_eth_watch(
config: EthWatchConfig,
pool: ConnectionPool,
eth_gateway: Arc,
diamond_proxy_addr: Address,
+ state_transition_manager_addr: Option,
governance: (Contract, Address),
stop_receiver: watch::Receiver,
) -> anyhow::Result>> {
let eth_client = EthHttpQueryClient::new(
eth_gateway,
diamond_proxy_addr,
+ state_transition_manager_addr,
governance.1,
config.confirmations_for_eth_event,
);
let eth_watch = EthWatch::new(
diamond_proxy_addr,
+ state_transition_manager_addr,
&governance.0,
Box::new(eth_client),
pool,
diff --git a/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs b/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs
index f88350291be8..b70e9dedfeb8 100644
--- a/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs
+++ b/core/lib/zksync_core/src/state_keeper/batch_executor/tests/tester.rs
@@ -18,8 +18,8 @@ use zksync_types::{
block::L2BlockHasher, ethabi::Token, fee::Fee, snapshots::SnapshotRecoveryStatus,
storage_writes_deduplicator::StorageWritesDeduplicator,
system_contracts::get_system_smart_contracts, utils::storage_key_for_standard_token_balance,
- AccountTreeId, Address, Execute, L1BatchNumber, L2BlockNumber, L2ChainId, PriorityOpId,
- ProtocolVersionId, StorageKey, StorageLog, Transaction, H256, L2_ETH_TOKEN_ADDRESS,
+ AccountTreeId, Address, Execute, L1BatchNumber, L2BlockNumber, PriorityOpId, ProtocolVersionId,
+ StorageKey, StorageLog, Transaction, H256, L2_BASE_TOKEN_ADDRESS,
SYSTEM_CONTEXT_MINIMAL_BASE_FEE, U256,
};
use zksync_utils::u256_to_h256;
@@ -39,7 +39,6 @@ use crate::{
};
const DEFAULT_GAS_PER_PUBDATA: u32 = 10000;
-const CHAIN_ID: u32 = 270;
/// Representation of configuration parameters used by the state keeper.
/// Has sensible defaults for most tests, each of which can be overridden.
@@ -241,7 +240,6 @@ impl Tester {
if storage.blocks_dal().is_genesis_needed().await.unwrap() {
create_genesis_l1_batch(
&mut storage,
- L2ChainId::from(CHAIN_ID),
ProtocolVersionId::latest(),
&BASE_SYSTEM_CONTRACTS,
&get_system_smart_contracts(),
@@ -261,7 +259,7 @@ impl Tester {
for address in addresses {
let key = storage_key_for_standard_token_balance(
- AccountTreeId::new(L2_ETH_TOKEN_ADDRESS),
+ AccountTreeId::new(L2_BASE_TOKEN_ADDRESS),
address,
);
let value = u256_to_h256(eth_amount);
diff --git a/core/lib/zksync_core/src/state_keeper/io/persistence.rs b/core/lib/zksync_core/src/state_keeper/io/persistence.rs
index fd8e197fd786..65028906c547 100644
--- a/core/lib/zksync_core/src/state_keeper/io/persistence.rs
+++ b/core/lib/zksync_core/src/state_keeper/io/persistence.rs
@@ -26,7 +26,7 @@ struct Completable {
#[derive(Debug)]
pub struct StateKeeperPersistence {
pool: ConnectionPool,
- l2_erc20_bridge_addr: Address,
+ l2_shared_bridge_addr: Address,
pre_insert_txs: bool,
insert_protective_reads: bool,
commands_sender: mpsc::Sender>,
@@ -42,7 +42,7 @@ impl StateKeeperPersistence {
/// `command_capacity` for unprocessed sealing commands.
pub fn new(
pool: ConnectionPool,
- l2_erc20_bridge_addr: Address,
+ l2_shared_bridge_addr: Address,
mut command_capacity: usize,
) -> (Self, L2BlockSealerTask) {
let is_sync = command_capacity == 0;
@@ -57,7 +57,7 @@ impl StateKeeperPersistence {
};
let this = Self {
pool,
- l2_erc20_bridge_addr,
+ l2_shared_bridge_addr,
pre_insert_txs: false,
insert_protective_reads: true,
commands_sender,
@@ -150,7 +150,7 @@ impl StateKeeperPersistence {
impl StateKeeperOutputHandler for StateKeeperPersistence {
async fn handle_l2_block(&mut self, updates_manager: &UpdatesManager) -> anyhow::Result<()> {
let command =
- updates_manager.seal_l2_block_command(self.l2_erc20_bridge_addr, self.pre_insert_txs);
+ updates_manager.seal_l2_block_command(self.l2_shared_bridge_addr, self.pre_insert_txs);
self.submit_l2_block(command).await;
Ok(())
}
@@ -165,7 +165,7 @@ impl StateKeeperOutputHandler for StateKeeperPersistence {
updates_manager
.seal_l1_batch(
&mut storage,
- self.l2_erc20_bridge_addr,
+ self.l2_shared_bridge_addr,
self.insert_protective_reads,
)
.await
diff --git a/core/lib/zksync_core/src/state_keeper/io/seal_logic.rs b/core/lib/zksync_core/src/state_keeper/io/seal_logic.rs
index 1ad02f183fd4..6d370cbaa570 100644
--- a/core/lib/zksync_core/src/state_keeper/io/seal_logic.rs
+++ b/core/lib/zksync_core/src/state_keeper/io/seal_logic.rs
@@ -43,7 +43,7 @@ impl UpdatesManager {
pub(super) async fn seal_l1_batch(
&self,
storage: &mut Connection<'_, Core>,
- l2_erc20_bridge_addr: Address,
+ l2_shared_bridge_addr: Address,
insert_protective_reads: bool,
) -> anyhow::Result<()> {
let started_at = Instant::now();
@@ -57,7 +57,7 @@ impl UpdatesManager {
let progress = L1_BATCH_METRICS.start(L1BatchSealStage::FictiveL2Block);
// Seal fictive L2 block with last events and storage logs.
let l2_block_command = self.seal_l2_block_command(
- l2_erc20_bridge_addr,
+ l2_shared_bridge_addr,
false, // fictive L2 blocks don't have txs, so it's fine to pass `false` here.
);
l2_block_command
@@ -308,7 +308,7 @@ impl L2BlockSealCommand {
/// the bootloader enters the "tip" phase in which it can still generate events (e.g.,
/// one for sending fees to the operator).
///
- /// `l2_erc20_bridge_addr` is required to extract the information on newly added tokens.
+ /// `l2_shared_bridge_addr` is required to extract the information on newly added tokens.
async fn seal_inner(
&self,
storage: &mut Connection<'_, Core>,
@@ -403,7 +403,7 @@ impl L2BlockSealCommand {
progress.observe(new_factory_deps_count);
let progress = L2_BLOCK_METRICS.start(L2BlockSealStage::ExtractAddedTokens, is_fictive);
- let added_tokens = extract_added_tokens(self.l2_erc20_bridge_addr, &self.l2_block.events);
+ let added_tokens = extract_added_tokens(self.l2_shared_bridge_addr, &self.l2_block.events);
progress.observe(added_tokens.len());
let progress = L2_BLOCK_METRICS.start(L2BlockSealStage::InsertTokens, is_fictive);
let added_tokens_len = added_tokens.len();
diff --git a/core/lib/zksync_core/src/state_keeper/io/tests/mod.rs b/core/lib/zksync_core/src/state_keeper/io/tests/mod.rs
index 80bc607fc708..f440d6ec7921 100644
--- a/core/lib/zksync_core/src/state_keeper/io/tests/mod.rs
+++ b/core/lib/zksync_core/src/state_keeper/io/tests/mod.rs
@@ -275,7 +275,7 @@ async fn processing_storage_logs_when_sealing_l2_block() {
base_fee_per_gas: 10,
base_system_contracts_hashes: BaseSystemContractsHashes::default(),
protocol_version: Some(ProtocolVersionId::latest()),
- l2_erc20_bridge_addr: Address::default(),
+ l2_shared_bridge_addr: Address::default(),
pre_insert_txs: false,
};
let mut conn = connection_pool.connection().await.unwrap();
@@ -358,7 +358,7 @@ async fn processing_events_when_sealing_l2_block() {
base_fee_per_gas: 10,
base_system_contracts_hashes: BaseSystemContractsHashes::default(),
protocol_version: Some(ProtocolVersionId::latest()),
- l2_erc20_bridge_addr: Address::default(),
+ l2_shared_bridge_addr: Address::default(),
pre_insert_txs: false,
};
let mut conn = pool.connection().await.unwrap();
diff --git a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs
index fdfefa1c3a52..528f29b2cd00 100644
--- a/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs
+++ b/core/lib/zksync_core/src/state_keeper/io/tests/tester.rs
@@ -142,7 +142,6 @@ impl Tester {
if storage.blocks_dal().is_genesis_needed().await.unwrap() {
create_genesis_l1_batch(
&mut storage,
- L2ChainId::from(270),
ProtocolVersionId::latest(),
&self.base_system_contracts,
&get_system_smart_contracts(),
diff --git a/core/lib/zksync_core/src/state_keeper/keeper.rs b/core/lib/zksync_core/src/state_keeper/keeper.rs
index aac58d2a977a..0ebac71db87e 100644
--- a/core/lib/zksync_core/src/state_keeper/keeper.rs
+++ b/core/lib/zksync_core/src/state_keeper/keeper.rs
@@ -135,7 +135,6 @@ impl ZkSyncStateKeeper {
let protocol_version = system_env.version;
let mut updates_manager = UpdatesManager::new(&l1_batch_env, &system_env);
-
let mut protocol_upgrade_tx: Option = self
.load_protocol_upgrade_tx(&pending_l2_blocks, protocol_version, l1_batch_env.number)
.await?;
diff --git a/core/lib/zksync_core/src/state_keeper/tests/mod.rs b/core/lib/zksync_core/src/state_keeper/tests/mod.rs
index 5473a24b42c2..8f731d123668 100644
--- a/core/lib/zksync_core/src/state_keeper/tests/mod.rs
+++ b/core/lib/zksync_core/src/state_keeper/tests/mod.rs
@@ -484,6 +484,7 @@ async fn load_upgrade_tx() {
}
/// Unconditionally seal the batch without triggering specific criteria.
+/// TODO(PLA-881): this test can be flaky if run under load.
#[tokio::test]
async fn unconditional_sealing() {
// Trigger to know when to seal the batch.
diff --git a/core/lib/zksync_core/src/state_keeper/updates/mod.rs b/core/lib/zksync_core/src/state_keeper/updates/mod.rs
index 214781dd5d2b..6535b9a3ba17 100644
--- a/core/lib/zksync_core/src/state_keeper/updates/mod.rs
+++ b/core/lib/zksync_core/src/state_keeper/updates/mod.rs
@@ -81,7 +81,7 @@ impl UpdatesManager {
pub(crate) fn seal_l2_block_command(
&self,
- l2_erc20_bridge_addr: Address,
+ l2_shared_bridge_addr: Address,
pre_insert_txs: bool,
) -> L2BlockSealCommand {
L2BlockSealCommand {
@@ -93,7 +93,7 @@ impl UpdatesManager {
base_fee_per_gas: self.base_fee_per_gas,
base_system_contracts_hashes: self.base_system_contract_hashes,
protocol_version: Some(self.protocol_version),
- l2_erc20_bridge_addr,
+ l2_shared_bridge_addr,
pre_insert_txs,
}
}
@@ -189,7 +189,7 @@ pub(crate) struct L2BlockSealCommand {
pub base_fee_per_gas: u64,
pub base_system_contracts_hashes: BaseSystemContractsHashes,
pub protocol_version: Option,
- pub l2_erc20_bridge_addr: Address,
+ pub l2_shared_bridge_addr: Address,
/// Whether transactions should be pre-inserted to DB.
/// Should be set to `true` for EN's IO as EN doesn't store transactions in DB
/// before they are included into L2 blocks.
diff --git a/core/lib/zksync_core/src/sync_layer/external_io.rs b/core/lib/zksync_core/src/sync_layer/external_io.rs
index 0d3f87cbace1..d9744947a7cc 100644
--- a/core/lib/zksync_core/src/sync_layer/external_io.rs
+++ b/core/lib/zksync_core/src/sync_layer/external_io.rs
@@ -311,7 +311,6 @@ impl StateKeeperIO for ExternalIO {
tx.hash()
);
}
-
async fn load_base_system_contracts(
&mut self,
protocol_version: ProtocolVersionId,
diff --git a/core/lib/zksync_core/src/utils/mod.rs b/core/lib/zksync_core/src/utils/mod.rs
index 4574538ef9ea..29f175f4684e 100644
--- a/core/lib/zksync_core/src/utils/mod.rs
+++ b/core/lib/zksync_core/src/utils/mod.rs
@@ -170,8 +170,10 @@ async fn get_pubdata_pricing_mode(
diamond_proxy_address: Address,
eth_client: &dyn EthInterface,
) -> Result, EthClientError> {
- let args = CallFunctionArgs::new("getPubdataPricingMode", ())
- .for_contract(diamond_proxy_address, zksync_contracts::zksync_contract());
+ let args = CallFunctionArgs::new("getPubdataPricingMode", ()).for_contract(
+ diamond_proxy_address,
+ zksync_contracts::state_transition_manager_contract(),
+ );
eth_client.call_contract_function(args).await
}
diff --git a/core/node/block_reverter/src/lib.rs b/core/node/block_reverter/src/lib.rs
index 1645bfbd8b5e..5cffb43e1615 100644
--- a/core/node/block_reverter/src/lib.rs
+++ b/core/node/block_reverter/src/lib.rs
@@ -4,7 +4,7 @@ use bitflags::bitflags;
use serde::Serialize;
use tokio::time::sleep;
use zksync_config::{ContractsConfig, EthConfig};
-use zksync_contracts::zksync_contract;
+use zksync_contracts::hyperchain_contract;
use zksync_dal::{ConnectionPool, Core, CoreDal};
use zksync_eth_signer::{EthereumSigner, PrivateKeySigner, TransactionParameters};
use zksync_merkle_tree::domain::ZkSyncTree;
@@ -339,23 +339,43 @@ impl BlockReverter {
.expect("eth_config is not provided");
let web3 = Web3::new(Http::new(ð_config.eth_client_url).unwrap());
- let contract = zksync_contract();
+ let contract = hyperchain_contract();
let signer = PrivateKeySigner::new(
eth_config
.reverter_private_key
.expect("Private key is required to send revert transaction"),
);
let chain_id = web3.eth().chain_id().await.unwrap().as_u64();
-
- let revert_function = contract
- .function("revertBlocks")
- .or_else(|_| contract.function("revertBatches"))
- .expect(
- "Either `revertBlocks` or `revertBatches` function must be present in contract",
- );
- let data = revert_function
- .encode_input(&[Token::Uint(last_l1_batch_to_keep.0.into())])
- .unwrap();
+ let hyperchain_id = std::env::var("CHAIN_ETH_ZKSYNC_NETWORK_ID")
+ .ok()
+ .and_then(|val| val.parse::().ok())
+ .expect("`CHAIN_ETH_ZKSYNC_NETWORK_ID` has to be set in config");
+ let era_chain_id = std::env::var("CONTRACTS_ERA_CHAIN_ID")
+ .ok()
+ .and_then(|val| val.parse::().ok())
+ .expect("`CONTRACTS_ERA_CHAIN_ID` has to be set in config");
+
+ // It is expected that for all new chains `revertBatchesSharedBridge` can be used.
+ // For Era we are using `revertBatches` function for backwards compatibility in case the migration
+ // to the shared bridge is not yet complete.
+ let data = if hyperchain_id == era_chain_id {
+ let revert_function = contract
+ .function("revertBatches")
+ .expect("`revertBatches` function must be present in contract");
+ revert_function
+ .encode_input(&[Token::Uint(last_l1_batch_to_keep.0.into())])
+ .unwrap()
+ } else {
+ let revert_function = contract
+ .function("revertBatchesSharedBridge")
+ .expect("`revertBatchesSharedBridge` function must be present in contract");
+ revert_function
+ .encode_input(&[
+ Token::Uint(hyperchain_id.into()),
+ Token::Uint(last_l1_batch_to_keep.0.into()),
+ ])
+ .unwrap()
+ };
let base_fee = web3
.eth()
@@ -419,7 +439,7 @@ impl BlockReverter {
let web3 = Web3::new(Http::new(ð_config.eth_client_url).unwrap());
let contract = {
- let abi = zksync_contract();
+ let abi = hyperchain_contract();
let contract_address = eth_config.diamond_proxy_addr;
Contract::new(web3.eth(), contract_address, abi)
};
diff --git a/core/node/eth_watch/src/client.rs b/core/node/eth_watch/src/client.rs
index fc54e0c89d51..04086e12b97e 100644
--- a/core/node/eth_watch/src/client.rs
+++ b/core/node/eth_watch/src/client.rs
@@ -40,8 +40,10 @@ const TOO_MANY_RESULTS_ALCHEMY: &str = "response size exceeded";
pub struct EthHttpQueryClient {
client: Arc,
topics: Vec,
- zksync_contract_addr: Address,
+ diamond_proxy_addr: Address,
governance_address: Address,
+ // Only present for post-shared bridge chains.
+ state_transition_manager_address: Option,
verifier_contract_abi: Contract,
confirmations_for_eth_event: Option,
}
@@ -49,17 +51,21 @@ pub struct EthHttpQueryClient {
impl EthHttpQueryClient {
pub fn new(
client: Arc,
- zksync_contract_addr: Address,
+ diamond_proxy_addr: Address,
+ state_transition_manager_address: Option,
governance_address: Address,
confirmations_for_eth_event: Option,
) -> Self {
tracing::debug!(
- "New eth client, zkSync addr: {zksync_contract_addr:x}, governance addr: {governance_address:?}"
+ "New eth client, zkSync addr: {:x}, governance addr: {:?}",
+ diamond_proxy_addr,
+ governance_address
);
Self {
client,
topics: Vec::new(),
- zksync_contract_addr,
+ diamond_proxy_addr,
+ state_transition_manager_address,
governance_address,
verifier_contract_abi: verifier_contract(),
confirmations_for_eth_event,
@@ -73,7 +79,16 @@ impl EthHttpQueryClient {
topics: Vec,
) -> Result, EthClientError> {
let filter = FilterBuilder::default()
- .address(vec![self.zksync_contract_addr, self.governance_address])
+ .address(
+ [
+ Some(self.diamond_proxy_addr),
+ Some(self.governance_address),
+ self.state_transition_manager_address,
+ ]
+ .into_iter()
+ .flatten()
+ .collect(),
+ )
.from_block(from)
.to_block(to)
.topics(Some(topics), None, None, None)
diff --git a/core/node/eth_watch/src/event_processors/governance_upgrades.rs b/core/node/eth_watch/src/event_processors/governance_upgrades.rs
index c7b92e68c55f..32f91cecaa99 100644
--- a/core/node/eth_watch/src/event_processors/governance_upgrades.rs
+++ b/core/node/eth_watch/src/event_processors/governance_upgrades.rs
@@ -14,7 +14,8 @@ use crate::{
/// Listens to operation events coming from the governance contract and saves new protocol upgrade proposals to the database.
#[derive(Debug)]
pub struct GovernanceUpgradesEventProcessor {
- diamond_proxy_address: Address,
+ // zkSync diamond proxy if pre-shared bridge; state transition manager if post shared bridge.
+ target_contract_address: Address,
/// Last protocol version seen. Used to skip events for already known upgrade proposals.
last_seen_version_id: ProtocolVersionId,
upgrade_proposal_signature: H256,
@@ -22,18 +23,19 @@ pub struct GovernanceUpgradesEventProcessor {
impl GovernanceUpgradesEventProcessor {
pub fn new(
- diamond_proxy_address: Address,
+ target_contract_address: Address,
last_seen_version_id: ProtocolVersionId,
governance_contract: &Contract,
- ) -> anyhow::Result {
- Ok(Self {
- diamond_proxy_address,
+ ) -> Self {
+ Self {
+ target_contract_address,
last_seen_version_id,
upgrade_proposal_signature: governance_contract
.event("TransparentOperationScheduled")
- .context("TransparentOperationScheduled event is missing in ABI")?
+ .context("TransparentOperationScheduled event is missing in ABI")
+ .unwrap()
.signature(),
- })
+ }
}
}
@@ -55,7 +57,7 @@ impl EventProcessor for GovernanceUpgradesEventProcessor {
for call in governance_operation
.calls
.into_iter()
- .filter(|call| call.target == self.diamond_proxy_address)
+ .filter(|call| call.target == self.target_contract_address)
{
// We might not get an upgrade operation here, but something else instead
// (e.g. `acceptGovernor` call), so if parsing doesn't work, just skip the call.
diff --git a/core/node/eth_watch/src/event_processors/priority_ops.rs b/core/node/eth_watch/src/event_processors/priority_ops.rs
index 856e9c0b27ef..25e959033a45 100644
--- a/core/node/eth_watch/src/event_processors/priority_ops.rs
+++ b/core/node/eth_watch/src/event_processors/priority_ops.rs
@@ -1,5 +1,7 @@
-use anyhow::Context as _;
-use zksync_contracts::zksync_contract;
+use std::convert::TryFrom;
+
+use anyhow::Context;
+use zksync_contracts::hyperchain_contract;
use zksync_dal::{Connection, Core, CoreDal, DalError};
use zksync_shared_metrics::{TxStage, APP_METRICS};
use zksync_types::{l1::L1Tx, web3::types::Log, PriorityOpId, H256};
@@ -21,7 +23,7 @@ impl PriorityOpsEventProcessor {
pub fn new(next_expected_priority_id: PriorityOpId) -> anyhow::Result {
Ok(Self {
next_expected_priority_id,
- new_priority_request_signature: zksync_contract()
+ new_priority_request_signature: hyperchain_contract()
.event("NewPriorityRequest")
.context("NewPriorityRequest event is missing in ABI")?
.signature(),
diff --git a/core/node/eth_watch/src/lib.rs b/core/node/eth_watch/src/lib.rs
index 399c0ff31e48..588ae94d9fca 100644
--- a/core/node/eth_watch/src/lib.rs
+++ b/core/node/eth_watch/src/lib.rs
@@ -48,7 +48,8 @@ pub struct EthWatch {
impl EthWatch {
pub async fn new(
- diamond_proxy_address: Address,
+ diamond_proxy_addr: Address,
+ state_transition_manager_address: Option,
governance_contract: &Contract,
mut client: Box,
pool: ConnectionPool,
@@ -62,10 +63,10 @@ impl EthWatch {
let priority_ops_processor =
PriorityOpsEventProcessor::new(state.next_expected_priority_id)?;
let governance_upgrades_processor = GovernanceUpgradesEventProcessor::new(
- diamond_proxy_address,
+ state_transition_manager_address.unwrap_or(diamond_proxy_addr),
state.last_seen_version_id,
governance_contract,
- )?;
+ );
let event_processors: Vec> = vec![
Box::new(priority_ops_processor),
Box::new(governance_upgrades_processor),
diff --git a/core/node/eth_watch/src/tests.rs b/core/node/eth_watch/src/tests.rs
index 281a036f4101..c9ce406ed601 100644
--- a/core/node/eth_watch/src/tests.rs
+++ b/core/node/eth_watch/src/tests.rs
@@ -1,7 +1,7 @@
use std::{collections::HashMap, convert::TryInto, sync::Arc};
use tokio::sync::RwLock;
-use zksync_contracts::{governance_contract, zksync_contract};
+use zksync_contracts::{governance_contract, hyperchain_contract};
use zksync_dal::{Connection, ConnectionPool, Core, CoreDal};
use zksync_types::{
ethabi::{encode, Hash, Token},
@@ -191,6 +191,7 @@ async fn create_test_watcher(connection_pool: ConnectionPool) -> (EthWatch
let client = MockEthClient::new();
let watcher = EthWatch::new(
Address::default(),
+ None,
&governance_contract(),
Box::new(client.clone()),
connection_pool,
@@ -279,6 +280,7 @@ async fn test_normal_operation_governance_upgrades() {
let mut client = MockEthClient::new();
let mut watcher = EthWatch::new(
Address::default(),
+ None,
&governance_contract(),
Box::new(client.clone()),
connection_pool.clone(),
@@ -471,7 +473,7 @@ fn tx_into_log(tx: L1Tx) -> Log {
Log {
address: Address::repeat_byte(0x1),
- topics: vec![zksync_contract()
+ topics: vec![hyperchain_contract()
.event("NewPriorityRequest")
.expect("NewPriorityRequest event is missing in abi")
.signature()],
@@ -489,7 +491,7 @@ fn tx_into_log(tx: L1Tx) -> Log {
fn upgrade_into_governor_log(upgrade: ProtocolUpgrade, eth_block: u64) -> Log {
let diamond_cut = upgrade_into_diamond_cut(upgrade);
- let execute_upgrade_selector = zksync_contract()
+ let execute_upgrade_selector = hyperchain_contract()
.function("executeUpgrade")
.unwrap()
.short_signature();
diff --git a/core/node/node_framework/examples/main_node.rs b/core/node/node_framework/examples/main_node.rs
index 4b9a7e6af6c7..8160fcb6012c 100644
--- a/core/node/node_framework/examples/main_node.rs
+++ b/core/node/node_framework/examples/main_node.rs
@@ -169,6 +169,7 @@ impl MainNodeBuilder {
self.node.add_layer(EthWatchLayer::new(
EthWatchConfig::from_env()?,
ContractsConfig::from_env()?,
+ GenesisConfig::from_env()?,
));
Ok(self)
}
diff --git a/core/node/node_framework/src/implementations/layers/eth_watch.rs b/core/node/node_framework/src/implementations/layers/eth_watch.rs
index 8abe37de11cb..fbc004701018 100644
--- a/core/node/node_framework/src/implementations/layers/eth_watch.rs
+++ b/core/node/node_framework/src/implementations/layers/eth_watch.rs
@@ -1,6 +1,6 @@
use std::time::Duration;
-use zksync_config::{ContractsConfig, EthWatchConfig};
+use zksync_config::{ContractsConfig, EthWatchConfig, GenesisConfig};
use zksync_contracts::governance_contract;
use zksync_dal::{ConnectionPool, Core};
use zksync_eth_watch::{EthHttpQueryClient, EthWatch};
@@ -16,13 +16,19 @@ use crate::{
#[derive(Debug)]
pub struct EthWatchLayer {
eth_watch_config: EthWatchConfig,
+ genesis_config: GenesisConfig,
contracts_config: ContractsConfig,
}
impl EthWatchLayer {
- pub fn new(eth_watch_config: EthWatchConfig, contracts_config: ContractsConfig) -> Self {
+ pub fn new(
+ eth_watch_config: EthWatchConfig,
+ contracts_config: ContractsConfig,
+ genesis_config: GenesisConfig,
+ ) -> Self {
Self {
eth_watch_config,
+ genesis_config,
contracts_config,
}
}
@@ -40,9 +46,18 @@ impl WiringLayer for EthWatchLayer {
let client = context.get_resource::().await?.0;
+ let state_transition_manager_address = self
+ .genesis_config
+ .shared_bridge
+ .as_ref()
+ .map(|a| a.state_transition_proxy_addr);
+
let eth_client = EthHttpQueryClient::new(
client,
self.contracts_config.diamond_proxy_addr,
+ self.genesis_config
+ .shared_bridge
+ .map(|a| a.transparent_proxy_admin_addr),
self.contracts_config.governance_addr,
self.eth_watch_config.confirmations_for_eth_event,
);
@@ -50,6 +65,7 @@ impl WiringLayer for EthWatchLayer {
main_pool,
client: eth_client,
governance_contract: governance_contract(),
+ state_transition_manager_address,
diamond_proxy_address: self.contracts_config.diamond_proxy_addr,
poll_interval: self.eth_watch_config.poll_interval(),
}));
@@ -63,6 +79,7 @@ struct EthWatchTask {
main_pool: ConnectionPool,
client: EthHttpQueryClient,
governance_contract: Contract,
+ state_transition_manager_address: Option,
diamond_proxy_address: Address,
poll_interval: Duration,
}
@@ -76,6 +93,7 @@ impl Task for EthWatchTask {
async fn run(self: Box, stop_receiver: StopReceiver) -> anyhow::Result<()> {
let eth_watch = EthWatch::new(
self.diamond_proxy_address,
+ self.state_transition_manager_address,
&self.governance_contract,
Box::new(self.client),
self.main_pool,
diff --git a/core/node/node_framework/src/implementations/layers/state_keeper/mempool_io.rs b/core/node/node_framework/src/implementations/layers/state_keeper/mempool_io.rs
index 5379bcb06f8b..dfa0ac591302 100644
--- a/core/node/node_framework/src/implementations/layers/state_keeper/mempool_io.rs
+++ b/core/node/node_framework/src/implementations/layers/state_keeper/mempool_io.rs
@@ -86,7 +86,7 @@ impl WiringLayer for MempoolIOLayer {
.get_singleton()
.await
.context("Get master pool")?,
- self.contracts_config.l2_erc20_bridge_addr,
+ self.contracts_config.l2_shared_bridge_addr.unwrap(),
self.state_keeper_config.l2_block_seal_queue_capacity,
);
let output_handler = OutputHandler::new(Box::new(persistence));
diff --git a/core/tests/loadnext/src/sdk/abi/IBridgehub.json b/core/tests/loadnext/src/sdk/abi/IBridgehub.json
new file mode 100644
index 000000000000..415b52468d38
--- /dev/null
+++ b/core/tests/loadnext/src/sdk/abi/IBridgehub.json
@@ -0,0 +1,633 @@
+{
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "NewAdmin",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "stateTransitionManager",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "chainGovernance",
+ "type": "address"
+ }
+ ],
+ "name": "NewChain",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldPendingAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newPendingAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "NewPendingAdmin",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "acceptAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_stateTransitionManager",
+ "type": "address"
+ }
+ ],
+ "name": "addStateTransitionManager",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_token",
+ "type": "address"
+ }
+ ],
+ "name": "addToken",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ }
+ ],
+ "name": "baseToken",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_stateTransitionManager",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_baseToken",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_salt",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_admin",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_initData",
+ "type": "bytes"
+ }
+ ],
+ "name": "createNewChain",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getHyperchain",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_gasPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2GasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2GasPerPubdataByteLimit",
+ "type": "uint256"
+ }
+ ],
+ "name": "l2TransactionBaseCost",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_l2TxHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ },
+ {
+ "internalType": "enum TxStatus",
+ "name": "_status",
+ "type": "uint8"
+ }
+ ],
+ "name": "proveL1ToL2TransactionStatus",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_batchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "l2ShardId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isService",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "txNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "key",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "value",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct L2Log",
+ "name": "_log",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_proof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "proveL2LogInclusion",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_batchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint16",
+ "name": "txNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct L2Message",
+ "name": "_message",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_proof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "proveL2MessageInclusion",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_stateTransitionManager",
+ "type": "address"
+ }
+ ],
+ "name": "removeStateTransitionManager",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "mintValue",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "l2Contract",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "l2Value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "l2Calldata",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "l2GasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "l2GasPerPubdataByteLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "factoryDeps",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "address",
+ "name": "refundRecipient",
+ "type": "address"
+ }
+ ],
+ "internalType": "struct L2TransactionRequestDirect",
+ "name": "_request",
+ "type": "tuple"
+ }
+ ],
+ "name": "requestL2TransactionDirect",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "canonicalTxHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "mintValue",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "l2Value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "l2GasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "l2GasPerPubdataByteLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "refundRecipient",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "secondBridgeAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "secondBridgeValue",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "secondBridgeCalldata",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct L2TransactionRequestTwoBridgesOuter",
+ "name": "_request",
+ "type": "tuple"
+ }
+ ],
+ "name": "requestL2TransactionTwoBridges",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "canonicalTxHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_newPendingAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "setPendingAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sharedBridge",
+ "type": "address"
+ }
+ ],
+ "name": "setSharedBridge",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "sharedBridge",
+ "outputs": [
+ {
+ "internalType": "contract IL1SharedBridge",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ }
+ ],
+ "name": "stateTransitionManager",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_stateTransitionManager",
+ "type": "address"
+ }
+ ],
+ "name": "stateTransitionManagerIsRegistered",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_baseToken",
+ "type": "address"
+ }
+ ],
+ "name": "tokenIsRegistered",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/core/tests/loadnext/src/sdk/abi/IL1Bridge.json b/core/tests/loadnext/src/sdk/abi/IL1Bridge.json
index f0cb575994f5..e69de29bb2d1 100644
--- a/core/tests/loadnext/src/sdk/abi/IL1Bridge.json
+++ b/core/tests/loadnext/src/sdk/abi/IL1Bridge.json
@@ -1,243 +0,0 @@
-{
- "abi": [
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "l1Token",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "ClaimedFailedDeposit",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "from",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "l1Token",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "DepositInitiated",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "to",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "l1Token",
- "type": "address"
- },
- {
- "indexed": false,
- "internalType": "uint256",
- "name": "amount",
- "type": "uint256"
- }
- ],
- "name": "WithdrawalFinalized",
- "type": "event"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_depositSender",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "_l1Token",
- "type": "address"
- },
- {
- "internalType": "bytes32",
- "name": "_l2TxHash",
- "type": "bytes32"
- },
- {
- "internalType": "uint256",
- "name": "_l2BlockNumber",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_l2MessageIndex",
- "type": "uint256"
- },
- {
- "internalType": "uint16",
- "name": "_l2TxNumberInBlock",
- "type": "uint16"
- },
- {
- "internalType": "bytes32[]",
- "name": "_merkleProof",
- "type": "bytes32[]"
- }
- ],
- "name": "claimFailedDeposit",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_l2Receiver",
- "type": "address"
- },
- {
- "internalType": "address",
- "name": "_l1Token",
- "type": "address"
- },
- {
- "internalType": "uint256",
- "name": "_amount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_l2TxGasLimit",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_l2TxGasPerPubdataByte",
- "type": "uint256"
- }
- ],
- "name": "deposit",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "txHash",
- "type": "bytes32"
- }
- ],
- "stateMutability": "payable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_l2BlockNumber",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_l2MessageIndex",
- "type": "uint256"
- },
- {
- "internalType": "uint16",
- "name": "_l2TxNumberInBlock",
- "type": "uint16"
- },
- {
- "internalType": "bytes",
- "name": "_message",
- "type": "bytes"
- },
- {
- "internalType": "bytes32[]",
- "name": "_merkleProof",
- "type": "bytes32[]"
- }
- ],
- "name": "finalizeWithdrawal",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_l2BlockNumber",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_l2MessageIndex",
- "type": "uint256"
- }
- ],
- "name": "isWithdrawalFinalized",
- "outputs": [
- {
- "internalType": "bool",
- "name": "",
- "type": "bool"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "address",
- "name": "_l1Token",
- "type": "address"
- }
- ],
- "name": "l2TokenAddress",
- "outputs": [
- {
- "internalType": "address",
- "name": "",
- "type": "address"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- }
- ]
-}
diff --git a/core/tests/loadnext/src/sdk/abi/IL1ERC20Bridge.json b/core/tests/loadnext/src/sdk/abi/IL1ERC20Bridge.json
new file mode 100644
index 000000000000..3df440cc8505
--- /dev/null
+++ b/core/tests/loadnext/src/sdk/abi/IL1ERC20Bridge.json
@@ -0,0 +1,379 @@
+{
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "ClaimedFailedDeposit",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "l2DepositTxHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "DepositInitiated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "WithdrawalFinalized",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_depositSender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_l2TxHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "claimFailedDeposit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_l2Receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2TxGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2TxGasPerPubdataByte",
+ "type": "uint256"
+ }
+ ],
+ "name": "deposit",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "txHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_l2Receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2TxGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2TxGasPerPubdataByte",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_refundRecipient",
+ "type": "address"
+ }
+ ],
+ "name": "deposit",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "txHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_account",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_depositL2TxHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "depositAmount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_message",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "finalizeWithdrawal",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ }
+ ],
+ "name": "isWithdrawalFinalized",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "l2Bridge",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ }
+ ],
+ "name": "l2TokenAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "l2TokenBeacon",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "sharedBridge",
+ "outputs": [
+ {
+ "internalType": "contract IL1SharedBridge",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferTokenToSharedBridge",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/core/tests/loadnext/src/sdk/abi/IL1SharedBridge.json b/core/tests/loadnext/src/sdk/abi/IL1SharedBridge.json
new file mode 100644
index 000000000000..4c9c884a5a59
--- /dev/null
+++ b/core/tests/loadnext/src/sdk/abi/IL1SharedBridge.json
@@ -0,0 +1,694 @@
+{
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "BridgehubDepositBaseTokenInitiated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "txDataHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "l2DepositTxHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "BridgehubDepositFinalized",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "txDataHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "BridgehubDepositInitiated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "ClaimedFailedDepositSharedBridge",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "l2DepositTxHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "LegacyDepositInitiated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "chainId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "WithdrawalFinalizedSharedBridge",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "bridgehub",
+ "outputs": [
+ {
+ "internalType": "contract IBridgehub",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_txDataHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_txHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "bridgehubConfirmL2Transaction",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_prevMsgSender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2Value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "bridgehubDeposit",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "magicValue",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "address",
+ "name": "l2Contract",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "l2Calldata",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "factoryDeps",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "txDataHash",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct L2TransactionRequestTwoBridgesInner",
+ "name": "request",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_prevMsgSender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "bridgehubDepositBaseToken",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_depositSender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_l2TxHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "claimFailedDeposit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_depositSender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_l2TxHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "claimFailedDepositLegacyErc20Bridge",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_l2TxHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "depositHappened",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_msgSender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l2Receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2TxGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2TxGasPerPubdataByte",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_refundRecipient",
+ "type": "address"
+ }
+ ],
+ "name": "depositLegacyErc20Bridge",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "txHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_message",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "finalizeWithdrawal",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_message",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "finalizeWithdrawalLegacyErc20Bridge",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "l1Receiver",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ }
+ ],
+ "name": "isWithdrawalFinalized",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "l1WethAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ }
+ ],
+ "name": "l2BridgeAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "legacyBridge",
+ "outputs": [
+ {
+ "internalType": "contract IL1ERC20Bridge",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ }
+ ],
+ "name": "receiveEth",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_eraFirstPostUpgradeBatch",
+ "type": "uint256"
+ }
+ ],
+ "name": "setEraFirstPostUpgradeBatch",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/core/tests/loadnext/src/sdk/abi/IStateTransitionManager.json b/core/tests/loadnext/src/sdk/abi/IStateTransitionManager.json
new file mode 100644
index 000000000000..08a23b028965
--- /dev/null
+++ b/core/tests/loadnext/src/sdk/abi/IStateTransitionManager.json
@@ -0,0 +1,1035 @@
+{
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "NewAdmin",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_hyperchainContract",
+ "type": "address"
+ }
+ ],
+ "name": "NewHyperchain",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "oldInitialCutHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "newInitialCutHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "NewInitialCutHash",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldPendingAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newPendingAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "NewPendingAdmin",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "oldProtocolVersion",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "newProtocolVersion",
+ "type": "uint256"
+ }
+ ],
+ "name": "NewProtocolVersion",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "protocolVersion",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "upgradeCutHash",
+ "type": "bytes32"
+ }
+ ],
+ "name": "NewUpgradeCutHash",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldValidatorTimelock",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newValidatorTimelock",
+ "type": "address"
+ }
+ ],
+ "name": "NewValidatorTimelock",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_hyperchain",
+ "type": "address"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "txType",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "from",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "to",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "gasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "gasPerPubdataByteLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxPriorityFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "paymaster",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256[4]",
+ "name": "reserved",
+ "type": "uint256[4]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "factoryDeps",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "paymasterInput",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "reservedDynamic",
+ "type": "bytes"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct L2CanonicalTransaction",
+ "name": "_l2Transaction",
+ "type": "tuple"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "_protocolVersion",
+ "type": "uint256"
+ }
+ ],
+ "name": "SetChainIdUpgrade",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "acceptAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "bridgehub",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum PubdataPricingMode",
+ "name": "pubdataPricingMode",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint32",
+ "name": "batchOverheadL1Gas",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "maxPubdataPerBatch",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "maxL2GasPerBatch",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "priorityTxMaxPubdata",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "minimalL2GasPrice",
+ "type": "uint64"
+ }
+ ],
+ "internalType": "struct FeeParams",
+ "name": "_newFeeParams",
+ "type": "tuple"
+ }
+ ],
+ "name": "changeFeeParams",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_baseToken",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_sharedBridge",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_admin",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_diamondCut",
+ "type": "bytes"
+ }
+ ],
+ "name": "createNewChain",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "_diamondCut",
+ "type": "tuple"
+ }
+ ],
+ "name": "executeUpgrade",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ }
+ ],
+ "name": "freezeChain",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "genesisUpgrade",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ }
+ ],
+ "name": "getChainAdmin",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ }
+ ],
+ "name": "hyperchain",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "initialCutHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "validatorTimelock",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "genesisUpgrade",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "genesisBatchHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "genesisIndexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "genesisBatchCommitment",
+ "type": "bytes32"
+ },
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "diamondCut",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "protocolVersion",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct StateTransitionManagerInitializeData",
+ "name": "_initializeData",
+ "type": "tuple"
+ }
+ ],
+ "name": "initialize",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "protocolVersion",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_protocolVersion",
+ "type": "uint256"
+ }
+ ],
+ "name": "protocolVersionDeadline",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_protocolVersion",
+ "type": "uint256"
+ }
+ ],
+ "name": "protocolVersionIsActive",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_hyperchainContract",
+ "type": "address"
+ }
+ ],
+ "name": "registerAlreadyDeployedHyperchain",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "_diamondCut",
+ "type": "tuple"
+ }
+ ],
+ "name": "setInitialCutHash",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "_cutData",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_oldProtocolVersion",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_oldprotocolVersionDeadline",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_newProtocolVersion",
+ "type": "uint256"
+ }
+ ],
+ "name": "setNewVersionUpgrade",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_newPendingAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "setPendingAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bool",
+ "name": "_zkPorterIsAvailable",
+ "type": "bool"
+ }
+ ],
+ "name": "setPorterAvailability",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_maxGasLimit",
+ "type": "uint256"
+ }
+ ],
+ "name": "setPriorityTxMaxGasLimit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint128",
+ "name": "_nominator",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "_denominator",
+ "type": "uint128"
+ }
+ ],
+ "name": "setTokenMultiplier",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "_cutData",
+ "type": "tuple"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_oldProtocolVersion",
+ "type": "uint256"
+ }
+ ],
+ "name": "setUpgradeDiamondCut",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_validator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_active",
+ "type": "bool"
+ }
+ ],
+ "name": "setValidator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_validatorTimelock",
+ "type": "address"
+ }
+ ],
+ "name": "setValidatorTimelock",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "storedBatchZero",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ }
+ ],
+ "name": "unfreezeChain",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_oldProtocolVersion",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "_diamondCut",
+ "type": "tuple"
+ }
+ ],
+ "name": "upgradeChainFromVersion",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_protocolVersion",
+ "type": "uint256"
+ }
+ ],
+ "name": "upgradeCutHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ]
+}
diff --git a/core/tests/loadnext/src/sdk/abi/IZkSync.json b/core/tests/loadnext/src/sdk/abi/IZkSync.json
index 0d66ed3ff721..f38972b0a40c 100644
--- a/core/tests/loadnext/src/sdk/abi/IZkSync.json
+++ b/core/tests/loadnext/src/sdk/abi/IZkSync.json
@@ -6,13 +6,13 @@
{
"indexed": true,
"internalType": "uint256",
- "name": "blockNumber",
+ "name": "batchNumber",
"type": "uint256"
},
{
"indexed": true,
"internalType": "bytes32",
- "name": "blockHash",
+ "name": "batchHash",
"type": "bytes32"
},
{
@@ -31,13 +31,13 @@
{
"indexed": true,
"internalType": "uint256",
- "name": "blockNumber",
+ "name": "batchNumber",
"type": "uint256"
},
{
"indexed": true,
"internalType": "bytes32",
- "name": "blockHash",
+ "name": "batchHash",
"type": "bytes32"
},
{
@@ -56,19 +56,19 @@
{
"indexed": false,
"internalType": "uint256",
- "name": "totalBlocksCommitted",
+ "name": "totalBatchesCommitted",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
- "name": "totalBlocksVerified",
+ "name": "totalBatchesVerified",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
- "name": "totalBlocksExecuted",
+ "name": "totalBatchesExecuted",
"type": "uint256"
}
],
@@ -81,38 +81,19 @@
{
"indexed": true,
"internalType": "uint256",
- "name": "previousLastVerifiedBlock",
+ "name": "previousLastVerifiedBatch",
"type": "uint256"
},
{
"indexed": true,
"internalType": "uint256",
- "name": "currentLastVerifiedBlock",
+ "name": "currentLastVerifiedBatch",
"type": "uint256"
}
],
"name": "BlocksVerification",
"type": "event"
},
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "uint256",
- "name": "proposalId",
- "type": "uint256"
- },
- {
- "indexed": true,
- "internalType": "bytes32",
- "name": "proposalHash",
- "type": "bytes32"
- }
- ],
- "name": "CancelUpgradeProposal",
- "type": "event"
- },
{
"anonymous": false,
"inputs": [
@@ -136,22 +117,49 @@
"anonymous": false,
"inputs": [
{
- "indexed": true,
- "internalType": "uint256",
- "name": "proposalId",
- "type": "uint256"
- },
- {
- "indexed": true,
- "internalType": "bytes32",
- "name": "proposalHash",
- "type": "bytes32"
- },
- {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
"indexed": false,
- "internalType": "bytes32",
- "name": "proposalSalt",
- "type": "bytes32"
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "diamondCut",
+ "type": "tuple"
}
],
"name": "ExecuteUpgrade",
@@ -182,17 +190,17 @@
{
"indexed": true,
"internalType": "address",
- "name": "oldGovernor",
+ "name": "oldAdmin",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
- "name": "newGovernor",
+ "name": "newAdmin",
"type": "address"
}
],
- "name": "NewGovernor",
+ "name": "NewAdmin",
"type": "event"
},
{
@@ -200,18 +208,18 @@
"inputs": [
{
"indexed": true,
- "internalType": "bytes32",
- "name": "previousBytecodeHash",
- "type": "bytes32"
+ "internalType": "address",
+ "name": "oldGovernor",
+ "type": "address"
},
{
"indexed": true,
- "internalType": "bytes32",
- "name": "newBytecodeHash",
- "type": "bytes32"
+ "internalType": "address",
+ "name": "newGovernor",
+ "type": "address"
}
],
- "name": "NewL2BootloaderBytecodeHash",
+ "name": "NewGovernor",
"type": "event"
},
{
@@ -219,18 +227,18 @@
"inputs": [
{
"indexed": true,
- "internalType": "bytes32",
- "name": "previousBytecodeHash",
- "type": "bytes32"
+ "internalType": "address",
+ "name": "oldPendingAdmin",
+ "type": "address"
},
{
"indexed": true,
- "internalType": "bytes32",
- "name": "newBytecodeHash",
- "type": "bytes32"
+ "internalType": "address",
+ "name": "newPendingAdmin",
+ "type": "address"
}
],
- "name": "NewL2DefaultAccountBytecodeHash",
+ "name": "NewPendingAdmin",
"type": "event"
},
{
@@ -357,7 +365,7 @@
}
],
"indexed": false,
- "internalType": "struct IMailbox.L2CanonicalTransaction",
+ "internalType": "struct L2CanonicalTransaction",
"name": "transaction",
"type": "tuple"
},
@@ -390,97 +398,6 @@
"name": "NewPriorityTxMaxGasLimit",
"type": "event"
},
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "address",
- "name": "oldVerifier",
- "type": "address"
- },
- {
- "indexed": true,
- "internalType": "address",
- "name": "newVerifier",
- "type": "address"
- }
- ],
- "name": "NewVerifier",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "recursionNodeLevelVkHash",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "recursionLeafLevelVkHash",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "recursionCircuitsSetVksHash",
- "type": "bytes32"
- }
- ],
- "indexed": false,
- "internalType": "struct VerifierParams",
- "name": "oldVerifierParams",
- "type": "tuple"
- },
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "recursionNodeLevelVkHash",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "recursionLeafLevelVkHash",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "recursionCircuitsSetVksHash",
- "type": "bytes32"
- }
- ],
- "indexed": false,
- "internalType": "struct VerifierParams",
- "name": "newVerifierParams",
- "type": "tuple"
- }
- ],
- "name": "NewVerifierParams",
- "type": "event"
- },
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "uint256",
- "name": "proposalId",
- "type": "uint256"
- },
- {
- "indexed": true,
- "internalType": "bytes32",
- "name": "proposalHash",
- "type": "bytes32"
- }
- ],
- "name": "ProposeShadowUpgrade",
- "type": "event"
- },
{
"anonymous": false,
"inputs": [
@@ -545,25 +462,6 @@
"name": "ProposeTransparentUpgrade",
"type": "event"
},
- {
- "anonymous": false,
- "inputs": [
- {
- "indexed": true,
- "internalType": "uint256",
- "name": "proposalId",
- "type": "uint256"
- },
- {
- "indexed": true,
- "internalType": "bytes32",
- "name": "proposalHash",
- "type": "bytes32"
- }
- ],
- "name": "SecurityCouncilUpgradeApprove",
- "type": "event"
- },
{
"anonymous": false,
"inputs": [],
@@ -591,20 +489,14 @@
},
{
"inputs": [],
- "name": "acceptGovernor",
+ "name": "acceptAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "_proposedUpgradeHash",
- "type": "bytes32"
- }
- ],
- "name": "cancelUpgradeProposal",
+ "inputs": [],
+ "name": "acceptGovernor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
@@ -615,12 +507,12 @@
"components": [
{
"internalType": "uint64",
- "name": "blockNumber",
+ "name": "batchNumber",
"type": "uint64"
},
{
"internalType": "bytes32",
- "name": "blockHash",
+ "name": "batchHash",
"type": "bytes32"
},
{
@@ -654,15 +546,15 @@
"type": "bytes32"
}
],
- "internalType": "struct IExecutor.StoredBlockInfo",
- "name": "_lastCommittedBlockData",
+ "internalType": "struct IExecutor.StoredBatchInfo",
+ "name": "_lastCommittedBatchData",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint64",
- "name": "blockNumber",
+ "name": "batchNumber",
"type": "uint64"
},
{
@@ -687,42 +579,32 @@
},
{
"internalType": "bytes32",
- "name": "l2LogsTreeRoot",
+ "name": "priorityOperationsHash",
"type": "bytes32"
},
{
"internalType": "bytes32",
- "name": "priorityOperationsHash",
+ "name": "bootloaderHeapInitialContentsHash",
"type": "bytes32"
},
{
- "internalType": "bytes",
- "name": "initialStorageChanges",
- "type": "bytes"
+ "internalType": "bytes32",
+ "name": "eventsQueueStateHash",
+ "type": "bytes32"
},
{
"internalType": "bytes",
- "name": "repeatedStorageChanges",
+ "name": "systemLogs",
"type": "bytes"
},
{
"internalType": "bytes",
- "name": "l2Logs",
+ "name": "totalL2ToL1Pubdata",
"type": "bytes"
- },
- {
- "internalType": "bytes[]",
- "name": "l2ArbitraryLengthMessages",
- "type": "bytes[]"
- },
- {
- "internalType": "bytes[]",
- "name": "factoryDeps",
- "type": "bytes[]"
}
],
- "internalType": "struct IExecutor.CommitBlockInfo[]",
- "name": "_newBlocksData",
+ "internalType": "struct IExecutor.CommitBatchInfo[]",
+ "name": "_newBatchesData",
"type": "tuple[]"
}
],
@@ -737,12 +619,12 @@
"components": [
{
"internalType": "uint64",
- "name": "blockNumber",
+ "name": "batchNumber",
"type": "uint64"
},
{
"internalType": "bytes32",
- "name": "blockHash",
+ "name": "batchHash",
"type": "bytes32"
},
{
@@ -776,8 +658,8 @@
"type": "bytes32"
}
],
- "internalType": "struct IExecutor.StoredBlockInfo[]",
- "name": "_blocksData",
+ "internalType": "struct IExecutor.StoredBatchInfo[]",
+ "name": "_batchesData",
"type": "tuple[]"
}
],
@@ -833,9 +715,9 @@
"type": "tuple"
},
{
- "internalType": "bytes32",
- "name": "_proposalSalt",
- "type": "bytes32"
+ "internalType": "uint256",
+ "name": "_latestProtocolVersion",
+ "type": "uint256"
}
],
"name": "executeUpgrade",
@@ -921,19 +803,9 @@
},
{
"inputs": [
- {
- "internalType": "address",
- "name": "_l1WithdrawReceiver",
- "type": "address"
- },
{
"internalType": "uint256",
- "name": "_amount",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_l2BlockNumber",
+ "name": "_l2BatchNumber",
"type": "uint256"
},
{
@@ -943,9 +815,14 @@
},
{
"internalType": "uint16",
- "name": "_l2TxNumberInBlock",
+ "name": "_l2TxNumberInBatch",
"type": "uint16"
},
+ {
+ "internalType": "bytes",
+ "name": "_message",
+ "type": "bytes"
+ },
{
"internalType": "bytes32[]",
"name": "_merkleProof",
@@ -958,41 +835,79 @@
"type": "function"
},
{
- "inputs": [],
- "name": "freezeDiamond",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getCurrentProposalId",
- "outputs": [
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_sender",
+ "type": "address"
+ },
{
"internalType": "uint256",
- "name": "",
+ "name": "_l2BatchNumber",
"type": "uint256"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [],
- "name": "getFirstUnprocessedPriorityTx",
- "outputs": [
+ },
{
"internalType": "uint256",
- "name": "",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_message",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "finalizeEthWithdrawalBridgehub",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "freezeDiamond",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_protocolVersion",
"type": "uint256"
}
],
+ "name": "freezeNotUpdated",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getAllowList",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
- "name": "getGovernor",
+ "name": "getBridgehub",
"outputs": [
{
"internalType": "address",
@@ -1005,12 +920,12 @@
},
{
"inputs": [],
- "name": "getL2BootloaderBytecodeHash",
+ "name": "getGovernor",
"outputs": [
{
- "internalType": "bytes32",
+ "internalType": "address",
"name": "",
- "type": "bytes32"
+ "type": "address"
}
],
"stateMutability": "view",
@@ -1018,7 +933,7 @@
},
{
"inputs": [],
- "name": "getL2DefaultAccountBytecodeHash",
+ "name": "getL2BootloaderBytecodeHash",
"outputs": [
{
"internalType": "bytes32",
@@ -1031,12 +946,12 @@
},
{
"inputs": [],
- "name": "getPendingGovernor",
+ "name": "getL2DefaultAccountBytecodeHash",
"outputs": [
{
- "internalType": "address",
+ "internalType": "bytes32",
"name": "",
- "type": "address"
+ "type": "bytes32"
}
],
"stateMutability": "view",
@@ -1044,7 +959,7 @@
},
{
"inputs": [],
- "name": "getPriorityQueueSize",
+ "name": "getL2SystemContractsUpgradeBatchNumber",
"outputs": [
{
"internalType": "uint256",
@@ -1057,7 +972,7 @@
},
{
"inputs": [],
- "name": "getProposedUpgradeHash",
+ "name": "getL2SystemContractsUpgradeTxHash",
"outputs": [
{
"internalType": "bytes32",
@@ -1070,12 +985,12 @@
},
{
"inputs": [],
- "name": "getProposedUpgradeTimestamp",
+ "name": "getName",
"outputs": [
{
- "internalType": "uint256",
+ "internalType": "string",
"name": "",
- "type": "uint256"
+ "type": "string"
}
],
"stateMutability": "view",
@@ -1083,7 +998,7 @@
},
{
"inputs": [],
- "name": "getSecurityCouncil",
+ "name": "getPendingGovernor",
"outputs": [
{
"internalType": "address",
@@ -1096,7 +1011,7 @@
},
{
"inputs": [],
- "name": "getTotalBlocksCommitted",
+ "name": "getPriorityTxMaxGasLimit",
"outputs": [
{
"internalType": "uint256",
@@ -1109,7 +1024,7 @@
},
{
"inputs": [],
- "name": "getTotalBlocksExecuted",
+ "name": "getProtocolVersion",
"outputs": [
{
"internalType": "uint256",
@@ -1122,7 +1037,7 @@
},
{
"inputs": [],
- "name": "getTotalBlocksVerified",
+ "name": "getTotalBatchesCommitted",
"outputs": [
{
"internalType": "uint256",
@@ -1135,7 +1050,7 @@
},
{
"inputs": [],
- "name": "getTotalPriorityTxs",
+ "name": "getTotalBatchesExecuted",
"outputs": [
{
"internalType": "uint256",
@@ -1148,12 +1063,12 @@
},
{
"inputs": [],
- "name": "getUpgradeProposalState",
+ "name": "getTotalBatchesVerified",
"outputs": [
{
- "internalType": "enum UpgradeState",
+ "internalType": "uint256",
"name": "",
- "type": "uint8"
+ "type": "uint256"
}
],
"stateMutability": "view",
@@ -1203,21 +1118,83 @@
"type": "function"
},
{
- "inputs": [],
- "name": "getpriorityTxMaxGasLimit",
- "outputs": [
+ "inputs": [
{
"internalType": "uint256",
- "name": "",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_bridgehubChainContract",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_governor",
+ "type": "address"
+ },
+ {
+ "internalType": "contract IAllowList",
+ "name": "_allowList",
+ "type": "address"
+ },
+ {
+ "internalType": "contract Verifier",
+ "name": "_verifier",
+ "type": "address"
+ },
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "recursionNodeLevelVkHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "recursionLeafLevelVkHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "recursionCircuitsSetVksHash",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct VerifierParams",
+ "name": "_verifierParams",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_l2BootloaderBytecodeHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_l2DefaultAccountBytecodeHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "_storedBatchZero",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_priorityTxMaxGasLimit",
"type": "uint256"
}
],
- "stateMutability": "view",
+ "name": "initialize",
+ "outputs": [],
+ "stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
- "name": "isApprovedBySecurityCouncil",
+ "name": "isDiamondStorageFrozen",
"outputs": [
{
"internalType": "bool",
@@ -1229,8 +1206,19 @@
"type": "function"
},
{
- "inputs": [],
- "name": "isDiamondStorageFrozen",
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_batchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ }
+ ],
+ "name": "isEthWithdrawalFinalized",
"outputs": [
{
"internalType": "bool",
@@ -1298,25 +1286,6 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_blockNumber",
- "type": "uint256"
- }
- ],
- "name": "l2LogsRootHash",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "hash",
- "type": "bytes32"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
{
"inputs": [
{
@@ -1346,123 +1315,18 @@
"stateMutability": "view",
"type": "function"
},
- {
- "inputs": [],
- "name": "priorityQueueFrontOperation",
- "outputs": [
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "canonicalTxHash",
- "type": "bytes32"
- },
- {
- "internalType": "uint64",
- "name": "expirationTimestamp",
- "type": "uint64"
- },
- {
- "internalType": "uint192",
- "name": "layer2Tip",
- "type": "uint192"
- }
- ],
- "internalType": "struct PriorityOperation",
- "name": "",
- "type": "tuple"
- }
- ],
- "stateMutability": "view",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "_proposalHash",
- "type": "bytes32"
- },
- {
- "internalType": "uint40",
- "name": "_proposalId",
- "type": "uint40"
- }
- ],
- "name": "proposeShadowUpgrade",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "components": [
- {
- "internalType": "address",
- "name": "facet",
- "type": "address"
- },
- {
- "internalType": "enum Diamond.Action",
- "name": "action",
- "type": "uint8"
- },
- {
- "internalType": "bool",
- "name": "isFreezable",
- "type": "bool"
- },
- {
- "internalType": "bytes4[]",
- "name": "selectors",
- "type": "bytes4[]"
- }
- ],
- "internalType": "struct Diamond.FacetCut[]",
- "name": "facetCuts",
- "type": "tuple[]"
- },
- {
- "internalType": "address",
- "name": "initAddress",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "initCalldata",
- "type": "bytes"
- }
- ],
- "internalType": "struct Diamond.DiamondCutData",
- "name": "_diamondCut",
- "type": "tuple"
- },
- {
- "internalType": "uint40",
- "name": "_proposalId",
- "type": "uint40"
- }
- ],
- "name": "proposeTransparentUpgrade",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
"components": [
{
"internalType": "uint64",
- "name": "blockNumber",
+ "name": "batchNumber",
"type": "uint64"
},
{
"internalType": "bytes32",
- "name": "blockHash",
+ "name": "batchHash",
"type": "bytes32"
},
{
@@ -1496,20 +1360,20 @@
"type": "bytes32"
}
],
- "internalType": "struct IExecutor.StoredBlockInfo",
- "name": "_prevBlock",
+ "internalType": "struct IExecutor.StoredBatchInfo",
+ "name": "_prevBatch",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint64",
- "name": "blockNumber",
+ "name": "batchNumber",
"type": "uint64"
},
{
"internalType": "bytes32",
- "name": "blockHash",
+ "name": "batchHash",
"type": "bytes32"
},
{
@@ -1543,8 +1407,8 @@
"type": "bytes32"
}
],
- "internalType": "struct IExecutor.StoredBlockInfo[]",
- "name": "_committedBlocks",
+ "internalType": "struct IExecutor.StoredBatchInfo[]",
+ "name": "_committedBatches",
"type": "tuple[]"
},
{
@@ -1579,7 +1443,7 @@
},
{
"internalType": "uint256",
- "name": "_l2BlockNumber",
+ "name": "_l2BatchNumber",
"type": "uint256"
},
{
@@ -1589,7 +1453,7 @@
},
{
"internalType": "uint16",
- "name": "_l2TxNumberInBlock",
+ "name": "_l2TxNumberInBatch",
"type": "uint16"
},
{
@@ -1618,7 +1482,7 @@
"inputs": [
{
"internalType": "uint256",
- "name": "_blockNumber",
+ "name": "_batchNumber",
"type": "uint256"
},
{
@@ -1640,7 +1504,7 @@
},
{
"internalType": "uint16",
- "name": "txNumberInBlock",
+ "name": "txNumberInBatch",
"type": "uint16"
},
{
@@ -1684,7 +1548,7 @@
"inputs": [
{
"internalType": "uint256",
- "name": "_blockNumber",
+ "name": "_batchNumber",
"type": "uint256"
},
{
@@ -1696,7 +1560,7 @@
"components": [
{
"internalType": "uint16",
- "name": "txNumberInBlock",
+ "name": "txNumberInBatch",
"type": "uint16"
},
{
@@ -1784,50 +1648,24 @@
"inputs": [
{
"internalType": "uint256",
- "name": "_newLastBlock",
- "type": "uint256"
- }
- ],
- "name": "revertBlocks",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "bytes32",
- "name": "_upgradeProposalHash",
- "type": "bytes32"
- }
- ],
- "name": "securityCouncilUpgradeApprove",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "internalType": "uint256",
- "name": "_txId",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "_l2Value",
+ "name": "_msgValue",
"type": "uint256"
},
{
"internalType": "address",
- "name": "_sender",
+ "name": "sender",
"type": "address"
},
{
"internalType": "address",
- "name": "_contractAddressL2",
+ "name": "_contractL2",
"type": "address"
},
+ {
+ "internalType": "uint256",
+ "name": "_l2Value",
+ "type": "uint256"
+ },
{
"internalType": "bytes",
"name": "_calldata",
@@ -1848,119 +1686,118 @@
"name": "_factoryDeps",
"type": "bytes[]"
},
- {
- "internalType": "uint256",
- "name": "_toMint",
- "type": "uint256"
- },
{
"internalType": "address",
"name": "_refundRecipient",
"type": "address"
}
],
- "name": "serializeL2Transaction",
+ "name": "requestL2TransactionBridgehub",
"outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "canonicalTxHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
{
"components": [
{
- "internalType": "uint256",
- "name": "txType",
- "type": "uint256"
- },
- {
- "internalType": "uint256",
- "name": "from",
- "type": "uint256"
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
},
{
"internalType": "uint256",
- "name": "to",
+ "name": "txId",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "gasLimit",
+ "name": "l2Value",
"type": "uint256"
},
{
- "internalType": "uint256",
- "name": "gasPerPubdataByteLimit",
- "type": "uint256"
+ "internalType": "address",
+ "name": "contractAddressL2",
+ "type": "address"
},
{
- "internalType": "uint256",
- "name": "maxFeePerGas",
- "type": "uint256"
+ "internalType": "uint64",
+ "name": "expirationTimestamp",
+ "type": "uint64"
},
{
"internalType": "uint256",
- "name": "maxPriorityFeePerGas",
+ "name": "l2GasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "paymaster",
+ "name": "l2GasPrice",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "nonce",
+ "name": "l2GasPricePerPubdata",
"type": "uint256"
},
{
"internalType": "uint256",
- "name": "value",
+ "name": "valueToMint",
"type": "uint256"
},
{
- "internalType": "uint256[4]",
- "name": "reserved",
- "type": "uint256[4]"
- },
- {
- "internalType": "bytes",
- "name": "data",
- "type": "bytes"
- },
- {
- "internalType": "bytes",
- "name": "signature",
- "type": "bytes"
- },
- {
- "internalType": "uint256[]",
- "name": "factoryDeps",
- "type": "uint256[]"
- },
- {
- "internalType": "bytes",
- "name": "paymasterInput",
- "type": "bytes"
- },
- {
- "internalType": "bytes",
- "name": "reservedDynamic",
- "type": "bytes"
+ "internalType": "address",
+ "name": "refundRecipient",
+ "type": "address"
}
],
- "internalType": "struct IMailbox.L2CanonicalTransaction",
- "name": "",
+ "internalType": "struct WritePriorityOpParams",
+ "name": "_params",
"type": "tuple"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_calldata",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "_factoryDeps",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "bool",
+ "name": "_isFree",
+ "type": "bool"
+ }
+ ],
+ "name": "requestL2TransactionProof",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "canonicalTxHash",
+ "type": "bytes32"
}
],
- "stateMutability": "pure",
+ "stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
- "internalType": "bytes32",
- "name": "_l2BootloaderBytecodeHash",
- "type": "bytes32"
+ "internalType": "uint256",
+ "name": "_newLastBatch",
+ "type": "uint256"
}
],
- "name": "setL2BootloaderBytecodeHash",
+ "name": "revertBatches",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
@@ -1968,12 +1805,12 @@
{
"inputs": [
{
- "internalType": "bytes32",
- "name": "_l2DefaultAccountBytecodeHash",
- "type": "bytes32"
+ "internalType": "address",
+ "name": "_newPendingAdmin",
+ "type": "address"
}
],
- "name": "setL2DefaultAccountBytecodeHash",
+ "name": "setPendingAdmin",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
@@ -2035,58 +1872,15 @@
"stateMutability": "nonpayable",
"type": "function"
},
- {
- "inputs": [
- {
- "internalType": "contract Verifier",
- "name": "_newVerifier",
- "type": "address"
- }
- ],
- "name": "setVerifier",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "internalType": "bytes32",
- "name": "recursionNodeLevelVkHash",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "recursionLeafLevelVkHash",
- "type": "bytes32"
- },
- {
- "internalType": "bytes32",
- "name": "recursionCircuitsSetVksHash",
- "type": "bytes32"
- }
- ],
- "internalType": "struct VerifierParams",
- "name": "_newVerifierParams",
- "type": "tuple"
- }
- ],
- "name": "setVerifierParams",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
- },
{
"inputs": [
{
"internalType": "uint256",
- "name": "_blockNumber",
+ "name": "_batchNumber",
"type": "uint256"
}
],
- "name": "storedBlockHash",
+ "name": "storedBatchHash",
"outputs": [
{
"internalType": "bytes32",
@@ -2103,74 +1897,6 @@
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
- },
- {
- "inputs": [
- {
- "components": [
- {
- "components": [
- {
- "internalType": "address",
- "name": "facet",
- "type": "address"
- },
- {
- "internalType": "enum Diamond.Action",
- "name": "action",
- "type": "uint8"
- },
- {
- "internalType": "bool",
- "name": "isFreezable",
- "type": "bool"
- },
- {
- "internalType": "bytes4[]",
- "name": "selectors",
- "type": "bytes4[]"
- }
- ],
- "internalType": "struct Diamond.FacetCut[]",
- "name": "facetCuts",
- "type": "tuple[]"
- },
- {
- "internalType": "address",
- "name": "initAddress",
- "type": "address"
- },
- {
- "internalType": "bytes",
- "name": "initCalldata",
- "type": "bytes"
- }
- ],
- "internalType": "struct Diamond.DiamondCutData",
- "name": "_diamondCut",
- "type": "tuple"
- },
- {
- "internalType": "uint256",
- "name": "_proposalId",
- "type": "uint256"
- },
- {
- "internalType": "bytes32",
- "name": "_salt",
- "type": "bytes32"
- }
- ],
- "name": "upgradeProposalHash",
- "outputs": [
- {
- "internalType": "bytes32",
- "name": "",
- "type": "bytes32"
- }
- ],
- "stateMutability": "pure",
- "type": "function"
}
]
}
diff --git a/core/tests/loadnext/src/sdk/abi/IZkSyncHyperchain.json b/core/tests/loadnext/src/sdk/abi/IZkSyncHyperchain.json
new file mode 100644
index 000000000000..504434c0c629
--- /dev/null
+++ b/core/tests/loadnext/src/sdk/abi/IZkSyncHyperchain.json
@@ -0,0 +1,2405 @@
+{
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "batchNumber",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "name": "BlockCommit",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "batchNumber",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "name": "BlockExecution",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "totalBatchesCommitted",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "totalBatchesVerified",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "totalBatchesExecuted",
+ "type": "uint256"
+ }
+ ],
+ "name": "BlocksRevert",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "previousLastVerifiedBatch",
+ "type": "uint256"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "currentLastVerifiedBatch",
+ "type": "uint256"
+ }
+ ],
+ "name": "BlocksVerification",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "EthWithdrawalFinalized",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "diamondCut",
+ "type": "tuple"
+ }
+ ],
+ "name": "ExecuteUpgrade",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [],
+ "name": "Freeze",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isPorterAvailable",
+ "type": "bool"
+ }
+ ],
+ "name": "IsPorterAvailableStatusUpdate",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "NewAdmin",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint128",
+ "name": "oldNominator",
+ "type": "uint128"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint128",
+ "name": "oldDenominator",
+ "type": "uint128"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint128",
+ "name": "newNominator",
+ "type": "uint128"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint128",
+ "name": "newDenominator",
+ "type": "uint128"
+ }
+ ],
+ "name": "NewBaseTokenMultiplier",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum PubdataPricingMode",
+ "name": "pubdataPricingMode",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint32",
+ "name": "batchOverheadL1Gas",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "maxPubdataPerBatch",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "maxL2GasPerBatch",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "priorityTxMaxPubdata",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "minimalL2GasPrice",
+ "type": "uint64"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct FeeParams",
+ "name": "oldFeeParams",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "enum PubdataPricingMode",
+ "name": "pubdataPricingMode",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint32",
+ "name": "batchOverheadL1Gas",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "maxPubdataPerBatch",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "maxL2GasPerBatch",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "priorityTxMaxPubdata",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "minimalL2GasPrice",
+ "type": "uint64"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct FeeParams",
+ "name": "newFeeParams",
+ "type": "tuple"
+ }
+ ],
+ "name": "NewFeeParams",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "oldPendingAdmin",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newPendingAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "NewPendingAdmin",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "txId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes32",
+ "name": "txHash",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint64",
+ "name": "expirationTimestamp",
+ "type": "uint64"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "txType",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "from",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "to",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "gasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "gasPerPubdataByteLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxPriorityFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "paymaster",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256[4]",
+ "name": "reserved",
+ "type": "uint256[4]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "factoryDeps",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "bytes",
+ "name": "paymasterInput",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "reservedDynamic",
+ "type": "bytes"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct L2CanonicalTransaction",
+ "name": "transaction",
+ "type": "tuple"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes[]",
+ "name": "factoryDeps",
+ "type": "bytes[]"
+ }
+ ],
+ "name": "NewPriorityRequest",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "oldPriorityTxMaxGasLimit",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "newPriorityTxMaxGasLimit",
+ "type": "uint256"
+ }
+ ],
+ "name": "NewPriorityTxMaxGasLimit",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "oldTransactionFilterer",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "newTransactionFilterer",
+ "type": "address"
+ }
+ ],
+ "name": "NewTransactionFilterer",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "indexed": false,
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "diamondCut",
+ "type": "tuple"
+ },
+ {
+ "indexed": true,
+ "internalType": "uint256",
+ "name": "proposalId",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes32",
+ "name": "proposalSalt",
+ "type": "bytes32"
+ }
+ ],
+ "name": "ProposeTransparentUpgrade",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [],
+ "name": "Unfreeze",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "validatorAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "bool",
+ "name": "isActive",
+ "type": "bool"
+ }
+ ],
+ "name": "ValidatorStatusUpdate",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "enum PubdataPricingMode",
+ "name": "validiumMode",
+ "type": "uint8"
+ }
+ ],
+ "name": "ValidiumModeStatusUpdate",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "acceptAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "baseTokenGasPriceMultiplierDenominator",
+ "outputs": [
+ {
+ "internalType": "uint128",
+ "name": "",
+ "type": "uint128"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "baseTokenGasPriceMultiplierNominator",
+ "outputs": [
+ {
+ "internalType": "uint128",
+ "name": "",
+ "type": "uint128"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "contractL2",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "mintValue",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "l2Value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "l2Calldata",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "l2GasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "l2GasPerPubdataByteLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "factoryDeps",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "address",
+ "name": "refundRecipient",
+ "type": "address"
+ }
+ ],
+ "internalType": "struct BridgehubL2TransactionRequest",
+ "name": "_request",
+ "type": "tuple"
+ }
+ ],
+ "name": "bridgehubRequestL2Transaction",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "canonicalTxHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "enum PubdataPricingMode",
+ "name": "pubdataPricingMode",
+ "type": "uint8"
+ },
+ {
+ "internalType": "uint32",
+ "name": "batchOverheadL1Gas",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "maxPubdataPerBatch",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "maxL2GasPerBatch",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint32",
+ "name": "priorityTxMaxPubdata",
+ "type": "uint32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "minimalL2GasPrice",
+ "type": "uint64"
+ }
+ ],
+ "internalType": "struct FeeParams",
+ "name": "_newFeeParams",
+ "type": "tuple"
+ }
+ ],
+ "name": "changeFeeParams",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "l2LogsTreeRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct IExecutor.StoredBatchInfo",
+ "name": "_lastCommittedBatchData",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint64",
+ "name": "timestamp",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "newStateRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "bootloaderHeapInitialContentsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "eventsQueueStateHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes",
+ "name": "systemLogs",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "pubdataCommitments",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct IExecutor.CommitBatchInfo[]",
+ "name": "_newBatchesData",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "commitBatches",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "l2LogsTreeRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct IExecutor.StoredBatchInfo",
+ "name": "_lastCommittedBatchData",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint64",
+ "name": "timestamp",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "newStateRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "bootloaderHeapInitialContentsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "eventsQueueStateHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes",
+ "name": "systemLogs",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "pubdataCommitments",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct IExecutor.CommitBatchInfo[]",
+ "name": "_newBatchesData",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "commitBatchesSharedBridge",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "l2LogsTreeRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct IExecutor.StoredBatchInfo[]",
+ "name": "_batchesData",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "executeBatches",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "l2LogsTreeRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct IExecutor.StoredBatchInfo[]",
+ "name": "_batchesData",
+ "type": "tuple[]"
+ }
+ ],
+ "name": "executeBatchesSharedBridge",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "_diamondCut",
+ "type": "tuple"
+ }
+ ],
+ "name": "executeUpgrade",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "_selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "facetAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "facetAddresses",
+ "outputs": [
+ {
+ "internalType": "address[]",
+ "name": "facets",
+ "type": "address[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_facet",
+ "type": "address"
+ }
+ ],
+ "name": "facetFunctionSelectors",
+ "outputs": [
+ {
+ "internalType": "bytes4[]",
+ "name": "",
+ "type": "bytes4[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "facets",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "addr",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct IGetters.Facet[]",
+ "name": "",
+ "type": "tuple[]"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_message",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "finalizeEthWithdrawal",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "freezeDiamond",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getAdmin",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getBaseToken",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getBaseTokenBridge",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getBridgehub",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getFirstUnprocessedPriorityTx",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getL2BootloaderBytecodeHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getL2DefaultAccountBytecodeHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getL2SystemContractsUpgradeBatchNumber",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getL2SystemContractsUpgradeTxHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getName",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPendingAdmin",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPriorityQueueSize",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPriorityTxMaxGasLimit",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getProtocolVersion",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getPubdataPricingMode",
+ "outputs": [
+ {
+ "internalType": "enum PubdataPricingMode",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getStateTransitionManager",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getTotalBatchesCommitted",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getTotalBatchesExecuted",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getTotalBatchesVerified",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getTotalPriorityTxs",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getVerifier",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getVerifierParams",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "recursionNodeLevelVkHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "recursionLeafLevelVkHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "recursionCircuitsSetVksHash",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct VerifierParams",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isDiamondStorageFrozen",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ }
+ ],
+ "name": "isEthWithdrawalFinalized",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_facet",
+ "type": "address"
+ }
+ ],
+ "name": "isFacetFreezable",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "_selector",
+ "type": "bytes4"
+ }
+ ],
+ "name": "isFunctionFreezable",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_address",
+ "type": "address"
+ }
+ ],
+ "name": "isValidator",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_batchNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "l2LogsRootHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "merkleRoot",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_gasPrice",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2GasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2GasPerPubdataByteLimit",
+ "type": "uint256"
+ }
+ ],
+ "name": "l2TransactionBaseCost",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "priorityQueueFrontOperation",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "bytes32",
+ "name": "canonicalTxHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "expirationTimestamp",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint192",
+ "name": "layer2Tip",
+ "type": "uint192"
+ }
+ ],
+ "internalType": "struct PriorityOperation",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "l2LogsTreeRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct IExecutor.StoredBatchInfo",
+ "name": "_prevBatch",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "l2LogsTreeRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct IExecutor.StoredBatchInfo[]",
+ "name": "_committedBatches",
+ "type": "tuple[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256[]",
+ "name": "recursiveAggregationInput",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "serializedProof",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct IExecutor.ProofInput",
+ "name": "_proof",
+ "type": "tuple"
+ }
+ ],
+ "name": "proveBatches",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "l2LogsTreeRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct IExecutor.StoredBatchInfo",
+ "name": "_prevBatch",
+ "type": "tuple"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint64",
+ "name": "batchNumber",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "batchHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint64",
+ "name": "indexRepeatedStorageChanges",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "numberOfLayer1Txs",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "priorityOperationsHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "l2LogsTreeRoot",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "timestamp",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "commitment",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct IExecutor.StoredBatchInfo[]",
+ "name": "_committedBatches",
+ "type": "tuple[]"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint256[]",
+ "name": "recursiveAggregationInput",
+ "type": "uint256[]"
+ },
+ {
+ "internalType": "uint256[]",
+ "name": "serializedProof",
+ "type": "uint256[]"
+ }
+ ],
+ "internalType": "struct IExecutor.ProofInput",
+ "name": "_proof",
+ "type": "tuple"
+ }
+ ],
+ "name": "proveBatchesSharedBridge",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "_l2TxHash",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2BatchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2MessageIndex",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_l2TxNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_merkleProof",
+ "type": "bytes32[]"
+ },
+ {
+ "internalType": "enum TxStatus",
+ "name": "_status",
+ "type": "uint8"
+ }
+ ],
+ "name": "proveL1ToL2TransactionStatus",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_batchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint8",
+ "name": "l2ShardId",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isService",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint16",
+ "name": "txNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "key",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "value",
+ "type": "bytes32"
+ }
+ ],
+ "internalType": "struct L2Log",
+ "name": "_log",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_proof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "proveL2LogInclusion",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_batchNumber",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_index",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "internalType": "uint16",
+ "name": "txNumberInBatch",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "data",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct L2Message",
+ "name": "_message",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes32[]",
+ "name": "_proof",
+ "type": "bytes32[]"
+ }
+ ],
+ "name": "proveL2MessageInclusion",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_contractL2",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2Value",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_calldata",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2GasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_l2GasPerPubdataByteLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes[]",
+ "name": "_factoryDeps",
+ "type": "bytes[]"
+ },
+ {
+ "internalType": "address",
+ "name": "_refundRecipient",
+ "type": "address"
+ }
+ ],
+ "name": "requestL2Transaction",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "canonicalTxHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_newLastBatch",
+ "type": "uint256"
+ }
+ ],
+ "name": "revertBatches",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_chainId",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_newLastBatch",
+ "type": "uint256"
+ }
+ ],
+ "name": "revertBatchesSharedBridge",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_newPendingAdmin",
+ "type": "address"
+ }
+ ],
+ "name": "setPendingAdmin",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bool",
+ "name": "_zkPorterIsAvailable",
+ "type": "bool"
+ }
+ ],
+ "name": "setPorterAvailability",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_newPriorityTxMaxGasLimit",
+ "type": "uint256"
+ }
+ ],
+ "name": "setPriorityTxMaxGasLimit",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "enum PubdataPricingMode",
+ "name": "_pricingMode",
+ "type": "uint8"
+ }
+ ],
+ "name": "setPubdataPricingMode",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint128",
+ "name": "_nominator",
+ "type": "uint128"
+ },
+ {
+ "internalType": "uint128",
+ "name": "_denominator",
+ "type": "uint128"
+ }
+ ],
+ "name": "setTokenMultiplier",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_transactionFilterer",
+ "type": "address"
+ }
+ ],
+ "name": "setTransactionFilterer",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_validator",
+ "type": "address"
+ },
+ {
+ "internalType": "bool",
+ "name": "_active",
+ "type": "bool"
+ }
+ ],
+ "name": "setValidator",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_batchNumber",
+ "type": "uint256"
+ }
+ ],
+ "name": "storedBatchHash",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "transferEthToSharedBridge",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "unfreezeDiamond",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_protocolVersion",
+ "type": "uint256"
+ },
+ {
+ "components": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "facet",
+ "type": "address"
+ },
+ {
+ "internalType": "enum Diamond.Action",
+ "name": "action",
+ "type": "uint8"
+ },
+ {
+ "internalType": "bool",
+ "name": "isFreezable",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes4[]",
+ "name": "selectors",
+ "type": "bytes4[]"
+ }
+ ],
+ "internalType": "struct Diamond.FacetCut[]",
+ "name": "facetCuts",
+ "type": "tuple[]"
+ },
+ {
+ "internalType": "address",
+ "name": "initAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCalldata",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct Diamond.DiamondCutData",
+ "name": "_cutData",
+ "type": "tuple"
+ }
+ ],
+ "name": "upgradeChainFromVersion",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ]
+}
diff --git a/core/tests/loadnext/src/sdk/abi/update-abi.sh b/core/tests/loadnext/src/sdk/abi/update-abi.sh
index ad1ec3f79be1..35d03a469dfd 100755
--- a/core/tests/loadnext/src/sdk/abi/update-abi.sh
+++ b/core/tests/loadnext/src/sdk/abi/update-abi.sh
@@ -3,8 +3,11 @@
cd `dirname $0`
# Main zkSync contract interface
-cat $ZKSYNC_HOME/contracts/l1-contracts/artifacts/cache/solpp-generated-contracts/zksync/interfaces/IZkSync.sol/IZkSync.json | jq '{ abi: .abi}' > ZkSync.json
+cat $ZKSYNC_HOME/contracts/l1-contracts/artifacts/contracts/bridgehub/IBridgehub.sol/IBridgehub.json | jq '{ abi: .abi}' > IBridgehub.json
+cat $ZKSYNC_HOME/contracts/l1-contracts/artifacts/contracts/state-transition/IStateTransitionManager.sol/IStateTransitionManager.json | jq '{ abi: .abi}' > IStateTransitionManager.json
+cat $ZKSYNC_HOME/contracts/l1-contracts/artifacts/contracts/state-transition/chain-interfaces/IZkSyncHyperchain.sol/IZkSyncHyperchain.json | jq '{ abi: .abi}' > IZkSyncHyperchain.json
# Default L1 bridge
-cat $ZKSYNC_HOME/contracts/l1-contracts/artifacts/cache/solpp-generated-contracts/bridge/interfaces/IL1Bridge.sol/IL1Bridge.json | jq '{ abi: .abi}' > L1Bridge.json
+cat $ZKSYNC_HOME/contracts/l1-contracts/artifacts/contracts/bridge/interfaces/IL1SharedBridge.sol/IL1SharedBridge.json | jq '{ abi: .abi}' > IL1SharedBridge.json
+cat $ZKSYNC_HOME/contracts/l1-contracts/artifacts/contracts/bridge/interfaces/IL1ERC20Bridge.sol/IL1ERC20Bridge.json | jq '{ abi: .abi}' > IL1ERC20Bridge.json
# Paymaster interface
-cat $ZKSYNC_HOME/contracts/l2-contracts/artifacts-zk/contracts-preprocessed/interfaces/IPaymasterFlow.sol/IPaymasterFlow.json | jq '{ abi: .abi}' > IPaymasterFlow.json
+cat $ZKSYNC_HOME/contracts/l2-contracts/artifacts-zk/contracts/interfaces/IPaymasterFlow.sol/IPaymasterFlow.json | jq '{ abi: .abi}' > IPaymasterFlow.json
diff --git a/core/tests/loadnext/src/sdk/ethereum/mod.rs b/core/tests/loadnext/src/sdk/ethereum/mod.rs
index b851889a2f9b..edca3d8f9c09 100644
--- a/core/tests/loadnext/src/sdk/ethereum/mod.rs
+++ b/core/tests/loadnext/src/sdk/ethereum/mod.rs
@@ -32,17 +32,17 @@ use crate::sdk::{
};
const IERC20_INTERFACE: &str = include_str!("../abi/IERC20.json");
-const ZKSYNC_INTERFACE: &str = include_str!("../abi/IZkSync.json");
-const L1_DEFAULT_BRIDGE_INTERFACE: &str = include_str!("../abi/IL1Bridge.json");
+const HYPERCHAIN_INTERFACE: &str = include_str!("../abi/IZkSyncHyperchain.json");
+const L1_ERC20_BRIDGE_INTERFACE: &str = include_str!("../abi/IL1ERC20Bridge.json");
const RAW_ERC20_DEPOSIT_GAS_LIMIT: &str = include_str!("DepositERC20GasLimit.json");
// The `gasPerPubdata` to be used in L1->L2 requests. It may be almost any number, but here we 800
// as an optimal one. In the future, it will be estimated.
const L1_TO_L2_GAS_PER_PUBDATA: u32 = 800;
-/// Returns `ethabi::Contract` object for zkSync smart contract.
-pub fn zksync_contract() -> ethabi::Contract {
- load_contract(ZKSYNC_INTERFACE)
+/// Returns `ethabi::Contract` object for an interface of a hyperchain
+pub fn hyperchain_contract() -> ethabi::Contract {
+ load_contract(HYPERCHAIN_INTERFACE)
}
/// Returns `ethabi::Contract` object for ERC-20 smart contract interface.
@@ -50,9 +50,8 @@ pub fn ierc20_contract() -> ethabi::Contract {
load_contract(IERC20_INTERFACE)
}
-/// Returns `ethabi::Contract` object for L1 Bridge smart contract interface.
-pub fn l1_bridge_contract() -> ethabi::Contract {
- load_contract(L1_DEFAULT_BRIDGE_INTERFACE)
+pub fn l1_erc20_bridge_contract() -> ethabi::Contract {
+ load_contract(L1_ERC20_BRIDGE_INTERFACE)
}
/// `EthereumProvider` gains access to on-chain operations, such as deposits and full exits.
@@ -64,7 +63,7 @@ pub struct EthereumProvider {
eth_client: SigningClient,
default_bridges: BridgeAddresses,
erc20_abi: ethabi::Contract,
- l1_bridge_abi: ethabi::Contract,
+ l1_erc20_bridge_abi: ethabi::Contract,
confirmation_timeout: Duration,
polling_interval: Duration,
}
@@ -102,7 +101,7 @@ impl EthereumProvider {
let eth_client = SigningClient::new(
transport,
- zksync_contract(),
+ hyperchain_contract(),
eth_addr,
eth_signer,
contract_address,
@@ -110,13 +109,13 @@ impl EthereumProvider {
L1ChainId(l1_chain_id),
);
let erc20_abi = ierc20_contract();
- let l1_bridge_abi = l1_bridge_contract();
+ let l1_erc20_bridge_abi = l1_erc20_bridge_contract();
Ok(Self {
eth_client,
default_bridges,
erc20_abi,
- l1_bridge_abi,
+ l1_erc20_bridge_abi,
confirmation_timeout: Duration::from_secs(10),
polling_interval: Duration::from_secs(1),
})
@@ -179,9 +178,10 @@ impl EthereumProvider {
l1_token_address: Address,
bridge: Option,
) -> Result {
- let bridge = bridge.unwrap_or(self.default_bridges.l1_erc20_default_bridge);
+ // TODO(EVM-571): This should be moved to the shared bridge, which does not have `l2_token_address` on L1. Use L2 contracts instead.
+ let bridge = bridge.unwrap_or(self.default_bridges.l1_erc20_default_bridge.unwrap());
let args = CallFunctionArgs::new("l2TokenAddress", l1_token_address)
- .for_contract(bridge, self.l1_bridge_abi.clone());
+ .for_contract(bridge, self.l1_erc20_bridge_abi.clone());
let res = self
.eth_client
.call_contract_function(args)
@@ -197,7 +197,8 @@ impl EthereumProvider {
erc20_approve_threshold: U256,
bridge: Option,
) -> Result {
- let bridge = bridge.unwrap_or(self.default_bridges.l1_erc20_default_bridge);
+ // TODO(EVM-571): This should be moved to the shared bridge,
+ let bridge = bridge.unwrap_or(self.default_bridges.l1_erc20_default_bridge.unwrap());
let current_allowance = self
.client()
.allowance_on_account(token_address, bridge, self.erc20_abi.clone())
@@ -224,7 +225,8 @@ impl EthereumProvider {
max_erc20_approve_amount: U256,
bridge: Option,
) -> Result {
- let bridge = bridge.unwrap_or(self.default_bridges.l1_erc20_default_bridge);
+ // TODO(EVM-571): This should be moved to the shared bridge,
+ let bridge = bridge.unwrap_or(self.default_bridges.l1_erc20_default_bridge.unwrap());
let contract_function = self
.erc20_abi
.function("approve")
@@ -449,20 +451,20 @@ impl EthereumProvider {
// Calculate the gas limit for transaction: it may vary for different tokens.
let gas_limit = if is_eth_deposit {
- 200_000u64
+ 400_000u64
} else {
let gas_limits: Map = serde_json::from_str(RAW_ERC20_DEPOSIT_GAS_LIMIT)
.map_err(|_| ClientError::Other)?;
let address_str = format!("{:?}", l1_token_address);
let is_mainnet = Network::from_chain_id(self.client().chain_id()) == Network::Mainnet;
if is_mainnet && gas_limits.contains_key(&address_str) {
- gas_limits
+ 2 * gas_limits
.get(&address_str)
.unwrap()
.as_u64()
.ok_or(ClientError::Other)?
} else {
- 300000u64
+ 600000u64
}
};
@@ -487,7 +489,7 @@ impl EthereumProvider {
};
// TODO (PLA-85): Add gas estimations for deposits in Rust SDK
- let l2_gas_limit = U256::from(3_000_000u32);
+ let l2_gas_limit = U256::from(6_000_000u32);
let base_cost: U256 = self
.base_cost(
@@ -523,10 +525,11 @@ impl EthereumProvider {
)
.await?
} else {
+ // TODO(EVM-571): This should be moved to the shared bridge, and the `requestL2Transaction` method
let bridge_address =
- bridge_address.unwrap_or(self.default_bridges.l1_erc20_default_bridge);
+ bridge_address.unwrap_or(self.default_bridges.l1_erc20_default_bridge.unwrap());
let contract_function = self
- .l1_bridge_abi
+ .l1_erc20_bridge_abi
.function("deposit")
.expect("failed to get function parameters");
let params = (
diff --git a/core/tests/loadnext/src/sdk/operations/transfer.rs b/core/tests/loadnext/src/sdk/operations/transfer.rs
index c50364496597..70de489886bc 100644
--- a/core/tests/loadnext/src/sdk/operations/transfer.rs
+++ b/core/tests/loadnext/src/sdk/operations/transfer.rs
@@ -1,5 +1,5 @@
use zksync_eth_signer::EthereumSigner;
-use zksync_types::{fee::Fee, l2::L2Tx, Address, Nonce, L2_ETH_TOKEN_ADDRESS, U256};
+use zksync_types::{fee::Fee, l2::L2Tx, Address, Nonce, L2_BASE_TOKEN_ADDRESS, U256};
use crate::sdk::{
error::ClientError,
@@ -150,7 +150,7 @@ where
.or_else(|| self.paymaster_params.clone())
.unwrap_or_default();
- let tx = if token.is_zero() || token == L2_ETH_TOKEN_ADDRESS {
+ let tx = if token.is_zero() || token == L2_BASE_TOKEN_ADDRESS {
// ETH estimate
Execute {
contract_address: to,
diff --git a/core/tests/loadnext/src/sdk/operations/withdraw.rs b/core/tests/loadnext/src/sdk/operations/withdraw.rs
index 781876ad101f..e970693f5065 100644
--- a/core/tests/loadnext/src/sdk/operations/withdraw.rs
+++ b/core/tests/loadnext/src/sdk/operations/withdraw.rs
@@ -1,7 +1,7 @@
use zksync_eth_signer::EthereumSigner;
use zksync_types::{
fee::Fee, l2::L2Tx, tokens::ETHEREUM_ADDRESS, transaction_request::PaymasterParams,
- web3::ethabi, Address, Nonce, L2_ETH_TOKEN_ADDRESS, U256,
+ web3::ethabi, Address, Nonce, L2_BASE_TOKEN_ADDRESS, U256,
};
use crate::sdk::{
@@ -58,7 +58,7 @@ where
let calldata_params = vec![ethabi::ParamType::Address];
let mut calldata = ethabi::short_signature("withdraw", &calldata_params).to_vec();
calldata.append(&mut ethabi::encode(&[ethabi::Token::Address(to)]));
- (L2_ETH_TOKEN_ADDRESS, calldata, amount)
+ (L2_BASE_TOKEN_ADDRESS, calldata, amount)
} else {
let bridge_address = if let Some(bridge) = self.bridge {
bridge
@@ -70,7 +70,8 @@ where
.get_bridge_contracts()
.await
.map_err(|err| ClientError::NetworkError(err.to_string()))?;
- default_bridges.l2_erc20_default_bridge
+ // Note, that this is safe, but only for Era
+ default_bridges.l2_erc20_default_bridge.unwrap()
};
// TODO (SMA-1608): Do not implement the ABI manually, introduce ABI files with an update script similarly to
diff --git a/core/tests/loadnext/src/sdk/signer.rs b/core/tests/loadnext/src/sdk/signer.rs
index 9d97f7df82ba..646654c00cc7 100644
--- a/core/tests/loadnext/src/sdk/signer.rs
+++ b/core/tests/loadnext/src/sdk/signer.rs
@@ -3,7 +3,7 @@ use std::fmt::Debug;
use zksync_eth_signer::{error::SignerError, EthereumSigner};
use zksync_types::{
fee::Fee, l2::L2Tx, transaction_request::PaymasterParams, Address, Eip712Domain, L2ChainId,
- Nonce, PackedEthSignature, L2_ETH_TOKEN_ADDRESS, U256,
+ Nonce, PackedEthSignature, L2_BASE_TOKEN_ADDRESS, U256,
};
use crate::sdk::{operations::create_transfer_calldata, types::TransactionRequest};
@@ -49,7 +49,7 @@ impl Signer {
paymaster_params: PaymasterParams,
) -> Result {
// Sign Ether transfer
- if token.is_zero() || token == L2_ETH_TOKEN_ADDRESS {
+ if token.is_zero() || token == L2_BASE_TOKEN_ADDRESS {
let mut transfer = L2Tx::new(
to,
Default::default(),
diff --git a/core/tests/revert-test/tests/revert-and-restart-en.test.ts b/core/tests/revert-test/tests/revert-and-restart-en.test.ts
index 5e42e59d8a47..a74d4f5261d0 100644
--- a/core/tests/revert-test/tests/revert-and-restart-en.test.ts
+++ b/core/tests/revert-test/tests/revert-and-restart-en.test.ts
@@ -1,12 +1,12 @@
// Test of the behaviour of the external node when L1 batches get reverted.
//
// NOTE:
-// main_contract.getTotalBlocksCommitted actually checks the number of batches committed.
-// main_contract.getTotalBlocksExecuted actually checks the number of batches executed.
+// main_contract.getTotalBatchesCommitted actually checks the number of batches committed.
+// main_contract.getTotalBatchesExecuted actually checks the number of batches executed.
// TODO: Migrate from zksync-web3 to zksync-ethers.
import * as utils from 'zk/build/utils';
import { Tester } from './tester';
-import * as zkweb3 from 'zksync-web3';
+import * as zkweb3 from 'zksync-ethers';
import { BigNumber, ethers } from 'ethers';
import { expect, assert } from 'chai';
import fs from 'fs';
@@ -72,6 +72,7 @@ function fetchEnv(zksyncEnv: string): any {
let res = run('./bin/zk', ['f', 'env'], {
cwd: process.env.ZKSYNC_HOME,
env: {
+ PATH: process.env.PATH,
ZKSYNC_ENV: zksyncEnv,
ZKSYNC_HOME: process.env.ZKSYNC_HOME
}
@@ -82,18 +83,42 @@ function fetchEnv(zksyncEnv: string): any {
function runBlockReverter(args: string[]): string {
let env = fetchEnv(mainEnv);
env.RUST_LOG = 'off';
- let res = run('./target/release/block_reverter', args, { cwd: env.ZKSYNC_HOME, env: env });
+ let res = run('./target/release/block_reverter', args, {
+ cwd: env.ZKSYNC_HOME,
+ env: {
+ ...env,
+ PATH: process.env.PATH
+ }
+ });
console.log(res.stderr.toString());
return res.stdout.toString();
}
+async function killServerAndWaitForShutdown(tester: Tester, server: string) {
+ await utils.exec(`killall -9 ${server}`);
+ // Wait until it's really stopped.
+ let iter = 0;
+ while (iter < 30) {
+ try {
+ await tester.syncWallet.provider.getBlockNumber();
+ await utils.sleep(2);
+ iter += 1;
+ } catch (_) {
+ // When exception happens, we assume that server died.
+ return;
+ }
+ }
+ // It's going to panic anyway, since the server is a singleton entity, so better to exit early.
+ throw new Error("Server didn't stop after a kill request");
+}
+
class MainNode {
constructor(public tester: Tester, private proc: child_process.ChildProcess) {}
// Terminates all main node processes running.
public static async terminateAll() {
try {
- await utils.exec('killall -INT zksync_server --wait');
+ await utils.exec('killall -INT zksync_server');
} catch (err) {
console.log(`ignored error: ${err}`);
}
@@ -120,7 +145,10 @@ class MainNode {
let proc = spawn('./target/release/zksync_server', ['--components', components], {
cwd: env.ZKSYNC_HOME,
stdio: [null, logs, logs],
- env: env
+ env: {
+ ...env,
+ PATH: process.env.PATH
+ }
});
// Wait until the main node starts responding.
let tester: Tester = await Tester.init(env.ETH_CLIENT_WEB3_URL, env.API_WEB3_JSON_RPC_HTTP_URL);
@@ -138,15 +166,6 @@ class MainNode {
}
return new MainNode(tester, proc);
}
-
- // Sends SIGINT to the main node process and waits for it to exit.
- public async terminate(): Promise {
- this.proc.kill('SIGINT');
- while (this.proc.exitCode === null) {
- await utils.sleep(1);
- }
- expect(this.proc.exitCode).to.equal(0);
- }
}
class ExtNode {
@@ -155,7 +174,7 @@ class ExtNode {
// Terminates all main node processes running.
public static async terminateAll() {
try {
- await utils.exec('killall -INT zksync_external_node --wait');
+ await utils.exec('killall -INT zksync_external_node');
} catch (err) {
console.log(`ignored error: ${err}`);
}
@@ -173,10 +192,13 @@ class ExtNode {
let proc = spawn('./target/release/zksync_external_node', args, {
cwd: env.ZKSYNC_HOME,
stdio: [null, logs, logs],
- env: env
+ env: {
+ ...env,
+ PATH: process.env.PATH
+ }
});
// Wait until the node starts responding.
- let tester: Tester = await Tester.init(env.EN_ETH_CLIENT_URL, `http://localhost:${env.EN_HTTP_PORT}`);
+ let tester: Tester = await Tester.init(env.EN_ETH_CLIENT_URL, `http://127.0.0.1:${env.EN_HTTP_PORT}`);
while (true) {
try {
await tester.syncWallet.provider.getBlockNumber();
@@ -192,12 +214,6 @@ class ExtNode {
return new ExtNode(tester, proc);
}
- // Sends SIGINT to the node process and waits for it to exit.
- public async terminate(): Promise {
- this.proc.kill('SIGINT');
- expect(await this.waitForExit()).to.equal(0);
- }
-
// Waits for the node process to exit.
public async waitForExit(): Promise {
while (this.proc.exitCode === null) {
@@ -227,32 +243,42 @@ describe('Block reverting test', function () {
let mainNode = await MainNode.spawn(mainLogs, enableConsensus, true);
console.log('Start ext node');
let extNode = await ExtNode.spawn(extLogs, enableConsensus);
+
+ await mainNode.tester.fundSyncWallet();
+ await extNode.tester.fundSyncWallet();
+
const main_contract = await mainNode.tester.syncWallet.getMainContract();
+ const baseTokenAddress = await mainNode.tester.syncWallet.getBaseToken();
+ const isETHBasedChain = baseTokenAddress == zkweb3.utils.ETH_ADDRESS_IN_CONTRACTS;
const alice: zkweb3.Wallet = extNode.tester.emptyWallet();
console.log(
'Finalize an L1 transaction to ensure at least 1 executed L1 batch and that all transactions are processed'
);
const h: zkweb3.types.PriorityOpResponse = await extNode.tester.syncWallet.deposit({
- token: zkweb3.utils.ETH_ADDRESS,
+ token: isETHBasedChain ? zkweb3.utils.LEGACY_ETH_ADDRESS : baseTokenAddress,
amount: depositAmount,
- to: alice.address
+ to: alice.address,
+ approveBaseERC20: true,
+ approveERC20: true
});
await h.waitFinalize();
console.log('Restart the main node with L1 batch execution disabled.');
- await mainNode.terminate();
+ await killServerAndWaitForShutdown(mainNode.tester, 'zksync_server');
mainNode = await MainNode.spawn(mainLogs, enableConsensus, false);
console.log('Commit at least 2 L1 batches which are not executed');
- const lastExecuted: BigNumber = await main_contract.getTotalBlocksExecuted();
+ const lastExecuted: BigNumber = await main_contract.getTotalBatchesExecuted();
// One is not enough to test the reversion of sk cache because
// it gets updated with some batch logs only at the start of the next batch.
- const initialL1BatchNumber = (await main_contract.getTotalBlocksCommitted()).toNumber();
+ const initialL1BatchNumber = (await main_contract.getTotalBatchesCommitted()).toNumber();
const firstDepositHandle = await extNode.tester.syncWallet.deposit({
- token: zkweb3.utils.ETH_ADDRESS,
+ token: isETHBasedChain ? zkweb3.utils.LEGACY_ETH_ADDRESS : baseTokenAddress,
amount: depositAmount,
- to: alice.address
+ to: alice.address,
+ approveBaseERC20: true,
+ approveERC20: true
});
await firstDepositHandle.wait();
@@ -261,9 +287,11 @@ describe('Block reverting test', function () {
}
const secondDepositHandle = await extNode.tester.syncWallet.deposit({
- token: zkweb3.utils.ETH_ADDRESS,
+ token: isETHBasedChain ? zkweb3.utils.LEGACY_ETH_ADDRESS : baseTokenAddress,
amount: depositAmount,
- to: alice.address
+ to: alice.address,
+ approveBaseERC20: true,
+ approveERC20: true
});
await secondDepositHandle.wait();
while ((await extNode.tester.web3Provider.getL1BatchNumber()) <= initialL1BatchNumber + 1) {
@@ -271,7 +299,7 @@ describe('Block reverting test', function () {
}
while (true) {
- const lastCommitted: BigNumber = await main_contract.getTotalBlocksCommitted();
+ const lastCommitted: BigNumber = await main_contract.getTotalBatchesCommitted();
console.log(`lastExecuted = ${lastExecuted}, lastCommitted = ${lastCommitted}`);
if (lastCommitted.sub(lastExecuted).gte(2)) {
break;
@@ -280,7 +308,7 @@ describe('Block reverting test', function () {
}
const alice2 = await alice.getBalance();
console.log('Terminate the main node');
- await mainNode.terminate();
+ await killServerAndWaitForShutdown(mainNode.tester, 'zksync_server');
console.log('Ask block_reverter to suggest to which L1 batch we should revert');
const values_json = runBlockReverter([
@@ -305,7 +333,7 @@ describe('Block reverting test', function () {
]);
console.log('Check that batches are reverted on L1');
- const lastCommitted2 = await main_contract.getTotalBlocksCommitted();
+ const lastCommitted2 = await main_contract.getTotalBatchesCommitted();
console.log(`lastCommitted = ${lastCommitted2}, want ${lastExecuted}`);
assert(lastCommitted2.eq(lastExecuted));
@@ -330,9 +358,11 @@ describe('Block reverting test', function () {
console.log('Execute an L1 transaction');
const depositHandle = await extNode.tester.syncWallet.deposit({
- token: zkweb3.utils.ETH_ADDRESS,
+ token: isETHBasedChain ? zkweb3.utils.LEGACY_ETH_ADDRESS : baseTokenAddress,
amount: depositAmount,
- to: alice.address
+ to: alice.address,
+ approveBaseERC20: true,
+ approveERC20: true
});
let l1TxResponse = await alice._providerL1().getTransaction(depositHandle.hash);
diff --git a/core/tests/revert-test/tests/revert-and-restart.test.ts b/core/tests/revert-test/tests/revert-and-restart.test.ts
index 4ee724bf6f0d..7c747afc9148 100644
--- a/core/tests/revert-test/tests/revert-and-restart.test.ts
+++ b/core/tests/revert-test/tests/revert-and-restart.test.ts
@@ -1,6 +1,6 @@
import * as utils from 'zk/build/utils';
import { Tester } from './tester';
-import * as zkweb3 from 'zksync-web3';
+import * as zkweb3 from 'zksync-ethers';
import { BigNumber, Contract, ethers } from 'ethers';
import { expect } from 'chai';
import fs from 'fs';
@@ -29,7 +29,7 @@ function parseSuggestedValues(suggestedValuesString: string) {
}
async function killServerAndWaitForShutdown(tester: Tester) {
- await utils.exec('pkill -9 zksync_server');
+ await utils.exec('killall -9 zksync_server');
// Wait until it's really stopped.
let iter = 0;
while (iter < 30) {
@@ -103,25 +103,29 @@ describe('Block reverting test', function () {
throw new Error('Server did not start');
}
+ await tester.fundSyncWallet();
+
// Seal 2 L1 batches.
// One is not enough to test the reversion of sk cache because
// it gets updated with some batch logs only at the start of the next batch.
const initialL1BatchNumber = await tester.web3Provider.getL1BatchNumber();
-
const firstDepositHandle = await tester.syncWallet.deposit({
- token: zkweb3.utils.ETH_ADDRESS,
+ token: tester.isETHBasedChain ? zkweb3.utils.LEGACY_ETH_ADDRESS : tester.baseTokenAddress,
amount: depositAmount,
- to: alice.address
+ to: alice.address,
+ approveBaseERC20: true,
+ approveERC20: true
});
await firstDepositHandle.wait();
while ((await tester.web3Provider.getL1BatchNumber()) <= initialL1BatchNumber) {
await utils.sleep(1);
}
-
const secondDepositHandle = await tester.syncWallet.deposit({
- token: zkweb3.utils.ETH_ADDRESS,
+ token: tester.isETHBasedChain ? zkweb3.utils.LEGACY_ETH_ADDRESS : tester.baseTokenAddress,
amount: depositAmount,
- to: alice.address
+ to: alice.address,
+ approveBaseERC20: true,
+ approveERC20: true
});
await secondDepositHandle.wait();
while ((await tester.web3Provider.getL1BatchNumber()) <= initialL1BatchNumber + 1) {
@@ -132,12 +136,12 @@ describe('Block reverting test', function () {
expect(balance.eq(depositAmount.mul(2)), 'Incorrect balance after deposits').to.be.true;
// Check L1 committed and executed blocks.
- let blocksCommitted = await mainContract.getTotalBlocksCommitted();
- let blocksExecuted = await mainContract.getTotalBlocksExecuted();
+ let blocksCommitted = await mainContract.getTotalBatchesCommitted();
+ let blocksExecuted = await mainContract.getTotalBatchesExecuted();
let tryCount = 0;
while (blocksCommitted.eq(blocksExecuted) && tryCount < 100) {
- blocksCommitted = await mainContract.getTotalBlocksCommitted();
- blocksExecuted = await mainContract.getTotalBlocksExecuted();
+ blocksCommitted = await mainContract.getTotalBatchesCommitted();
+ blocksExecuted = await mainContract.getTotalBatchesExecuted();
tryCount += 1;
await utils.sleep(1);
}
@@ -173,7 +177,7 @@ describe('Block reverting test', function () {
`cd $ZKSYNC_HOME && cargo run --bin block_reverter --release -- rollback-db --l1-batch-number ${lastL1BatchNumber} --rollback-postgres --rollback-tree --rollback-sk-cache`
);
- let blocksCommitted = await mainContract.getTotalBlocksCommitted();
+ let blocksCommitted = await mainContract.getTotalBatchesCommitted();
expect(blocksCommitted.eq(lastL1BatchNumber), 'Revert on contract was unsuccessful').to.be.true;
});
@@ -190,9 +194,11 @@ describe('Block reverting test', function () {
// Execute a transaction
const depositHandle = await tester.syncWallet.deposit({
- token: zkweb3.utils.ETH_ADDRESS,
+ token: tester.isETHBasedChain ? zkweb3.utils.LEGACY_ETH_ADDRESS : tester.baseTokenAddress,
amount: depositAmount,
- to: alice.address
+ to: alice.address,
+ approveBaseERC20: true,
+ approveERC20: true
});
let l1TxResponse = await alice._providerL1().getTransaction(depositHandle.hash);
@@ -234,7 +240,7 @@ describe('Block reverting test', function () {
});
after('Try killing server', async () => {
- await utils.exec('pkill zksync_server').catch(ignoreError);
+ await utils.exec('killall zksync_server').catch(ignoreError);
});
});
diff --git a/core/tests/revert-test/tests/tester.ts b/core/tests/revert-test/tests/tester.ts
index 896b28263cc7..1590c64a7be9 100644
--- a/core/tests/revert-test/tests/tester.ts
+++ b/core/tests/revert-test/tests/tester.ts
@@ -1,16 +1,21 @@
import { expect } from 'chai';
import * as ethers from 'ethers';
-import * as zkweb3 from 'zksync-web3';
+import * as zkweb3 from 'zksync-ethers';
import * as fs from 'fs';
import * as path from 'path';
+const BASE_ERC20_TO_MINT = ethers.utils.parseEther('100');
+
export class Tester {
public runningFee: Map;
constructor(
public ethProvider: ethers.providers.Provider,
public ethWallet: ethers.Wallet,
public syncWallet: zkweb3.Wallet,
- public web3Provider: zkweb3.Provider
+ public web3Provider: zkweb3.Provider,
+ public hyperchainAdmin: ethers.Wallet, // We need to add validator to ValidatorTimelock with admin rights
+ public isETHBasedChain: boolean,
+ public baseTokenAddress: string
) {
this.runningFee = new Map();
}
@@ -26,6 +31,10 @@ export class Tester {
ethTestConfig.test_mnemonic as string,
"m/44'/60'/0'/0/0"
).connect(ethProvider);
+ let hyperchainAdmin = ethers.Wallet.fromMnemonic(
+ ethTestConfig.mnemonic as string,
+ "m/44'/60'/0'/0/1"
+ ).connect(ethProvider);
const web3Provider = new zkweb3.Provider(l2_rpc_addr);
web3Provider.pollingInterval = 100; // It's OK to keep it low even on stage.
const syncWallet = new zkweb3.Wallet(ethWallet.privateKey, web3Provider, ethProvider);
@@ -50,7 +59,22 @@ export class Tester {
console.log(`Canceled ${cancellationTxs.length} pending transactions`);
}
- return new Tester(ethProvider, ethWallet, syncWallet, web3Provider);
+ const baseTokenAddress = process.env.CONTRACTS_BASE_TOKEN_ADDR!;
+ const isETHBasedChain = baseTokenAddress == zkweb3.utils.ETH_ADDRESS_IN_CONTRACTS;
+
+ return new Tester(ethProvider, ethWallet, syncWallet, web3Provider, hyperchainAdmin, isETHBasedChain, baseTokenAddress);
+ }
+
+ /// Ensures that the main wallet has enough base token.
+ /// This can not be done inside the `init` function becasue `init` function can be called before the
+ /// L2 RPC is active, but we need the L2 RPC to get the base token address.
+ async fundSyncWallet() {
+ const baseTokenAddress = await this.syncWallet.provider.getBaseTokenContractAddress();
+ if (!(baseTokenAddress === zkweb3.utils.ETH_ADDRESS_IN_CONTRACTS)) {
+ const l1Erc20ABI = ['function mint(address to, uint256 amount)'];
+ const l1Erc20Contract = new ethers.Contract(baseTokenAddress, l1Erc20ABI, this.ethWallet);
+ await (await l1Erc20Contract.mint(this.ethWallet.address, BASE_ERC20_TO_MINT)).wait();
+ }
}
async fundedWallet(
diff --git a/core/tests/ts-integration/README.md b/core/tests/ts-integration/README.md
index c29e15d936dc..cb3a1aa5ae7e 100644
--- a/core/tests/ts-integration/README.md
+++ b/core/tests/ts-integration/README.md
@@ -45,7 +45,7 @@ Sample test suite would look like this:
import { TestMaster } from '../src/index';
import { shouldChangeETHBalances } from '../src/modifiers/balance-checker.ts';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import { BigNumber } from 'ethers';
describe('ETH token checks', () => {
diff --git a/core/tests/ts-integration/contracts/custom-account/Constants.sol b/core/tests/ts-integration/contracts/custom-account/Constants.sol
index 76d5b000d6f2..59399d232ead 100644
--- a/core/tests/ts-integration/contracts/custom-account/Constants.sol
+++ b/core/tests/ts-integration/contracts/custom-account/Constants.sol
@@ -23,7 +23,7 @@ IContractDeployer constant DEPLOYER_SYSTEM_CONTRACT = IContractDeployer(address(
address constant KECCAK256_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x10);
-address constant ETH_TOKEN_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x0a);
+address constant BASE_TOKEN_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x0a);
SystemContext constant SYSTEM_CONTEXT_CONTRACT = SystemContext(address(SYSTEM_CONTRACTS_OFFSET + 0x0b));
uint256 constant MAX_SYSTEM_CONTRACT_ADDRESS = 0xffff;
diff --git a/core/tests/ts-integration/contracts/custom-account/TransactionHelper.sol b/core/tests/ts-integration/contracts/custom-account/TransactionHelper.sol
index 7097097437c5..7fc883ed882c 100644
--- a/core/tests/ts-integration/contracts/custom-account/TransactionHelper.sol
+++ b/core/tests/ts-integration/contracts/custom-account/TransactionHelper.sol
@@ -7,7 +7,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "./interfaces/IPaymasterFlow.sol";
import "./interfaces/IContractDeployer.sol";
-import {ETH_TOKEN_SYSTEM_CONTRACT, BOOTLOADER_FORMAL_ADDRESS} from "./Constants.sol";
+import {BASE_TOKEN_SYSTEM_CONTRACT, BOOTLOADER_FORMAL_ADDRESS} from "./Constants.sol";
import "./RLPEncoder.sol";
/// @dev The type id of zkSync's EIP-712-signed transaction.
@@ -89,10 +89,10 @@ library TransactionHelper {
/// @param _addr The address of the token
/// @return `true` or `false` based on whether the token is Ether.
/// @dev This method assumes that address is Ether either if the address is 0 (for convenience)
- /// or if the address is the address of the L2EthToken system contract.
+ /// or if the address is the address of the L2BaseToken system contract.
function isEthToken(uint256 _addr) internal pure returns (bool) {
return
- _addr == uint256(uint160(address(ETH_TOKEN_SYSTEM_CONTRACT))) ||
+ _addr == uint256(uint160(address(BASE_TOKEN_SYSTEM_CONTRACT))) ||
_addr == 0;
}
diff --git a/core/tests/ts-integration/package.json b/core/tests/ts-integration/package.json
index 0cbb7612e39c..5182ef20dd3b 100644
--- a/core/tests/ts-integration/package.json
+++ b/core/tests/ts-integration/package.json
@@ -13,7 +13,7 @@
"build-yul": "hardhat run scripts/compile-yul.ts"
},
"devDependencies": {
- "@matterlabs/hardhat-zksync-deploy": "^0.6.1",
+ "@matterlabs/hardhat-zksync-deploy": "^0.6.5",
"@matterlabs/hardhat-zksync-solc": "0.4.2",
"@matterlabs/hardhat-zksync-vyper": "^1.0.0",
"@nomiclabs/hardhat-vyper": "^3.0.5",
@@ -30,7 +30,7 @@
"ts-jest": "^29.0.1",
"ts-node": "^10.1.0",
"typescript": "^4.3.5",
- "zksync-web3": "^0.15.5",
+ "zksync-ethers": "https://github.com/zksync-sdk/zksync-ethers#sb-old-sdk",
"elliptic": "^6.5.5"
}
}
diff --git a/core/tests/ts-integration/src/context-owner.ts b/core/tests/ts-integration/src/context-owner.ts
index b8e7c383c398..e56913f2ec56 100644
--- a/core/tests/ts-integration/src/context-owner.ts
+++ b/core/tests/ts-integration/src/context-owner.ts
@@ -1,5 +1,6 @@
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import * as ethers from 'ethers';
+import { BigNumberish } from 'ethers';
import { TestContext, TestEnvironment, TestWallets } from './types';
import { lookupPrerequisites } from './prerequisites';
@@ -105,6 +106,7 @@ export class TestContextOwner {
try {
this.reporter.startAction('Setting up the context');
await this.cancelPendingTxs();
+ await this.cancelAllowances();
this.wallets = await this.prepareWallets();
this.reporter.finishAction();
} catch (error: any) {
@@ -133,14 +135,17 @@ export class TestContextOwner {
const latestNonce = await ethWallet.getTransactionCount('latest');
const pendingNonce = await ethWallet.getTransactionCount('pending');
this.reporter.debug(`Latest nonce is ${latestNonce}, pending nonce is ${pendingNonce}`);
+ // For each transaction to override it, we need to provide greater fee.
+ // We would manually provide a value high enough (for a testnet) to be both valid
+ // and higher than the previous one. It's OK as we'll only be charged for the base fee
+ // anyways. We will also set the miner's tip to 5 gwei, which is also much higher than the normal one.
+ // Scaled gas price to be used to prevent transactions from being stuck.
+ const maxPriorityFeePerGas = ethers.utils.parseEther('0.000000005'); // 5 gwei
+ const maxFeePerGas = ethers.utils.parseEther('0.00000025'); // 250 gwei
+ this.reporter.debug(`Max nonce is ${latestNonce}, pending nonce is ${pendingNonce}`);
+
const cancellationTxs = [];
for (let nonce = latestNonce; nonce < pendingNonce; nonce++) {
- // For each transaction to override it, we need to provide greater fee.
- // We would manually provide a value high enough (for a testnet) to be both valid
- // and higher than the previous one. It's OK as we'll only be charged for the bass fee
- // anyways. We will also set the miner's tip to 5 gwei, which is also much higher than the normal one.
- const maxFeePerGas = ethers.utils.parseEther('0.00000025'); // 250 gwei
- const maxPriorityFeePerGas = ethers.utils.parseEther('0.000000005'); // 5 gwei
cancellationTxs.push(
ethWallet
.sendTransaction({ to: ethWallet.address, nonce, maxFeePerGas, maxPriorityFeePerGas })
@@ -154,6 +159,37 @@ export class TestContextOwner {
this.reporter.finishAction();
}
+ /**
+ * Sets allowances to 0 for tokens. We do this so we can predict nonces accurately.
+ */
+ private async cancelAllowances() {
+ this.reporter.startAction(`Cancelling allowances transactions`);
+ // Since some tx may be pending on stage, we don't want to get stuck because of it.
+ // In order to not get stuck transactions, we manually cancel all the pending txs.
+ const chainId = process.env.CHAIN_ETH_ZKSYNC_NETWORK_ID!;
+
+ const bridgehub = await this.mainSyncWallet.getBridgehubContract();
+ const erc20Bridge = await bridgehub.sharedBridge();
+ const baseToken = await bridgehub.baseToken(chainId);
+
+ const erc20Token = this.env.erc20Token.l1Address;
+
+ const l1Erc20ABI = ['function approve(address spender, uint256 amount)'];
+ const l1Erc20Contract = new ethers.Contract(erc20Token, l1Erc20ABI, this.mainEthersWallet);
+ const tx = await l1Erc20Contract.approve(erc20Bridge, 0);
+ await tx.wait();
+ this.reporter.debug(`Sent ERC20 cancel approve transaction. Hash: ${tx.hash}, nonce ${tx.nonce}`);
+
+ if (baseToken != zksync.utils.ETH_ADDRESS_IN_CONTRACTS) {
+ const baseTokenContract = new ethers.Contract(baseToken, l1Erc20ABI, this.mainEthersWallet);
+ const tx = await baseTokenContract.approve(erc20Bridge, 0);
+ await tx.wait();
+ this.reporter.debug(`Sent base token cancel approve transaction. Hash: ${tx.hash}, nonce ${tx.nonce}`);
+ }
+
+ this.reporter.finishAction();
+ }
+
/**
* Looks for the declared test suites, prepares wallets for each test suite
* and adds funds to them.
@@ -171,7 +207,10 @@ export class TestContextOwner {
const l2ETHAmountToDeposit = await this.ensureBalances(accountsAmount);
const l2ERC20AmountToDeposit = ERC20_PER_ACCOUNT.mul(accountsAmount);
const wallets = this.createTestWallets(suites);
- await this.distributeL1Tokens(wallets, l2ETHAmountToDeposit, l2ERC20AmountToDeposit);
+ const baseTokenAddress = await this.mainSyncWallet.provider.getBaseTokenContractAddress();
+ await this.distributeL1BaseToken(wallets, l2ERC20AmountToDeposit, baseTokenAddress);
+ await this.cancelAllowances();
+ await this.distributeL1Tokens(wallets, l2ETHAmountToDeposit, l2ERC20AmountToDeposit, baseTokenAddress);
await this.distributeL2Tokens(wallets);
this.reporter.finishAction();
@@ -225,6 +264,97 @@ export class TestContextOwner {
return wallets;
}
+ /**
+ * Sends L1 tokens to the test wallet accounts.
+ * Additionally, deposits L1 tokens to the main account for further distribution on L2 (if required).
+ */
+ private async distributeL1BaseToken(
+ wallets: TestWallets,
+ l2erc20DepositAmount: ethers.BigNumber,
+ baseTokenAddress: zksync.types.Address
+ ) {
+ this.reporter.startAction(`Distributing base tokens on L1`);
+ if (baseTokenAddress != zksync.utils.ETH_ADDRESS_IN_CONTRACTS) {
+ const chainId = process.env.CHAIN_ETH_ZKSYNC_NETWORK_ID!;
+ const l1startNonce = await this.mainEthersWallet.getTransactionCount();
+ this.reporter.debug(`Start nonce is ${l1startNonce}`);
+ const ethIsBaseToken =
+ (await (await this.mainSyncWallet.getBridgehubContract()).baseToken(chainId)) ==
+ zksync.utils.ETH_ADDRESS_IN_CONTRACTS;
+ // All the promises we send in this function.
+ const l1TxPromises: Promise[] = [];
+ // Mutable nonce to send the transactions before actually `await`ing them.
+ let nonce = l1startNonce;
+ // Scaled gas price to be used to prevent transactions from being stuck.
+ const gasPrice = await scaledGasPrice(this.mainEthersWallet);
+
+ // Define values for handling ERC20 transfers/deposits.
+ const baseMintAmount = l2erc20DepositAmount.mul(1000);
+ // Mint ERC20.
+ const l1Erc20ABI = ['function mint(address to, uint256 amount)'];
+ const l1Erc20Contract = new ethers.Contract(baseTokenAddress, l1Erc20ABI, this.mainEthersWallet);
+ const baseMintPromise = l1Erc20Contract
+ .mint(this.mainSyncWallet.address, baseMintAmount, {
+ nonce: nonce++,
+ gasPrice
+ })
+ .then((tx: any) => {
+ this.reporter.debug(`Sent ERC20 mint transaction. Hash: ${tx.hash}, tx nonce ${tx.nonce}`);
+ return tx.wait();
+ });
+ l1TxPromises.push(baseMintPromise);
+
+ // Deposit base token if needed
+ let baseDepositPromise;
+ const baseIsTransferred = true;
+ baseDepositPromise = this.mainSyncWallet
+ .deposit({
+ token: baseTokenAddress,
+ amount: l2erc20DepositAmount,
+ approveERC20: true,
+ approveBaseERC20: true,
+ approveBaseOverrides: {
+ nonce: nonce,
+ gasPrice
+ },
+ approveOverrides: {
+ nonce: nonce + (ethIsBaseToken ? 0 : 1), // if eth is base, we don't need to approve base
+ gasPrice
+ },
+ overrides: {
+ nonce: nonce + (ethIsBaseToken ? 0 : 1) + (baseIsTransferred ? 0 : 1), // if base is transferred, we don't need to approve override
+ gasPrice
+ }
+ })
+ .then((tx) => {
+ // Note: there is an `approve` tx, not listed here.
+ this.reporter.debug(`Sent ERC20 deposit transaction. Hash: ${tx.hash}, tx nonce: ${tx.nonce}`);
+ tx.wait();
+
+ nonce = nonce + 1 + (ethIsBaseToken ? 0 : 1) + (baseIsTransferred ? 0 : 1);
+
+ if (!ethIsBaseToken) {
+ // Send base token on L1.
+ const baseTokenTransfers = sendTransfers(
+ baseTokenAddress,
+ this.mainEthersWallet,
+ wallets,
+ ERC20_PER_ACCOUNT,
+ nonce,
+ gasPrice,
+ this.reporter
+ );
+ return baseTokenTransfers;
+ }
+ });
+ l1TxPromises.push(baseDepositPromise);
+
+ this.reporter.debug(`Sent ${l1TxPromises.length} base token initial transactions on L1`);
+ await Promise.all(l1TxPromises);
+ }
+ this.reporter.finishAction();
+ }
+
/**
* Sends L1 tokens to the test wallet accounts.
* Additionally, deposits L1 tokens to the main account for further distribution on L2 (if required).
@@ -232,12 +362,16 @@ export class TestContextOwner {
private async distributeL1Tokens(
wallets: TestWallets,
l2ETHAmountToDeposit: ethers.BigNumber,
- l2erc20DepositAmount: ethers.BigNumber
+ l2erc20DepositAmount: ethers.BigNumber,
+ baseTokenAddress: zksync.types.Address
) {
+ const chainId = process.env.CHAIN_ETH_ZKSYNC_NETWORK_ID!;
this.reporter.startAction(`Distributing tokens on L1`);
const l1startNonce = await this.mainEthersWallet.getTransactionCount();
this.reporter.debug(`Start nonce is ${l1startNonce}`);
-
+ const ethIsBaseToken =
+ (await (await this.mainSyncWallet.getBridgehubContract()).baseToken(chainId)) ==
+ zksync.utils.ETH_ADDRESS_IN_CONTRACTS;
// All the promises we send in this function.
const l1TxPromises: Promise[] = [];
// Mutable nonce to send the transactions before actually `await`ing them.
@@ -249,71 +383,85 @@ export class TestContextOwner {
if (!l2ETHAmountToDeposit.isZero()) {
// Given that we've already sent a number of transactions,
// we have to correctly send nonce.
- const txDeposit = await this.mainSyncWallet.deposit({
- token: zksync.utils.ETH_ADDRESS,
- amount: l2ETHAmountToDeposit,
- overrides: {
- nonce: nonce++,
- gasPrice
- }
- });
- const amount = ethers.utils.formatEther(l2ETHAmountToDeposit);
+ const depositHandle = this.mainSyncWallet
+ .deposit({
+ token: zksync.utils.ETH_ADDRESS,
+ approveBaseERC20: true,
+ approveERC20: true,
+ amount: l2ETHAmountToDeposit as BigNumberish,
+ approveBaseOverrides: {
+ nonce: nonce,
+ gasPrice
+ },
+ overrides: {
+ nonce: nonce + (ethIsBaseToken ? 0 : 1), // if eth is base token the approve tx does not happen
+ gasPrice
+ },
+ // specify gas limit manually, until EVM-554 is fixed
+ l2GasLimit: 1000000
+ })
+ .then((tx) => {
+ const amount = ethers.utils.formatEther(l2ETHAmountToDeposit);
+ this.reporter.debug(`Sent ETH deposit. Nonce ${tx.nonce}, amount: ${amount}, hash: ${tx.hash}`);
+ tx.wait();
+ });
+ nonce = nonce + 1 + (ethIsBaseToken ? 0 : 1);
this.reporter.debug(
- `Sent ETH deposit. Nonce ${txDeposit.nonce}, amount: ${amount}, hash: ${txDeposit.hash}`
+ `Nonce changed by ${1 + (ethIsBaseToken ? 0 : 1)} for ETH deposit, new nonce: ${nonce}`
);
-
- let depositHandle = txDeposit.wait().then((tx) => {
- this.reporter.debug(`Obtained receipt for ETH deposit. Amount: ${amount}, hash: ${tx.transactionHash}`);
- return tx;
- });
-
// Add this promise to the list of L1 tx promises.
- l1TxPromises.push(depositHandle);
+ // l1TxPromises.push(depositHandle);
+ await depositHandle;
}
-
// Define values for handling ERC20 transfers/deposits.
const erc20Token = this.env.erc20Token.l1Address;
- const erc20MintAmount = l2erc20DepositAmount.mul(2);
-
+ const erc20MintAmount = l2erc20DepositAmount.mul(100);
// Mint ERC20.
+ const baseIsTransferred = false; // we are not transferring the base
const l1Erc20ABI = ['function mint(address to, uint256 amount)'];
const l1Erc20Contract = new ethers.Contract(erc20Token, l1Erc20ABI, this.mainEthersWallet);
-
- let txMint = await l1Erc20Contract.mint(this.mainSyncWallet.address, erc20MintAmount, {
- nonce: nonce++,
- gasPrice
- });
- this.reporter.debug(`Sent ERC20 mint transaction. Hash: ${txMint.hash}, nonce ${txMint.nonce}`);
-
- const erc20MintPromise = txMint.wait().then((tx: any) => {
- this.reporter.debug(`Obtained receipt for ERC20 mint transaction. Hash: ${tx.transactionHash}`);
- return tx;
- });
-
- // Deposit ERC20.
- let txDepositErc20 = await this.mainSyncWallet.deposit({
- token: erc20Token,
- amount: l2erc20DepositAmount,
- approveERC20: true,
- approveOverrides: {
+ const erc20MintPromise = l1Erc20Contract
+ .mint(this.mainSyncWallet.address, erc20MintAmount, {
nonce: nonce++,
gasPrice
- },
- overrides: {
- nonce: nonce++,
- gasPrice
- }
- });
+ })
+ .then((tx: any) => {
+ this.reporter.debug(`Sent ERC20 mint transaction. Hash: ${tx.hash}, nonce ${tx.nonce}`);
+ return tx.wait();
+ });
+ this.reporter.debug(`Nonce changed by 1 for ERC20 mint, new nonce: ${nonce}`);
+ await erc20MintPromise;
+ // Deposit ERC20.
+ const erc20DepositPromise = this.mainSyncWallet
+ .deposit({
+ token: erc20Token,
+ amount: l2erc20DepositAmount,
+ approveERC20: true,
+ approveBaseERC20: true,
+ approveBaseOverrides: {
+ nonce: nonce,
+ gasPrice
+ },
+ approveOverrides: {
+ nonce: nonce + (ethIsBaseToken ? 0 : 1), // if eth is base, we don't need to approve base
+ gasPrice
+ },
+ overrides: {
+ nonce: nonce + (ethIsBaseToken ? 0 : 1) + (baseIsTransferred ? 0 : 1), // if base is transferred, we don't need to approve override
+ gasPrice
+ }
+ })
+ .then((tx) => {
+ // Note: there is an `approve` tx, not listed here.
+ this.reporter.debug(`Sent ERC20 deposit transaction. Hash: ${tx.hash}, nonce: ${tx.nonce}`);
+ return tx.wait();
+ });
+ nonce = nonce + 1 + (ethIsBaseToken ? 0 : 1) + (baseIsTransferred ? 0 : 1);
this.reporter.debug(
- `Sent ERC20 deposit transaction. Hash: ${txDepositErc20.hash}, nonce: ${txDepositErc20.nonce}`
+ `Nonce changed by ${
+ 1 + (ethIsBaseToken ? 0 : 1) + (baseIsTransferred ? 0 : 1)
+ } for ERC20 deposit, new nonce: ${nonce}`
);
-
- const erc20DepositPromise = txDepositErc20.wait().then((tx: any) => {
- // Note: there is an `approve` tx, not listed here.
- this.reporter?.debug(`Obtained receipt for ERC20 deposit transaction. Hash: ${tx.transactionHash}`);
- return tx;
- });
-
// Send ETH on L1.
const ethTransfers = await sendTransfers(
zksync.utils.ETH_ADDRESS,
@@ -337,13 +485,24 @@ export class TestContextOwner {
this.reporter
);
- l1TxPromises.push(...ethTransfers);
- l1TxPromises.push(erc20MintPromise);
+ nonce += erc20Transfers.length;
+ // Send ERC20 base token on L1.
+ const baseErc20Transfers = await sendTransfers(
+ baseTokenAddress,
+ this.mainEthersWallet,
+ wallets,
+ ERC20_PER_ACCOUNT,
+ nonce,
+ gasPrice,
+ this.reporter
+ );
+
l1TxPromises.push(erc20DepositPromise);
+ l1TxPromises.push(...ethTransfers);
l1TxPromises.push(...erc20Transfers);
+ l1TxPromises.push(...baseErc20Transfers);
this.reporter.debug(`Sent ${l1TxPromises.length} initial transactions on L1`);
-
await Promise.all(l1TxPromises);
this.reporter.finishAction();
diff --git a/core/tests/ts-integration/src/env.ts b/core/tests/ts-integration/src/env.ts
index 3fe22ecec09b..556239ff9312 100644
--- a/core/tests/ts-integration/src/env.ts
+++ b/core/tests/ts-integration/src/env.ts
@@ -1,9 +1,10 @@
import * as path from 'path';
import * as fs from 'fs';
import * as ethers from 'ethers';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import { TestEnvironment } from './types';
import { Reporter } from './reporter';
+import { L2_BASE_TOKEN_ADDRESS } from 'zksync-ethers/build/src/utils';
/**
* Attempts to connect to server.
@@ -29,7 +30,7 @@ export async function waitForServer() {
for (let i = 0; i < maxAttempts; ++i) {
try {
await l2Provider.getNetwork(); // Will throw if the server is not ready yet.
- const bridgeAddress = (await l2Provider.getDefaultBridgeAddresses()).erc20L2;
+ const bridgeAddress = (await l2Provider.getDefaultBridgeAddresses()).sharedL2;
const code = await l2Provider.getCode(bridgeAddress);
if (code == '0x') {
throw Error('L2 ERC20 bridge is not deployed yet, server is not ready');
@@ -63,6 +64,9 @@ export async function loadTestEnvironment(): Promise {
process.env.ZKSYNC_WEB3_API_URL || process.env.API_WEB3_JSON_RPC_HTTP_URL,
'L2 node URL'
);
+ const l2Provider = new zksync.Provider(l2NodeUrl);
+ const baseTokenAddress = await l2Provider.getBaseTokenContractAddress();
+
const l1NodeUrl = ensureVariable(process.env.L1_RPC_ADDRESS || process.env.ETH_CLIENT_WEB3_URL, 'L1 node URL');
const wsL2NodeUrl = ensureVariable(
process.env.ZKSYNC_WEB3_WS_API_URL || process.env.API_WEB3_JSON_RPC_WS_URL,
@@ -76,25 +80,30 @@ export async function loadTestEnvironment(): Promise {
// wBTC is chosen because it has decimals different from ETH (8 instead of 18).
// Using this token will help us to detect decimals-related errors.
// but if it's not available, we'll use the first token from the list.
- let token = tokens.find((token: { symbol: string }) => token.symbol == 'wBTC')!;
+ let token = tokens.find((token: { symbol: string }) => token.symbol == 'WBTC')!;
if (!token) {
token = tokens[0];
}
const weth = tokens.find((token: { symbol: string }) => token.symbol == 'WETH')!;
+ const baseToken = tokens.find((token: { address: string }) =>
+ zksync.utils.isAddressEq(token.address, baseTokenAddress)
+ )!;
// `waitForServer` is expected to be executed. Otherwise this call may throw.
const l2TokenAddress = await new zksync.Wallet(
mainWalletPK,
- new zksync.Provider(l2NodeUrl),
+ l2Provider,
ethers.getDefaultProvider(l1NodeUrl)
).l2TokenAddress(token.address);
const l2WethAddress = await new zksync.Wallet(
mainWalletPK,
- new zksync.Provider(l2NodeUrl),
+ l2Provider,
ethers.getDefaultProvider(l1NodeUrl)
).l2TokenAddress(weth.address);
+ const baseTokenAddressL2 = L2_BASE_TOKEN_ADDRESS;
+
return {
network,
mainWalletPK,
@@ -115,6 +124,13 @@ export async function loadTestEnvironment(): Promise {
decimals: weth.decimals,
l1Address: weth.address,
l2Address: l2WethAddress
+ },
+ baseToken: {
+ name: baseToken?.name || token.name,
+ symbol: baseToken?.symbol || token.symbol,
+ decimals: baseToken?.decimals || token.decimals,
+ l1Address: baseToken?.address || token.address,
+ l2Address: baseTokenAddressL2
}
};
}
diff --git a/core/tests/ts-integration/src/helpers.ts b/core/tests/ts-integration/src/helpers.ts
index 4e2c15802eb8..ea20ee4b7048 100644
--- a/core/tests/ts-integration/src/helpers.ts
+++ b/core/tests/ts-integration/src/helpers.ts
@@ -1,5 +1,5 @@
import * as fs from 'fs';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import * as ethers from 'ethers';
import * as hre from 'hardhat';
import { ZkSyncArtifact } from '@matterlabs/hardhat-zksync-solc/dist/src/types';
@@ -102,6 +102,6 @@ export async function waitUntilBlockFinalized(wallet: zksync.Wallet, blockNumber
*/
export async function scaledGasPrice(wallet: ethers.Wallet | zksync.Wallet): Promise {
const gasPrice = await wallet.getGasPrice();
- // Increase by 40%.
- return gasPrice.mul(170).div(100);
+ // Increase by 40%
+ return gasPrice.mul(140).div(100);
}
diff --git a/core/tests/ts-integration/src/matchers/transaction.ts b/core/tests/ts-integration/src/matchers/transaction.ts
index 405768448f6c..95d9ff122936 100644
--- a/core/tests/ts-integration/src/matchers/transaction.ts
+++ b/core/tests/ts-integration/src/matchers/transaction.ts
@@ -1,6 +1,6 @@
import { TestMessage } from './matcher-helpers';
import { MatcherModifier } from '../modifiers';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import { AugmentedTransactionResponse } from '../retry-provider';
// This file contains implementation of matchers for zkSync/ethereum transaction.
diff --git a/core/tests/ts-integration/src/modifiers/balance-checker.ts b/core/tests/ts-integration/src/modifiers/balance-checker.ts
index 88fb4128cf07..aeb60aaf4ab1 100644
--- a/core/tests/ts-integration/src/modifiers/balance-checker.ts
+++ b/core/tests/ts-integration/src/modifiers/balance-checker.ts
@@ -2,12 +2,12 @@
* Collection of modifiers to check token balance changes caused by a transaction.
*/
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import * as ethers from 'ethers';
import { TestMessage } from '../matchers/matcher-helpers';
import { MatcherModifier, MatcherMessage } from '.';
import { Fee } from '../types';
-import { IERC20Factory } from 'zksync-web3/build/typechain';
+import { Ierc20Factory as IERC20Factory } from 'zksync-ethers/build/typechain/Ierc20Factory';
/**
* Modifier that ensures that fee was taken from the wallet for a transaction.
diff --git a/core/tests/ts-integration/src/modifiers/index.ts b/core/tests/ts-integration/src/modifiers/index.ts
index 84aef2d9b8d3..840c7b654930 100644
--- a/core/tests/ts-integration/src/modifiers/index.ts
+++ b/core/tests/ts-integration/src/modifiers/index.ts
@@ -2,7 +2,7 @@
* Base interface for custom transaction matcher modifiers.
*/
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
/**
* Base class for custom transaction matcher modifiers.
diff --git a/core/tests/ts-integration/src/modifiers/receipt-check.ts b/core/tests/ts-integration/src/modifiers/receipt-check.ts
index e87c4246570c..12d54e1b8ed6 100644
--- a/core/tests/ts-integration/src/modifiers/receipt-check.ts
+++ b/core/tests/ts-integration/src/modifiers/receipt-check.ts
@@ -1,5 +1,5 @@
import { MatcherModifier, MatcherMessage } from '.';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
/**
* Creates a custom checker for the transaction receipt.
diff --git a/core/tests/ts-integration/src/retry-provider.ts b/core/tests/ts-integration/src/retry-provider.ts
index 35b84eac0eac..64c7faaf5377 100644
--- a/core/tests/ts-integration/src/retry-provider.ts
+++ b/core/tests/ts-integration/src/retry-provider.ts
@@ -1,4 +1,4 @@
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import * as ethers from 'ethers';
import { Reporter } from './reporter';
import { TransactionResponse } from 'zksync-web3/src/types';
diff --git a/core/tests/ts-integration/src/system.ts b/core/tests/ts-integration/src/system.ts
deleted file mode 100644
index 4aa3c26534fe..000000000000
--- a/core/tests/ts-integration/src/system.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { BigNumber, BytesLike, ethers } from 'ethers';
-import { Provider, utils } from 'zksync-web3';
-
-const L1_CONTRACTS_FOLDER = `${process.env.ZKSYNC_HOME}/contracts/l1-contracts/artifacts/cache/solpp-generated-contracts`;
-const DIAMOND_UPGRADE_INIT_ABI = new ethers.utils.Interface(
- require(`${L1_CONTRACTS_FOLDER}/zksync/upgrade-initializers/DiamondUpgradeInit1.sol/DiamondUpgradeInit1.json`).abi
-);
-const GOVERNANCE_ABI = new ethers.utils.Interface(
- require(`${L1_CONTRACTS_FOLDER}/governance/Governance.sol/Governance.json`).abi
-);
-const ADMIN_FACET_ABI = new ethers.utils.Interface(
- require(`${L1_CONTRACTS_FOLDER}/zksync/facets/Admin.sol/AdminFacet.json`).abi
-);
-
-export interface ForceDeployment {
- // The bytecode hash to put on an address
- bytecodeHash: BytesLike;
- // The address on which to deploy the bytecodehash to
- newAddress: string;
- // Whether to call the constructor
- callConstructor: boolean;
- // The value with which to initialize a contract
- value: BigNumber;
- // The constructor calldata
- input: BytesLike;
-}
-
-// A minimized copy of the `diamondCut` function used in L1 contracts
-function diamondCut(facetCuts: any[], initAddress: string, initCalldata: string): any {
- return {
- facetCuts,
- initAddress,
- initCalldata
- };
-}
-
-/**
- * Uses a small upgrade to deploy a contract via a forcedDeploy
- *
- * @param ethProvider The L1 provider.
- * @param l2Provider The zkSync provider.
- * @param deployments Array of forced deployments to perform.
- * @param factoryDeps Factory deps that should be included with this transaction.
- * @returns The receipt of the L2 transaction corresponding to the forced deployment
- */
-export async function deployOnAnyLocalAddress(
- ethProvider: ethers.providers.Provider,
- l2Provider: Provider,
- deployments: ForceDeployment[],
- factoryDeps: BytesLike[]
-): Promise {
- const diamondUpgradeInitAddress = process.env.CONTRACTS_DIAMOND_UPGRADE_INIT_ADDR;
-
- // The same mnemonic as in the etc/test_config/eth.json
- const govMnemonic = require('../../../../etc/test_config/constant/eth.json').mnemonic;
-
- if (!diamondUpgradeInitAddress) {
- throw new Error('DIAMOND_UPGRADE_INIT_ADDRESS not set');
- }
-
- const govWallet = ethers.Wallet.fromMnemonic(govMnemonic, "m/44'/60'/0'/0/1").connect(ethProvider);
-
- const zkSyncContract = await l2Provider.getMainContractAddress();
-
- const zkSync = new ethers.Contract(zkSyncContract, utils.ZKSYNC_MAIN_ABI, govWallet);
- const governanceContractAddr = await zkSync.getGovernor();
-
- // Encode data for the upgrade call
- const encodedParams = utils.CONTRACT_DEPLOYER.encodeFunctionData('forceDeployOnAddresses', [deployments]);
-
- // Prepare the diamond cut data
- const upgradeInitData = DIAMOND_UPGRADE_INIT_ABI.encodeFunctionData('forceDeployL2Contract', [
- encodedParams,
- factoryDeps,
- parseInt(process.env.CONTRACTS_PRIORITY_TX_MAX_GAS_LIMIT as string)
- ]);
-
- const upgradeParam = diamondCut([], diamondUpgradeInitAddress, upgradeInitData);
-
- // Prepare calldata for upgrading diamond proxy
- const diamondProxyUpgradeCalldata = ADMIN_FACET_ABI.encodeFunctionData('executeUpgrade', [upgradeParam]);
-
- const call = {
- target: zkSyncContract,
- value: 0,
- data: diamondProxyUpgradeCalldata
- };
- const governanceOperation = {
- calls: [call],
- predecessor: ethers.constants.HashZero,
- salt: ethers.constants.HashZero
- };
-
- // Get transaction data of the `scheduleTransparent`
- const scheduleTransparentOperation = GOVERNANCE_ABI.encodeFunctionData('scheduleTransparent', [
- governanceOperation,
- 0 // delay
- ]);
-
- // Get transaction data of the `execute`
- const executeOperation = GOVERNANCE_ABI.encodeFunctionData('execute', [governanceOperation]);
-
- // Proposing the upgrade
- await (
- await govWallet.sendTransaction({
- to: governanceContractAddr,
- data: scheduleTransparentOperation,
- gasLimit: BigNumber.from(10000000)
- })
- ).wait();
-
- // Finalize the upgrade
- const receipt = await (
- await govWallet.sendTransaction({
- to: governanceContractAddr,
- data: executeOperation,
- gasLimit: BigNumber.from(10000000)
- })
- ).wait();
-
- const txHash = utils.getL2HashFromPriorityOp(receipt, zkSyncContract);
-
- return await l2Provider.waitForTransaction(txHash);
-}
diff --git a/core/tests/ts-integration/src/test-master.ts b/core/tests/ts-integration/src/test-master.ts
index f583ac33ac7c..3072c3244e6b 100644
--- a/core/tests/ts-integration/src/test-master.ts
+++ b/core/tests/ts-integration/src/test-master.ts
@@ -1,4 +1,4 @@
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import * as ethers from 'ethers';
import { TestEnvironment, TestContext } from './types';
import { claimEtherBack } from './context-owner';
diff --git a/core/tests/ts-integration/src/types.ts b/core/tests/ts-integration/src/types.ts
index 20a7175cdd70..bd4300031b84 100644
--- a/core/tests/ts-integration/src/types.ts
+++ b/core/tests/ts-integration/src/types.ts
@@ -49,6 +49,10 @@ export interface TestEnvironment {
* Description of the WETH token used in the tests.
*/
wethToken: Token;
+ /**
+ * Description of the "base" ERC20 token used in the tests.
+ */
+ baseToken: Token;
}
/**
diff --git a/core/tests/ts-integration/tests/api/contract-verification.test.ts b/core/tests/ts-integration/tests/api/contract-verification.test.ts
index 61112ba685e2..204eac2d8733 100644
--- a/core/tests/ts-integration/tests/api/contract-verification.test.ts
+++ b/core/tests/ts-integration/tests/api/contract-verification.test.ts
@@ -1,10 +1,10 @@
import { TestMaster } from '../../src/index';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import * as ethers from 'ethers';
import fetch from 'node-fetch';
import fs from 'fs';
import { deployContract, getContractSource, getTestContract } from '../../src/helpers';
-import { sleep } from 'zksync-web3/build/src/utils';
+import { sleep } from 'zksync-ethers/build/src/utils';
// Regular expression to match ISO dates.
const DATE_REGEX = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{6})?/;
diff --git a/core/tests/ts-integration/tests/api/debug.test.ts b/core/tests/ts-integration/tests/api/debug.test.ts
index bffdc0a78f89..b2ec606e0ef8 100644
--- a/core/tests/ts-integration/tests/api/debug.test.ts
+++ b/core/tests/ts-integration/tests/api/debug.test.ts
@@ -5,9 +5,9 @@
import { TestMaster } from '../../src';
import { Token } from '../../src/types';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import { ethers } from 'ethers';
-import { BOOTLOADER_FORMAL_ADDRESS } from 'zksync-web3/build/src/utils';
+import { BOOTLOADER_FORMAL_ADDRESS } from 'zksync-ethers/build/src/utils';
import fs from 'fs';
describe('Debug methods', () => {
diff --git a/core/tests/ts-integration/tests/api/web3.test.ts b/core/tests/ts-integration/tests/api/web3.test.ts
index 16a1a181f89e..37d37b25e676 100644
--- a/core/tests/ts-integration/tests/api/web3.test.ts
+++ b/core/tests/ts-integration/tests/api/web3.test.ts
@@ -2,14 +2,14 @@
* This suite contains tests for the Web3 API compatibility and zkSync-specific extensions.
*/
import { TestMaster } from '../../src';
-import * as zksync from 'zksync-web3';
-import { types } from 'zksync-web3';
-import { ethers, Event } from 'ethers';
+import * as zksync from 'zksync-ethers';
+import { types } from 'zksync-ethers';
+import { BigNumberish, ethers, Event } from 'ethers';
import { serialize } from '@ethersproject/transactions';
import { deployContract, getTestContract, waitForNewL1Batch, anyTransaction } from '../../src/helpers';
import { shouldOnlyTakeFee } from '../../src/modifiers/balance-checker';
import fetch, { RequestInit } from 'node-fetch';
-import { EIP712_TX_TYPE, PRIORITY_OPERATION_L2_TX_TYPE } from 'zksync-web3/build/src/utils';
+import { EIP712_TX_TYPE, PRIORITY_OPERATION_L2_TX_TYPE } from 'zksync-ethers/build/src/utils';
// Regular expression to match variable-length hex number.
const HEX_VALUE_REGEX = /^0x[\da-fA-F]*$/;
const DATE_REGEX = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{6})?/;
@@ -23,11 +23,13 @@ describe('web3 API compatibility tests', () => {
let testMaster: TestMaster;
let alice: zksync.Wallet;
let l2Token: string;
+ let chainId: BigNumberish;
beforeAll(async () => {
testMaster = TestMaster.getInstance(__filename);
alice = testMaster.mainAccount();
l2Token = testMaster.environment().erc20Token.l2Address;
+ chainId = process.env.CHAIN_ETH_ZKSYNC_NETWORK_ID!;
});
test('Should test block/transaction web3 methods', async () => {
@@ -140,7 +142,7 @@ describe('web3 API compatibility tests', () => {
test('Should check the network version', async () => {
// Valid network IDs for zkSync are greater than 270.
// This test suite may run on different envs, so we don't expect a particular ID.
- await expect(alice.provider.send('net_version', [])).resolves.toMatch(/^27\d|28\d$/);
+ await expect(alice.provider.send('net_version', [])).resolves.toMatch(chainId.toString());
});
// @ts-ignore
@@ -212,11 +214,6 @@ describe('web3 API compatibility tests', () => {
});
});
- test('Should test various token methods', async () => {
- const tokens = await alice.provider.getConfirmedTokens();
- expect(tokens).not.toHaveLength(0); // Should not be an empty array.
- });
-
test('Should check transactions from API / Legacy tx', async () => {
const LEGACY_TX_TYPE = 0;
const legacyTx = await alice.sendTransaction({
@@ -495,7 +492,8 @@ describe('web3 API compatibility tests', () => {
const sentTx = await alice.deposit({
token: zksync.utils.ETH_ADDRESS,
- amount
+ amount,
+ approveBaseERC20: true
});
const receipt = await sentTx.wait();
@@ -703,12 +701,11 @@ describe('web3 API compatibility tests', () => {
from: alice.address,
nonce: senderNonce,
gasLimit: ethers.BigNumber.from(300000),
+ gasPrice,
data: '0x',
value: 0,
chainId,
type: 113,
- maxPriorityFeePerGas: gasPrice,
- maxFeePerGas: gasPrice,
customData: {
gasPerPubdata: '0'
}
diff --git a/core/tests/ts-integration/tests/base-token.test.ts b/core/tests/ts-integration/tests/base-token.test.ts
new file mode 100644
index 000000000000..57747d7a6d5f
--- /dev/null
+++ b/core/tests/ts-integration/tests/base-token.test.ts
@@ -0,0 +1,166 @@
+/**
+ * This suite contains tests checking default ERC-20 contract behavior.
+ */
+
+import { TestMaster } from '../src/index';
+import { Token } from '../src/types';
+
+import * as zksync from 'zksync-ethers';
+import { BigNumber, utils as etherUtils } from 'ethers';
+import { scaledGasPrice } from '../src/helpers';
+
+describe('base ERC20 contract checks', () => {
+ let testMaster: TestMaster;
+ let alice: zksync.Wallet;
+ let bob: zksync.Wallet;
+ let baseTokenDetails: Token;
+ let isETHBasedChain: boolean;
+
+ beforeAll(async () => {
+ testMaster = TestMaster.getInstance(__filename);
+ alice = testMaster.mainAccount();
+ bob = testMaster.newEmptyAccount();
+
+ baseTokenDetails = testMaster.environment().baseToken;
+ const baseToken = await alice.provider.getBaseTokenContractAddress();
+ isETHBasedChain = zksync.utils.isAddressEq(baseToken, zksync.utils.ETH_ADDRESS_IN_CONTRACTS);
+ });
+
+ test('Can perform a deposit', async () => {
+ const amount = 1; // 1 wei is enough.
+ const gasPrice = scaledGasPrice(alice);
+
+ const initialEthBalance = await alice.getBalanceL1();
+ const initialL1Balance = await alice.getBalanceL1(baseTokenDetails.l1Address);
+ const initialL2Balance = await alice.getBalance();
+
+ const depositTx = await alice.deposit({
+ token: baseTokenDetails.l1Address,
+ amount: amount,
+ approveERC20: true,
+ approveBaseERC20: true,
+ approveBaseOverrides: {
+ gasPrice
+ },
+ approveOverrides: {
+ gasPrice
+ },
+ overrides: {
+ gasPrice
+ }
+ });
+ const depositHash = depositTx.hash;
+ await depositTx.wait();
+
+ const receipt = await alice._providerL1().getTransactionReceipt(depositHash);
+ const fee = receipt.effectiveGasPrice.mul(receipt.gasUsed);
+
+ // TODO: should all the following tests use strict equality?
+
+ const finalEthBalance = await alice.getBalanceL1();
+ expect(initialEthBalance).bnToBeGt(finalEthBalance.add(fee)); // Fee should be taken from the ETH balance on L1.
+
+ const finalL1Balance = await alice.getBalanceL1(baseTokenDetails.l1Address);
+ expect(initialL1Balance).bnToBeGte(finalL1Balance.add(amount));
+
+ const finalL2Balance = await alice.getBalance();
+ expect(initialL2Balance).bnToBeLte(finalL2Balance.add(amount));
+ });
+
+ test('Not enough balance should revert', async () => {
+ const amount = BigNumber.from('0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff');
+ const gasPrice = scaledGasPrice(alice);
+ let errorMessage;
+
+ await expect(
+ alice.deposit({
+ token: baseTokenDetails.l1Address,
+ amount: amount,
+ approveERC20: true,
+ approveBaseERC20: true,
+ approveBaseOverrides: {
+ gasPrice
+ },
+ approveOverrides: {
+ gasPrice
+ },
+ overrides: {
+ gasPrice
+ }
+ })
+ ).toBeRejected(errorMessage);
+ });
+
+ test('Can perform a transfer to self', async () => {
+ const amount = BigNumber.from(200);
+
+ const initialAliceBalance = await alice.getBalance();
+
+ // When transferring to self, balance should only change by fee from tx.
+ const transferPromise = alice.transfer({
+ to: alice.address,
+ amount
+ });
+
+ await expect(transferPromise).toBeAccepted([]);
+ const transferTx = await transferPromise;
+ await transferTx.waitFinalize();
+
+ const receipt = await alice._providerL2().getTransactionReceipt(transferTx.hash);
+ const fee = receipt.effectiveGasPrice.mul(receipt.gasUsed);
+
+ const finalAliceBalance = await alice.getBalance();
+ expect(initialAliceBalance.sub(fee)).bnToBeEq(finalAliceBalance);
+ });
+
+ test('Incorrect transfer should revert', async () => {
+ const amount = etherUtils.parseEther('1000000.0');
+
+ const initialAliceBalance = await alice.getBalance();
+ const initialBobBalance = await bob.getBalance();
+
+ // Send transfer, it should reject due to lack of balance.
+ await expect(
+ alice.transfer({
+ to: bob.address,
+ amount
+ })
+ ).toBeRejected();
+
+ // Balances should not change for this token.
+ const finalAliceBalance = await alice.getBalance();
+ const finalBobBalance = await bob.getBalance();
+
+ expect(finalAliceBalance).bnToBeEq(initialAliceBalance);
+ expect(finalBobBalance).bnToBeEq(initialBobBalance);
+ });
+
+ test('Can perform a withdrawal', async () => {
+ if (testMaster.isFastMode() || isETHBasedChain) {
+ return;
+ }
+ const amount = 1;
+
+ const initialL1Balance = await alice.getBalanceL1(baseTokenDetails.l1Address);
+ const initialL2Balance = await alice.getBalance();
+
+ const withdrawalPromise = alice.withdraw({ token: baseTokenDetails.l2Address, amount });
+ await expect(withdrawalPromise).toBeAccepted([]);
+ const withdrawalTx = await withdrawalPromise;
+ await withdrawalTx.waitFinalize();
+
+ await expect(alice.finalizeWithdrawal(withdrawalTx.hash)).toBeAccepted([]);
+ const receipt = await alice._providerL2().getTransactionReceipt(withdrawalTx.hash);
+ const fee = receipt.effectiveGasPrice.mul(receipt.gasUsed);
+
+ const finalL1Balance = await alice.getBalanceL1(baseTokenDetails.l1Address);
+ const finalL2Balance = await alice.getBalance();
+
+ expect(finalL1Balance).bnToBeEq(initialL1Balance.add(amount));
+ expect(finalL2Balance.add(amount).add(fee)).bnToBeEq(initialL2Balance);
+ });
+
+ afterAll(async () => {
+ await testMaster.deinitialize();
+ });
+});
diff --git a/core/tests/ts-integration/tests/contracts.test.ts b/core/tests/ts-integration/tests/contracts.test.ts
index 3a45d4b11174..443820b1dab1 100644
--- a/core/tests/ts-integration/tests/contracts.test.ts
+++ b/core/tests/ts-integration/tests/contracts.test.ts
@@ -11,9 +11,9 @@ import { deployContract, getTestContract, waitForNewL1Batch } from '../src/helpe
import { shouldOnlyTakeFee } from '../src/modifiers/balance-checker';
import * as ethers from 'ethers';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
+import { Provider } from 'zksync-ethers';
import * as elliptic from 'elliptic';
-import { Provider } from 'zksync-web3';
import { RetryProvider } from '../src/retry-provider';
// TODO: Leave only important ones.
@@ -62,7 +62,6 @@ describe('Smart contract behavior checks', () => {
test('Should deploy contract with create', async () => {
const contractFactory = new zksync.ContractFactory(contracts.create.abi, contracts.create.bytecode, alice);
-
const contract = await contractFactory.deploy({
customData: {
factoryDeps: [contracts.create.factoryDep]
@@ -426,7 +425,7 @@ async function invalidBytecodeTestTransaction(
maxFeePerGas: gasPrice,
customData: {
- gasPerPubdata: zksync.utils.DEFAULT_GAS_PER_PUBDATA_LIMIT,
+ gasPerPubdataByte: zksync.utils.DEFAULT_GAS_PER_PUBDATA_LIMIT,
factoryDeps,
customSignature: new Uint8Array(17)
}
diff --git a/core/tests/ts-integration/tests/custom-account.test.ts b/core/tests/ts-integration/tests/custom-account.test.ts
index b427c00a4a28..67dd9e49c76b 100644
--- a/core/tests/ts-integration/tests/custom-account.test.ts
+++ b/core/tests/ts-integration/tests/custom-account.test.ts
@@ -4,8 +4,8 @@
import { TestMaster } from '../src/index';
-import * as zksync from 'zksync-web3';
-import { utils, types } from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
+import { utils, types } from 'zksync-ethers';
import * as ethers from 'ethers';
import { deployContract, getTestContract } from '../src/helpers';
import { ERC20_PER_ACCOUNT, L2_DEFAULT_ETH_PER_ACCOUNT } from '../src/context-owner';
diff --git a/core/tests/ts-integration/tests/custom-erc20-bridge.test.ts b/core/tests/ts-integration/tests/custom-erc20-bridge.test.ts
deleted file mode 100644
index eea2a88a6a5d..000000000000
--- a/core/tests/ts-integration/tests/custom-erc20-bridge.test.ts
+++ /dev/null
@@ -1,114 +0,0 @@
-/**
- * This suite contains tests checking the behavior of custom bridges.
- */
-
-import { TestMaster } from '../src/index';
-import { Token } from '../src/types';
-import { spawn as _spawn } from 'child_process';
-
-import * as zksync from 'zksync-web3';
-import * as ethers from 'ethers';
-import { scaledGasPrice } from '../src/helpers';
-import { L1ERC20BridgeFactory, TransparentUpgradeableProxyFactory } from 'l1-contracts/typechain';
-import { sleep } from 'zk/build/utils';
-
-describe('Tests for the custom bridge behavior', () => {
- let testMaster: TestMaster;
- let alice: zksync.Wallet;
- let bob: zksync.Wallet;
- let tokenDetails: Token;
-
- beforeAll(() => {
- testMaster = TestMaster.getInstance(__filename);
- alice = testMaster.mainAccount();
- bob = testMaster.newEmptyAccount();
- tokenDetails = testMaster.environment().erc20Token;
- });
-
- test('Should deploy custom bridge', async () => {
- if (testMaster.isFastMode()) {
- return;
- }
- let balance = await alice.getBalanceL1();
- let transferTx = await alice._signerL1().sendTransaction({
- to: bob.address,
- value: balance.div(2)
- });
- await transferTx.wait();
-
- // load the l1bridge contract
- let l1bridgeFactory = new L1ERC20BridgeFactory(alice._signerL1());
- const gasPrice = await scaledGasPrice(alice);
-
- let l1Bridge = await l1bridgeFactory.deploy(process.env.CONTRACTS_DIAMOND_PROXY_ADDR!);
- await l1Bridge.deployTransaction.wait();
- let l1BridgeProxyFactory = new TransparentUpgradeableProxyFactory(alice._signerL1());
- let l1BridgeProxy = await l1BridgeProxyFactory.deploy(l1Bridge.address, bob.address, '0x');
- const amount = 1000; // 1000 wei is enough.
- await l1BridgeProxy.deployTransaction.wait();
-
- const isLocalSetup = process.env.ZKSYNC_LOCAL_SETUP;
- const baseCommandL1 = isLocalSetup
- ? `yarn --cwd /contracts/l1-contracts`
- : `cd $ZKSYNC_HOME && yarn l1-contracts`;
- let args = `--private-key ${alice.privateKey} --erc20-bridge ${l1BridgeProxy.address}`;
- let command = `${baseCommandL1} initialize-bridges ${args}`;
- await spawn(command);
-
- let l1bridge2 = new L1ERC20BridgeFactory(alice._signerL1()).attach(l1BridgeProxy.address);
-
- const maxAttempts = 5;
- let ready = false;
- for (let i = 0; i < maxAttempts; ++i) {
- const l2Bridge = await l1bridge2.l2Bridge();
- if (l2Bridge != ethers.constants.AddressZero) {
- const code = await alice._providerL2().getCode(l2Bridge);
- if (code.length > 2) {
- ready = true;
- break;
- }
- }
- await sleep(1);
- }
- if (!ready) {
- throw new Error('Failed to wait for the l2 bridge init');
- }
-
- let l2TokenAddress = await l1bridge2.callStatic.l2TokenAddress(tokenDetails.l1Address);
- const initialBalanceL1 = await alice.getBalanceL1(tokenDetails.l1Address);
- const initialBalanceL2 = await alice.getBalance(l2TokenAddress);
- let tx = await alice.deposit({
- token: tokenDetails.l1Address,
- amount,
- approveERC20: true,
- approveOverrides: {
- gasPrice
- },
- overrides: {
- gasPrice
- },
- bridgeAddress: l1BridgeProxy.address
- });
-
- await tx.wait();
- await expect(alice.getBalanceL1(tokenDetails.l1Address)).resolves.bnToBeEq(initialBalanceL1.sub(amount));
- await expect(alice.getBalance(l2TokenAddress)).resolves.bnToBeEq(initialBalanceL2.add(amount));
- });
-
- afterAll(async () => {
- await testMaster.deinitialize();
- });
-});
-
-// executes a command in a new shell
-// but pipes data to parent's stdout/stderr
-export function spawn(command: string) {
- command = command.replace(/\n/g, ' ');
- const child = _spawn(command, { stdio: 'inherit', shell: true });
- return new Promise((resolve, reject) => {
- child.on('error', reject);
- child.on('close', (code) => {
- code == 0 ? resolve(code) : reject(`Child process exited with code ${code}`);
- });
- });
-}
diff --git a/core/tests/ts-integration/tests/erc20.test.ts b/core/tests/ts-integration/tests/erc20.test.ts
index 891f7118dc39..053f41829f1f 100644
--- a/core/tests/ts-integration/tests/erc20.test.ts
+++ b/core/tests/ts-integration/tests/erc20.test.ts
@@ -6,7 +6,7 @@ import { TestMaster } from '../src/index';
import { Token } from '../src/types';
import { shouldChangeTokenBalances, shouldOnlyTakeFee } from '../src/modifiers/balance-checker';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import { BigNumber, utils as etherUtils } from 'ethers';
import * as ethers from 'ethers';
import { scaledGasPrice, waitUntilBlockFinalized } from '../src/helpers';
@@ -17,6 +17,7 @@ describe('ERC20 contract checks', () => {
let alice: zksync.Wallet;
let bob: zksync.Wallet;
let tokenDetails: Token;
+ let baseTokenDetails: Token;
let aliceErc20: zksync.Contract;
beforeAll(async () => {
@@ -25,6 +26,7 @@ describe('ERC20 contract checks', () => {
bob = testMaster.newEmptyAccount();
tokenDetails = testMaster.environment().erc20Token;
+ baseTokenDetails = testMaster.environment().baseToken;
aliceErc20 = new zksync.Contract(tokenDetails.l2Address, zksync.utils.IERC20, alice);
});
@@ -56,6 +58,7 @@ describe('ERC20 contract checks', () => {
token: tokenDetails.l1Address,
amount,
approveERC20: true,
+ approveBaseERC20: true,
approveOverrides: {
gasPrice
},
@@ -173,11 +176,12 @@ describe('ERC20 contract checks', () => {
const initialBalance = await alice.getBalanceL1(tokenDetails.l1Address);
// Deposit to the zero address is forbidden and should fail with the current implementation.
const depositHandle = await alice.deposit({
- to: ethers.constants.AddressZero,
token: tokenDetails.l1Address,
+ to: ethers.constants.AddressZero,
amount,
- l2GasLimit: 5_000_000, // Setting the limit manually to avoid estimation for L1->L2 transaction
- approveERC20: true
+ approveERC20: true,
+ approveBaseERC20: true,
+ l2GasLimit: 5_000_000 // Setting the limit manually to avoid estimation for L1->L2 transaction
});
const l1Receipt = await depositHandle.waitL1Commit();
@@ -191,16 +195,17 @@ describe('ERC20 contract checks', () => {
const l2Hash = zksync.utils.getL2HashFromPriorityOp(l1Receipt, await alice.provider.getMainContractAddress());
const l2TxReceipt = await alice.provider.getTransactionReceipt(l2Hash);
await waitUntilBlockFinalized(alice, l2TxReceipt.blockNumber);
-
// Claim failed deposit.
await expect(alice.claimFailedDeposit(l2Hash)).toBeAccepted();
await expect(alice.getBalanceL1(tokenDetails.l1Address)).resolves.bnToBeEq(initialBalance);
});
test('Can perform a deposit with precalculated max value', async () => {
+ const maxAmountBase = await alice.getBalanceL1(baseTokenDetails.l1Address);
const maxAmount = await alice.getBalanceL1(tokenDetails.l1Address);
// Approving the needed allowance to ensure that the user has enough funds.
+ await (await alice.approveERC20(baseTokenDetails.l1Address, maxAmountBase)).wait();
await (await alice.approveERC20(tokenDetails.l1Address, maxAmount)).wait();
const depositFee = await alice.getFullRequiredDepositFee({
diff --git a/core/tests/ts-integration/tests/ether.test.ts b/core/tests/ts-integration/tests/ether.test.ts
index eef7b0d0d01f..3cd680cc601f 100644
--- a/core/tests/ts-integration/tests/ether.test.ts
+++ b/core/tests/ts-integration/tests/ether.test.ts
@@ -6,7 +6,7 @@ import { TestMaster } from '../src/index';
import { shouldChangeETHBalances, shouldOnlyTakeFee } from '../src/modifiers/balance-checker';
import { checkReceipt } from '../src/modifiers/receipt-check';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import { BigNumber, Overrides } from 'ethers';
import { scaledGasPrice } from '../src/helpers';
@@ -16,14 +16,23 @@ describe('ETH token checks', () => {
let testMaster: TestMaster;
let alice: zksync.Wallet;
let bob: zksync.Wallet;
+ let isETHBasedChain: boolean;
- beforeAll(() => {
+ beforeAll(async () => {
testMaster = TestMaster.getInstance(__filename);
alice = testMaster.mainAccount();
bob = testMaster.newEmptyAccount();
+ // Get the information about base token address directly from the L2.
+ const baseTokenAddress = await alice._providerL2().getBaseTokenContractAddress();
+ isETHBasedChain = baseTokenAddress == zksync.utils.ETH_ADDRESS_IN_CONTRACTS;
+ console.log(`Starting checks for base token: ${baseTokenAddress} isEthBasedChain: ${isETHBasedChain}`);
});
test('Can perform a deposit', async () => {
+ if (!isETHBasedChain) {
+ // TODO(EVM-555): Currently this test is not working for non-eth based chains.
+ return;
+ }
const amount = 1; // 1 wei is enough.
const gasPrice = scaledGasPrice(alice);
@@ -32,6 +41,8 @@ describe('ETH token checks', () => {
const l2ethBalanceChange = await shouldChangeETHBalances([{ wallet: alice, change: amount }], {
l1ToL2: true
});
+ const gasPerPubdataByte = zksync.utils.REQUIRED_L1_TO_L2_GAS_PER_PUBDATA_LIMIT;
+ const isBaseToken = isETHBasedChain;
const l2GasLimit = await zksync.utils.estimateDefaultBridgeDepositL2Gas(
alice.providerL1!,
@@ -39,9 +50,10 @@ describe('ETH token checks', () => {
ETH_ADDRESS,
amount,
alice.address,
- alice.address
+ alice.address,
+ gasPerPubdataByte,
+ isBaseToken
);
- const gasPerPubdataByte = zksync.utils.REQUIRED_L1_TO_L2_GAS_PER_PUBDATA_LIMIT;
const expectedL2Costs = await alice.getBaseCost({
gasLimit: l2GasLimit,
gasPerPubdataByte,
@@ -53,6 +65,11 @@ describe('ETH token checks', () => {
amount,
gasPerPubdataByte,
l2GasLimit,
+ approveBaseERC20: true,
+ approveERC20: true,
+ approveBaseOverrides: {
+ gasPrice
+ },
overrides: {
gasPrice
}
@@ -189,6 +206,10 @@ describe('ETH token checks', () => {
});
test('Can perform a withdrawal', async () => {
+ if (!isETHBasedChain) {
+ // TODO(EVM-555): Currently this test is not working for non-eth based chains.
+ return;
+ }
if (testMaster.isFastMode()) {
return;
}
@@ -208,14 +229,22 @@ describe('ETH token checks', () => {
});
test('Can perform a deposit with precalculated max value', async () => {
+ if (!isETHBasedChain) {
+ // TODO(EVM-555): Currently this test is not working for non-eth based chains.
+ return;
+ const baseTokenDetails = testMaster.environment().baseToken;
+ const maxAmount = await alice.getBalanceL1(baseTokenDetails.l1Address);
+ await (await alice.approveERC20(process.env.CONTRACTS_BASE_TOKEN_ADDR!, maxAmount)).wait();
+ }
+
const depositFee = await alice.getFullRequiredDepositFee({
token: ETH_ADDRESS
});
const l1Fee = depositFee.l1GasLimit.mul(depositFee.maxFeePerGas! || depositFee.gasPrice!);
const l2Fee = depositFee.baseCost;
-
const maxAmount = (await alice.getBalanceL1()).sub(l1Fee).sub(l2Fee);
+ // Approving the needed allowance to ensure that the user has enough funds.
const l2ethBalanceChange = await shouldChangeETHBalances([{ wallet: alice, change: maxAmount }], {
l1ToL2: true
});
@@ -232,6 +261,8 @@ describe('ETH token checks', () => {
token: ETH_ADDRESS,
amount: maxAmount,
l2GasLimit: depositFee.l2GasLimit,
+ approveBaseERC20: true,
+ approveERC20: true,
overrides
});
diff --git a/core/tests/ts-integration/tests/fees.test.ts b/core/tests/ts-integration/tests/fees.test.ts
index 3bfa93ef59f8..e7aba50f997f 100644
--- a/core/tests/ts-integration/tests/fees.test.ts
+++ b/core/tests/ts-integration/tests/fees.test.ts
@@ -13,7 +13,7 @@ import * as utils from 'zk/build/utils';
import * as fs from 'fs';
import { TestMaster } from '../src/index';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import { BigNumber, ethers } from 'ethers';
import { Token } from '../src/types';
diff --git a/core/tests/ts-integration/tests/l1.test.ts b/core/tests/ts-integration/tests/l1.test.ts
index fae5b1180990..b1ee21324aeb 100644
--- a/core/tests/ts-integration/tests/l1.test.ts
+++ b/core/tests/ts-integration/tests/l1.test.ts
@@ -6,10 +6,15 @@
* and waiting for the block finalization).
*/
import { TestMaster } from '../src/index';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import * as ethers from 'ethers';
import { deployContract, getTestContract, scaledGasPrice, waitForNewL1Batch } from '../src/helpers';
-import { getHashedL2ToL1Msg, L1_MESSENGER, L1_MESSENGER_ADDRESS } from 'zksync-web3/build/src/utils';
+import {
+ getHashedL2ToL1Msg,
+ L1_MESSENGER,
+ L1_MESSENGER_ADDRESS,
+ REQUIRED_L1_TO_L2_GAS_PER_PUBDATA_LIMIT
+} from 'zksync-ethers/build/src/utils';
const SYSTEM_CONFIG = require(`${process.env.ZKSYNC_HOME}/contracts/SystemConfig.json`);
@@ -31,6 +36,9 @@ describe('Tests for L1 behavior', () => {
let contextContract: zksync.Contract;
let errorContract: zksync.Contract;
+ let isETHBasedChain: boolean;
+ let expectedL2Costs: ethers.BigNumberish;
+
beforeAll(() => {
testMaster = TestMaster.getInstance(__filename);
alice = testMaster.mainAccount();
@@ -44,6 +52,31 @@ describe('Tests for L1 behavior', () => {
errorContract = await deployContract(alice, contracts.errors, []);
});
+ test('Should provide allowance to shared bridge, if base token is not ETH', async () => {
+ const baseTokenAddress = process.env.CONTRACTS_BASE_TOKEN_ADDR!;
+ isETHBasedChain = baseTokenAddress == zksync.utils.ETH_ADDRESS_IN_CONTRACTS;
+ if (!isETHBasedChain) {
+ const baseTokenDetails = testMaster.environment().baseToken;
+ const maxAmount = await alice.getBalanceL1(baseTokenDetails.l1Address);
+ await (await alice.approveERC20(baseTokenDetails.l1Address, maxAmount)).wait();
+ }
+ });
+
+ test('Should calculate l2 base cost, if base token is not ETH', async () => {
+ const gasPrice = await scaledGasPrice(alice);
+ if (!isETHBasedChain) {
+ expectedL2Costs = (
+ await alice.getBaseCost({
+ gasLimit: maxL2GasLimitForPriorityTxs(),
+ gasPerPubdataByte: REQUIRED_L1_TO_L2_GAS_PER_PUBDATA_LIMIT,
+ gasPrice
+ })
+ )
+ .mul(140)
+ .div(100);
+ }
+ });
+
test('Should request L1 execute', async () => {
const calldata = counterContract.interface.encodeFunctionData('increment', ['1']);
const gasPrice = scaledGasPrice(alice);
@@ -52,6 +85,7 @@ describe('Tests for L1 behavior', () => {
alice.requestExecute({
contractAddress: counterContract.address,
calldata,
+ mintValue: isETHBasedChain ? ethers.BigNumber.from(0) : expectedL2Costs,
overrides: {
gasPrice
}
@@ -69,6 +103,7 @@ describe('Tests for L1 behavior', () => {
contractAddress: contextContract.address,
calldata,
l2Value,
+ mintValue: isETHBasedChain ? ethers.BigNumber.from(0) : expectedL2Costs,
overrides: {
gasPrice
}
@@ -85,6 +120,7 @@ describe('Tests for L1 behavior', () => {
contractAddress: errorContract.address,
calldata,
l2GasLimit: DEFAULT_L2_GAS_LIMIT,
+ mintValue: isETHBasedChain ? ethers.BigNumber.from(0) : expectedL2Costs,
overrides: {
gasPrice
}
@@ -116,12 +152,12 @@ describe('Tests for L1 behavior', () => {
expect(accumutatedRoot).toBe(root);
// Ensure that provided proof is accepted by the main zkSync contract.
- const zkSyncContract = await alice.getMainContract();
- const acceptedByContract = await zkSyncContract.proveL2MessageInclusion(
+ const chainContract = await alice.getMainContract();
+ const acceptedByContract = await chainContract.proveL2MessageInclusion(
receipt.l1BatchNumber,
id,
{
- txNumberInBlock: receipt.l1BatchTxIndex,
+ txNumberInBatch: receipt.l1BatchTxIndex,
sender: alice.address,
data: message
},
@@ -132,7 +168,6 @@ describe('Tests for L1 behavior', () => {
test('Should check max L2 gas limit for priority txs', async () => {
const gasPrice = scaledGasPrice(alice);
-
const l2GasLimit = maxL2GasLimitForPriorityTxs();
// Check that the request with higher `gasLimit` fails.
@@ -140,6 +175,7 @@ describe('Tests for L1 behavior', () => {
contractAddress: alice.address,
calldata: '0x',
l2GasLimit: l2GasLimit + 1,
+ mintValue: isETHBasedChain ? ethers.BigNumber.from(0) : expectedL2Costs,
overrides: {
gasPrice,
gasLimit: 600_000
@@ -158,6 +194,7 @@ describe('Tests for L1 behavior', () => {
contractAddress: alice.address,
calldata: '0x',
l2GasLimit,
+ mintValue: isETHBasedChain ? ethers.BigNumber.from(0) : expectedL2Costs,
overrides: {
gasPrice
}
@@ -185,6 +222,7 @@ describe('Tests for L1 behavior', () => {
contractAddress: contract.address,
calldata,
l2GasLimit,
+ mintValue: isETHBasedChain ? ethers.BigNumber.from(0) : expectedL2Costs,
overrides: {
gasPrice
}
@@ -239,6 +277,7 @@ describe('Tests for L1 behavior', () => {
contractAddress: contract.address,
calldata,
l2GasLimit,
+ mintValue: isETHBasedChain ? ethers.BigNumber.from(0) : expectedL2Costs,
overrides: {
gasPrice
}
@@ -273,6 +312,7 @@ describe('Tests for L1 behavior', () => {
contractAddress: contract.address,
calldata,
l2GasLimit,
+ mintValue: isETHBasedChain ? ethers.BigNumber.from(0) : expectedL2Costs,
overrides: {
gasPrice
}
@@ -310,6 +350,7 @@ describe('Tests for L1 behavior', () => {
contractAddress: contract.address,
calldata,
l2GasLimit,
+ mintValue: isETHBasedChain ? ethers.BigNumber.from(0) : expectedL2Costs,
overrides: {
gasPrice
}
diff --git a/core/tests/ts-integration/tests/l2-weth.test.ts b/core/tests/ts-integration/tests/l2-weth.test.ts
deleted file mode 100644
index 186d0b5988aa..000000000000
--- a/core/tests/ts-integration/tests/l2-weth.test.ts
+++ /dev/null
@@ -1,181 +0,0 @@
-/**
- * This suite contains tests checking the interaction with L2 WETH Bridge/Token.
- */
-import { TestMaster } from '../src/index';
-
-import * as zksync from 'zksync-web3';
-import { scaledGasPrice, waitUntilBlockFinalized } from '../src/helpers';
-import { WETH9, WETH9Factory } from 'l1-contracts/typechain';
-import { L2Weth, L2WethFactory } from 'l2-contracts/typechain';
-import { BigNumber, ethers } from 'ethers';
-import {
- shouldChangeETHBalances,
- shouldChangeTokenBalances,
- shouldOnlyTakeFee
-} from '../src/modifiers/balance-checker';
-import { L2_DEFAULT_ETH_PER_ACCOUNT } from '../src/context-owner';
-
-describe('Tests for the WETH bridge/token behavior', () => {
- let testMaster: TestMaster;
- let alice: zksync.Wallet;
- let bob: zksync.Wallet;
- let aliceL1Weth: WETH9;
- let aliceL2Weth: L2Weth;
-
- beforeAll(async () => {
- testMaster = TestMaster.getInstance(__filename);
- alice = testMaster.mainAccount();
- bob = testMaster.newEmptyAccount();
-
- const l1WethTokenAddress = testMaster.environment().wethToken.l1Address;
- aliceL1Weth = WETH9Factory.connect(l1WethTokenAddress, alice._signerL1());
-
- const l2WethTokenAddress = testMaster.environment().wethToken.l2Address;
- aliceL2Weth = L2WethFactory.connect(l2WethTokenAddress, alice._signerL2());
- });
-
- test('Should deposit WETH', async () => {
- let balance = await alice.getBalanceL1();
- let transferTx = await alice._signerL1().sendTransaction({
- to: bob.address,
- value: balance.div(2)
- });
- await transferTx.wait();
-
- const gasPrice = await scaledGasPrice(alice);
- // Convert Ether to WETH.
- const amount = 1000; // 1000 wei is enough
- await (await aliceL1Weth.deposit({ value: amount, gasPrice })).wait();
-
- const initialBalanceL1 = await alice.getBalanceL1(aliceL1Weth.address);
- const initialBalanceL2 = await alice.getBalance(aliceL2Weth.address);
- let tx = await alice.deposit({
- token: aliceL1Weth.address,
- amount,
- approveERC20: true,
- approveOverrides: {
- gasPrice
- },
- overrides: {
- gasPrice
- }
- });
-
- await tx.wait();
- await expect(alice.getBalanceL1(aliceL1Weth.address)).resolves.bnToBeEq(initialBalanceL1.sub(amount));
- await expect(alice.getBalance(aliceL2Weth.address)).resolves.bnToBeEq(initialBalanceL2.add(amount));
- });
-
- test('Should transfer WETH', async () => {
- const value = BigNumber.from(200);
-
- const balanceChange = await shouldChangeTokenBalances(aliceL2Weth.address, [
- { wallet: alice, change: -value },
- { wallet: bob, change: value }
- ]);
- const feeCheck = await shouldOnlyTakeFee(alice);
-
- // Send transfer, it should succeed.
- await expect(aliceL2Weth.transfer(bob.address, value)).toBeAccepted([balanceChange, feeCheck]);
- });
-
- test('Can unwrap WETH on L2', async () => {
- const value = BigNumber.from(200);
-
- const tokenBalanceChange = await shouldChangeTokenBalances(aliceL2Weth.address, [
- { wallet: alice, change: -value }
- ]);
- const ethBalanceChange = await shouldChangeETHBalances([{ wallet: alice, change: value }]);
- await expect(aliceL2Weth.withdraw(value)).toBeAccepted([tokenBalanceChange, ethBalanceChange]);
- });
-
- test('Approve and transferFrom should work', async () => {
- const approveAmount = 42;
- const bobErc20 = aliceL2Weth.connect(bob);
-
- // Fund bob's account to perform a transaction from it.
- await alice
- .transfer({ to: bob.address, amount: L2_DEFAULT_ETH_PER_ACCOUNT.div(8), token: zksync.utils.ETH_ADDRESS })
- .then((tx) => tx.wait());
-
- const bobTokenBalanceChange = await shouldChangeTokenBalances(aliceL2Weth.address, [
- { wallet: alice, change: -approveAmount },
- { wallet: bob, change: approveAmount }
- ]);
-
- await expect(aliceL2Weth.allowance(alice.address, bob.address)).resolves.bnToBeEq(0);
- await expect(aliceL2Weth.approve(bob.address, approveAmount)).toBeAccepted();
- await expect(aliceL2Weth.allowance(alice.address, bob.address)).resolves.bnToBeEq(approveAmount);
- await expect(bobErc20.transferFrom(alice.address, bob.address, approveAmount)).toBeAccepted([
- bobTokenBalanceChange
- ]);
- await expect(aliceL2Weth.allowance(alice.address, bob.address)).resolves.bnToBeEq(0);
- });
-
- test('Can perform a withdrawal', async () => {
- if (testMaster.isFastMode()) {
- return;
- }
- const amount = 1;
-
- const l2BalanceChange = await shouldChangeTokenBalances(aliceL2Weth.address, [
- { wallet: alice, change: -amount }
- ]);
- const feeCheck = await shouldOnlyTakeFee(alice);
- const withdrawalPromise = alice.withdraw({ token: aliceL2Weth.address, amount });
- await expect(withdrawalPromise).toBeAccepted([l2BalanceChange, feeCheck]);
- const withdrawalTx = await withdrawalPromise;
- await withdrawalTx.waitFinalize();
-
- // Note: For L1 we should use L1 token address.
- const l1BalanceChange = await shouldChangeTokenBalances(
- aliceL1Weth.address,
- [{ wallet: alice, change: amount }],
- {
- l1: true
- }
- );
- await expect(alice.finalizeWithdrawal(withdrawalTx.hash)).toBeAccepted([l1BalanceChange]);
- });
-
- test('Should fail to claim failed deposit', async () => {
- if (testMaster.isFastMode()) {
- return;
- }
-
- const amount = 1;
- const initialWethL1Balance = await alice.getBalanceL1(aliceL1Weth.address);
- const initialWethL2Balance = await alice.getBalance(aliceL2Weth.address);
- const initialEthL2Balance = await alice.getBalance();
- // Deposit to the zero address is forbidden and should fail with the current implementation.
- const depositHandle = await alice.deposit({
- to: ethers.constants.AddressZero,
- token: aliceL1Weth.address,
- amount,
- l2GasLimit: 5_000_000, // Setting the limit manually to avoid estimation for L1->L2 transaction
- approveERC20: true
- });
- const l1Receipt = await depositHandle.waitL1Commit();
-
- // L1 balance should change, but tx should fail in L2.
- await expect(alice.getBalanceL1(aliceL1Weth.address)).resolves.bnToBeEq(initialWethL1Balance.sub(amount));
- await expect(depositHandle).toBeReverted();
-
- // Wait for tx to be finalized.
- // `waitFinalize` is not used because it doesn't work as expected for failed transactions.
- // It throws once it gets status == 0 in the receipt and doesn't wait for the finalization.
- const l2Hash = zksync.utils.getL2HashFromPriorityOp(l1Receipt, await alice.provider.getMainContractAddress());
- const l2TxReceipt = await alice.provider.getTransactionReceipt(l2Hash);
- await waitUntilBlockFinalized(alice, l2TxReceipt.blockNumber);
-
- // Try to claim failed deposit, which should revert, and ETH should be returned on L2.
- await expect(alice.claimFailedDeposit(l2Hash)).toBeRevertedEstimateGas();
- await expect(alice.getBalanceL1(aliceL1Weth.address)).resolves.bnToBeEq(initialWethL1Balance.sub(amount));
- await expect(alice.getBalance(aliceL2Weth.address)).resolves.bnToBeEq(initialWethL2Balance);
- await expect(alice.getBalance()).resolves.bnToBeGte(initialEthL2Balance.add(amount));
- });
-
- afterAll(async () => {
- await testMaster.deinitialize();
- });
-});
diff --git a/core/tests/ts-integration/tests/mempool.test.ts b/core/tests/ts-integration/tests/mempool.test.ts
index b4fdafd54a61..9dcf86b25693 100644
--- a/core/tests/ts-integration/tests/mempool.test.ts
+++ b/core/tests/ts-integration/tests/mempool.test.ts
@@ -3,7 +3,7 @@
* scheduled, processed and/or postponed.
*/
import { TestMaster } from '../src/index';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
describe('Tests for the mempool behavior', () => {
let testMaster: TestMaster;
diff --git a/core/tests/ts-integration/tests/paymaster.test.ts b/core/tests/ts-integration/tests/paymaster.test.ts
index f7144949bb44..66fa6c0b5878 100644
--- a/core/tests/ts-integration/tests/paymaster.test.ts
+++ b/core/tests/ts-integration/tests/paymaster.test.ts
@@ -2,15 +2,15 @@
* This suite contains tests checking the behavior of paymasters -- entities that can cover fees for users.
*/
import { TestMaster } from '../src/index';
-import * as zksync from 'zksync-web3';
-import { Provider, Wallet, utils, Contract } from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
+import { Provider, Wallet, utils, Contract } from 'zksync-ethers';
import * as ethers from 'ethers';
import { deployContract, getTestContract } from '../src/helpers';
import { L2_DEFAULT_ETH_PER_ACCOUNT } from '../src/context-owner';
import { checkReceipt } from '../src/modifiers/receipt-check';
import { extractFee } from '../src/modifiers/balance-checker';
import { TestMessage } from '../src/matchers/matcher-helpers';
-import { Address } from 'zksync-web3/build/src/types';
+import { Address } from 'zksync-ethers/build/src/types';
import * as hre from 'hardhat';
import { Deployer } from '@matterlabs/hardhat-zksync-deploy';
import { ZkSyncArtifact } from '@matterlabs/hardhat-zksync-deploy/dist/types';
@@ -55,6 +55,12 @@ describe('Paymaster tests', () => {
});
test('Should pay fee with paymaster', async () => {
+ paymaster = await deployContract(alice, contracts.customPaymaster, []);
+ // Supplying paymaster with ETH it would need to cover the fees for the user
+ await alice
+ .transfer({ to: paymaster.address, amount: L2_DEFAULT_ETH_PER_ACCOUNT.div(4) })
+ .then((tx) => tx.wait());
+
const correctSignature = new Uint8Array(46);
const paymasterParamsForEstimation = await getTestPaymasterParamsForFeeEstimation(
@@ -183,8 +189,6 @@ describe('Paymaster tests', () => {
});
const txPromise = alice.sendTransaction({
...tx,
- maxFeePerGas: gasPrice,
- maxPriorityFeePerGas: gasPrice,
gasLimit,
customData: {
gasPerPubdata: utils.DEFAULT_GAS_PER_PUBDATA_LIMIT,
@@ -233,7 +237,7 @@ describe('Paymaster tests', () => {
});
it('Should deploy nonce-check paymaster and not fail validation', async function () {
- const deployer = new Deployer(hre, alice);
+ const deployer = new Deployer(hre as any, alice as any);
const paymaster = await deployPaymaster(deployer);
const token = testMaster.environment().erc20Token;
diff --git a/core/tests/ts-integration/tests/system.test.ts b/core/tests/ts-integration/tests/system.test.ts
index 5e6ef82b25ee..5dcbf02c66d5 100644
--- a/core/tests/ts-integration/tests/system.test.ts
+++ b/core/tests/ts-integration/tests/system.test.ts
@@ -9,11 +9,10 @@ import { TestMaster } from '../src/index';
import { shouldChangeTokenBalances } from '../src/modifiers/balance-checker';
import { L2_DEFAULT_ETH_PER_ACCOUNT } from '../src/context-owner';
-import * as zksync from 'zksync-web3';
+import * as zksync from 'zksync-ethers';
import * as ethers from 'ethers';
import { BigNumberish, BytesLike } from 'ethers';
-import { serialize, hashBytecode } from 'zksync-web3/build/src/utils';
-import { deployOnAnyLocalAddress, ForceDeployment } from '../src/system';
+import { serialize, hashBytecode } from 'zksync-ethers/build/src/utils';
import { getTestContract } from '../src/helpers';
const contracts = {
@@ -188,8 +187,6 @@ describe('System behavior checks', () => {
from: alice.address,
data: '0x',
value: 0,
- maxFeePerGas: 12000,
- maxPriorityFeePerGas: 100,
customData: {
gasPerPubdata: zksync.utils.DEFAULT_GAS_PER_PUBDATA_LIMIT
}
@@ -296,69 +293,6 @@ describe('System behavior checks', () => {
testMaster.reporter.debug('Finalized withdrawal #2');
});
- // TODO (SMA-1713): the test is flaky.
- test.skip('Should test forceDeploy', async () => {
- // Testing forcedDeploys involves small upgrades of smart contacts.
- // Thus, it is not appropriate to do them anywhere else except for localhost.
- if (testMaster.environment().network !== 'localhost') {
- return;
- }
-
- const bytecodeHash = hashBytecode(contracts.counter.bytecode);
-
- // Force-deploying two counters on the address 0x100 and 0x101
- const forcedDeployments: ForceDeployment[] = [
- {
- bytecodeHash,
- newAddress: '0x0000000000000000000000000000000000000100',
- value: ethers.BigNumber.from(0),
- input: '0x',
- callConstructor: true
- },
- {
- bytecodeHash,
- newAddress: '0x0000000000000000000000000000000000000101',
- value: ethers.BigNumber.from(0),
- input: '0x',
- callConstructor: true
- }
- ];
-
- await testForcedDeployments(forcedDeployments, contracts.counter.bytecode);
-
- // Testing that the bytecodes work correctly
- for (const deployment of forcedDeployments) {
- const contract = new ethers.Contract(deployment.newAddress, contracts.counter.abi, alice);
-
- // Checking that the forced-deployed counter works well
- await (await contract.set(1)).wait();
- expect(contract.get()).resolves.bnToBeEq(1);
- }
-
- // We use it to check that overriding old bytecodes would work just as fine
- // Here we use `contracts.events` contract, because it does not have a constructor and
- // so will not override the storage
- const eventsBytecode = contracts.events.bytecode;
- await testForcedDeployments(
- forcedDeployments.map((deployment) => ({ ...deployment, bytecodeHash: hashBytecode(eventsBytecode) })),
- eventsBytecode
- );
- // Checking that the methods of the `events` contract work
- for (const deployment of forcedDeployments) {
- const contract = new ethers.Contract(deployment.newAddress, contracts.events.abi, alice);
- await (await contract.test(1)).wait();
- }
-
- await testForcedDeployments(forcedDeployments, contracts.counter.bytecode);
- // Testing that the storage has been preserved
- for (const deployment of forcedDeployments) {
- const contract = new ethers.Contract(deployment.newAddress, contracts.counter.abi, alice);
-
- await (await contract.increment(1)).wait();
- expect(contract.get()).resolves.bnToBeEq(2);
- }
- });
-
test('should accept transaction with duplicated factory dep', async () => {
const bytecode = contracts.counter.bytecode;
// We need some bytecodes that weren't deployed before to test behavior properly.
@@ -393,21 +327,6 @@ describe('System behavior checks', () => {
return new ethers.Contract(BOOTLOADER_UTILS_ADDRESS, BOOTLOADER_UTILS, alice);
}
-
- async function testForcedDeployments(forcedDeployments: ForceDeployment[], bytecode: BytesLike) {
- const receipt = await deployOnAnyLocalAddress(alice.providerL1!, alice.provider, forcedDeployments, [bytecode]);
-
- // TODO: use toBeAccepted
- expect(receipt.status).toBe(1);
-
- // veryfing that the codes stored are correct
- for (const deployment of forcedDeployments) {
- const codeFromApi = await alice.provider.getCode(deployment.newAddress);
-
- // Testing that the API returns the correct bytecode
- expect(deployment.bytecodeHash).toStrictEqual(hashBytecode(codeFromApi));
- }
- }
});
// Interface encoding the transaction struct used for AA protocol
diff --git a/core/tests/upgrade-test/package.json b/core/tests/upgrade-test/package.json
index b0d9c4d5c85e..d3cb4875790d 100644
--- a/core/tests/upgrade-test/package.json
+++ b/core/tests/upgrade-test/package.json
@@ -30,7 +30,7 @@
"node-fetch": "^2.6.1",
"ts-node": "^10.1.0",
"typescript": "^4.3.5",
- "zksync-web3": "^0.15.5"
+ "zksync-ethers": "https://github.com/zksync-sdk/zksync-ethers#sb-old-sdk"
},
"dependencies": {
"prettier": "^2.3.2"
diff --git a/core/tests/upgrade-test/tests/tester.ts b/core/tests/upgrade-test/tests/tester.ts
index c490c9062f21..e4e2b960fb4d 100644
--- a/core/tests/upgrade-test/tests/tester.ts
+++ b/core/tests/upgrade-test/tests/tester.ts
@@ -1,5 +1,5 @@
import * as ethers from 'ethers';
-import * as zkweb3 from 'zksync-web3';
+import * as zkweb3 from 'zksync-ethers';
import * as fs from 'fs';
import * as path from 'path';
@@ -36,7 +36,7 @@ export class Tester {
ethWallet = new ethers.Wallet(process.env.MASTER_WALLET_PK!);
}
ethWallet = ethWallet.connect(ethProvider);
- const web3Provider = new zkweb3.Provider(process.env.ZKSYNC_WEB3_API_URL || "http://localhost:3050");
+ const web3Provider = new zkweb3.Provider(process.env.ZKSYNC_WEB3_API_URL || process.env.API_WEB3_JSON_RPC_HTTP_URL || "http://localhost:3050");
web3Provider.pollingInterval = 100; // It's OK to keep it low even on stage.
const syncWallet = new zkweb3.Wallet(ethWallet.privateKey, web3Provider, ethProvider);
diff --git a/core/tests/upgrade-test/tests/upgrade.test.ts b/core/tests/upgrade-test/tests/upgrade.test.ts
index 5bfdafd2a07b..4c7d79bacd38 100644
--- a/core/tests/upgrade-test/tests/upgrade.test.ts
+++ b/core/tests/upgrade-test/tests/upgrade.test.ts
@@ -1,14 +1,15 @@
import * as utils from 'zk/build/utils';
import { Tester } from './tester';
-import * as zkweb3 from 'zksync-web3';
+import * as zkweb3 from 'zksync-ethers';
import { BigNumber, BigNumberish, ethers } from 'ethers';
import { expect } from 'chai';
import { hashBytecode } from 'zksync-web3/build/src/utils';
import fs from 'fs';
import { TransactionResponse } from 'zksync-web3/build/src/types';
import { BytesLike } from '@ethersproject/bytes';
+import { isAddressEq } from 'zksync-ethers/build/src/utils';
-const L1_CONTRACTS_FOLDER = `${process.env.ZKSYNC_HOME}/contracts/l1-contracts/artifacts/cache/solpp-generated-contracts`;
+const L1_CONTRACTS_FOLDER = `${process.env.ZKSYNC_HOME}/contracts/l1-contracts/artifacts/contracts`;
const L1_DEFAULT_UPGRADE_ABI = new ethers.utils.Interface(
require(`${L1_CONTRACTS_FOLDER}/upgrades/DefaultUpgrade.sol/DefaultUpgrade.json`).abi
);
@@ -16,16 +17,20 @@ const GOVERNANCE_ABI = new ethers.utils.Interface(
require(`${L1_CONTRACTS_FOLDER}/governance/Governance.sol/Governance.json`).abi
);
const ADMIN_FACET_ABI = new ethers.utils.Interface(
- require(`${L1_CONTRACTS_FOLDER}/zksync/facets/Admin.sol/AdminFacet.json`).abi
+ require(`${L1_CONTRACTS_FOLDER}/state-transition/chain-interfaces/IAdmin.sol/IAdmin.json`).abi
);
const L2_FORCE_DEPLOY_UPGRADER_ABI = new ethers.utils.Interface(
- require(`${process.env.ZKSYNC_HOME}/contracts/l2-contracts/artifacts-zk/cache-zk/solpp-generated-contracts/ForceDeployUpgrader.sol/ForceDeployUpgrader.json`).abi
+ require(`${process.env.ZKSYNC_HOME}/contracts/l2-contracts/artifacts-zk/contracts/ForceDeployUpgrader.sol/ForceDeployUpgrader.json`).abi
);
const COMPLEX_UPGRADER_ABI = new ethers.utils.Interface(
require(`${process.env.ZKSYNC_HOME}/contracts/system-contracts/artifacts-zk/contracts-preprocessed/ComplexUpgrader.sol/ComplexUpgrader.json`).abi
);
const COUNTER_BYTECODE =
require(`${process.env.ZKSYNC_HOME}/core/tests/ts-integration/artifacts-zk/contracts/counter/counter.sol/Counter.json`).deployedBytecode;
+const STATE_TRANSITON_MANAGER = new ethers.utils.Interface(
+ require(`${L1_CONTRACTS_FOLDER}/state-transition/StateTransitionManager.sol/StateTransitionManager.json`).abi
+);
+
const depositAmount = ethers.utils.parseEther('0.001');
describe('Upgrade test', function () {
@@ -37,6 +42,7 @@ describe('Upgrade test', function () {
let bootloaderHash: string;
let scheduleTransparentOperation: string;
let executeOperation: string;
+ let finalizeOperation: string;
let forceDeployAddress: string;
let forceDeployBytecode: string;
let logs: fs.WriteStream;
@@ -82,14 +88,24 @@ describe('Upgrade test', function () {
if (!mainContract) {
throw new Error('Server did not start');
}
- const governanceContractAddr = await mainContract.getGovernor();
- governanceContract = new zkweb3.Contract(governanceContractAddr, GOVERNANCE_ABI, tester.syncWallet);
- let blocksCommitted = await mainContract.getTotalBlocksCommitted();
+
+ const stmAddr = await mainContract.getStateTransitionManager();
+ const stmContract = new ethers.Contract(stmAddr, STATE_TRANSITON_MANAGER, tester.syncWallet.providerL1);
+ const governanceAddr = await stmContract.owner();
+ governanceContract = new ethers.Contract(governanceAddr, GOVERNANCE_ABI, tester.syncWallet.providerL1);
+ let blocksCommitted = await mainContract.getTotalBatchesCommitted();
const initialL1BatchNumber = await tester.web3Provider.getL1BatchNumber();
+ const baseToken = await tester.syncWallet.provider.getBaseTokenContractAddress();
+
+ if (!isAddressEq(baseToken, zkweb3.utils.ETH_ADDRESS_IN_CONTRACTS)) {
+ await (await tester.syncWallet.approveERC20(baseToken, ethers.constants.MaxUint256)).wait();
+ await mintToWallet(baseToken, tester.syncWallet, depositAmount.mul(10));
+ }
+
const firstDepositHandle = await tester.syncWallet.deposit({
- token: zkweb3.utils.ETH_ADDRESS,
+ token: baseToken,
amount: depositAmount,
to: alice.address
});
@@ -99,7 +115,7 @@ describe('Upgrade test', function () {
}
const secondDepositHandle = await tester.syncWallet.deposit({
- token: zkweb3.utils.ETH_ADDRESS,
+ token: baseToken,
amount: depositAmount,
to: alice.address
});
@@ -120,10 +136,10 @@ describe('Upgrade test', function () {
}
// Wait for at least one new committed block
- let newBlocksCommitted = await mainContract.getTotalBlocksCommitted();
+ let newBlocksCommitted = await mainContract.getTotalBatchesCommitted();
let tryCount = 0;
- while (blocksCommitted.eq(newBlocksCommitted) && tryCount < 10) {
- newBlocksCommitted = await mainContract.getTotalBlocksCommitted();
+ while (blocksCommitted.eq(newBlocksCommitted) && tryCount < 30) {
+ newBlocksCommitted = await mainContract.getTotalBatchesCommitted();
tryCount += 1;
await utils.sleep(1);
}
@@ -162,7 +178,7 @@ describe('Upgrade test', function () {
const delegateCalldata = L2_FORCE_DEPLOY_UPGRADER_ABI.encodeFunctionData('forceDeploy', [[forceDeployment]]);
const data = COMPLEX_UPGRADER_ABI.encodeFunctionData('upgrade', [delegateTo, delegateCalldata]);
- const newProtocolVersion = (await alice._providerL2().send('zks_getProtocolVersion', [null])).version_id + 1;
+ const oldProtocolVersion = await alice._providerL2().send('zks_getProtocolVersion', [null]);
const calldata = await prepareUpgradeCalldata(govWallet, alice._providerL2(), {
l2ProtocolUpgradeTx: {
txType: 254,
@@ -184,17 +200,17 @@ describe('Upgrade test', function () {
factoryDeps: [forceDeployBytecode],
bootloaderHash,
upgradeTimestamp: 0,
- newProtocolVersion
+ oldProtocolVersion: oldProtocolVersion.version_id
});
scheduleTransparentOperation = calldata.scheduleTransparentOperation;
executeOperation = calldata.executeOperation;
+ finalizeOperation = calldata.finalizeOperation;
- await (
- await govWallet.sendTransaction({
- to: governanceContract.address,
- data: scheduleTransparentOperation
- })
- ).wait();
+ const scheduleUpgrade = await govWallet.sendTransaction({
+ to: governanceContract.address,
+ data: scheduleTransparentOperation
+ });
+ await scheduleUpgrade.wait();
// Wait for server to process L1 event.
await utils.sleep(2);
@@ -216,10 +232,10 @@ describe('Upgrade test', function () {
l1BatchNumber -= 1;
}
- let lastBatchExecuted = await mainContract.getTotalBlocksExecuted();
+ let lastBatchExecuted = await mainContract.getTotalBatchesExecuted();
let tryCount = 0;
- while (lastBatchExecuted < l1BatchNumber && tryCount < 10) {
- lastBatchExecuted = await mainContract.getTotalBlocksExecuted();
+ while (lastBatchExecuted < l1BatchNumber && tryCount < 40) {
+ lastBatchExecuted = await mainContract.getTotalBatchesExecuted();
tryCount += 1;
await utils.sleep(2);
}
@@ -228,12 +244,20 @@ describe('Upgrade test', function () {
}
// Send execute tx.
- await (
- await govWallet.sendTransaction({
- to: governanceContract.address,
- data: executeOperation
- })
- ).wait();
+ const execute = await govWallet.sendTransaction({
+ to: governanceContract.address,
+ data: executeOperation
+ });
+ await execute.wait();
+ });
+
+ step('Finalize upgrade on the target chain', async () => {
+ // Send finalize tx.
+ const finalize = await govWallet.sendTransaction({
+ to: mainContract.address,
+ data: finalizeOperation
+ });
+ await finalize.wait();
let bootloaderHashL1 = await mainContract.getL2BootloaderBytecodeHash();
expect(bootloaderHashL1).eq(bootloaderHash);
@@ -257,7 +281,7 @@ describe('Upgrade test', function () {
// Run again.
utils.background(
- 'cd $ZKSYNC_HOME && cargo run --bin zksync_server --release -- --components=api,tree,eth,state_keeper,commitment_generator &> upgrade.log',
+ 'cd $ZKSYNC_HOME && zk f cargo run --bin zksync_server --release -- --components=api,tree,eth,state_keeper,commitment_generator &> upgrade.log',
[null, logs, logs]
);
await utils.sleep(5);
@@ -359,8 +383,7 @@ async function prepareUpgradeCalldata(
l1ContractsUpgradeCalldata?: BytesLike;
postUpgradeCalldata?: BytesLike;
upgradeTimestamp: BigNumberish;
- newProtocolVersion?: BigNumberish;
- newAllowList?: string;
+ oldProtocolVersion?: BigNumberish;
}
) {
const upgradeAddress = process.env.CONTRACTS_DEFAULT_UPGRADE_ADDR;
@@ -369,10 +392,12 @@ async function prepareUpgradeCalldata(
throw new Error('CONTRACTS_DEFAULT_UPGRADE_ADDR not set');
}
- const zkSyncContract = await l2Provider.getMainContractAddress();
- const zkSync = new ethers.Contract(zkSyncContract, zkweb3.utils.ZKSYNC_MAIN_ABI, govWallet);
+ const zksyncAddress = await l2Provider.getMainContractAddress();
+ const zksync = new ethers.Contract(zksyncAddress, zkweb3.utils.ZKSYNC_MAIN_ABI, govWallet);
+ const stmAddress = await zksync.getStateTransitionManager();
- const newProtocolVersion = params.newProtocolVersion ?? (await zkSync.getProtocolVersion()).add(1);
+ const oldProtocolVersion = params.oldProtocolVersion ?? (await zksync.getProtocolVersion());
+ const newProtocolVersion = ethers.BigNumber.from(oldProtocolVersion).add(1);
params.l2ProtocolUpgradeTx.nonce ??= newProtocolVersion;
const upgradeInitData = L1_DEFAULT_UPGRADE_ABI.encodeFunctionData('upgrade', [
[
@@ -385,8 +410,7 @@ async function prepareUpgradeCalldata(
params.l1ContractsUpgradeCalldata ?? '0x',
params.postUpgradeCalldata ?? '0x',
params.upgradeTimestamp,
- newProtocolVersion,
- params.newAllowList ?? ethers.constants.AddressZero
+ newProtocolVersion
]
]);
@@ -397,13 +421,19 @@ async function prepareUpgradeCalldata(
initCalldata: upgradeInitData
};
- // Prepare calldata for upgrading diamond proxy
- const diamondProxyUpgradeCalldata = ADMIN_FACET_ABI.encodeFunctionData('executeUpgrade', [upgradeParam]);
+ // Prepare calldata for upgrading STM
+ const stmUpgradeCalldata = STATE_TRANSITON_MANAGER.encodeFunctionData('setNewVersionUpgrade', [
+ upgradeParam,
+ oldProtocolVersion,
+ // The protocol version will not have any deadline in this upgrade
+ ethers.constants.MaxUint256,
+ newProtocolVersion
+ ]);
const call = {
- target: zkSyncContract,
+ target: stmAddress,
value: 0,
- data: diamondProxyUpgradeCalldata
+ data: stmUpgradeCalldata
};
const governanceOperation = {
calls: [call],
@@ -420,8 +450,25 @@ async function prepareUpgradeCalldata(
// Get transaction data of the `execute`
const executeOperation = GOVERNANCE_ABI.encodeFunctionData('execute', [governanceOperation]);
+ // Execute this upgrade on a specific chain under this STM.
+ const finalizeOperation = ADMIN_FACET_ABI.encodeFunctionData('upgradeChainFromVersion', [
+ oldProtocolVersion,
+ upgradeParam
+ ]);
+
return {
scheduleTransparentOperation,
- executeOperation
+ executeOperation,
+ finalizeOperation
};
}
+
+async function mintToWallet(
+ baseTokenAddress: zkweb3.types.Address,
+ ethersWallet: ethers.Wallet,
+ amountToMint: ethers.BigNumber
+) {
+ const l1Erc20ABI = ['function mint(address to, uint256 amount)'];
+ const l1Erc20Contract = new ethers.Contract(baseTokenAddress, l1Erc20ABI, ethersWallet);
+ await (await l1Erc20Contract.mint(ethersWallet.address, amountToMint)).wait();
+}
diff --git a/docker/local-node/Dockerfile b/docker/local-node/Dockerfile
index 7b648513a619..be74002a29b7 100644
--- a/docker/local-node/Dockerfile
+++ b/docker/local-node/Dockerfile
@@ -66,6 +66,7 @@ COPY package.json /
COPY core/lib/dal core/lib/dal
COPY prover/prover_dal prover/prover_dal
+RUN mkdir /etc/env/l1-inits && mkdir /etc/env/l2-inits
# setup entrypoint script
COPY ./docker/local-node/entrypoint.sh /usr/bin/
diff --git a/docker/local-node/entrypoint.sh b/docker/local-node/entrypoint.sh
index 524bdbfea213..00784e6855f4 100755
--- a/docker/local-node/entrypoint.sh
+++ b/docker/local-node/entrypoint.sh
@@ -72,15 +72,20 @@ else
# Perform initialization
- zk contract deploy --only-verifier
- zk f zksync_server --genesis
+ zk contract deploy-verifier
zk run deploy-erc20 dev # (created etc/tokens/localhost)
- zk contract deploy # (deploys rest of stuff)
-
- zk contract initialize-validator
- zk contract deploy-l2
+ ## init bridgehub state transition
+ zk contract deploy # (deploy L1)
zk contract initialize-governance
+ zk contract initialize-validator
+
+ ## init hyperchain
+ zk contract register-hyperchain
+ zk f zksync_server --genesis
+
+
+ zk contract deploy-l2-through-l1
zk f yarn --cwd /infrastructure/local-setup-preparation start
diff --git a/docs/guides/advanced/03_withdrawals.md b/docs/guides/advanced/03_withdrawals.md
index acede502bfd8..3d1a46ff4cb9 100644
--- a/docs/guides/advanced/03_withdrawals.md
+++ b/docs/guides/advanced/03_withdrawals.md
@@ -71,7 +71,7 @@ So the last question is -- what is the 'magic' contract address: `0x800a` ?
```solidity
/// @dev The address of the eth token system contract
-address constant L2_ETH_TOKEN_SYSTEM_CONTRACT_ADDR = address(0x800a);
+address constant L2_BASE_TOKEN_SYSTEM_CONTRACT_ADDR = address(0x800a);
```
@@ -84,7 +84,7 @@ list here
This is the place where we specify that `bootloader` is at address 0x8001, `NonceHolder` at 0x8003 etc.
This brings us to
-[L2EthToken.sol](https://github.com/matter-labs/era-system-contracts/blob/main/contracts/L2EthToken.sol) that has the
+[L2BaseToken.sol](https://github.com/matter-labs/era-system-contracts/blob/main/contracts/L2EthToken.sol) that has the
implementation of the L2 Eth.
When we look inside, we can see:
@@ -120,7 +120,7 @@ BTW - all the transactions are sent to the 0x54e address - which is the `Diamond
be different on your local node - see previous tutorial for more info) .
And inside, all three methods above belong to
-[Executor.sol](https://github.com/matter-labs/era-contracts/blob/main/l1-contracts/contracts/zksync/facets/Executor.sol)
+[Executor.sol](https://github.com/matter-labs/era-contracts/blob/dev/l1-contracts/contracts/state-transition/chain-deps/facets/Executor.sol)
facet and you can look at
[README](https://github.com/matter-labs/era-contracts/blob/main/docs/Overview.md#executorfacet) to see the details of
what each method does.
diff --git a/docs/guides/advanced/0_alternative_vm_intro.md b/docs/guides/advanced/0_alternative_vm_intro.md
index 74e70edc9537..b47c71bde2f5 100644
--- a/docs/guides/advanced/0_alternative_vm_intro.md
+++ b/docs/guides/advanced/0_alternative_vm_intro.md
@@ -21,7 +21,7 @@ VM. System Contracts are contracts with special permissions, deployed at predefi
bootloader, which is also a contract, although it is not deployed at any address. This is the STF that is ultimately
executed by the zkEVM, and executes the transaction against the state.
-
+
Full specification of the zkEVM is beyond the scope of this document. However, this section will give you most of the
details needed for understanding the L2 system smart contracts & basic differences between EVM and zkEVM. Note also that
diff --git a/docs/guides/advanced/advanced_debugging.md b/docs/guides/advanced/advanced_debugging.md
index a5f51c698871..b2a45bb3ac9a 100644
--- a/docs/guides/advanced/advanced_debugging.md
+++ b/docs/guides/advanced/advanced_debugging.md
@@ -13,12 +13,12 @@ import lldb
# Read the .env file and store the key-value pairs in a array with format ["key=value"]
env_array = []
-with open(os.path.join("etc/env/.init.env")) as f:
+with open(os.path.join("etc/env/l2-inits/dev.init.env")) as f:
for line in f:
if line.strip() and line.strip()[0] != "#":
env_array.append(line.strip())
-with open(os.path.join("etc/env/dev.env")) as f:
+with open(os.path.join("etc/env/targets/dev.env")) as f:
for line in f:
if line.strip() and line.strip()[0] != "#":
env_array.append(line.strip())
@@ -30,8 +30,8 @@ launch_info.SetEnvironmentEntries(env_array, True)
target.SetLaunchInfo(launch_info)
```
-This file will load environment variables from `.init.env` and `dev.env` before starting the binary (notice that we do
-this in a particular order, as values in dev.env should be overwriting the ones in .init.env).
+This file will load environment variables from `dev.init.env` and `dev.env` before starting the binary (notice that we
+do this in a particular order, as values in dev.env should be overwriting the ones in dev.init.env).
Afterwards you need to add something like this to your launch.json:
diff --git a/docs/guides/advanced/how_l2_messaging_works.md b/docs/guides/advanced/how_l2_messaging_works.md
index 0fea2be7d502..3120b8b04772 100644
--- a/docs/guides/advanced/how_l2_messaging_works.md
+++ b/docs/guides/advanced/how_l2_messaging_works.md
@@ -203,8 +203,8 @@ transmitted to L1 for final verification.
[zkevm_assembly_parse]:
https://github.com/matter-labs/era-zkEVM-assembly/blob/v1.3.2/src/assembly/instruction/log.rs#L32
[executor_sol]:
- https://github.com/matter-labs/era-contracts/blob/3a4506522aaef81485d8abb96f5a6394bd2ba69e/ethereum/contracts/zksync/facets/Executor.sol#L26
+ https://github.com/matter-labs/era-contracts/blob/b04dcaf2256a9b2626eeaefbf1b281f0119d30ab/l1-contracts/contracts/state-transition/chain-deps/facets/Executor.sol#L21
[mainet_executor]: https://etherscan.io/address/0x389a081BCf20e5803288183b929F08458F1d863D
[sepolia_tx]: https://sepolia.etherscan.io/tx/0x18c2a113d18c53237a4056403047ff9fafbf772cb83ccd44bb5b607f8108a64c
[mailbox_log_inclusion]:
- https://github.com/matter-labs/era-contracts/blob/3a4506522aaef81485d8abb96f5a6394bd2ba69e/ethereum/contracts/zksync/facets/Mailbox.sol#L54
+ https://github.com/matter-labs/era-contracts/blob/b04dcaf2256a9b2626eeaefbf1b281f0119d30ab/l1-contracts/contracts/state-transition/chain-deps/facets/Mailbox.sol#L70
diff --git a/docs/guides/development.md b/docs/guides/development.md
index 29cd7b578fd0..9015ca2d31c7 100644
--- a/docs/guides/development.md
+++ b/docs/guides/development.md
@@ -24,7 +24,7 @@ zk init
This command will do the following:
-- Generate `$ZKSYNC_HOME/etc/env/dev.env` file with settings for the applications.
+- Generate `$ZKSYNC_HOME/etc/env/target/dev.env` file with settings for the applications.
- Initialize docker containers with `reth` Ethereum node for local development.
- Download and unpack files for cryptographical backend.
- Generate required smart contracts.
@@ -51,8 +51,8 @@ zk clean --database --backups # Remove database *and* backups, but not configs.
1. If you have an initialized database and want to run `zk init`, you have to remove the database first.
2. If after getting new functionality from the `main` branch your code stopped working and `zk init` doesn't help, you
- may try removing `$ZKSYNC_HOME/etc/env/dev.env` and running `zk init` once again. This may help if the application
- configuration has changed.
+ may try removing `$ZKSYNC_HOME/etc/env/target/dev.env` and running `zk init` once again. This may help if the
+ application configuration has changed.
If you don’t need all of the `zk init` functionality, but just need to start/stop containers, use the following
commands:
@@ -162,7 +162,7 @@ By default, the chosen prover is a "dummy" one, meaning that it doesn't actually
avoid expensive computations in the development environment.
To switch dummy prover to real prover, one must change `dummy_verifier` to `false` in `contracts.toml` for your env
-(most likely, `etc/env/dev/contracts.toml`) and run `zk init` to redeploy smart contracts.
+(most likely, `etc/env/base/contracts.toml`) and run `zk init` to redeploy smart contracts.
## Testing
diff --git a/docs/guides/launch.md b/docs/guides/launch.md
index e19bb55bcda6..2889216dbbe9 100644
--- a/docs/guides/launch.md
+++ b/docs/guides/launch.md
@@ -62,7 +62,7 @@ zk contract redeploy
## Environment configurations
-Env config files are held in `etc/env/`
+Env config files are held in `etc/env/target/`
List configurations:
@@ -88,7 +88,8 @@ zk server
```
Server is configured using env files in `./etc/env` directory. After the first initialization, file
-`./etc/env/dev.env`will be created. By default, this file is copied from the `./etc/env/dev.env.example` template.
+`./etc/env/target/dev.env`will be created. By default, this file is copied from the `./etc/env/target/dev.env.example`
+template.
Make sure you have environment variables set right, you can check it by running: `zk env`. You should see `* dev` in
output.
diff --git a/docs/specs/l1_smart_contracts.md b/docs/specs/l1_smart_contracts.md
index b5b0a484559c..5644b5494065 100644
--- a/docs/specs/l1_smart_contracts.md
+++ b/docs/specs/l1_smart_contracts.md
@@ -175,7 +175,7 @@ L1 <-> L2 communication.
### L1ERC20Bridge
-The "standard" implementation of the ERC20 token bridge. Works only with regular ERC20 tokens, i.e. not with
+The "legacy" implementation of the ERC20 token bridge. Works only with regular ERC20 tokens, i.e. not with
fee-on-transfer tokens or other custom logic for handling user balances.
- `deposit` - lock funds inside the contract and send a request to mint bridged assets on L2.
@@ -184,20 +184,11 @@ fee-on-transfer tokens or other custom logic for handling user balances.
The owner of the L1ERC20Bridge is the Governance contract.
-### L2ERC20Bridge
+### L1SharedBridge
-The L2 counterpart of the L1 ERC20 bridge.
-
-- `withdraw` - initiate a withdrawal by burning funds on the contract and sending a corresponding message to L1.
-- `finalizeDeposit` - finalize the deposit and mint funds on L2. The function is only callable by L1 bridge.
-
-The owner of the L2ERC20Bridge and the contracts related to it is the Governance contract.
-
-### L1WethBridge
-
-The custom bridge exclusively handles transfers of WETH tokens between the two domains. It is designed to streamline and
-enhance the user experience for bridging WETH tokens by minimizing the number of transactions required and reducing
-liquidity fragmentation thus improving efficiency and user experience.
+The main bridge implementation handles transfers Ether, ERC20 tokens and of WETH tokens between the two domains. It is
+designed to streamline and enhance the user experience for bridging WETH tokens by minimizing the number of transactions
+required and reducing liquidity fragmentation thus improving efficiency and user experience.
This contract accepts WETH deposits on L1, unwraps them to ETH, and sends the ETH to the L2 WETH bridge contract, where
it is wrapped back into WETH and delivered to the L2 recipient.
@@ -209,11 +200,14 @@ the L1 recipient.
The owner of the L1WethBridge contract is the Governance contract.
-### L2WethBridge
+### L2SharedBridge
+
+The L2 counterpart of the L1 Shared bridge.
-The L2 counterpart of the L1 WETH bridge.
+- `withdraw` - initiate a withdrawal by burning funds on the contract and sending a corresponding message to L1.
+- `finalizeDeposit` - finalize the deposit and mint funds on L2. The function is only callable by L1 bridge.
-The owner of the L2WethBridge and L2Weth contracts is the Governance contract.
+The owner of the L2SharedBridge and the contracts related to it is the Governance contract.
## Governance
diff --git a/docs/specs/the_hyperchain/shared_bridge.md b/docs/specs/the_hyperchain/shared_bridge.md
index 72b4970dd356..4ea6c143a7c9 100644
--- a/docs/specs/the_hyperchain/shared_bridge.md
+++ b/docs/specs/the_hyperchain/shared_bridge.md
@@ -140,8 +140,8 @@ be able to leverage them when available).
_chainId,
bridgehead,
_deployBridgeProxyFee,
- l2WethBridgeProxyBytecodeHash,
- l2WethBridgeProxyConstructorData,
+ l2SharedBridgeProxyBytecodeHash,
+ l2SharedBridgeProxyConstructorData,
// No factory deps are needed for L2 bridge proxy, because it is already passed in the previous step
new bytes[](0)
);
@@ -192,10 +192,10 @@ A chain registers in the Bridgehub, this is where the chain ID is determined. Th
Transition that they plan to use. In the first version only a single State Transition contract will be available for
use, our with Boojum proof verification.
-At initialization we prepare the `StateTransitionChain` contract. We store the genesis batch hash in the ST contract,
-all chains start out with the same state. A diamond proxy is deployed and initialised with this initial value, along
-with predefined facets which are made available by the ST contract. These facets contain the proof verification and
-other features required to process proofs. The chain ID is set in the VM in a special system transaction sent from L1.
+At initialization we prepare the `ZkSyncHyperchain` contract. We store the genesis batch hash in the ST contract, all
+chains start out with the same state. A diamond proxy is deployed and initialised with this initial value, along with
+predefined facets which are made available by the ST contract. These facets contain the proof verification and other
+features required to process proofs. The chain ID is set in the VM in a special system transaction sent from L1.
diff --git a/docs/specs/zk_evm/system_contracts.md b/docs/specs/zk_evm/system_contracts.md
index 393c38db6c40..136d2136cd9e 100644
--- a/docs/specs/zk_evm/system_contracts.md
+++ b/docs/specs/zk_evm/system_contracts.md
@@ -106,15 +106,16 @@ These precompiles simulate the behaviour of the EVM's EcAdd and EcMul precompile
without circuit counterparts. You can read more about them
[here](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/Smart%20contract%20Section/Elliptic%20curve%20precompiles.md).
-## L2EthToken & MsgValueSimulator
+## L2BaseToken & MsgValueSimulator
Unlike Ethereum, zkEVM does not have any notion of any special native token. That’s why we have to simulate operations
-with Ether via two contracts: `L2EthToken` & `MsgValueSimulator`.
+with Ether via two contracts: `L2BaseToken` & `MsgValueSimulator`.
-`L2EthToken` is a contract that holds the balances of ETH for the users. This contract does NOT provide ERC20 interface.
-The only method for transferring Ether is `transferFromTo`. It permits only some system contracts to transfer on behalf
-of users. This is needed to ensure that the interface is as close to Ethereum as possible, i.e. the only way to transfer
-ETH is by doing a call to a contract with some `msg.value`. This is what `MsgValueSimulator` system contract is for.
+`L2BaseToken` is a contract that holds the balances of ETH for the users. This contract does NOT provide ERC20
+interface. The only method for transferring Ether is `transferFromTo`. It permits only some system contracts to transfer
+on behalf of users. This is needed to ensure that the interface is as close to Ethereum as possible, i.e. the only way
+to transfer ETH is by doing a call to a contract with some `msg.value`. This is what `MsgValueSimulator` system contract
+is for.
Whenever anyone wants to do a non-zero value call, they need to call `MsgValueSimulator` with:
diff --git a/docs/specs/zk_evm/vm_specification/compiler/instructions/evm/environment.md b/docs/specs/zk_evm/vm_specification/compiler/instructions/evm/environment.md
index 56be086cc7a1..a59fbef36202 100644
--- a/docs/specs/zk_evm/vm_specification/compiler/instructions/evm/environment.md
+++ b/docs/specs/zk_evm/vm_specification/compiler/instructions/evm/environment.md
@@ -12,7 +12,7 @@ is common for Yul and EVMLA representations.
### System Contract
This information is requested a System Contract called
-[L2EthToken](https://github.com/code-423n4/2023-10-zksync/blob/main/code/system-contracts/contracts/L2EthToken.sol).
+[L2BaseToken](https://github.com/code-423n4/2024-03-zksync/blob/main/code/system-contracts/contracts/L2BaseToken.sol).
On how the System Contract is called, see
[this section](https://github.com/code-423n4/2023-10-zksync/blob/main/docs/VM%20Section/How%20compiler%20works/system_contracts.md).
diff --git a/docs/specs/zk_evm/vm_specification/compiler/overview.md b/docs/specs/zk_evm/vm_specification/compiler/overview.md
index 62652e9447c5..d55b86756162 100644
--- a/docs/specs/zk_evm/vm_specification/compiler/overview.md
+++ b/docs/specs/zk_evm/vm_specification/compiler/overview.md
@@ -127,8 +127,8 @@ the sake of assisting the upcoming audit.
| timestamp | TIMESTAMP | context, block | System contracts: 1 request. Stack: 1 output | ContractContext | - |
| coinbase | COINBASE | context, block | System contracts: 1 request. Stack: 1 output | ContractContext | - |
| difficulty | DIFFICULTY | context, block | System contracts: 1 request. Stack: 1 output | ContractContext | - |
-| balance | BALANCE | context, contract | Stack: 1 input. System contracts: 1 request. Stack: 1 output | L2EthToken | - |
-| selfbalance | SELFBALANCE | context, contract | System contracts: 1 request. Stack: 1 output | L2EthToken | - |
+| balance | BALANCE | context, contract | Stack: 1 input. System contracts: 1 request. Stack: 1 output | L2BaseToken | - |
+| selfbalance | SELFBALANCE | context, contract | System contracts: 1 request. Stack: 1 output | L2BaseToken | - |
| extcodesize | EXTCODESIZE | context, contract | Stack: 1 input, 1 output | AccountCodeStorage | Is requested at the beginning of the runtime code and checked for being non-zero. This way we check if the constructor has been called before. |
| extcodehash | EXTCODEHASH | context, contract | Stack: 1 input, 1 output | AccountCodeStorage | - |
| verbatim*\i*\o | - | extension | Stack: N inputs, M outputs | - | See the Yul extensions section below. |
diff --git a/etc/ERC20/hardhat.config.ts b/etc/ERC20/hardhat.config.ts
index fc3896ab87c6..0ae338e460c3 100644
--- a/etc/ERC20/hardhat.config.ts
+++ b/etc/ERC20/hardhat.config.ts
@@ -2,7 +2,7 @@ import '@matterlabs/hardhat-zksync-solc';
export default {
zksolc: {
- version: '1.3.16',
+ version: '1.4.0',
compilerSource: 'binary',
settings: {
isSystem: true
diff --git a/etc/contracts-test-data/contracts/custom-account/Constants.sol b/etc/contracts-test-data/contracts/custom-account/Constants.sol
index 76d5b000d6f2..59399d232ead 100644
--- a/etc/contracts-test-data/contracts/custom-account/Constants.sol
+++ b/etc/contracts-test-data/contracts/custom-account/Constants.sol
@@ -23,7 +23,7 @@ IContractDeployer constant DEPLOYER_SYSTEM_CONTRACT = IContractDeployer(address(
address constant KECCAK256_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x10);
-address constant ETH_TOKEN_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x0a);
+address constant BASE_TOKEN_SYSTEM_CONTRACT = address(SYSTEM_CONTRACTS_OFFSET + 0x0a);
SystemContext constant SYSTEM_CONTEXT_CONTRACT = SystemContext(address(SYSTEM_CONTRACTS_OFFSET + 0x0b));
uint256 constant MAX_SYSTEM_CONTRACT_ADDRESS = 0xffff;
diff --git a/etc/contracts-test-data/contracts/custom-account/TransactionHelper.sol b/etc/contracts-test-data/contracts/custom-account/TransactionHelper.sol
index 7097097437c5..7fc883ed882c 100644
--- a/etc/contracts-test-data/contracts/custom-account/TransactionHelper.sol
+++ b/etc/contracts-test-data/contracts/custom-account/TransactionHelper.sol
@@ -7,7 +7,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "./interfaces/IPaymasterFlow.sol";
import "./interfaces/IContractDeployer.sol";
-import {ETH_TOKEN_SYSTEM_CONTRACT, BOOTLOADER_FORMAL_ADDRESS} from "./Constants.sol";
+import {BASE_TOKEN_SYSTEM_CONTRACT, BOOTLOADER_FORMAL_ADDRESS} from "./Constants.sol";
import "./RLPEncoder.sol";
/// @dev The type id of zkSync's EIP-712-signed transaction.
@@ -89,10 +89,10 @@ library TransactionHelper {
/// @param _addr The address of the token
/// @return `true` or `false` based on whether the token is Ether.
/// @dev This method assumes that address is Ether either if the address is 0 (for convenience)
- /// or if the address is the address of the L2EthToken system contract.
+ /// or if the address is the address of the L2BaseToken system contract.
function isEthToken(uint256 _addr) internal pure returns (bool) {
return
- _addr == uint256(uint160(address(ETH_TOKEN_SYSTEM_CONTRACT))) ||
+ _addr == uint256(uint160(address(BASE_TOKEN_SYSTEM_CONTRACT))) ||
_addr == 0;
}
diff --git a/etc/contracts-test-data/yarn.lock b/etc/contracts-test-data/yarn.lock
new file mode 100644
index 000000000000..47c70d2d63eb
--- /dev/null
+++ b/etc/contracts-test-data/yarn.lock
@@ -0,0 +1,2757 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@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==
+
+"@chainsafe/as-sha256@^0.3.1":
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9"
+ integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==
+
+"@chainsafe/persistent-merkle-tree@^0.4.2":
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff"
+ integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==
+ dependencies:
+ "@chainsafe/as-sha256" "^0.3.1"
+
+"@chainsafe/persistent-merkle-tree@^0.5.0":
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63"
+ integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==
+ dependencies:
+ "@chainsafe/as-sha256" "^0.3.1"
+
+"@chainsafe/ssz@^0.10.0":
+ version "0.10.2"
+ resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e"
+ integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==
+ dependencies:
+ "@chainsafe/as-sha256" "^0.3.1"
+ "@chainsafe/persistent-merkle-tree" "^0.5.0"
+
+"@chainsafe/ssz@^0.9.2":
+ version "0.9.4"
+ resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497"
+ integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==
+ dependencies:
+ "@chainsafe/as-sha256" "^0.3.1"
+ "@chainsafe/persistent-merkle-tree" "^0.4.2"
+ case "^1.6.3"
+
+"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449"
+ integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==
+ dependencies:
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef"
+ integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/networks" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/web" "^5.7.0"
+
+"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2"
+ integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+
+"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37"
+ integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/rlp" "^5.7.0"
+
+"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c"
+ integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+
+"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b"
+ integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+
+"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2"
+ integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ bn.js "^5.2.1"
+
+"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d"
+ integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==
+ dependencies:
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e"
+ integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+
+"@ethersproject/contracts@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e"
+ integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==
+ dependencies:
+ "@ethersproject/abi" "^5.7.0"
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+
+"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7"
+ integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/base64" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf"
+ integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/basex" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/pbkdf2" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+ "@ethersproject/signing-key" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/wordlists" "^5.7.0"
+
+"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360"
+ integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/hdnode" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/pbkdf2" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/random" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ aes-js "3.0.0"
+ scrypt-js "3.0.1"
+
+"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a"
+ integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ js-sha3 "0.8.0"
+
+"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892"
+ integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==
+
+"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0":
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6"
+ integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==
+ dependencies:
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102"
+ integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+
+"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30"
+ integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==
+ dependencies:
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2":
+ version "5.7.2"
+ resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb"
+ integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/base64" "^5.7.0"
+ "@ethersproject/basex" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/networks" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/random" "^5.7.0"
+ "@ethersproject/rlp" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/web" "^5.7.0"
+ bech32 "1.1.4"
+ ws "7.4.6"
+
+"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c"
+ integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304"
+ integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb"
+ integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ hash.js "1.1.7"
+
+"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3"
+ integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ bn.js "^5.2.1"
+ elliptic "6.5.4"
+ hash.js "1.1.7"
+
+"@ethersproject/solidity@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8"
+ integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2"
+ integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b"
+ integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==
+ dependencies:
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/rlp" "^5.7.0"
+ "@ethersproject/signing-key" "^5.7.0"
+
+"@ethersproject/units@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1"
+ integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/wallet@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d"
+ integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/hdnode" "^5.7.0"
+ "@ethersproject/json-wallets" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/random" "^5.7.0"
+ "@ethersproject/signing-key" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/wordlists" "^5.7.0"
+
+"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0":
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae"
+ integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==
+ dependencies:
+ "@ethersproject/base64" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5"
+ integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@fastify/busboy@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8"
+ integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==
+
+"@matterlabs/hardhat-zksync-solc@^0.3.15":
+ version "0.3.17"
+ resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-0.3.17.tgz#72f199544dc89b268d7bfc06d022a311042752fd"
+ integrity sha512-aZgQ0yfXW5xPkfuEH1d44ncWV4T2LzKZd0VVPo4PL5cUrYs2/II1FaEDp5zsf3FxOR1xT3mBsjuSrtJkk4AL8Q==
+ dependencies:
+ "@nomiclabs/hardhat-docker" "^2.0.0"
+ chalk "4.1.2"
+ dockerode "^3.3.4"
+
+"@metamask/eth-sig-util@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088"
+ integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==
+ dependencies:
+ ethereumjs-abi "^0.6.8"
+ ethereumjs-util "^6.2.1"
+ ethjs-util "^0.1.6"
+ tweetnacl "^1.0.3"
+ tweetnacl-util "^0.15.1"
+
+"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0":
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12"
+ integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==
+
+"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0":
+ version "1.7.1"
+ resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c"
+ integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==
+
+"@nomicfoundation/ethereumjs-block@5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d"
+ integrity sha512-u1Yioemi6Ckj3xspygu/SfFvm8vZEO8/Yx5a1QLzi6nVU0jz3Pg2OmHKJ5w+D9Ogk1vhwRiqEBAqcb0GVhCyHw==
+ dependencies:
+ "@nomicfoundation/ethereumjs-common" "4.0.1"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.1"
+ "@nomicfoundation/ethereumjs-trie" "6.0.1"
+ "@nomicfoundation/ethereumjs-tx" "5.0.1"
+ "@nomicfoundation/ethereumjs-util" "9.0.1"
+ ethereum-cryptography "0.1.3"
+ ethers "^5.7.1"
+
+"@nomicfoundation/ethereumjs-blockchain@7.0.1":
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726"
+ integrity sha512-NhzndlGg829XXbqJEYrF1VeZhAwSPgsK/OB7TVrdzft3y918hW5KNd7gIZ85sn6peDZOdjBsAXIpXZ38oBYE5A==
+ dependencies:
+ "@nomicfoundation/ethereumjs-block" "5.0.1"
+ "@nomicfoundation/ethereumjs-common" "4.0.1"
+ "@nomicfoundation/ethereumjs-ethash" "3.0.1"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.1"
+ "@nomicfoundation/ethereumjs-trie" "6.0.1"
+ "@nomicfoundation/ethereumjs-tx" "5.0.1"
+ "@nomicfoundation/ethereumjs-util" "9.0.1"
+ abstract-level "^1.0.3"
+ debug "^4.3.3"
+ ethereum-cryptography "0.1.3"
+ level "^8.0.0"
+ lru-cache "^5.1.1"
+ memory-level "^1.0.0"
+
+"@nomicfoundation/ethereumjs-common@4.0.1":
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0"
+ integrity sha512-OBErlkfp54GpeiE06brBW/TTbtbuBJV5YI5Nz/aB2evTDo+KawyEzPjBlSr84z/8MFfj8wS2wxzQX1o32cev5g==
+ dependencies:
+ "@nomicfoundation/ethereumjs-util" "9.0.1"
+ crc-32 "^1.2.0"
+
+"@nomicfoundation/ethereumjs-ethash@3.0.1":
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.1.tgz#65ca494d53e71e8415c9a49ef48bc921c538fc41"
+ integrity sha512-KDjGIB5igzWOp8Ik5I6QiRH5DH+XgILlplsHR7TEuWANZA759G6krQ6o8bvj+tRUz08YygMQu/sGd9mJ1DYT8w==
+ dependencies:
+ "@nomicfoundation/ethereumjs-block" "5.0.1"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.1"
+ "@nomicfoundation/ethereumjs-util" "9.0.1"
+ abstract-level "^1.0.3"
+ bigint-crypto-utils "^3.0.23"
+ ethereum-cryptography "0.1.3"
+
+"@nomicfoundation/ethereumjs-evm@2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1"
+ integrity sha512-oL8vJcnk0Bx/onl+TgQOQ1t/534GKFaEG17fZmwtPFeH8S5soiBYPCLUrvANOl4sCp9elYxIMzIiTtMtNNN8EQ==
+ dependencies:
+ "@ethersproject/providers" "^5.7.1"
+ "@nomicfoundation/ethereumjs-common" "4.0.1"
+ "@nomicfoundation/ethereumjs-tx" "5.0.1"
+ "@nomicfoundation/ethereumjs-util" "9.0.1"
+ debug "^4.3.3"
+ ethereum-cryptography "0.1.3"
+ mcl-wasm "^0.7.1"
+ rustbn.js "~0.2.0"
+
+"@nomicfoundation/ethereumjs-rlp@5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28"
+ integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==
+
+"@nomicfoundation/ethereumjs-statemanager@2.0.1":
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.1.tgz#8824a97938db4471911e2d2f140f79195def5935"
+ integrity sha512-B5ApMOnlruVOR7gisBaYwFX+L/AP7i/2oAahatssjPIBVDF6wTX1K7Qpa39E/nzsH8iYuL3krkYeUFIdO3EMUQ==
+ dependencies:
+ "@nomicfoundation/ethereumjs-common" "4.0.1"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.1"
+ debug "^4.3.3"
+ ethereum-cryptography "0.1.3"
+ ethers "^5.7.1"
+ js-sdsl "^4.1.4"
+
+"@nomicfoundation/ethereumjs-trie@6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717"
+ integrity sha512-A64It/IMpDVODzCgxDgAAla8jNjNtsoQZIzZUfIV5AY6Coi4nvn7+VReBn5itlxMiL2yaTlQr9TRWp3CSI6VoA==
+ dependencies:
+ "@nomicfoundation/ethereumjs-rlp" "5.0.1"
+ "@nomicfoundation/ethereumjs-util" "9.0.1"
+ "@types/readable-stream" "^2.3.13"
+ ethereum-cryptography "0.1.3"
+ readable-stream "^3.6.0"
+
+"@nomicfoundation/ethereumjs-tx@5.0.1":
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d"
+ integrity sha512-0HwxUF2u2hrsIM1fsasjXvlbDOq1ZHFV2dd1yGq8CA+MEYhaxZr8OTScpVkkxqMwBcc5y83FyPl0J9MZn3kY0w==
+ dependencies:
+ "@chainsafe/ssz" "^0.9.2"
+ "@ethersproject/providers" "^5.7.2"
+ "@nomicfoundation/ethereumjs-common" "4.0.1"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.1"
+ "@nomicfoundation/ethereumjs-util" "9.0.1"
+ ethereum-cryptography "0.1.3"
+
+"@nomicfoundation/ethereumjs-util@9.0.1":
+ version "9.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.1.tgz#530cda8bae33f8b5020a8f199ed1d0a2ce48ec89"
+ integrity sha512-TwbhOWQ8QoSCFhV/DDfSmyfFIHjPjFBj957219+V3jTZYZ2rf9PmDtNOeZWAE3p3vlp8xb02XGpd0v6nTUPbsA==
+ dependencies:
+ "@chainsafe/ssz" "^0.10.0"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.1"
+ ethereum-cryptography "0.1.3"
+
+"@nomicfoundation/ethereumjs-vm@7.0.1":
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.1.tgz#7d035e0993bcad10716c8b36e61dfb87fa3ca05f"
+ integrity sha512-rArhyn0jPsS/D+ApFsz3yVJMQ29+pVzNZ0VJgkzAZ+7FqXSRtThl1C1prhmlVr3YNUlfpZ69Ak+RUT4g7VoOuQ==
+ dependencies:
+ "@nomicfoundation/ethereumjs-block" "5.0.1"
+ "@nomicfoundation/ethereumjs-blockchain" "7.0.1"
+ "@nomicfoundation/ethereumjs-common" "4.0.1"
+ "@nomicfoundation/ethereumjs-evm" "2.0.1"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.1"
+ "@nomicfoundation/ethereumjs-statemanager" "2.0.1"
+ "@nomicfoundation/ethereumjs-trie" "6.0.1"
+ "@nomicfoundation/ethereumjs-tx" "5.0.1"
+ "@nomicfoundation/ethereumjs-util" "9.0.1"
+ debug "^4.3.3"
+ ethereum-cryptography "0.1.3"
+ mcl-wasm "^0.7.1"
+ rustbn.js "~0.2.0"
+
+"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15"
+ integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==
+
+"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c"
+ integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==
+
+"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c"
+ integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==
+
+"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b"
+ integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==
+
+"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4"
+ integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==
+
+"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893"
+ integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==
+
+"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb"
+ integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==
+
+"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f"
+ integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==
+
+"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585"
+ integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==
+
+"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836"
+ integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==
+
+"@nomicfoundation/solidity-analyzer@^0.1.0":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d"
+ integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==
+ optionalDependencies:
+ "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1"
+ "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1"
+
+"@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"
+
+"@openzeppelin/contracts@^4.8.0":
+ version "4.9.3"
+ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.3.tgz#00d7a8cf35a475b160b3f0293a6403c511099364"
+ integrity sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==
+
+"@scure/base@~1.1.0":
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f"
+ integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==
+
+"@scure/bip32@1.1.5":
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300"
+ integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==
+ dependencies:
+ "@noble/hashes" "~1.2.0"
+ "@noble/secp256k1" "~1.7.0"
+ "@scure/base" "~1.1.0"
+
+"@scure/bip39@1.1.1":
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5"
+ integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==
+ dependencies:
+ "@noble/hashes" "~1.2.0"
+ "@scure/base" "~1.1.0"
+
+"@sentry/core@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3"
+ integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==
+ dependencies:
+ "@sentry/hub" "5.30.0"
+ "@sentry/minimal" "5.30.0"
+ "@sentry/types" "5.30.0"
+ "@sentry/utils" "5.30.0"
+ tslib "^1.9.3"
+
+"@sentry/hub@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100"
+ integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==
+ dependencies:
+ "@sentry/types" "5.30.0"
+ "@sentry/utils" "5.30.0"
+ tslib "^1.9.3"
+
+"@sentry/minimal@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b"
+ integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==
+ dependencies:
+ "@sentry/hub" "5.30.0"
+ "@sentry/types" "5.30.0"
+ tslib "^1.9.3"
+
+"@sentry/node@^5.18.1":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48"
+ integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==
+ dependencies:
+ "@sentry/core" "5.30.0"
+ "@sentry/hub" "5.30.0"
+ "@sentry/tracing" "5.30.0"
+ "@sentry/types" "5.30.0"
+ "@sentry/utils" "5.30.0"
+ cookie "^0.4.1"
+ https-proxy-agent "^5.0.0"
+ lru_map "^0.3.3"
+ tslib "^1.9.3"
+
+"@sentry/tracing@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f"
+ integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==
+ dependencies:
+ "@sentry/hub" "5.30.0"
+ "@sentry/minimal" "5.30.0"
+ "@sentry/types" "5.30.0"
+ "@sentry/utils" "5.30.0"
+ tslib "^1.9.3"
+
+"@sentry/types@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402"
+ integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==
+
+"@sentry/utils@5.30.0":
+ version "5.30.0"
+ resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980"
+ integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==
+ dependencies:
+ "@sentry/types" "5.30.0"
+ tslib "^1.9.3"
+
+"@types/bn.js@^4.11.3":
+ version "4.11.6"
+ resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"
+ integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==
+ dependencies:
+ "@types/node" "*"
+
+"@types/bn.js@^5.1.0":
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0"
+ integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==
+ dependencies:
+ "@types/node" "*"
+
+"@types/lru-cache@^5.1.0":
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef"
+ integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==
+
+"@types/node@*":
+ version "20.9.0"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298"
+ integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==
+ dependencies:
+ undici-types "~5.26.4"
+
+"@types/pbkdf2@^3.0.0":
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc"
+ integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==
+ dependencies:
+ "@types/node" "*"
+
+"@types/readable-stream@^2.3.13":
+ version "2.3.15"
+ resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae"
+ integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==
+ dependencies:
+ "@types/node" "*"
+ safe-buffer "~5.1.1"
+
+"@types/secp256k1@^4.0.1":
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf"
+ integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==
+ dependencies:
+ "@types/node" "*"
+
+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"
+
+abort-controller@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392"
+ integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==
+ dependencies:
+ event-target-shim "^5.0.0"
+
+abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741"
+ integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==
+ dependencies:
+ buffer "^6.0.3"
+ catering "^2.1.0"
+ is-buffer "^2.0.5"
+ level-supports "^4.0.0"
+ level-transcoder "^1.0.1"
+ module-error "^1.0.1"
+ queue-microtask "^1.2.3"
+
+adm-zip@^0.4.16:
+ version "0.4.16"
+ resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365"
+ integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==
+
+aes-js@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
+ integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==
+
+agent-base@6:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
+ integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
+ dependencies:
+ debug "4"
+
+aggregate-error@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
+ integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
+ dependencies:
+ clean-stack "^2.0.0"
+ indent-string "^4.0.0"
+
+ansi-colors@4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
+ integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
+
+ansi-colors@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
+ integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
+
+ansi-escapes@^4.3.0:
+ version "4.3.2"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e"
+ integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==
+ dependencies:
+ type-fest "^0.21.3"
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
+ dependencies:
+ color-convert "^1.9.0"
+
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+ dependencies:
+ color-convert "^2.0.1"
+
+anymatch@~3.1.2:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
+ integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
+ dependencies:
+ normalize-path "^3.0.0"
+ picomatch "^2.0.4"
+
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+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"
+
+balanced-match@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
+ integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
+
+base-x@^3.0.2:
+ version "3.0.9"
+ resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320"
+ integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==
+ dependencies:
+ safe-buffer "^5.0.1"
+
+base64-js@^1.3.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
+ integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+
+bcrypt-pbkdf@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==
+ dependencies:
+ tweetnacl "^0.14.3"
+
+bech32@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9"
+ integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
+
+bigint-crypto-utils@^3.0.23:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77"
+ integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==
+
+binary-extensions@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
+ integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+
+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:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
+ integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
+ dependencies:
+ buffer "^5.5.0"
+ inherits "^2.0.4"
+ readable-stream "^3.4.0"
+
+blakejs@^1.1.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814"
+ integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==
+
+bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+ integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+bn.js@^5.2.0, bn.js@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
+ integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
+
+brace-expansion@^1.1.7:
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
+ dependencies:
+ balanced-match "^1.0.0"
+ concat-map "0.0.1"
+
+brace-expansion@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
+ integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
+ dependencies:
+ balanced-match "^1.0.0"
+
+braces@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
+ integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
+ dependencies:
+ fill-range "^7.0.1"
+
+brorand@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
+
+browser-level@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011"
+ integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==
+ dependencies:
+ abstract-level "^1.0.2"
+ catering "^2.1.1"
+ module-error "^1.0.2"
+ run-parallel-limit "^1.1.0"
+
+browser-stdout@1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
+ integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
+
+browserify-aes@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
+ dependencies:
+ buffer-xor "^1.0.3"
+ cipher-base "^1.0.0"
+ create-hash "^1.1.0"
+ evp_bytestokey "^1.0.3"
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+bs58@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
+ integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==
+ dependencies:
+ base-x "^3.0.2"
+
+bs58check@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc"
+ integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==
+ dependencies:
+ bs58 "^4.0.0"
+ create-hash "^1.1.0"
+ safe-buffer "^5.1.2"
+
+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-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.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
+ integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
+
+buffer-xor@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==
+
+buffer@^5.5.0:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
+ integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.1.13"
+
+buffer@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
+ integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
+ dependencies:
+ base64-js "^1.3.1"
+ ieee754 "^1.2.1"
+
+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==
+
+bytes@3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
+ integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
+
+camelcase@^6.0.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
+ integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
+
+case@^1.6.3:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9"
+ integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==
+
+catering@^2.1.0, catering@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510"
+ integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==
+
+chalk@4.1.2, chalk@^4.1.0:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
+ integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+chalk@^2.4.2:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chokidar@3.5.3, chokidar@^3.4.0:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
+ integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
+chownr@^1.0.1, chownr@^1.1.1:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
+ integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
+
+ci-info@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46"
+ integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==
+
+cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+classic-level@^1.2.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8"
+ integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==
+ dependencies:
+ abstract-level "^1.0.2"
+ catering "^2.1.0"
+ module-error "^1.0.1"
+ napi-macros "^2.2.2"
+ node-gyp-build "^4.3.0"
+
+clean-stack@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
+ integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
+
+cliui@^7.0.2:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+ integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^7.0.0"
+
+color-convert@^1.9.0:
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
+ dependencies:
+ color-name "1.1.3"
+
+color-convert@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+ dependencies:
+ color-name "~1.1.4"
+
+color-name@1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
+
+color-name@~1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+command-exists@^1.2.8:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69"
+ integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==
+
+commander@3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e"
+ integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+
+concat-stream@~1.6.2:
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
+ dependencies:
+ buffer-from "^1.0.0"
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
+cookie@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
+ integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
+
+core-util-is@~1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
+ integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
+
+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.2"
+ resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff"
+ integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==
+
+create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
+ dependencies:
+ cipher-base "^1.0.1"
+ inherits "^2.0.1"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
+ sha.js "^2.4.0"
+
+create-hmac@^1.1.4, create-hmac@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
+ dependencies:
+ cipher-base "^1.0.3"
+ create-hash "^1.1.0"
+ inherits "^2.0.1"
+ ripemd160 "^2.0.0"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.3:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
+ integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
+ dependencies:
+ ms "2.1.2"
+
+debug@^3.2.6:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
+ dependencies:
+ ms "^2.1.1"
+
+decamelize@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
+ integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
+
+depd@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
+ integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
+
+diff@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
+ integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
+
+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"
+
+elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
+ integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
+ dependencies:
+ bn.js "^4.11.9"
+ brorand "^1.1.0"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.1"
+ inherits "^2.0.4"
+ minimalistic-assert "^1.0.1"
+ minimalistic-crypto-utils "^1.0.1"
+
+emoji-regex@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+ integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+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.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
+ integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
+ dependencies:
+ once "^1.4.0"
+
+enquirer@^2.3.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56"
+ integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==
+ dependencies:
+ ansi-colors "^4.1.1"
+ strip-ansi "^6.0.1"
+
+env-paths@^2.2.0:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2"
+ integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
+
+escalade@^3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+ integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+escape-string-regexp@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
+escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
+
+ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191"
+ integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==
+ dependencies:
+ "@types/pbkdf2" "^3.0.0"
+ "@types/secp256k1" "^4.0.1"
+ blakejs "^1.1.0"
+ browserify-aes "^1.2.0"
+ bs58check "^2.1.2"
+ create-hash "^1.2.0"
+ create-hmac "^1.1.7"
+ hash.js "^1.1.7"
+ keccak "^3.0.0"
+ pbkdf2 "^3.0.17"
+ randombytes "^2.1.0"
+ safe-buffer "^5.1.2"
+ scrypt-js "^3.0.0"
+ secp256k1 "^4.0.1"
+ setimmediate "^1.0.5"
+
+ethereum-cryptography@^1.0.3:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a"
+ integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==
+ dependencies:
+ "@noble/hashes" "1.2.0"
+ "@noble/secp256k1" "1.7.1"
+ "@scure/bip32" "1.1.5"
+ "@scure/bip39" "1.1.1"
+
+ethereumjs-abi@^0.6.8:
+ version "0.6.8"
+ resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae"
+ integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==
+ dependencies:
+ bn.js "^4.11.8"
+ ethereumjs-util "^6.0.0"
+
+ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69"
+ integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==
+ dependencies:
+ "@types/bn.js" "^4.11.3"
+ bn.js "^4.11.0"
+ create-hash "^1.1.2"
+ elliptic "^6.5.2"
+ ethereum-cryptography "^0.1.3"
+ ethjs-util "0.1.6"
+ rlp "^2.2.3"
+
+ethers@^5.7.1:
+ version "5.7.2"
+ resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e"
+ integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==
+ dependencies:
+ "@ethersproject/abi" "5.7.0"
+ "@ethersproject/abstract-provider" "5.7.0"
+ "@ethersproject/abstract-signer" "5.7.0"
+ "@ethersproject/address" "5.7.0"
+ "@ethersproject/base64" "5.7.0"
+ "@ethersproject/basex" "5.7.0"
+ "@ethersproject/bignumber" "5.7.0"
+ "@ethersproject/bytes" "5.7.0"
+ "@ethersproject/constants" "5.7.0"
+ "@ethersproject/contracts" "5.7.0"
+ "@ethersproject/hash" "5.7.0"
+ "@ethersproject/hdnode" "5.7.0"
+ "@ethersproject/json-wallets" "5.7.0"
+ "@ethersproject/keccak256" "5.7.0"
+ "@ethersproject/logger" "5.7.0"
+ "@ethersproject/networks" "5.7.1"
+ "@ethersproject/pbkdf2" "5.7.0"
+ "@ethersproject/properties" "5.7.0"
+ "@ethersproject/providers" "5.7.2"
+ "@ethersproject/random" "5.7.0"
+ "@ethersproject/rlp" "5.7.0"
+ "@ethersproject/sha2" "5.7.0"
+ "@ethersproject/signing-key" "5.7.0"
+ "@ethersproject/solidity" "5.7.0"
+ "@ethersproject/strings" "5.7.0"
+ "@ethersproject/transactions" "5.7.0"
+ "@ethersproject/units" "5.7.0"
+ "@ethersproject/wallet" "5.7.0"
+ "@ethersproject/web" "5.7.1"
+ "@ethersproject/wordlists" "5.7.0"
+
+ethjs-util@0.1.6, ethjs-util@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536"
+ integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==
+ dependencies:
+ is-hex-prefixed "1.0.0"
+ strip-hex-prefix "1.0.0"
+
+event-target-shim@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789"
+ integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==
+
+evp_bytestokey@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
+ dependencies:
+ md5.js "^1.3.4"
+ safe-buffer "^5.1.1"
+
+fill-range@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
+ integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
+ dependencies:
+ to-regex-range "^5.0.1"
+
+find-up@5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
+ integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
+ dependencies:
+ locate-path "^6.0.0"
+ path-exists "^4.0.0"
+
+find-up@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==
+ dependencies:
+ locate-path "^2.0.0"
+
+flat@^5.0.2:
+ version "5.0.2"
+ resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
+ integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+
+follow-redirects@^1.12.1:
+ version "1.15.3"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a"
+ integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==
+
+fp-ts@1.19.3:
+ version "1.19.3"
+ resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f"
+ integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==
+
+fp-ts@^1.0.0:
+ version "1.19.5"
+ resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a"
+ integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A==
+
+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.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
+ integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^2.1.0"
+ klaw "^1.0.0"
+ path-is-absolute "^1.0.0"
+ rimraf "^2.2.8"
+
+fs-extra@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
+ integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
+ dependencies:
+ graceful-fs "^4.1.2"
+ jsonfile "^4.0.0"
+ universalify "^0.1.0"
+
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
+
+fsevents@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
+ integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
+
+get-caller-file@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+ integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+glob-parent@~5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
+ integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
+ dependencies:
+ is-glob "^4.0.1"
+
+glob@7.2.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
+ integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+glob@^7.1.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
+ integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.1.1"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
+ version "4.2.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+hardhat@=2.16.0:
+ version "2.16.0"
+ resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.16.0.tgz#c5611d433416b31f6ce92f733b1f1b5236ad6230"
+ integrity sha512-7VQEJPQRAZdtrYUZaU9GgCpP3MBNy/pTdscARNJQMWKj5C+R7V32G5uIZKIqZ4QiqXa6CBfxxe+G+ahxUbHZHA==
+ dependencies:
+ "@ethersproject/abi" "^5.1.2"
+ "@metamask/eth-sig-util" "^4.0.0"
+ "@nomicfoundation/ethereumjs-block" "5.0.1"
+ "@nomicfoundation/ethereumjs-blockchain" "7.0.1"
+ "@nomicfoundation/ethereumjs-common" "4.0.1"
+ "@nomicfoundation/ethereumjs-evm" "2.0.1"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.1"
+ "@nomicfoundation/ethereumjs-statemanager" "2.0.1"
+ "@nomicfoundation/ethereumjs-trie" "6.0.1"
+ "@nomicfoundation/ethereumjs-tx" "5.0.1"
+ "@nomicfoundation/ethereumjs-util" "9.0.1"
+ "@nomicfoundation/ethereumjs-vm" "7.0.1"
+ "@nomicfoundation/solidity-analyzer" "^0.1.0"
+ "@sentry/node" "^5.18.1"
+ "@types/bn.js" "^5.1.0"
+ "@types/lru-cache" "^5.1.0"
+ abort-controller "^3.0.0"
+ adm-zip "^0.4.16"
+ aggregate-error "^3.0.0"
+ ansi-escapes "^4.3.0"
+ chalk "^2.4.2"
+ chokidar "^3.4.0"
+ ci-info "^2.0.0"
+ debug "^4.1.1"
+ enquirer "^2.3.0"
+ env-paths "^2.2.0"
+ ethereum-cryptography "^1.0.3"
+ ethereumjs-abi "^0.6.8"
+ find-up "^2.1.0"
+ fp-ts "1.19.3"
+ fs-extra "^7.0.1"
+ glob "7.2.0"
+ immutable "^4.0.0-rc.12"
+ io-ts "1.10.4"
+ keccak "^3.0.2"
+ lodash "^4.17.11"
+ mnemonist "^0.38.0"
+ mocha "^10.0.0"
+ p-map "^4.0.0"
+ raw-body "^2.4.1"
+ resolve "1.17.0"
+ semver "^6.3.0"
+ solc "0.7.3"
+ source-map-support "^0.5.13"
+ stacktrace-parser "^0.1.10"
+ tsort "0.0.1"
+ undici "^5.14.0"
+ uuid "^8.3.2"
+ ws "^7.4.6"
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
+
+has-flag@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+
+hash-base@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
+ integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
+ dependencies:
+ inherits "^2.0.4"
+ readable-stream "^3.6.0"
+ safe-buffer "^5.2.0"
+
+hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+he@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
+
+hmac-drbg@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+http-errors@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
+ integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
+ dependencies:
+ depd "2.0.0"
+ inherits "2.0.4"
+ setprototypeof "1.2.0"
+ statuses "2.0.1"
+ toidentifier "1.0.1"
+
+https-proxy-agent@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
+ integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
+ dependencies:
+ agent-base "6"
+ debug "4"
+
+iconv-lite@0.4.24:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
+
+ieee754@^1.1.13, ieee754@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
+ integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
+
+immutable@^4.0.0-rc.12:
+ version "4.3.4"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f"
+ integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==
+
+indent-string@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
+ integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
+
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
+ integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+
+io-ts@1.10.4:
+ version "1.10.4"
+ resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2"
+ integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==
+ dependencies:
+ fp-ts "^1.0.0"
+
+is-binary-path@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
+ integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
+ dependencies:
+ binary-extensions "^2.0.0"
+
+is-buffer@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
+ integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
+
+is-extglob@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
+
+is-fullwidth-code-point@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+ integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+is-glob@^4.0.1, is-glob@~4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
+ integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-hex-prefixed@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554"
+ integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==
+
+is-number@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
+ integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
+
+is-plain-obj@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
+ integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
+
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+isarray@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==
+
+isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
+
+js-sdsl@^4.1.4:
+ version "4.4.2"
+ resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847"
+ integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==
+
+js-sha3@0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
+ integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
+
+js-yaml@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
+jsonfile@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonfile@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+ integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+ optionalDependencies:
+ graceful-fs "^4.1.6"
+
+jsonparse@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
+ integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
+
+keccak@^3.0.0, keccak@^3.0.2:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d"
+ integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==
+ dependencies:
+ node-addon-api "^2.0.0"
+ node-gyp-build "^4.2.0"
+ readable-stream "^3.6.0"
+
+klaw@^1.0.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==
+ optionalDependencies:
+ graceful-fs "^4.1.9"
+
+level-supports@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a"
+ integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==
+
+level-transcoder@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c"
+ integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==
+ dependencies:
+ buffer "^6.0.3"
+ module-error "^1.0.1"
+
+level@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394"
+ integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==
+ dependencies:
+ browser-level "^1.0.1"
+ classic-level "^1.2.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+locate-path@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
+ integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
+ dependencies:
+ p-locate "^5.0.0"
+
+lodash@^4.17.11:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+log-symbols@4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+lru-cache@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
+ integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
+ dependencies:
+ yallist "^3.0.2"
+
+lru_map@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
+ integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==
+
+mcl-wasm@^0.7.1:
+ version "0.7.9"
+ resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f"
+ integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==
+
+md5.js@^1.3.4:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+ safe-buffer "^5.1.2"
+
+memory-level@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692"
+ integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==
+ dependencies:
+ abstract-level "^1.0.0"
+ functional-red-black-tree "^1.0.1"
+ module-error "^1.0.1"
+
+memorystream@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2"
+ integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==
+
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
+
+minimatch@5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
+ integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
+ dependencies:
+ brace-expansion "^2.0.1"
+
+minimatch@^3.0.4, minimatch@^3.1.1:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
+ integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@^1.2.6:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
+ integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
+
+mkdirp-classic@^0.5.2:
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
+ integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
+
+mkdirp@^0.5.1:
+ version "0.5.6"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
+ integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
+ dependencies:
+ minimist "^1.2.6"
+
+mnemonist@^0.38.0:
+ version "0.38.5"
+ resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade"
+ integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==
+ dependencies:
+ obliterator "^2.0.0"
+
+mocha@^10.0.0:
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8"
+ integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==
+ dependencies:
+ ansi-colors "4.1.1"
+ browser-stdout "1.3.1"
+ chokidar "3.5.3"
+ debug "4.3.4"
+ diff "5.0.0"
+ escape-string-regexp "4.0.0"
+ find-up "5.0.0"
+ glob "7.2.0"
+ he "1.2.0"
+ js-yaml "4.1.0"
+ log-symbols "4.1.0"
+ minimatch "5.0.1"
+ ms "2.1.3"
+ nanoid "3.3.3"
+ serialize-javascript "6.0.0"
+ strip-json-comments "3.1.1"
+ supports-color "8.1.1"
+ workerpool "6.2.1"
+ yargs "16.2.0"
+ yargs-parser "20.2.4"
+ yargs-unparser "2.0.0"
+
+module-error@^1.0.1, module-error@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86"
+ integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==
+
+ms@2.1.2:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
+ integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+
+ms@2.1.3, ms@^2.1.1:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
+
+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==
+
+nanoid@3.3.3:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
+ integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
+
+napi-macros@^2.2.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044"
+ integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==
+
+node-addon-api@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
+ integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
+
+node-fetch@^2.6.0:
+ 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==
+ dependencies:
+ whatwg-url "^5.0.0"
+
+node-gyp-build@^4.2.0, node-gyp-build@^4.3.0:
+ version "4.6.1"
+ resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e"
+ integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==
+
+normalize-path@^3.0.0, normalize-path@~3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
+ integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
+
+obliterator@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816"
+ integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==
+
+once@^1.3.0, once@^1.3.1, once@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
+ dependencies:
+ wrappy "1"
+
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
+
+p-limit@^1.1.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
+ dependencies:
+ p-try "^1.0.0"
+
+p-limit@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
+ integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
+ dependencies:
+ yocto-queue "^0.1.0"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==
+ dependencies:
+ p-limit "^1.1.0"
+
+p-locate@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
+ integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
+ dependencies:
+ p-limit "^3.0.2"
+
+p-map@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b"
+ integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
+ dependencies:
+ aggregate-error "^3.0.0"
+
+p-try@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==
+
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
+path-is-absolute@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
+
+path-parse@^1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+ integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+pbkdf2@^3.0.17:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075"
+ integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==
+ dependencies:
+ create-hash "^1.1.2"
+ create-hmac "^1.1.4"
+ ripemd160 "^2.0.1"
+ safe-buffer "^5.0.1"
+ sha.js "^2.4.8"
+
+picomatch@^2.0.4, picomatch@^2.2.1:
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
+ integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+
+process-nextick-args@~2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
+ integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
+
+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@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
+ integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
+ dependencies:
+ end-of-stream "^1.1.0"
+ once "^1.3.1"
+
+queue-microtask@^1.2.2, queue-microtask@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
+ integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
+
+randombytes@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
+ integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
+ dependencies:
+ safe-buffer "^5.1.0"
+
+raw-body@^2.4.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a"
+ integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
+ dependencies:
+ bytes "3.1.2"
+ http-errors "2.0.0"
+ iconv-lite "0.4.24"
+ unpipe "1.0.0"
+
+readable-stream@^2.2.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.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
+ dependencies:
+ inherits "^2.0.3"
+ string_decoder "^1.1.1"
+ util-deprecate "^1.0.1"
+
+readable-stream@~1.0.26-4:
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
+readdirp@~3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
+ integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
+ dependencies:
+ picomatch "^2.2.1"
+
+require-directory@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+require-from-string@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+resolve@1.17.0:
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
+ integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
+ dependencies:
+ path-parse "^1.0.6"
+
+rimraf@^2.2.8:
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec"
+ integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
+ dependencies:
+ glob "^7.1.3"
+
+ripemd160@^2.0.0, ripemd160@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
+ dependencies:
+ hash-base "^3.0.0"
+ inherits "^2.0.1"
+
+rlp@^2.2.3:
+ version "2.2.7"
+ resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf"
+ integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==
+ dependencies:
+ bn.js "^5.2.0"
+
+run-parallel-limit@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba"
+ integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==
+ dependencies:
+ queue-microtask "^1.2.2"
+
+rustbn.js@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca"
+ integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==
+
+safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
+ integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+scrypt-js@3.0.1, scrypt-js@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
+ integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
+
+secp256k1@^4.0.1:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303"
+ integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==
+ dependencies:
+ elliptic "^6.5.4"
+ node-addon-api "^2.0.0"
+ node-gyp-build "^4.2.0"
+
+semver@^5.5.0:
+ version "5.7.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
+ integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
+
+semver@^6.3.0:
+ version "6.3.1"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
+
+serialize-javascript@6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
+ integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
+ dependencies:
+ randombytes "^2.1.0"
+
+setimmediate@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
+ integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==
+
+setprototypeof@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
+ integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
+
+sha.js@^2.4.0, sha.js@^2.4.8:
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
+ dependencies:
+ inherits "^2.0.1"
+ safe-buffer "^5.0.1"
+
+solc@0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a"
+ integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==
+ dependencies:
+ command-exists "^1.2.8"
+ commander "3.0.2"
+ follow-redirects "^1.12.1"
+ fs-extra "^0.30.0"
+ js-sha3 "0.8.0"
+ memorystream "^0.3.1"
+ require-from-string "^2.0.0"
+ semver "^5.5.0"
+ tmp "0.0.33"
+
+source-map-support@^0.5.13:
+ version "0.5.21"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
+ integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map@^0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+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==
+
+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"
+
+stacktrace-parser@^0.1.10:
+ version "0.1.10"
+ resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a"
+ integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==
+ dependencies:
+ type-fest "^0.7.1"
+
+statuses@2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
+ integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+
+string-width@^4.1.0, string-width@^4.2.0:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+ dependencies:
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
+
+string_decoder@^1.1.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
+ dependencies:
+ safe-buffer "~5.2.0"
+
+string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-hex-prefix@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f"
+ integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==
+ dependencies:
+ is-hex-prefixed "1.0.0"
+
+strip-json-comments@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
+ integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
+
+supports-color@8.1.1:
+ version "8.1.1"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
+ integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
+ dependencies:
+ has-flag "^4.0.0"
+
+supports-color@^5.3.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
+ dependencies:
+ has-flag "^3.0.0"
+
+supports-color@^7.1.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
+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"
+
+"through@>=2.2.7 <3":
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
+tmp@0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
+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-regex-range@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
+ integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
+ dependencies:
+ is-number "^7.0.0"
+
+toidentifier@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
+ integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
+
+tr46@~0.0.3:
+ version "0.0.3"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+tslib@^1.9.3:
+ version "1.14.1"
+ resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
+ integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
+
+tsort@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786"
+ integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==
+
+tweetnacl-util@^0.15.1:
+ version "0.15.1"
+ resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b"
+ integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==
+
+tweetnacl@^0.14.3:
+ version "0.14.5"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==
+
+tweetnacl@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
+ integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
+
+type-fest@^0.21.3:
+ version "0.21.3"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
+ integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==
+
+type-fest@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48"
+ integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==
+
+undici-types@~5.26.4:
+ version "5.26.5"
+ resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
+ integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
+
+undici@^5.14.0:
+ version "5.27.2"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-5.27.2.tgz#a270c563aea5b46cc0df2550523638c95c5d4411"
+ integrity sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==
+ dependencies:
+ "@fastify/busboy" "^2.0.0"
+
+universalify@^0.1.0:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
+unpipe@1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
+
+util-deprecate@^1.0.1, util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
+
+uuid@^8.3.2:
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
+ integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
+
+webidl-conversions@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+whatwg-url@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+ integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+ dependencies:
+ tr46 "~0.0.3"
+ webidl-conversions "^3.0.0"
+
+workerpool@6.2.1:
+ version "6.2.1"
+ resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
+ integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
+
+wrap-ansi@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+ integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
+
+ws@7.4.6:
+ version "7.4.6"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
+ integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
+
+ws@^7.4.6:
+ version "7.5.9"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
+ integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
+
+xtend@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
+ integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
+
+y18n@^5.0.5:
+ version "5.0.8"
+ resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+ integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yallist@^3.0.2:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
+ integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
+
+yargs-parser@20.2.4:
+ version "20.2.4"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
+ integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
+
+yargs-parser@^20.2.2:
+ version "20.2.9"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+ integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
+yargs-unparser@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
+ integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
+ dependencies:
+ camelcase "^6.0.0"
+ decamelize "^4.0.0"
+ flat "^5.0.2"
+ is-plain-obj "^2.1.0"
+
+yargs@16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
+yocto-queue@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
+ integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
diff --git a/etc/env/base/README.md b/etc/env/base/README.md
index e251eee6ec45..8bf4ceb48cdb 100644
--- a/etc/env/base/README.md
+++ b/etc/env/base/README.md
@@ -14,8 +14,8 @@ zk config compile
Without any additional arguments specified, this subcommand will do the following:
-1. Check whether `etc/env/current` file exists. If so, it is read and the name of the current environment is taken from
- there. Otherwise, the environment is assumed to be called `dev`.
+1. Check whether `etc/env/chains/current` file exists. If so, it is read and the name of the current environment is
+ taken from there. Otherwise, the environment is assumed to be called `dev`.
2. Check whether the folder with the name same as current environment exists. If so, configs are read from there.
Otherwise behavior depends on the environment name: for `dev` environment, `dev` folder will be created as a copy of
the `base` folder. For any other environment, an error will be reported.
diff --git a/etc/env/base/chain.toml b/etc/env/base/chain.toml
index 72757571fb28..c87b2e14b99b 100644
--- a/etc/env/base/chain.toml
+++ b/etc/env/base/chain.toml
@@ -90,8 +90,8 @@ fee_model_version = "V1"
validation_computational_gas_limit = 300000
save_call_traces = true
-bootloader_hash = "0x0100089d6cf001d52b9e64572fa9b3555211f56a2ad66784f495c4192a88b477"
-default_aa_hash = "0x01000563ee5d0abdf9fc65f748a700d2c377aadebc16d5bf21105f8a94eff028"
+bootloader_hash = "0x010008e7e76ac18ea5e49634399ec7062152c224259c85f4fa88690e5447d2e7"
+default_aa_hash = "0x01000563dc93ec6220498801ccef18c8e667fe26b7fdd9fb9a8d8e01796144ff"
[chain.operations_manager]
# Sleep time when there is no new input data
diff --git a/etc/env/base/contracts.toml b/etc/env/base/contracts.toml
index e0a7a81642c1..cbf3b104912e 100644
--- a/etc/env/base/contracts.toml
+++ b/etc/env/base/contracts.toml
@@ -26,10 +26,10 @@ RECURSION_NODE_LEVEL_VK_HASH = "0x1186ec268d49f1905f8d9c1e9d39fc33e98c74f91d91a2
RECURSION_LEAF_LEVEL_VK_HASH = "0x101e08b00193e529145ee09823378ef51a3bc8966504064f1f6ba3f1ba863210"
RECURSION_CIRCUITS_SET_VKS_HASH = "0x18c1639094f58177409186e8c48d9f577c9410901d2f1d486b3e7d6cf553ae4c"
GENESIS_TX_HASH = "0xb99ebfea46cbe05a21cd80fe5597d97b204befc52a16303f579c607dc1ac2e2e"
-GENESIS_ROOT = "0x1920e0154aa7649a645e7931b84796bfec22b58250778b828d9a5b8c7d32f661"
+GENESIS_ROOT = "0x7fe280b1c2209f4b34a15db4cc74568f59db98d400c8e3f3282163acb74d4b14"
+GENESIS_BATCH_COMMITMENT = "0x62a99e2685b08bd81eef940a3698ffba6289ec77882d7ac6d5e7bcdbbe6351cd"
PRIORITY_TX_MAX_GAS_LIMIT = 72000000
DEPLOY_L2_BRIDGE_COUNTERPART_GAS_LIMIT = 10000000
-GENESIS_BATCH_COMMITMENT = "0xc64914ac5697bf6a73b9cca890ef013a83f8415573f2829b29111598410852a6"
GENESIS_ROLLUP_LEAF_INDEX = "50"
GENESIS_PROTOCOL_VERSION = "23"
L1_WETH_BRIDGE_IMPL_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9"
@@ -38,21 +38,30 @@ L1_WETH_TOKEN_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9"
L2_WETH_BRIDGE_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9"
L2_WETH_TOKEN_IMPL_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9"
L2_WETH_TOKEN_PROXY_ADDR = "0x5E6D086F5eC079ADFF4FB3774CDf3e8D6a34F7E9"
-FRI_RECURSION_LEAF_LEVEL_VK_HASH = "0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a"
-FRI_RECURSION_NODE_LEVEL_VK_HASH = "0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080"
-FRI_RECURSION_SCHEDULER_LEVEL_VK_HASH = "0x1405880dc3317d635bddb0ab62bf5d013e5d1f462161c1f7ac3289c7fef956da"
-SNARK_WRAPPER_VK_HASH = "0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7"
BLOB_VERSIONED_HASH_RETRIEVER_ADDR = "0x0000000000000000000000000000000000000000"
-
INITIAL_PROTOCOL_VERSION = 22
+L1_SHARED_BRIDGE_IMPL_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF"
# These are currently not used, but will be used once the shared bridge is up
BRIDGEHUB_PROXY_ADDR = "0x0000000000000000000000000000000000000000"
BRIDGEHUB_IMPL_ADDR = "0x0000000000000000000000000000000000000000"
STATE_TRANSITION_PROXY_ADDR = "0x0000000000000000000000000000000000000000"
STATE_TRANSITION_IMPL_ADDR = "0x0000000000000000000000000000000000000000"
TRANSPARENT_PROXY_ADMIN_ADDR = "0x0000000000000000000000000000000000000000"
-
+BASE_TOKEN_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF"
+BASE_TOKEN_BRIDGE_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF"
+GENESIS_UPGRADE_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF"
+MAX_NUMBER_OF_HYPERCHAINS = 100
+L1_SHARED_BRIDGE_PROXY_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF"
+L2_SHARED_BRIDGE_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF"
+L2_SHARED_BRIDGE_IMPL_ADDR = "0xFC073319977e314F251EAE6ae6bE76B0B3BAeeCF"
+FRI_RECURSION_LEAF_LEVEL_VK_HASH = "0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a"
+FRI_RECURSION_NODE_LEVEL_VK_HASH = "0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080"
+FRI_RECURSION_SCHEDULER_LEVEL_VK_HASH = "0x1405880dc3317d635bddb0ab62bf5d013e5d1f462161c1f7ac3289c7fef956da"
+SNARK_WRAPPER_VK_HASH = "0x063c6fb5c70404c2867f413a8e35563ad3d040b1ad8c11786231bfdba7b472c7"
+SHARED_BRIDGE_UPGRADE_STORAGE_SWITCH = 0
+ERA_CHAIN_ID = 9
+ERA_DIAMOND_PROXY_ADDR = "0x0000000000000000000000000000000000000000"
[contracts.test]
dummy_verifier = true
easy_priority_mode = false
diff --git a/etc/env/base/eth_sender.toml b/etc/env/base/eth_sender.toml
index db2240e04211..d67689130be6 100644
--- a/etc/env/base/eth_sender.toml
+++ b/etc/env/base/eth_sender.toml
@@ -9,60 +9,60 @@
# operator_blobs_eth_addr is defined in the `private.toml`
# Amount of confirmations required to consider L1 transaction committed.
-wait_confirmations=1
+wait_confirmations = 1
# Amount of blocks we will wait before considering L1 transaction stuck.
-expected_wait_time_block=30
+expected_wait_time_block = 30
# Node polling period in seconds.
-tx_poll_period=1
+tx_poll_period = 1
# Aggregate txs polling period in seconds.
-aggregate_tx_poll_period=1
+aggregate_tx_poll_period = 1
# The maximum amount of simultaneously sent Ethereum transactions.
-max_txs_in_flight=30 # Safe in the local environment, do not repeat on prod (right now it will produce way too many extra calls to web3)
-proof_sending_mode="SkipEveryProof"
+max_txs_in_flight = 30 # Safe in the local environment, do not repeat on prod (right now it will produce way too many extra calls to web3)
+proof_sending_mode = "SkipEveryProof"
# Max L2 blocks to commit in one L1 transaction
-max_aggregated_blocks_to_commit=1
+max_aggregated_blocks_to_commit = 1
# Max L2 blocks to execute in one L1 transaction
-max_aggregated_blocks_to_execute=10
+max_aggregated_blocks_to_execute = 10
-aggregated_block_commit_deadline=1
-aggregated_block_prove_deadline=10
-aggregated_block_execute_deadline=10
+aggregated_block_commit_deadline = 1
+aggregated_block_prove_deadline = 10
+aggregated_block_execute_deadline = 10
-timestamp_criteria_max_allowed_lag=30
+timestamp_criteria_max_allowed_lag = 30
# Based on geth implementation max size of transaction is 128kb.
-max_eth_tx_data_size=120000
+max_eth_tx_data_size = 120000
# Aggregated proof sizes to be generated by server.
-aggregated_proof_sizes=[1,4]
+aggregated_proof_sizes = [1]
# Max gas that can be used to execute aggregated operation
# for now (should be > 4kk which is max gas for one block commit/verify/execute)
-max_aggregated_tx_gas=4000000
+max_aggregated_tx_gas = 4000000
# Max gas that can used to include single block in aggregated operation
-max_single_tx_gas=6000000
+max_single_tx_gas = 6000000
# Max acceptable fee for sending tx to L1
-max_acceptable_priority_fee_in_gwei=100000000000
+max_acceptable_priority_fee_in_gwei = 100000000000
-proof_loading_mode="OldProofFromDb"
+proof_loading_mode = "OldProofFromDb"
-pubdata_sending_mode="Blobs"
+pubdata_sending_mode = "Blobs"
[eth_sender.gas_adjuster]
# Priority fee to be used by GasAdjuster (in wei).
-default_priority_fee_per_gas=1_000_000_000
+default_priority_fee_per_gas = 1_000_000_000
# Max number of base fees from previous blocks to be used to correctly price transactions.
-max_base_fee_samples=10_000
+max_base_fee_samples = 10_000
# These two are parameters of the base_fee_per_gas formula in GasAdjuster.
# The possible formulas are:
# 1. base_fee_median * (A + B * time_in_mempool)
# 2. base_fee_median * A * B ^ time_in_mempool
# Currently the second is used.
# To confirm, see core/bin/zksync_core/src/eth_sender/gas_adjuster/mod.rs
-pricing_formula_parameter_a=1.5
-pricing_formula_parameter_b=1.0005
-internal_l1_pricing_multiplier=0.8
+pricing_formula_parameter_a = 1.5
+pricing_formula_parameter_b = 1.0005
+internal_l1_pricing_multiplier = 0.8
# Node polling period in seconds.
-poll_period=5
+poll_period = 5
diff --git a/etc/env/configs/dev.toml b/etc/env/configs/dev.toml
new file mode 100644
index 000000000000..9d57c45984f0
--- /dev/null
+++ b/etc/env/configs/dev.toml
@@ -0,0 +1,3 @@
+__imports__ = [ "base", "l1-inits/.init.env", "l2-inits/dev.init.env" ]
+
+ETH_SENDER_SENDER_PUBDATA_SENDING_MODE = "Blobs"
diff --git a/etc/env/docker.toml b/etc/env/configs/docker.toml
similarity index 64%
rename from etc/env/docker.toml
rename to etc/env/configs/docker.toml
index 94348c3d2158..2f72e183a84a 100644
--- a/etc/env/docker.toml
+++ b/etc/env/configs/docker.toml
@@ -1,7 +1,12 @@
+__imports__ = [ "base", "l1-inits/.init.env", "l2-inits/docker.init.env" ]
+
+ETH_SENDER_SENDER_PUBDATA_SENDING_MODE = "Calldata"
+
+sqlx_offline = true
database_url = "postgres://postgres:notsecurepassword@postgres/zksync_local"
database_prover_url = "postgres://postgres:notsecurepassword@postgres/prover_local"
test_database_url = "postgres://postgres:notsecurepassword@host:5433/zksync_local_test"
-test_database_prover_url="postgres://postgres:notsecurepassword@host:5433/prover_local_test"
+test_database_prover_url = "postgres://postgres:notsecurepassword@host:5433/prover_local_test"
# for loadtest
l1_rpc_address = "http://reth:8545"
diff --git a/etc/env/ext-node-docker.toml b/etc/env/configs/ext-node-docker.toml
similarity index 88%
rename from etc/env/ext-node-docker.toml
rename to etc/env/configs/ext-node-docker.toml
index a9cda0f1ce44..bc6711e47414 100644
--- a/etc/env/ext-node-docker.toml
+++ b/etc/env/configs/ext-node-docker.toml
@@ -1,3 +1,5 @@
+__imports__ = [ "configs/ext-node.toml" ]
+
database_url = "postgres://postgres:notsecurepassword@postgres/_ext_node"
template_database_url = "postgres://postgres:notsecurepassword@postgres/zksync_local"
test_database_url = "postgres://postgres:notsecurepassword@host:5433/zksync_local_test_ext_node"
diff --git a/etc/env/ext-node.toml b/etc/env/configs/ext-node.toml
similarity index 100%
rename from etc/env/ext-node.toml
rename to etc/env/configs/ext-node.toml
diff --git a/etc/env/file_based/contracts.yaml b/etc/env/file_based/contracts.yaml
index 5d3c46e3f82e..e572a757c6d9 100644
--- a/etc/env/file_based/contracts.yaml
+++ b/etc/env/file_based/contracts.yaml
@@ -12,5 +12,8 @@ bridges:
l1_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf"
l2_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf"
weth:
+ l1_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf"
+ l2_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf"
+ shared:
l1_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf"
l2_address: "0xfc073319977e314f251eae6ae6be76b0b3baeecf"
\ No newline at end of file
diff --git a/etc/env/file_based/genesis.yaml b/etc/env/file_based/genesis.yaml
index c9b79aa4f21e..20560c4faf60 100644
--- a/etc/env/file_based/genesis.yaml
+++ b/etc/env/file_based/genesis.yaml
@@ -1,9 +1,9 @@
-genesis_root: 0x1920e0154aa7649a645e7931b84796bfec22b58250778b828d9a5b8c7d32f661
-genesis_rollup_leaf_index: '50'
-genesis_batch_commitment: 0xc64914ac5697bf6a73b9cca890ef013a83f8415573f2829b29111598410852a6
+genesis_root: 0xb749a312a6f3ece4d43c5a02730587e133fd4ff4f90edf27d866f49946302abe
+genesis_rollup_leaf_index: '46'
+genesis_batch_commitment: 0x7c15b7e70795ba6d07ffa67482343d6b07fad0941d4fd7fe8a748b4da764c006
genesis_protocol_version: 23
-default_aa_hash: 0x01000563ee5d0abdf9fc65f748a700d2c377aadebc16d5bf21105f8a94eff028
-bootloader_hash: 0x0100089d6cf001d52b9e64572fa9b3555211f56a2ad66784f495c4192a88b477
+default_aa_hash: 0x0100055be0b42ec7b676a62a67507bad5db7b30ccbce9640ba9db9e37cc8d499
+bootloader_hash: 0x010008095dfd6a873af3909665f4d7929d3bf86baf725277618f85135e4054d2
l1_chain_id: '9'
l2_chain_id: '270'
fee_account: '0x0000000000000000000000000000000000000001'
diff --git a/etc/test_config/constant/eth.json b/etc/test_config/constant/eth.json
index 0b464bafc03f..daf9f777f19a 100644
--- a/etc/test_config/constant/eth.json
+++ b/etc/test_config/constant/eth.json
@@ -1,6 +1,15 @@
{
"web3_url": "http://127.0.0.1:8545",
"test_mnemonic": "stuff slice staff easily soup parent arm payment cotton trade scatter struggle",
+ "test_mnemonic2": "pair glimpse monkey crisp eternal often favorite amused valley year prize inspire",
+ "test_mnemonic3": "jar coyote segment sign gate host device wonder mention hybrid spawn rifle",
+ "test_mnemonic4": "science rally wrestle destroy fly album manual virus cloud tortoise core adapt",
+ "test_mnemonic5": "process supply swift attack build mobile laundry keep regret just arrive pepper",
+ "test_mnemonic6": "age second sugar novel round mechanic settle garage peasant spell bus surprise",
+ "test_mnemonic7": "embody number total rice word lunch reject jungle merge siren elegant finger",
+ "test_mnemonic8": "race bring office flip tired subject region public about target effort aisle",
+ "test_mnemonic9": "regret bench until lesson fever two license garlic series rice odor tourist",
+ "test_mnemonic10": "misery lizard beach magic blue one genre damage excess police image become",
"mnemonic": "fine music test violin matrix prize squirrel panther purchase material script deal",
"base_path": "m/44'/60'/0'/0"
}
diff --git a/etc/upgrades/1711451944-hyperchain-upgrade/common.json b/etc/upgrades/1711451944-hyperchain-upgrade/common.json
new file mode 100644
index 000000000000..90bb9d00bb2e
--- /dev/null
+++ b/etc/upgrades/1711451944-hyperchain-upgrade/common.json
@@ -0,0 +1,5 @@
+{
+ "name": "hyperchain-upgrade",
+ "creationTimestamp": 1711451944,
+ "protocolVersion": "23"
+}
\ No newline at end of file
diff --git a/etc/upgrades/1711451944-hyperchain-upgrade/localhost/crypto.json b/etc/upgrades/1711451944-hyperchain-upgrade/localhost/crypto.json
new file mode 100644
index 000000000000..85c3f37f33ba
--- /dev/null
+++ b/etc/upgrades/1711451944-hyperchain-upgrade/localhost/crypto.json
@@ -0,0 +1,11 @@
+{
+ "verifier": {
+ "address": "0x3b504cD804b65735b1346fe4aFEfc4B3478518b1",
+ "txHash": "0x1f39124e7dded035a620893118e70a3554a798ed3ca8f410b7e0c438f4e976f5"
+ },
+ "keys": {
+ "recursionNodeLevelVkHash": "0x5a3ef282b21e12fe1f4438e5bb158fc5060b160559c5158c6389d62d9fe3d080",
+ "recursionLeafLevelVkHash": "0x400a4b532c6f072c00d1806ef299300d4c104f4ac55bd8698ade78894fcadc0a",
+ "recursionCircuitsSetVksHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
+ }
+}
\ No newline at end of file
diff --git a/etc/upgrades/1711451944-hyperchain-upgrade/localhost/facets.json b/etc/upgrades/1711451944-hyperchain-upgrade/localhost/facets.json
new file mode 100644
index 000000000000..eefd4fe0e32a
--- /dev/null
+++ b/etc/upgrades/1711451944-hyperchain-upgrade/localhost/facets.json
@@ -0,0 +1,18 @@
+{
+ "ExecutorFacet": {
+ "address": "0x05b457568b5dB6A441E8EE59e62FD2e615D75a74",
+ "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ "AdminFacet": {
+ "address": "0x4404E6756811E631ddD86d9B08d915595c588001",
+ "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ "GettersFacet": {
+ "address": "0xA3c5567c001cBA583819137a913D0750f49Bf595",
+ "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
+ },
+ "MailboxFacet": {
+ "address": "0xD1b09a1AC04FE9109fAE124490eAd365D5e221B8",
+ "txHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
+ }
+}
\ No newline at end of file
diff --git a/infrastructure/local-setup-preparation/package.json b/infrastructure/local-setup-preparation/package.json
index d08e9a4dbb8b..c319532d19dd 100644
--- a/infrastructure/local-setup-preparation/package.json
+++ b/infrastructure/local-setup-preparation/package.json
@@ -6,7 +6,7 @@
"dependencies": {
"ethers": "~5.7.0",
"ts-node": "^10.7.0",
- "zksync-web3": "^0.15.5"
+ "zksync-ethers": "https://github.com/zksync-sdk/zksync-ethers#ethers-v5-feat/bridgehub"
},
"devDependencies": {
"typescript": "^4.5.5",
@@ -15,4 +15,4 @@
"scripts": {
"start": "ts-node ./src/index.ts"
}
-}
+}
\ No newline at end of file
diff --git a/infrastructure/local-setup-preparation/src/index.ts b/infrastructure/local-setup-preparation/src/index.ts
index c0fa117d66fd..4d335a32aa13 100644
--- a/infrastructure/local-setup-preparation/src/index.ts
+++ b/infrastructure/local-setup-preparation/src/index.ts
@@ -1,4 +1,4 @@
-import { utils } from 'zksync-web3';
+import { utils } from 'zksync-ethers';
import { ethers } from 'ethers';
import { getEthersProvider, getWalletKeys } from './utils';
@@ -7,11 +7,13 @@ const AMOUNT_TO_DEPOSIT = ethers.utils.parseEther('1000000000000');
async function depositWithRichAccounts() {
const ethProvider = getEthersProvider();
+
+ const chainId = process.env.CHAIN_ETH_ZKSYNC_NETWORK_ID!;
const wallets = getWalletKeys().map((wk) => new ethers.Wallet(wk.privateKey, ethProvider));
const handles: Promise[] = [];
- if (!process.env.CONTRACTS_DIAMOND_PROXY_ADDR) {
+ if (!process.env.CONTRACTS_BRIDGEHUB_PROXY_ADDR) {
throw new Error('zkSync L1 Main contract address was not found');
}
@@ -19,16 +21,17 @@ async function depositWithRichAccounts() {
// it is not possible to estimate the exact number of gas that is required for the transaction
const DEPOSIT_L2_GAS_LIMIT = 10_000_000;
const gasPrice = await ethProvider.getGasPrice();
- const contract = new ethers.Contract(process.env.CONTRACTS_DIAMOND_PROXY_ADDR, utils.ZKSYNC_MAIN_ABI, ethProvider);
+ const contract = new ethers.Contract(process.env.CONTRACTS_BRIDGEHUB_PROXY_ADDR, utils.BRIDGEHUB_ABI, ethProvider);
const expectedCost = await contract.l2TransactionBaseCost(
+ chainId,
gasPrice,
DEPOSIT_L2_GAS_LIMIT,
utils.DEFAULT_GAS_PER_PUBDATA_LIMIT
);
for (const wallet of wallets) {
- const contract = new ethers.Contract(process.env.CONTRACTS_DIAMOND_PROXY_ADDR, utils.ZKSYNC_MAIN_ABI, wallet);
+ const contract = new ethers.Contract(process.env.CONTRACTS_BRIDGEHUB_PROXY_ADDR, utils.BRIDGEHUB_ABI, wallet);
const overrides = {
// TODO(EVM-565): expected cost calculation seems to be off, understand why and then remove the second add.
@@ -43,7 +46,9 @@ async function depositWithRichAccounts() {
handles.push(
// We have to implement the deposit manually because we run this script before running the server,
// deposit method from wallet requires a running server
+ // TODO(EVM-566): this is broken - as BRIDGEHUB no longer exposes 'requestL2transaction'
contract.requestL2Transaction(
+ chainId,
wallet.address,
AMOUNT_TO_DEPOSIT,
'0x',
diff --git a/infrastructure/protocol-upgrade/README.md b/infrastructure/protocol-upgrade/README.md
index caa14236f8b3..da5ee313dab8 100644
--- a/infrastructure/protocol-upgrade/README.md
+++ b/infrastructure/protocol-upgrade/README.md
@@ -146,6 +146,8 @@ You can generate calldata using the Complex Upgrader contract.
`delegatedCalldata` field of the L2Upgrade file.
- `use-contract-deployer`: Using this parameter, the tool will prepare calldata using the ContractDeployer contract.
This skips the delegation step of the Complex Upgrader contract. This is mostly needed for the very first upgrade.
+- `--system-contracts-with-constructor`: Using this parameter and passing some system contract addresses, the
+ constructor to the list of the provided system contracts will be called.
```bash
$ zk f yarn start l2-transaction complex-upgrader-calldata \
diff --git a/infrastructure/protocol-upgrade/src/hyperchain-upgrade.ts b/infrastructure/protocol-upgrade/src/hyperchain-upgrade.ts
new file mode 100644
index 000000000000..4d5cb98450a3
--- /dev/null
+++ b/infrastructure/protocol-upgrade/src/hyperchain-upgrade.ts
@@ -0,0 +1,241 @@
+import { Command } from 'commander';
+import { spawn } from 'zk/build/utils';
+import fs from 'fs';
+import { ethers } from 'ethers';
+
+import { updateContractsEnv } from 'zk/build/contract';
+import * as env from 'zk/build/env';
+import { setupForDal, DalPath } from 'zk/build/database';
+import { getFacetsFileName, getCryptoFileName } from './utils';
+import { getPostUpgradeCalldataFileName } from './utils';
+import { IZkSyncHyperchainFactory } from 'l1-contracts/typechain/IZkSyncHyperchainFactory';
+import { getWallet } from './transaction';
+
+async function hyperchainUpgrade1() {
+ const cwd = process.cwd();
+ process.chdir(`${process.env.ZKSYNC_HOME}/contracts/l1-contracts/`);
+
+ await spawn(`yarn hyperchain-upgrade-1 | tee deployHyperchainUpgradeContracts.log`);
+ process.chdir(cwd);
+
+ const deployLog = fs
+ .readFileSync(`${process.env.ZKSYNC_HOME}/contracts/l1-contracts/deployHyperchainUpgradeContracts.log`)
+ .toString();
+ const l1EnvVars = [
+ 'CONTRACTS_CREATE2_FACTORY_ADDR',
+
+ 'CONTRACTS_BRIDGEHUB_PROXY_ADDR',
+ 'CONTRACTS_BRIDGEHUB_IMPL_ADDR',
+
+ 'CONTRACTS_STATE_TRANSITION_PROXY_ADDR',
+ 'CONTRACTS_STATE_TRANSITION_IMPL_ADDR',
+
+ 'CONTRACTS_DIAMOND_UPGRADE_INIT_ADDR',
+ 'CONTRACTS_DIAMOND_INIT_ADDR',
+ 'CONTRACTS_DEFAULT_UPGRADE_ADDR',
+ 'CONTRACTS_HYPERCHAIN_UPGRADE_ADDR',
+ 'CONTRACTS_GENESIS_UPGRADE_ADDR',
+ 'CONTRACTS_GOVERNANCE_ADDR',
+ 'CONTRACTS_ADMIN_FACET_ADDR',
+ 'CONTRACTS_EXECUTOR_FACET_ADDR',
+ 'CONTRACTS_GETTERS_FACET_ADDR',
+ 'CONTRACTS_MAILBOX_FACET_ADDR',
+
+ 'CONTRACTS_VERIFIER_ADDR',
+ 'CONTRACTS_VALIDATOR_TIMELOCK_ADDR',
+
+ 'CONTRACTS_GENESIS_TX_HASH',
+ 'CONTRACTS_TRANSPARENT_PROXY_ADMIN_ADDR',
+ 'CONTRACTS_L1_SHARED_BRIDGE_PROXY_ADDR',
+ 'CONTRACTS_L1_SHARED_BRIDGE_IMPL_ADDR',
+ 'CONTRACTS_L1_ERC20_BRIDGE_PROXY_ADDR',
+ 'CONTRACTS_L1_ERC20_BRIDGE_IMPL_ADDR',
+ 'CONTRACTS_L1_WETH_BRIDGE_IMPL_ADDR',
+ 'CONTRACTS_L1_WETH_BRIDGE_PROXY_ADDR',
+ 'CONTRACTS_L1_ALLOW_LIST_ADDR',
+ 'CONTRACTS_L1_MULTICALL3_ADDR',
+ 'CONTRACTS_BLOB_VERSIONED_HASH_RETRIEVER_ADDR'
+ ];
+
+ console.log('Writing to', `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`);
+ updateContractsEnv(
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`,
+ deployLog,
+ l1EnvVars
+ );
+}
+
+async function insertAddresses() {
+ const facetsFile = getFacetsFileName(undefined);
+ const facets = JSON.parse(fs.readFileSync(facetsFile).toString());
+ facets.ExecutorFacet.address = process.env.CONTRACTS_EXECUTOR_FACET_ADDR;
+ facets.AdminFacet.address = process.env.CONTRACTS_ADMIN_FACET_ADDR;
+ facets.GettersFacet.address = process.env.CONTRACTS_GETTERS_FACET_ADDR;
+ facets.MailboxFacet.address = process.env.CONTRACTS_MAILBOX_FACET_ADDR;
+ fs.writeFileSync(facetsFile, JSON.stringify(facets, null, 4));
+
+ const verifierFile = getCryptoFileName(undefined);
+ const verifier = JSON.parse(fs.readFileSync(verifierFile).toString());
+ verifier.verifier.address = process.env.CONTRACTS_VERIFIER_ADDR;
+ fs.writeFileSync(verifierFile, JSON.stringify(verifier, null, 4));
+}
+
+async function hyperchainUpgrade2() {
+ const cwd = process.cwd();
+ process.chdir(`${process.env.ZKSYNC_HOME}/contracts/l1-contracts/`);
+
+ await spawn(`yarn hyperchain-upgrade-2 | tee deploydeployHyperchainUpgrade2.log`);
+ process.chdir(cwd);
+}
+
+async function hyperchainUpgrade3() {
+ const cwd = process.cwd();
+ process.chdir(`${process.env.ZKSYNC_HOME}/contracts/l1-contracts/`);
+
+ await spawn(`yarn hyperchain-upgrade-3 | tee deploydeployHyperchainUpgrade3.log`);
+ process.chdir(cwd);
+}
+
+async function preparePostUpgradeCalldata() {
+ let calldata = new ethers.utils.AbiCoder().encode(
+ ['uint256', 'address', 'address', 'address'],
+ [
+ process.env.CONTRACTS_ERA_CHAIN_ID,
+ process.env.CONTRACTS_BRIDGEHUB_PROXY_ADDR,
+ process.env.CONTRACTS_STATE_TRANSITION_PROXY_ADDR,
+ process.env.CONTRACTS_L1_SHARED_BRIDGE_PROXY_ADDR
+ ]
+ );
+ let postUpgradeCalldataFileName = getPostUpgradeCalldataFileName(undefined);
+
+ fs.writeFileSync(postUpgradeCalldataFileName, JSON.stringify(calldata, null, 2));
+}
+
+async function deploySharedBridgeL2Implementation() {
+ const cwd = process.cwd();
+ process.chdir(`${process.env.ZKSYNC_HOME}/contracts/l2-contracts/`);
+
+ await spawn(`yarn deploy-shared-bridge-l2-implementation | tee deploySharedBridgeImplementation.log`);
+ process.chdir(cwd);
+
+ const deployLog = fs
+ .readFileSync(`${process.env.ZKSYNC_HOME}/contracts/l2-contracts/deploySharedBridgeImplementation.log`)
+ .toString();
+ const l2EnvVars = ['CONTRACTS_L2_SHARED_BRIDGE_IMPL_ADDR'];
+
+ console.log('Writing to', `etc/env/l2-inits/${process.env.ZKSYNC_ENV}.init.env`);
+ updateContractsEnv(`etc/env/l2-inits/${process.env.ZKSYNC_ENV!}.init.env`, deployLog, l2EnvVars);
+}
+
+async function hyperchainFullUpgrade() {
+ process.chdir(`${process.env.ZKSYNC_HOME}`);
+
+ await spawn(
+ 'cp etc/env/.init.env etc/env/l1-inits/.init.env && rm ./etc/env/l2-inits/zksync_local.init.env && rm ./etc/env/target/zksync_local.env'
+ );
+ await spawn('zk env zksync_local');
+ env.modify(
+ 'CONTRACTS_ERA_DIAMOND_PROXY_ADDR',
+ process.env.CONTRACTS_DIAMOND_PROXY_ADDR,
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`
+ );
+
+ await deploySharedBridgeL2Implementation();
+
+ process.chdir(`${process.env.ZKSYNC_HOME}`);
+ await spawn('zk config compile zksync_local');
+ env.reload('zksync_local');
+ // process.chdir(`${process.env.ZKSYNC_HOME}/infrastructure/protocol-upgrade`);
+ await hyperchainUpgrade1();
+ env.reload('zksync_local');
+
+ await insertAddresses();
+ env.reload('zksync_local');
+
+ await spawn('zk f yarn workspace protocol-upgrade-tool start facets generate-facet-cuts');
+ await spawn('zk f yarn workspace protocol-upgrade-tool start system-contracts publish-all');
+ await spawn(
+ 'zk f yarn workspace protocol-upgrade-tool start l2-transaction complex-upgrader-calldata --use-forced-deployments --use-contract-deployer'
+ );
+ await spawn('zk f yarn workspace protocol-upgrade-tool start crypto save-verification-params');
+ await preparePostUpgradeCalldata();
+ await spawn(
+ `zk f yarn workspace protocol-upgrade-tool start transactions build-default --upgrade-timestamp 1711451944 --zksync-address ${process.env.CONTRACTS_DIAMOND_PROXY_ADDR} --use-new-governance --upgrade-address ${process.env.CONTRACTS_HYPERCHAIN_UPGRADE_ADDR} --post-upgrade-calldata`
+ );
+ await spawn(
+ `zk f yarn workspace protocol-upgrade-tool start transactions propose-upgrade --zksync-address ${process.env.CONTRACTS_DIAMOND_PROXY_ADDR} --new-governance ${process.env.CONTRACTS_GOVERNANCE_ADDR}`
+ );
+}
+
+async function postPropose() {
+ // we need to set up the prover dal
+ await setupForDal(DalPath.ProverDal, process.env.DATABASE_PROVER_URL);
+ await 'zk db migrate';
+}
+
+export const command = new Command('hyperchain-upgrade').description('create and publish custom l2 upgrade');
+
+command
+ .command('start')
+ .description('start')
+ .option('--shared-bridge-l2-implementation')
+ .option('--phase1')
+ .option('--insert-addresses')
+ .option('--post-upgrade-calldata')
+ .option('--phase2')
+ .option('--phase3')
+ .option('--full-start')
+ .option('--post-propose')
+ .option('--execute-upgrade')
+ .action(async (options) => {
+ if (options.phase1) {
+ await hyperchainUpgrade1();
+ } else if (options.insertAddresses) {
+ await insertAddresses();
+ } else if (options.phase2) {
+ const wallet = getWallet(undefined, undefined);
+ const eraDiamond = IZkSyncHyperchainFactory.connect(process.env.CONTRACTS_DIAMOND_PROXY_ADDR, wallet);
+ const executeBatchNumber = await eraDiamond.getTotalBatchesExecuted();
+ const txId = await eraDiamond.getTotalPriorityTxs();
+ console.log(`setEraPostLegacyBridgeUpgradeFirstBatch=${executeBatchNumber}`);
+ console.log(`tx id necessary to calculate setEraLegacyBridgeLastDepositTime =${txId}`);
+ await hyperchainUpgrade2();
+ } else if (options.postUpgradeCalldata) {
+ await preparePostUpgradeCalldata();
+ } else if (options.sharedBridgeL2Implementation) {
+ await deploySharedBridgeL2Implementation();
+ } else if (options.phase3) {
+ await hyperchainUpgrade3();
+ } else if (options.fullStart) {
+ await hyperchainFullUpgrade();
+ } else if (options.postPropose) {
+ await postPropose();
+ } else if (options.executeUpgrade) {
+ const wallet = getWallet(undefined, undefined);
+ const eraDiamond = IZkSyncHyperchainFactory.connect(process.env.CONTRACTS_DIAMOND_PROXY_ADDR, wallet);
+ const executeBatchNumber = await eraDiamond.getTotalBatchesExecuted();
+
+ console.log(`setEraPostDiamondUpgradeFirstBatch=${executeBatchNumber}`);
+ await spawn(
+ `zk f yarn workspace protocol-upgrade-tool start transactions execute-upgrade --zksync-address ${process.env.CONTRACTS_DIAMOND_PROXY_ADDR} --new-governance ${process.env.CONTRACTS_GOVERNANCE_ADDR}`
+ );
+ // note we have to set 3 variables manually
+
+ // setEraPostDiamondUpgradeFirstBatch
+ // What we care about for withdrawals is the executed batch number at the moment of the diamond upgrade,
+ // since we are storing isWithdrawalFinalized flag, for some valid executed txs.
+ // this is printed out as part of the execute upgrade script for local testing
+ // for the mainnet upgrade we will have to manually check executedBatchNumber after the upgrade, since governance is signing the txs
+
+ // setEraPostLegacyBridgeUpgradeFirstBatch
+ // this is the first batchNumber after the L1ERC20Bridge has been upgraded
+ // What we care about for withdrawals is the executed batch number, since we are storing isWithdrawalFinalized flag, for some valid executed txs.
+ // this is printed out as part of the phase 2 script for local testing
+
+ // setEraLegacyBridgeLastDepositTime
+ // for the mainnet upgrade we will have to manually check the priority queue at the given block, since governance is signing the txs
+ // this is the batch number that the last deposit is processed in ( this is tied to a tx, so commit vs executed is not relevant)
+ // we will print the priority tx queue id as part of phase 2 script for local testing, and we can use that to find the batch number
+ // for the mainnet upgrade we will have to manually check the priority queue at the given block, since governance is signing the txs
+ }
+ });
diff --git a/infrastructure/protocol-upgrade/src/index.ts b/infrastructure/protocol-upgrade/src/index.ts
index 67a0afde0782..c94d280495f2 100644
--- a/infrastructure/protocol-upgrade/src/index.ts
+++ b/infrastructure/protocol-upgrade/src/index.ts
@@ -7,8 +7,9 @@ import { command as l1Upgrade } from './l1upgrade/facets';
import { command as l2Upgrade } from './l2upgrade/transactions';
import { command as transactions } from './transaction';
import { command as crypto } from './crypto/crypto';
+import { command as hyperchainUpgrade } from './hyperchain-upgrade';
-const COMMANDS = [publish, manager, customUpgrade, l1Upgrade, transactions, crypto, l2Upgrade];
+const COMMANDS = [publish, manager, customUpgrade, l1Upgrade, transactions, crypto, l2Upgrade, hyperchainUpgrade];
async function main() {
const ZKSYNC_HOME = process.env.ZKSYNC_HOME;
diff --git a/infrastructure/protocol-upgrade/src/transaction.ts b/infrastructure/protocol-upgrade/src/transaction.ts
index 2735f21c8351..b5e8c73c3267 100644
--- a/infrastructure/protocol-upgrade/src/transaction.ts
+++ b/infrastructure/protocol-upgrade/src/transaction.ts
@@ -14,6 +14,7 @@ import {
getCryptoFileName,
getFacetCutsFileName,
getL2TransactionsFileName,
+ getPostUpgradeCalldataFileName,
getL2UpgradeFileName,
VerifierParams
} from './utils';
@@ -249,7 +250,8 @@ export function buildDefaultUpgradeTx(
upgradeTimestamp,
newAllowList,
zksyncAddress,
- useNewGovernance
+ useNewGovernance,
+ postUpgradeCalldataFlag
) {
const commonData = JSON.parse(fs.readFileSync(getCommonDataFileName(), { encoding: 'utf-8' }));
const protocolVersion = commonData.protocolVersion;
@@ -301,11 +303,22 @@ export function buildDefaultUpgradeTx(
}
}
+ let postUpgradeCalldata = '0x';
+ let postUpgradeCalldataFileName = getPostUpgradeCalldataFileName(environment);
+ if (postUpgradeCalldataFlag) {
+ if (fs.existsSync(postUpgradeCalldataFileName)) {
+ console.log(`Found facet cuts file ${postUpgradeCalldataFileName}`);
+ postUpgradeCalldata = JSON.parse(fs.readFileSync(postUpgradeCalldataFileName).toString());
+ } else {
+ throw new Error(`Post upgrade calldata file ${postUpgradeCalldataFileName} not found`);
+ }
+ }
+
let proposeUpgradeTx = buildProposeUpgrade(
ethers.BigNumber.from(upgradeTimestamp),
protocolVersion,
'0x',
- '0x',
+ postUpgradeCalldata,
cryptoVerifierParams,
bootloaderHash,
defaultAAHash,
@@ -371,7 +384,7 @@ async function sendTransaction(
console.log('Transaction is executed');
}
-function getWallet(l1rpc, privateKey) {
+export function getWallet(l1rpc, privateKey) {
if (!l1rpc) {
l1rpc = web3Url();
}
@@ -522,6 +535,7 @@ command
.option('--l1rpc ')
.option('--zksync-address ')
.option('--use-new-governance')
+ .option('--post-upgrade-calldata')
.action(async (options) => {
if (!options.useNewGovernance) {
// TODO(X): remove old governance functionality from the protocol upgrade tool
@@ -541,7 +555,8 @@ command
options.upgradeTimestamp,
options.newAllowList,
options.zksyncAddress,
- options.useNewGovernance
+ options.useNewGovernance,
+ options.postUpgradeCalldata
);
});
diff --git a/infrastructure/protocol-upgrade/src/utils.ts b/infrastructure/protocol-upgrade/src/utils.ts
index 02a649083255..a81ec7895861 100644
--- a/infrastructure/protocol-upgrade/src/utils.ts
+++ b/infrastructure/protocol-upgrade/src/utils.ts
@@ -31,6 +31,10 @@ export function getL2TransactionsFileName(environment): string {
return getUpgradePath(environment) + '/transactions.json';
}
+export function getPostUpgradeCalldataFileName(environment): string {
+ return getUpgradePath(environment) + '/postUpgradeCalldata.json';
+}
+
export function getNameOfTheLastUpgrade(): string {
return fs.readdirSync(DEFAULT_UPGRADE_PATH).sort().reverse()[0];
}
@@ -46,7 +50,7 @@ export function getCommonUpgradePath(): string {
export function getUpgradePath(environment: string): string {
const upgradeEnvironment = environment ?? 'localhost';
- const path = `${getCommonUpgradePath()}/${upgradeEnvironment}`;
+ const path = `${getCommonUpgradePath()}${upgradeEnvironment}`;
if (!fs.existsSync(path)) {
fs.mkdirSync(path, { recursive: true });
}
diff --git a/infrastructure/zk/src/clean.ts b/infrastructure/zk/src/clean.ts
index 96c68d5908be..09ba61ab12f7 100644
--- a/infrastructure/zk/src/clean.ts
+++ b/infrastructure/zk/src/clean.ts
@@ -2,6 +2,7 @@ import { Command } from 'commander';
import * as fs from 'fs';
import * as path from 'path';
import { confirmAction } from './utils';
+import * as down from './down';
export function clean(path: string) {
if (fs.existsSync(path)) {
@@ -12,22 +13,28 @@ export function clean(path: string) {
export const command = new Command('clean')
.option('--config [environment]')
+ .option('--l1-config')
.option('--database')
.option('--contracts')
.option('--artifacts')
.option('--all')
.description('removes generated files')
.action(async (cmd) => {
- if (!cmd.contracts && !cmd.config && !cmd.database && !cmd.backups && !cmd.artifacts) {
+ if (!cmd.contracts && !cmd.config && !cmd.database && !cmd.backups && !cmd.artifacts && !cmd.l1Config) {
cmd.all = true; // default is all
}
await confirmAction();
if (cmd.all || cmd.config) {
- const env = process.env.ZKSYNC_ENV;
- clean(`etc/env/${env}.env`);
- clean('etc/env/.init.env');
- clean('etc/env/.current');
+ const envName = process.env.ZKSYNC_ENV;
+ clean(`etc/env/target/${envName}.env`);
+ clean(`etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`);
+ clean(`etc/env/l2-inits/${envName}.init.env`);
+ }
+
+ // note we don't clean this with all, as this will usually not be generated by the user
+ if (cmd.l1Config) {
+ clean(`etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`);
}
if (cmd.all || cmd.artifacts) {
@@ -51,5 +58,18 @@ export const command = new Command('clean')
clean('contracts/l2-contracts/artifacts-zk');
clean('contracts/l2-contracts/cache-zk');
clean('contracts/l2-contracts/typechain');
+ clean('contracts/system-contracts/artifacts-zk');
+ clean('contracts/system-contracts/cache-zk');
+ clean('contracts/system-contracts/typechain');
+ clean('contracts/system-contracts/bootloader/build');
+ clean('contracts/system-contracts/bootloader/tests/artifacts');
+ clean('contracts/system-contracts/contracts/artifacts');
+ clean('contracts/system-contracts/contracts/precompiles/artifacts');
+ }
+
+ if (cmd.all) {
+ await down.down();
+ clean('volumes');
+ clean('contracts/ethereum/.openzeppelin');
}
});
diff --git a/infrastructure/zk/src/config.ts b/infrastructure/zk/src/config.ts
index 0496f1e46d35..49bb2cd7cd33 100644
--- a/infrastructure/zk/src/config.ts
+++ b/infrastructure/zk/src/config.ts
@@ -2,15 +2,63 @@ import { Command } from 'commander';
import * as toml from '@iarna/toml';
import * as fs from 'fs';
import deepExtend from 'deep-extend';
+import * as env from './env';
+import path from 'path';
+import dotenv from 'dotenv';
-function loadConfigFile(path: string) {
- const fileContents = fs.readFileSync(path);
- try {
- return toml.parse(fileContents.toString());
- } catch (e: any) {
- console.error(`${path} load failed: Parsing error on line ${e.line} column ${e.column}: ${e.message}`);
+function loadConfigFile(configPath: string, stack: string[] = []) {
+ if (stack.includes(configPath)) {
+ console.error(`Cyclic import detected: ${stack.join(' -> ')} -> ${configPath}`);
process.exit(1);
}
+ stack.push(configPath);
+ let absolutePath = path.join('etc/env', configPath);
+ if (!fs.existsSync(absolutePath)) {
+ console.error(`File ${configPath} not found`);
+ process.exit(1);
+ }
+ const fileContents = fs.readFileSync(absolutePath);
+ let config: any;
+ if (configPath.endsWith('.env')) {
+ config = dotenv.parse(fileContents.toString());
+ } else
+ try {
+ config = toml.parse(fileContents.toString());
+ } catch (e: any) {
+ console.error(
+ `${configPath} load failed: Parsing error on line ${e.line} column ${e.column}: ${e.message}`
+ );
+ process.exit(1);
+ }
+
+ if (Array.isArray(config['__imports__'])) {
+ const imports: any[] = config['__imports__'].map((importPath) => {
+ if (fs.existsSync(path.join('etc/env', importPath))) {
+ return fs.lstatSync(path.join('etc/env', importPath)).isDirectory()
+ ? loadConfigFolder(importPath as string, stack)
+ : loadConfigFile(importPath as string, stack);
+ } else {
+ return {};
+ }
+ });
+ delete config['__imports__'];
+ stack.pop();
+ // Order is important
+ return deepExtend({}, ...imports, config);
+ } else {
+ stack.pop();
+ return deepExtend({}, config);
+ }
+}
+
+function loadConfigFolder(dirPath: string, stack: string[] = []) {
+ stack.push(dirPath);
+ const configs = fs
+ .readdirSync(path.join('etc/env', dirPath))
+ .filter((file) => file.endsWith('.env') || file.endsWith('.toml'))
+ .map((file) => loadConfigFile(`${dirPath}/${file}`, stack));
+ stack.pop();
+ return deepExtend({}, ...configs);
}
export function collectVariables(config: any, prefix: string = ''): Map {
@@ -49,47 +97,11 @@ export function collectVariables(config: any, prefix: string = ''): Map {
+ compileConfig(environment);
+
+ diff = diff ? diff : '0';
+ pushConfig(environment, diff);
+ });
diff --git a/infrastructure/zk/src/contract.ts b/infrastructure/zk/src/contract.ts
index 1669feb1633b..15dfd4cb86fd 100644
--- a/infrastructure/zk/src/contract.ts
+++ b/infrastructure/zk/src/contract.ts
@@ -3,12 +3,12 @@ import * as utils from './utils';
import * as env from './env';
import fs from 'fs';
-export async function build() {
+export async function build(): Promise {
await utils.spawn('yarn l1-contracts build');
await utils.spawn('yarn l2-contracts build');
}
-export async function verifyL1Contracts() {
+export async function verifyL1Contracts(): Promise {
// Spawning a new script is expensive, so if we know that publishing is disabled, it's better to not launch
// it at all (even though `verify` checks the network as well).
if (process.env.CHAIN_ETH_NETWORK == 'localhost') {
@@ -18,39 +18,36 @@ export async function verifyL1Contracts() {
await utils.spawn('yarn l1-contracts verify');
}
-function updateContractsEnv(deployLog: String, envVars: Array) {
+export function updateContractsEnv(initEnv: string, deployLog: String, envVars: Array): string {
let updatedContracts = '';
for (const envVar of envVars) {
const pattern = new RegExp(`${envVar}=.*`, 'g');
const matches = deployLog.match(pattern);
if (matches !== null) {
const varContents = matches[0];
- env.modify(envVar, varContents);
+ env.modify(envVar, varContents, initEnv, false);
updatedContracts += `${varContents}\n`;
}
}
-
+ env.reload();
return updatedContracts;
}
-export async function initializeValidator(args: any[] = []) {
+export async function initializeValidator(args: any[]): Promise {
await utils.confirmAction();
await utils.spawn(`yarn l1-contracts initialize-validator ${args.join(' ')} | tee initializeValidator.log`);
}
-export async function initializeGovernance(args: any[] = []) {
+export async function initializeGovernance(): Promise {
await utils.confirmAction();
- await utils.spawn(`yarn l1-contracts initialize-governance ${args.join(' ')} | tee initializeGovernance.log`);
-}
-export async function initializeWethToken(args: any[] = []) {
- await utils.confirmAction();
- await utils.spawn(
- `yarn l1-contracts initialize-l2-weth-token instant-call ${args.join(' ')} | tee initializeWeth.log`
- );
+ const privateKey = process.env.GOVERNANCE_PRIVATE_KEY;
+ const args = [privateKey ? `--private-key ${privateKey}` : ''];
+
+ await utils.spawn(`yarn l1-contracts initialize-governance ${args.join(' ')} | tee initializeGovernance.log`);
}
-export async function deployL2(args: any[] = [], includePaymaster?: boolean, includeWETH?: boolean) {
+export async function deployL2(args: any[] = [], includePaymaster?: boolean): Promise {
await utils.confirmAction();
const isLocalSetup = process.env.ZKSYNC_LOCAL_SETUP;
@@ -60,64 +57,138 @@ export async function deployL2(args: any[] = [], includePaymaster?: boolean, inc
await utils.spawn(`yarn l2-contracts build`);
}
- await utils.spawn(`yarn l1-contracts initialize-bridges ${args.join(' ')} | tee deployL2.log`);
+ await utils.spawn(`yarn l2-contracts deploy-shared-bridge-on-l2 ${args.join(' ')} | tee deployL2.log`);
if (includePaymaster) {
await utils.spawn(`yarn l2-contracts deploy-testnet-paymaster ${args.join(' ')} | tee -a deployL2.log`);
}
- if (includeWETH) {
- await utils.spawn(`yarn l2-contracts deploy-l2-weth ${args.join(' ')} | tee -a deployL2.log`);
- }
-
await utils.spawn(`yarn l2-contracts deploy-force-deploy-upgrader ${args.join(' ')} | tee -a deployL2.log`);
- const l2DeployLog = fs.readFileSync('deployL2.log').toString();
+ let l2DeployLog = fs.readFileSync('deployL2.log').toString();
const l2DeploymentEnvVars = [
- 'CONTRACTS_L2_ERC20_BRIDGE_ADDR',
+ 'CONTRACTS_L2_SHARED_BRIDGE_ADDR',
'CONTRACTS_L2_TESTNET_PAYMASTER_ADDR',
'CONTRACTS_L2_WETH_TOKEN_IMPL_ADDR',
'CONTRACTS_L2_WETH_TOKEN_PROXY_ADDR',
'CONTRACTS_L2_DEFAULT_UPGRADE_ADDR'
];
- updateContractsEnv(l2DeployLog, l2DeploymentEnvVars);
+ updateContractsEnv(`etc/env/l2-inits/${process.env.ZKSYNC_ENV!}.init.env`, l2DeployLog, l2DeploymentEnvVars);
+}
+
+// for testnet and development purposes it is ok to deploy contracts form L1.
+export async function deployL2ThroughL1({
+ includePaymaster,
+ localLegacyBridgeTesting
+}: {
+ includePaymaster: boolean;
+ localLegacyBridgeTesting?: boolean;
+}): Promise {
+ await utils.confirmAction();
+
+ const privateKey = process.env.DEPLOYER_PRIVATE_KEY;
+ const args = [privateKey ? `--private-key ${privateKey}` : ''];
+
+ const isLocalSetup = process.env.ZKSYNC_LOCAL_SETUP;
+
+ // Skip compilation for local setup, since we already copied artifacts into the container.
+ if (!isLocalSetup) {
+ await utils.spawn(`yarn l2-contracts build`);
+ }
+
+ await utils.spawn(
+ `yarn l2-contracts deploy-shared-bridge-on-l2-through-l1 ${args.join(' ')} ${
+ localLegacyBridgeTesting ? '--local-legacy-bridge-testing' : ''
+ } | tee deployL2.log`
+ );
- if (includeWETH) {
- await utils.spawn(`yarn l1-contracts initialize-weth-bridges ${args.join(' ')} | tee -a deployL1.log`);
+ if (includePaymaster) {
+ await utils.spawn(
+ `yarn l2-contracts deploy-testnet-paymaster-through-l1 ${args.join(' ')} | tee -a deployL2.log`
+ );
}
- const l1DeployLog = fs.readFileSync('deployL1.log').toString();
- const l1DeploymentEnvVars = ['CONTRACTS_L2_WETH_BRIDGE_ADDR'];
- updateContractsEnv(l1DeployLog, l1DeploymentEnvVars);
+ await utils.spawn(
+ `yarn l2-contracts deploy-force-deploy-upgrader-through-l1 ${args.join(' ')} | tee -a deployL2.log`
+ );
+
+ let l2DeployLog = fs.readFileSync('deployL2.log').toString();
+ const l2DeploymentEnvVars = [
+ 'CONTRACTS_L2_SHARED_BRIDGE_ADDR',
+ 'CONTRACTS_L2_ERC20_BRIDGE_ADDR',
+ 'CONTRACTS_L2_TESTNET_PAYMASTER_ADDR',
+ 'CONTRACTS_L2_WETH_TOKEN_IMPL_ADDR',
+ 'CONTRACTS_L2_WETH_TOKEN_PROXY_ADDR',
+ 'CONTRACTS_L2_DEFAULT_UPGRADE_ADDR'
+ ];
+ updateContractsEnv(`etc/env/l2-inits/${process.env.ZKSYNC_ENV!}.init.env`, l2DeployLog, l2DeploymentEnvVars);
+ // erc20 bridge is now deployed as shared bridge, but we still need the config var:
+ updateContractsEnv(
+ `etc/env/l2-inits/${process.env.ZKSYNC_ENV!}.init.env`,
+ `CONTRACTS_L2_ERC20_BRIDGE_ADDR=${process.env.CONTRACTS_L2_SHARED_BRIDGE_ADDR}`,
+ l2DeploymentEnvVars
+ );
}
-export async function deployL1(args: any[]) {
+async function _deployL1(onlyVerifier: boolean, deploymentMode: DeploymentMode): Promise {
await utils.confirmAction();
+
+ const privateKey = process.env.DEPLOYER_PRIVATE_KEY;
+ const args = [
+ privateKey ? `--private-key ${privateKey}` : '',
+ onlyVerifier ? '--only-verifier' : '',
+ deploymentMode == DeploymentMode.Validium ? '--validium' : ''
+ ];
+
+ // In the localhost setup scenario we don't have the workspace,
+ // so we have to `--cwd` into the required directory.
+
await utils.spawn(`yarn l1-contracts deploy-no-build ${args.join(' ')} | tee deployL1.log`);
const deployLog = fs.readFileSync('deployL1.log').toString();
- const envVars = [
+ const l1EnvVars = [
'CONTRACTS_CREATE2_FACTORY_ADDR',
- 'CONTRACTS_ADMIN_FACET_ADDR',
+
+ 'CONTRACTS_BRIDGEHUB_PROXY_ADDR',
+ 'CONTRACTS_BRIDGEHUB_IMPL_ADDR',
+
+ 'CONTRACTS_STATE_TRANSITION_PROXY_ADDR',
+ 'CONTRACTS_STATE_TRANSITION_IMPL_ADDR',
+
'CONTRACTS_DIAMOND_UPGRADE_INIT_ADDR',
+ 'CONTRACTS_DIAMOND_INIT_ADDR',
'CONTRACTS_DEFAULT_UPGRADE_ADDR',
+ 'CONTRACTS_GENESIS_UPGRADE_ADDR',
'CONTRACTS_GOVERNANCE_ADDR',
- 'CONTRACTS_MAILBOX_FACET_ADDR',
+ 'CONTRACTS_ADMIN_FACET_ADDR',
'CONTRACTS_EXECUTOR_FACET_ADDR',
'CONTRACTS_GETTERS_FACET_ADDR',
+ 'CONTRACTS_MAILBOX_FACET_ADDR',
+
'CONTRACTS_VERIFIER_ADDR',
- 'CONTRACTS_DIAMOND_INIT_ADDR',
- 'CONTRACTS_DIAMOND_PROXY_ADDR',
'CONTRACTS_VALIDATOR_TIMELOCK_ADDR',
+
'CONTRACTS_GENESIS_TX_HASH',
+ 'CONTRACTS_TRANSPARENT_PROXY_ADMIN_ADDR',
+ 'CONTRACTS_L1_SHARED_BRIDGE_PROXY_ADDR',
+ 'CONTRACTS_L1_SHARED_BRIDGE_IMPL_ADDR',
'CONTRACTS_L1_ERC20_BRIDGE_PROXY_ADDR',
'CONTRACTS_L1_ERC20_BRIDGE_IMPL_ADDR',
'CONTRACTS_L1_WETH_BRIDGE_IMPL_ADDR',
'CONTRACTS_L1_WETH_BRIDGE_PROXY_ADDR',
'CONTRACTS_L1_ALLOW_LIST_ADDR',
'CONTRACTS_L1_MULTICALL3_ADDR',
- 'CONTRACTS_BLOB_VERSIONED_HASH_RETRIEVER_ADDR'
+ 'CONTRACTS_BLOB_VERSIONED_HASH_RETRIEVER_ADDR',
+
+ /// temporary:
+ 'CONTRACTS_HYPERCHAIN_UPGRADE_ADDR'
];
- const updatedContracts = updateContractsEnv(deployLog, envVars);
+
+ console.log('Writing to', `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`);
+ const updatedContracts = updateContractsEnv(
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`,
+ deployLog,
+ l1EnvVars
+ );
// Write updated contract addresses and tx hashes to the separate file
// Currently it's used by loadtest github action to update deployment configmap.
@@ -129,25 +200,87 @@ export enum DeploymentMode {
Validium = 1
}
-export async function redeployL1(args: any[], deploymentMode: DeploymentMode) {
- if (deploymentMode == DeploymentMode.Validium) {
- await deployL1([...args, '--validium-mode']);
- } else if (deploymentMode == DeploymentMode.Rollup) {
- await deployL1(args);
- } else {
- throw new Error('Invalid deployment mode');
- }
+export async function redeployL1(verifierOnly: boolean, deploymentMode: DeploymentMode) {
+ await _deployL1(verifierOnly, deploymentMode);
await verifyL1Contracts();
}
-export async function deployVerifier(args: any[], deploymentMode: DeploymentMode) {
- if (deploymentMode == DeploymentMode.Validium) {
- await deployL1([...args, '--only-verifier', '--validium-mode']);
- } else if (deploymentMode == DeploymentMode.Rollup) {
- await deployL1([...args, '--only-verifier']);
+export async function wethBridgeFinish(args: any[] = []): Promise {
+ await utils.confirmAction();
+ await utils.spawn(`yarn l1-contracts weth-finish-deployment-on-chain ${args.join(' ')} | tee -a deployL2.log`);
+}
+
+export async function erc20BridgeFinish(args: any[] = []): Promise {
+ await utils.confirmAction();
+ await utils.spawn(`yarn l1-contracts erc20-finish-deployment-on-chain ${args.join(' ')} | tee -a deployL2.log`);
+}
+
+export async function registerHyperchain({ baseTokenName }: { baseTokenName?: string }): Promise {
+ await utils.confirmAction();
+
+ const privateKey = process.env.GOVERNOR_PRIVATE_KEY;
+ const args = [
+ privateKey ? `--private-key ${privateKey}` : '',
+ baseTokenName ? `--base-token-name ${baseTokenName}` : ''
+ ];
+
+ await utils.spawn(`yarn l1-contracts register-hyperchain ${args.join(' ')} | tee registerHyperchain.log`);
+ const deployLog = fs.readFileSync('registerHyperchain.log').toString();
+
+ const l2EnvVars = ['CHAIN_ETH_ZKSYNC_NETWORK_ID', 'CONTRACTS_DIAMOND_PROXY_ADDR', 'CONTRACTS_BASE_TOKEN_ADDR'];
+ console.log('Writing to', `etc/env/l2-inits/${process.env.ZKSYNC_ENV!}.init.env`);
+
+ const updatedContracts = updateContractsEnv(
+ `etc/env/l2-inits/${process.env.ZKSYNC_ENV!}.init.env`,
+ deployLog,
+ l2EnvVars
+ );
+
+ // Write updated contract addresses and tx hashes to the separate file
+ // Currently it's used by loadtest github action to update deployment configmap.
+ fs.writeFileSync('register_hyperchain.log', updatedContracts);
+}
+
+export async function deployVerifier(): Promise {
+ // Deploy mode doesn't matter here
+ await _deployL1(true, DeploymentMode.Rollup);
+}
+
+export async function deployL1(args: [string]): Promise {
+ let mode;
+ if (args.includes('validium')) {
+ mode = DeploymentMode.Validium;
} else {
- throw new Error('Invalid deployment mode');
+ mode = DeploymentMode.Rollup;
}
+ await _deployL1(false, mode);
+}
+
+async function setupLegacyBridgeEra(): Promise {
+ await utils.confirmAction();
+ if (process.env.CHAIN_ETH_ZKSYNC_NETWORK_ID != process.env.CONTRACTS_ERA_CHAIN_ID) {
+ throw new Error('Era chain and l2 chain id do not match');
+ }
+ process.env.CONTRACTS_ERA_DIAMOND_PROXY_ADDR = process.env.CONTRACTS_DIAMOND_PROXY_ADDR;
+
+ const privateKey = process.env.DEPLOYER_PRIVATE_KEY;
+ const args = [privateKey ? `--private-key ${privateKey}` : ''];
+
+ await utils.spawn(`yarn l1-contracts setup-legacy-bridge-era ${args.join(' ')} | tee setupLegacyBridgeEra.log`);
+
+ const deployLog = fs.readFileSync('setupLegacyBridgeEra.log').toString();
+ const l1EnvVars = ['CONTRACTS_L1_SHARED_BRIDGE_IMPL_ADDR'];
+
+ console.log('Writing to', `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`);
+ const updatedContracts = updateContractsEnv(
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`,
+ deployLog,
+ l1EnvVars
+ );
+
+ // Write updated contract addresses and tx hashes to the separate file
+ // Currently it's used by loadtest github action to update deployment configmap.
+ fs.writeFileSync('upgraded_shared_bridge.log', updatedContracts);
}
export const command = new Command('contract').description('contract management');
@@ -159,12 +292,17 @@ command
.action(redeployL1);
command.command('deploy [deploy-opts...]').allowUnknownOption(true).description('deploy contracts').action(deployL1);
command.command('build').description('build contracts').action(build);
+
+command.command('verify').description('verify L1 contracts').action(verifyL1Contracts);
+command
+ .command('setup-legacy-bridge-era')
+ .description('upgrade shared bridge with deployed era diamond proxy address')
+ .action(setupLegacyBridgeEra);
command
.command('initialize-validator [init-opts...]')
.allowUnknownOption(true)
.description('initialize validator')
.action(initializeValidator);
-command.command('verify').description('verify L1 contracts').action(verifyL1Contracts);
command
.command('deploy-l2 [deploy-opts...]')
.allowUnknownOption(true)
@@ -175,3 +313,16 @@ command
.allowUnknownOption(true)
.description('initialize governance')
.action(initializeGovernance);
+command
+ .command('register-hyperchain')
+ .description('register hyperchain')
+ .action(() => {
+ registerHyperchain({});
+ });
+command
+ .command('deploy-l2-through-l1')
+ .description('deploy l2 through l1')
+ .action(() => {
+ deployL2ThroughL1({ includePaymaster: true });
+ });
+command.command('deploy-verifier').description('deploy verifier to l1').action(deployVerifier);
diff --git a/infrastructure/zk/src/database.ts b/infrastructure/zk/src/database.ts
index c29ca6d87f18..8a1e43af40d6 100644
--- a/infrastructure/zk/src/database.ts
+++ b/infrastructure/zk/src/database.ts
@@ -8,7 +8,7 @@ export async function reset(opts: DbOpts) {
await setup(opts);
}
-enum DalPath {
+export enum DalPath {
CoreDal = 'core/lib/dal',
ProverDal = 'prover/prover_dal'
}
diff --git a/infrastructure/zk/src/env.ts b/infrastructure/zk/src/env.ts
index de9835ee8551..3fecf466f12a 100644
--- a/infrastructure/zk/src/env.ts
+++ b/infrastructure/zk/src/env.ts
@@ -7,13 +7,14 @@ import * as config from './config';
export const getAvailableEnvsFromFiles = () => {
const envs = new Set();
- fs.readdirSync(`etc/env`).forEach((file) => {
+ [...fs.readdirSync('etc/env/target'), ...fs.readdirSync('etc/env/configs')].forEach((file) => {
if (!file.startsWith('.') && (file.endsWith('.env') || file.endsWith('.toml'))) {
envs.add(file.replace(/\..*$/, ''));
}
});
return envs;
};
+
export function get(print: boolean = false) {
const current = `etc/env/.current`;
const inCurrent = fs.existsSync(current) && fs.readFileSync(current).toString().trim();
@@ -45,69 +46,46 @@ export async function gitHooks() {
}
}
-export function set(env: string, print: boolean = false) {
- if (!fs.existsSync(`etc/env/${env}.env`) && !fs.existsSync(`etc/env/${env}.toml`)) {
+export function set(environment: string, print: boolean = false) {
+ if (!fs.existsSync(`etc/env/target/${environment}.env`) && !fs.existsSync(`etc/env/configs/${environment}.toml`)) {
console.error(
- `Unknown environment: ${env}.\nCreate an environment file etc/env/${env}.env or etc/env/${env}.toml`
+ `Unknown environment: ${environment}.\nCreate an environment file etc/env/target/${environment}.env or etc/env/configs/${environment}.toml`
);
process.exit(1);
}
- fs.writeFileSync('etc/env/.current', env);
- process.env.ZKSYNC_ENV = env;
- const envFile = (process.env.ENV_FILE = `etc/env/${env}.env`);
+ fs.writeFileSync('etc/env/.current', environment);
+ process.env.ZKSYNC_ENV = environment;
+ const envFile = (process.env.ENV_FILE = `etc/env/target/${environment}.env`);
if (!fs.existsSync(envFile)) {
// No .env file found - we should compile it!
- config.compileConfig(env);
+ config.compileConfig(environment);
}
reload();
get(print);
}
-// override env with variables from init log
-function loadInit(zksyncEnv: string) {
- if (fs.existsSync('etc/env/.init.env')) {
- const initEnv = dotenv.parse(fs.readFileSync('etc/env/.init.env'));
- for (const envVar in initEnv) {
- process.env[envVar] = initEnv[envVar];
- if (zksyncEnv.startsWith('ext-node')) {
- // We want to name env vars used by external nodes idiomatically, hence the added `EN_` prefix.
- // The original names are still used in some integration tests, so we expose the original var as well.
- process.env[`EN_${envVar}`] = initEnv[envVar];
- }
- }
- }
-}
-
-// Unset env variables loaded from `.init.env` file
-export function unloadInit() {
- if (fs.existsSync('etc/env/.init.env')) {
- const initEnv = dotenv.parse(fs.readFileSync('etc/env/.init.env'));
- for (const envVar in initEnv) {
- delete process.env[envVar];
- }
- }
-}
-
// we have to manually override the environment
// because dotenv won't override variables that are already set
-export function reload() {
- const env = dotenv.parse(fs.readFileSync(process.env.ENV_FILE!));
+export function reload(environment?: string) {
+ environment = environment ?? get();
+ config.compileConfig();
+ const envFile = (process.env.ENV_FILE = `etc/env/target/${environment}.env`);
+ const env = dotenv.parse(fs.readFileSync(envFile));
for (const envVar in env) {
process.env[envVar] = env[envVar];
}
- loadInit(get());
}
// loads environment variables
export function load() {
- const zksyncEnv = get();
- const envFile = (process.env.ENV_FILE = `etc/env/${zksyncEnv}.env`);
+ fs.mkdirSync('etc/env/target', { recursive: true });
+ const environment = get();
+ const envFile = (process.env.ENV_FILE = `etc/env/target/${environment}.env`);
if (!fs.existsSync(envFile)) {
// No .env file found - we should compile it!
config.compileConfig();
}
dotenv.config({ path: envFile });
- loadInit(zksyncEnv);
// This suppresses the warning that looks like: "Warning: Accessing non-existent property 'INVALID_ALT_NUMBER'...".
// This warning is spawned from the `antlr4`, which is a dep of old `solidity-parser` library.
@@ -116,8 +94,10 @@ export function load() {
}
// places the environment logged by `zk init` variables into the .init.env file
-export function modify(variable: string, assignedVariable: string) {
- const initEnv = 'etc/env/.init.env';
+export function modify(variable: string, value: string, initEnv: string, withReload = true) {
+ const assignedVariable = value.startsWith(`${variable}=`) ? value : `${variable}=${value}`;
+ fs.mkdirSync('etc/env/l2-inits', { recursive: true });
+ fs.mkdirSync('etc/env/l1-inits', { recursive: true });
if (!fs.existsSync(initEnv)) {
fs.writeFileSync(initEnv, assignedVariable);
return;
@@ -125,13 +105,15 @@ export function modify(variable: string, assignedVariable: string) {
let source = fs.readFileSync(initEnv).toString();
if (source.includes(variable)) {
- utils.replaceInFile(initEnv, `${variable}=.*`, assignedVariable.trim());
+ utils.replaceInFile(initEnv, `${variable}.*`, assignedVariable.trim());
} else {
source += `\n${assignedVariable}`;
fs.writeFileSync(initEnv, source);
}
- reload();
+ if (withReload) {
+ reload();
+ }
}
export function removeFromInit(variable: string) {
@@ -146,26 +128,22 @@ export function removeFromInit(variable: string) {
// merges .init.env with current env file so all configs are in the same place
export function mergeInitToEnv() {
- const env = dotenv.parse(fs.readFileSync(process.env.ENV_FILE!));
- const initEnv = dotenv.parse(fs.readFileSync('etc/env/.init.env'));
+ const environment = process.env.ZKSYNC_ENV!;
+ const env = dotenv.parse(fs.readFileSync(`etc/env/target/${environment}.env`));
+ const initEnv = dotenv.parse(fs.readFileSync(`etc/env/l2-inits/${environment}.init.env`));
for (const initVar in initEnv) {
env[initVar] = initEnv[initVar];
}
let output = '';
for (const envVar in env) {
- let envVal = env[envVar];
- // wrap the value into double quotes if it has spaces in it
- if (envVal.indexOf(' ') >= 0) {
- envVal = '"' + envVal + '"';
- }
- output += `${envVar}=${envVal}\n`;
+ output += `${envVar}=${env[envVar]}\n`;
}
- fs.writeFileSync(process.env.ENV_FILE!, output);
+ fs.writeFileSync(`etc/env/target/${environment}.env`, output);
}
export const command = new Command('env')
.arguments('[env_name]')
.description('get or set zksync environment')
- .action((envName?: string) => {
- envName ? set(envName, true) : get(true);
+ .action((environment?: string) => {
+ environment ? set(environment, true) : get(true);
});
diff --git a/infrastructure/zk/src/fmt.ts b/infrastructure/zk/src/fmt.ts
index 30a04271c1d4..f8e040ab11a1 100644
--- a/infrastructure/zk/src/fmt.ts
+++ b/infrastructure/zk/src/fmt.ts
@@ -2,7 +2,7 @@ import { Command } from 'commander';
import { formatSqlxQueries } from './format_sql';
import * as utils from './utils';
-const EXTENSIONS = ['ts', 'md', 'sol', 'js'];
+const EXTENSIONS = ['ts', 'md', 'js'];
const CONFIG_PATH = 'etc/prettier-config';
function prettierFlags(phaseName: string) {
@@ -16,6 +16,7 @@ export async function prettier(extension: string, check: boolean = false) {
const command = check ? 'check' : 'write';
const files = await utils.getUnignoredFiles(extension);
+ console.log(`Got ${files.length} files for ${extension}`);
if (files.length === 0) {
console.log(`No files of extension ${extension} to format`);
diff --git a/infrastructure/zk/src/hyperchain_wizard.ts b/infrastructure/zk/src/hyperchain_wizard.ts
index 608ebb00fffe..df78314b9776 100644
--- a/infrastructure/zk/src/hyperchain_wizard.ts
+++ b/infrastructure/zk/src/hyperchain_wizard.ts
@@ -2,18 +2,18 @@ import { Command } from 'commander';
import enquirer from 'enquirer';
import { BigNumber, ethers, utils } from 'ethers';
import chalk from 'chalk';
-import { announced, init, InitArgs } from './init';
+import { compileConfig, pushConfig } from './config';
+import * as init from './init';
import * as server from './server';
import * as docker from './docker';
import * as db from './database';
import * as env from './env';
-import { compileConfig } from './config';
import * as fs from 'fs';
import fetch from 'node-fetch';
import { up } from './up';
import * as Handlebars from 'handlebars';
import { ProverType, setupProver } from './prover_setup';
-import { DeploymentMode } from './contract';
+import { announced } from './utils';
const title = chalk.blueBright;
const warning = chalk.yellowBright;
@@ -45,34 +45,11 @@ export interface BasePromptOptions {
}
// An init command that allows configuring and spinning up a new hyperchain network.
-async function initHyperchain(runObservability: boolean, deploymentMode: DeploymentMode) {
- await announced('Initializing hyperchain creation', setupConfiguration(runObservability));
-
- const deployerPrivateKey = process.env.DEPLOYER_PRIVATE_KEY;
- const governorPrivateKey = process.env.GOVERNOR_PRIVATE_KEY;
- const deployL2Weth = Boolean(process.env.DEPLOY_L2_WETH || false);
- const deployTestTokens = Boolean(process.env.DEPLOY_TEST_TOKENS || false);
- const governorAdrress = ethers.utils.computeAddress(governorPrivateKey!);
- const initArgs: InitArgs = {
- skipSubmodulesCheckout: false,
- skipEnvSetup: true,
- runObservability: runObservability,
- governorPrivateKeyArgs: ['--private-key', governorPrivateKey],
- deployerL2ContractInput: {
- args: ['--private-key', deployerPrivateKey],
- includePaymaster: false,
- includeL2WETH: deployL2Weth
- },
- testTokens: {
- deploy: deployTestTokens,
- args: ['--private-key', deployerPrivateKey, '--envFile', process.env.CHAIN_ETH_NETWORK!]
- },
- deployerPrivateKeyArgs: ['--private-key', deployerPrivateKey, '--owner-address', governorAdrress],
- deploymentMode
- };
-
- await init(initArgs);
+async function initHyperchain(envName: string, runObservability: boolean, validiumMode: boolean) {
+ await announced('Initializing hyperchain creation', setupConfiguration(envName, runObservability));
+ await init.initHyperCmdAction({ skipSetupCompletely: false, bumpChainId: true, runObservability, validiumMode });
+ // TODO: EVM:577 fix hyperchain wizard
env.mergeInitToEnv();
console.log(announce(`\nYour hyperchain configuration is available at ${process.env.ENV_FILE}\n`));
@@ -82,26 +59,30 @@ async function initHyperchain(runObservability: boolean, deploymentMode: Deploym
await announced('Start server', startServer());
}
-async function setupConfiguration(runObservability: boolean) {
- const CONFIGURE = 'Configure new chain';
- const USE_EXISTING = 'Use existing configuration';
- const questions: BasePromptOptions[] = [
- {
- message: 'Do you want to configure a new chain or use an existing configuration?',
- name: 'config',
- type: 'select',
- choices: [CONFIGURE, USE_EXISTING]
- }
- ];
+async function setupConfiguration(envName: string, runObservability: boolean) {
+ if (!envName) {
+ const CONFIGURE = 'Configure new chain';
+ const USE_EXISTING = 'Use existing configuration';
+ const questions: BasePromptOptions[] = [
+ {
+ message: 'Do you want to configure a new chain or use an existing configuration?',
+ name: 'config',
+ type: 'select',
+ choices: [CONFIGURE, USE_EXISTING]
+ }
+ ];
- const results: any = await enquirer.prompt(questions);
+ const results: any = await enquirer.prompt(questions);
- if (results.config === CONFIGURE) {
- await announced('Setting hyperchain configuration', setHyperchainMetadata(runObservability));
- await announced('Validating information and balances to deploy hyperchain', checkReadinessToDeploy());
- } else {
- const envName = await selectHyperchainConfiguration();
+ if (results.config === CONFIGURE) {
+ await announced('Setting hyperchain configuration', setHyperchainMetadata(runObservability));
+ await announced('Validating information and balances to deploy hyperchain', checkReadinessToDeploy());
+ } else {
+ const envName = await selectHyperchainConfiguration();
+ env.set(envName);
+ }
+ } else {
env.set(envName);
}
}
@@ -140,6 +121,7 @@ async function setHyperchainMetadata(runObservability: boolean) {
];
const results: any = await enquirer.prompt(questions);
+ // TODO(EVM-574): add random chainId generation here if user does not want to pick chainId.
let deployer, governor, ethOperator, feeReceiver: ethers.Wallet | undefined;
let feeReceiverAddress, l1Rpc, l1Id, databaseUrl, databaseProverUrl;
@@ -274,10 +256,18 @@ async function setHyperchainMetadata(runObservability: boolean) {
} else {
l1Rpc = 'http://127.0.0.1:8545';
l1Id = 9;
- databaseUrl = 'postgres://postgres:notsecurepassword@127.0.0.1:5432/zksync_local';
- wrapEnvModify('DATABASE_URL', databaseUrl);
+ databaseUrl = 'postgres://postgres:notsecurepassword@localhost:5432/zksync_local';
+ env.modify(
+ 'DATABASE_URL',
+ databaseUrl,
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`
+ );
databaseProverUrl = 'postgres://postgres:notsecurepassword@127.0.0.1:5432/prover_local';
- wrapEnvModify('DATABASE_PROVER_URL', databaseProverUrl);
+ env.modify(
+ 'DATABASE_PROVER_URL',
+ databaseProverUrl,
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`
+ );
const richWalletsRaw = await fetch(
'https://raw.githubusercontent.com/matter-labs/local-setup/main/rich-wallets.json'
@@ -295,9 +285,6 @@ async function setHyperchainMetadata(runObservability: boolean) {
await announced('Ensuring databases are up', db.wait({ core: true, prover: false }));
}
- await initializeTestERC20s();
- await initializeWethTokenForHyperchain();
-
console.log('\n');
printAddressInfo('Deployer', deployer.address);
@@ -334,7 +321,11 @@ async function setHyperchainMetadata(runObservability: boolean) {
const etherscanResults: any = await enquirer.prompt(etherscanQuestions);
- wrapEnvModify('MISC_ETHERSCAN_API_KEY', etherscanResults.etherscanKey);
+ env.modify(
+ 'MISC_ETHERSCAN_API_KEY',
+ etherscanResults.etherscanKey,
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`
+ );
}
}
@@ -344,29 +335,38 @@ async function setHyperchainMetadata(runObservability: boolean) {
env.set(environment);
// TODO: Generate url for data-compressor with selected region or fix env variable for keys location
// PLA-595
- wrapEnvModify('DATABASE_URL', databaseUrl);
- wrapEnvModify('DATABASE_PROVER_URL', databaseProverUrl);
- wrapEnvModify('ETH_CLIENT_CHAIN_ID', l1Id.toString());
- wrapEnvModify('ETH_CLIENT_WEB3_URL', l1Rpc);
- wrapEnvModify('CHAIN_ETH_NETWORK', getL1Name(results.l1Chain));
- wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK', results.chainName);
- wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK_ID', results.chainId);
- wrapEnvModify('ETH_SENDER_SENDER_OPERATOR_PRIVATE_KEY', ethOperator.privateKey);
- wrapEnvModify('ETH_SENDER_SENDER_OPERATOR_COMMIT_ETH_ADDR', ethOperator.address);
- wrapEnvModify('DEPLOYER_PRIVATE_KEY', deployer.privateKey);
- wrapEnvModify('GOVERNOR_PRIVATE_KEY', governor.privateKey);
- wrapEnvModify('GOVERNOR_ADDRESS', governor.address);
- wrapEnvModify('CHAIN_STATE_KEEPER_FEE_ACCOUNT_ADDR', feeReceiverAddress);
- wrapEnvModify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'SkipEveryProof');
+ env.modify('DATABASE_URL', databaseUrl, process.env.ENV_FILE!);
+ env.modify('ETH_CLIENT_CHAIN_ID', l1Id.toString(), `etc/env/l1-inits/${results.l1Chain}.init.env`);
+ env.modify(
+ 'ETH_CLIENT_WEB3_URL',
+ l1Rpc,
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`
+ );
+ env.modify(
+ 'CHAIN_ETH_NETWORK',
+ getL1Name(results.l1Chain),
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`
+ );
+ env.modify('CHAIN_ETH_ZKSYNC_NETWORK', results.chainName, process.env.ENV_FILE!);
+ env.modify('CHAIN_ETH_ZKSYNC_NETWORK_ID', results.chainId, process.env.ENV_FILE!);
+ env.modify('ETH_SENDER_SENDER_OPERATOR_PRIVATE_KEY', ethOperator.privateKey, process.env.ENV_FILE!);
+ env.modify('ETH_SENDER_SENDER_OPERATOR_COMMIT_ETH_ADDR', ethOperator.address, process.env.ENV_FILE!);
+ env.modify('DEPLOYER_PRIVATE_KEY', deployer.privateKey, process.env.ENV_FILE!);
+ env.modify('GOVERNOR_PRIVATE_KEY', governor.privateKey, process.env.ENV_FILE!);
+ env.modify('GOVERNOR_ADDRESS', governor.address, process.env.ENV_FILE!);
+ env.modify('CHAIN_STATE_KEEPER_FEE_ACCOUNT_ADDR', feeReceiverAddress, process.env.ENV_FILE!);
+ env.modify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'SkipEveryProof', process.env.ENV_FILE!);
if (feeReceiver) {
- wrapEnvModify('FEE_RECEIVER_PRIVATE_KEY', feeReceiver.privateKey);
+ env.modify('FEE_RECEIVER_PRIVATE_KEY', feeReceiver.privateKey, process.env.ENV_FILE!);
}
- // For now force delay to 20 seconds to ensure batch execution doesn't not happen in same block as batch proving.
- // This bug will be fixed on the smart contract soon.
- wrapEnvModify('CONTRACTS_VALIDATOR_TIMELOCK_EXECUTION_DELAY', '0');
- wrapEnvModify('ETH_SENDER_SENDER_L1_BATCH_MIN_AGE_BEFORE_EXECUTE_SECONDS', '20');
+ // For now force delay to 20 seconds to ensure batch execution doesn't not happen in same block as batch proving
+ // This bug will be fixed on the smart contract soon
+ env.modify('CONTRACTS_VALIDATOR_TIMELOCK_EXECUTION_DELAY', '0', process.env.ENV_FILE!);
+ env.modify('ETH_SENDER_SENDER_L1_BATCH_MIN_AGE_BEFORE_EXECUTE_SECONDS', '20', process.env.ENV_FILE!);
+ const diff = env.getAvailableEnvsFromFiles().size;
+ pushConfig(undefined, diff.toString());
env.load();
}
@@ -390,7 +390,7 @@ async function setupHyperchainProver() {
switch (proverType) {
case ProverTypeOption.NONE:
- wrapEnvModify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'SkipEveryProof');
+ env.modify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'SkipEveryProof', process.env.ENV_FILE!);
env.mergeInitToEnv();
break;
default:
@@ -404,85 +404,6 @@ function printAddressInfo(name: string, address: string) {
console.log('');
}
-async function initializeTestERC20s() {
- // TODO: For now selecting NO breaks server-core deployment, should be always YES or create empty-mock file for v2-core
- // PLA-595
- const questions: BasePromptOptions[] = [
- {
- message:
- 'Do you want to deploy some test ERC20s to your hyperchain? NB: Temporary broken, always select YES',
- name: 'deployERC20s',
- type: 'confirm'
- }
- ];
-
- const results: any = await enquirer.prompt(questions);
-
- if (results.deployERC20s) {
- wrapEnvModify('DEPLOY_TEST_TOKENS', 'true');
- console.log(
- warning(
- `The addresses for the generated test ECR20 tokens will be available at the /etc/tokens/${getEnv(
- process.env.CHAIN_ETH_NETWORK!
- )}.json file.`
- )
- );
- }
-}
-
-async function initializeWethTokenForHyperchain() {
- const questions: BasePromptOptions[] = [
- {
- message: 'Do you want to deploy Wrapped ETH to your hyperchain?',
- name: 'deployWeth',
- type: 'confirm'
- }
- ];
-
- const results: any = await enquirer.prompt(questions);
-
- if (results.deployWeth) {
- wrapEnvModify('DEPLOY_L2_WETH', 'true');
-
- if (!process.env.DEPLOY_TEST_TOKENS) {
- // Only try to fetch this info if no test tokens will be deployed, otherwise WETH address will be defined later.
- const tokens = getTokens(process.env.CHAIN_ETH_NETWORK!);
-
- let baseWethToken = tokens.find((token: { symbol: string }) => token.symbol == 'WETH')?.address;
-
- if (!baseWethToken) {
- const wethQuestions = [
- {
- message: 'What is the address of the Wrapped ETH on the base chain?',
- name: 'l1Weth',
- type: 'input',
- required: true
- }
- ];
-
- const wethResults: any = await enquirer.prompt(wethQuestions);
-
- baseWethToken = wethResults.l1Weth;
-
- if (fs.existsSync(`/etc/tokens/${getEnv(process.env.ZKSYNC_ENV!)}.json`)) {
- tokens.push({
- name: 'Wrapped Ether',
- symbol: 'WETH',
- decimals: 18,
- address: baseWethToken!
- });
- fs.writeFileSync(
- `/etc/tokens/${getEnv(process.env.ZKSYNC_ENV!)}.json`,
- JSON.stringify(tokens, null, 4)
- );
- }
- }
-
- wrapEnvModify('CONTRACTS_L1_WETH_TOKEN_ADDR', baseWethToken!);
- }
- }
-}
-
async function startServer() {
const YES_DEFAULT = 'Yes (default components)';
const YES_CUSTOM = 'Yes (custom components)';
@@ -522,12 +443,7 @@ async function startServer() {
await server.server(false, false, components.join(','));
}
-// The current env.modify requires to write down the variable name twice. This wraps it so the caller only writes the name and the value.
-export function wrapEnvModify(variable: string, assignedVariable: string) {
- env.modify(variable, `${variable}=${assignedVariable}`);
-}
-
-// Make sure all env information is available and wallets are funded.
+// Make sure all env information is available and wallets are funded
async function checkReadinessToDeploy() {
const provider = new ethers.providers.JsonRpcProvider(process.env.ETH_CLIENT_WEB3_URL!);
@@ -776,10 +692,10 @@ async function configDemoHyperchain(cmd: Command) {
await compileConfig('demo');
env.set('demo');
- wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK', 'Zeek hyperchain');
- wrapEnvModify('CHAIN_ETH_ZKSYNC_NETWORK_ID', '1337');
- wrapEnvModify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'SkipEveryProof');
- wrapEnvModify('ETH_SENDER_SENDER_L1_BATCH_MIN_AGE_BEFORE_EXECUTE_SECONDS', '20');
+ env.modify('CHAIN_ETH_ZKSYNC_NETWORK', 'Zeek hyperchain', process.env.ENV_FILE!);
+ env.modify('CHAIN_ETH_ZKSYNC_NETWORK_ID', '1337', process.env.ENV_FILE!);
+ env.modify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'SkipEveryProof', process.env.ENV_FILE!);
+ env.modify('ETH_SENDER_SENDER_L1_BATCH_MIN_AGE_BEFORE_EXECUTE_SECONDS', '20', process.env.ENV_FILE!);
const richWalletsRaw = await fetch(
'https://raw.githubusercontent.com/matter-labs/local-setup/main/rich-wallets.json'
@@ -790,39 +706,23 @@ async function configDemoHyperchain(cmd: Command) {
const deployer = new ethers.Wallet(richWallets[0].privateKey);
const governor = new ethers.Wallet(richWallets[1].privateKey);
- wrapEnvModify('DEPLOYER_PRIVATE_KEY', deployer.privateKey);
- wrapEnvModify('GOVERNOR_PRIVATE_KEY', governor.privateKey);
- wrapEnvModify('GOVERNOR_ADDRESS', governor.address);
+ env.modify('DEPLOYER_PRIVATE_KEY', deployer.privateKey, process.env.ENV_FILE!);
+ env.modify('GOVERNOR_PRIVATE_KEY', governor.privateKey, process.env.ENV_FILE!);
+ env.modify('GOVERNOR_ADDRESS', governor.address, process.env.ENV_FILE!);
env.load();
- const deployerPrivateKey = process.env.DEPLOYER_PRIVATE_KEY;
- const governorPrivateKey = process.env.GOVERNOR_PRIVATE_KEY;
- const deployL2Weth = Boolean(process.env.DEPLOY_L2_WETH || false);
- const deployTestTokens = Boolean(process.env.DEPLOY_TEST_TOKENS || true);
-
- const initArgs: InitArgs = {
- skipSubmodulesCheckout: false,
- skipEnvSetup: cmd.skipEnvSetup,
- runObservability: false,
- governorPrivateKeyArgs: ['--private-key', governorPrivateKey],
- deployerL2ContractInput: {
- args: ['--private-key', deployerPrivateKey],
- includePaymaster: false,
- includeL2WETH: deployL2Weth
- },
- testTokens: {
- deploy: deployTestTokens,
- args: ['--private-key', deployerPrivateKey, '--envFile', process.env.CHAIN_ETH_NETWORK!]
- },
- deployerPrivateKeyArgs: ['--private-key', deployerPrivateKey],
- deploymentMode: cmd.validiumMode !== undefined ? DeploymentMode.Validium : DeploymentMode.Rollup
- };
-
if (!cmd.skipEnvSetup) {
- await up(initArgs.runObservability);
+ await up(false);
}
- await init(initArgs);
+ await init.initDevCmdAction({
+ skipEnvSetup: cmd.skipEnvSetup,
+ skipSubmodulesCheckout: false,
+ testTokenOptions: { envFile: process.env.CHAIN_ETH_NETWORK! },
+ // TODO(EVM-573): support Validium mode
+ runObservability: false,
+ validiumMode: false
+ });
env.mergeInitToEnv();
@@ -871,11 +771,11 @@ export const initHyperchainCommand = new Command('stack')
initHyperchainCommand
.command('init')
.option('--run-observability')
+ .option('--env-name ', 'chain name to use for initialization')
.description('Wizard for hyperchain creation/configuration')
.option('--validium-mode')
.action(async (cmd: Command) => {
- let deploymentMode = cmd.validiumMode !== undefined ? DeploymentMode.Validium : DeploymentMode.Rollup;
- await initHyperchain(cmd.runObservability, deploymentMode);
+ await initHyperchain(cmd.envName, cmd.runObservability, cmd.validiumMode);
});
initHyperchainCommand
.command('docker-setup')
diff --git a/infrastructure/zk/src/index.ts b/infrastructure/zk/src/index.ts
index 8d27d27b8017..6604034eab94 100644
--- a/infrastructure/zk/src/index.ts
+++ b/infrastructure/zk/src/index.ts
@@ -7,8 +7,9 @@ import { command as contractVerifier } from './contract_verifier';
import { command as up } from './up';
import { command as down } from './down';
import { command as contract } from './contract';
-import { initCommand as init, reinitCommand as reinit, lightweightInitCommand as lightweightInit } from './init';
-import { initHyperchainCommand as initHyperchain } from './hyperchain_wizard';
+import { initCommand } from './init';
+import { reinitCommand } from './reinit';
+import { initHyperchainCommand } from './hyperchain_wizard';
import { command as run } from './run';
import { command as test } from './test/test';
import { command as docker } from './docker';
@@ -35,10 +36,9 @@ const COMMANDS = [
down,
db,
contract,
- init,
- reinit,
- lightweightInit,
- initHyperchain,
+ initCommand,
+ reinitCommand,
+ initHyperchainCommand,
run,
test,
fmt,
diff --git a/infrastructure/zk/src/init.ts b/infrastructure/zk/src/init.ts
index 29156f08f1fc..6f659362dca2 100644
--- a/infrastructure/zk/src/init.ts
+++ b/infrastructure/zk/src/init.ts
@@ -1,257 +1,234 @@
-import chalk from 'chalk';
import { Command } from 'commander';
+
import * as utils from './utils';
+import { announced } from './utils';
import { clean } from './clean';
import * as compiler from './compiler';
import * as contract from './contract';
+import { DeploymentMode } from './contract';
import * as db from './database';
import * as docker from './docker';
import * as env from './env';
+import * as config from './config';
import * as run from './run';
import * as server from './server';
import { createVolumes, up } from './up';
-import { down } from './down';
-
-const entry = chalk.bold.yellow;
-const announce = chalk.yellow;
-const success = chalk.green;
-const timestamp = chalk.grey;
-export async function init(initArgs: InitArgs = DEFAULT_ARGS) {
- const {
- skipSubmodulesCheckout,
- skipEnvSetup,
- runObservability: runObservability,
- testTokens,
- governorPrivateKeyArgs,
- deployerPrivateKeyArgs,
- deployerL2ContractInput,
- deploymentMode
- } = initArgs;
+// Checks if all required tools are installed with the correct versions
+const checkEnv = async (): Promise => {
+ const tools = ['node', 'yarn', 'docker', 'cargo'];
+ for (const tool of tools) {
+ await utils.exec(`which ${tool}`);
+ }
+ const { stdout: nodeVersion } = await utils.exec('node --version');
+ if ('v18.18.0' >= nodeVersion) {
+ throw new Error('Error, node.js version 18.18.0 or higher is required');
+ }
+ const { stdout: yarnVersion } = await utils.exec('yarn --version');
+ if ('1.22.0' >= yarnVersion) {
+ throw new Error('Error, yarn version 1.22.0 is required');
+ }
+};
- await announced(
- `Initializing in ${deploymentMode == contract.DeploymentMode.Validium ? 'Validium mode' : 'Roll-up mode'}`
- );
+// Initializes and updates the git submodule
+const submoduleUpdate = async (): Promise => {
+ await utils.exec('git submodule init');
+ await utils.exec('git submodule update');
+};
- if (runObservability) {
- await announced('Pulling observability repos', setupObservability());
+// Sets up docker environment and compiles contracts
+type InitSetupOptions = {
+ skipEnvSetup: boolean;
+ skipSubmodulesCheckout: boolean;
+ runObservability: boolean;
+ validiumMode: boolean;
+};
+const initSetup = async ({
+ skipSubmodulesCheckout,
+ skipEnvSetup,
+ runObservability
+}: InitSetupOptions): Promise => {
+ if (!skipSubmodulesCheckout) {
+ await announced('Checkout submodules', submoduleUpdate());
}
-
if (!process.env.CI && !skipEnvSetup) {
await announced('Pulling images', docker.pull());
- await announced('Checking environment', checkEnv(runObservability));
+ await announced('Checking environment', checkEnv());
await announced('Checking git hooks', env.gitHooks());
- await announced('Remove old containers', down());
await announced('Create volumes', createVolumes());
await announced('Setting up containers', up(runObservability));
}
- if (!skipSubmodulesCheckout) {
- await announced('Checkout system-contracts submodule', submoduleUpdate());
- }
- if (deploymentMode == contract.DeploymentMode.Validium) {
- await announced('Checkout era-contracts for Validium mode', validiumSubmoduleCheckout());
- }
await announced('Compiling JS packages', run.yarn());
- await announced('Compile l2 contracts', compiler.compileAll());
+
+ await Promise.all([
+ announced('Building L1 L2 contracts', contract.build()),
+ announced('Compile L2 system contracts', compiler.compileAll())
+ ]);
+};
+
+// Sets up the database, deploys the verifier (if set) and runs server genesis
+type InitDatabaseOptions = { skipVerifierDeployment: boolean };
+const initDatabase = async ({ skipVerifierDeployment }: InitDatabaseOptions): Promise => {
await announced('Drop postgres db', db.drop({ core: true, prover: true }));
await announced('Setup postgres db', db.setup({ core: true, prover: true }));
- await announced('Clean rocksdb', clean('db'));
- await announced('Clean backups', clean('backups'));
- await announced('Building contracts', contract.build());
- if (testTokens.deploy) {
- await announced('Deploying localhost ERC20 tokens', run.deployERC20('dev', '', '', '', testTokens.args));
- }
- await announced('Deploying L1 verifier', contract.deployVerifier(deployerPrivateKeyArgs, deploymentMode));
- await announced('Reloading env', env.reload());
- await announced('Running server genesis setup', server.genesisFromSources());
- await announced('Deploying L1 contracts', contract.redeployL1(deployerPrivateKeyArgs, deploymentMode));
- await announced('Initializing validator', contract.initializeValidator(governorPrivateKeyArgs));
- await announced(
- 'Deploying L2 contracts',
- contract.deployL2(
- deployerL2ContractInput.args,
- deployerL2ContractInput.includePaymaster,
- deployerL2ContractInput.includeL2WETH
- )
- );
+ await announced('Clean rocksdb', clean(`db/${process.env.ZKSYNC_ENV!}`));
+ await announced('Clean backups', clean(`backups/${process.env.ZKSYNC_ENV!}`));
- if (deployerL2ContractInput.includeL2WETH) {
- await announced('Initializing L2 WETH token', contract.initializeWethToken(governorPrivateKeyArgs));
+ if (!skipVerifierDeployment) {
+ await announced('Deploying L1 verifier', contract.deployVerifier());
}
- await announced('Initializing governance', contract.initializeGovernance(governorPrivateKeyArgs));
-}
+};
-// A smaller version of `init` that "resets" the localhost environment, for which `init` was already called before.
-// It does less and runs much faster.
-export async function reinit(runObservability: boolean, deploymentMode: contract.DeploymentMode) {
+// Deploys ERC20 and WETH tokens to localhost
+type DeployTestTokensOptions = { envFile?: string };
+const deployTestTokens = async (options?: DeployTestTokensOptions) => {
await announced(
- `Initializing in ${deploymentMode == contract.DeploymentMode.Validium ? 'Validium mode' : 'Roll-up mode'}`
+ 'Deploying localhost ERC20 and Weth tokens',
+ run.deployERC20AndWeth({ command: 'dev', envFile: options?.envFile })
);
- await announced('Setting up containers', up(runObservability));
- await announced('Compiling JS packages', run.yarn());
- await announced('Compile l2 contracts', compiler.compileAll());
- await announced('Drop postgres db', db.drop({ core: true, prover: true }));
- await announced('Setup postgres db', db.setup({ core: true, prover: true }));
- await announced('Clean rocksdb', clean('db'));
- await announced('Clean backups', clean('backups'));
- await announced('Building contracts', contract.build());
- await announced('Deploying L1 verifier', contract.deployVerifier([], deploymentMode));
- await announced('Reloading env', env.reload());
- await announced('Running server genesis setup', server.genesisFromSources());
- await announced('Deploying L1 contracts', contract.redeployL1([], deploymentMode));
- await announced('Deploying L2 contracts', contract.deployL2([], true, true));
- await announced('Initializing L2 WETH token', contract.initializeWethToken());
+};
+
+// Deploys and verifies L1 contracts and initializes governance
+const initBridgehubStateTransition = async () => {
+ await announced('Deploying L1 contracts', contract.deployL1(['']));
+ await announced('Verifying L1 contracts', contract.verifyL1Contracts());
await announced('Initializing governance', contract.initializeGovernance());
- await announced('Initializing validator', contract.initializeValidator());
-}
+ await announced('Reloading env', env.reload());
+};
-// A lightweight version of `init` that sets up local databases, generates genesis and deploys precompiled contracts
-export async function lightweightInit(runObservability: boolean, deploymentMode: contract.DeploymentMode) {
+// Registers a hyperchain and deploys L2 contracts through L1
+type InitHyperchainOptions = { includePaymaster: boolean; baseTokenName?: string; localLegacyBridgeTesting?: boolean };
+const initHyperchain = async ({
+ includePaymaster,
+ baseTokenName,
+ localLegacyBridgeTesting
+}: InitHyperchainOptions): Promise => {
+ await announced('Registering Hyperchain', contract.registerHyperchain({ baseTokenName }));
+ await announced('Reloading env', env.reload());
+ await announced('Running server genesis setup', server.genesisFromSources());
await announced(
- `Initializing in ${deploymentMode == contract.DeploymentMode.Validium ? 'Validium mode' : 'Roll-up mode'}`
+ 'Deploying L2 contracts',
+ contract.deployL2ThroughL1({ includePaymaster, localLegacyBridgeTesting })
);
- if (deploymentMode == contract.DeploymentMode.Validium) {
- await announced('Checkout era-contracts for Validium mode', validiumSubmoduleCheckout());
+};
+
+const makeEraChainIdSameAsCurrent = async () => {
+ console.log('Making era chain id same as current chain id');
+
+ const initEnv = `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`;
+ env.modify('CONTRACTS_ERA_CHAIN_ID', process.env.CHAIN_ETH_ZKSYNC_NETWORK_ID!, initEnv, false);
+ env.reload();
+};
+
+// ########################### Command Actions ###########################
+type InitDevCmdActionOptions = InitSetupOptions & {
+ skipTestTokenDeployment?: boolean;
+ testTokenOptions?: DeployTestTokensOptions;
+ baseTokenName?: string;
+ localLegacyBridgeTesting?: boolean;
+};
+export const initDevCmdAction = async ({
+ skipEnvSetup,
+ skipSubmodulesCheckout,
+ skipTestTokenDeployment,
+ testTokenOptions,
+ baseTokenName,
+ runObservability,
+ validiumMode,
+ localLegacyBridgeTesting
+}: InitDevCmdActionOptions): Promise => {
+ if (localLegacyBridgeTesting) {
+ await makeEraChainIdSameAsCurrent();
}
- await announced(`Setting up containers`, up(runObservability));
+ await initSetup({ skipEnvSetup, skipSubmodulesCheckout, runObservability, validiumMode });
+ await initDatabase({ skipVerifierDeployment: false });
+ if (!skipTestTokenDeployment) {
+ await deployTestTokens(testTokenOptions);
+ }
+ await initBridgehubStateTransition();
+ await initDatabase({ skipVerifierDeployment: true });
+ await initHyperchain({ includePaymaster: true, baseTokenName, localLegacyBridgeTesting });
+};
+
+const lightweightInitCmdAction = async (): Promise => {
await announced('Clean rocksdb', clean('db'));
await announced('Clean backups', clean('backups'));
- await announced('Deploying L1 verifier', contract.deployVerifier([], deploymentMode));
+ await announced('Deploying L1 verifier', contract.deployVerifier());
await announced('Reloading env', env.reload());
await announced('Running server genesis setup', server.genesisFromBinary());
- await announced('Deploying localhost ERC20 tokens', run.deployERC20('dev', '', '', '', []));
- await announced('Deploying L1 contracts', contract.redeployL1([], deploymentMode));
- await announced('Initializing validator', contract.initializeValidator());
- await announced('Deploying L2 contracts', contract.deployL2([], true, false));
+ await announced('Deploying localhost ERC20 and Weth tokens', run.deployERC20AndWeth({ command: 'dev' }));
+ // TODO(EVM-573): support Validium mode
+ await announced('Deploying L1 contracts', contract.redeployL1(false, DeploymentMode.Rollup));
+ await announced('Deploying L2 contracts', contract.deployL2ThroughL1({ includePaymaster: true }));
await announced('Initializing governance', contract.initializeGovernance());
-}
-
-// Wrapper that writes an announcement and completion notes for each executed task.
-export async function announced(fn: string, promise: Promise | void) {
- const announceLine = `${entry('>')} ${announce(fn)}`;
- const separator = '-'.repeat(fn.length + 2); // 2 is the length of "> ".
- console.log(`\n` + separator); // So it's easier to see each individual step in the console.
- console.log(announceLine);
-
- const start = new Date().getTime();
- // The actual execution part
- await promise;
-
- const time = new Date().getTime() - start;
- const successLine = `${success('✔')} ${fn} done`;
- const timestampLine = timestamp(`(${time}ms)`);
- console.log(`${successLine} ${timestampLine}`);
-}
-
-export async function submoduleUpdate() {
- await utils.exec('git submodule init');
- await utils.exec('git submodule update');
-}
-
-export async function validiumSubmoduleCheckout() {
- await utils.exec(`cd contracts && git checkout origin/feat-validium-1-5-0-integration`);
-}
-
-// clone dockprom and zksync-era dashboards
-export async function setupObservability() {
- // clone dockprom, era-observability repos and export era dashboards to dockprom
- await utils.spawn(
- `rm -rf ./target/dockprom && git clone https://github.com/stefanprodan/dockprom.git ./target/dockprom \
- && rm -rf ./target/era-observability && git clone https://github.com/matter-labs/era-observability ./target/era-observability \
- && cp ./target/era-observability/dashboards/* ./target/dockprom/grafana/provisioning/dashboards
- `
- );
- // add scrape configuration to prometheus
- await utils.spawn(
- `yq eval '.scrape_configs += [{"job_name": "zksync", "scrape_interval": "5s", "honor_labels": true, "static_configs": [{"targets": ["host.docker.internal:3312"]}]}]' \
- -i ./target/dockprom/prometheus/prometheus.yml
- `
- );
-}
+};
-async function checkEnv(runObservability: boolean) {
- const tools = ['node', 'yarn', 'docker', 'cargo'];
- if (runObservability) {
- tools.push('yq');
- }
+type InitSharedBridgeCmdActionOptions = InitSetupOptions;
+const initSharedBridgeCmdAction = async (options: InitSharedBridgeCmdActionOptions): Promise => {
+ await initSetup(options);
+ await initDatabase({ skipVerifierDeployment: false });
+ await initBridgehubStateTransition();
+};
- for (const tool of tools) {
- await utils.exec(`which ${tool}`);
+type InitHyperCmdActionOptions = {
+ skipSetupCompletely: boolean;
+ bumpChainId: boolean;
+ baseTokenName?: string;
+ runObservability: boolean;
+ validiumMode: boolean;
+};
+export const initHyperCmdAction = async ({
+ skipSetupCompletely,
+ bumpChainId,
+ baseTokenName,
+ runObservability,
+ validiumMode
+}: InitHyperCmdActionOptions): Promise => {
+ if (bumpChainId) {
+ config.bumpChainId();
}
- const { stdout: version } = await utils.exec('node --version');
- // Node v14.14 is required because
- // the `fs.rmSync` function was added in v14.14.0
- if ('v14.14' >= version) {
- throw new Error('Error, node.js version 14.14.0 or higher is required');
+ if (!skipSetupCompletely) {
+ await initSetup({ skipEnvSetup: false, skipSubmodulesCheckout: false, runObservability, validiumMode });
}
-}
-
-export interface InitArgs {
- skipSubmodulesCheckout: boolean;
- skipEnvSetup: boolean;
- runObservability: boolean;
- governorPrivateKeyArgs: any[];
- deployerPrivateKeyArgs: any[];
- deployerL2ContractInput: {
- args: any[];
- includePaymaster: boolean;
- includeL2WETH: boolean;
- };
- testTokens: {
- deploy: boolean;
- args: any[];
- };
- deploymentMode: contract.DeploymentMode;
-}
-
-const DEFAULT_ARGS: InitArgs = {
- skipSubmodulesCheckout: false,
- skipEnvSetup: false,
- runObservability: false,
- governorPrivateKeyArgs: [],
- deployerPrivateKeyArgs: [],
- deployerL2ContractInput: { args: [], includePaymaster: true, includeL2WETH: true },
- testTokens: { deploy: true, args: [] },
- deploymentMode: contract.DeploymentMode.Rollup
+ await initDatabase({ skipVerifierDeployment: true });
+ await initHyperchain({ includePaymaster: true, baseTokenName });
};
+// ########################### Command Definitions ###########################
export const initCommand = new Command('init')
.option('--skip-submodules-checkout')
.option('--skip-env-setup')
- .option('--run-observability')
- .option('--validium-mode')
- .description('perform zksync network initialization for development')
- .action(async (cmd: Command) => {
- const initArgs: InitArgs = {
- skipSubmodulesCheckout: cmd.skipSubmodulesCheckout,
- skipEnvSetup: cmd.skipEnvSetup,
- runObservability: cmd.runObservability,
- governorPrivateKeyArgs: [],
- deployerL2ContractInput: { args: [], includePaymaster: true, includeL2WETH: true },
- testTokens: { deploy: true, args: [] },
- deployerPrivateKeyArgs: [],
- deploymentMode:
- cmd.validiumMode !== undefined ? contract.DeploymentMode.Validium : contract.DeploymentMode.Rollup
- };
- await init(initArgs);
- });
-export const reinitCommand = new Command('reinit')
- .description('"reinitializes" network. Runs faster than `init`, but requires `init` to be executed prior')
- .option('--run-observability')
- .option('--validium-mode')
- .action(async (cmd: Command) => {
- let deploymentMode =
- cmd.validiumMode !== undefined ? contract.DeploymentMode.Validium : contract.DeploymentMode.Rollup;
- await reinit(cmd.runObservability, deploymentMode);
- });
-export const lightweightInitCommand = new Command('lightweight-init')
- .description('perform lightweight zksync network initialization for development')
- .option('--run-observability')
- .option('--validium-mode')
- .action(async (cmd: Command) => {
- let deploymentMode =
- cmd.validiumMode !== undefined ? contract.DeploymentMode.Validium : contract.DeploymentMode.Rollup;
- await lightweightInit(cmd.runObservability, deploymentMode);
- });
+ .option('--base-token-name ', 'base token name')
+ .option('--validium-mode', 'deploy contracts in Validium mode')
+ .option('--run-observability', 'run observability suite')
+ .option(
+ '--local-legacy-bridge-testing',
+ 'used to test LegacyBridge compatibily. The chain will have the same id as the era chain id, while eraChainId in L2SharedBridge will be 0'
+ )
+ .description('Deploys the shared bridge and registers a hyperchain locally, as quickly as possible.')
+ .action(initDevCmdAction);
+
+initCommand
+ .command('lightweight')
+ .description('A lightweight `init` that sets up local databases, generates genesis and deploys contracts.')
+ .action(lightweightInitCmdAction);
+
+initCommand
+ .command('shared-bridge')
+ .description('Deploys only the shared bridge and initializes governance. It does not deploy L2 contracts.')
+ .option('--skip-submodules-checkout')
+ .option('--validium-mode', 'deploy contracts in Validium mode')
+ .option('--run-observability', 'run observability suite')
+ .action(initSharedBridgeCmdAction);
+
+initCommand
+ .command('hyper')
+ .description('Registers a hyperchain and deploys L2 contracts only. It requires an already deployed shared bridge.')
+ .option('--skip-setup-completely', 'skip the setup completely, use this if server was started already')
+ .option('--bump-chain-id', 'bump chain id to not conflict with previously deployed hyperchain')
+ .option('--base-token-name ', 'base token name')
+ .option('--validium-mode', 'deploy contracts in Validium mode')
+ .option('--run-observability', 'run observability suite')
+ .action(initHyperCmdAction);
diff --git a/infrastructure/zk/src/prover_setup.ts b/infrastructure/zk/src/prover_setup.ts
index d1d63899d50d..586844856a7c 100644
--- a/infrastructure/zk/src/prover_setup.ts
+++ b/infrastructure/zk/src/prover_setup.ts
@@ -2,7 +2,7 @@ import { Command } from 'commander';
import * as utils from './utils';
import fs from 'fs';
import enquirer from 'enquirer';
-import { BasePromptOptions, wrapEnvModify } from './hyperchain_wizard';
+import { BasePromptOptions } from './hyperchain_wizard';
import fetch from 'node-fetch';
import chalk from 'chalk';
import * as env from './env';
@@ -21,22 +21,22 @@ enum KeysRegionOption {
export async function setupProver(proverType: ProverType) {
// avoid doing work if receives the wrong param from the CLI
if (proverType == ProverType.GPU || proverType == ProverType.CPU) {
- wrapEnvModify('PROVER_TYPE', proverType);
- wrapEnvModify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'OnlyRealProofs');
- wrapEnvModify('ETH_SENDER_SENDER_PROOF_LOADING_MODE', 'FriProofFromGcs');
- wrapEnvModify('FRI_PROVER_GATEWAY_API_POLL_DURATION_SECS', '120');
+ env.modify('PROVER_TYPE', proverType, process.env.ENV_FILE!);
+ env.modify('ETH_SENDER_SENDER_PROOF_SENDING_MODE', 'OnlyRealProofs', process.env.ENV_FILE!);
+ env.modify('ETH_SENDER_SENDER_PROOF_LOADING_MODE', 'FriProofFromGcs', process.env.ENV_FILE!);
+ env.modify('FRI_PROVER_GATEWAY_API_POLL_DURATION_SECS', '120', process.env.ENV_FILE!);
await setupArtifactsMode();
if (!process.env.CI) {
await setupProverKeys(proverType);
} else {
- wrapEnvModify(
+ env.modify(
'FRI_PROVER_SETUP_DATA_PATH',
`${process.env.ZKSYNC_HOME}/etc/hyperchains/prover-keys/${process.env.ZKSYNC_ENV}/${
proverType === ProverType.GPU ? 'gpu' : 'cpu'
- }/`
+ }/`,
+ process.env.ENV_FILE!
);
}
- env.mergeInitToEnv();
} else {
console.error(`Unknown prover type: ${proverType}`);
process.exit(1);
@@ -55,7 +55,11 @@ async function downloadCSR(proverType: ProverType, region: string) {
);
await utils.sleep(1);
process.chdir(process.env.ZKSYNC_HOME as string);
- wrapEnvModify('CRS_FILE', `${process.env.ZKSYNC_HOME}/etc/hyperchains/prover-keys/${currentEnv}/${proverType}/`);
+ env.modify(
+ 'CRS_FILE',
+ `${process.env.ZKSYNC_HOME}/etc/hyperchains/prover-keys/${currentEnv}/${proverType}/`,
+ process.env.ENV_FILE!
+ );
}
async function setupProverKeys(proverType: ProverType) {
@@ -93,11 +97,12 @@ async function setupProverKeys(proverType: ProverType) {
await generateAllSetupData(proverType);
}
- wrapEnvModify(
+ env.modify(
'FRI_PROVER_SETUP_DATA_PATH',
`${process.env.ZKSYNC_HOME}/etc/hyperchains/prover-keys/${process.env.ZKSYNC_ENV}/${
proverType === ProverType.GPU ? 'gpu' : 'cpu'
- }/`
+ }/`,
+ process.env.ENV_FILE!
);
}
@@ -105,12 +110,12 @@ async function setupArtifactsMode() {
if (process.env.CI) {
const currentEnv = env.get();
const path = `${process.env.ZKSYNC_HOME}/etc/hyperchains/artifacts/${currentEnv}/`;
- wrapEnvModify('OBJECT_STORE_MODE', 'FileBacked');
- wrapEnvModify('PUBLIC_OBJECT_STORE_MODE', 'FileBacked');
- wrapEnvModify('PROVER_OBJECT_STORE_MODE', 'FileBacked');
- wrapEnvModify('OBJECT_STORE_FILE_BACKED_BASE_PATH', path);
- wrapEnvModify('PUBLIC_OBJECT_STORE_FILE_BACKED_BASE_PATH', path);
- wrapEnvModify('PROVER_OBJECT_STORE_FILE_BACKED_BASE_PATH', path);
+ env.modify('OBJECT_STORE_MODE', 'FileBacked', process.env.ENV_FILE!);
+ env.modify('PUBLIC_OBJECT_STORE_MODE', 'FileBacked', process.env.ENV_FILE!);
+ env.modify('PROVER_OBJECT_STORE_MODE', 'FileBacked', process.env.ENV_FILE!);
+ env.modify('OBJECT_STORE_FILE_BACKED_BASE_PATH', path, process.env.ENV_FILE!);
+ env.modify('PUBLIC_OBJECT_STORE_FILE_BACKED_BASE_PATH', path, process.env.ENV_FILE!);
+ env.modify('PROVER_OBJECT_STORE_FILE_BACKED_BASE_PATH', path, process.env.ENV_FILE!);
return;
}
@@ -142,12 +147,12 @@ async function setupArtifactsMode() {
const folder: any = await enquirer.prompt(folderQuestion);
- wrapEnvModify('OBJECT_STORE_MODE', 'FileBacked');
- wrapEnvModify('PUBLIC_OBJECT_STORE_MODE', 'FileBacked');
- wrapEnvModify('PROVER_OBJECT_STORE_MODE', 'FileBacked');
- wrapEnvModify('OBJECT_STORE_FILE_BACKED_BASE_PATH', folder.path);
- wrapEnvModify('PUBLIC_OBJECT_STORE_FILE_BACKED_BASE_PATH', folder.path);
- wrapEnvModify('PROVER_OBJECT_STORE_FILE_BACKED_BASE_PATH', folder.path);
+ env.modify('OBJECT_STORE_MODE', 'FileBacked', process.env.ENV_FILE!);
+ env.modify('PUBLIC_OBJECT_STORE_MODE', 'FileBacked', process.env.ENV_FILE!);
+ env.modify('PROVER_OBJECT_STORE_MODE', 'FileBacked', process.env.ENV_FILE!);
+ env.modify('OBJECT_STORE_FILE_BACKED_BASE_PATH', folder.path, process.env.ENV_FILE!);
+ env.modify('PUBLIC_OBJECT_STORE_FILE_BACKED_BASE_PATH', folder.path, process.env.ENV_FILE!);
+ env.modify('PROVER_OBJECT_STORE_FILE_BACKED_BASE_PATH', folder.path, process.env.ENV_FILE!);
} else {
const gcpQuestions: BasePromptOptions[] = [
{
@@ -166,13 +171,13 @@ async function setupArtifactsMode() {
const gcp: any = await enquirer.prompt(gcpQuestions);
- wrapEnvModify('OBJECT_STORE_MODE', 'GCSWithCredentialFile');
- wrapEnvModify('PUBLIC_OBJECT_STORE_MODE', 'GCSWithCredentialFile');
- wrapEnvModify('PROVER_OBJECT_STORE_MODE', 'GCSWithCredentialFile');
- wrapEnvModify('OBJECT_STORE_GCS_CREDENTIAL_FILE_PATH', gcp.gcpPath);
- wrapEnvModify('PUBLIC_OBJECT_STORE_GCS_CREDENTIAL_FILE_PATH', gcp.gcpPath);
- wrapEnvModify('PUBLIC_OBJECT_STORE_BUCKET_BASE_URL', gcp.bucket);
- wrapEnvModify('PROVER_OBJECT_STORE_BUCKET_BASE_URL', gcp.bucket);
+ env.modify('OBJECT_STORE_MODE', 'GCSWithCredentialFile', process.env.ENV_FILE!);
+ env.modify('PUBLIC_OBJECT_STORE_MODE', 'GCSWithCredentialFile', process.env.ENV_FILE!);
+ env.modify('PROVER_OBJECT_STORE_MODE', 'GCSWithCredentialFile', process.env.ENV_FILE!);
+ env.modify('OBJECT_STORE_GCS_CREDENTIAL_FILE_PATH', gcp.gcpPath, process.env.ENV_FILE!);
+ env.modify('PUBLIC_OBJECT_STORE_GCS_CREDENTIAL_FILE_PATH', gcp.gcpPath, process.env.ENV_FILE!);
+ env.modify('PUBLIC_OBJECT_STORE_BUCKET_BASE_URL', gcp.bucket, process.env.ENV_FILE!);
+ env.modify('PROVER_OBJECT_STORE_BUCKET_BASE_URL', gcp.bucket, process.env.ENV_FILE!);
}
}
diff --git a/infrastructure/zk/src/reinit.ts b/infrastructure/zk/src/reinit.ts
new file mode 100644
index 000000000000..899064bc0d90
--- /dev/null
+++ b/infrastructure/zk/src/reinit.ts
@@ -0,0 +1,43 @@
+import { Command } from 'commander';
+
+import { up } from './up';
+import { announced } from './utils';
+import { initDevCmdAction, initHyperCmdAction } from './init';
+
+const reinitDevCmdAction = async (): Promise => {
+ await announced('Setting up containers', up(false));
+ // skipEnvSetup and skipSubmodulesCheckout, because we only want to compile
+ // no ERC20 token deployment, because they are already deployed
+ await initDevCmdAction({
+ skipEnvSetup: true,
+ skipSubmodulesCheckout: true,
+ skipTestTokenDeployment: true,
+ // TODO(EVM-573): support Validium mode
+ runObservability: true,
+ validiumMode: false
+ });
+};
+
+type ReinitHyperCmdActionOptions = { baseTokenName?: string; validiumMode: boolean };
+const reinitHyperCmdAction = async ({ baseTokenName, validiumMode }: ReinitHyperCmdActionOptions): Promise => {
+ // skipSetupCompletely, because we only want to compile
+ // bumpChainId, because we want to reinitialize hyperchain with a new chain id
+ await initHyperCmdAction({
+ skipSetupCompletely: true,
+ baseTokenName: baseTokenName,
+ bumpChainId: true,
+ runObservability: false,
+ validiumMode
+ });
+};
+
+export const reinitCommand = new Command('reinit')
+ .description('"Reinitializes" network. Runs faster than a full init, but requires `init` to be executed prior.')
+ .action(reinitDevCmdAction);
+
+reinitCommand
+ .command('hyper')
+ .description('Bumps chain id and reinitializes hyperchain. Requires `init` to be executed prior.')
+ .option('--base-token-name ', 'base token name')
+ .option('--validium-mode', 'deploy in validium mode')
+ .action(reinitHyperCmdAction);
diff --git a/infrastructure/zk/src/run.ts b/infrastructure/zk/src/run.ts
index 8098e9b6142e..73cf9bb1bfdd 100644
--- a/infrastructure/zk/src/run.ts
+++ b/infrastructure/zk/src/run.ts
@@ -6,19 +6,23 @@ import * as path from 'path';
import { getTokens } from './hyperchain_wizard';
import * as env from './env';
-export async function deployERC20(
- command: 'dev' | 'new',
- name?: string,
- symbol?: string,
- decimals?: string,
- args: any = []
-) {
+export async function deployERC20AndWeth({
+ command,
+ name,
+ symbol,
+ decimals,
+ envFile
+}: {
+ command: 'dev' | 'new';
+ name?: string;
+ symbol?: string;
+ decimals?: string;
+ envFile?: string;
+}) {
if (command == 'dev') {
- let destinationFile = 'localhost';
- if (args.includes('--envFile')) {
- destinationFile = args[args.indexOf('--envFile') + 1];
- args.splice(args.indexOf('--envFile'), 2);
- }
+ const destinationFile = envFile || 'localhost';
+ const privateKey = process.env.DEPLOYER_PRIVATE_KEY;
+ const args = [privateKey ? `--private-key ${privateKey}` : ''];
await utils.spawn(`yarn --silent --cwd contracts/l1-contracts deploy-erc20 add-multi '
[
{ "name": "DAI", "symbol": "DAI", "decimals": 18 },
@@ -27,7 +31,11 @@ export async function deployERC20(
{ "name": "Wrapped Ether", "symbol": "WETH", "decimals": 18, "implementation": "WETH9"}
]' ${args.join(' ')} > ./etc/tokens/${destinationFile}.json`);
const WETH = getTokens(destinationFile).find((token) => token.symbol === 'WETH')!;
- env.modify('CONTRACTS_L1_WETH_TOKEN_ADDR', `CONTRACTS_L1_WETH_TOKEN_ADDR=${WETH.address}`);
+ env.modify(
+ 'CONTRACTS_L1_WETH_TOKEN_ADDR',
+ `CONTRACTS_L1_WETH_TOKEN_ADDR=${WETH.address}`,
+ `etc/env/l1-inits/${process.env.L1_ENV_NAME ? process.env.L1_ENV_NAME : '.init'}.env`
+ );
} else if (command == 'new') {
await utils.spawn(
`yarn --silent --cwd contracts/l1-contracts deploy-erc20 add --token-name ${name} --symbol ${symbol} --decimals ${decimals}`
@@ -35,6 +43,13 @@ export async function deployERC20(
}
}
+export type Token = {
+ address: string | null;
+ name: string;
+ symbol: string;
+ decimals: number;
+};
+
export async function tokenInfo(address: string) {
await utils.spawn(`yarn l1-contracts token-info info ${address}`);
}
@@ -58,34 +73,20 @@ export async function catLogs(exitCode?: number) {
}
}
-function readTestMnemonic() {
+export async function testAccounts() {
const testConfigPath = path.join(process.env.ZKSYNC_HOME as string, `etc/test_config/constant`);
- return JSON.parse(fs.readFileSync(`${testConfigPath}/eth.json`, { encoding: 'utf-8' }));
-}
-
-type SimpleWallet = {
- address: string;
- privateKey: string;
-};
-
-export async function readTestAccounts() {
- const ethTestConfig = readTestMnemonic();
- let wallets = await testAccounts(ethTestConfig.test_mnemonic as string);
- console.log(JSON.stringify(wallets, null, 4));
-}
-
-export async function testAccounts(mnemonic: string): Promise {
+ const ethTestConfig = JSON.parse(fs.readFileSync(`${testConfigPath}/eth.json`, { encoding: 'utf-8' }));
const NUM_TEST_WALLETS = 10;
const baseWalletPath = "m/44'/60'/0'/0/";
const walletKeys = [];
for (let i = 0; i < NUM_TEST_WALLETS; ++i) {
- const ethWallet = Wallet.fromMnemonic(mnemonic, baseWalletPath + i);
+ const ethWallet = Wallet.fromMnemonic(ethTestConfig.test_mnemonic as string, baseWalletPath + i);
walletKeys.push({
address: ethWallet.address,
privateKey: ethWallet.privateKey
});
}
- return walletKeys;
+ console.log(JSON.stringify(walletKeys, null, 4));
}
export async function loadtest(...args: string[]) {
@@ -109,15 +110,22 @@ export async function readVariable(address: string, contractName: string, variab
);
}
+export async function cross_en_checker() {
+ let logLevel = 'RUST_LOG=cross_external_nodes_checker=debug';
+ let suffix = 'cargo run --release --bin cross_external_nodes_checker';
+ await utils.spawn(`${logLevel} ${suffix}`);
+}
+
export async function snapshots_creator() {
- process.chdir(process.env.ZKSYNC_HOME ?? '.');
- await utils.spawn('cargo run --release --bin snapshots_creator');
+ process.chdir(`${process.env.ZKSYNC_HOME}`);
+ let logLevel = 'RUST_LOG=snapshots_creator=debug';
+ await utils.spawn(`${logLevel} cargo run --bin snapshots_creator --release`);
}
export const command = new Command('run').description('run miscellaneous applications');
-command.command('test-accounts').description('print ethereum test accounts').action(readTestAccounts);
-command.command('yarn install --frozen-lockfile').description('install all JS dependencies').action(yarn);
+command.command('test-accounts').description('print ethereum test accounts').action(testAccounts);
+command.command('yarn').description('install all JS dependencies').action(yarn);
command.command('cat-logs [exit_code]').description('print server and prover logs').action(catLogs);
command
@@ -127,7 +135,7 @@ command
if (command != 'dev' && command != 'new') {
throw new Error('only "dev" and "new" subcommands are allowed');
}
- await deployERC20(command, name, symbol, decimals);
+ await deployERC20AndWeth({ command, name, symbol, decimals });
});
command
diff --git a/infrastructure/zk/src/server.ts b/infrastructure/zk/src/server.ts
index e11794c2c17e..896cb97fe340 100644
--- a/infrastructure/zk/src/server.ts
+++ b/infrastructure/zk/src/server.ts
@@ -2,9 +2,9 @@ import { Command } from 'commander';
import * as utils from './utils';
import { clean } from './clean';
import fs from 'fs';
-import { unloadInit } from './env';
import * as path from 'path';
import * as db from './database';
+import * as env from './env';
export async function server(rebuildTree: boolean, uring: boolean, components?: string) {
let options = '';
@@ -34,9 +34,6 @@ export async function externalNode(reinit: boolean = false, args: string[]) {
process.env.EN_BOOTLOADER_HASH = process.env.CHAIN_STATE_KEEPER_BOOTLOADER_HASH;
process.env.EN_DEFAULT_AA_HASH = process.env.CHAIN_STATE_KEEPER_DEFAULT_AA_HASH;
- // We don't need to have server-native variables in the config.
- unloadInit();
-
// On --reinit we want to reset RocksDB and Postgres before we start.
if (reinit) {
await utils.confirmAction();
@@ -66,6 +63,8 @@ async function create_genesis(cmd: string) {
}
export async function genesisFromSources() {
+ // Note that that all the chains have the same chainId at genesis. It will be changed
+ // via an upgrade transaction during the registration of the chain.
await create_genesis('cargo run --bin zksync_server --release -- --genesis');
}
@@ -79,7 +78,9 @@ export const serverCommand = new Command('server')
.option('--rebuild-tree', 'rebuilds merkle tree from database logs', 'rebuild_tree')
.option('--uring', 'enables uring support for RocksDB')
.option('--components ', 'comma-separated list of components to run')
+ .option('--chain-name ', 'environment name')
.action(async (cmd: Command) => {
+ cmd.chainName ? env.reload(cmd.chainName) : env.load();
if (cmd.genesis) {
await genesisFromSources();
} else {
diff --git a/infrastructure/zk/src/test/integration.ts b/infrastructure/zk/src/test/integration.ts
index f309efad2a89..08582a553c79 100644
--- a/infrastructure/zk/src/test/integration.ts
+++ b/infrastructure/zk/src/test/integration.ts
@@ -1,6 +1,7 @@
import { Command } from 'commander';
import * as utils from '../utils';
import * as config from '../config';
+import deepExtend from 'deep-extend';
export async function all() {
await server();
@@ -25,7 +26,9 @@ export async function server(options: string[] = []) {
process.env.ZKSYNC_WEB3_WS_API_URL = `ws://127.0.0.1:${process.env.EN_WS_PORT}`;
process.env.ETH_CLIENT_WEB3_URL = process.env.EN_ETH_CLIENT_URL;
- const configs = config.collectVariables(config.loadConfig('dev'));
+ // We need base configs for integration tests
+ const baseConfigs = config.loadConfig('dev');
+ const configs = config.collectVariables(deepExtend(baseConfigs, config.loadConfig(process.env.ZKSYNC_ENV)));
process.env.CONTRACTS_PRIORITY_TX_MAX_GAS_LIMIT = configs.get('CONTRACTS_PRIORITY_TX_MAX_GAS_LIMIT');
process.env.CHAIN_STATE_KEEPER_VALIDATION_COMPUTATIONAL_GAS_LIMIT = configs.get(
diff --git a/infrastructure/zk/src/up.ts b/infrastructure/zk/src/up.ts
index 7ff7e609139f..2e917b3bea26 100644
--- a/infrastructure/zk/src/up.ts
+++ b/infrastructure/zk/src/up.ts
@@ -14,7 +14,6 @@ export async function up(runObservability: boolean, composeFile?: string) {
} else {
await utils.spawn('docker compose up -d');
}
-
if (runObservability) {
await utils.spawn(`docker compose -f ./target/dockprom/docker-compose.yml up -d`);
}
diff --git a/infrastructure/zk/src/utils.ts b/infrastructure/zk/src/utils.ts
index f77884908389..43030d84fadc 100644
--- a/infrastructure/zk/src/utils.ts
+++ b/infrastructure/zk/src/utils.ts
@@ -2,6 +2,7 @@ import { exec as _exec, spawn as _spawn } from 'child_process';
import { promisify } from 'util';
import fs from 'fs';
import readline from 'readline';
+import chalk from 'chalk';
export type { ChildProcess } from 'child_process';
@@ -23,7 +24,9 @@ const IGNORED_DIRS = [
'system-contracts',
'artifacts-zk',
'cache-zk',
- 'contracts/l1-contracts/lib'
+ // Ignore directories with OZ and forge submodules.
+ 'contracts/l1-contracts/lib',
+ 'contracts/l1-contracts-foundry/lib'
];
const IGNORED_FILES = ['KeysWithPlonkVerifier.sol', 'TokenInit.sol', '.tslintrc.js', '.prettierrc.js'];
@@ -139,7 +142,7 @@ export function web3Url() {
export async function readZkSyncAbi() {
const zksync = process.env.ZKSYNC_HOME;
- const path = `${zksync}/contracts/artifacts/cache/solpp-generated-contracts/interfaces/IZkSync.sol/IZkSync.json`;
+ const path = `${zksync}/contracts/l1-contracts/artifacts/contracts/state-transition/chain-interfaces/IZkSyncHyperchain.sol/IZkSyncHyperchain.json`;
const fileContent = (await fs.promises.readFile(path)).toString();
@@ -147,3 +150,25 @@ export async function readZkSyncAbi() {
return abi;
}
+
+const entry = chalk.bold.yellow;
+const announce = chalk.yellow;
+const success = chalk.green;
+const timestamp = chalk.grey;
+
+// Wrapper that writes an announcement and completion notes for each executed task.
+export const announced = async (fn: string, promise: Promise | void) => {
+ const announceLine = `${entry('>')} ${announce(fn)}`;
+ const separator = '-'.repeat(fn.length + 2); // 2 is the length of "> ".
+ console.log(`\n` + separator); // So it's easier to see each individual step in the console.
+ console.log(announceLine);
+
+ const start = new Date().getTime();
+ // The actual execution part
+ await promise;
+
+ const time = new Date().getTime() - start;
+ const successLine = `${success('✔')} ${fn} done`;
+ const timestampLine = timestamp(`(${time}ms)`);
+ console.log(`${successLine} ${timestampLine}`);
+};
diff --git a/infrastructure/zk/src/verify-upgrade.ts b/infrastructure/zk/src/verify-upgrade.ts
index 409cdf37cfd4..f8af37df1d32 100644
--- a/infrastructure/zk/src/verify-upgrade.ts
+++ b/infrastructure/zk/src/verify-upgrade.ts
@@ -30,7 +30,7 @@ const SYSTEM_CONTRACT_MAP: Map = new Map([
// 0x8007 is a ForceDeployer address (which is not a system contract, but conventional address)
['L1Messenger', '0x0000000000000000000000000000000000008008'],
['MsgValueSimulator', '0x0000000000000000000000000000000000008009'],
- ['L2EthToken', '0x000000000000000000000000000000000000800a'],
+ ['L2BaseToken', '0x000000000000000000000000000000000000800a'],
['SystemContext', '0x000000000000000000000000000000000000800b'],
['BootloaderUtilities', '0x000000000000000000000000000000000000800c'],
['BytecodeCompressor', '0x000000000000000000000000000000000000800e'],
diff --git a/package.json b/package.json
index 152645dd1136..9124900ca6dc 100644
--- a/package.json
+++ b/package.json
@@ -46,6 +46,7 @@
"prettier": "^2.3.2",
"prettier-plugin-solidity": "=1.0.0-dev.22",
"solhint": "^3.3.2",
- "sql-formatter": "^13.1.0"
+ "sql-formatter": "^13.1.0",
+ "zksync-ethers": "https://github.com/zksync-sdk/zksync-ethers#sb-old-sdk"
}
}
diff --git a/prover/Cargo.lock b/prover/Cargo.lock
index e586465a1e40..f19ff517d9df 100644
--- a/prover/Cargo.lock
+++ b/prover/Cargo.lock
@@ -7713,6 +7713,7 @@ dependencies = [
"serde",
"zksync_basic_types",
"zksync_config",
+ "zksync_system_constants",
]
[[package]]
diff --git a/yarn.lock b/yarn.lock
index 6199685cfd0a..25fb92ba1ca5 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8,12 +8,12 @@
integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==
"@ampproject/remapping@^2.2.0":
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"
- integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
+ integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
dependencies:
- "@jridgewell/gen-mapping" "^0.3.0"
- "@jridgewell/trace-mapping" "^0.3.9"
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.24"
"@babel/code-frame@7.12.11":
version "7.12.11"
@@ -22,58 +22,58 @@
dependencies:
"@babel/highlight" "^7.10.4"
-"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13":
- version "7.22.13"
- resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e"
- integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==
+"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.23.5", "@babel/code-frame@^7.24.1", "@babel/code-frame@^7.24.2":
+ version "7.24.2"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.2.tgz#718b4b19841809a58b29b68cde80bc5e1aa6d9ae"
+ integrity sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==
dependencies:
- "@babel/highlight" "^7.22.13"
- chalk "^2.4.2"
+ "@babel/highlight" "^7.24.2"
+ picocolors "^1.0.0"
-"@babel/compat-data@^7.22.9":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc"
- integrity sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==
+"@babel/compat-data@^7.23.5":
+ version "7.24.4"
+ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.4.tgz#6f102372e9094f25d908ca0d34fc74c74606059a"
+ integrity sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==
-"@babel/core@^7.11.6", "@babel/core@^7.12.3":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94"
- integrity sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==
+"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9":
+ version "7.24.4"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.4.tgz#1f758428e88e0d8c563874741bc4ffc4f71a4717"
+ integrity sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==
dependencies:
"@ampproject/remapping" "^2.2.0"
- "@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.23.0"
- "@babel/helper-compilation-targets" "^7.22.15"
- "@babel/helper-module-transforms" "^7.23.0"
- "@babel/helpers" "^7.23.2"
- "@babel/parser" "^7.23.0"
- "@babel/template" "^7.22.15"
- "@babel/traverse" "^7.23.2"
- "@babel/types" "^7.23.0"
+ "@babel/code-frame" "^7.24.2"
+ "@babel/generator" "^7.24.4"
+ "@babel/helper-compilation-targets" "^7.23.6"
+ "@babel/helper-module-transforms" "^7.23.3"
+ "@babel/helpers" "^7.24.4"
+ "@babel/parser" "^7.24.4"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.1"
+ "@babel/types" "^7.24.0"
convert-source-map "^2.0.0"
debug "^4.1.0"
gensync "^1.0.0-beta.2"
json5 "^2.2.3"
semver "^6.3.1"
-"@babel/generator@^7.23.0", "@babel/generator@^7.7.2":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420"
- integrity sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==
+"@babel/generator@^7.24.1", "@babel/generator@^7.24.4", "@babel/generator@^7.7.2":
+ version "7.24.4"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.4.tgz#1fc55532b88adf952025d5d2d1e71f946cb1c498"
+ integrity sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==
dependencies:
- "@babel/types" "^7.23.0"
- "@jridgewell/gen-mapping" "^0.3.2"
- "@jridgewell/trace-mapping" "^0.3.17"
+ "@babel/types" "^7.24.0"
+ "@jridgewell/gen-mapping" "^0.3.5"
+ "@jridgewell/trace-mapping" "^0.3.25"
jsesc "^2.5.1"
-"@babel/helper-compilation-targets@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52"
- integrity sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==
+"@babel/helper-compilation-targets@^7.23.6":
+ version "7.23.6"
+ resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
+ integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
dependencies:
- "@babel/compat-data" "^7.22.9"
- "@babel/helper-validator-option" "^7.22.15"
- browserslist "^4.21.9"
+ "@babel/compat-data" "^7.23.5"
+ "@babel/helper-validator-option" "^7.23.5"
+ browserslist "^4.22.2"
lru-cache "^5.1.1"
semver "^6.3.1"
@@ -98,16 +98,16 @@
"@babel/types" "^7.22.5"
"@babel/helper-module-imports@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
- integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
+ version "7.24.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz#6ac476e6d168c7c23ff3ba3cf4f7841d46ac8128"
+ integrity sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==
dependencies:
- "@babel/types" "^7.22.15"
+ "@babel/types" "^7.24.0"
-"@babel/helper-module-transforms@^7.23.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e"
- integrity sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==
+"@babel/helper-module-transforms@^7.23.3":
+ version "7.23.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
+ integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
dependencies:
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-module-imports" "^7.22.15"
@@ -115,10 +115,10 @@
"@babel/helper-split-export-declaration" "^7.22.6"
"@babel/helper-validator-identifier" "^7.22.20"
-"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295"
- integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a"
+ integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
"@babel/helper-simple-access@^7.22.5":
version "7.22.5"
@@ -134,43 +134,44 @@
dependencies:
"@babel/types" "^7.22.5"
-"@babel/helper-string-parser@^7.22.5":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f"
- integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==
+"@babel/helper-string-parser@^7.23.4":
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz#f99c36d3593db9540705d0739a1f10b5e20c696e"
+ integrity sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==
"@babel/helper-validator-identifier@^7.22.20":
version "7.22.20"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
-"@babel/helper-validator-option@^7.22.15":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040"
- integrity sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==
+"@babel/helper-validator-option@^7.23.5":
+ version "7.23.5"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
+ integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
-"@babel/helpers@^7.23.2":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767"
- integrity sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==
+"@babel/helpers@^7.24.4":
+ version "7.24.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.4.tgz#dc00907fd0d95da74563c142ef4cd21f2cb856b6"
+ integrity sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==
dependencies:
- "@babel/template" "^7.22.15"
- "@babel/traverse" "^7.23.2"
- "@babel/types" "^7.23.0"
+ "@babel/template" "^7.24.0"
+ "@babel/traverse" "^7.24.1"
+ "@babel/types" "^7.24.0"
-"@babel/highlight@^7.10.4", "@babel/highlight@^7.22.13":
- version "7.22.20"
- resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54"
- integrity sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==
+"@babel/highlight@^7.10.4", "@babel/highlight@^7.24.2":
+ version "7.24.2"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.2.tgz#3f539503efc83d3c59080a10e6634306e0370d26"
+ integrity sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==
dependencies:
"@babel/helper-validator-identifier" "^7.22.20"
chalk "^2.4.2"
js-tokens "^4.0.0"
+ picocolors "^1.0.0"
-"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.0", "@babel/parser@^7.7.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719"
- integrity sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==
+"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.0", "@babel/parser@^7.24.1", "@babel/parser@^7.24.4", "@babel/parser@^7.7.0":
+ version "7.24.4"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.4.tgz#234487a110d89ad5a3ed4a8a566c36b9453e8c88"
+ integrity sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==
"@babel/plugin-syntax-async-generators@^7.8.4":
version "7.8.4"
@@ -208,11 +209,11 @@
"@babel/helper-plugin-utils" "^7.8.0"
"@babel/plugin-syntax-jsx@^7.7.2":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918"
- integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz#3f6ca04b8c841811dbc3c5c5f837934e0d626c10"
+ integrity sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==
dependencies:
- "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.24.0"
"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
version "7.10.4"
@@ -264,43 +265,43 @@
"@babel/helper-plugin-utils" "^7.14.5"
"@babel/plugin-syntax-typescript@^7.7.2":
- version "7.22.5"
- resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272"
- integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz#b3bcc51f396d15f3591683f90239de143c076844"
+ integrity sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==
dependencies:
- "@babel/helper-plugin-utils" "^7.22.5"
+ "@babel/helper-plugin-utils" "^7.24.0"
-"@babel/template@^7.22.15", "@babel/template@^7.3.3":
- version "7.22.15"
- resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38"
- integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==
+"@babel/template@^7.22.15", "@babel/template@^7.24.0", "@babel/template@^7.3.3":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
+ integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
dependencies:
- "@babel/code-frame" "^7.22.13"
- "@babel/parser" "^7.22.15"
- "@babel/types" "^7.22.15"
+ "@babel/code-frame" "^7.23.5"
+ "@babel/parser" "^7.24.0"
+ "@babel/types" "^7.24.0"
-"@babel/traverse@^7.23.2", "@babel/traverse@^7.7.0":
- version "7.23.2"
- resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8"
- integrity sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==
+"@babel/traverse@^7.24.1", "@babel/traverse@^7.7.0":
+ version "7.24.1"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.1.tgz#d65c36ac9dd17282175d1e4a3c49d5b7988f530c"
+ integrity sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==
dependencies:
- "@babel/code-frame" "^7.22.13"
- "@babel/generator" "^7.23.0"
+ "@babel/code-frame" "^7.24.1"
+ "@babel/generator" "^7.24.1"
"@babel/helper-environment-visitor" "^7.22.20"
"@babel/helper-function-name" "^7.23.0"
"@babel/helper-hoist-variables" "^7.22.5"
"@babel/helper-split-export-declaration" "^7.22.6"
- "@babel/parser" "^7.23.0"
- "@babel/types" "^7.23.0"
- debug "^4.1.0"
+ "@babel/parser" "^7.24.1"
+ "@babel/types" "^7.24.0"
+ debug "^4.3.1"
globals "^11.1.0"
-"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.7.0":
- version "7.23.0"
- resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb"
- integrity sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==
+"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.24.0", "@babel/types@^7.3.3", "@babel/types@^7.7.0":
+ version "7.24.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
+ integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
dependencies:
- "@babel/helper-string-parser" "^7.22.5"
+ "@babel/helper-string-parser" "^7.23.4"
"@babel/helper-validator-identifier" "^7.22.20"
to-fast-properties "^2.0.0"
@@ -368,16 +369,16 @@
resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9"
integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==
-"@cspell/cspell-bundled-dicts@8.3.2":
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.3.2.tgz#649ed168a72cb49a7d83f3840ab6933a8beba68d"
- integrity sha512-3ubOgz1/MDixJbq//0rQ2omB3cSdhVJDviERZeiREGz4HOq84aaK1Fqbw5SjNZHvhpoq+AYXm6kJbIAH8YhKgg==
+"@cspell/cspell-bundled-dicts@8.6.1":
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/@cspell/cspell-bundled-dicts/-/cspell-bundled-dicts-8.6.1.tgz#127b11ac24885aa4b725ab4ea6c0a0a18927e513"
+ integrity sha512-s6Av1xIgctYLuUiazKZjQ2WRUXc9dU38BOZXwM/lb7y8grQMEuTjST1c+8MOkZkppx48/sO7GHIF3k9rEzD3fg==
dependencies:
"@cspell/dict-ada" "^4.0.2"
"@cspell/dict-aws" "^4.0.1"
"@cspell/dict-bash" "^4.1.3"
- "@cspell/dict-companies" "^3.0.29"
- "@cspell/dict-cpp" "^5.0.10"
+ "@cspell/dict-companies" "^3.0.31"
+ "@cspell/dict-cpp" "^5.1.3"
"@cspell/dict-cryptocurrencies" "^5.0.0"
"@cspell/dict-csharp" "^4.0.2"
"@cspell/dict-css" "^4.0.12"
@@ -388,68 +389,70 @@
"@cspell/dict-elixir" "^4.0.3"
"@cspell/dict-en-common-misspellings" "^2.0.0"
"@cspell/dict-en-gb" "1.1.33"
- "@cspell/dict-en_us" "^4.3.13"
+ "@cspell/dict-en_us" "^4.3.17"
"@cspell/dict-filetypes" "^3.0.3"
"@cspell/dict-fonts" "^4.0.0"
"@cspell/dict-fsharp" "^1.0.1"
"@cspell/dict-fullstack" "^3.1.5"
- "@cspell/dict-gaming-terms" "^1.0.4"
+ "@cspell/dict-gaming-terms" "^1.0.5"
"@cspell/dict-git" "^3.0.0"
"@cspell/dict-golang" "^6.0.5"
"@cspell/dict-haskell" "^4.0.1"
"@cspell/dict-html" "^4.0.5"
"@cspell/dict-html-symbol-entities" "^4.0.0"
"@cspell/dict-java" "^5.0.6"
+ "@cspell/dict-julia" "^1.0.1"
"@cspell/dict-k8s" "^1.0.2"
"@cspell/dict-latex" "^4.0.0"
"@cspell/dict-lorem-ipsum" "^4.0.0"
"@cspell/dict-lua" "^4.0.3"
"@cspell/dict-makefile" "^1.0.0"
"@cspell/dict-node" "^4.0.3"
- "@cspell/dict-npm" "^5.0.14"
- "@cspell/dict-php" "^4.0.5"
+ "@cspell/dict-npm" "^5.0.15"
+ "@cspell/dict-php" "^4.0.6"
"@cspell/dict-powershell" "^5.0.3"
- "@cspell/dict-public-licenses" "^2.0.5"
+ "@cspell/dict-public-licenses" "^2.0.6"
"@cspell/dict-python" "^4.1.11"
"@cspell/dict-r" "^2.0.1"
"@cspell/dict-ruby" "^5.0.2"
- "@cspell/dict-rust" "^4.0.1"
+ "@cspell/dict-rust" "^4.0.2"
"@cspell/dict-scala" "^5.0.0"
- "@cspell/dict-software-terms" "^3.3.15"
+ "@cspell/dict-software-terms" "^3.3.18"
"@cspell/dict-sql" "^2.1.3"
"@cspell/dict-svelte" "^1.0.2"
"@cspell/dict-swift" "^2.0.1"
+ "@cspell/dict-terraform" "^1.0.0"
"@cspell/dict-typescript" "^3.1.2"
"@cspell/dict-vue" "^3.0.0"
-"@cspell/cspell-json-reporter@8.3.2":
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.3.2.tgz#314f7b7deb465a7b94b03405c3498d9b96d410ab"
- integrity sha512-gHSz4jXMJPcxx+lOGfXhHuoyenAWQ8PVA/atHFrWYKo1LzKTbpkEkrsDnlX8QNJubc3EMH63Uy+lOIaFDVyHiQ==
+"@cspell/cspell-json-reporter@8.6.1":
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/@cspell/cspell-json-reporter/-/cspell-json-reporter-8.6.1.tgz#d92e86a196d9f560cde49bd37139f7a9d8cc5ec3"
+ integrity sha512-75cmJgU9iQgrDnLFIUyvgybySJJi29BPw71z+8ZO9WhNofufxoSjaWepZeYV2nK0nHXM+MbdQG5Mmj/Lv6J1FA==
dependencies:
- "@cspell/cspell-types" "8.3.2"
+ "@cspell/cspell-types" "8.6.1"
-"@cspell/cspell-pipe@8.3.2":
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-8.3.2.tgz#72b986c6c03ed9894d5ddafdcb435973336216b9"
- integrity sha512-GZmDwvQGOjQi3IjD4k9xXeVTDANczksOsgVKb3v2QZk9mR4Qj8c6Uarjd4AgSiIhu/wBliJfzr5rWFJu4X2VfQ==
+"@cspell/cspell-pipe@8.6.1":
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/@cspell/cspell-pipe/-/cspell-pipe-8.6.1.tgz#b4ae588a331b0751be1e7e11211bcc3b54358233"
+ integrity sha512-guIlGhhOLQwfqevBSgp26b+SX4I1hCH+puAksWAk93bybKkcGtGpcavAQSN9qvamox4zcHnvGutEPF+UcXuceQ==
-"@cspell/cspell-resolver@8.3.2":
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/@cspell/cspell-resolver/-/cspell-resolver-8.3.2.tgz#e4a981ed8fc2029804d8fa5847e47934a26c5c86"
- integrity sha512-w2Tmb95bzdEz9L4W5qvsP5raZbyEzKL7N2ksU/+yh8NEJcTuExmAl/nMnb3aIk7m2b+kPHnMOcJuwfUMLmyv4A==
+"@cspell/cspell-resolver@8.6.1":
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/@cspell/cspell-resolver/-/cspell-resolver-8.6.1.tgz#0da1b57340cadf414b7416a065d1d166b4c521cc"
+ integrity sha512-ZUbYcvEhfokHG9qfUlIylUqEobG84PiDozCkE8U4h/rTSmYkf/nAD+M6yg+jQ0F2aTFGNbvpKKGFlfXFXveX7A==
dependencies:
global-directory "^4.0.1"
-"@cspell/cspell-service-bus@8.3.2":
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/@cspell/cspell-service-bus/-/cspell-service-bus-8.3.2.tgz#b1c6620232c22c0a7c8b68051e524963285f4768"
- integrity sha512-skTHNyVi74//W/O+f4IauDhm6twA9S2whkylonsIzPxEl4Pn3y2ZEMXNki/MWUwZfDIzKKSxlcREH61g7zCvhg==
+"@cspell/cspell-service-bus@8.6.1":
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/@cspell/cspell-service-bus/-/cspell-service-bus-8.6.1.tgz#ea0b1f257de6de750ef3a4075aa0fbbfbdf92bce"
+ integrity sha512-WpI3fSW8t00UMetfd6tS8f9+xE3+ElIUO/bQ1YKK95TMIRdEUcH+QDxcHM66pJXEm4WiaN3H/MfWk1fIhGlJ8g==
-"@cspell/cspell-types@8.3.2":
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-8.3.2.tgz#35a6d0f1a4c7c2a8a5275bcd41dacf85618f44c3"
- integrity sha512-qS/gWd9ItOrN6ZX5pwC9lJjnBoyiAyhxYq0GUXuV892LQvwrBmECGk6KhsA1lPW7JJS7o57YTAS1jmXnmXMEpg==
+"@cspell/cspell-types@8.6.1":
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/@cspell/cspell-types/-/cspell-types-8.6.1.tgz#a1cfaa0f1412662733f75015992a97072b6d65ef"
+ integrity sha512-MXa9v6sXbbwyiNno7v7vczNph6AsMNWnpMRCcW3h/siXNQYRuMssdxqT5sQJ8Kurh3M/Wo7DlKX4n74elKL3iQ==
"@cspell/dict-ada@^4.0.2":
version "4.0.2"
@@ -466,15 +469,15 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-bash/-/dict-bash-4.1.3.tgz#25fba40825ac10083676ab2c777e471c3f71b36e"
integrity sha512-tOdI3QVJDbQSwPjUkOiQFhYcu2eedmX/PtEpVWg0aFps/r6AyjUQINtTgpqMYnYuq8O1QUIQqnpx21aovcgZCw==
-"@cspell/dict-companies@^3.0.29":
- version "3.0.29"
- resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-3.0.29.tgz#0c102c852a9b1c879cd926c0870e2cfbaf1cd176"
- integrity sha512-F/8XnkqjU7jmSDAcD3LSSX+WxCVUWPssqlO4lzGMIK3MNIUt+d48eSIt3pFAIB/Z9y0ojoLHUtWX9HJ1ZtGrXQ==
+"@cspell/dict-companies@^3.0.31":
+ version "3.0.31"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-companies/-/dict-companies-3.0.31.tgz#f0dacabc5308096c0f12db8a8b802ece604d6bf7"
+ integrity sha512-hKVpV/lcGKP4/DpEPS8P4osPvFH/YVLJaDn9cBIOH6/HSmL5LbFgJNKpMGaYRbhm2FEX56MKE3yn/MNeNYuesQ==
-"@cspell/dict-cpp@^5.0.10":
- version "5.0.10"
- resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-5.0.10.tgz#08c3eb438b631dd3f0fc04f5a6d4b6cab87c8d9b"
- integrity sha512-WCRuDrkFdpmeIR6uXQYKU9loMQKNFS4bUhtHdv5fu4qVyJSh3k/kgmtTm1h1BDTj8EwPRc/RGxS+9Z3b2mnabA==
+"@cspell/dict-cpp@^5.1.3":
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-cpp/-/dict-cpp-5.1.3.tgz#c0c34ccdecc3ff954877a56dbbf07a7bf53b218e"
+ integrity sha512-sqnriXRAInZH9W75C+APBh6dtben9filPqVbIsiRMUXGg+s02ekz0z6LbS7kXeJ5mD2qXoMLBrv13qH2eIwutQ==
"@cspell/dict-cryptocurrencies@^5.0.0":
version "5.0.0"
@@ -531,10 +534,10 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-en-gb/-/dict-en-gb-1.1.33.tgz#7f1fd90fc364a5cb77111b5438fc9fcf9cc6da0e"
integrity sha512-tKSSUf9BJEV+GJQAYGw5e+ouhEe2ZXE620S7BLKe3ZmpnjlNG9JqlnaBhkIMxKnNFkLY2BP/EARzw31AZnOv4g==
-"@cspell/dict-en_us@^4.3.13":
- version "4.3.13"
- resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-4.3.13.tgz#4176be1e1510ac696a0fa33d9773aaffbf83a50d"
- integrity sha512-T6lHiGCjloGNE0d8CogF+efJZPCAP8zdzn+KnlI0Bmjaz5nvG2LTX7CXl1zkOl1nYYev0FuIk9WJ9YPVRjcFbQ==
+"@cspell/dict-en_us@^4.3.17":
+ version "4.3.17"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-en_us/-/dict-en_us-4.3.17.tgz#a39546b9ec4cc4fb1e9607575b2682b1155dda07"
+ integrity sha512-CS0Tb2f2YwQZ4VZ6+WLAO5uOzb0iO/iYSRl34kX4enq6quXxLYzwdfGAwv85wSYHPdga8tGiZFP+p8GPsi2JEg==
"@cspell/dict-filetypes@^3.0.3":
version "3.0.3"
@@ -556,10 +559,10 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-fullstack/-/dict-fullstack-3.1.5.tgz#35d18678161f214575cc613dd95564e05422a19c"
integrity sha512-6ppvo1dkXUZ3fbYn/wwzERxCa76RtDDl5Afzv2lijLoijGGUw5yYdLBKJnx8PJBGNLh829X352ftE7BElG4leA==
-"@cspell/dict-gaming-terms@^1.0.4":
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.4.tgz#b67d89d014d865da6cb40de4269d4c162a00658e"
- integrity sha512-hbDduNXlk4AOY0wFxcDMWBPpm34rpqJBeqaySeoUH70eKxpxm+dvjpoRLJgyu0TmymEICCQSl6lAHTHSDiWKZg==
+"@cspell/dict-gaming-terms@^1.0.5":
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-gaming-terms/-/dict-gaming-terms-1.0.5.tgz#d6ca40eb34a4c99847fd58a7354cd2c651065156"
+ integrity sha512-C3riccZDD3d9caJQQs1+MPfrUrQ+0KHdlj9iUR1QD92FgTOF6UxoBpvHUUZ9YSezslcmpFQK4xQQ5FUGS7uWfw==
"@cspell/dict-git@^3.0.0":
version "3.0.0"
@@ -591,6 +594,11 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-java/-/dict-java-5.0.6.tgz#2462d6fc15f79ec15eb88ecf875b6ad2a7bf7a6a"
integrity sha512-kdE4AHHHrixyZ5p6zyms1SLoYpaJarPxrz8Tveo6gddszBVVwIUZ+JkQE1bWNLK740GWzIXdkznpUfw1hP9nXw==
+"@cspell/dict-julia@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-julia/-/dict-julia-1.0.1.tgz#900001417f1c4ea689530adfcc034c848458a0aa"
+ integrity sha512-4JsCLCRhhLMLiaHpmR7zHFjj1qOauzDI5ZzCNQS31TUMfsOo26jAKDfo0jljFAKgw5M2fEG7sKr8IlPpQAYrmQ==
+
"@cspell/dict-k8s@^1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@cspell/dict-k8s/-/dict-k8s-1.0.2.tgz#b19e66f4ac8a4264c0f3981ac6e23e88a60f1c91"
@@ -621,25 +629,25 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-node/-/dict-node-4.0.3.tgz#5ae0222d72871e82978049f8e11ea627ca42fca3"
integrity sha512-sFlUNI5kOogy49KtPg8SMQYirDGIAoKBO3+cDLIwD4MLdsWy1q0upc7pzGht3mrjuyMiPRUV14Bb0rkVLrxOhg==
-"@cspell/dict-npm@^5.0.14":
- version "5.0.14"
- resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-5.0.14.tgz#1ca3d305390f393bbfa75f41c4db0fd590ce1a9c"
- integrity sha512-k0kC7/W2qG5YII+SW6s+JtvKrkZg651vizi5dv/5G2HmJaeLNgDqBVeeDk/uV+ntBorM66XG4BPMjSxoaIlC5w==
+"@cspell/dict-npm@^5.0.15":
+ version "5.0.15"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-npm/-/dict-npm-5.0.15.tgz#c1d1646011fd0eb8ee119b481818a92223c459d1"
+ integrity sha512-sX0X5YWNW54F4baW7b5JJB6705OCBIZtUqjOghlJNORS5No7QY1IX1zc5FxNNu4gsaCZITAmfMi4ityXEsEThA==
-"@cspell/dict-php@^4.0.5":
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/@cspell/dict-php/-/dict-php-4.0.5.tgz#fa16350d907180a42f16d5e4666e61a97ae9b8b3"
- integrity sha512-9r8ao7Z/mH9Z8pSB7yLtyvcCJWw+/MnQpj7xGVYzIV7V2ZWDRjXZAMgteHMJ37m8oYz64q5d4tiipD300QSetQ==
+"@cspell/dict-php@^4.0.6":
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-php/-/dict-php-4.0.6.tgz#fcdee4d850f279b2757eb55c4f69a3a221ac1f7e"
+ integrity sha512-ySAXisf7twoVFZqBV2o/DKiCLIDTHNqfnj0EfH9OoOUR7HL3rb6zJkm0viLUFDO2G/8SyIi6YrN/6KX+Scjjjg==
"@cspell/dict-powershell@^5.0.3":
version "5.0.3"
resolved "https://registry.yarnpkg.com/@cspell/dict-powershell/-/dict-powershell-5.0.3.tgz#7bceb4e7db39f87479a6d2af3a033ce26796ae49"
integrity sha512-lEdzrcyau6mgzu1ie98GjOEegwVHvoaWtzQnm1ie4DyZgMr+N6D0Iyj1lzvtmt0snvsDFa5F2bsYzf3IMKcpcA==
-"@cspell/dict-public-licenses@^2.0.5":
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.5.tgz#86948b29bd36184943955eaa80bf594488c4dd8a"
- integrity sha512-91HK4dSRri/HqzAypHgduRMarJAleOX5NugoI8SjDLPzWYkwZ1ftuCXSk+fy8DLc3wK7iOaFcZAvbjmnLhVs4A==
+"@cspell/dict-public-licenses@^2.0.6":
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-public-licenses/-/dict-public-licenses-2.0.6.tgz#e6ac8e5cb3b0ef8503d67da14435ae86a875b6cc"
+ integrity sha512-bHqpSpJvLCUcWxj1ov/Ki8WjmESpYwRpQlqfdchekOTc93Huhvjm/RXVN1R4fVf4Hspyem1QVkCGqAmjJMj6sw==
"@cspell/dict-python@^4.1.11":
version "4.1.11"
@@ -658,20 +666,20 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-ruby/-/dict-ruby-5.0.2.tgz#cf1a71380c633dec0857143d3270cb503b10679a"
integrity sha512-cIh8KTjpldzFzKGgrqUX4bFyav5lC52hXDKo4LbRuMVncs3zg4hcSf4HtURY+f2AfEZzN6ZKzXafQpThq3dl2g==
-"@cspell/dict-rust@^4.0.1":
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/@cspell/dict-rust/-/dict-rust-4.0.1.tgz#ef0b88cb3a45265824e2c9ce31b0baa4e1050351"
- integrity sha512-xJSSzHDK2z6lSVaOmMxl3PTOtfoffaxMo7fTcbZUF+SCJzfKbO6vnN9TCGX2sx1RHFDz66Js6goz6SAZQdOwaw==
+"@cspell/dict-rust@^4.0.2":
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-rust/-/dict-rust-4.0.2.tgz#e9111f0105ee6d836a1be8314f47347fd9f8fc3a"
+ integrity sha512-RhziKDrklzOntxAbY3AvNR58wnFGIo3YS8+dNeLY36GFuWOvXDHFStYw5Pod4f/VXbO/+1tXtywCC4zWfB2p1w==
"@cspell/dict-scala@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@cspell/dict-scala/-/dict-scala-5.0.0.tgz#b64365ad559110a36d44ccd90edf7151ea648022"
integrity sha512-ph0twaRoV+ylui022clEO1dZ35QbeEQaKTaV2sPOsdwIokABPIiK09oWwGK9qg7jRGQwVaRPEq0Vp+IG1GpqSQ==
-"@cspell/dict-software-terms@^3.3.15":
- version "3.3.16"
- resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-3.3.16.tgz#c088501687e6a19625800cc612dae8aebaf0f086"
- integrity sha512-ixorEP80LGxAU+ODVSn/CYIDjV0XAlZ2VrBu7CT+PwUFJ7h8o3JX1ywKB4qnt0hHru3JjWFtBoBThmZdrXnREQ==
+"@cspell/dict-software-terms@^3.3.18":
+ version "3.3.18"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-software-terms/-/dict-software-terms-3.3.18.tgz#f25863c316eea195d74b170d41711e2c7402e9ca"
+ integrity sha512-LJZGGMGqS8KzgXJrSMs3T+6GoqHG9z8Bc+rqLzLzbtoR3FbsMasE9U8oP2PmS3q7jJLFjQkzmg508DrcuZuo2g==
"@cspell/dict-sql@^2.1.3":
version "2.1.3"
@@ -688,6 +696,11 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-swift/-/dict-swift-2.0.1.tgz#06ec86e52e9630c441d3c19605657457e33d7bb6"
integrity sha512-gxrCMUOndOk7xZFmXNtkCEeroZRnS2VbeaIPiymGRHj5H+qfTAzAKxtv7jJbVA3YYvEzWcVE2oKDP4wcbhIERw==
+"@cspell/dict-terraform@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/@cspell/dict-terraform/-/dict-terraform-1.0.0.tgz#c7b073bb3a03683f64cc70ccaa55ce9742c46086"
+ integrity sha512-Ak+vy4HP/bOgzf06BAMC30+ZvL9mzv21xLM2XtfnBLTDJGdxlk/nK0U6QT8VfFLqJ0ZZSpyOxGsUebWDCTr/zQ==
+
"@cspell/dict-typescript@^3.1.2":
version "3.1.2"
resolved "https://registry.yarnpkg.com/@cspell/dict-typescript/-/dict-typescript-3.1.2.tgz#14d05f54db2984feaa24ea133b583d19c04cc104"
@@ -698,17 +711,17 @@
resolved "https://registry.yarnpkg.com/@cspell/dict-vue/-/dict-vue-3.0.0.tgz#68ccb432ad93fcb0fd665352d075ae9a64ea9250"
integrity sha512-niiEMPWPV9IeRBRzZ0TBZmNnkK3olkOPYxC1Ny2AX4TGlYRajcW0WUtoSHmvvjZNfWLSg2L6ruiBeuPSbjnG6A==
-"@cspell/dynamic-import@8.3.2":
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/@cspell/dynamic-import/-/dynamic-import-8.3.2.tgz#96fea6b1139164449a8ef92530de670d4c2fb36e"
- integrity sha512-4t0xM5luA3yQhar2xWvYK4wQSDB2r0u8XkpzzJqd57MnJXd7uIAxI0awGUrDXukadRaCo0tDIlMUBemH48SNVg==
+"@cspell/dynamic-import@8.6.1":
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/@cspell/dynamic-import/-/dynamic-import-8.6.1.tgz#bc627779db48b39feb1536741534901c57e0a277"
+ integrity sha512-Fjvkcb5umIAcHfw/iiciYWgO2mXVuRZzQAWPSub6UFCxxcJlRz39YPXa+3O/m3lnXCeo8ChoaEN8qnuV4ogk6g==
dependencies:
import-meta-resolve "^4.0.0"
-"@cspell/strong-weak-map@8.3.2":
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/@cspell/strong-weak-map/-/strong-weak-map-8.3.2.tgz#5a9490e042bbc472089817b50cf51262dfedef65"
- integrity sha512-Mte/2000ap278kRYOUhiGWI7MNr1+A7WSWJmlcdP4CAH5SO20sZI3/cyZLjJJEyapdhK5vaP1L5J9sUcVDHd3A==
+"@cspell/strong-weak-map@8.6.1":
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/@cspell/strong-weak-map/-/strong-weak-map-8.6.1.tgz#33c58f0d799624981399751dfb0c67328f0efdec"
+ integrity sha512-X6/7cy+GGVJFXsfrZapxVKn5mtehNTr7hTlg0bVj3iFoNYEPW9zq9l6WIcI4psmaU8G4DSrNsBK7pp87W3u16A==
"@cspotcode/source-map-support@^0.8.0":
version "0.8.1"
@@ -759,10 +772,10 @@
minimatch "^3.1.2"
strip-json-comments "^3.1.1"
-"@eslint/js@8.55.0":
- version "8.55.0"
- resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.55.0.tgz#b721d52060f369aa259cf97392403cb9ce892ec6"
- integrity sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==
+"@eslint/js@8.57.0":
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f"
+ integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==
"@ethereum-waffle/chai@4.0.10":
version "4.0.10"
@@ -1588,9 +1601,9 @@
"@ethersproject/strings" "^5.7.0"
"@fastify/busboy@^2.0.0":
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.0.0.tgz#f22824caff3ae506b18207bad4126dbc6ccdb6b8"
- integrity sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d"
+ integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==
"@ganache/ethereum-address@0.1.4":
version "0.1.4"
@@ -1654,13 +1667,13 @@
optionalDependencies:
"@trufflesuite/bigint-buffer" "1.1.9"
-"@humanwhocodes/config-array@^0.11.13":
- version "0.11.13"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297"
- integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==
+"@humanwhocodes/config-array@^0.11.14":
+ version "0.11.14"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b"
+ integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==
dependencies:
- "@humanwhocodes/object-schema" "^2.0.1"
- debug "^4.1.1"
+ "@humanwhocodes/object-schema" "^2.0.2"
+ debug "^4.3.1"
minimatch "^3.0.5"
"@humanwhocodes/config-array@^0.5.0":
@@ -1682,28 +1695,16 @@
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
-"@humanwhocodes/object-schema@^2.0.1":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044"
- integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==
+"@humanwhocodes/object-schema@^2.0.2":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3"
+ integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
"@iarna/toml@^2.2.5":
version "2.2.5"
resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c"
integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==
-"@isaacs/cliui@^8.0.2":
- version "8.0.2"
- resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
- integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
- dependencies:
- string-width "^5.1.2"
- string-width-cjs "npm:string-width@^4.2.0"
- strip-ansi "^7.0.1"
- strip-ansi-cjs "npm:strip-ansi@^6.0.1"
- wrap-ansi "^8.1.0"
- wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
-
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -1715,7 +1716,7 @@
js-yaml "^3.13.1"
resolve-from "^5.0.0"
-"@istanbuljs/schema@^0.1.2":
+"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3":
version "0.1.3"
resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98"
integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==
@@ -1912,24 +1913,24 @@
"@types/yargs" "^17.0.8"
chalk "^4.0.0"
-"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2":
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098"
- integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==
+"@jridgewell/gen-mapping@^0.3.5":
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
+ integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
dependencies:
- "@jridgewell/set-array" "^1.0.1"
+ "@jridgewell/set-array" "^1.2.1"
"@jridgewell/sourcemap-codec" "^1.4.10"
- "@jridgewell/trace-mapping" "^0.3.9"
+ "@jridgewell/trace-mapping" "^0.3.24"
"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0":
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
- integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6"
+ integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
-"@jridgewell/set-array@^1.0.1":
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72"
- integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==
+"@jridgewell/set-array@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
+ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
version "1.4.15"
@@ -1944,10 +1945,10 @@
"@jridgewell/resolve-uri" "^3.0.3"
"@jridgewell/sourcemap-codec" "^1.4.10"
-"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9":
- version "0.3.20"
- resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f"
- integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==
+"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25":
+ version "0.3.25"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
+ integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
dependencies:
"@jridgewell/resolve-uri" "^3.1.0"
"@jridgewell/sourcemap-codec" "^1.4.14"
@@ -1962,16 +1963,7 @@
resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-chai-matchers/-/hardhat-zksync-chai-matchers-0.1.4.tgz#105cb0ec1367c8fcd3ce7e3773f747c71fff675b"
integrity sha512-eGQWiImg51fmayoQ7smIK/T6QZkSu38PK7xjp1RIrewGzw2ZgqFWGp40jb5oomkf8yOQPk52Hu4TwE3Ntp8CtA==
-"@matterlabs/hardhat-zksync-deploy@^0.6.1":
- 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-deploy@^0.6.5":
+"@matterlabs/hardhat-zksync-deploy@^0.6.1", "@matterlabs/hardhat-zksync-deploy@^0.6.5":
version "0.6.6"
resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-deploy/-/hardhat-zksync-deploy-0.6.6.tgz#5c86cf7da859844167d62300528c3e6013ee0286"
integrity sha512-QpkxK2wnyQCgaTVLdFATpfiySfr7073yPre9eq5LfKA8VxXWD4WZAuBMq700GL5UyfW9yyHkCdkSzaGigmZ4/Q==
@@ -2022,19 +2014,7 @@
chalk "4.1.2"
dockerode "^3.3.4"
-"@matterlabs/hardhat-zksync-solc@^1.0.5":
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-1.0.6.tgz#7ef8438e6bb15244691600e2afa77aaff7dff9f0"
- integrity sha512-0icYSufXba/Bbb7v2iXuZJ+IbYsiNpR4Wy6UizHnGuFw3OMHgh+saebQphuaN9yyRL2UPGZbPkQFHWBLZj5/xQ==
- dependencies:
- "@nomiclabs/hardhat-docker" "^2.0.0"
- chalk "4.1.2"
- dockerode "^4.0.0"
- fs-extra "^11.1.1"
- proper-lockfile "^4.1.2"
- semver "^7.5.1"
-
-"@matterlabs/hardhat-zksync-solc@^1.1.4":
+"@matterlabs/hardhat-zksync-solc@^1.0.5", "@matterlabs/hardhat-zksync-solc@^1.1.4":
version "1.1.4"
resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-solc/-/hardhat-zksync-solc-1.1.4.tgz#04a2fad6fb6b6944c64ad969080ee65b9af3f617"
integrity sha512-4/usbogh9neewR2/v8Dn2OzqVblZMUuT/iH2MyPZgPRZYQlL4SlZtMvokU9UQjZT6iSoaKCbbdWESHDHSzfUjA==
@@ -2063,15 +2043,19 @@
dockerode "^3.3.4"
"@matterlabs/hardhat-zksync-vyper@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-vyper/-/hardhat-zksync-vyper-1.0.0.tgz#661227401db08ffa6f3934f29d5a0c83ebac713f"
- integrity sha512-RKrzuy/SqnB9AS62lTfm70Z0Wg571Di3B/IOSf3fqiEhwt6Jjc8og3acEUdIdn0TNQUNBoLqZdQdVG9T00yDJA==
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/@matterlabs/hardhat-zksync-vyper/-/hardhat-zksync-vyper-1.0.8.tgz#d5bd496715a1e322b0bf3926b4146b4e18ab64ff"
+ integrity sha512-XR7rbfDuBG5/LZWYfhQTP9gD+U24hSJHDuZ9U55wgIfiQTOxPoztFwEbQNiC39vjT5MjP/Nv8/IDrlEBkaVCgw==
dependencies:
"@nomiclabs/hardhat-docker" "^2.0.0"
+ chai "^4.3.6"
chalk "4.1.2"
- dockerode "^3.3.4"
+ dockerode "^4.0.2"
fs-extra "^11.1.1"
semver "^7.5.4"
+ sinon "^17.0.1"
+ sinon-chai "^3.7.0"
+ undici "^5.14.0"
"@matterlabs/prettier-config@^1.0.3":
version "1.0.3"
@@ -2089,28 +2073,28 @@
tweetnacl "^1.0.3"
tweetnacl-util "^0.15.1"
-"@noble/curves@1.1.0", "@noble/curves@~1.1.0":
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.1.0.tgz#f13fc667c89184bc04cccb9b11e8e7bae27d8c3d"
- integrity sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==
+"@noble/curves@1.3.0", "@noble/curves@~1.3.0":
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e"
+ integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==
dependencies:
- "@noble/hashes" "1.3.1"
+ "@noble/hashes" "1.3.3"
"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12"
integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==
-"@noble/hashes@1.3.1":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9"
- integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==
-
-"@noble/hashes@~1.3.0", "@noble/hashes@~1.3.1":
+"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2":
version "1.3.3"
resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699"
integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==
+"@noble/hashes@^1.4.0":
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426"
+ integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==
+
"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0":
version "1.7.1"
resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c"
@@ -2137,6 +2121,66 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
+"@nomicfoundation/edr-darwin-arm64@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.4.tgz#e5aac2b7726f44cffe120bdd7e25e1f120471591"
+ integrity sha512-tjavrUFLWnkn0PI+jk0D83hP2jjbmeXT1QLd5NtIleyGrJ00ZWVl+sfuA2Lle3kzfOceoI2VTR0n1pZB4KJGbQ==
+
+"@nomicfoundation/edr-darwin-x64@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.4.tgz#cbcc0a2dcda0a7c0a900a74efc6918cff134dc23"
+ integrity sha512-dXO0vlIoBosp8gf5/ah3dESMymjwit0Daef1E4Ew3gZ8q3LAdku0RC+YEQJi9f0I3QNfdgIrBTzibRZUoP+kVA==
+
+"@nomicfoundation/edr-linux-arm64-gnu@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.4.tgz#12073f97d310176bb24ad7d48c25128ea8eff093"
+ integrity sha512-dv38qmFUaqkkeeA9S0JjerqruytTfHav7gbPLpZUAEXPlJGo49R0+HQxd45I0msbm6NAXbkmKEchTLApp1ohaA==
+
+"@nomicfoundation/edr-linux-arm64-musl@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.4.tgz#c9bc685d4d14bf21d9c3e326edd44e009e24492d"
+ integrity sha512-CfEsb6gdCMVIlRSpWYTxoongEKHB60V6alE/y8mkfjIo7tA95wyiuvCtyo3fpiia3wQV7XoMYgIJHObHiKLKtA==
+
+"@nomicfoundation/edr-linux-x64-gnu@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.4.tgz#37486cbe317b8caf7961e500fc0150c45c895a56"
+ integrity sha512-V0CpJA2lYWulgTR+zP11ftBAEwkpMAAki/AuMu3vd7HoPfjwIDzWDQR5KFU17qFmqAVz0ICRxsxDlvvBZ/PUxA==
+
+"@nomicfoundation/edr-linux-x64-musl@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.4.tgz#399278807100a1833f6c8a39c17d5beaaf7a9223"
+ integrity sha512-0sgTrwZajarukerU/QSb+oRdlQLnJdd7of8OlXq2wtpeTNTqemgCOwY2l2qImbWboMpVrYgcmGbINXNVPCmuJw==
+
+"@nomicfoundation/edr-win32-arm64-msvc@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.3.4.tgz#879028e2708538fd54efc349c1a4de107a15abb4"
+ integrity sha512-bOl3vhMtV0W9ozUMF5AZRBWw1183hhhx+e1YJdDLMaqNkBUFYi2CZbMYefDylq2OKQtOQ0gPLhZvn+z2D21Ztw==
+
+"@nomicfoundation/edr-win32-ia32-msvc@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.3.4.tgz#97d54b8cfbbafa1cd2001bb115e583f1169bf9ae"
+ integrity sha512-yKQCpAX0uB2dalsSwOkau3yfNXkwBJa/Ks2OPl9AjHqJ+E8AqvBEB9jRpfQrdPzElMsgZuN4mqE+wh+JxY+0Aw==
+
+"@nomicfoundation/edr-win32-x64-msvc@0.3.4":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.4.tgz#abfc447eb6bd1a9be868bec5c9d14546398ab609"
+ integrity sha512-fResvsL/fSucep1K5W6iOs8lqqKKovHLsAmigMzAYVovqkyZKgCGVS/D8IVxA0nxuGCOlNxFnVmwWtph3pbKWA==
+
+"@nomicfoundation/edr@^0.3.1":
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.3.4.tgz#e8eaf41963460139c47b0785f1a6a2a1c1b24ae0"
+ integrity sha512-e4jzVeJ+VTKBFzNgKDbSVnGVbHYNZHIfMdgifQBugXPiIa6QEUzZqleh2+y4lhkXcCthnFyrTYe3jiEpUzr3cA==
+ optionalDependencies:
+ "@nomicfoundation/edr-darwin-arm64" "0.3.4"
+ "@nomicfoundation/edr-darwin-x64" "0.3.4"
+ "@nomicfoundation/edr-linux-arm64-gnu" "0.3.4"
+ "@nomicfoundation/edr-linux-arm64-musl" "0.3.4"
+ "@nomicfoundation/edr-linux-x64-gnu" "0.3.4"
+ "@nomicfoundation/edr-linux-x64-musl" "0.3.4"
+ "@nomicfoundation/edr-win32-arm64-msvc" "0.3.4"
+ "@nomicfoundation/edr-win32-ia32-msvc" "0.3.4"
+ "@nomicfoundation/edr-win32-x64-msvc" "0.3.4"
+
"@nomicfoundation/ethereumjs-block@5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.1.tgz#6f89664f55febbd723195b6d0974773d29ee133d"
@@ -2150,19 +2194,6 @@
ethereum-cryptography "0.1.3"
ethers "^5.7.1"
-"@nomicfoundation/ethereumjs-block@5.0.2":
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04"
- integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==
- dependencies:
- "@nomicfoundation/ethereumjs-common" "4.0.2"
- "@nomicfoundation/ethereumjs-rlp" "5.0.2"
- "@nomicfoundation/ethereumjs-trie" "6.0.2"
- "@nomicfoundation/ethereumjs-tx" "5.0.2"
- "@nomicfoundation/ethereumjs-util" "9.0.2"
- ethereum-cryptography "0.1.3"
- ethers "^5.7.1"
-
"@nomicfoundation/ethereumjs-blockchain@7.0.1":
version "7.0.1"
resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.1.tgz#80e0bd3535bfeb9baa29836b6f25123dab06a726"
@@ -2182,25 +2213,6 @@
lru-cache "^5.1.1"
memory-level "^1.0.0"
-"@nomicfoundation/ethereumjs-blockchain@7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446"
- integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==
- dependencies:
- "@nomicfoundation/ethereumjs-block" "5.0.2"
- "@nomicfoundation/ethereumjs-common" "4.0.2"
- "@nomicfoundation/ethereumjs-ethash" "3.0.2"
- "@nomicfoundation/ethereumjs-rlp" "5.0.2"
- "@nomicfoundation/ethereumjs-trie" "6.0.2"
- "@nomicfoundation/ethereumjs-tx" "5.0.2"
- "@nomicfoundation/ethereumjs-util" "9.0.2"
- abstract-level "^1.0.3"
- debug "^4.3.3"
- ethereum-cryptography "0.1.3"
- level "^8.0.0"
- lru-cache "^5.1.1"
- memory-level "^1.0.0"
-
"@nomicfoundation/ethereumjs-common@4.0.1":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.1.tgz#4702d82df35b07b5407583b54a45bf728e46a2f0"
@@ -2209,13 +2221,12 @@
"@nomicfoundation/ethereumjs-util" "9.0.1"
crc-32 "^1.2.0"
-"@nomicfoundation/ethereumjs-common@4.0.2":
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3"
- integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==
+"@nomicfoundation/ethereumjs-common@4.0.4":
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb"
+ integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==
dependencies:
- "@nomicfoundation/ethereumjs-util" "9.0.2"
- crc-32 "^1.2.0"
+ "@nomicfoundation/ethereumjs-util" "9.0.4"
"@nomicfoundation/ethereumjs-ethash@3.0.1":
version "3.0.1"
@@ -2229,18 +2240,6 @@
bigint-crypto-utils "^3.0.23"
ethereum-cryptography "0.1.3"
-"@nomicfoundation/ethereumjs-ethash@3.0.2":
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca"
- integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==
- dependencies:
- "@nomicfoundation/ethereumjs-block" "5.0.2"
- "@nomicfoundation/ethereumjs-rlp" "5.0.2"
- "@nomicfoundation/ethereumjs-util" "9.0.2"
- abstract-level "^1.0.3"
- bigint-crypto-utils "^3.0.23"
- ethereum-cryptography "0.1.3"
-
"@nomicfoundation/ethereumjs-evm@2.0.1":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.1.tgz#f35681e203363f69ce2b3d3bf9f44d4e883ca1f1"
@@ -2255,29 +2254,15 @@
mcl-wasm "^0.7.1"
rustbn.js "~0.2.0"
-"@nomicfoundation/ethereumjs-evm@2.0.2":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6"
- integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==
- dependencies:
- "@ethersproject/providers" "^5.7.1"
- "@nomicfoundation/ethereumjs-common" "4.0.2"
- "@nomicfoundation/ethereumjs-tx" "5.0.2"
- "@nomicfoundation/ethereumjs-util" "9.0.2"
- debug "^4.3.3"
- ethereum-cryptography "0.1.3"
- mcl-wasm "^0.7.1"
- rustbn.js "~0.2.0"
-
"@nomicfoundation/ethereumjs-rlp@5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.1.tgz#0b30c1cf77d125d390408e391c4bb5291ef43c28"
integrity sha512-xtxrMGa8kP4zF5ApBQBtjlSbN5E2HI8m8FYgVSYAnO6ssUoY5pVPGy2H8+xdf/bmMa22Ce8nWMH3aEW8CcqMeQ==
-"@nomicfoundation/ethereumjs-rlp@5.0.2":
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea"
- integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==
+"@nomicfoundation/ethereumjs-rlp@5.0.4":
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30"
+ integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==
"@nomicfoundation/ethereumjs-statemanager@2.0.1":
version "2.0.1"
@@ -2291,18 +2276,6 @@
ethers "^5.7.1"
js-sdsl "^4.1.4"
-"@nomicfoundation/ethereumjs-statemanager@2.0.2":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0"
- integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==
- dependencies:
- "@nomicfoundation/ethereumjs-common" "4.0.2"
- "@nomicfoundation/ethereumjs-rlp" "5.0.2"
- debug "^4.3.3"
- ethereum-cryptography "0.1.3"
- ethers "^5.7.1"
- js-sdsl "^4.1.4"
-
"@nomicfoundation/ethereumjs-trie@6.0.1":
version "6.0.1"
resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.1.tgz#662c55f6b50659fd4b22ea9f806a7401cafb7717"
@@ -2314,17 +2287,6 @@
ethereum-cryptography "0.1.3"
readable-stream "^3.6.0"
-"@nomicfoundation/ethereumjs-trie@6.0.2":
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835"
- integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==
- dependencies:
- "@nomicfoundation/ethereumjs-rlp" "5.0.2"
- "@nomicfoundation/ethereumjs-util" "9.0.2"
- "@types/readable-stream" "^2.3.13"
- ethereum-cryptography "0.1.3"
- readable-stream "^3.6.0"
-
"@nomicfoundation/ethereumjs-tx@5.0.1":
version "5.0.1"
resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.1.tgz#7629dc2036b4a33c34e9f0a592b43227ef4f0c7d"
@@ -2337,16 +2299,14 @@
"@nomicfoundation/ethereumjs-util" "9.0.1"
ethereum-cryptography "0.1.3"
-"@nomicfoundation/ethereumjs-tx@5.0.2":
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56"
- integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==
+"@nomicfoundation/ethereumjs-tx@5.0.4":
+ version "5.0.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da"
+ integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==
dependencies:
- "@chainsafe/ssz" "^0.9.2"
- "@ethersproject/providers" "^5.7.2"
- "@nomicfoundation/ethereumjs-common" "4.0.2"
- "@nomicfoundation/ethereumjs-rlp" "5.0.2"
- "@nomicfoundation/ethereumjs-util" "9.0.2"
+ "@nomicfoundation/ethereumjs-common" "4.0.4"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.4"
+ "@nomicfoundation/ethereumjs-util" "9.0.4"
ethereum-cryptography "0.1.3"
"@nomicfoundation/ethereumjs-util@9.0.1":
@@ -2358,13 +2318,12 @@
"@nomicfoundation/ethereumjs-rlp" "5.0.1"
ethereum-cryptography "0.1.3"
-"@nomicfoundation/ethereumjs-util@9.0.2":
- version "9.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d"
- integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==
+"@nomicfoundation/ethereumjs-util@9.0.4":
+ version "9.0.4"
+ resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38"
+ integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==
dependencies:
- "@chainsafe/ssz" "^0.10.0"
- "@nomicfoundation/ethereumjs-rlp" "5.0.2"
+ "@nomicfoundation/ethereumjs-rlp" "5.0.4"
ethereum-cryptography "0.1.3"
"@nomicfoundation/ethereumjs-vm@7.0.1":
@@ -2386,25 +2345,6 @@
mcl-wasm "^0.7.1"
rustbn.js "~0.2.0"
-"@nomicfoundation/ethereumjs-vm@7.0.2":
- version "7.0.2"
- resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6"
- integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==
- dependencies:
- "@nomicfoundation/ethereumjs-block" "5.0.2"
- "@nomicfoundation/ethereumjs-blockchain" "7.0.2"
- "@nomicfoundation/ethereumjs-common" "4.0.2"
- "@nomicfoundation/ethereumjs-evm" "2.0.2"
- "@nomicfoundation/ethereumjs-rlp" "5.0.2"
- "@nomicfoundation/ethereumjs-statemanager" "2.0.2"
- "@nomicfoundation/ethereumjs-trie" "6.0.2"
- "@nomicfoundation/ethereumjs-tx" "5.0.2"
- "@nomicfoundation/ethereumjs-util" "9.0.2"
- debug "^4.3.3"
- ethereum-cryptography "0.1.3"
- mcl-wasm "^0.7.1"
- rustbn.js "~0.2.0"
-
"@nomicfoundation/hardhat-chai-matchers@^1.0.3", "@nomicfoundation/hardhat-chai-matchers@^1.0.6":
version "1.0.6"
resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-1.0.6.tgz#72a2e312e1504ee5dd73fe302932736432ba96bc"
@@ -2535,14 +2475,6 @@
table "^6.8.0"
undici "^5.14.0"
-"@nomiclabs/hardhat-solpp@^2.0.0", "@nomiclabs/hardhat-solpp@^2.0.1":
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-solpp/-/hardhat-solpp-2.0.1.tgz#04039b3745b8d2b48c9b8bec6509e9785631aaba"
- integrity sha512-aWYvB91GPJcnye4Ph26Jd9BfBNNisI1iRNSbHB2i09OpxucSHAPMvvqTfWDN1HE5EMjqlTJ2rQLdlDcYqQxPJw==
- dependencies:
- fs-extra "^7.0.1"
- solpp "^0.11.5"
-
"@nomiclabs/hardhat-vyper@^3.0.5":
version "3.0.5"
resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-vyper/-/hardhat-vyper-3.0.5.tgz#44594b8a27e9c627534013fdebe6a485275f846e"
@@ -2570,26 +2502,14 @@
integrity sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg==
"@openzeppelin/contracts@^4.8.0":
- version "4.9.3"
- resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.3.tgz#00d7a8cf35a475b160b3f0293a6403c511099364"
- integrity sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==
-
-"@pkgjs/parseargs@^0.11.0":
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33"
- integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==
+ version "4.9.6"
+ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.6.tgz#2a880a24eb19b4f8b25adc2a5095f2aa27f39677"
+ integrity sha512-xSmezSupL+y9VkHZJGDoCBpmnB2ogM13ccaYDWqJTfS3dbuHkgjuwDFUmaFauBCboQMGB/S5UqUl2y54X99BmA==
-"@pkgr/utils@^2.4.2":
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/@pkgr/utils/-/utils-2.4.2.tgz#9e638bbe9a6a6f165580dc943f138fd3309a2cbc"
- integrity sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==
- dependencies:
- cross-spawn "^7.0.3"
- fast-glob "^3.3.0"
- is-glob "^4.0.3"
- open "^9.1.0"
- picocolors "^1.0.0"
- tslib "^2.6.0"
+"@pkgr/core@^0.1.0":
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31"
+ integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
@@ -2681,10 +2601,10 @@
path-browserify "^1.0.0"
url "^0.11.0"
-"@scure/base@~1.1.0":
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.3.tgz#8584115565228290a6c6c4961973e0903bb3df2f"
- integrity sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==
+"@scure/base@~1.1.0", "@scure/base@~1.1.4":
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d"
+ integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==
"@scure/bip32@1.1.5":
version "1.1.5"
@@ -2695,14 +2615,14 @@
"@noble/secp256k1" "~1.7.0"
"@scure/base" "~1.1.0"
-"@scure/bip32@1.3.1":
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.1.tgz#7248aea723667f98160f593d621c47e208ccbb10"
- integrity sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==
+"@scure/bip32@1.3.3":
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8"
+ integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==
dependencies:
- "@noble/curves" "~1.1.0"
- "@noble/hashes" "~1.3.1"
- "@scure/base" "~1.1.0"
+ "@noble/curves" "~1.3.0"
+ "@noble/hashes" "~1.3.2"
+ "@scure/base" "~1.1.4"
"@scure/bip39@1.1.1":
version "1.1.1"
@@ -2712,13 +2632,13 @@
"@noble/hashes" "~1.2.0"
"@scure/base" "~1.1.0"
-"@scure/bip39@1.2.1":
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a"
- integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==
+"@scure/bip39@1.2.2":
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527"
+ integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==
dependencies:
- "@noble/hashes" "~1.3.0"
- "@scure/base" "~1.1.0"
+ "@noble/hashes" "~1.3.2"
+ "@scure/base" "~1.1.4"
"@sentry/core@5.30.0":
version "5.30.0"
@@ -2801,9 +2721,9 @@
type-detect "4.0.8"
"@sinonjs/commons@^3.0.0":
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72"
- integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd"
+ integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==
dependencies:
type-detect "4.0.8"
@@ -2843,19 +2763,27 @@
antlr4ts "^0.5.0-alpha.4"
"@solidity-parser/parser@^0.16.0":
- version "0.16.1"
- resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.1.tgz#f7c8a686974e1536da0105466c4db6727311253c"
- integrity sha512-PdhRFNhbTtu3x8Axm0uYpqOy/lODYQK+MlYSgqIsq2L8SFYEHJPHNUiOTAJbDGzNjjr1/n9AcIayxafR/fWmYw==
- dependencies:
- antlr4ts "^0.5.0-alpha.4"
-
-"@solidity-parser/parser@^0.16.2":
version "0.16.2"
resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.2.tgz#42cb1e3d88b3e8029b0c9befff00b634cd92d2fa"
integrity sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==
dependencies:
antlr4ts "^0.5.0-alpha.4"
+"@solidity-parser/parser@^0.17.0":
+ version "0.17.0"
+ resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.17.0.tgz#52a2fcc97ff609f72011014e4c5b485ec52243ef"
+ integrity sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==
+
+"@solidity-parser/parser@^0.18.0":
+ version "0.18.0"
+ resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.18.0.tgz#8e77a02a09ecce957255a2f48c9a7178ec191908"
+ integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==
+
+"@tootallnate/quickjs-emscripten@^0.23.0":
+ version "0.23.0"
+ resolved "https://registry.yarnpkg.com/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz#db4ecfd499a9765ab24002c3b696d02e6d32a12c"
+ integrity sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==
+
"@trufflesuite/bigint-buffer@1.1.10":
version "1.1.10"
resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692"
@@ -2881,9 +2809,9 @@
path-browserify "^1.0.1"
"@tsconfig/node10@^1.0.7":
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
- integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2"
+ integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==
"@tsconfig/node12@^1.0.7":
version "1.0.11"
@@ -2926,9 +2854,9 @@
integrity sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==
"@types/babel__core@^7.1.14":
- version "7.20.4"
- resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.4.tgz#26a87347e6c6f753b3668398e34496d6d9ac6ac0"
- integrity sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017"
+ integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==
dependencies:
"@babel/parser" "^7.20.7"
"@babel/types" "^7.20.7"
@@ -2937,9 +2865,9 @@
"@types/babel__traverse" "*"
"@types/babel__generator@*":
- version "7.6.7"
- resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.7.tgz#a7aebf15c7bc0eb9abd638bdb5c0b8700399c9d0"
- integrity sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==
+ version "7.6.8"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab"
+ integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==
dependencies:
"@babel/types" "^7.0.0"
@@ -2952,9 +2880,9 @@
"@babel/types" "^7.0.0"
"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
- version "7.20.4"
- resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.4.tgz#ec2c06fed6549df8bc0eb4615b683749a4a92e1b"
- integrity sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==
+ version "7.20.5"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd"
+ integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==
dependencies:
"@babel/types" "^7.20.7"
@@ -2979,15 +2907,10 @@
dependencies:
"@types/chai" "*"
-"@types/chai@*":
- version "4.3.11"
- resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.11.tgz#e95050bf79a932cb7305dd130254ccdf9bde671c"
- integrity sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==
-
-"@types/chai@^4.2.21":
- version "4.3.9"
- resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.9.tgz#144d762491967db8c6dea38e03d2206c2623feec"
- integrity sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==
+"@types/chai@*", "@types/chai@^4.2.21":
+ version "4.3.14"
+ resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.14.tgz#ae3055ea2be43c91c9fd700a36d67820026d96e6"
+ integrity sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w==
"@types/concat-stream@^1.6.0":
version "1.6.1"
@@ -3050,9 +2973,9 @@
"@types/istanbul-lib-report" "*"
"@types/jest@^29.0.3":
- version "29.5.7"
- resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.7.tgz#2c0dafe2715dd958a455bc10e2ec3e1ec47b5036"
- integrity sha512-HLyetab6KVPSiF+7pFcUyMeLsx25LDNDemw9mGsJBkai/oouwrjTycocSDYopMEwFhN2Y4s9oPyOCZNofgSt2g==
+ version "29.5.12"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544"
+ integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==
dependencies:
expect "^29.0.0"
pretty-format "^29.0.0"
@@ -3082,9 +3005,9 @@
"@types/node" "*"
"@types/lodash@^4.14.199":
- version "4.14.202"
- resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.202.tgz#f09dbd2fb082d507178b2f2a5c7e74bd72ff98f8"
- integrity sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==
+ version "4.17.0"
+ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3"
+ integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==
"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0":
version "5.1.1"
@@ -3111,24 +3034,16 @@
"@types/mocha" "*"
"@types/mocha@*":
- version "10.0.4"
- resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.4.tgz#b5331955ebca216604691fd4fcd2dbdc2bd559a4"
- integrity sha512-xKU7bUjiFTIttpWaIZ9qvgg+22O1nmbA+HRxdlR+u6TWsGfmFdXrheJoK4fFxrHNVIOBDvDNKZG+LYBpMHpX3w==
+ version "10.0.6"
+ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b"
+ integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==
"@types/mocha@^8.2.3":
version "8.2.3"
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323"
integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw==
-"@types/node-fetch@^2.5.7":
- version "2.6.7"
- resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.7.tgz#a1abe2ce24228b58ad97f99480fdcf9bbc6ab16d"
- integrity sha512-lX17GZVpJ/fuCjguZ5b3TjEbSENxmEk1B2z02yoXSK9WMEWRivhdSY73wWMn6bpcCDAOh6qAdktpKHIlkDk2lg==
- dependencies:
- "@types/node" "*"
- form-data "^4.0.0"
-
-"@types/node-fetch@^2.6.1":
+"@types/node-fetch@^2.5.7", "@types/node-fetch@^2.6.1":
version "2.6.11"
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.11.tgz#9b39b78665dae0e82a08f02f4967d62c66f95d24"
integrity sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==
@@ -3136,10 +3051,10 @@
"@types/node" "*"
form-data "^4.0.0"
-"@types/node@*":
- version "20.8.10"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.10.tgz#a5448b895c753ae929c26ce85cab557c6d4a365e"
- integrity sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==
+"@types/node@*", "@types/node@>=13.7.0":
+ version "20.12.7"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384"
+ integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==
dependencies:
undici-types "~5.26.4"
@@ -3148,13 +3063,6 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.6.tgz#df929d1bb2eee5afdda598a41930fe50b43eaa6a"
integrity sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==
-"@types/node@>=13.7.0":
- version "20.10.4"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198"
- integrity sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==
- dependencies:
- undici-types "~5.26.4"
-
"@types/node@^10.0.3":
version "10.17.60"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b"
@@ -3166,9 +3074,9 @@
integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
"@types/node@^18.19.15":
- version "18.19.15"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.15.tgz#313a9d75435669a57fc28dc8694e7f4c4319f419"
- integrity sha512-AMZ2UWx+woHNfM11PyAEQmfSxi05jm9OlkxczuHeEqmvwPkYj6MWv44gbzDPefYOLysTOFyI3ziiy2ONmUZfpA==
+ version "18.19.31"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.31.tgz#b7d4a00f7cb826b60a543cebdbda5d189aaecdcd"
+ integrity sha512-ArgCD39YpyyrtFKIqMDvjz79jto5fcI/SVUs2HwB+f0dAzq68yqOdyaSivLiLugSziTpNXLQrVb7RZFmdZzbhA==
dependencies:
undici-types "~5.26.4"
@@ -3178,16 +3086,16 @@
integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==
"@types/pbkdf2@^3.0.0":
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.1.tgz#c290c1f0d3dc364af94c2c5ee92046a13b7f89fd"
- integrity sha512-4HCoGwR3221nOc7G0Z/6KgTNGgaaFGkbGrtUJsB+zlKX2LBVjFHHIUkieMBgHHXgBH5Gq6dZHJKdBYdtlhBQvw==
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc"
+ integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==
dependencies:
"@types/node" "*"
"@types/pg@^8.10.3":
- version "8.10.8"
- resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.10.8.tgz#20e8d653baba70c946df5a12601d8972da7cd043"
- integrity sha512-EqSUgXvnbEnMkIdffX1cDsmbvNt5Fzoim17JRwdaHaCpeTz440FocCxcStU9GgJvA+1aqtHEjHgFlH0d8ZCjAg==
+ version "8.11.5"
+ resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.11.5.tgz#a1ffb4dc4a46a83bda096cb298051a5b171de167"
+ integrity sha512-2xMjVviMxneZHDHX5p5S6tsRRs7TpDHeeK7kTTMe/kAC/mRRNjWHjZg0rkiY+e17jXSZV3zJYDxXV8Cy72/Vuw==
dependencies:
"@types/node" "*"
pg-protocol "*"
@@ -3199,9 +3107,9 @@
integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==
"@types/qs@^6.2.31":
- version "6.9.10"
- resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.10.tgz#0af26845b5067e1c9a622658a51f60a3934d51e8"
- integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==
+ version "6.9.14"
+ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b"
+ integrity sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==
"@types/readable-stream@^2.3.13":
version "2.3.15"
@@ -3219,9 +3127,9 @@
"@types/node" "*"
"@types/secp256k1@^4.0.1":
- version "4.0.5"
- resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.5.tgz#14b1766b4fbc198b0af5599d9fd21c89056633ce"
- integrity sha512-aIonTBMErtE3T9MxDvTZRzcrT/mCqpEZBw3CCY/i+oG9n57N/+7obBkhFgavUAIrX21bU0LHg1XRgtaLdelBhA==
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf"
+ integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==
dependencies:
"@types/node" "*"
@@ -3231,44 +3139,44 @@
integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==
"@types/semver@^7.5.0":
- version "7.5.4"
- resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.4.tgz#0a41252ad431c473158b22f9bfb9a63df7541cff"
- integrity sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==
+ version "7.5.8"
+ resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e"
+ integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==
"@types/stack-utils@^2.0.0":
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.2.tgz#01284dde9ef4e6d8cef6422798d9a3ad18a66f8b"
- integrity sha512-g7CK9nHdwjK2n0ymT2CW698FuWJRIx+RP6embAzZ2Qi8/ilIrA1Imt2LVSeHUzKvpoi7BhmmQcXz95eS0f2JXw==
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8"
+ integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==
"@types/tabtab@^3.0.1":
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/@types/tabtab/-/tabtab-3.0.3.tgz#094798b7e32d45acb5c808315b8363391e3d7db2"
- integrity sha512-7oXhf9jSJ9vGvLWBp3dL+fhLdHaHUJ2Lyr+QxPifVutUN0FMvEVr0LI7MFLtRjlg33O71gFeQ9uE8zZmtind4A==
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/@types/tabtab/-/tabtab-3.0.4.tgz#60db2b6989ef5c166fd4ace9b4a1226728746169"
+ integrity sha512-gmh8JsmIYPGRqk8Xb4dmulV37TpLwg0Quo3GJ0LgEcl4v0O92F14PGebBd7LHv9GBEw2KbmBSrvU0/NzIy5AoA==
dependencies:
"@types/node" "*"
"@types/yargs-parser@*":
- version "21.0.2"
- resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.2.tgz#7bd04c5da378496ef1695a1008bf8f71847a8b8b"
- integrity sha512-5qcvofLPbfjmBfKaLfj/+f+Sbd6pN4zl7w7VSVI5uz7m9QZTuB2aZAa2uo1wHFBNN2x6g/SoTkXmd8mQnQF2Cw==
+ version "21.0.3"
+ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15"
+ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==
"@types/yargs@^17.0.8":
- version "17.0.30"
- resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.30.tgz#921094ec92faffd2cd7e5ddb02f95ba158ab5c1d"
- integrity sha512-3SJLzYk3yz3EgI9I8OLoH06B3PdXIoU2imrBZzaGqUtUXf5iUNDtmAfCGuQrny1bnmyjh/GM/YNts6WK5jR5Rw==
+ version "17.0.32"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229"
+ integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==
dependencies:
"@types/yargs-parser" "*"
"@typescript-eslint/eslint-plugin@^6.7.4":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz#cfe2bd34e26d2289212946b96ab19dcad64b661a"
- integrity sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz#30830c1ca81fd5f3c2714e524c4303e0194f9cd3"
+ integrity sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==
dependencies:
"@eslint-community/regexpp" "^4.5.1"
- "@typescript-eslint/scope-manager" "6.10.0"
- "@typescript-eslint/type-utils" "6.10.0"
- "@typescript-eslint/utils" "6.10.0"
- "@typescript-eslint/visitor-keys" "6.10.0"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/type-utils" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
debug "^4.3.4"
graphemer "^1.4.0"
ignore "^5.2.4"
@@ -3287,14 +3195,14 @@
debug "^4.3.1"
"@typescript-eslint/parser@^6.7.4":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.14.0.tgz#a2d6a732e0d2b95c73f6a26ae7362877cc1b4212"
- integrity sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==
- dependencies:
- "@typescript-eslint/scope-manager" "6.14.0"
- "@typescript-eslint/types" "6.14.0"
- "@typescript-eslint/typescript-estree" "6.14.0"
- "@typescript-eslint/visitor-keys" "6.14.0"
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-6.21.0.tgz#af8fcf66feee2edc86bc5d1cf45e33b0630bf35b"
+ integrity sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
debug "^4.3.4"
"@typescript-eslint/scope-manager@4.33.0":
@@ -3305,29 +3213,21 @@
"@typescript-eslint/types" "4.33.0"
"@typescript-eslint/visitor-keys" "4.33.0"
-"@typescript-eslint/scope-manager@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz#b0276118b13d16f72809e3cecc86a72c93708540"
- integrity sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==
- dependencies:
- "@typescript-eslint/types" "6.10.0"
- "@typescript-eslint/visitor-keys" "6.10.0"
-
-"@typescript-eslint/scope-manager@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz#53d24363fdb5ee0d1d8cda4ed5e5321272ab3d48"
- integrity sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==
+"@typescript-eslint/scope-manager@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz#ea8a9bfc8f1504a6ac5d59a6df308d3a0630a2b1"
+ integrity sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==
dependencies:
- "@typescript-eslint/types" "6.14.0"
- "@typescript-eslint/visitor-keys" "6.14.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
-"@typescript-eslint/type-utils@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz#1007faede067c78bdbcef2e8abb31437e163e2e1"
- integrity sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==
+"@typescript-eslint/type-utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz#6473281cfed4dacabe8004e8521cee0bd9d4c01e"
+ integrity sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==
dependencies:
- "@typescript-eslint/typescript-estree" "6.10.0"
- "@typescript-eslint/utils" "6.10.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
+ "@typescript-eslint/utils" "6.21.0"
debug "^4.3.4"
ts-api-utils "^1.0.1"
@@ -3336,15 +3236,10 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72"
integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==
-"@typescript-eslint/types@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.10.0.tgz#f4f0a84aeb2ac546f21a66c6e0da92420e921367"
- integrity sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==
-
-"@typescript-eslint/types@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.14.0.tgz#935307f7a931016b7a5eb25d494ea3e1f613e929"
- integrity sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==
+"@typescript-eslint/types@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.21.0.tgz#205724c5123a8fef7ecd195075fa6e85bac3436d"
+ integrity sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==
"@typescript-eslint/typescript-estree@4.33.0":
version "4.33.0"
@@ -3359,43 +3254,31 @@
semver "^7.3.5"
tsutils "^3.21.0"
-"@typescript-eslint/typescript-estree@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz#667381eed6f723a1a8ad7590a31f312e31e07697"
- integrity sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==
- dependencies:
- "@typescript-eslint/types" "6.10.0"
- "@typescript-eslint/visitor-keys" "6.10.0"
- debug "^4.3.4"
- globby "^11.1.0"
- is-glob "^4.0.3"
- semver "^7.5.4"
- ts-api-utils "^1.0.1"
-
-"@typescript-eslint/typescript-estree@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz#90c7ddd45cd22139adf3d4577580d04c9189ac13"
- integrity sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==
+"@typescript-eslint/typescript-estree@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz#c47ae7901db3b8bddc3ecd73daff2d0895688c46"
+ integrity sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==
dependencies:
- "@typescript-eslint/types" "6.14.0"
- "@typescript-eslint/visitor-keys" "6.14.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/visitor-keys" "6.21.0"
debug "^4.3.4"
globby "^11.1.0"
is-glob "^4.0.3"
+ minimatch "9.0.3"
semver "^7.5.4"
ts-api-utils "^1.0.1"
-"@typescript-eslint/utils@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.10.0.tgz#4d76062d94413c30e402c9b0df8c14aef8d77336"
- integrity sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==
+"@typescript-eslint/utils@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.21.0.tgz#4714e7a6b39e773c1c8e97ec587f520840cd8134"
+ integrity sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==
dependencies:
"@eslint-community/eslint-utils" "^4.4.0"
"@types/json-schema" "^7.0.12"
"@types/semver" "^7.5.0"
- "@typescript-eslint/scope-manager" "6.10.0"
- "@typescript-eslint/types" "6.10.0"
- "@typescript-eslint/typescript-estree" "6.10.0"
+ "@typescript-eslint/scope-manager" "6.21.0"
+ "@typescript-eslint/types" "6.21.0"
+ "@typescript-eslint/typescript-estree" "6.21.0"
semver "^7.5.4"
"@typescript-eslint/visitor-keys@4.33.0":
@@ -3406,20 +3289,12 @@
"@typescript-eslint/types" "4.33.0"
eslint-visitor-keys "^2.0.0"
-"@typescript-eslint/visitor-keys@6.10.0":
- version "6.10.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz#b9eaf855a1ac7e95633ae1073af43d451e8f84e3"
- integrity sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==
+"@typescript-eslint/visitor-keys@6.21.0":
+ version "6.21.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz#87a99d077aa507e20e238b11d56cc26ade45fe47"
+ integrity sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==
dependencies:
- "@typescript-eslint/types" "6.10.0"
- eslint-visitor-keys "^3.4.1"
-
-"@typescript-eslint/visitor-keys@6.14.0":
- version "6.14.0"
- resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz#1d1d486581819287de824a56c22f32543561138e"
- integrity sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==
- dependencies:
- "@typescript-eslint/types" "6.14.0"
+ "@typescript-eslint/types" "6.21.0"
eslint-visitor-keys "^3.4.1"
"@ungap/promise-all-settled@1.1.2":
@@ -3457,10 +3332,10 @@ abort-controller@^3.0.0:
dependencies:
event-target-shim "^5.0.0"
-abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741"
- integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==
+abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57"
+ integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==
dependencies:
buffer "^6.0.3"
catering "^2.1.0"
@@ -3510,9 +3385,9 @@ acorn-jsx@^5.3.1, acorn-jsx@^5.3.2:
integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
acorn-walk@^8.1.1:
- version "8.3.0"
- resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f"
- integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==
+ version "8.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa"
+ integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
acorn@^7.4.0:
version "7.4.1"
@@ -3520,14 +3395,9 @@ acorn@^7.4.0:
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
acorn@^8.4.1, acorn@^8.9.0:
- version "8.11.2"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b"
- integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==
-
-address@^1.0.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e"
- integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==
+ version "8.11.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
+ integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
adm-zip@^0.4.16:
version "0.4.16"
@@ -3546,6 +3416,13 @@ agent-base@6:
dependencies:
debug "4"
+agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
+ integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
+ dependencies:
+ debug "^4.3.4"
+
aggregate-error@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
@@ -3579,6 +3456,13 @@ amdefine@>=0.0.4:
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==
+ansi-align@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59"
+ integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==
+ dependencies:
+ string-width "^4.1.0"
+
ansi-colors@4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
@@ -3640,31 +3524,16 @@ ansi-styles@^5.0.0:
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
-ansi-styles@^6.1.0:
- version "6.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
- integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
-
antlr4@^4.11.0:
version "4.13.1"
resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1.tgz#1e0a1830a08faeb86217cb2e6c34716004e4253d"
integrity sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==
-antlr4@~4.8.0:
- version "4.8.0"
- resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.8.0.tgz#f938ec171be7fc2855cd3a533e87647185b32b6a"
- integrity sha512-en/MxQ4OkPgGJQ3wD/muzj1uDnFSzdFIhc2+c6bHZokWkuBb6RRvFjpWhPxWLbgQvaEzldJZ0GSQpfSAaE3hqg==
-
antlr4ts@^0.5.0-alpha.4:
version "0.5.0-alpha.4"
resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a"
integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==
-any-promise@^1.0.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
- integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==
-
anymatch@^3.0.3, anymatch@~3.1.2:
version "3.1.3"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
@@ -3714,23 +3583,24 @@ array-back@^4.0.1, array-back@^4.0.2:
resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e"
integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==
-array-buffer-byte-length@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
- integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
+array-buffer-byte-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f"
+ integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==
dependencies:
- call-bind "^1.0.2"
- is-array-buffer "^3.0.1"
+ call-bind "^1.0.5"
+ is-array-buffer "^3.0.4"
array-includes@^3.1.7:
- version "3.1.7"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda"
- integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==
- dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- get-intrinsic "^1.2.1"
+ version "3.1.8"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d"
+ integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==
+ dependencies:
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
+ get-intrinsic "^1.2.4"
is-string "^1.0.7"
array-timsort@^1.0.3:
@@ -3749,15 +3619,16 @@ array-uniq@1.0.3:
integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==
array.prototype.findlastindex@^1.2.3:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207"
- integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d"
+ integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- es-shim-unscopables "^1.0.0"
- get-intrinsic "^1.2.1"
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ es-shim-unscopables "^1.0.2"
array.prototype.flat@^1.3.2:
version "1.3.2"
@@ -3779,17 +3650,18 @@ array.prototype.flatmap@^1.3.2:
es-abstract "^1.22.1"
es-shim-unscopables "^1.0.0"
-arraybuffer.prototype.slice@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12"
- integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==
+arraybuffer.prototype.slice@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6"
+ integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==
dependencies:
- array-buffer-byte-length "^1.0.0"
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- get-intrinsic "^1.2.1"
- is-array-buffer "^3.0.2"
+ array-buffer-byte-length "^1.0.1"
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
+ es-abstract "^1.22.3"
+ es-errors "^1.2.1"
+ get-intrinsic "^1.2.3"
+ is-array-buffer "^3.0.4"
is-shared-array-buffer "^1.0.2"
asap@~2.0.6:
@@ -3819,6 +3691,13 @@ ast-parents@^0.0.1:
resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3"
integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==
+ast-types@^0.13.4:
+ version "0.13.4"
+ resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782"
+ integrity sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==
+ dependencies:
+ tslib "^2.0.1"
+
astral-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
@@ -3843,7 +3722,7 @@ async@^2.4.0:
dependencies:
lodash "^4.17.14"
-async@^3.2.4:
+async@^3.2.5:
version "3.2.5"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66"
integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==
@@ -3853,10 +3732,12 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
-available-typed-arrays@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
- integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
+available-typed-arrays@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
+ integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==
+ dependencies:
+ possible-typed-array-names "^1.0.0"
aws-sign2@~0.7.0:
version "0.7.0"
@@ -3876,11 +3757,11 @@ axios@^0.21.1:
follow-redirects "^1.14.0"
axios@^1.4.0, axios@^1.5.1:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.2.tgz#de67d42c755b571d3e698df1b6504cde9b0ee9f2"
- integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==
+ version "1.6.8"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66"
+ integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==
dependencies:
- follow-redirects "^1.15.0"
+ follow-redirects "^1.15.6"
form-data "^4.0.0"
proxy-from-env "^1.1.0"
@@ -3981,6 +3862,11 @@ base64-js@^1.3.1:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+basic-ftp@^5.0.2:
+ version "5.0.5"
+ resolved "https://registry.yarnpkg.com/basic-ftp/-/basic-ftp-5.0.5.tgz#14a474f5fffecca1f4f406f1c26b18f800225ac0"
+ integrity sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==
+
bcrypt-pbkdf@^1.0.0, bcrypt-pbkdf@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
@@ -3993,11 +3879,6 @@ bech32@1.1.4:
resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9"
integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
-big-integer@^1.6.44:
- version "1.6.52"
- resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85"
- integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==
-
bigint-crypto-utils@^3.0.23:
version "3.3.0"
resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77"
@@ -4009,9 +3890,9 @@ bignumber.js@^9.0.0, bignumber.js@^9.0.1:
integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==
binary-extensions@^2.0.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
- integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522"
+ integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==
bip39@3.0.4:
version "3.0.4"
@@ -4045,14 +3926,6 @@ blakejs@^1.1.0:
resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814"
integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==
-bn-str-256@^1.9.1:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/bn-str-256/-/bn-str-256-1.9.1.tgz#898cebee70a3edc3968f97b4cebbc4771025aa82"
- integrity sha512-u3muv3WO5sYv9nUQsPnDGLg731yNt/MOlKPK5pmBVqClcl7tY97tyfKxw8ed44HVrpi+7dkgJgQpbXP47a3GoQ==
- dependencies:
- decimal.js-light "^2.5.0"
- lodash "^4.17.11"
-
bn.js@4.11.6:
version "4.11.6"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
@@ -4073,12 +3946,19 @@ boolbase@^1.0.0:
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
-bplist-parser@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/bplist-parser/-/bplist-parser-0.2.0.tgz#43a9d183e5bf9d545200ceac3e712f79ebbe8d0e"
- integrity sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==
+boxen@^5.1.2:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50"
+ integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==
dependencies:
- big-integer "^1.6.44"
+ ansi-align "^3.0.0"
+ camelcase "^6.2.0"
+ chalk "^4.1.0"
+ cli-boxes "^2.2.1"
+ string-width "^4.2.2"
+ type-fest "^0.20.2"
+ widest-line "^3.1.0"
+ wrap-ansi "^7.0.0"
brace-expansion@^1.1.7:
version "1.1.11"
@@ -4134,14 +4014,14 @@ browserify-aes@^1.2.0:
inherits "^2.0.1"
safe-buffer "^5.0.1"
-browserslist@^4.21.9:
- version "4.22.1"
- resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619"
- integrity sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==
+browserslist@^4.22.2:
+ version "4.23.0"
+ resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
+ integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
dependencies:
- caniuse-lite "^1.0.30001541"
- electron-to-chromium "^1.4.535"
- node-releases "^2.0.13"
+ caniuse-lite "^1.0.30001587"
+ electron-to-chromium "^1.4.668"
+ node-releases "^2.0.14"
update-browserslist-db "^1.0.13"
bs-logger@0.x:
@@ -4207,11 +4087,6 @@ buffer-reverse@^1.0.1:
resolved "https://registry.yarnpkg.com/buffer-reverse/-/buffer-reverse-1.0.1.tgz#49283c8efa6f901bc01fa3304d06027971ae2f60"
integrity sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==
-buffer-writer@2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04"
- integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==
-
buffer-xor@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
@@ -4252,26 +4127,21 @@ buildcheck@~0.0.6:
resolved "https://registry.yarnpkg.com/buildcheck/-/buildcheck-0.0.6.tgz#89aa6e417cfd1e2196e3f8fe915eb709d2fe4238"
integrity sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==
-bundle-name@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-3.0.0.tgz#ba59bcc9ac785fb67ccdbf104a2bf60c099f0e1a"
- integrity sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==
- dependencies:
- run-applescript "^5.0.0"
-
bytes@3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
-call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513"
- integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==
+call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
+ integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
dependencies:
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
function-bind "^1.1.2"
- get-intrinsic "^1.2.1"
- set-function-length "^1.1.1"
+ get-intrinsic "^1.2.4"
+ set-function-length "^1.2.1"
callsites@^3.0.0, callsites@^3.1.0:
version "3.1.0"
@@ -4288,10 +4158,10 @@ camelcase@^6.0.0, camelcase@^6.2.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
-caniuse-lite@^1.0.30001541:
- version "1.0.30001558"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001558.tgz#d2c6e21fdbfe83817f70feab902421a19b7983ee"
- integrity sha512-/Et7DwLqpjS47JPEcz6VnxU9PwcIdVi0ciLXRWBQdj1XFye68pSQYpV0QtPTfUKWuOaEig+/Vez2l74eDc1tPQ==
+caniuse-lite@^1.0.30001587:
+ version "1.0.30001608"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001608.tgz#7ae6e92ffb300e4b4ec2f795e0abab456ec06cc0"
+ integrity sha512-cjUJTQkk9fQlJR2s4HMuPMvTiRggl0rAVMtthQuyOlDWuqHXqN8azLq+pi8B2TjwKJ32diHjUqRIKeFX4z1FoA==
case@^1.6.3:
version "1.6.3"
@@ -4322,7 +4192,7 @@ chai-as-promised@^7.1.1:
dependencies:
check-error "^1.0.2"
-chai@^4.3.10, chai@^4.3.6:
+chai@^4.3.10, chai@^4.3.4, chai@^4.3.6:
version "4.4.1"
resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1"
integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==
@@ -4335,19 +4205,6 @@ chai@^4.3.10, chai@^4.3.6:
pathval "^1.1.1"
type-detect "^4.0.8"
-chai@^4.3.4:
- version "4.3.10"
- resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.10.tgz#d784cec635e3b7e2ffb66446a63b4e33bd390384"
- integrity sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==
- dependencies:
- assertion-error "^1.1.0"
- check-error "^1.0.3"
- deep-eql "^4.1.3"
- get-func-name "^2.0.2"
- loupe "^2.3.6"
- pathval "^1.1.1"
- type-detect "^4.0.8"
-
chalk-template@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-1.1.0.tgz#ffc55db6dd745e9394b85327c8ac8466edb7a7b1"
@@ -4424,7 +4281,7 @@ cheerio@^1.0.0-rc.10:
parse5 "^7.0.0"
parse5-htmlparser2-tree-adapter "^7.0.0"
-chokidar@3.5.3, chokidar@^3.4.0:
+chokidar@3.5.3:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
@@ -4439,6 +4296,21 @@ chokidar@3.5.3, chokidar@^3.4.0:
optionalDependencies:
fsevents "~2.3.2"
+chokidar@^3.4.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
+ integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
+ dependencies:
+ anymatch "~3.1.2"
+ braces "~3.0.2"
+ glob-parent "~5.1.2"
+ is-binary-path "~2.1.0"
+ is-glob "~4.0.1"
+ normalize-path "~3.0.0"
+ readdirp "~3.6.0"
+ optionalDependencies:
+ fsevents "~2.3.2"
+
chownr@^1.0.1, chownr@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
@@ -4468,9 +4340,9 @@ cjs-module-lexer@^1.0.0:
integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==
classic-level@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.3.0.tgz#5e36680e01dc6b271775c093f2150844c5edd5c8"
- integrity sha512-iwFAJQYtqRTRM0F6L8h4JCt00ZSGdOyqh7yVrhhjrOpFhmBjNlRUey64MCiyo6UmQHMJ+No3c81nujPv+n9yrg==
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee"
+ integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==
dependencies:
abstract-level "^1.0.2"
catering "^2.1.0"
@@ -4491,6 +4363,11 @@ clear-module@^4.1.2:
parent-module "^2.0.0"
resolve-from "^5.0.0"
+cli-boxes@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
+ integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
+
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
@@ -4509,9 +4386,9 @@ cli-table3@^0.5.0:
colors "^1.1.2"
cli-table3@^0.6.0:
- version "0.6.3"
- resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2"
- integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==
+ version "0.6.4"
+ resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.4.tgz#d1c536b8a3f2e7bec58f67ac9e5769b1b30088b0"
+ integrity sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==
dependencies:
string-width "^4.2.0"
optionalDependencies:
@@ -4642,10 +4519,10 @@ commander@^10.0.0, commander@^10.0.1:
resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
-commander@^11.1.0:
- version "11.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
- integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
+commander@^12.0.0:
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-12.0.0.tgz#b929db6df8546080adfd004ab215ed48cf6f2592"
+ integrity sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==
commander@^2.19.0:
version "2.20.3"
@@ -4727,9 +4604,9 @@ cookie@^0.4.1:
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
core-js-pure@^3.0.1:
- version "3.34.0"
- resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.34.0.tgz#981e462500708664c91b827a75b011f04a8134a0"
- integrity sha512-pmhivkYXkymswFfbXsANmBAewXx86UBfmagP+w0wkK06kLsLlTK5oQmsURPivzMkIBQiYq2cjamcZExIwlFQIg==
+ version "3.36.1"
+ resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.36.1.tgz#1461c89e76116528b54eba20a0aff30164087a94"
+ integrity sha512-NXCvHvSVYSrewP0L5OhltzXeWFJLo2AL2TYnj6iLV3Bw8mM62wAQMNgUCRI6EBu6hVVpbCxmOPlxh1Ikw2PfUA==
core-js@^2.4.0:
version "2.6.12"
@@ -4756,7 +4633,7 @@ cosmiconfig@^8.0.0:
parse-json "^5.2.0"
path-type "^4.0.0"
-cpu-features@~0.0.8, cpu-features@~0.0.9:
+cpu-features@~0.0.9:
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==
@@ -4821,7 +4698,7 @@ cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
-cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -4847,113 +4724,113 @@ crypto-random-string@^4.0.0:
dependencies:
type-fest "^1.0.1"
-cspell-config-lib@8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/cspell-config-lib/-/cspell-config-lib-8.3.2.tgz#050a6d782072a810cb6655efe11c08c80ae7636b"
- integrity sha512-Wc98XhBNLwDxnxCzMtgRJALI9a69cu3C5Gf1rGjNTKSFo9JYiQmju0Ur3z25Pkx9Sa86f+2IjvNCf33rUDSoBQ==
+cspell-config-lib@8.6.1:
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/cspell-config-lib/-/cspell-config-lib-8.6.1.tgz#951052d985756e684c540f92f8c6c4df25869519"
+ integrity sha512-I6LatgXJb8mxKFzIywO81TlUD/qWnUDrhB6yTUPdP90bwZcXMmGoCsZxhd2Rvl9fz5fWne0T839I1coShfm86g==
dependencies:
- "@cspell/cspell-types" "8.3.2"
+ "@cspell/cspell-types" "8.6.1"
comment-json "^4.2.3"
- yaml "^2.3.4"
+ yaml "^2.4.1"
-cspell-dictionary@8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/cspell-dictionary/-/cspell-dictionary-8.3.2.tgz#6627a94501811a143f3b638e0e77f7262335dbd4"
- integrity sha512-xyK95hO2BMPFxIo8zBwGml8035qOxSBdga1BMhwW/p2wDrQP8S4Cdm/54//tCDmKn6uRkFQvyOfWGaX2l8WMEg==
+cspell-dictionary@8.6.1:
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/cspell-dictionary/-/cspell-dictionary-8.6.1.tgz#c39a86ddd2ec5d31783414ff963db65c838177bc"
+ integrity sha512-0SfKPi1QoWbGpZ/rWMR7Jn0+GaQT9PAMLWjVOu66PUNUXI5f4oCTHpnZE1Xts+5VX8shZC3TAMHEgtgKuQn4RQ==
dependencies:
- "@cspell/cspell-pipe" "8.3.2"
- "@cspell/cspell-types" "8.3.2"
- cspell-trie-lib "8.3.2"
+ "@cspell/cspell-pipe" "8.6.1"
+ "@cspell/cspell-types" "8.6.1"
+ cspell-trie-lib "8.6.1"
fast-equals "^5.0.1"
- gensequence "^6.0.0"
+ gensequence "^7.0.0"
-cspell-gitignore@8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-8.3.2.tgz#5cf244be494bf87257ca8715ac88b0849dd5fef3"
- integrity sha512-3Qc9P5BVvl/cg//s2s+zIMGKcoH5v7oOtRgwn4UQry8yiyo19h0tiTKkSR574FMhF5NtcShTnwIwPSIXVBPFHA==
+cspell-gitignore@8.6.1:
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/cspell-gitignore/-/cspell-gitignore-8.6.1.tgz#abb25f15ef25377cf0f071dba958635bd9ded4e8"
+ integrity sha512-3gtt351sSDfN826aMXTqGHVLz2lz9ZHr8uemImUc24Q+676sXkJM9lXzqP8PUqwGhLyt5qSf+9pt0ieNwQy/cA==
dependencies:
- cspell-glob "8.3.2"
+ cspell-glob "8.6.1"
find-up-simple "^1.0.0"
-cspell-glob@8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-8.3.2.tgz#4c208e4ddd5604d2871df534a3054c7a3fdc9998"
- integrity sha512-KtIFxE+3l5dGEofND4/CdZffXP8XN1+XGQKxJ96lIzWsc01mkotfhxTkla6mgvfH039t7BsY/SWv0460KyGslQ==
+cspell-glob@8.6.1:
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/cspell-glob/-/cspell-glob-8.6.1.tgz#6d80f703e9df15d0f63d3b36dcd5bc07ca908325"
+ integrity sha512-QjtngIR0XsUQLmHHDO86hps/JR5sRxSBwCvcsNCEmSdpdofLFc8cuxi3o33JWge7UAPBCQOLGfpA7/Wx31srmw==
dependencies:
micromatch "^4.0.5"
-cspell-grammar@8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/cspell-grammar/-/cspell-grammar-8.3.2.tgz#69d7980c036c206745d5d417d32c95edaaff6107"
- integrity sha512-tYCkOmRzJe1a6/R+8QGSwG7TwTgznLPqsHtepKzLmnS4YX54VXjKRI9zMARxXDzUVfyCSVdW5MyiY/0WTNoy+A==
+cspell-grammar@8.6.1:
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/cspell-grammar/-/cspell-grammar-8.6.1.tgz#d623475a0752b662769fc2a4de4745c25f7c0cbd"
+ integrity sha512-MaG0e/F0b2FnIRULCZ61JxEiJgTP/6rsbUoR5nG9X+WmJYItYmxC1F/FPPrVeTu+jJr/8O4pdnslE20pimHaCw==
dependencies:
- "@cspell/cspell-pipe" "8.3.2"
- "@cspell/cspell-types" "8.3.2"
+ "@cspell/cspell-pipe" "8.6.1"
+ "@cspell/cspell-types" "8.6.1"
-cspell-io@8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-8.3.2.tgz#8ddd865fa9a1391852e3288789f5b2a6613239bd"
- integrity sha512-WYpKsyBCQP0SY4gXnhW5fPuxcYchKYKG1PIXVV3ezFU4muSgW6GuLNbGuSfwv/8YNXRgFSN0e3hYH0rdBK2Aow==
+cspell-io@8.6.1:
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/cspell-io/-/cspell-io-8.6.1.tgz#3b0fc769a609df8b027d3f189272f59ec3c0f642"
+ integrity sha512-ofxBB8QtUPvh/bOwKLYsqU1hwQCet8E98jkn/5f4jtG+/x5Zd80I0Ez+tlbjiBmrrQfOKh+i8ipfzHD8JtoreQ==
dependencies:
- "@cspell/cspell-service-bus" "8.3.2"
+ "@cspell/cspell-service-bus" "8.6.1"
-cspell-lib@8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-8.3.2.tgz#8225f8d3a20596bda4b9689a2ad958f7831f5a7d"
- integrity sha512-wTvdaev/TyGB/ln6CVD1QbVs2D7/+QiajQ67S7yj1suLHM6YcNQQb/5sPAM8VPtj0E7PgwgPXf3bq18OtPvnFg==
- dependencies:
- "@cspell/cspell-bundled-dicts" "8.3.2"
- "@cspell/cspell-pipe" "8.3.2"
- "@cspell/cspell-resolver" "8.3.2"
- "@cspell/cspell-types" "8.3.2"
- "@cspell/dynamic-import" "8.3.2"
- "@cspell/strong-weak-map" "8.3.2"
+cspell-lib@8.6.1:
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/cspell-lib/-/cspell-lib-8.6.1.tgz#691b1fc80c128eea3c4a24b59d20b1de95a912e2"
+ integrity sha512-kGeDUypRtThFT81IdUK7yU8eUwO5MYWj8pGQ0N8WFsqbCahJrUdcocceVSpnCX48W3CXu12DkqYG9kv5Umn7Xw==
+ dependencies:
+ "@cspell/cspell-bundled-dicts" "8.6.1"
+ "@cspell/cspell-pipe" "8.6.1"
+ "@cspell/cspell-resolver" "8.6.1"
+ "@cspell/cspell-types" "8.6.1"
+ "@cspell/dynamic-import" "8.6.1"
+ "@cspell/strong-weak-map" "8.6.1"
clear-module "^4.1.2"
comment-json "^4.2.3"
configstore "^6.0.0"
- cspell-config-lib "8.3.2"
- cspell-dictionary "8.3.2"
- cspell-glob "8.3.2"
- cspell-grammar "8.3.2"
- cspell-io "8.3.2"
- cspell-trie-lib "8.3.2"
+ cspell-config-lib "8.6.1"
+ cspell-dictionary "8.6.1"
+ cspell-glob "8.6.1"
+ cspell-grammar "8.6.1"
+ cspell-io "8.6.1"
+ cspell-trie-lib "8.6.1"
fast-equals "^5.0.1"
- gensequence "^6.0.0"
+ gensequence "^7.0.0"
import-fresh "^3.3.0"
resolve-from "^5.0.0"
vscode-languageserver-textdocument "^1.0.11"
vscode-uri "^3.0.8"
-cspell-trie-lib@8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-8.3.2.tgz#e1e8c9926f41a094bec7f0af85b931be06019fe7"
- integrity sha512-8qh2FqzkLMwzlTlvO/5Z+89fhi30rrfekocpight/BmqKbE2XFJQD7wS2ml24e7q/rdHJLXVpJbY/V5mByucCA==
+cspell-trie-lib@8.6.1:
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/cspell-trie-lib/-/cspell-trie-lib-8.6.1.tgz#7ff0e5992602808aa50d292bccd2b2e9484f5c28"
+ integrity sha512-iuJuAyWoqTH/TpFAR/ISJGQQoW3oiw54GyvXIucPoCJt/jgQONDuzqPW+skiLvcgcTbXCN9dutZTb2gImIkmpw==
dependencies:
- "@cspell/cspell-pipe" "8.3.2"
- "@cspell/cspell-types" "8.3.2"
- gensequence "^6.0.0"
+ "@cspell/cspell-pipe" "8.6.1"
+ "@cspell/cspell-types" "8.6.1"
+ gensequence "^7.0.0"
cspell@^8.3.2:
- version "8.3.2"
- resolved "https://registry.yarnpkg.com/cspell/-/cspell-8.3.2.tgz#56e7e919d87d38016b4c34b8c8ee745404c230a7"
- integrity sha512-V8Ub3RO/a5lwSsltW/ib3Z3G/sczKtSpBBN1JChzbSCfEgaY2mJY8JW0BpkSV+Ug6uJitpXNOOaxa3Xr489i7g==
- dependencies:
- "@cspell/cspell-json-reporter" "8.3.2"
- "@cspell/cspell-pipe" "8.3.2"
- "@cspell/cspell-types" "8.3.2"
- "@cspell/dynamic-import" "8.3.2"
+ version "8.6.1"
+ resolved "https://registry.yarnpkg.com/cspell/-/cspell-8.6.1.tgz#b3fd935c2bcbec64b47377a4de5b569ab50daa47"
+ integrity sha512-/Qle15v4IQe7tViSWX0+RCZJ2HJ4HUCZV9Z4uOVasNUz+DWCrxysNR+pfCRYuLX/6lQdqCM9QCR9GZc7a2KIVA==
+ dependencies:
+ "@cspell/cspell-json-reporter" "8.6.1"
+ "@cspell/cspell-pipe" "8.6.1"
+ "@cspell/cspell-types" "8.6.1"
+ "@cspell/dynamic-import" "8.6.1"
chalk "^5.3.0"
chalk-template "^1.1.0"
- commander "^11.1.0"
- cspell-gitignore "8.3.2"
- cspell-glob "8.3.2"
- cspell-io "8.3.2"
- cspell-lib "8.3.2"
+ commander "^12.0.0"
+ cspell-gitignore "8.6.1"
+ cspell-glob "8.6.1"
+ cspell-io "8.6.1"
+ cspell-lib "8.6.1"
fast-glob "^3.3.2"
fast-json-stable-stringify "^2.1.0"
file-entry-cache "^8.0.0"
get-stdin "^9.0.0"
- semver "^7.5.4"
+ semver "^7.6.0"
strip-ansi "^7.1.0"
vscode-uri "^3.0.8"
@@ -4980,6 +4857,38 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
+data-uri-to-buffer@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b"
+ integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==
+
+data-view-buffer@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2"
+ integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==
+ dependencies:
+ call-bind "^1.0.6"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.1"
+
+data-view-byte-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2"
+ integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==
+ dependencies:
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.1"
+
+data-view-byte-offset@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a"
+ integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==
+ dependencies:
+ call-bind "^1.0.6"
+ es-errors "^1.3.0"
+ is-data-view "^1.0.1"
+
death@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318"
@@ -5018,11 +4927,6 @@ decamelize@^4.0.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
-decimal.js-light@^2.5.0:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934"
- integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==
-
dedent@^1.0.0:
version "1.5.1"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff"
@@ -5055,24 +4959,6 @@ deepmerge@^4.2.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a"
integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==
-default-browser-id@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-3.0.0.tgz#bee7bbbef1f4e75d31f98f4d3f1556a14cea790c"
- integrity sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==
- dependencies:
- bplist-parser "^0.2.0"
- untildify "^4.0.0"
-
-default-browser@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-4.0.0.tgz#53c9894f8810bf86696de117a6ce9085a3cbc7da"
- integrity sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==
- dependencies:
- bundle-name "^3.0.0"
- default-browser-id "^3.0.0"
- execa "^7.1.1"
- titleize "^3.0.0"
-
deferred-leveldown@~5.3.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058"
@@ -5081,21 +4967,16 @@ deferred-leveldown@~5.3.0:
abstract-leveldown "~6.2.1"
inherits "^2.0.3"
-define-data-property@^1.0.1, define-data-property@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3"
- integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==
+define-data-property@^1.0.1, define-data-property@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
+ integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
dependencies:
- get-intrinsic "^1.2.1"
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
gopd "^1.0.1"
- has-property-descriptors "^1.0.0"
-define-lazy-prop@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
- integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
-
-define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
+define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
@@ -5104,6 +4985,15 @@ define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
+degenerator@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/degenerator/-/degenerator-5.0.1.tgz#9403bf297c6dad9a1ece409b37db27954f91f2f5"
+ integrity sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==
+ dependencies:
+ ast-types "^0.13.4"
+ escodegen "^2.1.0"
+ esprima "^4.0.1"
+
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -5119,14 +5009,6 @@ detect-newline@^3.0.0:
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
-detect-port@^1.3.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b"
- integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==
- dependencies:
- address "^1.0.1"
- debug "4"
-
diff-sequences@^29.6.3:
version "29.6.3"
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
@@ -5186,16 +5068,6 @@ docker-modem@^3.0.0:
split-ca "^1.0.1"
ssh2 "^1.11.0"
-docker-modem@^5.0.2:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-5.0.2.tgz#d119282d85679a8e7bc788e620093f1348658b5d"
- integrity sha512-1Nwtxsk3D6CMj7ovGxSj/r3cEw2EVcT4AsAOdKngDVn2mENnRdq5tIgwpjecgdEtPhd7U5Ww39FNzxo8k++ESw==
- dependencies:
- debug "^4.1.1"
- readable-stream "^3.5.0"
- split-ca "^1.0.1"
- ssh2 "^1.11.0"
-
docker-modem@^5.0.3:
version "5.0.3"
resolved "https://registry.yarnpkg.com/docker-modem/-/docker-modem-5.0.3.tgz#50c06f11285289f58112b5c4c4d89824541c41d0"
@@ -5224,15 +5096,6 @@ dockerode@^3.3.4:
docker-modem "^3.0.0"
tar-fs "~2.0.1"
-dockerode@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-4.0.1.tgz#c1d4dad585c14f091a34aed394c63fb67e986c30"
- integrity sha512-2TGh2Sb/r4X9xVVjtcfDoxIYLYdBI3cFCK1OApLfDW+iNdGWAdHq8wJU/CGqueOTYF1JBflUSFVPy2gw8NAJoA==
- dependencies:
- "@balena/dockerignore" "^1.0.2"
- docker-modem "^5.0.2"
- tar-fs "~2.0.1"
-
dockerode@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/dockerode/-/dockerode-4.0.2.tgz#dedc8529a1db3ac46d186f5912389899bc309f7d"
@@ -5294,20 +5157,15 @@ dot-prop@^6.0.1:
is-obj "^2.0.0"
dotenv@^16.0.3:
- version "16.3.1"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.3.1.tgz#369034de7d7e5b120972693352a3bf112172cc3e"
- integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==
+ version "16.4.5"
+ resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f"
+ integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
dotenv@^8.2.0:
version "8.6.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b"
integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
-eastasianwidth@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
- integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
-
ecc-jsbn@~0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
@@ -5323,12 +5181,12 @@ ecdsa-sig-formatter@1.0.11:
dependencies:
safe-buffer "^5.0.1"
-electron-to-chromium@^1.4.535:
- version "1.4.569"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.569.tgz#1298b67727187ffbaac005a7425490d157f3ad03"
- integrity sha512-LsrJjZ0IbVy12ApW3gpYpcmHS3iRxH4bkKOW98y1/D+3cvDUWGcbzbsFinfUS8knpcZk/PG/2p/RnkMCYN7PVg==
+electron-to-chromium@^1.4.668:
+ version "1.4.731"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.731.tgz#d3dc19f359045b750a1fb0bc42315a502d950187"
+ integrity sha512-+TqVfZjpRz2V/5SPpmJxq9qK620SC5SqCnxQIOi7i/U08ZDcTpKbT7Xjj9FU5CbXTMUb4fywbIr8C7cGv4hcjw==
-elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4:
+elliptic@6.5.4:
version "6.5.4"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
@@ -5341,7 +5199,7 @@ elliptic@6.5.4, elliptic@^6.5.2, elliptic@^6.5.4:
minimalistic-assert "^1.0.1"
minimalistic-crypto-utils "^1.0.1"
-elliptic@^6.5.5:
+elliptic@^6.5.2, elliptic@^6.5.4, elliptic@^6.5.5:
version "6.5.5"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded"
integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==
@@ -5374,11 +5232,6 @@ emoji-regex@^8.0.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-emoji-regex@^9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
- integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-
encoding-down@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b"
@@ -5397,9 +5250,9 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1:
once "^1.4.0"
enhanced-resolve@^5.12.0:
- version "5.15.0"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35"
- integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==
+ version "5.16.0"
+ resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz#65ec88778083056cb32487faa9aef82ed0864787"
+ integrity sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==
dependencies:
graceful-fs "^4.2.4"
tapable "^2.2.0"
@@ -5446,61 +5299,87 @@ error-ex@^1.3.1:
dependencies:
is-arrayish "^0.2.1"
-es-abstract@^1.22.1:
- version "1.22.3"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32"
- integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==
- dependencies:
- array-buffer-byte-length "^1.0.0"
- arraybuffer.prototype.slice "^1.0.2"
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.5"
- es-set-tostringtag "^2.0.1"
+es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2:
+ version "1.23.3"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0"
+ integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==
+ dependencies:
+ array-buffer-byte-length "^1.0.1"
+ arraybuffer.prototype.slice "^1.0.3"
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.7"
+ data-view-buffer "^1.0.1"
+ data-view-byte-length "^1.0.1"
+ data-view-byte-offset "^1.0.0"
+ es-define-property "^1.0.0"
+ es-errors "^1.3.0"
+ es-object-atoms "^1.0.0"
+ es-set-tostringtag "^2.0.3"
es-to-primitive "^1.2.1"
function.prototype.name "^1.1.6"
- get-intrinsic "^1.2.2"
- get-symbol-description "^1.0.0"
+ get-intrinsic "^1.2.4"
+ get-symbol-description "^1.0.2"
globalthis "^1.0.3"
gopd "^1.0.1"
- has-property-descriptors "^1.0.0"
- has-proto "^1.0.1"
+ has-property-descriptors "^1.0.2"
+ has-proto "^1.0.3"
has-symbols "^1.0.3"
- hasown "^2.0.0"
- internal-slot "^1.0.5"
- is-array-buffer "^3.0.2"
+ hasown "^2.0.2"
+ internal-slot "^1.0.7"
+ is-array-buffer "^3.0.4"
is-callable "^1.2.7"
- is-negative-zero "^2.0.2"
+ is-data-view "^1.0.1"
+ is-negative-zero "^2.0.3"
is-regex "^1.1.4"
- is-shared-array-buffer "^1.0.2"
+ is-shared-array-buffer "^1.0.3"
is-string "^1.0.7"
- is-typed-array "^1.1.12"
+ is-typed-array "^1.1.13"
is-weakref "^1.0.2"
object-inspect "^1.13.1"
object-keys "^1.1.1"
- object.assign "^4.1.4"
- regexp.prototype.flags "^1.5.1"
- safe-array-concat "^1.0.1"
- safe-regex-test "^1.0.0"
- string.prototype.trim "^1.2.8"
- string.prototype.trimend "^1.0.7"
- string.prototype.trimstart "^1.0.7"
- typed-array-buffer "^1.0.0"
- typed-array-byte-length "^1.0.0"
- typed-array-byte-offset "^1.0.0"
- typed-array-length "^1.0.4"
+ object.assign "^4.1.5"
+ regexp.prototype.flags "^1.5.2"
+ safe-array-concat "^1.1.2"
+ safe-regex-test "^1.0.3"
+ string.prototype.trim "^1.2.9"
+ string.prototype.trimend "^1.0.8"
+ string.prototype.trimstart "^1.0.8"
+ typed-array-buffer "^1.0.2"
+ typed-array-byte-length "^1.0.1"
+ typed-array-byte-offset "^1.0.2"
+ typed-array-length "^1.0.6"
unbox-primitive "^1.0.2"
- which-typed-array "^1.1.13"
+ which-typed-array "^1.1.15"
-es-set-tostringtag@^2.0.1:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9"
- integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==
+es-define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
+ integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
dependencies:
- get-intrinsic "^1.2.2"
- has-tostringtag "^1.0.0"
- hasown "^2.0.0"
+ get-intrinsic "^1.2.4"
+
+es-errors@^1.2.1, es-errors@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
+ integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
+
+es-object-atoms@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941"
+ integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==
+ dependencies:
+ es-errors "^1.3.0"
-es-shim-unscopables@^1.0.0:
+es-set-tostringtag@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777"
+ integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==
+ dependencies:
+ get-intrinsic "^1.2.4"
+ has-tostringtag "^1.0.2"
+ hasown "^2.0.1"
+
+es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763"
integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==
@@ -5522,9 +5401,9 @@ es6-promisify@^6.0.0:
integrity sha512-HBL8I3mIki5C1Cc9QjKUenHtnG0A5/xA8Q/AllRcfiwl2CZFXGK7ddBiCoRwAix4i2KxcQfjtIVcrVbB3vbmwg==
escalade@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
- integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27"
+ integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==
escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0:
version "4.0.0"
@@ -5553,6 +5432,17 @@ escodegen@1.8.x:
optionalDependencies:
source-map "~0.2.0"
+escodegen@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17"
+ integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^5.2.0"
+ esutils "^2.0.2"
+ optionalDependencies:
+ source-map "~0.6.1"
+
eslint-config-alloy@^3.8.2:
version "3.10.0"
resolved "https://registry.yarnpkg.com/eslint-config-alloy/-/eslint-config-alloy-3.10.0.tgz#b2d85ba3bd7dddcc6d7fc79088c192a646f4f246"
@@ -5581,16 +5471,16 @@ eslint-import-resolver-typescript@^3.6.1:
is-glob "^4.0.3"
eslint-module-utils@^2.7.4, eslint-module-utils@^2.8.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49"
- integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==
+ version "2.8.1"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34"
+ integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==
dependencies:
debug "^3.2.7"
eslint-plugin-import@^2.29.0:
- version "2.29.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz#8133232e4329ee344f2f612885ac3073b0b7e155"
- integrity sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==
+ version "2.29.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643"
+ integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==
dependencies:
array-includes "^3.1.7"
array.prototype.findlastindex "^1.2.3"
@@ -5608,15 +5498,15 @@ eslint-plugin-import@^2.29.0:
object.groupby "^1.0.1"
object.values "^1.1.7"
semver "^6.3.1"
- tsconfig-paths "^3.14.2"
+ tsconfig-paths "^3.15.0"
eslint-plugin-prettier@^5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.0.1.tgz#a3b399f04378f79f066379f544e42d6b73f11515"
- integrity sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1"
+ integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==
dependencies:
prettier-linter-helpers "^1.0.0"
- synckit "^0.8.5"
+ synckit "^0.8.6"
eslint-scope@^5.1.1:
version "5.1.1"
@@ -5703,15 +5593,15 @@ eslint@^7.16.0:
v8-compile-cache "^2.0.3"
eslint@^8.51.0:
- version "8.55.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.55.0.tgz#078cb7b847d66f2c254ea1794fa395bf8e7e03f8"
- integrity sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==
+ version "8.57.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668"
+ integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==
dependencies:
"@eslint-community/eslint-utils" "^4.2.0"
"@eslint-community/regexpp" "^4.6.1"
"@eslint/eslintrc" "^2.1.4"
- "@eslint/js" "8.55.0"
- "@humanwhocodes/config-array" "^0.11.13"
+ "@eslint/js" "8.57.0"
+ "@humanwhocodes/config-array" "^0.11.14"
"@humanwhocodes/module-importer" "^1.0.1"
"@nodelib/fs.walk" "^1.2.8"
"@ungap/structured-clone" "^1.2.0"
@@ -5828,11 +5718,11 @@ eth-gas-reporter@^0.2.25:
sync-request "^6.0.0"
ethereum-bloom-filters@^1.0.6:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a"
- integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.1.0.tgz#b3fc1eb789509ee30db0bf99a2988ccacb8d0397"
+ integrity sha512-J1gDRkLpuGNvWYzWslBQR9cDV4nd4kfvVTE/Wy4Kkm4yb3EYRSlyi0eB/inTsSTTVyA0+HyzHgbr95Fn/Z1fSw==
dependencies:
- js-sha3 "^0.8.0"
+ "@noble/hashes" "^1.4.0"
ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3:
version "0.1.3"
@@ -5866,14 +5756,14 @@ ethereum-cryptography@^1.0.3:
"@scure/bip39" "1.1.1"
ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.2.tgz#18fa7108622e56481157a5cb7c01c0c6a672eb67"
- integrity sha512-Z5Ba0T0ImZ8fqXrJbpHcbpAvIswRte2wGNR/KePnu8GbbvgJ47lMxT/ZZPG6i9Jaht4azPDop4HaM00J0J59ug==
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a"
+ integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==
dependencies:
- "@noble/curves" "1.1.0"
- "@noble/hashes" "1.3.1"
- "@scure/bip32" "1.3.1"
- "@scure/bip39" "1.2.1"
+ "@noble/curves" "1.3.0"
+ "@noble/hashes" "1.3.3"
+ "@scure/bip32" "1.3.3"
+ "@scure/bip39" "1.2.2"
ethereum-waffle@^4.0.10:
version "4.0.10"
@@ -6145,21 +6035,6 @@ execa@^5.0.0:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
-execa@^7.1.1:
- version "7.2.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-7.2.0.tgz#657e75ba984f42a70f38928cedc87d6f2d4fe4e9"
- integrity sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==
- dependencies:
- cross-spawn "^7.0.3"
- get-stream "^6.0.1"
- human-signals "^4.3.0"
- is-stream "^3.0.0"
- merge-stream "^2.0.0"
- npm-run-path "^5.1.0"
- onetime "^6.0.0"
- signal-exit "^3.0.7"
- strip-final-newline "^3.0.0"
-
exit@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
@@ -6215,7 +6090,7 @@ fast-equals@^5.0.1:
resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-5.0.1.tgz#a4eefe3c5d1c0d021aeed0bc10ba5e0c12ee405d"
integrity sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==
-fast-glob@^3.0.3, fast-glob@^3.3.0, fast-glob@^3.3.1, fast-glob@^3.3.2:
+fast-glob@^3.0.3, fast-glob@^3.2.12, fast-glob@^3.2.9, fast-glob@^3.3.1, fast-glob@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129"
integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==
@@ -6226,17 +6101,6 @@ fast-glob@^3.0.3, fast-glob@^3.3.0, fast-glob@^3.3.1, fast-glob@^3.3.2:
merge2 "^1.3.0"
micromatch "^4.0.4"
-fast-glob@^3.2.12, fast-glob@^3.2.9:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
- integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
- 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.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@@ -6248,9 +6112,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
fastq@^1.6.0:
- version "1.15.0"
- resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
- integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
+ version "1.17.1"
+ resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47"
+ integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==
dependencies:
reusify "^1.0.4"
@@ -6333,22 +6197,21 @@ find-up@^4.0.0, find-up@^4.1.0:
path-exists "^4.0.0"
flat-cache@^3.0.4:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.1.1.tgz#a02a15fdec25a8f844ff7cc658f03dd99eb4609b"
- integrity sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee"
+ integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==
dependencies:
flatted "^3.2.9"
keyv "^4.5.3"
rimraf "^3.0.2"
flat-cache@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.0.tgz#d12437636f83bb8a12b8f300c36fd1614e1c7224"
- integrity sha512-EryKbCE/wxpxKniQlyas6PY1I9vwtF3uCBweX+N8KYTCn3Y12RTGtQAJ/bd5pl7kxUAc8v/R3Ake/N17OZiFqA==
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c"
+ integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==
dependencies:
flatted "^3.2.9"
keyv "^4.5.4"
- rimraf "^5.0.5"
flat@^5.0.2:
version "5.0.2"
@@ -6356,14 +6219,14 @@ flat@^5.0.2:
integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
flatted@^3.2.9:
- version "3.2.9"
- resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf"
- integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a"
+ integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==
-follow-redirects@^1.12.1, follow-redirects@^1.14.0, 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==
+follow-redirects@^1.12.1, follow-redirects@^1.14.0, follow-redirects@^1.15.6:
+ version "1.15.6"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b"
+ integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==
for-each@^0.3.3:
version "0.3.3"
@@ -6372,14 +6235,6 @@ for-each@^0.3.3:
dependencies:
is-callable "^1.1.3"
-foreground-child@^3.1.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d"
- integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==
- dependencies:
- cross-spawn "^7.0.0"
- signal-exit "^4.0.1"
-
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
@@ -6438,10 +6293,10 @@ 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==
+fs-extra@^11.1.1, fs-extra@^11.2.0:
+ version "11.2.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b"
+ integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
@@ -6527,10 +6382,10 @@ ganache@7.4.3:
bufferutil "4.0.5"
utf-8-validate "5.0.7"
-gensequence@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/gensequence/-/gensequence-6.0.0.tgz#ae46a0f89ebd7cc334e45cfb8f1c99a65248694e"
- integrity sha512-8WwuywE9pokJRAcg2QFR/plk3cVPebSUqRPzpGQh3WQ0wIiHAw+HyOQj5IuHyUTQBHpBKFoB2JUMu9zT3vJ16Q==
+gensequence@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/gensequence/-/gensequence-7.0.0.tgz#bb6aedec8ff665e3a6c42f92823121e3a6ea7718"
+ integrity sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
@@ -6547,11 +6402,12 @@ get-func-name@^2.0.1, get-func-name@^2.0.2:
resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41"
integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==
-get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b"
- integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==
+get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
+ integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
dependencies:
+ es-errors "^1.3.0"
function-bind "^1.1.2"
has-proto "^1.0.1"
has-symbols "^1.0.3"
@@ -6582,26 +6438,37 @@ get-stdin@~5.0.1:
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
integrity sha512-jZV7n6jGE3Gt7fgSTJoz91Ak5MuTLwMwkoYdjxuJ/AmjIsE1UC03y/IWkZCQGEvVNS9qoRNwy5BCqxImv0FVeA==
-get-stream@^6.0.0, get-stream@^6.0.1:
+get-stream@^6.0.0:
version "6.0.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-get-symbol-description@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
- integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
+get-symbol-description@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
+ integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==
dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.1.1"
+ call-bind "^1.0.5"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
get-tsconfig@^4.5.0:
- version "4.7.2"
- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce"
- integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==
+ version "4.7.3"
+ resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.3.tgz#0498163d98f7b58484dd4906999c0c9d5f103f83"
+ integrity sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==
dependencies:
resolve-pkg-maps "^1.0.0"
+get-uri@^6.0.1:
+ version "6.0.3"
+ resolved "https://registry.yarnpkg.com/get-uri/-/get-uri-6.0.3.tgz#0d26697bc13cf91092e519aa63aa60ee5b6f385a"
+ integrity sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==
+ dependencies:
+ basic-ftp "^5.0.2"
+ data-uri-to-buffer "^6.0.2"
+ debug "^4.3.4"
+ fs-extra "^11.2.0"
+
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
@@ -6655,16 +6522,16 @@ glob@7.2.0:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^10.3.7:
- version "10.3.10"
- resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b"
- integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==
+glob@8.1.0, glob@^8.0.3:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
+ integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
dependencies:
- foreground-child "^3.1.0"
- jackspeak "^2.3.5"
- minimatch "^9.0.1"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
- path-scurry "^1.10.1"
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^5.0.1"
+ once "^1.3.0"
glob@^5.0.15:
version "5.0.15"
@@ -6689,17 +6556,6 @@ glob@^7.0.0, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^8.0.3:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
- integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^5.0.1"
- once "^1.3.0"
-
glob@~8.0.3:
version "8.0.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e"
@@ -6739,20 +6595,13 @@ globals@^11.1.0:
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
-globals@^13.19.0:
+globals@^13.19.0, globals@^13.6.0, globals@^13.9.0:
version "13.24.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
dependencies:
type-fest "^0.20.2"
-globals@^13.6.0, globals@^13.9.0:
- version "13.23.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02"
- integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==
- dependencies:
- type-fest "^0.20.2"
-
globalthis@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
@@ -6848,9 +6697,9 @@ hardhat-contract-sizer@^2.0.2:
strip-ansi "^6.0.0"
hardhat-gas-reporter@^1.0.9:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.9.tgz#9a2afb354bc3b6346aab55b1c02ca556d0e16450"
- integrity sha512-INN26G3EW43adGKBNzYWOlI3+rlLnasXTwW79YNnUhXPDa+yHESgt639dJEs37gCjhkbNKcRRJnomXEuMFBXJg==
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz#ebe5bda5334b5def312747580cd923c2b09aef1b"
+ integrity sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA==
dependencies:
array-uniq "1.0.3"
eth-gas-reporter "^0.2.25"
@@ -6917,22 +6766,16 @@ hardhat@=2.16.0:
ws "^7.4.6"
hardhat@^2.18.3:
- version "2.19.2"
- resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.2.tgz#815819e4efd234941d495decb718b358d572e2c8"
- integrity sha512-CRU3+0Cc8Qh9UpxKd8cLADDPes7ZDtKj4dTK+ERtLBomEzhRPLWklJn4VKOwjre9/k8GNd/e9DYxpfuzcxbXPQ==
+ version "2.22.2"
+ resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.2.tgz#0cadd7ec93bf39bab09f81603e75bc5e92acea3d"
+ integrity sha512-0xZ7MdCZ5sJem4MrvpQWLR3R3zGDoHw5lsR+pBFimqwagimIOn3bWuZv69KA+veXClwI1s/zpqgwPwiFrd4Dxw==
dependencies:
"@ethersproject/abi" "^5.1.2"
"@metamask/eth-sig-util" "^4.0.0"
- "@nomicfoundation/ethereumjs-block" "5.0.2"
- "@nomicfoundation/ethereumjs-blockchain" "7.0.2"
- "@nomicfoundation/ethereumjs-common" "4.0.2"
- "@nomicfoundation/ethereumjs-evm" "2.0.2"
- "@nomicfoundation/ethereumjs-rlp" "5.0.2"
- "@nomicfoundation/ethereumjs-statemanager" "2.0.2"
- "@nomicfoundation/ethereumjs-trie" "6.0.2"
- "@nomicfoundation/ethereumjs-tx" "5.0.2"
- "@nomicfoundation/ethereumjs-util" "9.0.2"
- "@nomicfoundation/ethereumjs-vm" "7.0.2"
+ "@nomicfoundation/edr" "^0.3.1"
+ "@nomicfoundation/ethereumjs-common" "4.0.4"
+ "@nomicfoundation/ethereumjs-tx" "5.0.4"
+ "@nomicfoundation/ethereumjs-util" "9.0.4"
"@nomicfoundation/solidity-analyzer" "^0.1.0"
"@sentry/node" "^5.18.1"
"@types/bn.js" "^5.1.0"
@@ -6940,6 +6783,7 @@ hardhat@^2.18.3:
adm-zip "^0.4.16"
aggregate-error "^3.0.0"
ansi-escapes "^4.3.0"
+ boxen "^5.1.2"
chalk "^2.4.2"
chokidar "^3.4.0"
ci-info "^2.0.0"
@@ -6995,29 +6839,29 @@ has-own-prop@^2.0.0:
resolved "https://registry.yarnpkg.com/has-own-prop/-/has-own-prop-2.0.0.tgz#f0f95d58f65804f5d218db32563bb85b8e0417af"
integrity sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==
-has-property-descriptors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340"
- integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==
+has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
+ integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
dependencies:
- get-intrinsic "^1.2.2"
+ es-define-property "^1.0.0"
-has-proto@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
- integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
+has-proto@^1.0.1, has-proto@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
+ integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
has-symbols@^1.0.2, has-symbols@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
-has-tostringtag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
- integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
+has-tostringtag@^1.0.0, has-tostringtag@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
+ integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
dependencies:
- has-symbols "^1.0.2"
+ has-symbols "^1.0.3"
hash-base@^3.0.0:
version "3.1.0"
@@ -7036,10 +6880,10 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
-hasown@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c"
- integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==
+hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
+ integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
dependencies:
function-bind "^1.1.2"
@@ -7110,6 +6954,14 @@ http-errors@2.0.0:
statuses "2.0.1"
toidentifier "1.0.1"
+http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.1:
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
+ integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
+ dependencies:
+ agent-base "^7.1.0"
+ debug "^4.3.4"
+
http-response-object@^3.0.1:
version "3.0.2"
resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810"
@@ -7134,16 +6986,19 @@ https-proxy-agent@^5.0.0:
agent-base "6"
debug "4"
+https-proxy-agent@^7.0.2, https-proxy-agent@^7.0.3:
+ version "7.0.4"
+ resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168"
+ integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==
+ dependencies:
+ agent-base "^7.0.2"
+ debug "4"
+
human-signals@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-human-signals@^4.3.0:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2"
- integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==
-
iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -7168,21 +7023,21 @@ ignore@^4.0.6:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-ignore@^5.1.1:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78"
- integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==
-
-ignore@^5.2.0, ignore@^5.2.4, ignore@~5.2.4:
- version "5.2.4"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
- integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+ignore@^5.1.1, ignore@^5.2.0, ignore@^5.2.4:
+ version "5.3.1"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
+ integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==
ignore@~5.1.4:
version "5.1.9"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb"
integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ==
+ignore@~5.2.4:
+ version "5.2.4"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
+ integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
+
immediate@^3.2.3:
version "3.3.0"
resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266"
@@ -7194,9 +7049,9 @@ immediate@~3.2.3:
integrity sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==
immutable@^4.0.0-rc.12:
- version "4.3.4"
- resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.4.tgz#2e07b33837b4bb7662f288c244d1ced1ef65a78f"
- integrity sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==
+ version "4.3.5"
+ resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0"
+ integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==
import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0:
version "3.3.0"
@@ -7281,12 +7136,12 @@ inquirer@^6.0.0:
strip-ansi "^5.1.0"
through "^2.3.6"
-internal-slot@^1.0.5:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930"
- integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==
+internal-slot@^1.0.7:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802"
+ integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==
dependencies:
- get-intrinsic "^1.2.2"
+ es-errors "^1.3.0"
hasown "^2.0.0"
side-channel "^1.0.4"
@@ -7302,19 +7157,26 @@ io-ts@1.10.4:
dependencies:
fp-ts "^1.0.0"
+ip-address@^9.0.5:
+ version "9.0.5"
+ resolved "https://registry.yarnpkg.com/ip-address/-/ip-address-9.0.5.tgz#117a960819b08780c3bd1f14ef3c1cc1d3f3ea5a"
+ integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==
+ dependencies:
+ jsbn "1.1.0"
+ sprintf-js "^1.1.3"
+
is-absolute-url@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-4.0.1.tgz#16e4d487d4fded05cfe0685e53ec86804a5e94dc"
integrity sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==
-is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
- integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
+is-array-buffer@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98"
+ integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==
dependencies:
call-bind "^1.0.2"
- get-intrinsic "^1.2.0"
- is-typed-array "^1.1.10"
+ get-intrinsic "^1.2.1"
is-arrayish@^0.2.1:
version "0.2.1"
@@ -7360,6 +7222,13 @@ is-core-module@^2.11.0, is-core-module@^2.13.0, is-core-module@^2.13.1:
dependencies:
hasown "^2.0.0"
+is-data-view@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f"
+ integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==
+ dependencies:
+ is-typed-array "^1.1.13"
+
is-date-object@^1.0.1:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
@@ -7367,16 +7236,6 @@ is-date-object@^1.0.1:
dependencies:
has-tostringtag "^1.0.0"
-is-docker@^2.0.0:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
- integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
-
-is-docker@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200"
- integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
-
is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -7414,17 +7273,10 @@ is-hex-prefixed@1.0.0:
resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554"
integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==
-is-inside-container@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
- integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
- dependencies:
- is-docker "^3.0.0"
-
-is-negative-zero@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
- integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
+is-negative-zero@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
+ integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
is-number-object@^1.0.4:
version "1.0.7"
@@ -7468,23 +7320,18 @@ is-relative-url@^4.0.0:
dependencies:
is-absolute-url "^4.0.1"
-is-shared-array-buffer@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
- integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
+is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688"
+ integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==
dependencies:
- call-bind "^1.0.2"
+ call-bind "^1.0.7"
is-stream@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
-is-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
- integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
-
is-string@^1.0.5, is-string@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
@@ -7499,12 +7346,12 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
dependencies:
has-symbols "^1.0.2"
-is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9:
- version "1.1.12"
- resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a"
- integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==
+is-typed-array@^1.1.13:
+ version "1.1.13"
+ resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229"
+ integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==
dependencies:
- which-typed-array "^1.1.11"
+ which-typed-array "^1.1.14"
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
version "1.0.0"
@@ -7528,13 +7375,6 @@ is-weakref@^1.0.2:
dependencies:
call-bind "^1.0.2"
-is-wsl@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
- integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
- dependencies:
- is-docker "^2.0.0"
-
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -7568,9 +7408,9 @@ isstream@~0.1.2:
integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==
istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.1.tgz#c680fd1544600460367af5811866c34c44c6f3b1"
- integrity sha512-opCrKqbthmq3SKZ10mFMQG9dk3fTa3quaOLD35kJa5ejwZHd9xAr+kLuziiZz2cG32s4lMZxNdmdcEQnTDP4+g==
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756"
+ integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==
istanbul-lib-instrument@^5.0.4:
version "5.2.1"
@@ -7584,13 +7424,13 @@ istanbul-lib-instrument@^5.0.4:
semver "^6.3.0"
istanbul-lib-instrument@^6.0.0:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf"
- integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz#91655936cf7380e4e473383081e38478b69993b1"
+ integrity sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==
dependencies:
- "@babel/core" "^7.12.3"
- "@babel/parser" "^7.14.7"
- "@istanbuljs/schema" "^0.1.2"
+ "@babel/core" "^7.23.9"
+ "@babel/parser" "^7.23.9"
+ "@istanbuljs/schema" "^0.1.3"
istanbul-lib-coverage "^3.2.0"
semver "^7.5.4"
@@ -7613,22 +7453,13 @@ istanbul-lib-source-maps@^4.0.0:
source-map "^0.6.1"
istanbul-reports@^3.1.3:
- version "3.1.6"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a"
- integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==
+ version "3.1.7"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b"
+ integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==
dependencies:
html-escaper "^2.0.0"
istanbul-lib-report "^3.0.0"
-jackspeak@^2.3.5:
- version "2.3.6"
- resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
- integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==
- dependencies:
- "@isaacs/cliui" "^8.0.2"
- optionalDependencies:
- "@pkgjs/parseargs" "^0.11.0"
-
jest-changed-files@^29.7.0:
version "29.7.0"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a"
@@ -8030,6 +7861,11 @@ js-yaml@~3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
+jsbn@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
+ integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
+
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -8105,9 +7941,9 @@ jsonc-parser@~2.2.0:
integrity sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==
jsonc-parser@~3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76"
- integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a"
+ integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==
jsonfile@^2.1.0:
version "2.4.0"
@@ -8244,8 +8080,7 @@ kleur@^3.0.3:
version "0.1.0"
dependencies:
dotenv "^16.0.3"
- optionalDependencies:
- zksync-web3 "^0.14.3"
+ solhint-plugin-prettier "^0.0.5"
"l2-contracts@link:contracts/l2-contracts":
version "0.1.0"
@@ -8338,10 +8173,11 @@ level-ws@^2.0.0:
xtend "^4.0.1"
level@^8.0.0:
- version "8.0.0"
- resolved "https://registry.yarnpkg.com/level/-/level-8.0.0.tgz#41b4c515dabe28212a3e881b61c161ffead14394"
- integrity sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379"
+ integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ==
dependencies:
+ abstract-level "^1.0.4"
browser-level "^1.0.1"
classic-level "^1.2.0"
@@ -8391,15 +8227,16 @@ lines-and-columns@^1.1.6:
resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
-link-check@^5.2.0:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/link-check/-/link-check-5.2.0.tgz#595a339d305900bed8c1302f4342a29c366bf478"
- integrity sha512-xRbhYLaGDw7eRDTibTAcl6fXtmUQ13vkezQiTqshHHdGueQeumgxxmQMIOmJYsh2p8BF08t8thhDQ++EAOOq3w==
+link-check@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/link-check/-/link-check-5.3.0.tgz#641f907a76858f18e32d457fe2811d431d1b8aec"
+ integrity sha512-Jhb7xueDgQgBaZzkfOtAyOZEZAIMJQIjUpYD2QY/zEB+LKTY1tWiBwZg8QIDbzQdPBOcqzg7oLQDNcES/tQmXg==
dependencies:
is-relative-url "^4.0.0"
isemail "^3.2.0"
ms "^2.1.3"
- needle "^3.1.0"
+ needle "^3.3.1"
+ proxy-agent "^6.4.0"
linkify-it@^3.0.1:
version "3.0.3"
@@ -8566,10 +8403,10 @@ lru-cache@^6.0.0:
dependencies:
yallist "^4.0.0"
-"lru-cache@^9.1.1 || ^10.0.0":
- version "10.1.0"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484"
- integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==
+lru-cache@^7.14.1:
+ version "7.18.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+ integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
lru_map@^0.3.3:
version "0.3.3"
@@ -8623,26 +8460,27 @@ markdown-it@13.0.1:
uc.micro "^1.0.5"
markdown-link-check@^3.11.2:
- version "3.11.2"
- resolved "https://registry.yarnpkg.com/markdown-link-check/-/markdown-link-check-3.11.2.tgz#303a8a03d4a34c42ef3158e0b245bced26b5d904"
- integrity sha512-zave+vI4AMeLp0FlUllAwGbNytSKsS3R2Zgtf3ufVT892Z/L6Ro9osZwE9PNA7s0IkJ4onnuHqatpsaCiAShJw==
+ version "3.12.1"
+ resolved "https://registry.yarnpkg.com/markdown-link-check/-/markdown-link-check-3.12.1.tgz#96274ff595fd950a07477c88f1c90af0643e25da"
+ integrity sha512-qjaopy0tcZFKMhr+wAOQf7KyValRXygTOaZQ3Ka1rf+nyObIUdU9hUVY93gYysz8+hx92YnXnKh1dmNRPO/5bA==
dependencies:
- async "^3.2.4"
+ async "^3.2.5"
chalk "^5.2.0"
commander "^10.0.1"
- link-check "^5.2.0"
+ link-check "^5.3.0"
lodash "^4.17.21"
- markdown-link-extractor "^3.1.0"
- needle "^3.2.0"
+ markdown-link-extractor "^4.0.2"
+ needle "^3.3.1"
progress "^2.0.3"
+ proxy-agent "^6.4.0"
-markdown-link-extractor@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/markdown-link-extractor/-/markdown-link-extractor-3.1.0.tgz#0d5a703630d791a9e2017449e1a9b294f2d2b676"
- integrity sha512-r0NEbP1dsM+IqB62Ru9TXLP/HDaTdBNIeylYXumuBi6Xv4ufjE1/g3TnslYL8VNqNcGAGbMptQFHrrdfoZ/Sug==
+markdown-link-extractor@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/markdown-link-extractor/-/markdown-link-extractor-4.0.2.tgz#464ff8935d7388f75a354b877d750a7bb705ea32"
+ integrity sha512-5cUOu4Vwx1wenJgxaudsJ8xwLUMN7747yDJX3V/L7+gi3e4MsCm7w5nbrDQQy8nEfnl4r5NV3pDXMAjhGXYXAw==
dependencies:
html-link-extractor "^1.0.5"
- marked "^4.1.0"
+ marked "^12.0.1"
markdown-table@^1.1.3:
version "1.1.3"
@@ -8703,10 +8541,10 @@ markdownlint@~0.27.0:
dependencies:
markdown-it "13.0.1"
-marked@^4.1.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3"
- integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==
+marked@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/marked/-/marked-12.0.1.tgz#8ab1eb15560c7cbe3b011074845d7ca6c4d392b0"
+ integrity sha512-Y1/V2yafOcOdWQCX0XpAKXzDakPOpn6U0YLxTJs3cww6VxOzZV1BTOOYWLvH3gX38cq+iLwljHHTnMtlDfg01Q==
mcl-wasm@^0.7.1:
version "0.7.9"
@@ -8829,11 +8667,6 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
-mimic-fn@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
- integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
-
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
@@ -8865,6 +8698,13 @@ minimatch@5.0.1:
dependencies:
brace-expansion "^2.0.1"
+minimatch@9.0.3:
+ version "9.0.3"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
+ integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
+ dependencies:
+ brace-expansion "^2.0.1"
+
minimatch@^5.0.1, minimatch@~5.1.2:
version "5.1.6"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
@@ -8879,13 +8719,6 @@ minimatch@^7.4.3:
dependencies:
brace-expansion "^2.0.1"
-minimatch@^9.0.1:
- version "9.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825"
- integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==
- dependencies:
- brace-expansion "^2.0.1"
-
minimatch@~3.0.4:
version "3.0.8"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.8.tgz#5e6a59bd11e2ab0de1cfb843eb2d82e546c321c1"
@@ -8898,11 +8731,6 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6, minimist@^1.2.8, minimist@~1.
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
-"minipass@^5.0.0 || ^6.0.2 || ^7.0.0":
- version "7.0.4"
- resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
- integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
-
mkdirp-classic@^0.5.2:
version "0.5.3"
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
@@ -8937,10 +8765,10 @@ mocha-steps@^1.3.0:
resolved "https://registry.yarnpkg.com/mocha-steps/-/mocha-steps-1.3.0.tgz#2449231ec45ec56810f65502cb22e2571862957f"
integrity sha512-KZvpMJTqzLZw3mOb+EEuYi4YZS41C9iTnb7skVFRxHjUd1OYbl64tCMSmpdIRM9LnwIrSOaRfPtNpF5msgv6Eg==
-mocha@10.2.0, mocha@^10.0.0, mocha@^10.2.0:
- version "10.2.0"
- resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8"
- integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==
+mocha@^10.0.0, mocha@^10.2.0:
+ version "10.4.0"
+ resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261"
+ integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==
dependencies:
ansi-colors "4.1.1"
browser-stdout "1.3.1"
@@ -8949,13 +8777,12 @@ mocha@10.2.0, mocha@^10.0.0, mocha@^10.2.0:
diff "5.0.0"
escape-string-regexp "4.0.0"
find-up "5.0.0"
- glob "7.2.0"
+ glob "8.1.0"
he "1.2.0"
js-yaml "4.1.0"
log-symbols "4.1.0"
minimatch "5.0.1"
ms "2.1.3"
- nanoid "3.3.3"
serialize-javascript "6.0.0"
strip-json-comments "3.1.1"
supports-color "8.1.1"
@@ -9024,21 +8851,7 @@ mute-stream@0.0.7:
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==
-mz@^2.7.0:
- version "2.7.0"
- resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32"
- integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==
- dependencies:
- any-promise "^1.0.0"
- object-assign "^4.0.1"
- thenify-all "^1.0.0"
-
-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==
-
-nan@^2.18.0:
+nan@^2.17.0, nan@^2.18.0:
version "2.19.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.19.0.tgz#bb58122ad55a6c5bc973303908d5b16cfdd5a8c0"
integrity sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==
@@ -9048,11 +8861,6 @@ nanoid@3.3.1:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35"
integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==
-nanoid@3.3.3:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
- integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
-
napi-macros@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044"
@@ -9078,7 +8886,7 @@ nearley@^2.20.1:
railroad-diagrams "^1.0.0"
randexp "0.4.6"
-needle@^3.1.0, needle@^3.2.0:
+needle@^3.3.1:
version "3.3.1"
resolved "https://registry.yarnpkg.com/needle/-/needle-3.3.1.tgz#63f75aec580c2e77e209f3f324e2cdf3d29bd049"
integrity sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==
@@ -9091,6 +8899,11 @@ neo-async@^2.6.2:
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
+netmask@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7"
+ integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==
+
nice-try@^1.0.4:
version "1.0.5"
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
@@ -9137,19 +8950,19 @@ node-gyp-build@4.4.0:
integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==
node-gyp-build@^4.2.0, node-gyp-build@^4.3.0:
- version "4.6.1"
- resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.1.tgz#24b6d075e5e391b8d5539d98c7fc5c210cac8a3e"
- integrity sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==
+ version "4.8.0"
+ resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd"
+ integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==
-node-releases@^2.0.13:
- version "2.0.13"
- resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d"
- integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==
+node-releases@^2.0.14:
+ version "2.0.14"
+ resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
+ integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
nofilter@^3.1.0:
version "3.1.0"
@@ -9200,13 +9013,6 @@ npm-run-path@^4.0.1:
dependencies:
path-key "^3.0.0"
-npm-run-path@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00"
- integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
- dependencies:
- path-key "^4.0.0"
-
nth-check@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
@@ -9227,12 +9033,12 @@ oauth-sign@~0.9.0:
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
-object-assign@^4.0.1, object-assign@^4.1.0:
+object-assign@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
-object-inspect@^1.13.1, object-inspect@^1.9.0:
+object-inspect@^1.13.1:
version "1.13.1"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
@@ -9242,43 +9048,43 @@ object-keys@^1.1.1:
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
-object.assign@^4.1.4:
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
- integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
+object.assign@^4.1.5:
+ version "4.1.5"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
+ integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.1.4"
+ call-bind "^1.0.5"
+ define-properties "^1.2.1"
has-symbols "^1.0.3"
object-keys "^1.1.1"
object.fromentries@^2.0.7:
- version "2.0.7"
- resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616"
- integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==
+ version "2.0.8"
+ resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65"
+ integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
object.groupby@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee"
- integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e"
+ integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
- get-intrinsic "^1.2.1"
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
object.values@^1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a"
- integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b"
+ integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
obliterator@^2.0.0:
version "2.0.4"
@@ -9311,23 +9117,6 @@ onetime@^5.1.2:
dependencies:
mimic-fn "^2.1.0"
-onetime@^6.0.0:
- version "6.0.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
- integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
- dependencies:
- mimic-fn "^4.0.0"
-
-open@^9.1.0:
- version "9.1.0"
- resolved "https://registry.yarnpkg.com/open/-/open-9.1.0.tgz#684934359c90ad25742f5a26151970ff8c6c80b6"
- integrity sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==
- dependencies:
- default-browser "^4.0.0"
- define-lazy-prop "^3.0.0"
- is-inside-container "^1.0.0"
- is-wsl "^2.2.0"
-
optionator@^0.8.1:
version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
@@ -9428,10 +9217,27 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-packet-reader@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74"
- integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==
+pac-proxy-agent@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz#6b9ddc002ec3ff0ba5fdf4a8a21d363bcc612d75"
+ integrity sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==
+ dependencies:
+ "@tootallnate/quickjs-emscripten" "^0.23.0"
+ agent-base "^7.0.2"
+ debug "^4.3.4"
+ get-uri "^6.0.1"
+ http-proxy-agent "^7.0.0"
+ https-proxy-agent "^7.0.2"
+ pac-resolver "^7.0.0"
+ socks-proxy-agent "^8.0.2"
+
+pac-resolver@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/pac-resolver/-/pac-resolver-7.0.1.tgz#54675558ea368b64d210fd9c92a640b5f3b8abb6"
+ integrity sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==
+ dependencies:
+ degenerator "^5.0.0"
+ netmask "^2.0.2"
parent-module@^1.0.0:
version "1.0.1"
@@ -9515,24 +9321,11 @@ path-key@^3.0.0, path-key@^3.1.0:
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-path-key@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
- integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
-
path-parse@^1.0.6, path-parse@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
-path-scurry@^1.10.1:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698"
- integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==
- dependencies:
- lru-cache "^9.1.1 || ^10.0.0"
- minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
-
path-to-regexp@^6.2.1:
version "6.2.2"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-6.2.2.tgz#324377a83e5049cbecadc5554d6a63a9a4866b36"
@@ -9589,10 +9382,10 @@ pg-cloudflare@^1.1.1:
resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98"
integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==
-pg-connection-string@^2.6.2:
- version "2.6.2"
- resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475"
- integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==
+pg-connection-string@^2.6.4:
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.4.tgz#f543862adfa49fa4e14bc8a8892d2a84d754246d"
+ integrity sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==
pg-int8@1.0.1:
version "1.0.1"
@@ -9604,15 +9397,15 @@ pg-numeric@1.0.2:
resolved "https://registry.yarnpkg.com/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a"
integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==
-pg-pool@^3.6.1:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7"
- integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og==
+pg-pool@^3.6.2:
+ version "3.6.2"
+ resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.2.tgz#3a592370b8ae3f02a7c8130d245bc02fa2c5f3f2"
+ integrity sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==
-pg-protocol@*, pg-protocol@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833"
- integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==
+pg-protocol@*, pg-protocol@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.1.tgz#21333e6d83b01faaebfe7a33a7ad6bfd9ed38cb3"
+ integrity sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==
pg-types@^2.1.0:
version "2.2.0"
@@ -9626,28 +9419,26 @@ pg-types@^2.1.0:
postgres-interval "^1.1.0"
pg-types@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.1.tgz#31857e89d00a6c66b06a14e907c3deec03889542"
- integrity sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g==
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.2.tgz#399209a57c326f162461faa870145bb0f918b76d"
+ integrity sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==
dependencies:
pg-int8 "1.0.1"
pg-numeric "1.0.2"
postgres-array "~3.0.1"
postgres-bytea "~3.0.0"
- postgres-date "~2.0.1"
+ postgres-date "~2.1.0"
postgres-interval "^3.0.0"
postgres-range "^1.1.1"
pg@^8.11.3:
- version "8.11.3"
- resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb"
- integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g==
- dependencies:
- buffer-writer "2.0.0"
- packet-reader "1.0.0"
- pg-connection-string "^2.6.2"
- pg-pool "^3.6.1"
- pg-protocol "^1.6.0"
+ version "8.11.5"
+ resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128"
+ integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==
+ dependencies:
+ pg-connection-string "^2.6.4"
+ pg-pool "^3.6.2"
+ pg-protocol "^1.6.1"
pg-types "^2.1.0"
pgpass "1.x"
optionalDependencies:
@@ -9702,6 +9493,11 @@ pluralize@^8.0.0:
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1"
integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==
+possible-typed-array-names@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
+ integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
+
postgres-array@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
@@ -9729,10 +9525,10 @@ postgres-date@~1.0.4:
resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
-postgres-date@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.0.1.tgz#638b62e5c33764c292d37b08f5257ecb09231457"
- integrity sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw==
+postgres-date@~2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.1.0.tgz#b85d3c1fb6fb3c6c8db1e9942a13a3bf625189d0"
+ integrity sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==
postgres-interval@^1.1.0:
version "1.2.0"
@@ -9747,9 +9543,9 @@ postgres-interval@^3.0.0:
integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==
postgres-range@^1.1.1:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.3.tgz#9ccd7b01ca2789eb3c2e0888b3184225fa859f76"
- integrity sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g==
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.4.tgz#a59c5f9520909bcec5e63e8cf913a92e4c952863"
+ integrity sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==
prelude-ls@^1.2.1:
version "1.2.1"
@@ -9788,13 +9584,13 @@ prettier-plugin-solidity@=1.0.0-dev.22:
string-width "^4.2.3"
prettier-plugin-solidity@^1.1.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.2.0.tgz#dc620b4fc7708a60687a87cdc803e57a1856b6fd"
- integrity sha512-fgxcUZpVAP+LlRfy5JI5oaAkXGkmsje2VJ5krv/YMm+rcTZbIUwFguSw5f+WFuttMjpDm6wB4UL7WVkArEfiVA==
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.3.1.tgz#59944d3155b249f7f234dee29f433524b9a4abcf"
+ integrity sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==
dependencies:
- "@solidity-parser/parser" "^0.16.2"
+ "@solidity-parser/parser" "^0.17.0"
semver "^7.5.4"
- solidity-comments-extractor "^0.0.7"
+ solidity-comments-extractor "^0.0.8"
prettier@^2.1.2, prettier@^2.3.1, prettier@^2.3.2, prettier@^2.8.3:
version "2.8.8"
@@ -9802,9 +9598,9 @@ prettier@^2.1.2, prettier@^2.3.1, prettier@^2.3.2, prettier@^2.8.3:
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
prettier@^3.0.3:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.1.1.tgz#6ba9f23165d690b6cbdaa88cb0807278f7019848"
- integrity sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==
+ version "3.2.5"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368"
+ integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==
pretty-format@^29.0.0, pretty-format@^29.7.0:
version "29.7.0"
@@ -9863,9 +9659,9 @@ proper-lockfile@^4.1.2:
signal-exit "^3.0.2"
protobufjs@^7.2.5:
- version "7.2.5"
- resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.5.tgz#45d5c57387a6d29a17aab6846dcc283f9b8e7f2d"
- integrity sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==
+ version "7.2.6"
+ resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.2.6.tgz#4a0ccd79eb292717aacf07530a07e0ed20278215"
+ integrity sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==
dependencies:
"@protobufjs/aspromise" "^1.1.2"
"@protobufjs/base64" "^1.1.2"
@@ -9880,6 +9676,20 @@ protobufjs@^7.2.5:
"@types/node" ">=13.7.0"
long "^5.0.0"
+proxy-agent@^6.4.0:
+ version "6.4.0"
+ resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.4.0.tgz#b4e2dd51dee2b377748aef8d45604c2d7608652d"
+ integrity sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==
+ dependencies:
+ agent-base "^7.0.2"
+ debug "^4.3.4"
+ http-proxy-agent "^7.0.1"
+ https-proxy-agent "^7.0.3"
+ lru-cache "^7.14.1"
+ pac-proxy-agent "^7.0.1"
+ proxy-from-env "^1.1.0"
+ socks-proxy-agent "^8.0.2"
+
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"
@@ -9911,7 +9721,7 @@ pump@^3.0.0:
end-of-stream "^1.1.0"
once "^1.3.1"
-punycode@2.x.x, punycode@^2.1.1:
+punycode@2.x.x, punycode@^2.1.0, punycode@^2.1.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
@@ -9921,22 +9731,17 @@ punycode@^1.4.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==
-punycode@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
- integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
-
pure-rand@^6.0.0:
- version "6.0.4"
- resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7"
- integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2"
+ integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==
qs@^6.11.2, qs@^6.4.0:
- version "6.11.2"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9"
- integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==
+ version "6.12.0"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.0.tgz#edd40c3b823995946a8a0b1f208669c7a200db77"
+ integrity sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg==
dependencies:
- side-channel "^1.0.4"
+ side-channel "^1.0.6"
qs@~6.5.2:
version "6.5.3"
@@ -10070,14 +9875,15 @@ regenerator-runtime@^0.11.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
-regexp.prototype.flags@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e"
- integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==
+regexp.prototype.flags@^1.5.2:
+ version "1.5.2"
+ resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334"
+ integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- set-function-name "^2.0.0"
+ call-bind "^1.0.6"
+ define-properties "^1.2.1"
+ es-errors "^1.3.0"
+ set-function-name "^2.0.1"
regexpp@^3.1.0:
version "3.2.0"
@@ -10229,13 +10035,6 @@ rimraf@^3.0.2:
dependencies:
glob "^7.1.3"
-rimraf@^5.0.5:
- version "5.0.5"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-5.0.5.tgz#9be65d2d6e683447d2e9013da2bf451139a61ccf"
- integrity sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==
- dependencies:
- glob "^10.3.7"
-
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -10258,13 +10057,6 @@ rlp@^2.2.3, rlp@^2.2.4:
dependencies:
bn.js "^5.2.0"
-run-applescript@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-5.0.0.tgz#e11e1c932e055d5c6b40d98374e0268d9b11899c"
- integrity sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==
- dependencies:
- execa "^5.0.0"
-
run-async@^2.2.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@@ -10306,13 +10098,13 @@ rxjs@^6.4.0:
dependencies:
tslib "^1.9.0"
-safe-array-concat@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c"
- integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==
+safe-array-concat@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb"
+ integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==
dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.2.1"
+ call-bind "^1.0.7"
+ get-intrinsic "^1.2.4"
has-symbols "^1.0.3"
isarray "^2.0.5"
@@ -10326,13 +10118,13 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
-safe-regex-test@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
- integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
+safe-regex-test@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
+ integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==
dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.1.3"
+ call-bind "^1.0.6"
+ es-errors "^1.3.0"
is-regex "^1.1.4"
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
@@ -10399,10 +10191,10 @@ semver@^6.3.0, semver@^6.3.1:
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
-semver@^7.2.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1, semver@^7.5.2, 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==
+semver@^7.2.1, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.1, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0:
+ version "7.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d"
+ integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
dependencies:
lru-cache "^6.0.0"
@@ -10413,24 +10205,27 @@ serialize-javascript@6.0.0:
dependencies:
randombytes "^2.1.0"
-set-function-length@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed"
- integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==
+set-function-length@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
+ integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
dependencies:
- define-data-property "^1.1.1"
- get-intrinsic "^1.2.1"
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
+ function-bind "^1.1.2"
+ get-intrinsic "^1.2.4"
gopd "^1.0.1"
- has-property-descriptors "^1.0.0"
+ has-property-descriptors "^1.0.2"
-set-function-name@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a"
- integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==
+set-function-name@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
+ integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
dependencies:
- define-data-property "^1.0.1"
+ define-data-property "^1.1.4"
+ es-errors "^1.3.0"
functions-have-names "^1.2.3"
- has-property-descriptors "^1.0.0"
+ has-property-descriptors "^1.0.2"
set-immediate-shim@^1.0.1:
version "1.0.1"
@@ -10501,25 +10296,21 @@ shelljs@^0.8.3:
interpret "^1.0.0"
rechoir "^0.6.2"
-side-channel@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
- integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
+side-channel@^1.0.4, side-channel@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
+ integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
dependencies:
- call-bind "^1.0.0"
- get-intrinsic "^1.0.2"
- object-inspect "^1.9.0"
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ get-intrinsic "^1.2.4"
+ object-inspect "^1.13.1"
signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
version "3.0.7"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
-signal-exit@^4.0.1:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
- integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
-
sinon-chai@^3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/sinon-chai/-/sinon-chai-3.7.0.tgz#cfb7dec1c50990ed18c153f1840721cf13139783"
@@ -10556,6 +10347,28 @@ slice-ansi@^4.0.0:
astral-regex "^2.0.0"
is-fullwidth-code-point "^3.0.0"
+smart-buffer@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae"
+ integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
+
+socks-proxy-agent@^8.0.2:
+ version "8.0.3"
+ resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz#6b2da3d77364fde6292e810b496cb70440b9b89d"
+ integrity sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==
+ dependencies:
+ agent-base "^7.1.1"
+ debug "^4.3.4"
+ socks "^2.7.1"
+
+socks@^2.7.1:
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/socks/-/socks-2.8.3.tgz#1ebd0f09c52ba95a09750afe3f3f9f724a800cb5"
+ integrity sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==
+ dependencies:
+ ip-address "^9.0.5"
+ smart-buffer "^4.2.0"
+
solc@0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a"
@@ -10597,6 +10410,13 @@ solc@0.8.17:
semver "^5.5.0"
tmp "0.0.33"
+solhint-plugin-prettier@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/solhint-plugin-prettier/-/solhint-plugin-prettier-0.0.5.tgz#e3b22800ba435cd640a9eca805a7f8bc3e3e6a6b"
+ integrity sha512-7jmWcnVshIrO2FFinIvDQmhQpfpS2rRRn3RejiYgnjIE68xO2bvrYvjqVNfrio4xH9ghOqn83tKuTzLjEbmGIA==
+ dependencies:
+ prettier-linter-helpers "^1.0.0"
+
solhint@^3.3.2, solhint@^3.6.2:
version "3.6.2"
resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.6.2.tgz#2b2acbec8fdc37b2c68206a71ba89c7f519943fe"
@@ -10627,24 +10447,28 @@ solidity-comments-extractor@^0.0.7:
resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19"
integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw==
+solidity-comments-extractor@^0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.8.tgz#f6e148ab0c49f30c1abcbecb8b8df01ed8e879f8"
+ integrity sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==
+
solidity-coverage@^0.8.5:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.5.tgz#64071c3a0c06a0cecf9a7776c35f49edc961e875"
- integrity sha512-6C6N6OV2O8FQA0FWA95FdzVH+L16HU94iFgg5wAFZ29UpLFkgNI/DRR2HotG1bC0F4gAc/OMs2BJI44Q/DYlKQ==
+ version "0.8.12"
+ resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.12.tgz#c4fa2f64eff8ada7a1387b235d6b5b0e6c6985ed"
+ integrity sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw==
dependencies:
"@ethersproject/abi" "^5.0.9"
- "@solidity-parser/parser" "^0.16.0"
+ "@solidity-parser/parser" "^0.18.0"
chalk "^2.4.2"
death "^1.1.0"
- detect-port "^1.3.0"
difflib "^0.2.4"
fs-extra "^8.1.0"
ghost-testrpc "^0.0.2"
global-modules "^2.0.0"
globby "^10.0.1"
jsonschema "^1.2.4"
- lodash "^4.17.15"
- mocha "10.2.0"
+ lodash "^4.17.21"
+ mocha "^10.2.0"
node-emoji "^1.10.0"
pify "^4.0.1"
recursive-readdir "^2.2.2"
@@ -10653,21 +10477,6 @@ solidity-coverage@^0.8.5:
shelljs "^0.8.3"
web3-utils "^1.3.6"
-solpp@^0.11.5:
- version "0.11.5"
- resolved "https://registry.yarnpkg.com/solpp/-/solpp-0.11.5.tgz#e5f38b5acc952e1cc2e3871d490fdbed910938dd"
- integrity sha512-LjzCGMrTDXtera2C4mbQGZSpBznP+o3/82L2CneAAMNbm+t4xPsvfrgJkIaY+IZ5YLrB8IXn7cYthwHMKvAWnQ==
- dependencies:
- antlr4 "~4.8.0"
- axios "^0.21.1"
- bn-str-256 "^1.9.1"
- commander "^2.19.0"
- ethereumjs-util "^6.0.0"
- lodash "^4.17.11"
- mz "^2.7.0"
- resolve "^1.10.0"
- semver "^5.6.0"
-
source-map-support@0.5.13:
version "0.5.13"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
@@ -10684,7 +10493,7 @@ source-map-support@^0.5.13:
buffer-from "^1.0.0"
source-map "^0.6.0"
-source-map@^0.6.0, source-map@^0.6.1:
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
@@ -10705,9 +10514,9 @@ spdx-correct@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-exceptions@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
- integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66"
+ integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==
spdx-expression-parse@^3.0.0:
version "3.0.1"
@@ -10718,9 +10527,9 @@ spdx-expression-parse@^3.0.0:
spdx-license-ids "^3.0.0"
spdx-license-ids@^3.0.0:
- version "3.0.16"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f"
- integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c"
+ integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==
split-ca@^1.0.0, split-ca@^1.0.1:
version "1.0.1"
@@ -10732,6 +10541,11 @@ split2@^4.1.0:
resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
+sprintf-js@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
+ integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
@@ -10746,18 +10560,7 @@ sql-formatter@^13.1.0:
get-stdin "=8.0.0"
nearley "^2.20.1"
-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"
-
-ssh2@^1.15.0:
+ssh2@^1.11.0, ssh2@^1.15.0:
version "1.15.0"
resolved "https://registry.yarnpkg.com/ssh2/-/ssh2-1.15.0.tgz#2f998455036a7f89e0df5847efb5421748d9871b"
integrity sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==
@@ -10815,15 +10618,6 @@ string-length@^4.0.1:
char-regex "^1.0.2"
strip-ansi "^6.0.0"
-"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
- version "4.2.3"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
- integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
- dependencies:
- emoji-regex "^8.0.0"
- is-fullwidth-code-point "^3.0.0"
- strip-ansi "^6.0.1"
-
string-width@^2.1.0, string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
@@ -10832,50 +10626,52 @@ string-width@^2.1.0, string-width@^2.1.1:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
-string-width@^5.0.1, string-width@^5.1.2:
- version "5.1.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
- integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
+string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+ integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
dependencies:
- eastasianwidth "^0.2.0"
- emoji-regex "^9.2.2"
- strip-ansi "^7.0.1"
+ emoji-regex "^8.0.0"
+ is-fullwidth-code-point "^3.0.0"
+ strip-ansi "^6.0.1"
string.prototype.padend@^3.0.0:
- version "3.1.5"
- resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz#311ef3a4e3c557dd999cdf88fbdde223f2ac0f95"
- integrity sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==
+ version "3.1.6"
+ resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz#ba79cf8992609a91c872daa47c6bb144ee7f62a5"
+ integrity sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.2"
+ es-object-atoms "^1.0.0"
-string.prototype.trim@^1.2.8:
- version "1.2.8"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd"
- integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==
+string.prototype.trim@^1.2.9:
+ version "1.2.9"
+ resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4"
+ integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-abstract "^1.23.0"
+ es-object-atoms "^1.0.0"
-string.prototype.trimend@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e"
- integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==
+string.prototype.trimend@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229"
+ integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
-string.prototype.trimstart@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298"
- integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==
+string.prototype.trimstart@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde"
+ integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==
dependencies:
- call-bind "^1.0.2"
- define-properties "^1.2.0"
- es-abstract "^1.22.1"
+ call-bind "^1.0.7"
+ define-properties "^1.2.1"
+ es-object-atoms "^1.0.0"
string_decoder@^1.1.1:
version "1.3.0"
@@ -10896,13 +10692,6 @@ string_decoder@~1.1.1:
dependencies:
safe-buffer "~5.1.0"
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
- version "6.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
- integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
- dependencies:
- ansi-regex "^5.0.1"
-
strip-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
@@ -10917,7 +10706,14 @@ strip-ansi@^5.1.0:
dependencies:
ansi-regex "^4.1.0"
-strip-ansi@^7.0.1, strip-ansi@^7.1.0:
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
+strip-ansi@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
@@ -10939,11 +10735,6 @@ strip-final-newline@^2.0.0:
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-strip-final-newline@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
- integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
-
strip-hex-prefix@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f"
@@ -11010,12 +10801,12 @@ sync-rpc@^1.2.1:
dependencies:
get-port "^3.1.0"
-synckit@^0.8.5:
- version "0.8.6"
- resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.6.tgz#b69b7fbce3917c2673cbdc0d87fb324db4a5b409"
- integrity sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==
+synckit@^0.8.6:
+ version "0.8.8"
+ resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7"
+ integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==
dependencies:
- "@pkgr/utils" "^2.4.2"
+ "@pkgr/core" "^0.1.0"
tslib "^2.6.2"
"system-contracts@link:contracts/system-contracts":
@@ -11023,13 +10814,15 @@ synckit@^0.8.5:
dependencies:
"@matterlabs/hardhat-zksync-deploy" "^0.6.5"
"@matterlabs/hardhat-zksync-solc" "^1.1.4"
- "@nomiclabs/hardhat-solpp" "^2.0.1"
commander "^9.4.1"
+ eslint "^8.51.0"
+ eslint-plugin-import "^2.29.0"
+ eslint-plugin-prettier "^5.0.1"
ethers "^5.7.0"
fast-glob "^3.3.2"
hardhat "^2.18.3"
preprocess "^3.2.0"
- zksync-web3 "^0.14.3"
+ zksync-ethers "https://github.com/zksync-sdk/zksync-ethers#ethers-v5-feat/bridgehub"
table-layout@^1.0.2:
version "1.0.2"
@@ -11042,9 +10835,9 @@ table-layout@^1.0.2:
wordwrapjs "^4.0.0"
table@^6.0.9, table@^6.8.0, table@^6.8.1:
- version "6.8.1"
- resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf"
- integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==
+ version "6.8.2"
+ resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58"
+ integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==
dependencies:
ajv "^8.0.1"
lodash.truncate "^4.4.2"
@@ -11162,30 +10955,11 @@ then-request@^6.0.0:
promise "^8.0.0"
qs "^6.4.0"
-thenify-all@^1.0.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
- integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==
- dependencies:
- thenify ">= 3.1.0 < 4"
-
-"thenify@>= 3.1.0 < 4":
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f"
- integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==
- dependencies:
- any-promise "^1.0.0"
-
"through@>=2.2.7 <3", through@^2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
-titleize@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/titleize/-/titleize-3.0.0.tgz#71c12eb7fdd2558aa8a44b0be83b8a76694acd53"
- integrity sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==
-
tmp@0.0.33, tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
@@ -11239,9 +11013,9 @@ treeify@^1.1.0:
integrity sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==
ts-api-utils@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331"
- integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1"
+ integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==
ts-command-line-args@^2.2.0:
version "2.5.1"
@@ -11279,9 +11053,9 @@ ts-generator@^0.1.1:
ts-essentials "^1.0.0"
ts-jest@^29.0.1:
- version "29.1.1"
- resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b"
- integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==
+ version "29.1.2"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09"
+ integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==
dependencies:
bs-logger "0.x"
fast-json-stable-stringify "2.x"
@@ -11301,9 +11075,9 @@ ts-morph@^19.0.0:
code-block-writer "^12.0.0"
ts-node@^10.1.0, ts-node@^10.7.0:
- version "10.9.1"
- resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
- integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
+ version "10.9.2"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f"
+ integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
dependencies:
"@cspotcode/source-map-support" "^0.8.0"
"@tsconfig/node10" "^1.0.7"
@@ -11319,10 +11093,10 @@ ts-node@^10.1.0, ts-node@^10.7.0:
v8-compile-cache-lib "^3.0.1"
yn "3.1.1"
-tsconfig-paths@^3.14.2:
- version "3.14.2"
- resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz#6e32f1f79412decd261f92d633a9dc1cfa99f088"
- integrity sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==
+tsconfig-paths@^3.15.0:
+ version "3.15.0"
+ resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
+ integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==
dependencies:
"@types/json5" "^0.0.29"
json5 "^1.0.2"
@@ -11334,7 +11108,7 @@ tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3:
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.6.0, tslib@^2.6.2:
+tslib@^2.0.1, tslib@^2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -11441,44 +11215,49 @@ typechain@^8.0.0:
ts-command-line-args "^2.2.0"
ts-essentials "^7.0.1"
-typed-array-buffer@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60"
- integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==
+typed-array-buffer@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
+ integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==
dependencies:
- call-bind "^1.0.2"
- get-intrinsic "^1.2.1"
- is-typed-array "^1.1.10"
+ call-bind "^1.0.7"
+ es-errors "^1.3.0"
+ is-typed-array "^1.1.13"
-typed-array-byte-length@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0"
- integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==
+typed-array-byte-length@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67"
+ integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==
dependencies:
- call-bind "^1.0.2"
+ call-bind "^1.0.7"
for-each "^0.3.3"
- has-proto "^1.0.1"
- is-typed-array "^1.1.10"
+ gopd "^1.0.1"
+ has-proto "^1.0.3"
+ is-typed-array "^1.1.13"
-typed-array-byte-offset@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b"
- integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==
+typed-array-byte-offset@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063"
+ integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==
dependencies:
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.2"
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.7"
for-each "^0.3.3"
- has-proto "^1.0.1"
- is-typed-array "^1.1.10"
+ gopd "^1.0.1"
+ has-proto "^1.0.3"
+ is-typed-array "^1.1.13"
-typed-array-length@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
- integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
+typed-array-length@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3"
+ integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==
dependencies:
- call-bind "^1.0.2"
+ call-bind "^1.0.7"
for-each "^0.3.3"
- is-typed-array "^1.1.9"
+ gopd "^1.0.1"
+ has-proto "^1.0.3"
+ is-typed-array "^1.1.13"
+ possible-typed-array-names "^1.0.0"
typedarray-to-buffer@^3.1.5:
version "3.1.5"
@@ -11498,9 +11277,9 @@ typescript@^4.3.5, typescript@^4.5.5, typescript@^4.6.4:
integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
typescript@^5.2.2:
- version "5.3.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
- integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
+ version "5.4.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952"
+ integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==
typical@^2.6.0, typical@^2.6.1:
version "2.6.1"
@@ -11543,9 +11322,9 @@ undici-types@~5.26.4:
integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
undici@^5.14.0:
- version "5.27.2"
- resolved "https://registry.yarnpkg.com/undici/-/undici-5.27.2.tgz#a270c563aea5b46cc0df2550523638c95c5d4411"
- integrity sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==
+ version "5.28.4"
+ resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068"
+ integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==
dependencies:
"@fastify/busboy" "^2.0.0"
@@ -11576,11 +11355,6 @@ untildify@^3.0.3:
resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9"
integrity sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==
-untildify@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b"
- integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==
-
update-browserslist-db@^1.0.13:
version "1.0.13"
resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
@@ -11649,9 +11423,9 @@ v8-compile-cache@^2.0.3:
integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==
v8-to-istanbul@^9.0.1:
- version "9.1.3"
- resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz#ea456604101cd18005ac2cae3cdd1aa058a6306b"
- integrity sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==
+ version "9.2.0"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad"
+ integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==
dependencies:
"@jridgewell/trace-mapping" "^0.3.12"
"@types/istanbul-lib-coverage" "^2.0.1"
@@ -11697,9 +11471,9 @@ weak-map@~1.0.x:
integrity sha512-lNR9aAefbGPpHO7AEnY0hCFjz1eTkWCXYvkTRrTHs9qv8zJp+SkVYpzfLIFXQQiG3tVvbNFQgVg2bQS8YGgxyw==
web3-utils@^1.3.4, web3-utils@^1.3.6:
- version "1.10.3"
- resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.3.tgz#f1db99c82549c7d9f8348f04ffe4e0188b449714"
- integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==
+ version "1.10.4"
+ resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec"
+ integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==
dependencies:
"@ethereumjs/util" "^8.1.0"
bn.js "^5.2.1"
@@ -11734,16 +11508,16 @@ which-boxed-primitive@^1.0.2:
is-string "^1.0.5"
is-symbol "^1.0.3"
-which-typed-array@^1.1.11, which-typed-array@^1.1.13:
- version "1.1.13"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36"
- integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==
+which-typed-array@^1.1.14, which-typed-array@^1.1.15:
+ version "1.1.15"
+ resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d"
+ integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==
dependencies:
- available-typed-arrays "^1.0.5"
- call-bind "^1.0.4"
+ available-typed-arrays "^1.0.7"
+ call-bind "^1.0.7"
for-each "^0.3.3"
gopd "^1.0.1"
- has-tostringtag "^1.0.0"
+ has-tostringtag "^1.0.2"
which@2.0.2, which@^2.0.1:
version "2.0.2"
@@ -11759,6 +11533,13 @@ which@^1.1.1, which@^1.2.9, which@^1.3.1:
dependencies:
isexe "^2.0.0"
+widest-line@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
+ integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
+ dependencies:
+ string-width "^4.0.0"
+
word-wrap@~1.2.3:
version "1.2.5"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34"
@@ -11787,7 +11568,7 @@ workerpool@6.2.1:
resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
+wrap-ansi@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
@@ -11796,15 +11577,6 @@ workerpool@6.2.1:
string-width "^4.1.0"
strip-ansi "^6.0.0"
-wrap-ansi@^8.1.0:
- version "8.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
- integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
- dependencies:
- ansi-styles "^6.1.0"
- string-width "^5.0.1"
- strip-ansi "^7.0.1"
-
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
@@ -11873,10 +11645,10 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
-yaml@^2.3.4:
- version "2.3.4"
- resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2"
- integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==
+yaml@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed"
+ integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==
yargs-parser@20.2.4:
version "20.2.4"
@@ -11944,17 +11716,17 @@ yocto-queue@^1.0.0:
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
-zksync-ethers@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/zksync-ethers/-/zksync-ethers-5.0.0.tgz#2d0bb9a98ad1198957038f7669a50b10ef96bc3c"
- integrity sha512-zPowwK/2wG3YqIlKNtRfzpMnHMnWSa5wFsfDrxKFgLjbA3VvuHl4mFCFUxMapsroGyG619+zt71HKM1jyNpSmQ==
+"zksync-ethers@https://github.com/zksync-sdk/zksync-ethers#ethers-v5-feat/bridgehub":
+ version "5.1.0"
+ resolved "https://github.com/zksync-sdk/zksync-ethers#28ccbe7d67b170c202b17475e06a82002e6e3acc"
dependencies:
ethers "~5.7.0"
-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==
+"zksync-ethers@https://github.com/zksync-sdk/zksync-ethers#sb-old-sdk":
+ version "5.1.0"
+ resolved "https://github.com/zksync-sdk/zksync-ethers#7e5e8edc57c848aabdb4b018de8270addc82aa6e"
+ dependencies:
+ ethers "~5.7.0"
zksync-web3@^0.15.4, zksync-web3@^0.15.5:
version "0.15.5"