From 5cbc25d04a8b24ce935e18fbc9a9e9b937bfac12 Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Thu, 6 Feb 2025 11:16:38 -0300 Subject: [PATCH 1/8] remove `EigenConfig::default()` --- .../lib/config/src/configs/da_client/eigen.rs | 26 +---------- core/node/da_clients/src/eigen/client.rs | 31 ++++++++++--- .../da_clients/src/eigen/verifier/tests.rs | 43 +++++++++++++------ 3 files changed, 57 insertions(+), 43 deletions(-) diff --git a/core/lib/config/src/configs/da_client/eigen.rs b/core/lib/config/src/configs/da_client/eigen.rs index 3525eef22ea2..5e2155205ed0 100644 --- a/core/lib/config/src/configs/da_client/eigen.rs +++ b/core/lib/config/src/configs/da_client/eigen.rs @@ -1,13 +1,5 @@ -use std::str::FromStr; - use serde::Deserialize; -use zksync_basic_types::{secrets::PrivateKey, url::SensitiveUrl, Address, H160}; - -/// Default address of the EigenDA service manager contract deployed on Holesky. -const DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS: H160 = H160([ - 0xd4, 0xa7, 0xe1, 0xbd, 0x80, 0x15, 0x05, 0x72, 0x93, 0xf0, 0xd0, 0xa5, 0x57, 0x08, 0x8c, 0x28, - 0x69, 0x42, 0xe8, 0x4b, -]); +use zksync_basic_types::{secrets::PrivateKey, url::SensitiveUrl, Address}; /// Configuration for the EigenDA remote disperser client. #[derive(Clone, Debug, PartialEq, Deserialize)] @@ -33,22 +25,6 @@ pub struct EigenConfig { pub g2_url: String, } -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(SensitiveUrl::from_str("https://ethereum-holesky-rpc.publicnode.com").unwrap()), // Safe to unwrap, never fails - eigenda_svc_manager_address: DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS, - wait_for_finalization: false, - authenticated: false, - points_dir: None, - 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(), - } - } -} - #[derive(Clone, Debug, PartialEq)] pub struct EigenSecrets { pub private_key: PrivateKey, diff --git a/core/node/da_clients/src/eigen/client.rs b/core/node/da_clients/src/eigen/client.rs index 5dbf0ede6347..ad6c9082a279 100644 --- a/core/node/da_clients/src/eigen/client.rs +++ b/core/node/da_clients/src/eigen/client.rs @@ -95,7 +95,7 @@ mod tests { use serial_test::file_serial; use zksync_config::{configs::da_client::eigen::EigenSecrets, EigenConfig}; use zksync_da_client::{types::DispatchResponse, DataAvailabilityClient}; - use zksync_types::secrets::PrivateKey; + use zksync_types::{secrets::PrivateKey, url::SensitiveUrl, H160}; use crate::eigen::{blob_info::BlobInfo, EigenClient, GetBlobData}; @@ -144,6 +144,25 @@ mod tests { } } + const DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS: H160 = H160([ + 0xd4, 0xa7, 0xe1, 0xbd, 0x80, 0x15, 0x05, 0x72, 0x93, 0xf0, 0xd0, 0xa5, 0x57, 0x08, 0x8c, + 0x28, 0x69, 0x42, 0xe8, 0x4b, + ]); + + fn test_eigen_config() -> EigenConfig { + EigenConfig { + disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), + settlement_layer_confirmation_depth: 0, + eigenda_eth_rpc: Some(SensitiveUrl::from_str("https://ethereum-holesky-rpc.publicnode.com").unwrap()), // Safe to unwrap, never fails + eigenda_svc_manager_address: DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS, + wait_for_finalization: false, + authenticated: false, + points_dir: None, + 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(), + } + } + fn test_secrets() -> EigenSecrets { EigenSecrets { private_key: PrivateKey::from_str( @@ -157,7 +176,7 @@ mod tests { #[tokio::test] #[file_serial] async fn test_non_auth_dispersal() { - let config = EigenConfig::default(); + let config = test_eigen_config(); let secrets = test_secrets(); let client = EigenClient::new(config.clone(), secrets, Arc::new(MockGetBlobData)) .await @@ -184,7 +203,7 @@ mod tests { async fn test_auth_dispersal() { let config = EigenConfig { authenticated: true, - ..EigenConfig::default() + ..test_eigen_config() }; let secrets = test_secrets(); let client = EigenClient::new(config.clone(), secrets, Arc::new(MockGetBlobData)) @@ -213,7 +232,7 @@ mod tests { let config = EigenConfig { wait_for_finalization: true, authenticated: true, - ..EigenConfig::default() + ..test_eigen_config() }; let secrets = test_secrets(); @@ -242,7 +261,7 @@ mod tests { async fn test_settlement_layer_confirmation_depth() { let config = EigenConfig { settlement_layer_confirmation_depth: 5, - ..EigenConfig::default() + ..test_eigen_config() }; let secrets = test_secrets(); let client = EigenClient::new(config.clone(), secrets, Arc::new(MockGetBlobData)) @@ -271,7 +290,7 @@ mod tests { let config = EigenConfig { settlement_layer_confirmation_depth: 5, authenticated: true, - ..EigenConfig::default() + ..test_eigen_config() }; let secrets = test_secrets(); let client = EigenClient::new(config.clone(), secrets, Arc::new(MockGetBlobData)) diff --git a/core/node/da_clients/src/eigen/verifier/tests.rs b/core/node/da_clients/src/eigen/verifier/tests.rs index 034723fcc37b..cb6954a9ed4d 100644 --- a/core/node/da_clients/src/eigen/verifier/tests.rs +++ b/core/node/da_clients/src/eigen/verifier/tests.rs @@ -107,10 +107,29 @@ fn create_remote_query_client() -> Box> { Box::new(query_client) as Box> } +const DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS: H160 = H160([ + 0xd4, 0xa7, 0xe1, 0xbd, 0x80, 0x15, 0x05, 0x72, 0x93, 0xf0, 0xd0, 0xa5, 0x57, 0x08, 0x8c, 0x28, + 0x69, 0x42, 0xe8, 0x4b, +]); + +fn test_eigen_config() -> EigenConfig { + EigenConfig { + disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), + settlement_layer_confirmation_depth: 0, + eigenda_eth_rpc: Some(SensitiveUrl::from_str("https://ethereum-holesky-rpc.publicnode.com").unwrap()), // Safe to unwrap, never fails + eigenda_svc_manager_address: DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS, + wait_for_finalization: false, + authenticated: false, + points_dir: None, + 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(), + } +} + #[ignore = "depends on external RPC"] #[tokio::test] async fn test_verify_commitment() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let commitment = G1Commitment { @@ -132,7 +151,7 @@ async fn test_verify_commitment() { /// To test actual behaviour of the verifier, run the test above #[tokio::test] async fn test_verify_commitment_mocked() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = MockVerifierClient::new(HashMap::new()); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let commitment = G1Commitment { @@ -153,7 +172,7 @@ async fn test_verify_commitment_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_verify_merkle_proof() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -234,7 +253,7 @@ async fn test_verify_merkle_proof() { /// To test actual behaviour of the verifier, run the test above #[tokio::test] async fn test_verify_merkle_proof_mocked() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = MockVerifierClient::new(HashMap::new()); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -314,7 +333,7 @@ async fn test_verify_merkle_proof_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_hash_blob_header() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let blob_header = BlobHeader { @@ -353,7 +372,7 @@ async fn test_hash_blob_header() { /// To test actual behaviour of the verifier, run the test above #[tokio::test] async fn test_hash_blob_header_mocked() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = MockVerifierClient::new(HashMap::new()); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let blob_header = BlobHeader { @@ -391,7 +410,7 @@ async fn test_hash_blob_header_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_inclusion_proof() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let proof = hex::decode("c455c1ea0e725d7ea3e5f29e9f48be8fc2787bb0a914d5a86710ba302c166ac4f626d76f67f1055bb960a514fb8923af2078fd84085d712655b58a19612e8cd15c3e4ac1cef57acde3438dbcf63f47c9fefe1221344c4d5c1a4943dd0d1803091ca81a270909dc0e146841441c9bd0e08e69ce6168181a3e4060ffacf3627480bec6abdd8d7bb92b49d33f180c42f49e041752aaded9c403db3a17b85e48a11e9ea9a08763f7f383dab6d25236f1b77c12b4c49c5cdbcbea32554a604e3f1d2f466851cb43fe73617b3d01e665e4c019bf930f92dea7394c25ed6a1e200d051fb0c30a2193c459f1cfef00bf1ba6656510d16725a4d1dc031cb759dbc90bab427b0f60ddc6764681924dda848824605a4f08b7f526fe6bd4572458c94e83fbf2150f2eeb28d3011ec921996dc3e69efa52d5fcf3182b20b56b5857a926aa66605808079b4d52c0c0cfe06923fa92e65eeca2c3e6126108e8c1babf5ac522f4d7").unwrap(); @@ -412,7 +431,7 @@ async fn test_inclusion_proof() { /// To test actual behaviour of the verifier, run the test above #[tokio::test] async fn test_inclusion_proof_mocked() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = MockVerifierClient::new(HashMap::new()); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let proof = hex::decode("c455c1ea0e725d7ea3e5f29e9f48be8fc2787bb0a914d5a86710ba302c166ac4f626d76f67f1055bb960a514fb8923af2078fd84085d712655b58a19612e8cd15c3e4ac1cef57acde3438dbcf63f47c9fefe1221344c4d5c1a4943dd0d1803091ca81a270909dc0e146841441c9bd0e08e69ce6168181a3e4060ffacf3627480bec6abdd8d7bb92b49d33f180c42f49e041752aaded9c403db3a17b85e48a11e9ea9a08763f7f383dab6d25236f1b77c12b4c49c5cdbcbea32554a604e3f1d2f466851cb43fe73617b3d01e665e4c019bf930f92dea7394c25ed6a1e200d051fb0c30a2193c459f1cfef00bf1ba6656510d16725a4d1dc031cb759dbc90bab427b0f60ddc6764681924dda848824605a4f08b7f526fe6bd4572458c94e83fbf2150f2eeb28d3011ec921996dc3e69efa52d5fcf3182b20b56b5857a926aa66605808079b4d52c0c0cfe06923fa92e65eeca2c3e6126108e8c1babf5ac522f4d7").unwrap(); @@ -432,7 +451,7 @@ async fn test_inclusion_proof_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_verify_batch() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -528,7 +547,7 @@ async fn test_verify_batch_mocked() { ); mock_replies.insert(mock_req, mock_res); - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = MockVerifierClient::new(mock_replies); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -608,7 +627,7 @@ async fn test_verify_batch_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_verify_security_params() { - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -717,7 +736,7 @@ async fn test_verify_securityt_params_mocked() { ); mock_replies.insert(mock_req, mock_res); - let cfg = EigenConfig::default(); + let cfg = test_eigen_config(); let client = MockVerifierClient::new(mock_replies); let verifier = Verifier::new(cfg, Arc::new(client)).await.unwrap(); let cert = BlobInfo { From 5137e4e19b6b9fcec61baf85f43b467afbcd8860 Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Thu, 6 Feb 2025 11:55:06 -0300 Subject: [PATCH 2/8] remove irrelevant query conditions --- ...e807326f6e2382f485b830b304291ecd0538041ab72f71ee7dea.json} | 4 ++-- ...24073a1a24f3fd0cfc55e278c39923e3fe1d7c05cc60975c7016.json} | 4 ++-- core/lib/dal/src/data_availability_dal.rs | 4 ---- 3 files changed, 4 insertions(+), 8 deletions(-) rename core/lib/dal/.sqlx/{query-72e28c9a5d6da9abe1f9b0e3717a8a77e11eae56b5c4804a438bbc6d1724e075.json => query-01aa65f0899ae807326f6e2382f485b830b304291ecd0538041ab72f71ee7dea.json} (75%) rename core/lib/dal/.sqlx/{query-f2eeb448a856b9e57bcc2a724791fb0ee6299fddc9f89cf70c5b69c7182f0a54.json => query-d682f9a975d224073a1a24f3fd0cfc55e278c39923e3fe1d7c05cc60975c7016.json} (78%) diff --git a/core/lib/dal/.sqlx/query-72e28c9a5d6da9abe1f9b0e3717a8a77e11eae56b5c4804a438bbc6d1724e075.json b/core/lib/dal/.sqlx/query-01aa65f0899ae807326f6e2382f485b830b304291ecd0538041ab72f71ee7dea.json similarity index 75% rename from core/lib/dal/.sqlx/query-72e28c9a5d6da9abe1f9b0e3717a8a77e11eae56b5c4804a438bbc6d1724e075.json rename to core/lib/dal/.sqlx/query-01aa65f0899ae807326f6e2382f485b830b304291ecd0538041ab72f71ee7dea.json index fcb5274683cb..28a1915eef99 100644 --- a/core/lib/dal/.sqlx/query-72e28c9a5d6da9abe1f9b0e3717a8a77e11eae56b5c4804a438bbc6d1724e075.json +++ b/core/lib/dal/.sqlx/query-01aa65f0899ae807326f6e2382f485b830b304291ecd0538041ab72f71ee7dea.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n number,\n pubdata_input,\n sealed_at\n FROM\n l1_batches\n LEFT JOIN\n data_availability\n ON data_availability.l1_batch_number = l1_batches.number\n WHERE\n number != 0\n AND data_availability.blob_id = $1\n AND pubdata_input IS NOT NULL\n AND sealed_at IS NOT NULL\n ORDER BY\n number\n LIMIT\n 1\n ", + "query": "\n SELECT\n number,\n pubdata_input,\n sealed_at\n FROM\n l1_batches\n LEFT JOIN\n data_availability\n ON data_availability.l1_batch_number = l1_batches.number\n WHERE\n number != 0\n AND data_availability.blob_id = $1\n ORDER BY\n number\n LIMIT\n 1\n ", "describe": { "columns": [ { @@ -30,5 +30,5 @@ true ] }, - "hash": "72e28c9a5d6da9abe1f9b0e3717a8a77e11eae56b5c4804a438bbc6d1724e075" + "hash": "01aa65f0899ae807326f6e2382f485b830b304291ecd0538041ab72f71ee7dea" } diff --git a/core/lib/dal/.sqlx/query-f2eeb448a856b9e57bcc2a724791fb0ee6299fddc9f89cf70c5b69c7182f0a54.json b/core/lib/dal/.sqlx/query-d682f9a975d224073a1a24f3fd0cfc55e278c39923e3fe1d7c05cc60975c7016.json similarity index 78% rename from core/lib/dal/.sqlx/query-f2eeb448a856b9e57bcc2a724791fb0ee6299fddc9f89cf70c5b69c7182f0a54.json rename to core/lib/dal/.sqlx/query-d682f9a975d224073a1a24f3fd0cfc55e278c39923e3fe1d7c05cc60975c7016.json index bba0056a5ffe..c3f8c507b25c 100644 --- a/core/lib/dal/.sqlx/query-f2eeb448a856b9e57bcc2a724791fb0ee6299fddc9f89cf70c5b69c7182f0a54.json +++ b/core/lib/dal/.sqlx/query-d682f9a975d224073a1a24f3fd0cfc55e278c39923e3fe1d7c05cc60975c7016.json @@ -1,6 +1,6 @@ { "db_name": "PostgreSQL", - "query": "\n SELECT\n number,\n pubdata_input,\n sealed_at\n FROM\n l1_batches\n LEFT JOIN\n data_availability\n ON data_availability.l1_batch_number = l1_batches.number\n WHERE\n eth_commit_tx_id IS NULL\n AND number != 0\n AND data_availability.blob_id IS NULL\n AND pubdata_input IS NOT NULL\n AND sealed_at IS NOT NULL\n ORDER BY\n number\n LIMIT\n $1\n ", + "query": "\n SELECT\n number,\n pubdata_input,\n sealed_at\n FROM\n l1_batches\n LEFT JOIN\n data_availability\n ON data_availability.l1_batch_number = l1_batches.number\n WHERE\n eth_commit_tx_id IS NULL\n AND number != 0\n AND data_availability.blob_id IS NULL\n ORDER BY\n number\n LIMIT\n $1\n ", "describe": { "columns": [ { @@ -30,5 +30,5 @@ true ] }, - "hash": "f2eeb448a856b9e57bcc2a724791fb0ee6299fddc9f89cf70c5b69c7182f0a54" + "hash": "d682f9a975d224073a1a24f3fd0cfc55e278c39923e3fe1d7c05cc60975c7016" } diff --git a/core/lib/dal/src/data_availability_dal.rs b/core/lib/dal/src/data_availability_dal.rs index 3ab107edd63b..8f0d8dadcc72 100644 --- a/core/lib/dal/src/data_availability_dal.rs +++ b/core/lib/dal/src/data_availability_dal.rs @@ -195,8 +195,6 @@ impl DataAvailabilityDal<'_, '_> { eth_commit_tx_id IS NULL AND number != 0 AND data_availability.blob_id IS NULL - AND pubdata_input IS NOT NULL - AND sealed_at IS NOT NULL ORDER BY number LIMIT @@ -239,8 +237,6 @@ impl DataAvailabilityDal<'_, '_> { WHERE number != 0 AND data_availability.blob_id = $1 - AND pubdata_input IS NOT NULL - AND sealed_at IS NOT NULL ORDER BY number LIMIT From fdccf95a1c7602fba27301d4ea539915a22df0fd Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Thu, 6 Feb 2025 11:57:35 -0300 Subject: [PATCH 3/8] move comment location --- core/node/da_clients/src/eigen/sdk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/node/da_clients/src/eigen/sdk.rs b/core/node/da_clients/src/eigen/sdk.rs index c22f86de6a57..5eec69cbe9a7 100644 --- a/core/node/da_clients/src/eigen/sdk.rs +++ b/core/node/da_clients/src/eigen/sdk.rs @@ -177,9 +177,9 @@ impl RawEigenClient { .verifier .verify_inclusion_data_against_settlement_layer(&blob_info) .await; - // in case of an error, the dispatcher will retry, so the need to return None if let Err(e) = result { match e { + // in case of an error, the dispatcher will retry, so the need to return None VerificationError::EmptyHash => return Ok(None), _ => return Err(anyhow::anyhow!("Failed to verify inclusion data: {:?}", e)), } From e71bb5e3fbbadd5e5d1314bf7d004f6a9fdc5471 Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Thu, 6 Feb 2025 12:04:30 -0300 Subject: [PATCH 4/8] rename `RawEigenClient` field name --- core/node/da_clients/src/eigen/sdk.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/node/da_clients/src/eigen/sdk.rs b/core/node/da_clients/src/eigen/sdk.rs index 5eec69cbe9a7..3c0b56a4cc2a 100644 --- a/core/node/da_clients/src/eigen/sdk.rs +++ b/core/node/da_clients/src/eigen/sdk.rs @@ -34,7 +34,7 @@ pub(crate) struct RawEigenClient { private_key: SecretKey, pub config: EigenConfig, verifier: Verifier, - get_blob_data: Arc, + blob_data_provider: Arc, } pub(crate) const DATA_CHUNK_SIZE: usize = 32; @@ -70,7 +70,7 @@ impl RawEigenClient { private_key, config: cfg, verifier, - get_blob_data, + blob_data_provider: get_blob_data, }) } @@ -161,7 +161,7 @@ impl RawEigenClient { .map_err(|e| anyhow::anyhow!("Failed to convert blob info: {}", e))?; let data = self.get_blob_data(blob_info.clone()).await?; - let data_db = self.get_blob_data.get_blob_data(request_id).await?; + let data_db = self.blob_data_provider.get_blob_data(request_id).await?; if let Some(data_db) = data_db { if data_db != data { return Err(anyhow::anyhow!( From a7a7c2bab960058c962e21c6614b876cfedd48c0 Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Thu, 6 Feb 2025 12:07:05 -0300 Subject: [PATCH 5/8] add won't implement comment --- .../crates/zkstack/src/commands/chain/args/init/da_configs.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zkstack_cli/crates/zkstack/src/commands/chain/args/init/da_configs.rs b/zkstack_cli/crates/zkstack/src/commands/chain/args/init/da_configs.rs index 86ec2141f1c0..0f6eb150d3b7 100644 --- a/zkstack_cli/crates/zkstack/src/commands/chain/args/init/da_configs.rs +++ b/zkstack_cli/crates/zkstack/src/commands/chain/args/init/da_configs.rs @@ -53,7 +53,7 @@ pub enum AvailFinalityState { impl ValidiumType { pub fn read() -> Self { match PromptSelect::new(MSG_VALIDIUM_TYPE_PROMPT, ValidiumTypeInternal::iter()).ask() { - ValidiumTypeInternal::EigenDA => ValidiumType::EigenDA, + ValidiumTypeInternal::EigenDA => ValidiumType::EigenDA, // EigenDA doesn't support configuration through CLI ValidiumTypeInternal::NoDA => ValidiumType::NoDA, ValidiumTypeInternal::Avail => { let avail_client_type = PromptSelect::new( From f933e84e04c194c07ebb4fc0f1436df01c7fce0e Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Thu, 6 Feb 2025 16:49:38 -0300 Subject: [PATCH 6/8] add `PointsSource` to `EigenConfig` --- .../lib/config/src/configs/da_client/eigen.rs | 15 +++-- core/lib/env_config/src/da_client.rs | 61 +++++++++++++------ core/lib/protobuf_config/src/da_client.rs | 32 ++++++++-- .../src/proto/config/da_client.proto | 16 ++++- core/node/da_clients/src/eigen/client.rs | 12 ++-- .../node/da_clients/src/eigen/verifier/mod.rs | 14 ++--- .../da_clients/src/eigen/verifier/tests.rs | 9 +-- 7 files changed, 111 insertions(+), 48 deletions(-) diff --git a/core/lib/config/src/configs/da_client/eigen.rs b/core/lib/config/src/configs/da_client/eigen.rs index 5e2155205ed0..e256e7d08425 100644 --- a/core/lib/config/src/configs/da_client/eigen.rs +++ b/core/lib/config/src/configs/da_client/eigen.rs @@ -1,6 +1,13 @@ use serde::Deserialize; use zksync_basic_types::{secrets::PrivateKey, url::SensitiveUrl, Address}; +#[derive(Clone, Debug, PartialEq, Deserialize)] +pub enum PointsSource { + Path(String), + /// g1_url, g2_url + Link((String, String)), +} + /// Configuration for the EigenDA remote disperser client. #[derive(Clone, Debug, PartialEq, Deserialize)] pub struct EigenConfig { @@ -17,12 +24,8 @@ pub struct EigenConfig { pub wait_for_finalization: bool, /// Authenticated dispersal pub authenticated: bool, - /// Optional path to downloaded points directory - pub points_dir: Option, - /// Url to the file containing the G1 point used for KZG - pub g1_url: String, - /// Url to the file containing the G2 point used for KZG - pub g2_url: String, + /// Points source + pub points_source: PointsSource, } #[derive(Clone, Debug, PartialEq)] diff --git a/core/lib/env_config/src/da_client.rs b/core/lib/env_config/src/da_client.rs index 0a0a55c0eb92..d92e3b9a7893 100644 --- a/core/lib/env_config/src/da_client.rs +++ b/core/lib/env_config/src/da_client.rs @@ -1,17 +1,22 @@ -use std::env; +use std::{env, str::FromStr}; -use zksync_config::configs::{ - da_client::{ - avail::{ - AvailClientConfig, AvailSecrets, AVAIL_FULL_CLIENT_NAME, AVAIL_GAS_RELAY_CLIENT_NAME, +use zksync_basic_types::{url::SensitiveUrl, H160}; +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, }, - celestia::CelestiaSecrets, - eigen::EigenSecrets, - DAClientConfig, AVAIL_CLIENT_CONFIG_NAME, CELESTIA_CLIENT_CONFIG_NAME, - EIGEN_CLIENT_CONFIG_NAME, OBJECT_STORE_CLIENT_CONFIG_NAME, + secrets::DataAvailabilitySecrets, + AvailConfig, }, - secrets::DataAvailabilitySecrets, - AvailConfig, + EigenConfig, }; use crate::{envy_load, FromEnv}; @@ -34,7 +39,29 @@ impl FromEnv for DAClientConfig { }, }), CELESTIA_CLIENT_CONFIG_NAME => Self::Celestia(envy_load("da_celestia_config", "DA_")?), - EIGEN_CLIENT_CONFIG_NAME => Self::Eigen(envy_load("da_eigen_config", "DA_")?), + EIGEN_CLIENT_CONFIG_NAME => Self::Eigen(EigenConfig { + disperser_rpc: env::var("DA_DISPERSER_RPC")?, + settlement_layer_confirmation_depth: env::var( + "DA_SETTLEMENT_LAYER_CONFIRMATION_DEPTH", + )? + .parse()?, + eigenda_eth_rpc: Some(SensitiveUrl::from_str(&env::var("DA_EIGENDA_ETH_RPC")?)?), + eigenda_svc_manager_address: H160::from_str(&env::var( + "DA_EIGENDA_SVC_MANAGER_ADDRESS", + )?)?, + wait_for_finalization: env::var("DA_WAIT_FOR_FINALIZATION")?.parse()?, + authenticated: env::var("DA_AUTHENTICATED")?.parse()?, + points_source: match env::var("DA_POINTS_SOURCE")?.as_str() { + "Path" => zksync_config::configs::da_client::eigen::PointsSource::Path( + env::var("DA_POINTS_PATH")?, + ), + "Link" => zksync_config::configs::da_client::eigen::PointsSource::Link(( + env::var("DA_POINTS_LINK_G1")?, + env::var("DA_POINTS_LINK_G2")?, + )), + _ => anyhow::bail!("Unknown Eigen points type"), + }, + }), OBJECT_STORE_CLIENT_CONFIG_NAME => { Self::ObjectStore(envy_load("da_object_store", "DA_")?) } @@ -97,6 +124,7 @@ mod tests { configs::{ da_client::{ avail::{AvailClientConfig, AvailDefaultConfig}, + eigen::PointsSource, DAClientConfig::{self, ObjectStore}, }, object_store::ObjectStoreMode::GCS, @@ -258,9 +286,8 @@ mod tests { DA_EIGENDA_SVC_MANAGER_ADDRESS="0x0000000000000000000000000000000000000123" DA_WAIT_FOR_FINALIZATION=true DA_AUTHENTICATED=false - DA_POINTS_DIR="resources/" - DA_G1_URL="resources1" - DA_G2_URL="resources2" + DA_POINTS_SOURCE="Path" + DA_POINTS_PATH="resources" "#; lock.set_env(config); @@ -276,9 +303,7 @@ mod tests { .unwrap(), wait_for_finalization: true, authenticated: false, - points_dir: Some("resources/".to_string()), - g1_url: "resources1".to_string(), - g2_url: "resources2".to_string(), + points_source: PointsSource::Path("resources".to_string()), }) ); } diff --git a/core/lib/protobuf_config/src/da_client.rs b/core/lib/protobuf_config/src/da_client.rs index ca206e8c5443..8c5c6c3a6a7f 100644 --- a/core/lib/protobuf_config/src/da_client.rs +++ b/core/lib/protobuf_config/src/da_client.rs @@ -78,9 +78,20 @@ impl ProtoRepr for proto::DataAvailabilityClient { wait_for_finalization: *required(&conf.wait_for_finalization) .context("wait_for_finalization")?, authenticated: *required(&conf.authenticated).context("authenticated")?, - points_dir: conf.points_dir.clone(), - g1_url: required(&conf.g1_url).context("g1_url")?.clone(), - g2_url: required(&conf.g2_url).context("g2_url")?.clone(), + points_source: match conf.points_source.clone() { + Some(proto::eigen_config::PointsSource::Path(path)) => { + zksync_config::configs::da_client::eigen::PointsSource::Path(path) + } + Some(proto::eigen_config::PointsSource::Link(link)) => { + let g1_url = required(&link.g1_url).context("g1_url")?; + let g2_url = required(&link.g2_url).context("g2_url")?; + zksync_config::configs::da_client::eigen::PointsSource::Link(( + g1_url.to_owned(), + g2_url.to_owned(), + )) + } + None => return Err(anyhow::anyhow!("Invalid Eigen DA configuration")), + }, }), proto::data_availability_client::Config::ObjectStore(conf) => { ObjectStore(object_store_proto::ObjectStore::read(conf)?) @@ -135,9 +146,18 @@ impl ProtoRepr for proto::DataAvailabilityClient { )), wait_for_finalization: Some(config.wait_for_finalization), authenticated: Some(config.authenticated), - g1_url: Some(config.g1_url.clone()), - g2_url: Some(config.g2_url.clone()), - points_dir: config.points_dir.as_ref().map(|a| a.to_string()), + points_source: Some(match &config.points_source { + zksync_config::configs::da_client::eigen::PointsSource::Path(path) => { + proto::eigen_config::PointsSource::Path(path.clone()) + } + zksync_config::configs::da_client::eigen::PointsSource::Link(( + g1_url, + g2_url, + )) => proto::eigen_config::PointsSource::Link(proto::Link { + g1_url: Some(g1_url.clone()), + g2_url: Some(g2_url.clone()), + }), + }), }), ObjectStore(config) => proto::data_availability_client::Config::ObjectStore( object_store_proto::ObjectStore::build(config), 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 4bbcc7e0b033..cb24042e05d4 100644 --- a/core/lib/protobuf_config/src/proto/config/da_client.proto +++ b/core/lib/protobuf_config/src/proto/config/da_client.proto @@ -37,6 +37,15 @@ message CelestiaConfig { optional uint64 timeout_ms = 4; } +message Path { + optional string path = 1; +} + +message Link { + optional string g1_url = 1; + optional string g2_url = 2; +} + message EigenConfig { optional string disperser_rpc = 3; optional uint32 settlement_layer_confirmation_depth = 4; @@ -44,9 +53,10 @@ message EigenConfig { optional string eigenda_svc_manager_address = 6; optional bool wait_for_finalization = 7; optional bool authenticated = 8; - optional string g1_url = 9; - optional string g2_url = 10; - optional string points_dir = 11; + oneof points_source { + string path = 9; + Link link = 10; + } reserved 1,2; reserved "rpc_node_url","inclusion_polling_interval_ms"; } diff --git a/core/node/da_clients/src/eigen/client.rs b/core/node/da_clients/src/eigen/client.rs index ad6c9082a279..7c3e346e0276 100644 --- a/core/node/da_clients/src/eigen/client.rs +++ b/core/node/da_clients/src/eigen/client.rs @@ -93,7 +93,10 @@ mod tests { use backon::{ConstantBuilder, Retryable}; use serial_test::file_serial; - use zksync_config::{configs::da_client::eigen::EigenSecrets, EigenConfig}; + use zksync_config::{ + configs::da_client::eigen::{EigenSecrets, PointsSource}, + EigenConfig, + }; use zksync_da_client::{types::DispatchResponse, DataAvailabilityClient}; use zksync_types::{secrets::PrivateKey, url::SensitiveUrl, H160}; @@ -157,9 +160,10 @@ mod tests { eigenda_svc_manager_address: DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS, wait_for_finalization: false, authenticated: false, - points_dir: None, - 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(), + points_source: PointsSource::Link(( + "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), + "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), + )) } } diff --git a/core/node/da_clients/src/eigen/verifier/mod.rs b/core/node/da_clients/src/eigen/verifier/mod.rs index 295b474bda3d..369f3316f64a 100644 --- a/core/node/da_clients/src/eigen/verifier/mod.rs +++ b/core/node/da_clients/src/eigen/verifier/mod.rs @@ -11,7 +11,7 @@ use rust_kzg_bn254::{blob::Blob, kzg::Kzg, polynomial::PolynomialFormat}; use tempfile::NamedTempFile; use tokio::task::JoinHandle; use zksync_basic_types::web3::CallRequest; -use zksync_config::EigenConfig; +use zksync_config::{configs::da_client::eigen::PointsSource, EigenConfig}; use zksync_eth_client::EthInterface; use zksync_types::{web3, Address, U256, U64}; use zksync_web3_decl::client::{DynClient, L1}; @@ -225,16 +225,16 @@ impl Verifier { } async fn get_points(cfg: &EigenConfig) -> Result<(PointFile, PointFile), VerificationError> { - match &cfg.points_dir { - Some(path) => Ok(( + match &cfg.points_source { + PointsSource::Path(path) => Ok(( PointFile::Path(PathBuf::from(format!("{}/{}", path, Self::G1POINT))), PointFile::Path(PathBuf::from(format!("{}/{}", path, Self::G2POINT))), )), - None => { - tracing::info!("Points for KZG setup not found, downloading points to a temp file"); + PointsSource::Link((g1_url, g2_url)) => { + tracing::info!("Downloading points for KZG setup to a temp file"); Ok(( - PointFile::Temp(Self::download_temp_point(&cfg.g1_url).await?), - PointFile::Temp(Self::download_temp_point(&cfg.g2_url).await?), + PointFile::Temp(Self::download_temp_point(g1_url).await?), + PointFile::Temp(Self::download_temp_point(g2_url).await?), )) } } diff --git a/core/node/da_clients/src/eigen/verifier/tests.rs b/core/node/da_clients/src/eigen/verifier/tests.rs index cb6954a9ed4d..44bf76635c31 100644 --- a/core/node/da_clients/src/eigen/verifier/tests.rs +++ b/core/node/da_clients/src/eigen/verifier/tests.rs @@ -1,7 +1,7 @@ use std::{collections::HashMap, str::FromStr, sync::Arc}; use ethabi::{ParamType, Token}; -use zksync_config::EigenConfig; +use zksync_config::{configs::da_client::eigen::PointsSource, EigenConfig}; use zksync_types::{ url::SensitiveUrl, web3::{Bytes, CallRequest}, @@ -120,9 +120,10 @@ fn test_eigen_config() -> EigenConfig { eigenda_svc_manager_address: DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS, wait_for_finalization: false, authenticated: false, - points_dir: None, - 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(), + points_source: PointsSource::Link(( + "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), + "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), + )) } } From 14ad54b1eff9a7bc56711ee32740b412770fd0ab Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Thu, 6 Feb 2025 18:14:06 -0300 Subject: [PATCH 7/8] address comments --- .../lib/config/src/configs/da_client/eigen.rs | 2 +- core/lib/env_config/src/da_client.rs | 2 +- core/lib/protobuf_config/src/da_client.rs | 12 ++++---- .../src/proto/config/da_client.proto | 8 ++--- core/node/da_clients/src/eigen/client.rs | 29 ++----------------- core/node/da_clients/src/eigen/mod.rs | 21 ++++++++++++++ .../node/da_clients/src/eigen/verifier/mod.rs | 2 +- .../da_clients/src/eigen/verifier/tests.rs | 22 +------------- 8 files changed, 36 insertions(+), 62 deletions(-) diff --git a/core/lib/config/src/configs/da_client/eigen.rs b/core/lib/config/src/configs/da_client/eigen.rs index e256e7d08425..75817e5bf96c 100644 --- a/core/lib/config/src/configs/da_client/eigen.rs +++ b/core/lib/config/src/configs/da_client/eigen.rs @@ -5,7 +5,7 @@ use zksync_basic_types::{secrets::PrivateKey, url::SensitiveUrl, Address}; pub enum PointsSource { Path(String), /// g1_url, g2_url - Link((String, String)), + Url((String, String)), } /// Configuration for the EigenDA remote disperser client. diff --git a/core/lib/env_config/src/da_client.rs b/core/lib/env_config/src/da_client.rs index d92e3b9a7893..445d07cad90f 100644 --- a/core/lib/env_config/src/da_client.rs +++ b/core/lib/env_config/src/da_client.rs @@ -55,7 +55,7 @@ impl FromEnv for DAClientConfig { "Path" => zksync_config::configs::da_client::eigen::PointsSource::Path( env::var("DA_POINTS_PATH")?, ), - "Link" => zksync_config::configs::da_client::eigen::PointsSource::Link(( + "Url" => zksync_config::configs::da_client::eigen::PointsSource::Url(( env::var("DA_POINTS_LINK_G1")?, env::var("DA_POINTS_LINK_G2")?, )), diff --git a/core/lib/protobuf_config/src/da_client.rs b/core/lib/protobuf_config/src/da_client.rs index 8c5c6c3a6a7f..59de62d99fb2 100644 --- a/core/lib/protobuf_config/src/da_client.rs +++ b/core/lib/protobuf_config/src/da_client.rs @@ -82,10 +82,10 @@ impl ProtoRepr for proto::DataAvailabilityClient { Some(proto::eigen_config::PointsSource::Path(path)) => { zksync_config::configs::da_client::eigen::PointsSource::Path(path) } - Some(proto::eigen_config::PointsSource::Link(link)) => { - let g1_url = required(&link.g1_url).context("g1_url")?; - let g2_url = required(&link.g2_url).context("g2_url")?; - zksync_config::configs::da_client::eigen::PointsSource::Link(( + Some(proto::eigen_config::PointsSource::Url(url)) => { + let g1_url = required(&url.g1_url).context("g1_url")?; + let g2_url = required(&url.g2_url).context("g2_url")?; + zksync_config::configs::da_client::eigen::PointsSource::Url(( g1_url.to_owned(), g2_url.to_owned(), )) @@ -150,10 +150,10 @@ impl ProtoRepr for proto::DataAvailabilityClient { zksync_config::configs::da_client::eigen::PointsSource::Path(path) => { proto::eigen_config::PointsSource::Path(path.clone()) } - zksync_config::configs::da_client::eigen::PointsSource::Link(( + zksync_config::configs::da_client::eigen::PointsSource::Url(( g1_url, g2_url, - )) => proto::eigen_config::PointsSource::Link(proto::Link { + )) => proto::eigen_config::PointsSource::Url(proto::Url { g1_url: Some(g1_url.clone()), g2_url: Some(g2_url.clone()), }), 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 cb24042e05d4..70880d93b55a 100644 --- a/core/lib/protobuf_config/src/proto/config/da_client.proto +++ b/core/lib/protobuf_config/src/proto/config/da_client.proto @@ -37,11 +37,7 @@ message CelestiaConfig { optional uint64 timeout_ms = 4; } -message Path { - optional string path = 1; -} - -message Link { +message Url { optional string g1_url = 1; optional string g2_url = 2; } @@ -55,7 +51,7 @@ message EigenConfig { optional bool authenticated = 8; oneof points_source { string path = 9; - Link link = 10; + Url url = 10; } reserved 1,2; reserved "rpc_node_url","inclusion_polling_interval_ms"; diff --git a/core/node/da_clients/src/eigen/client.rs b/core/node/da_clients/src/eigen/client.rs index 7c3e346e0276..44048350ac38 100644 --- a/core/node/da_clients/src/eigen/client.rs +++ b/core/node/da_clients/src/eigen/client.rs @@ -93,14 +93,11 @@ mod tests { use backon::{ConstantBuilder, Retryable}; use serial_test::file_serial; - use zksync_config::{ - configs::da_client::eigen::{EigenSecrets, PointsSource}, - EigenConfig, - }; + use zksync_config::{configs::da_client::eigen::EigenSecrets, EigenConfig}; use zksync_da_client::{types::DispatchResponse, DataAvailabilityClient}; - use zksync_types::{secrets::PrivateKey, url::SensitiveUrl, H160}; + use zksync_types::secrets::PrivateKey; - use crate::eigen::{blob_info::BlobInfo, EigenClient, GetBlobData}; + use crate::eigen::{blob_info::BlobInfo, test_eigen_config, EigenClient, GetBlobData}; impl EigenClient { async fn get_blob_data(&self, blob_id: BlobInfo) -> anyhow::Result> { @@ -147,26 +144,6 @@ mod tests { } } - const DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS: H160 = H160([ - 0xd4, 0xa7, 0xe1, 0xbd, 0x80, 0x15, 0x05, 0x72, 0x93, 0xf0, 0xd0, 0xa5, 0x57, 0x08, 0x8c, - 0x28, 0x69, 0x42, 0xe8, 0x4b, - ]); - - fn test_eigen_config() -> EigenConfig { - EigenConfig { - disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), - settlement_layer_confirmation_depth: 0, - eigenda_eth_rpc: Some(SensitiveUrl::from_str("https://ethereum-holesky-rpc.publicnode.com").unwrap()), // Safe to unwrap, never fails - eigenda_svc_manager_address: DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS, - wait_for_finalization: false, - authenticated: false, - points_source: PointsSource::Link(( - "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), - "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), - )) - } - } - fn test_secrets() -> EigenSecrets { EigenSecrets { private_key: PrivateKey::from_str( diff --git a/core/node/da_clients/src/eigen/mod.rs b/core/node/da_clients/src/eigen/mod.rs index ff1d732604b6..e9d55bf7fad5 100644 --- a/core/node/da_clients/src/eigen/mod.rs +++ b/core/node/da_clients/src/eigen/mod.rs @@ -14,3 +14,24 @@ pub(crate) mod disperser { pub(crate) mod common { include!("generated/common.rs"); } + +#[cfg(test)] +pub fn test_eigen_config() -> zksync_config::EigenConfig { + use std::str::FromStr; + + zksync_config::EigenConfig { + disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), + settlement_layer_confirmation_depth: 0, + eigenda_eth_rpc: Some(zksync_basic_types::url::SensitiveUrl::from_str("https://ethereum-holesky-rpc.publicnode.com").unwrap()), // Safe to unwrap, never fails + eigenda_svc_manager_address: zksync_basic_types::H160([ + 0xd4, 0xa7, 0xe1, 0xbd, 0x80, 0x15, 0x05, 0x72, 0x93, 0xf0, 0xd0, 0xa5, 0x57, 0x08, 0x8c, + 0x28, 0x69, 0x42, 0xe8, 0x4b, + ]), // DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS + wait_for_finalization: false, + authenticated: false, + points_source: zksync_config::configs::da_client::eigen::PointsSource::Url(( + "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), + "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), + )) + } +} diff --git a/core/node/da_clients/src/eigen/verifier/mod.rs b/core/node/da_clients/src/eigen/verifier/mod.rs index 369f3316f64a..a53d7b016db5 100644 --- a/core/node/da_clients/src/eigen/verifier/mod.rs +++ b/core/node/da_clients/src/eigen/verifier/mod.rs @@ -230,7 +230,7 @@ impl Verifier { PointFile::Path(PathBuf::from(format!("{}/{}", path, Self::G1POINT))), PointFile::Path(PathBuf::from(format!("{}/{}", path, Self::G2POINT))), )), - PointsSource::Link((g1_url, g2_url)) => { + PointsSource::Url((g1_url, g2_url)) => { tracing::info!("Downloading points for KZG setup to a temp file"); Ok(( PointFile::Temp(Self::download_temp_point(g1_url).await?), diff --git a/core/node/da_clients/src/eigen/verifier/tests.rs b/core/node/da_clients/src/eigen/verifier/tests.rs index 44bf76635c31..a9239ba2efaf 100644 --- a/core/node/da_clients/src/eigen/verifier/tests.rs +++ b/core/node/da_clients/src/eigen/verifier/tests.rs @@ -1,7 +1,6 @@ use std::{collections::HashMap, str::FromStr, sync::Arc}; use ethabi::{ParamType, Token}; -use zksync_config::{configs::da_client::eigen::PointsSource, EigenConfig}; use zksync_types::{ url::SensitiveUrl, web3::{Bytes, CallRequest}, @@ -15,6 +14,7 @@ use crate::eigen::{ BatchHeader, BatchMetadata, BlobHeader, BlobInfo, BlobQuorumParam, BlobVerificationProof, G1Commitment, }, + test_eigen_config, verifier::{decode_bytes, Verifier, VerifierClient}, }; @@ -107,26 +107,6 @@ fn create_remote_query_client() -> Box> { Box::new(query_client) as Box> } -const DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS: H160 = H160([ - 0xd4, 0xa7, 0xe1, 0xbd, 0x80, 0x15, 0x05, 0x72, 0x93, 0xf0, 0xd0, 0xa5, 0x57, 0x08, 0x8c, 0x28, - 0x69, 0x42, 0xe8, 0x4b, -]); - -fn test_eigen_config() -> EigenConfig { - EigenConfig { - disperser_rpc: "https://disperser-holesky.eigenda.xyz:443".to_string(), - settlement_layer_confirmation_depth: 0, - eigenda_eth_rpc: Some(SensitiveUrl::from_str("https://ethereum-holesky-rpc.publicnode.com").unwrap()), // Safe to unwrap, never fails - eigenda_svc_manager_address: DEFAULT_EIGENDA_SVC_MANAGER_ADDRESS, - wait_for_finalization: false, - authenticated: false, - points_source: PointsSource::Link(( - "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g1.point".to_string(), - "https://github.com/Layr-Labs/eigenda-proxy/raw/2fd70b99ef5bf137d7bbca3461cf9e1f2c899451/resources/g2.point.powerOf2".to_string(), - )) - } -} - #[ignore = "depends on external RPC"] #[tokio::test] async fn test_verify_commitment() { From ed095a9442a9fed4a4542b9ebbd14df33870c959 Mon Sep 17 00:00:00 2001 From: Juan Munoz Date: Fri, 7 Feb 2025 16:33:58 -0300 Subject: [PATCH 8/8] change test config function name --- core/node/da_clients/src/eigen/client.rs | 12 ++++----- core/node/da_clients/src/eigen/mod.rs | 2 +- .../da_clients/src/eigen/verifier/tests.rs | 26 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/core/node/da_clients/src/eigen/client.rs b/core/node/da_clients/src/eigen/client.rs index 44048350ac38..e525c8add587 100644 --- a/core/node/da_clients/src/eigen/client.rs +++ b/core/node/da_clients/src/eigen/client.rs @@ -97,7 +97,7 @@ mod tests { use zksync_da_client::{types::DispatchResponse, DataAvailabilityClient}; use zksync_types::secrets::PrivateKey; - use crate::eigen::{blob_info::BlobInfo, test_eigen_config, EigenClient, GetBlobData}; + use crate::eigen::{blob_info::BlobInfo, test_eigenda_config, EigenClient, GetBlobData}; impl EigenClient { async fn get_blob_data(&self, blob_id: BlobInfo) -> anyhow::Result> { @@ -157,7 +157,7 @@ mod tests { #[tokio::test] #[file_serial] async fn test_non_auth_dispersal() { - let config = test_eigen_config(); + let config = test_eigenda_config(); let secrets = test_secrets(); let client = EigenClient::new(config.clone(), secrets, Arc::new(MockGetBlobData)) .await @@ -184,7 +184,7 @@ mod tests { async fn test_auth_dispersal() { let config = EigenConfig { authenticated: true, - ..test_eigen_config() + ..test_eigenda_config() }; let secrets = test_secrets(); let client = EigenClient::new(config.clone(), secrets, Arc::new(MockGetBlobData)) @@ -213,7 +213,7 @@ mod tests { let config = EigenConfig { wait_for_finalization: true, authenticated: true, - ..test_eigen_config() + ..test_eigenda_config() }; let secrets = test_secrets(); @@ -242,7 +242,7 @@ mod tests { async fn test_settlement_layer_confirmation_depth() { let config = EigenConfig { settlement_layer_confirmation_depth: 5, - ..test_eigen_config() + ..test_eigenda_config() }; let secrets = test_secrets(); let client = EigenClient::new(config.clone(), secrets, Arc::new(MockGetBlobData)) @@ -271,7 +271,7 @@ mod tests { let config = EigenConfig { settlement_layer_confirmation_depth: 5, authenticated: true, - ..test_eigen_config() + ..test_eigenda_config() }; let secrets = test_secrets(); let client = EigenClient::new(config.clone(), secrets, Arc::new(MockGetBlobData)) diff --git a/core/node/da_clients/src/eigen/mod.rs b/core/node/da_clients/src/eigen/mod.rs index e9d55bf7fad5..b2fccc7d606d 100644 --- a/core/node/da_clients/src/eigen/mod.rs +++ b/core/node/da_clients/src/eigen/mod.rs @@ -16,7 +16,7 @@ pub(crate) mod common { } #[cfg(test)] -pub fn test_eigen_config() -> zksync_config::EigenConfig { +pub fn test_eigenda_config() -> zksync_config::EigenConfig { use std::str::FromStr; zksync_config::EigenConfig { diff --git a/core/node/da_clients/src/eigen/verifier/tests.rs b/core/node/da_clients/src/eigen/verifier/tests.rs index a9239ba2efaf..b171caf61fff 100644 --- a/core/node/da_clients/src/eigen/verifier/tests.rs +++ b/core/node/da_clients/src/eigen/verifier/tests.rs @@ -14,7 +14,7 @@ use crate::eigen::{ BatchHeader, BatchMetadata, BlobHeader, BlobInfo, BlobQuorumParam, BlobVerificationProof, G1Commitment, }, - test_eigen_config, + test_eigenda_config, verifier::{decode_bytes, Verifier, VerifierClient}, }; @@ -110,7 +110,7 @@ fn create_remote_query_client() -> Box> { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_verify_commitment() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let commitment = G1Commitment { @@ -132,7 +132,7 @@ async fn test_verify_commitment() { /// To test actual behaviour of the verifier, run the test above #[tokio::test] async fn test_verify_commitment_mocked() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = MockVerifierClient::new(HashMap::new()); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let commitment = G1Commitment { @@ -153,7 +153,7 @@ async fn test_verify_commitment_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_verify_merkle_proof() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -234,7 +234,7 @@ async fn test_verify_merkle_proof() { /// To test actual behaviour of the verifier, run the test above #[tokio::test] async fn test_verify_merkle_proof_mocked() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = MockVerifierClient::new(HashMap::new()); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -314,7 +314,7 @@ async fn test_verify_merkle_proof_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_hash_blob_header() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let blob_header = BlobHeader { @@ -353,7 +353,7 @@ async fn test_hash_blob_header() { /// To test actual behaviour of the verifier, run the test above #[tokio::test] async fn test_hash_blob_header_mocked() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = MockVerifierClient::new(HashMap::new()); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let blob_header = BlobHeader { @@ -391,7 +391,7 @@ async fn test_hash_blob_header_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_inclusion_proof() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let proof = hex::decode("c455c1ea0e725d7ea3e5f29e9f48be8fc2787bb0a914d5a86710ba302c166ac4f626d76f67f1055bb960a514fb8923af2078fd84085d712655b58a19612e8cd15c3e4ac1cef57acde3438dbcf63f47c9fefe1221344c4d5c1a4943dd0d1803091ca81a270909dc0e146841441c9bd0e08e69ce6168181a3e4060ffacf3627480bec6abdd8d7bb92b49d33f180c42f49e041752aaded9c403db3a17b85e48a11e9ea9a08763f7f383dab6d25236f1b77c12b4c49c5cdbcbea32554a604e3f1d2f466851cb43fe73617b3d01e665e4c019bf930f92dea7394c25ed6a1e200d051fb0c30a2193c459f1cfef00bf1ba6656510d16725a4d1dc031cb759dbc90bab427b0f60ddc6764681924dda848824605a4f08b7f526fe6bd4572458c94e83fbf2150f2eeb28d3011ec921996dc3e69efa52d5fcf3182b20b56b5857a926aa66605808079b4d52c0c0cfe06923fa92e65eeca2c3e6126108e8c1babf5ac522f4d7").unwrap(); @@ -412,7 +412,7 @@ async fn test_inclusion_proof() { /// To test actual behaviour of the verifier, run the test above #[tokio::test] async fn test_inclusion_proof_mocked() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = MockVerifierClient::new(HashMap::new()); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let proof = hex::decode("c455c1ea0e725d7ea3e5f29e9f48be8fc2787bb0a914d5a86710ba302c166ac4f626d76f67f1055bb960a514fb8923af2078fd84085d712655b58a19612e8cd15c3e4ac1cef57acde3438dbcf63f47c9fefe1221344c4d5c1a4943dd0d1803091ca81a270909dc0e146841441c9bd0e08e69ce6168181a3e4060ffacf3627480bec6abdd8d7bb92b49d33f180c42f49e041752aaded9c403db3a17b85e48a11e9ea9a08763f7f383dab6d25236f1b77c12b4c49c5cdbcbea32554a604e3f1d2f466851cb43fe73617b3d01e665e4c019bf930f92dea7394c25ed6a1e200d051fb0c30a2193c459f1cfef00bf1ba6656510d16725a4d1dc031cb759dbc90bab427b0f60ddc6764681924dda848824605a4f08b7f526fe6bd4572458c94e83fbf2150f2eeb28d3011ec921996dc3e69efa52d5fcf3182b20b56b5857a926aa66605808079b4d52c0c0cfe06923fa92e65eeca2c3e6126108e8c1babf5ac522f4d7").unwrap(); @@ -432,7 +432,7 @@ async fn test_inclusion_proof_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_verify_batch() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -528,7 +528,7 @@ async fn test_verify_batch_mocked() { ); mock_replies.insert(mock_req, mock_res); - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = MockVerifierClient::new(mock_replies); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -608,7 +608,7 @@ async fn test_verify_batch_mocked() { #[ignore = "depends on external RPC"] #[tokio::test] async fn test_verify_security_params() { - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let query_client = create_remote_query_client(); let verifier = Verifier::new(cfg, Arc::new(query_client)).await.unwrap(); let cert = BlobInfo { @@ -717,7 +717,7 @@ async fn test_verify_securityt_params_mocked() { ); mock_replies.insert(mock_req, mock_res); - let cfg = test_eigen_config(); + let cfg = test_eigenda_config(); let client = MockVerifierClient::new(mock_replies); let verifier = Verifier::new(cfg, Arc::new(client)).await.unwrap(); let cert = BlobInfo {