From 93d8c020f1509011de6087c9ffc29394d6769e20 Mon Sep 17 00:00:00 2001 From: juan518munoz <62400508+juan518munoz@users.noreply.github.com> Date: Fri, 3 Jan 2025 18:23:51 -0300 Subject: [PATCH] feat(eigen-client-m0): merge `extra-features` branch & remove unused vars (#371) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(state-keeper): mempool io opens batch if there is protocol upgrade tx (#3360) ## What ❔ Mempool io opens batch if there is protocol upgrade tx ## Why ❔ Currently if mempool is empty but there is protocol upgrade tx, then batch is not opened ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. * fix: Fixed cargo deny (#3372) ## What ❔ Fixes cargo deny CI fail. * docs: interop docs update (#3366) ## What ❔ ## Why ❔ ## Checklist - [ ] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [ ] Documentation comments have been added / updated. - [ ] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. * fix(tracer): adds vm error to flatCallTracer error field if exists (#3374) ## What ❔ - Updates `flatCallTracer` error to include vm error if it exists ## Why ❔ - MM has requested that if an error exists we should populate within `flatCallTracer` as this is what others do, prior to this PR it was only revert_reason introduced here: https://github.com/matter-labs/zksync-era/pull/3306. However, if we have a vm error the error field is not populated as seen in this tx: `0x6c85bf34666dcdaa885f2bc6e95186029d2b25f2a3bbdff21c36878e2d4a19ed` which failed due to a vm panic. ## Checklist - [x] PR title corresponds to the body of PR (we generate changelog entries from PRs). - [ ] Tests for the changes have been added / updated. - [x] Documentation comments have been added / updated. - [x] Code has been formatted via `zkstack dev fmt` and `zkstack dev lint`. * chore(main): release core 25.3.0 (#3313) :robot: I have created a release *beep* *boop* --- ## [25.3.0](https://github.com/matter-labs/zksync-era/compare/core-v25.2.0...core-v25.3.0) (2024-12-11) ### Features * change seal criteria for gateway ([#3320](https://github.com/matter-labs/zksync-era/issues/3320)) ([a0a74aa](https://github.com/matter-labs/zksync-era/commit/a0a74aaeb42f076d20c4ae8a32925eff2de11d0c)) * **contract-verifier:** Download compilers from GH automatically ([#3291](https://github.com/matter-labs/zksync-era/issues/3291)) ([a10c4ba](https://github.com/matter-labs/zksync-era/commit/a10c4baa312f26ebac2a10115fb7bd314d18b9c1)) * integrate gateway changes for some components ([#3274](https://github.com/matter-labs/zksync-era/issues/3274)) ([cbc91e3](https://github.com/matter-labs/zksync-era/commit/cbc91e35f84d04f2e4c8e81028596db009e478d1)) * **proof-data-handler:** exclude batches without object file in GCS ([#2980](https://github.com/matter-labs/zksync-era/issues/2980)) ([3e309e0](https://github.com/matter-labs/zksync-era/commit/3e309e06b24649c74bfe120e8ca45247cb2b5628)) * **pruning:** Record L1 batch root hash in pruning logs ([#3266](https://github.com/matter-labs/zksync-era/issues/3266)) ([7b6e590](https://github.com/matter-labs/zksync-era/commit/7b6e59083cf0cafeaef5dd4b2dd39257ff91316d)) * **state-keeper:** mempool io opens batch if there is protocol upgrade tx ([#3360](https://github.com/matter-labs/zksync-era/issues/3360)) ([f6422cd](https://github.com/matter-labs/zksync-era/commit/f6422cd59dab2c105bb7c125c172f2621fe39464)) * **tee:** add error handling for unstable_getTeeProofs API endpoint ([#3321](https://github.com/matter-labs/zksync-era/issues/3321)) ([26f630c](https://github.com/matter-labs/zksync-era/commit/26f630cb75958c711d67d13bc77ddbb1117156c3)) * **zksync_cli:** Health checkpoint improvements ([#3193](https://github.com/matter-labs/zksync-era/issues/3193)) ([440fe8d](https://github.com/matter-labs/zksync-era/commit/440fe8d8afdf0fc2768692a1b40b0910873e2faf)) ### Bug Fixes * **api:** batch fee input scaling for `debug_traceCall` ([#3344](https://github.com/matter-labs/zksync-era/issues/3344)) ([7ace594](https://github.com/matter-labs/zksync-era/commit/7ace594fb3140212bd94ffd6bffcac99805cf4b1)) * **tee:** correct previous fix for race condition in batch locking ([#3358](https://github.com/matter-labs/zksync-era/issues/3358)) ([b12da8d](https://github.com/matter-labs/zksync-era/commit/b12da8d1fddc7870bf17d5e08312d20773815269)) * **tee:** fix race condition in batch locking ([#3342](https://github.com/matter-labs/zksync-era/issues/3342)) ([a7dc0ed](https://github.com/matter-labs/zksync-era/commit/a7dc0ed5007f6b2f789f4c61cb3d137843151860)) * **tracer:** adds vm error to flatCallTracer error field if exists ([#3374](https://github.com/matter-labs/zksync-era/issues/3374)) ([5d77727](https://github.com/matter-labs/zksync-era/commit/5d77727cd3ba5f4d84643fee1873f03656310b4d)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: zksync-era-bot * feat(eigen-client-extra-features): Fix PR comments (#369) * Add envy load * Readd proto reference * Rename blob id to request id * Make literals constants * Make point size constant * Get pool unique * Remaining comments * Fix comment * Add check for failed states * Change l1 name * Cargo lock conflicts * remove concurrent dispatcher leftovers * Solve comments (#372) * remove METRICS var * feat(eigen-client-extra-features): address PR comments (#375) * Change settlement layer for u32 * Change string to address * Remove unwraps * Remove error from name * Remove unused to bytes * Rename call for get blob data * Revert "Change string to address" This reverts commit 6dd94d42b78e7e9dabe5df06922ff59b2006fd6f. * Change string for address * feat(eigen-client-extra-features): address PR comments (part 2) (#374) * initial commit * clippy suggestion * feat(eigen-client-extra-features): address PR comments (part 3) (#376) * use keccak256 fn * simplify get_context_block * use saturating sub * feat(eigen-client-extra-features): address PR comments (part 4) (#378) * Replace decode bytes for ethabi * Add default to eigenconfig * Change str to url * Add index to data availability table * Address comments * Change error to verificationerror * Format code * feat(eigen-client-extra-features): address PR comments (part 5) (#377) * use trait object * prevent blocking non async code * clippy suggestion --------- Co-authored-by: juan518munoz <62400508+juan518munoz@users.noreply.github.com> --------- Co-authored-by: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> --------- Co-authored-by: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> * Format code --------- Co-authored-by: juan518munoz <62400508+juan518munoz@users.noreply.github.com> --------- Co-authored-by: perekopskiy <53865202+perekopskiy@users.noreply.github.com> Co-authored-by: Bruno França Co-authored-by: kelemeno <34402761+kelemeno@users.noreply.github.com> Co-authored-by: Dustin Brickwood Co-authored-by: zksync-era-bot <147085853+zksync-era-bot@users.noreply.github.com> Co-authored-by: zksync-era-bot Co-authored-by: Gianbelinche <39842759+gianbelinche@users.noreply.github.com> --- .github/release-please/manifest.json | 2 +- Cargo.lock | 2 +- core/CHANGELOG.md | 22 ++ core/bin/external_node/Cargo.toml | 2 +- core/bin/zksync_server/src/node_builder.rs | 6 +- .../lib/config/src/configs/da_client/eigen.rs | 22 +- core/lib/config/src/configs/da_dispatcher.rs | 4 - core/lib/config/src/testonly.rs | 1 - ...2144402_create_index_data_availability.sql | 1 + core/lib/dal/src/data_availability_dal.rs | 39 --- core/lib/env_config/src/da_client.rs | 59 ++--- core/lib/env_config/src/da_dispatcher.rs | 5 +- core/lib/protobuf_config/src/da_client.rs | 6 +- core/lib/protobuf_config/src/da_dispatcher.rs | 2 - .../src/proto/config/da_client.proto | 2 +- .../src/proto/config/da_dispatcher.proto | 1 - .../api_server/src/web3/namespaces/debug.rs | 16 +- core/node/da_clients/Cargo.toml | 4 +- core/node/da_clients/src/eigen/README.md | 3 + core/node/da_clients/src/eigen/blob_info.rs | 124 +-------- core/node/da_clients/src/eigen/client.rs | 18 +- .../node/da_clients/src/eigen/client_tests.rs | 26 +- core/node/da_clients/src/eigen/sdk.rs | 84 ++++-- core/node/da_clients/src/eigen/verifier.rs | 248 +++++++----------- .../da_clients/src/eigen/verifier_tests.rs | 29 +- core/node/da_dispatcher/src/da_dispatcher.rs | 2 - core/node/da_dispatcher/src/metrics.rs | 2 - .../layers/da_clients/eigen.rs | 15 +- core/node/state_keeper/src/io/mempool.rs | 18 +- core/node/state_keeper/src/io/tests/mod.rs | 48 ++++ deny.toml | 4 +- docs/src/specs/img/verifyinteropmsg.png | Bin 164358 -> 121433 bytes docs/src/specs/interop/interopmessages.md | 37 ++- docs/src/specs/interop/overview.md | 10 +- 34 files changed, 398 insertions(+), 466 deletions(-) create mode 100644 core/lib/dal/migrations/20241812144402_create_index_data_availability.sql diff --git a/.github/release-please/manifest.json b/.github/release-please/manifest.json index c3898055f848..ddf856a98e26 100644 --- a/.github/release-please/manifest.json +++ b/.github/release-please/manifest.json @@ -1,5 +1,5 @@ { - "core": "25.2.0", + "core": "25.3.0", "prover": "17.1.1", "zkstack_cli": "0.1.2" } diff --git a/Cargo.lock b/Cargo.lock index fae21fd42b39..3975539b0de1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12784,7 +12784,7 @@ dependencies = [ [[package]] name = "zksync_external_node" -version = "25.2.0" +version = "25.3.0" dependencies = [ "anyhow", "assert_matches", diff --git a/core/CHANGELOG.md b/core/CHANGELOG.md index 0ca0a3be025a..acdd2fefb1ab 100644 --- a/core/CHANGELOG.md +++ b/core/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## [25.3.0](https://github.com/matter-labs/zksync-era/compare/core-v25.2.0...core-v25.3.0) (2024-12-11) + + +### Features + +* change seal criteria for gateway ([#3320](https://github.com/matter-labs/zksync-era/issues/3320)) ([a0a74aa](https://github.com/matter-labs/zksync-era/commit/a0a74aaeb42f076d20c4ae8a32925eff2de11d0c)) +* **contract-verifier:** Download compilers from GH automatically ([#3291](https://github.com/matter-labs/zksync-era/issues/3291)) ([a10c4ba](https://github.com/matter-labs/zksync-era/commit/a10c4baa312f26ebac2a10115fb7bd314d18b9c1)) +* integrate gateway changes for some components ([#3274](https://github.com/matter-labs/zksync-era/issues/3274)) ([cbc91e3](https://github.com/matter-labs/zksync-era/commit/cbc91e35f84d04f2e4c8e81028596db009e478d1)) +* **proof-data-handler:** exclude batches without object file in GCS ([#2980](https://github.com/matter-labs/zksync-era/issues/2980)) ([3e309e0](https://github.com/matter-labs/zksync-era/commit/3e309e06b24649c74bfe120e8ca45247cb2b5628)) +* **pruning:** Record L1 batch root hash in pruning logs ([#3266](https://github.com/matter-labs/zksync-era/issues/3266)) ([7b6e590](https://github.com/matter-labs/zksync-era/commit/7b6e59083cf0cafeaef5dd4b2dd39257ff91316d)) +* **state-keeper:** mempool io opens batch if there is protocol upgrade tx ([#3360](https://github.com/matter-labs/zksync-era/issues/3360)) ([f6422cd](https://github.com/matter-labs/zksync-era/commit/f6422cd59dab2c105bb7c125c172f2621fe39464)) +* **tee:** add error handling for unstable_getTeeProofs API endpoint ([#3321](https://github.com/matter-labs/zksync-era/issues/3321)) ([26f630c](https://github.com/matter-labs/zksync-era/commit/26f630cb75958c711d67d13bc77ddbb1117156c3)) +* **zksync_cli:** Health checkpoint improvements ([#3193](https://github.com/matter-labs/zksync-era/issues/3193)) ([440fe8d](https://github.com/matter-labs/zksync-era/commit/440fe8d8afdf0fc2768692a1b40b0910873e2faf)) + + +### Bug Fixes + +* **api:** batch fee input scaling for `debug_traceCall` ([#3344](https://github.com/matter-labs/zksync-era/issues/3344)) ([7ace594](https://github.com/matter-labs/zksync-era/commit/7ace594fb3140212bd94ffd6bffcac99805cf4b1)) +* **tee:** correct previous fix for race condition in batch locking ([#3358](https://github.com/matter-labs/zksync-era/issues/3358)) ([b12da8d](https://github.com/matter-labs/zksync-era/commit/b12da8d1fddc7870bf17d5e08312d20773815269)) +* **tee:** fix race condition in batch locking ([#3342](https://github.com/matter-labs/zksync-era/issues/3342)) ([a7dc0ed](https://github.com/matter-labs/zksync-era/commit/a7dc0ed5007f6b2f789f4c61cb3d137843151860)) +* **tracer:** adds vm error to flatCallTracer error field if exists ([#3374](https://github.com/matter-labs/zksync-era/issues/3374)) ([5d77727](https://github.com/matter-labs/zksync-era/commit/5d77727cd3ba5f4d84643fee1873f03656310b4d)) + ## [25.2.0](https://github.com/matter-labs/zksync-era/compare/core-v25.1.0...core-v25.2.0) (2024-11-19) diff --git a/core/bin/external_node/Cargo.toml b/core/bin/external_node/Cargo.toml index 91bdcefa2ec0..f56af827bc45 100644 --- a/core/bin/external_node/Cargo.toml +++ b/core/bin/external_node/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "zksync_external_node" description = "Non-validator ZKsync node" -version = "25.2.0" # x-release-please-version +version = "25.3.0" # x-release-please-version edition.workspace = true authors.workspace = true homepage.workspace = true diff --git a/core/bin/zksync_server/src/node_builder.rs b/core/bin/zksync_server/src/node_builder.rs index d74928e8fbc7..547b18460390 100644 --- a/core/bin/zksync_server/src/node_builder.rs +++ b/core/bin/zksync_server/src/node_builder.rs @@ -525,6 +525,7 @@ impl MainNodeBuilder { }; let secrets = try_load_config!(self.secrets.data_availability); + let l1_secrets = try_load_config!(self.secrets.l1); match (da_client_config, secrets) { (DAClientConfig::Avail(config), DataAvailabilitySecrets::Avail(secret)) => { self.node.add_layer(AvailWiringLayer::new(config, secret)); @@ -535,7 +536,10 @@ impl MainNodeBuilder { .add_layer(CelestiaWiringLayer::new(config, secret)); } - (DAClientConfig::Eigen(config), DataAvailabilitySecrets::Eigen(secret)) => { + (DAClientConfig::Eigen(mut config), DataAvailabilitySecrets::Eigen(secret)) => { + if config.eigenda_eth_rpc.is_none() { + config.eigenda_eth_rpc = Some(l1_secrets.l1_rpc_url.expose_str().to_string()); + } self.node.add_layer(EigenWiringLayer::new(config, secret)); } diff --git a/core/lib/config/src/configs/da_client/eigen.rs b/core/lib/config/src/configs/da_client/eigen.rs index 68b1390d980a..b7723e2271a6 100644 --- a/core/lib/config/src/configs/da_client/eigen.rs +++ b/core/lib/config/src/configs/da_client/eigen.rs @@ -1,15 +1,15 @@ use serde::Deserialize; use zksync_basic_types::secrets::PrivateKey; /// Configuration for the EigenDA remote disperser client. -#[derive(Clone, Debug, PartialEq, Deserialize, Default)] +#[derive(Clone, Debug, PartialEq, Deserialize)] pub struct EigenConfig { /// URL of the Disperser RPC server pub disperser_rpc: String, /// Block height needed to reach in order to consider the blob finalized /// a value less or equal to 0 means that the disperser will not wait for finalization - pub settlement_layer_confirmation_depth: i32, + pub settlement_layer_confirmation_depth: u32, /// URL of the Ethereum RPC server - pub eigenda_eth_rpc: String, + pub eigenda_eth_rpc: Option, /// Address of the service manager contract pub eigenda_svc_manager_address: String, /// Wait for the blob to be finalized before returning the response @@ -24,6 +24,22 @@ pub struct EigenConfig { pub chain_id: u64, } +impl Default for EigenConfig { + fn default() -> Self { + Self { + disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), + settlement_layer_confirmation_depth: 0, + eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), + eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), + wait_for_finalization: false, + authenticated: false, + g1_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), + g2_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), + chain_id: 19000, + } + } +} + #[derive(Clone, Debug, PartialEq)] pub struct EigenSecrets { pub private_key: PrivateKey, diff --git a/core/lib/config/src/configs/da_dispatcher.rs b/core/lib/config/src/configs/da_dispatcher.rs index c8bf1b3b8995..e9ad6bd3c074 100644 --- a/core/lib/config/src/configs/da_dispatcher.rs +++ b/core/lib/config/src/configs/da_dispatcher.rs @@ -6,7 +6,6 @@ pub const DEFAULT_POLLING_INTERVAL_MS: u32 = 5000; pub const DEFAULT_MAX_ROWS_TO_DISPATCH: u32 = 100; pub const DEFAULT_MAX_RETRIES: u16 = 5; pub const DEFAULT_USE_DUMMY_INCLUSION_DATA: bool = false; -pub const DEFAULT_MAX_CONCURRENT_REQUESTS: u32 = 100; #[derive(Debug, Clone, PartialEq, Deserialize)] pub struct DADispatcherConfig { @@ -20,8 +19,6 @@ pub struct DADispatcherConfig { // TODO: run a verification task to check if the L1 contract expects the inclusion proofs to // avoid the scenario where contracts expect real proofs, and server is using dummy proofs. pub use_dummy_inclusion_data: Option, - /// The maximun number of concurrent request to send to the DA server. - pub max_concurrent_requests: Option, } impl DADispatcherConfig { @@ -31,7 +28,6 @@ impl DADispatcherConfig { max_rows_to_dispatch: Some(DEFAULT_MAX_ROWS_TO_DISPATCH), max_retries: Some(DEFAULT_MAX_RETRIES), use_dummy_inclusion_data: Some(DEFAULT_USE_DUMMY_INCLUSION_DATA), - max_concurrent_requests: Some(DEFAULT_MAX_CONCURRENT_REQUESTS), } } diff --git a/core/lib/config/src/testonly.rs b/core/lib/config/src/testonly.rs index 5464d82d1ef2..1a3f63d9b278 100644 --- a/core/lib/config/src/testonly.rs +++ b/core/lib/config/src/testonly.rs @@ -972,7 +972,6 @@ impl Distribution for EncodeDist { max_rows_to_dispatch: self.sample(rng), max_retries: self.sample(rng), use_dummy_inclusion_data: self.sample(rng), - max_concurrent_requests: self.sample(rng), } } } diff --git a/core/lib/dal/migrations/20241812144402_create_index_data_availability.sql b/core/lib/dal/migrations/20241812144402_create_index_data_availability.sql new file mode 100644 index 000000000000..938d2e09de44 --- /dev/null +++ b/core/lib/dal/migrations/20241812144402_create_index_data_availability.sql @@ -0,0 +1 @@ +CREATE INDEX idx_blob_id_l1_batch_number ON data_availability (blob_id, l1_batch_number); diff --git a/core/lib/dal/src/data_availability_dal.rs b/core/lib/dal/src/data_availability_dal.rs index 3815d65f20b4..3a2cd1ecdd62 100644 --- a/core/lib/dal/src/data_availability_dal.rs +++ b/core/lib/dal/src/data_availability_dal.rs @@ -175,45 +175,6 @@ impl DataAvailabilityDal<'_, '_> { .map(DataAvailabilityBlob::from)) } - pub async fn get_da_blob_ids_awaiting_inclusion( - &mut self, - ) -> DalResult>> { - let rows = sqlx::query!( - r#" - SELECT - l1_batch_number, - blob_id, - inclusion_data, - sent_at - FROM - data_availability - WHERE - inclusion_data IS NULL - ORDER BY - l1_batch_number - "#, - ) - .instrument("get_da_blobs_awaiting_inclusion") - .fetch_all(self.storage) - .await?; - - Ok(rows - .into_iter() - .map(|row| { - let l1_batch_number_u32 = row.l1_batch_number.try_into(); - if let Ok(l1_batch_number) = l1_batch_number_u32 { - Some(DataAvailabilityBlob { - l1_batch_number: L1BatchNumber(l1_batch_number), - blob_id: row.blob_id, - inclusion_data: row.inclusion_data, - sent_at: row.sent_at.and_utc(), - }) - } else { - None - } - }) - .collect()) - } /// Fetches the pubdata and `l1_batch_number` for the L1 batches that are ready for DA dispatch. pub async fn get_ready_for_da_dispatch_l1_batches( &mut self, diff --git a/core/lib/env_config/src/da_client.rs b/core/lib/env_config/src/da_client.rs index e867461b3c2a..deda1ce3f5c2 100644 --- a/core/lib/env_config/src/da_client.rs +++ b/core/lib/env_config/src/da_client.rs @@ -1,21 +1,17 @@ use std::env; -use zksync_config::{ - configs::{ - da_client::{ - avail::{ - AvailClientConfig, AvailSecrets, AVAIL_FULL_CLIENT_NAME, - AVAIL_GAS_RELAY_CLIENT_NAME, - }, - celestia::CelestiaSecrets, - eigen::EigenSecrets, - DAClientConfig, AVAIL_CLIENT_CONFIG_NAME, CELESTIA_CLIENT_CONFIG_NAME, - EIGEN_CLIENT_CONFIG_NAME, OBJECT_STORE_CLIENT_CONFIG_NAME, +use zksync_config::configs::{ + da_client::{ + avail::{ + AvailClientConfig, AvailSecrets, AVAIL_FULL_CLIENT_NAME, AVAIL_GAS_RELAY_CLIENT_NAME, }, - secrets::DataAvailabilitySecrets, - AvailConfig, + celestia::CelestiaSecrets, + eigen::EigenSecrets, + DAClientConfig, AVAIL_CLIENT_CONFIG_NAME, CELESTIA_CLIENT_CONFIG_NAME, + EIGEN_CLIENT_CONFIG_NAME, OBJECT_STORE_CLIENT_CONFIG_NAME, }, - EigenConfig, + secrets::DataAvailabilitySecrets, + AvailConfig, }; use crate::{envy_load, FromEnv}; @@ -38,20 +34,7 @@ impl FromEnv for DAClientConfig { }, }), CELESTIA_CLIENT_CONFIG_NAME => Self::Celestia(envy_load("da_celestia_config", "DA_")?), - EIGEN_CLIENT_CONFIG_NAME => Self::Eigen(EigenConfig { - disperser_rpc: env::var("EIGENDA_DISPERSER_RPC")?, - settlement_layer_confirmation_depth: env::var( - "EIGENDA_SETTLEMENT_LAYER_CONFIRMATION_DEPTH", - )? - .parse()?, - eigenda_eth_rpc: env::var("EIGENDA_EIGENDA_ETH_RPC")?, - eigenda_svc_manager_address: env::var("EIGENDA_EIGENDA_SVC_MANAGER_ADDRESS")?, - wait_for_finalization: env::var("EIGENDA_WAIT_FOR_FINALIZATION")?.parse()?, - authenticated: env::var("EIGENDA_AUTHENTICATED")?.parse()?, - g1_url: env::var("EIGENDA_G1_URL")?.parse()?, - g2_url: env::var("EIGENDA_G2_URL")?.parse()?, - chain_id: env::var("EIGENDA_CHAIN_ID")?.parse()?, - }), + EIGEN_CLIENT_CONFIG_NAME => Self::Eigen(envy_load("da_eigen_config", "DA_")?), OBJECT_STORE_CLIENT_CONFIG_NAME => { Self::ObjectStore(envy_load("da_object_store", "DA_")?) } @@ -265,15 +248,15 @@ mod tests { let mut lock = MUTEX.lock(); let config = r#" DA_CLIENT="Eigen" - EIGENDA_DISPERSER_RPC="http://localhost:8080" - EIGENDA_SETTLEMENT_LAYER_CONFIRMATION_DEPTH=0 - EIGENDA_EIGENDA_ETH_RPC="http://localhost:8545" - EIGENDA_EIGENDA_SVC_MANAGER_ADDRESS="0x123" - EIGENDA_WAIT_FOR_FINALIZATION=true - EIGENDA_AUTHENTICATED=false - EIGENDA_G1_URL="resources1" - EIGENDA_G2_URL="resources2" - EIGENDA_CHAIN_ID=1 + DA_DISPERSER_RPC="http://localhost:8080" + DA_SETTLEMENT_LAYER_CONFIRMATION_DEPTH=0 + DA_EIGENDA_ETH_RPC="http://localhost:8545" + DA_EIGENDA_SVC_MANAGER_ADDRESS="0x123" + DA_WAIT_FOR_FINALIZATION=true + DA_AUTHENTICATED=false + DA_G1_URL="resources1" + DA_G2_URL="resources2" + DA_CHAIN_ID=1 "#; lock.set_env(config); @@ -283,7 +266,7 @@ mod tests { DAClientConfig::Eigen(EigenConfig { disperser_rpc: "http://localhost:8080".to_string(), settlement_layer_confirmation_depth: 0, - eigenda_eth_rpc: "http://localhost:8545".to_string(), + eigenda_eth_rpc: Some("http://localhost:8545".to_string()), eigenda_svc_manager_address: "0x123".to_string(), wait_for_finalization: true, authenticated: false, diff --git a/core/lib/env_config/src/da_dispatcher.rs b/core/lib/env_config/src/da_dispatcher.rs index 805e6b2234b5..246752db91ac 100644 --- a/core/lib/env_config/src/da_dispatcher.rs +++ b/core/lib/env_config/src/da_dispatcher.rs @@ -21,14 +21,12 @@ mod tests { interval: u32, rows_limit: u32, max_retries: u16, - max_concurrent_requests: u32, ) -> DADispatcherConfig { DADispatcherConfig { polling_interval_ms: Some(interval), max_rows_to_dispatch: Some(rows_limit), max_retries: Some(max_retries), use_dummy_inclusion_data: Some(true), - max_concurrent_requests: Some(max_concurrent_requests), } } @@ -40,10 +38,9 @@ mod tests { DA_DISPATCHER_MAX_ROWS_TO_DISPATCH=60 DA_DISPATCHER_MAX_RETRIES=7 DA_DISPATCHER_USE_DUMMY_INCLUSION_DATA="true" - DA_DISPATCHER_MAX_CONCURRENT_REQUESTS=10 "#; lock.set_env(config); let actual = DADispatcherConfig::from_env().unwrap(); - assert_eq!(actual, expected_da_layer_config(5000, 60, 7, 10)); + assert_eq!(actual, expected_da_layer_config(5000, 60, 7)); } } diff --git a/core/lib/protobuf_config/src/da_client.rs b/core/lib/protobuf_config/src/da_client.rs index bd817826de7f..84e94aeae1a2 100644 --- a/core/lib/protobuf_config/src/da_client.rs +++ b/core/lib/protobuf_config/src/da_client.rs @@ -63,9 +63,7 @@ impl ProtoRepr for proto::DataAvailabilityClient { &conf.settlement_layer_confirmation_depth, ) .context("settlement_layer_confirmation_depth")?, - eigenda_eth_rpc: required(&conf.eigenda_eth_rpc) - .context("eigenda_eth_rpc")? - .clone(), + eigenda_eth_rpc: required(&conf.eigenda_eth_rpc).ok().cloned(), eigenda_svc_manager_address: required(&conf.eigenda_svc_manager_address) .context("eigenda_svc_manager_address")? .clone(), @@ -117,7 +115,7 @@ impl ProtoRepr for proto::DataAvailabilityClient { settlement_layer_confirmation_depth: Some( config.settlement_layer_confirmation_depth, ), - eigenda_eth_rpc: Some(config.eigenda_eth_rpc.clone()), + eigenda_eth_rpc: config.eigenda_eth_rpc.clone(), eigenda_svc_manager_address: Some(config.eigenda_svc_manager_address.clone()), wait_for_finalization: Some(config.wait_for_finalization), authenticated: Some(config.authenticated), diff --git a/core/lib/protobuf_config/src/da_dispatcher.rs b/core/lib/protobuf_config/src/da_dispatcher.rs index e85ff5ae76ed..d77073bd32cf 100644 --- a/core/lib/protobuf_config/src/da_dispatcher.rs +++ b/core/lib/protobuf_config/src/da_dispatcher.rs @@ -12,7 +12,6 @@ impl ProtoRepr for proto::DataAvailabilityDispatcher { max_rows_to_dispatch: self.max_rows_to_dispatch, max_retries: self.max_retries.map(|x| x as u16), use_dummy_inclusion_data: self.use_dummy_inclusion_data, - max_concurrent_requests: self.max_concurrent_requests, }) } @@ -22,7 +21,6 @@ impl ProtoRepr for proto::DataAvailabilityDispatcher { max_rows_to_dispatch: this.max_rows_to_dispatch, max_retries: this.max_retries.map(Into::into), use_dummy_inclusion_data: this.use_dummy_inclusion_data, - max_concurrent_requests: this.max_concurrent_requests, } } } diff --git a/core/lib/protobuf_config/src/proto/config/da_client.proto b/core/lib/protobuf_config/src/proto/config/da_client.proto index dd44d0ad14d1..cf4318c520d7 100644 --- a/core/lib/protobuf_config/src/proto/config/da_client.proto +++ b/core/lib/protobuf_config/src/proto/config/da_client.proto @@ -38,7 +38,7 @@ message CelestiaConfig { message EigenConfig { optional string disperser_rpc = 3; - optional int32 settlement_layer_confirmation_depth = 4; + optional uint32 settlement_layer_confirmation_depth = 4; optional string eigenda_eth_rpc = 5; optional string eigenda_svc_manager_address = 6; optional bool wait_for_finalization = 7; diff --git a/core/lib/protobuf_config/src/proto/config/da_dispatcher.proto b/core/lib/protobuf_config/src/proto/config/da_dispatcher.proto index d6329d14b281..dd366bd5b925 100644 --- a/core/lib/protobuf_config/src/proto/config/da_dispatcher.proto +++ b/core/lib/protobuf_config/src/proto/config/da_dispatcher.proto @@ -7,5 +7,4 @@ message DataAvailabilityDispatcher { optional uint32 max_rows_to_dispatch = 2; optional uint32 max_retries = 3; optional bool use_dummy_inclusion_data = 4; - optional uint32 max_concurrent_requests = 5; } diff --git a/core/node/api_server/src/web3/namespaces/debug.rs b/core/node/api_server/src/web3/namespaces/debug.rs index d96c1e659541..8e72f5b45991 100644 --- a/core/node/api_server/src/web3/namespaces/debug.rs +++ b/core/node/api_server/src/web3/namespaces/debug.rs @@ -96,16 +96,22 @@ impl DebugNamespace { CallType::NearCall => unreachable!("We have to filter our near calls before"), }; - let (result, error) = if let Some(error) = call.revert_reason { - (None, Some(error)) - } else { - ( + let (result, error) = match (call.revert_reason, call.error) { + (Some(revert_reason), _) => { + // If revert_reason exists, it takes priority over VM error + (None, Some(revert_reason)) + } + (None, Some(vm_error)) => { + // If no revert_reason but VM error exists + (None, Some(vm_error)) + } + (None, None) => ( Some(CallResult { output: web3::Bytes::from(call.output), gas_used: U256::from(call.gas_used), }), None, - ) + ), }; calls.push(DebugCallFlat { diff --git a/core/node/da_clients/Cargo.toml b/core/node/da_clients/Cargo.toml index f12042b12576..efc588faa081 100644 --- a/core/node/da_clients/Cargo.toml +++ b/core/node/da_clients/Cargo.toml @@ -62,7 +62,9 @@ ethabi.workspace = true rust-kzg-bn254.workspace = true ark-bn254.workspace = true num-bigint.workspace = true -serial_test.workspace = true zksync_web3_decl.workspace = true zksync_eth_client.workspace = true url.workspace = true + +[dev-dependencies] +serial_test.workspace = true diff --git a/core/node/da_clients/src/eigen/README.md b/core/node/da_clients/src/eigen/README.md index ae2398088dc0..bf6b5fb8038b 100644 --- a/core/node/da_clients/src/eigen/README.md +++ b/core/node/da_clients/src/eigen/README.md @@ -32,3 +32,6 @@ pub fn compile_protos() { The generated folder is considered a temporary solution until the EigenDA has a library with either a protogen, or preferably a full Rust client implementation. + +proto files are not included here to not create confusion in case they are not updated in time, so the EigenDA +[repo](https://github.com/Layr-Labs/eigenda/tree/master/api/proto) has to be a source of truth for the proto files. diff --git a/core/node/da_clients/src/eigen/blob_info.rs b/core/node/da_clients/src/eigen/blob_info.rs index a44117fd4ed7..63fece177c59 100644 --- a/core/node/da_clients/src/eigen/blob_info.rs +++ b/core/node/da_clients/src/eigen/blob_info.rs @@ -12,13 +12,13 @@ use super::{ #[derive(Debug)] pub enum ConversionError { - NotPresentError, + NotPresent, } impl fmt::Display for ConversionError { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match self { - ConversionError::NotPresentError => write!(f, "Failed to convert BlobInfo"), + ConversionError::NotPresent => write!(f, "Failed to convert BlobInfo"), } } } @@ -29,18 +29,6 @@ pub struct G1Commitment { pub y: Vec, } -impl G1Commitment { - pub fn to_bytes(&self) -> Vec { - let mut bytes = vec![]; - bytes.extend(&self.x.len().to_be_bytes()); - bytes.extend(&self.x); - bytes.extend(&self.y.len().to_be_bytes()); - bytes.extend(&self.y); - - bytes - } -} - impl From for G1Commitment { fn from(value: DisperserG1Commitment) -> Self { Self { @@ -58,18 +46,6 @@ pub struct BlobQuorumParam { pub chunk_length: u32, } -impl BlobQuorumParam { - pub fn to_bytes(&self) -> Vec { - let mut bytes = vec![]; - bytes.extend(&self.quorum_number.to_be_bytes()); - bytes.extend(&self.adversary_threshold_percentage.to_be_bytes()); - bytes.extend(&self.confirmation_threshold_percentage.to_be_bytes()); - bytes.extend(&self.chunk_length.to_be_bytes()); - - bytes - } -} - impl From for BlobQuorumParam { fn from(value: DisperserBlobQuorumParam) -> Self { Self { @@ -88,34 +64,16 @@ pub struct BlobHeader { pub blob_quorum_params: Vec, } -impl BlobHeader { - pub fn to_bytes(&self) -> Vec { - let mut bytes = vec![]; - bytes.extend(self.commitment.to_bytes()); - bytes.extend(&self.data_length.to_be_bytes()); - bytes.extend(&self.blob_quorum_params.len().to_be_bytes()); - - for quorum in &self.blob_quorum_params { - bytes.extend(quorum.to_bytes()); - } - - bytes - } -} - impl TryFrom for BlobHeader { type Error = ConversionError; fn try_from(value: DisperserBlobHeader) -> Result { - if value.commitment.is_none() { - return Err(ConversionError::NotPresentError); - } let blob_quorum_params: Vec = value .blob_quorum_params .iter() .map(|param| BlobQuorumParam::from(param.clone())) .collect(); Ok(Self { - commitment: G1Commitment::from(value.commitment.unwrap()), + commitment: G1Commitment::from(value.commitment.ok_or(ConversionError::NotPresent)?), data_length: value.data_length, blob_quorum_params, }) @@ -130,21 +88,6 @@ pub struct BatchHeader { pub reference_block_number: u32, } -impl BatchHeader { - pub fn to_bytes(&self) -> Vec { - let mut bytes = vec![]; - bytes.extend(&self.batch_root.len().to_be_bytes()); - bytes.extend(&self.batch_root); - bytes.extend(&self.quorum_numbers.len().to_be_bytes()); - bytes.extend(&self.quorum_numbers); - bytes.extend(&self.quorum_signed_percentages.len().to_be_bytes()); - bytes.extend(&self.quorum_signed_percentages); - bytes.extend(&self.reference_block_number.to_be_bytes()); - - bytes - } -} - impl From for BatchHeader { fn from(value: DisperserBatchHeader) -> Self { Self { @@ -165,25 +108,11 @@ pub struct BatchMetadata { pub batch_header_hash: Vec, } -impl BatchMetadata { - pub fn to_bytes(&self) -> Vec { - let mut bytes = vec![]; - bytes.extend(self.batch_header.to_bytes()); - bytes.extend(&self.signatory_record_hash); - bytes.extend(&self.confirmation_block_number.to_be_bytes()); - - bytes - } -} - impl TryFrom for BatchMetadata { type Error = ConversionError; fn try_from(value: DisperserBatchMetadata) -> Result { - if value.batch_header.is_none() { - return Err(ConversionError::NotPresentError); - } Ok(Self { - batch_header: BatchHeader::from(value.batch_header.unwrap()), + batch_header: BatchHeader::from(value.batch_header.ok_or(ConversionError::NotPresent)?), signatory_record_hash: value.signatory_record_hash, fee: value.fee, confirmation_block_number: value.confirmation_block_number, @@ -201,31 +130,15 @@ pub struct BlobVerificationProof { pub quorum_indexes: Vec, } -impl BlobVerificationProof { - pub fn to_bytes(&self) -> Vec { - let mut bytes = vec![]; - bytes.extend(&self.batch_id.to_be_bytes()); - bytes.extend(&self.blob_index.to_be_bytes()); - bytes.extend(self.batch_medatada.to_bytes()); - bytes.extend(&self.inclusion_proof.len().to_be_bytes()); - bytes.extend(&self.inclusion_proof); - bytes.extend(&self.quorum_indexes.len().to_be_bytes()); - bytes.extend(&self.quorum_indexes); - - bytes - } -} - impl TryFrom for BlobVerificationProof { type Error = ConversionError; fn try_from(value: DisperserBlobVerificationProof) -> Result { - if value.batch_metadata.is_none() { - return Err(ConversionError::NotPresentError); - } Ok(Self { batch_id: value.batch_id, blob_index: value.blob_index, - batch_medatada: BatchMetadata::try_from(value.batch_metadata.unwrap())?, + batch_medatada: BatchMetadata::try_from( + value.batch_metadata.ok_or(ConversionError::NotPresent)?, + )?, inclusion_proof: value.inclusion_proof, quorum_indexes: value.quorum_indexes, }) @@ -238,28 +151,17 @@ pub struct BlobInfo { pub blob_verification_proof: BlobVerificationProof, } -impl BlobInfo { - pub fn to_bytes(&self) -> Vec { - let mut bytes = vec![]; - let blob_header_bytes = self.blob_header.to_bytes(); - bytes.extend(blob_header_bytes.len().to_be_bytes()); - bytes.extend(blob_header_bytes); - let blob_verification_proof_bytes = self.blob_verification_proof.to_bytes(); - bytes.extend(blob_verification_proof_bytes); - bytes - } -} - impl TryFrom for BlobInfo { type Error = ConversionError; fn try_from(value: DisperserBlobInfo) -> Result { - if value.blob_header.is_none() || value.blob_verification_proof.is_none() { - return Err(ConversionError::NotPresentError); - } Ok(Self { - blob_header: BlobHeader::try_from(value.blob_header.unwrap())?, + blob_header: BlobHeader::try_from( + value.blob_header.ok_or(ConversionError::NotPresent)?, + )?, blob_verification_proof: BlobVerificationProof::try_from( - value.blob_verification_proof.unwrap(), + value + .blob_verification_proof + .ok_or(ConversionError::NotPresent)?, )?, }) } diff --git a/core/node/da_clients/src/eigen/client.rs b/core/node/da_clients/src/eigen/client.rs index 430b5bb4c4a7..5baee9475e92 100644 --- a/core/node/da_clients/src/eigen/client.rs +++ b/core/node/da_clients/src/eigen/client.rs @@ -13,21 +13,23 @@ use super::sdk::RawEigenClient; use crate::utils::to_retriable_da_error; #[async_trait] -pub trait GetBlobData: Clone + std::fmt::Debug + Send + Sync { - async fn call(&self, input: &str) -> anyhow::Result>>; +pub trait GetBlobData: std::fmt::Debug + Send + Sync { + async fn get_blob_data(&self, input: &str) -> anyhow::Result>>; + + fn clone_boxed(&self) -> Box; } /// EigenClient is a client for the Eigen DA service. #[derive(Debug, Clone)] -pub struct EigenClient { - pub(crate) client: Arc>, +pub struct EigenClient { + pub(crate) client: Arc, } -impl EigenClient { +impl EigenClient { pub async fn new( config: EigenConfig, secrets: EigenSecrets, - get_blob_data: Box, + get_blob_data: Box, ) -> anyhow::Result { let private_key = SecretKey::from_str(secrets.private_key.0.expose_secret().as_str()) .map_err(|e| anyhow::anyhow!("Failed to parse private key: {}", e))?; @@ -40,7 +42,7 @@ impl EigenClient { } #[async_trait] -impl DataAvailabilityClient for EigenClient { +impl DataAvailabilityClient for EigenClient { async fn dispatch_blob( &self, _: u32, // batch number @@ -75,6 +77,6 @@ impl DataAvailabilityClient for EigenClient { } fn blob_size_limit(&self) -> Option { - Some(RawEigenClient::::blob_size_limit()) + Some(RawEigenClient::blob_size_limit()) } } diff --git a/core/node/da_clients/src/eigen/client_tests.rs b/core/node/da_clients/src/eigen/client_tests.rs index e504e4892b61..4fbbd5c36761 100644 --- a/core/node/da_clients/src/eigen/client_tests.rs +++ b/core/node/da_clients/src/eigen/client_tests.rs @@ -17,7 +17,7 @@ mod tests { use crate::eigen::{blob_info::BlobInfo, EigenClient, GetBlobData}; - impl EigenClient { + impl EigenClient { pub async fn get_blob_data( &self, blob_id: BlobInfo, @@ -32,8 +32,8 @@ mod tests { const STATUS_QUERY_TIMEOUT: u64 = 1800000; // 30 minutes const STATUS_QUERY_INTERVAL: u64 = 5; // 5 ms - async fn get_blob_info( - client: &EigenClient, + async fn get_blob_info( + client: &EigenClient, result: &DispatchResponse, ) -> anyhow::Result { let blob_info = (|| async { @@ -59,9 +59,13 @@ mod tests { #[async_trait::async_trait] impl GetBlobData for MockGetBlobData { - async fn call(&self, _input: &'_ str) -> anyhow::Result>> { + async fn get_blob_data(&self, _input: &'_ str) -> anyhow::Result>> { Ok(None) } + + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } } #[ignore = "depends on external RPC"] @@ -70,8 +74,8 @@ mod tests { async fn test_non_auth_dispersal() { let config = EigenConfig { disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), - settlement_layer_confirmation_depth: -1, - eigenda_eth_rpc: "https://ethereum-holesky-rpc.publicnode.com".to_string(), + settlement_layer_confirmation_depth: 0, + eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), wait_for_finalization: false, authenticated: false, @@ -110,8 +114,8 @@ mod tests { async fn test_auth_dispersal() { let config = EigenConfig { disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), - settlement_layer_confirmation_depth: -1, - eigenda_eth_rpc: "https://ethereum-holesky-rpc.publicnode.com".to_string(), + settlement_layer_confirmation_depth: 0, + eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), wait_for_finalization: false, authenticated: true, @@ -155,7 +159,7 @@ mod tests { g1_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), g2_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), settlement_layer_confirmation_depth: 0, - eigenda_eth_rpc: "https://ethereum-holesky-rpc.publicnode.com".to_string(), + eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), chain_id: 17000, }; @@ -191,7 +195,7 @@ mod tests { let config = EigenConfig { disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), settlement_layer_confirmation_depth: 5, - eigenda_eth_rpc: "https://ethereum-holesky-rpc.publicnode.com".to_string(), + eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), wait_for_finalization: false, authenticated: false, @@ -231,7 +235,7 @@ mod tests { let config = EigenConfig { disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), settlement_layer_confirmation_depth: 5, - eigenda_eth_rpc: "https://ethereum-holesky-rpc.publicnode.com".to_string(), + eigenda_eth_rpc: Some("https://ethereum-holesky-rpc.publicnode.com".to_string()), eigenda_svc_manager_address: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), wait_for_finalization: false, authenticated: true, diff --git a/core/node/da_clients/src/eigen/sdk.rs b/core/node/da_clients/src/eigen/sdk.rs index b00a9a959887..3a3b1202690c 100644 --- a/core/node/da_clients/src/eigen/sdk.rs +++ b/core/node/da_clients/src/eigen/sdk.rs @@ -7,10 +7,11 @@ use tonic::{ transport::{Channel, ClientTlsConfig, Endpoint}, Streaming, }; +use url::Url; use zksync_config::EigenConfig; use zksync_da_client::types::DAError; use zksync_eth_client::clients::PKSigningClient; -use zksync_types::{url::SensitiveUrl, K256PrivateKey, SLChainId, H160}; +use zksync_types::{url::SensitiveUrl, Address, K256PrivateKey, SLChainId}; use zksync_web3_decl::client::{Client, DynClient, L1}; use super::{ @@ -27,39 +28,54 @@ use crate::eigen::{ disperser_client::DisperserClient, AuthenticatedReply, BlobAuthHeader, }, + verifier::VerificationError, }; -#[derive(Debug, Clone)] -pub(crate) struct RawEigenClient { +#[derive(Debug)] +pub(crate) struct RawEigenClient { client: Arc>>, private_key: SecretKey, pub config: EigenConfig, verifier: Verifier, - get_blob_data: Box, + get_blob_data: Box, +} + +impl Clone for RawEigenClient { + fn clone(&self) -> Self { + Self { + client: self.client.clone(), + private_key: self.private_key, + config: self.config.clone(), + verifier: self.verifier.clone(), + get_blob_data: self.get_blob_data.clone_boxed(), + } + } } pub(crate) const DATA_CHUNK_SIZE: usize = 32; -impl RawEigenClient { +impl RawEigenClient { const BLOB_SIZE_LIMIT: usize = 1024 * 1024 * 2; // 2 MB pub async fn new( private_key: SecretKey, config: EigenConfig, - get_blob_data: Box, + get_blob_data: Box, ) -> anyhow::Result { let endpoint = Endpoint::from_str(config.disperser_rpc.as_str())?.tls_config(ClientTlsConfig::new())?; let client = Arc::new(Mutex::new(DisperserClient::connect(endpoint).await?)); let verifier_config = VerifierConfig { - rpc_url: config.eigenda_eth_rpc.clone(), - svc_manager_addr: config.eigenda_svc_manager_address.clone(), + rpc_url: config + .eigenda_eth_rpc + .clone() + .ok_or(anyhow::anyhow!("EigenDA ETH RPC not set"))?, + svc_manager_addr: Address::from_str(&config.eigenda_svc_manager_address)?, max_blob_size: Self::BLOB_SIZE_LIMIT as u32, - g1_url: config.g1_url.clone(), - g2_url: config.g2_url.clone(), - settlement_layer_confirmation_depth: config.settlement_layer_confirmation_depth.max(0) - as u32, + g1_url: Url::parse(&config.g1_url)?, + g2_url: Url::parse(&config.g2_url)?, + settlement_layer_confirmation_depth: config.settlement_layer_confirmation_depth, private_key: hex::encode(private_key.secret_bytes()), chain_id: config.chain_id, }; @@ -71,7 +87,7 @@ impl RawEigenClient { K256PrivateKey::from_bytes(zksync_types::H256::from_str( &verifier_config.private_key, )?)?, - H160::from_str(&verifier_config.svc_manager_addr)?, + verifier_config.svc_manager_addr, Verifier::DEFAULT_PRIORITY_FEE_PER_GAS, SLChainId(verifier_config.chain_id), query_client, @@ -109,7 +125,16 @@ impl RawEigenClient { .await? .into_inner(); - Ok(hex::encode(disperse_reply.request_id)) + match disperser::BlobStatus::try_from(disperse_reply.result)? { + disperser::BlobStatus::Failed + | disperser::BlobStatus::InsufficientSignatures + | disperser::BlobStatus::Unknown => Err(anyhow::anyhow!("Blob dispatch failed")), + + disperser::BlobStatus::Dispersing + | disperser::BlobStatus::Processing + | disperser::BlobStatus::Finalized + | disperser::BlobStatus::Confirmed => Ok(hex::encode(disperse_reply.request_id)), + } } async fn dispatch_blob_authenticated(&self, data: Vec) -> anyhow::Result { @@ -147,11 +172,21 @@ impl RawEigenClient { let disperser::authenticated_reply::Payload::DisperseReply(disperse_reply) = reply else { return Err(anyhow::anyhow!("Unexpected response from server")); }; - Ok(hex::encode(disperse_reply.request_id)) + + match disperser::BlobStatus::try_from(disperse_reply.result)? { + disperser::BlobStatus::Failed + | disperser::BlobStatus::InsufficientSignatures + | disperser::BlobStatus::Unknown => Err(anyhow::anyhow!("Blob dispatch failed")), + + disperser::BlobStatus::Dispersing + | disperser::BlobStatus::Processing + | disperser::BlobStatus::Finalized + | disperser::BlobStatus::Confirmed => Ok(hex::encode(disperse_reply.request_id)), + } } - pub async fn get_commitment(&self, blob_id: &str) -> anyhow::Result> { - let blob_info = self.try_get_inclusion_data(blob_id.to_string()).await?; + pub async fn get_commitment(&self, request_id: &str) -> anyhow::Result> { + let blob_info = self.try_get_inclusion_data(request_id.to_string()).await?; let Some(blob_info) = blob_info else { return Ok(None); @@ -162,7 +197,7 @@ impl RawEigenClient { let Some(data) = self.get_blob_data(blob_info.clone()).await? else { return Err(anyhow::anyhow!("Failed to get blob data")); }; - let data_db = self.get_blob_data.call(blob_id).await?; + let data_db = self.get_blob_data.get_blob_data(request_id).await?; if let Some(data_db) = data_db { if data_db != data { return Err(anyhow::anyhow!( @@ -179,16 +214,19 @@ impl RawEigenClient { .verify_inclusion_data_against_settlement_layer(blob_info.clone()) .await; // in case of an error, the dispatcher will retry, so the need to return None - if result.is_err() { - return Ok(None); + if let Err(e) = result { + match e { + VerificationError::EmptyHash => return Ok(None), + _ => return Err(anyhow::anyhow!("Failed to verify inclusion data: {:?}", e)), + } } - tracing::info!("Blob dispatch confirmed, blob id: {}", blob_id); + tracing::info!("Blob dispatch confirmed, request id: {}", request_id); Ok(Some(blob_info)) } - pub async fn get_inclusion_data(&self, blob_id: &str) -> anyhow::Result>> { - let blob_info = self.get_commitment(blob_id).await?; + pub async fn get_inclusion_data(&self, request_id: &str) -> anyhow::Result>> { + let blob_info = self.get_commitment(request_id).await?; if let Some(blob_info) = blob_info { Ok(Some(blob_info.blob_verification_proof.inclusion_proof)) } else { diff --git a/core/node/da_clients/src/eigen/verifier.rs b/core/node/da_clients/src/eigen/verifier.rs index 6acd5398d220..b8f774c33a98 100644 --- a/core/node/da_clients/src/eigen/verifier.rs +++ b/core/node/da_clients/src/eigen/verifier.rs @@ -1,15 +1,15 @@ -use std::{collections::HashMap, fs::File, io::copy, path::Path, str::FromStr}; +use std::{collections::HashMap, path::Path}; use ark_bn254::{Fq, G1Affine}; use ethabi::{encode, ParamType, Token}; use rust_kzg_bn254::{blob::Blob, kzg::Kzg, polynomial::PolynomialFormat}; -use tiny_keccak::{Hasher, Keccak}; +use tokio::{fs::File, io::AsyncWriteExt}; use url::Url; use zksync_basic_types::web3::CallRequest; use zksync_eth_client::{clients::PKSigningClient, EnrichedClientResult}; use zksync_types::{ web3::{self, BlockId, BlockNumber}, - H160, U256, U64, + Address, U256, U64, }; use super::blob_info::{BatchHeader, BlobHeader, BlobInfo, G1Commitment}; @@ -68,10 +68,10 @@ pub enum VerificationError { #[derive(Debug, Clone)] pub struct VerifierConfig { pub rpc_url: String, - pub svc_manager_addr: String, + pub svc_manager_addr: Address, pub max_blob_size: u32, - pub g1_url: String, - pub g2_url: String, + pub g1_url: Url, + pub g2_url: Url, pub settlement_layer_confirmation_depth: u32, pub private_key: String, pub chain_id: u64, @@ -100,9 +100,11 @@ impl Clone for Verifier { impl Verifier { pub const DEFAULT_PRIORITY_FEE_PER_GAS: u64 = 100; pub const SRSORDER: u32 = 268435456; // 2 ^ 28 + pub const G1POINT: &'static str = "g1.point"; + pub const G2POINT: &'static str = "g2.point.powerOf2"; + pub const POINT_SIZE: u32 = 32; - async fn save_point(url: String, point: String) -> Result<(), VerificationError> { - let url = Url::parse(&url).map_err(|_| VerificationError::LinkError)?; + async fn save_point(url: Url, point: String) -> Result<(), VerificationError> { let response = reqwest::get(url) .await .map_err(|_| VerificationError::LinkError)?; @@ -111,17 +113,21 @@ impl Verifier { } let path = format!("./{}", point); let path = Path::new(&path); - let mut file = File::create(path).map_err(|_| VerificationError::LinkError)?; + let mut file = File::create(path) + .await + .map_err(|_| VerificationError::LinkError)?; let content = response .bytes() .await .map_err(|_| VerificationError::LinkError)?; - copy(&mut content.as_ref(), &mut file).map_err(|_| VerificationError::LinkError)?; + file.write_all(&content) + .await + .map_err(|_| VerificationError::LinkError)?; Ok(()) } - async fn save_points(url_g1: String, url_g2: String) -> Result { - Self::save_point(url_g1.clone(), "g1.point".to_string()).await?; - Self::save_point(url_g2.clone(), "g2.point.powerOf2".to_string()).await?; + async fn save_points(url_g1: Url, url_g2: Url) -> Result { + Self::save_point(url_g1, Self::G1POINT.to_string()).await?; + Self::save_point(url_g2, Self::G2POINT.to_string()).await?; Ok(".".to_string()) } @@ -129,20 +135,28 @@ impl Verifier { cfg: VerifierConfig, signing_client: T, ) -> Result { - let srs_points_to_load = cfg.max_blob_size / 32; + let srs_points_to_load = cfg.max_blob_size / Self::POINT_SIZE; let path = Self::save_points(cfg.clone().g1_url, cfg.clone().g2_url).await?; - let kzg = Kzg::setup( - &format!("{}{}", path, "/g1.point"), - "", - &format!("{}{}", path, "/g2.point.powerOf2"), - Self::SRSORDER, - srs_points_to_load, - "".to_string(), - ); - let kzg = kzg.map_err(|e| { - tracing::error!("Failed to setup KZG: {:?}", e); - VerificationError::KzgError - })?; + let kzg_handle = tokio::task::spawn_blocking(move || { + Kzg::setup( + &format!("{}/{}", path, Self::G1POINT), + "", + &format!("{}/{}", path, Self::G2POINT), + Self::SRSORDER, + srs_points_to_load, + "".to_string(), + ) + }); + let kzg = kzg_handle + .await + .map_err(|e| { + tracing::error!("Failed to setup KZG: {:?}", e); + VerificationError::KzgError + })? + .map_err(|e| { + tracing::error!("Failed to setup KZG: {:?}", e); + VerificationError::KzgError + })?; Ok(Self { kzg, @@ -182,9 +196,9 @@ impl Verifier { Ok(()) } - pub fn hash_encode_blob_header(&self, blob_header: BlobHeader) -> Vec { + pub fn hash_encode_blob_header(&self, blob_header: &BlobHeader) -> Vec { let mut blob_quorums = vec![]; - for quorum in blob_header.blob_quorum_params { + for quorum in &blob_header.blob_quorum_params { let quorum = Token::Tuple(vec![ Token::Uint(ethabi::Uint::from(quorum.quorum_number)), Token::Uint(ethabi::Uint::from(quorum.adversary_threshold_percentage)), @@ -203,12 +217,7 @@ impl Verifier { ]); let encoded = encode(&[blob_header]); - - let mut keccak = Keccak::v256(); - keccak.update(&encoded); - let mut hash = [0u8; 32]; - keccak.finalize(&mut hash); - hash.to_vec() + web3::keccak256(&encoded).to_vec() } pub fn process_inclusion_proof( @@ -223,23 +232,15 @@ impl Verifier { } let mut computed_hash = leaf.to_vec(); for i in 0..proof.len() / 32 { - let mut combined = proof[i * 32..(i + 1) * 32] - .iter() - .chain(computed_hash.iter()) - .cloned() - .collect::>(); + let mut buffer = [0u8; 64]; if index % 2 == 0 { - combined = computed_hash - .iter() - .chain(proof[i * 32..(i + 1) * 32].iter()) - .cloned() - .collect::>(); - }; - let mut keccak = Keccak::v256(); - keccak.update(&combined); - let mut hash = [0u8; 32]; - keccak.finalize(&mut hash); - computed_hash = hash.to_vec(); + buffer[..32].copy_from_slice(&computed_hash); + buffer[32..].copy_from_slice(&proof[i * 32..(i + 1) * 32]); + } else { + buffer[..32].copy_from_slice(&proof[i * 32..(i + 1) * 32]); + buffer[32..].copy_from_slice(&computed_hash); + } + computed_hash = web3::keccak256(&buffer).to_vec(); index /= 2; } @@ -247,26 +248,23 @@ impl Verifier { } /// Verifies the certificate's batch root - pub fn verify_merkle_proof(&self, cert: BlobInfo) -> Result<(), VerificationError> { - let inclusion_proof = cert.blob_verification_proof.inclusion_proof; - let root = cert + pub fn verify_merkle_proof(&self, cert: &BlobInfo) -> Result<(), VerificationError> { + let inclusion_proof = &cert.blob_verification_proof.inclusion_proof; + let root = &cert .blob_verification_proof .batch_medatada .batch_header .batch_root; let blob_index = cert.blob_verification_proof.blob_index; - let blob_header = cert.blob_header; + let blob_header = &cert.blob_header; let blob_header_hash = self.hash_encode_blob_header(blob_header); - let mut keccak = Keccak::v256(); - keccak.update(&blob_header_hash); - let mut leaf_hash = [0u8; 32]; - keccak.finalize(&mut leaf_hash); + let leaf_hash = web3::keccak256(&blob_header_hash).to_vec(); let generated_root = - self.process_inclusion_proof(&inclusion_proof, &leaf_hash, blob_index)?; + self.process_inclusion_proof(inclusion_proof, &leaf_hash, blob_index)?; - if generated_root != root { + if generated_root != *root { return Err(VerificationError::DifferentRoots); } Ok(()) @@ -274,39 +272,29 @@ impl Verifier { fn hash_batch_metadata( &self, - batch_header: BatchHeader, - signatory_record_hash: Vec, + batch_header: &BatchHeader, + signatory_record_hash: &[u8], confirmation_block_number: u32, ) -> Vec { let batch_header_token = Token::Tuple(vec![ - Token::FixedBytes(batch_header.batch_root), - Token::Bytes(batch_header.quorum_numbers), - Token::Bytes(batch_header.quorum_signed_percentages), + Token::FixedBytes(batch_header.batch_root.clone()), // Clone only where necessary + Token::Bytes(batch_header.quorum_numbers.clone()), + Token::Bytes(batch_header.quorum_signed_percentages.clone()), Token::Uint(ethabi::Uint::from(batch_header.reference_block_number)), ]); let encoded = encode(&[batch_header_token]); - - let mut keccak = Keccak::v256(); - keccak.update(&encoded); - let mut header_hash = [0u8; 32]; - keccak.finalize(&mut header_hash); + let header_hash = web3::keccak256(&encoded).to_vec(); let hash_token = Token::Tuple(vec![ Token::FixedBytes(header_hash.to_vec()), - Token::FixedBytes(signatory_record_hash), + Token::FixedBytes(signatory_record_hash.to_owned()), // Clone only if required ]); let mut hash_encoded = encode(&[hash_token]); hash_encoded.append(&mut confirmation_block_number.to_be_bytes().to_vec()); - - let mut keccak = Keccak::v256(); - keccak.update(&hash_encoded); - let mut hash = [0u8; 32]; - keccak.finalize(&mut hash); - - hash.to_vec() + web3::keccak256(&hash_encoded).to_vec() } /// Retrieves the block to make the request to the service manager @@ -319,15 +307,17 @@ impl Verifier { .map_err(|_| VerificationError::ServiceManagerError)? .as_u64(); - if self.cfg.settlement_layer_confirmation_depth == 0 { - return Ok(latest); - } - Ok(latest - (self.cfg.settlement_layer_confirmation_depth as u64 - 1)) + let depth = self + .cfg + .settlement_layer_confirmation_depth + .saturating_sub(1); + let block_to_return = latest.saturating_sub(depth as u64); + Ok(block_to_return) } async fn call_batch_id_to_metadata_hash( &self, - blob_info: BlobInfo, + blob_info: &BlobInfo, ) -> Result, VerificationError> { let context_block = self.get_context_block().await?; @@ -339,10 +329,7 @@ impl Verifier { data.append(batch_id_vec.to_vec().as_mut()); let call_request = CallRequest { - to: Some( - H160::from_str(&self.cfg.svc_manager_addr) - .map_err(|_| VerificationError::ServiceManagerError)?, - ), + to: Some(self.cfg.svc_manager_addr), data: Some(zksync_basic_types::web3::Bytes(data)), ..Default::default() }; @@ -361,21 +348,19 @@ impl Verifier { } /// Verifies the certificate batch hash - pub async fn verify_batch(&self, blob_info: BlobInfo) -> Result<(), VerificationError> { - let expected_hash = self - .call_batch_id_to_metadata_hash(blob_info.clone()) - .await?; + pub async fn verify_batch(&self, blob_info: &BlobInfo) -> Result<(), VerificationError> { + let expected_hash = self.call_batch_id_to_metadata_hash(blob_info).await?; if expected_hash == vec![0u8; 32] { return Err(VerificationError::EmptyHash); } let actual_hash = self.hash_batch_metadata( - blob_info + &blob_info .blob_verification_proof .batch_medatada .batch_header, - blob_info + &blob_info .blob_verification_proof .batch_medatada .signatory_record_hash, @@ -391,47 +376,17 @@ impl Verifier { Ok(()) } - fn decode_bytes(&self, encoded: Vec) -> Result, String> { - // Ensure the input has at least 64 bytes (offset + length) - if encoded.len() < 64 { - return Err("Encoded data is too short".to_string()); - } - - // Read the offset (first 32 bytes) - let offset = { - let mut offset_bytes = [0u8; 32]; - offset_bytes.copy_from_slice(&encoded[0..32]); - usize::from_be_bytes( - offset_bytes[24..32] - .try_into() - .map_err(|_| "Offset is too large")?, - ) - }; - - // Check if offset is valid - if offset + 32 > encoded.len() { - return Err("Offset points outside the encoded data".to_string()); - } - - // Read the length (32 bytes at the offset position) - let length = { - let mut length_bytes = [0u8; 32]; - length_bytes.copy_from_slice(&encoded[offset..offset + 32]); - usize::from_be_bytes( - length_bytes[24..32] - .try_into() - .map_err(|_| "Offset is too large")?, - ) - }; - - // Check if the length is valid - if offset + 32 + length > encoded.len() { - return Err("Length extends beyond the encoded data".to_string()); + fn decode_bytes(&self, encoded: Vec) -> Result, VerificationError> { + let output_type = [ParamType::Bytes]; + let tokens: Vec = ethabi::decode(&output_type, &encoded) + .map_err(|_| VerificationError::ServiceManagerError)?; + let token = tokens + .first() + .ok_or(VerificationError::ServiceManagerError)?; + match token { + Token::Bytes(data) => Ok(data.to_vec()), + _ => Err(VerificationError::ServiceManagerError), } - - // Extract the bytes data - let data = encoded[offset + 32..offset + 32 + length].to_vec(); - Ok(data) } async fn get_quorum_adversary_threshold( @@ -442,10 +397,7 @@ impl Verifier { let data = func_selector.to_vec(); let call_request = CallRequest { - to: Some( - H160::from_str(&self.cfg.svc_manager_addr) - .map_err(|_| VerificationError::ServiceManagerError)?, - ), + to: Some(self.cfg.svc_manager_addr), data: Some(zksync_basic_types::web3::Bytes(data)), ..Default::default() }; @@ -457,9 +409,7 @@ impl Verifier { .await .map_err(|_| VerificationError::ServiceManagerError)?; - let percentages = self - .decode_bytes(res.0.to_vec()) - .map_err(|_| VerificationError::ServiceManagerError)?; + let percentages = self.decode_bytes(res.0.to_vec())?; if percentages.len() > quorum_number as usize { return Ok(percentages[quorum_number as usize]); @@ -471,10 +421,7 @@ impl Verifier { let func_selector = ethabi::short_signature("quorumNumbersRequired", &[]); let data = func_selector.to_vec(); let call_request = CallRequest { - to: Some( - H160::from_str(&self.cfg.svc_manager_addr) - .map_err(|_| VerificationError::ServiceManagerError)?, - ), + to: Some(self.cfg.svc_manager_addr), data: Some(zksync_basic_types::web3::Bytes(data)), ..Default::default() }; @@ -487,13 +434,12 @@ impl Verifier { .map_err(|_| VerificationError::ServiceManagerError)?; self.decode_bytes(res.0.to_vec()) - .map_err(|_| VerificationError::ServiceManagerError) } /// Verifies that the certificate's blob quorum params are correct - pub async fn verify_security_params(&self, cert: BlobInfo) -> Result<(), VerificationError> { - let blob_header = cert.blob_header; - let batch_header = cert.blob_verification_proof.batch_medatada.batch_header; + pub async fn verify_security_params(&self, cert: &BlobInfo) -> Result<(), VerificationError> { + let blob_header = &cert.blob_header; + let batch_header = &cert.blob_verification_proof.batch_medatada.batch_header; let mut confirmed_quorums: HashMap = HashMap::new(); for i in 0..blob_header.blob_quorum_params.len() { @@ -542,9 +488,9 @@ impl Verifier { &self, cert: BlobInfo, ) -> Result<(), VerificationError> { - self.verify_batch(cert.clone()).await?; - self.verify_merkle_proof(cert.clone())?; - self.verify_security_params(cert.clone()).await?; + self.verify_batch(&cert).await?; + self.verify_merkle_proof(&cert)?; + self.verify_security_params(&cert).await?; Ok(()) } } diff --git a/core/node/da_clients/src/eigen/verifier_tests.rs b/core/node/da_clients/src/eigen/verifier_tests.rs index bdea8f9a9960..35c78dd8d9d3 100644 --- a/core/node/da_clients/src/eigen/verifier_tests.rs +++ b/core/node/da_clients/src/eigen/verifier_tests.rs @@ -2,11 +2,12 @@ mod test { use std::{collections::HashMap, str::FromStr}; + use url::Url; use zksync_eth_client::{clients::PKSigningClient, EnrichedClientResult}; use zksync_types::{ url::SensitiveUrl, web3::{BlockId, Bytes, CallRequest}, - K256PrivateKey, SLChainId, H160, U64, + Address, K256PrivateKey, SLChainId, H160, U64, }; use zksync_web3_decl::client::{Client, DynClient, L1}; @@ -21,10 +22,10 @@ mod test { fn get_verifier_config() -> VerifierConfig { VerifierConfig { rpc_url: "https://ethereum-holesky-rpc.publicnode.com".to_string(), - svc_manager_addr: "0xD4A7E1Bd8015057293f0D0A557088c286942e84b".to_string(), + svc_manager_addr: Address::from_str("0xD4A7E1Bd8015057293f0D0A557088c286942e84b").unwrap(), max_blob_size: 2 * 1024 * 1024, - g1_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), - g2_url: "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), + g1_url: Url::parse("https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point").unwrap(), + g2_url: Url::parse("https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2").unwrap(), settlement_layer_confirmation_depth: 0, private_key: "0xd08aa7ae1bb5ddd46c3c2d8cdb5894ab9f54dec467233686ca42629e826ac4c6" .to_string(), @@ -82,9 +83,7 @@ mod test { ) .map_err(|_| VerificationError::ServiceManagerError) .unwrap(), - zksync_types::H160::from_str(&cfg.svc_manager_addr) - .map_err(|_| VerificationError::ServiceManagerError) - .unwrap(), + cfg.svc_manager_addr, Verifier::DEFAULT_PRIORITY_FEE_PER_GAS, SLChainId(cfg.chain_id), query_client, @@ -212,7 +211,7 @@ mod test { quorum_indexes: vec![0, 1], }, }; - let result = verifier.verify_merkle_proof(cert); + let result = verifier.verify_merkle_proof(&cert); assert!(result.is_ok()); } @@ -295,7 +294,7 @@ mod test { quorum_indexes: vec![0, 1], }, }; - let result = verifier.verify_merkle_proof(cert); + let result = verifier.verify_merkle_proof(&cert); assert!(result.is_ok()); } @@ -332,7 +331,7 @@ mod test { }, ], }; - let result = verifier.hash_encode_blob_header(blob_header); + let result = verifier.hash_encode_blob_header(&blob_header); let expected = "ba4675a31c9bf6b2f7abfdcedd34b74645cb7332b35db39bff00ae8516a67393"; assert_eq!(result, hex::decode(expected).unwrap()); } @@ -371,7 +370,7 @@ mod test { }, ], }; - let result = verifier.hash_encode_blob_header(blob_header); + let result = verifier.hash_encode_blob_header(&blob_header); let expected = "ba4675a31c9bf6b2f7abfdcedd34b74645cb7332b35db39bff00ae8516a67393"; assert_eq!(result, hex::decode(expected).unwrap()); } @@ -495,7 +494,7 @@ mod test { quorum_indexes: vec![0, 1], }, }; - let result = verifier.verify_batch(cert).await; + let result = verifier.verify_batch(&cert).await; assert!(result.is_ok()); } @@ -603,7 +602,7 @@ mod test { quorum_indexes: vec![0, 1], }, }; - let result = verifier.verify_batch(cert).await; + let result = verifier.verify_batch(&cert).await; assert!(result.is_ok()); } @@ -685,7 +684,7 @@ mod test { quorum_indexes: vec![0, 1], }, }; - let result = verifier.verify_security_params(cert).await; + let result = verifier.verify_security_params(&cert).await; assert!(result.is_ok()); } @@ -810,7 +809,7 @@ mod test { quorum_indexes: vec![0, 1], }, }; - let result = verifier.verify_security_params(cert).await; + let result = verifier.verify_security_params(&cert).await; assert!(result.is_ok()); } } diff --git a/core/node/da_dispatcher/src/da_dispatcher.rs b/core/node/da_dispatcher/src/da_dispatcher.rs index 2f46419f7972..10a895df4956 100644 --- a/core/node/da_dispatcher/src/da_dispatcher.rs +++ b/core/node/da_dispatcher/src/da_dispatcher.rs @@ -83,7 +83,6 @@ impl DataAvailabilityDispatcher { for batch in batches { let dispatch_latency = METRICS.blob_dispatch_latency.start(); - METRICS.blobs_pending_dispatch.inc_by(1); let dispatch_response = retry(self.config.max_retries(), batch.l1_batch_number, || { self.client .dispatch_blob(batch.l1_batch_number.0, batch.pubdata.clone()) @@ -115,7 +114,6 @@ impl DataAvailabilityDispatcher { .set(batch.l1_batch_number.0 as usize); METRICS.blob_size.observe(batch.pubdata.len()); METRICS.blobs_dispatched.inc_by(1); - METRICS.blobs_pending_dispatch.dec_by(1); tracing::info!( "Dispatched a DA for batch_number: {}, pubdata_size: {}, dispatch_latency: {dispatch_latency_duration:?}", diff --git a/core/node/da_dispatcher/src/metrics.rs b/core/node/da_dispatcher/src/metrics.rs index 4c21e556abe1..2f469c865b6c 100644 --- a/core/node/da_dispatcher/src/metrics.rs +++ b/core/node/da_dispatcher/src/metrics.rs @@ -19,8 +19,6 @@ pub(super) struct DataAvailabilityDispatcherMetrics { /// Buckets are bytes ranging from 1 KB to 16 MB, which has to satisfy all blob size values. #[metrics(buckets = Buckets::exponential(1_024.0..=16.0 * 1_024.0 * 1_024.0, 2.0), unit = Unit::Bytes)] pub blob_size: Histogram, - /// Amount of pending blobs to be dispatched. - pub blobs_pending_dispatch: Gauge, /// Total number of blobs dispatched. pub blobs_dispatched: Gauge, /// Total number of blobs included. diff --git a/core/node/node_framework/src/implementations/layers/da_clients/eigen.rs b/core/node/node_framework/src/implementations/layers/da_clients/eigen.rs index 79abf5d0deee..515c2bb3d834 100644 --- a/core/node/node_framework/src/implementations/layers/da_clients/eigen.rs +++ b/core/node/node_framework/src/implementations/layers/da_clients/eigen.rs @@ -47,7 +47,7 @@ impl WiringLayer for EigenWiringLayer { } async fn wire(self, input: Self::Input) -> Result { - let master_pool = input.master_pool.get_custom(2).await?; + let master_pool = input.master_pool.get().await?; let get_blob_from_db = GetBlobFromDB { pool: master_pool }; let client: Box = Box::new( EigenClient::new(self.config, self.secrets, Box::new(get_blob_from_db)).await?, @@ -66,15 +66,16 @@ pub struct GetBlobFromDB { #[async_trait::async_trait] impl GetBlobData for GetBlobFromDB { - async fn call(&self, input: &'_ str) -> anyhow::Result>> { - let pool = self.pool.clone(); - let input = input.to_string(); - let mut conn = pool.connection_tagged("da_dispatcher").await?; + async fn get_blob_data(&self, input: &str) -> anyhow::Result>> { + let mut conn = self.pool.connection_tagged("eigen_client").await?; let batch = conn .data_availability_dal() - .get_blob_data_by_blob_id(&input) + .get_blob_data_by_blob_id(input) .await?; - drop(conn); Ok(batch.map(|b| b.pubdata)) } + + fn clone_boxed(&self) -> Box { + Box::new(self.clone()) + } } diff --git a/core/node/state_keeper/src/io/mempool.rs b/core/node/state_keeper/src/io/mempool.rs index 991ecee699c3..cf354891236b 100644 --- a/core/node/state_keeper/src/io/mempool.rs +++ b/core/node/state_keeper/src/io/mempool.rs @@ -206,6 +206,21 @@ impl StateKeeperIO for MempoolIO { .protocol_version_id_by_timestamp(timestamp) .await .context("Failed loading protocol version")?; + let previous_protocol_version = storage + .blocks_dal() + .pending_protocol_version() + .await + .context("Failed loading previous protocol version")?; + let batch_with_upgrade_tx = if previous_protocol_version != protocol_version { + storage + .protocol_versions_dal() + .get_protocol_upgrade_tx(protocol_version) + .await + .context("Failed loading protocol upgrade tx")? + .is_some() + } else { + false + }; drop(storage); // We create a new filter each time, since parameters may change and a previously @@ -217,7 +232,8 @@ impl StateKeeperIO for MempoolIO { .await .context("failed creating L2 transaction filter")?; - if !self.mempool.has_next(&self.filter) { + // We do not populate mempool with upgrade tx so it should be checked separately. + if !batch_with_upgrade_tx && !self.mempool.has_next(&self.filter) { tokio::time::sleep(self.delay_interval).await; continue; } diff --git a/core/node/state_keeper/src/io/tests/mod.rs b/core/node/state_keeper/src/io/tests/mod.rs index 15164328b7a0..536efe82804a 100644 --- a/core/node/state_keeper/src/io/tests/mod.rs +++ b/core/node/state_keeper/src/io/tests/mod.rs @@ -18,6 +18,8 @@ use zksync_types::{ commitment::{L1BatchCommitmentMode, PubdataParams}, fee_model::{BatchFeeInput, PubdataIndependentBatchFeeModelInput}, l2::L2Tx, + protocol_upgrade::ProtocolUpgradeTx, + protocol_version::ProtocolSemanticVersion, AccountTreeId, Address, L1BatchNumber, L2BlockNumber, L2ChainId, ProtocolVersion, ProtocolVersionId, StorageKey, TransactionTimeRangeConstraint, H256, U256, }; @@ -848,6 +850,52 @@ async fn test_mempool_with_timestamp_assertion() { ); } +#[tokio::test] +async fn test_batch_params_with_protocol_upgrade_tx() { + let connection_pool = ConnectionPool::::constrained_test_pool(2).await; + let tester = Tester::new(L1BatchCommitmentMode::Rollup); + // Genesis is needed for proper mempool initialization. + tester.genesis(&connection_pool).await; + + let (mut mempool, _) = tester.create_test_mempool_io(connection_pool.clone()).await; + let (cursor, _) = mempool.initialize().await.unwrap(); + + // Check that new batch params are not returned when there is no tx to process. + let new_batch_params = mempool + .wait_for_new_batch_params(&cursor, Duration::from_millis(100)) + .await + .unwrap(); + assert!(new_batch_params.is_none()); + + // Insert protocol version with upgrade tx. + let protocol_upgrade_tx = ProtocolUpgradeTx { + execute: Default::default(), + common_data: Default::default(), + received_timestamp_ms: 0, + }; + let version = ProtocolVersion { + version: ProtocolSemanticVersion { + minor: ProtocolVersionId::next(), + patch: 0.into(), + }, + tx: Some(protocol_upgrade_tx), + ..Default::default() + }; + connection_pool + .connection() + .await + .unwrap() + .protocol_versions_dal() + .save_protocol_version_with_tx(&version) + .await + .unwrap(); + let new_batch_params = mempool + .wait_for_new_batch_params(&cursor, Duration::from_millis(100)) + .await + .unwrap(); + assert!(new_batch_params.is_some()); +} + async fn insert_l2_transaction(storage: &mut Connection<'_, Core>, tx: &L2Tx) { storage .transactions_dal() diff --git a/deny.toml b/deny.toml index d72f3823761f..954017750ab2 100644 --- a/deny.toml +++ b/deny.toml @@ -9,7 +9,7 @@ feature-depth = 1 [advisories] ignore = [ "RUSTSEC-2024-0375", # atty dependency being unmaintained, dependency of clap and criterion, we would need to update to newer major of dependencies - "RUSTSEC-2020-0168", # mach dependency being unmaintained, dependency in consensus, we should consider moving to mach2 fork + "RUSTSEC-2020-0168", # mach dependency being unmaintained, dependency in api server, we should consider moving to mach2 fork "RUSTSEC-2024-0370", # `cs_derive` needs to be updated to not rely on `proc-macro-error` # all below caused by StructOpt which we still use and we should move to clap v4 instead "RUSTSEC-2021-0145", @@ -24,7 +24,6 @@ allow = [ "ISC", "Unlicense", "MPL-2.0", - "Unicode-DFS-2016", "CC0-1.0", "BSD-2-Clause", "BSD-3-Clause", @@ -33,6 +32,7 @@ allow = [ "Apache-2.0 WITH LLVM-exception", "0BSD", "BSL-1.0", + "Unicode-3.0" ] confidence-threshold = 0.8 diff --git a/docs/src/specs/img/verifyinteropmsg.png b/docs/src/specs/img/verifyinteropmsg.png index c59e5607f7da44a61131f23d2a6eae26237419a0..031fe811207bc503e5b747dbae0577bae14584ce 100644 GIT binary patch literal 121433 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

-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 literal 164358 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

FMasc%e+n#T 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�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 diff --git a/docs/src/specs/interop/interopmessages.md b/docs/src/specs/interop/interopmessages.md index cabfd0e56750..f32724e0013d 100644 --- a/docs/src/specs/interop/interopmessages.md +++ b/docs/src/specs/interop/interopmessages.md @@ -56,8 +56,9 @@ This `interopHash` serves as a globally unique identifier that can be used on an #### How do I get the proof You’ll notice that **verifyInteropMessage** has a second argument — a proof that you need to provide. This proof is a -Merkle tree proof (more details below). You can obtain it by querying the Settlement Layer (Gateway) or generating it -off-chain by examining the Gateway state on L1. +Merkle tree proof (more details below). You can obtain it by querying the +[chain](https://docs.zksync.io/build/api-reference/zks-rpc#zks_getl2tol1msgproof) , or generate it off-chain - by +looking at the chain's state on L1 #### How does the interop message differ from other layers (InteropTransactions, InteropCalls) @@ -129,49 +130,43 @@ from them at the end of the batch, and sends this tree to the SettlementLayer (G ![sendtol1.png](../img/sendtol1.png) -The Gateway will verify the hashes of the messages to ensure it has received the correct preimages. Once the proof for -the batch is submitted (or more accurately, during the "execute" step), it will add the root of the Merkle tree to its -`globalRoot`. +The settlement layer receives the messages and once the proof for the batch is submitted (or more accurately, during the +"execute" step), it will add the root of the Merkle tree to its `messageRoot` (sometimes called `globalRoot`). ![globalroot.png](../img/globalroot.png) -The `globalRoot` is the root of the Merkle tree that includes all messages from all chains. Each chain regularly reads -the globalRoot value from the Gateway to stay synchronized. +The `messageRoot` is the root of the Merkle tree that includes all messages from all chains. Each chain regularly reads +the messageRoot value from the Gateway to stay synchronized. ![gateway.png](../img/gateway.png) If a user wants to call `verifyInteropMessage` on a chain, they first need to query the Gateway for the Merkle path from -the batch they are interested in up to the `globalRoot`. Once they have this path, they can provide it as an argument +the batch they are interested in up to the `messageRoot`. Once they have this path, they can provide it as an argument when calling a method on the destination chain (such as the `openSignup` method in our example). ![proofmerklepath.png](../img/proofmerklepath.png) -#### What if the Gateway doesn’t respond +#### What if Chain doesn’t provide the proof -If the Gateway doesn’t respond, users can manually re-create the Merkle proof using data available on L1. Every +If the chain doesn’t respond, users can manually re-create the Merkle proof using data available on L1. Every interopMessage is also sent to L1. -#### Global roots change frequently +#### Message roots change frequently -Yes, global roots update continuously as new chains prove their blocks. However, chains retain historical global roots +Yes, message roots update continuously as new chains prove their blocks. However, chains retain historical message roots for a reasonable period (around 24 hours) to ensure that recently generated Merkle paths remain valid. -#### Is this secure? Could a chain operator, like Chain D, use a different global root +#### Is this secure? Could a chain operator, like Chain D, use a different message root -Yes, it’s secure. If a malicious operator on Chain D attempted to use a different global root, they wouldn’t be able to +Yes, it’s secure. If a malicious operator on Chain D attempted to use a different message root, they wouldn’t be able to submit the proof for their new batch to the Gateway. This is because the proof’s public inputs must include the valid -global root. - -#### What if the Gateway is malicious - -If the Gateway behaves maliciously, it wouldn’t be able to submit its batches to L1, as the proof would fail -verification. A separate section will cover interop transaction security in more detail. +message root. ### Other Features #### Dependency Set -- In ElasticChain, this is implicitly handled by the Gateway. Any chain that is part of the global root can exchange +- In ElasticChain, this is implicitly handled by the Gateway. Any chain that is part of the message root can exchange messages with any other chain, effectively forming an undirected graph. #### Timestamps and Expiration diff --git a/docs/src/specs/interop/overview.md b/docs/src/specs/interop/overview.md index 8ca28723e03a..4b6b7417083d 100644 --- a/docs/src/specs/interop/overview.md +++ b/docs/src/specs/interop/overview.md @@ -112,14 +112,14 @@ The step-by-step process and exact details will be covered in the next section. ## Technical Details -### How is Interop Different from a Bridge +### How does native bridging differ from a third party bridging Bridges generally fall into two categories: Native and Third-Party. #### 1. Native Bridges -Native bridges enable asset transfers “up and down” (from L2 to L1 and vice versa). In contrast, interop allows direct -transfers between different L2s. +Native bridges enable asset transfers “up and down” (from L2 to L1 and vice versa), but interop (which is also a form of +native bridging) allows you to move them between different L2s. Instead of doing a "round trip" (L2 → L1 → another L2), interop lets you move assets directly between two L2s, saving both time and cost. @@ -129,8 +129,8 @@ both time and cost. Third-party bridges enable transfers between two L2s, but they rely on their own liquidity. While you, as the user, receive assets on the destination chain instantly, these assets come from the bridge’s liquidity pool. -Bridge operators then rebalance using native bridging, which requires maintaining token reserves on both sides. This -adds costs for the bridge operators, often resulting in higher fees for users. +Bridge operators then rebalance using native bridging, which requires maintaining token reserves on both sides. Without +interop this adds costs for the bridge operators, often resulting in higher fees for users. The good news is that third-party bridges can use interop to improve their token transfers by utilizing the **InteropMessage** layer.