diff --git a/core/bin/external_node/src/config/mod.rs b/core/bin/external_node/src/config/mod.rs index 9e42154674b6..b7ccb163124f 100644 --- a/core/bin/external_node/src/config/mod.rs +++ b/core/bin/external_node/src/config/mod.rs @@ -113,8 +113,8 @@ pub(crate) struct RemoteENConfig { pub l1_bridgehub_proxy_addr: Option
, #[serde(alias = "state_transition_proxy_addr")] pub l1_state_transition_proxy_addr: Option
, - #[serde(alias = "transparent_proxy_admin_addr")] - pub l1_transparent_proxy_admin_addr: Option
, + // #[serde(alias = "transparent_proxy_admin_addr")] + // pub l1_transparent_proxy_admin_addr: Option
, /// Should not be accessed directly. Use [`ExternalNodeConfig::l1_diamond_proxy_address`] instead. #[serde(alias = "diamond_proxy_addr")] l1_diamond_proxy_addr: Address, @@ -139,6 +139,10 @@ pub(crate) struct RemoteENConfig { pub base_token_addr: Option
, pub l1_batch_commit_data_generator_mode: L1BatchCommitmentMode, pub dummy_verifier: bool, + pub sl_diamond_proxy_addr: Option
, + pub sl_bridgehub_proxy_addr: Option
, + pub sl_server_notifier_addr: Option
, + pub sl_state_transition_proxy_addr: Option
, } impl RemoteENConfig { @@ -152,16 +156,26 @@ impl RemoteENConfig { .rpc_context("get_testnet_paymaster") .await?; let genesis = client.genesis_config().rpc_context("genesis").await.ok(); - let ecosystem_contracts = client + let sl_ecosystem_contracts = client .get_ecosystem_contracts() .rpc_context("ecosystem_contracts") .await .ok(); - let l1_diamond_proxy_addr = client - .get_main_contract() + let sl_diamond_proxy_addr = client + .get_main_sl_contract() .rpc_context("get_main_contract") .await?; + let l1_ecosystem_contracts = client + .get_l1_ecosystem_contracts() + .rpc_context("l1_ecosystem_contracts") + .await + .ok(); + let l1_diamond_proxy_addr = client + .get_main_l1_contract() + .rpc_context("get_main_l1_contract") + .await?; + let timestamp_asserter_address = handle_rpc_response_with_fallback( client.get_timestamp_asserter(), None, @@ -193,20 +207,22 @@ impl RemoteENConfig { } Ok(Self { - l1_bridgehub_proxy_addr: ecosystem_contracts.as_ref().map(|a| a.bridgehub_proxy_addr), - l1_state_transition_proxy_addr: ecosystem_contracts + l1_bridgehub_proxy_addr: l1_ecosystem_contracts .as_ref() - .and_then(|a| a.state_transition_proxy_addr), - l1_transparent_proxy_admin_addr: ecosystem_contracts + .map(|a| a.bridgehub_proxy_addr), + l1_state_transition_proxy_addr: l1_ecosystem_contracts .as_ref() - .and_then(|a| a.transparent_proxy_admin_addr), - l1_bytecodes_supplier_addr: ecosystem_contracts + .and_then(|a| a.state_transition_proxy_addr), + // l1_transparent_proxy_admin_addr: l1_ecosystem_contracts + // .as_ref() + // .and_then(|a| a.transparent_proxy_admin_addr), + l1_bytecodes_supplier_addr: l1_ecosystem_contracts .as_ref() .and_then(|a| a.l1_bytecodes_supplier_addr), - l1_wrapped_base_token_store: ecosystem_contracts + l1_wrapped_base_token_store: l1_ecosystem_contracts .as_ref() .and_then(|a| a.l1_wrapped_base_token_store), - l1_server_notifier_addr: ecosystem_contracts + l1_server_notifier_addr: l1_ecosystem_contracts .as_ref() .and_then(|a| a.server_notifier_addr), l1_diamond_proxy_addr, @@ -227,6 +243,16 @@ impl RemoteENConfig { .as_ref() .map(|a| a.dummy_verifier) .unwrap_or_default(), + sl_diamond_proxy_addr: Some(sl_diamond_proxy_addr), + sl_bridgehub_proxy_addr: sl_ecosystem_contracts + .as_ref() + .map(|a| a.bridgehub_proxy_addr), + sl_server_notifier_addr: sl_ecosystem_contracts + .as_ref() + .and_then(|a| a.server_notifier_addr), + sl_state_transition_proxy_addr: sl_ecosystem_contracts + .as_ref() + .and_then(|a| a.state_transition_proxy_addr), l2_timestamp_asserter_addr: timestamp_asserter_address, }) } @@ -251,6 +277,10 @@ impl RemoteENConfig { l1_batch_commit_data_generator_mode: L1BatchCommitmentMode::Rollup, l1_wrapped_base_token_store: None, dummy_verifier: true, + sl_diamond_proxy_addr: Some(Address::repeat_byte(8)), + sl_bridgehub_proxy_addr: Some(Address::repeat_byte(9)), + sl_server_notifier_addr: Some(Address::repeat_byte(10)), + sl_state_transition_proxy_addr: Some(Address::repeat_byte(11)), l2_timestamp_asserter_addr: None, l1_server_notifier_addr: None, } @@ -1505,11 +1535,25 @@ impl From<&ExternalNodeConfig> for InternalApiConfigBuilder { l2_weth_bridge: config.remote.l2_weth_bridge_addr, }), l1_bytecodes_supplier_addr: config.remote.l1_bytecodes_supplier_addr, - l1_wrapped_base_token_store: config.remote.l1_wrapped_base_token_store, - l1_bridgehub_proxy_addr: config.remote.l1_bridgehub_proxy_addr, - l1_state_transition_proxy_addr: config.remote.l1_state_transition_proxy_addr, - l1_transparent_proxy_admin_addr: config.remote.l1_transparent_proxy_admin_addr, l1_diamond_proxy_addr: Some(config.l1_diamond_proxy_address()), + sl_diamond_proxy_addr: config.remote.sl_diamond_proxy_addr, + l1_ecosystem_contracts: Some(EcosystemCommonContracts { + bridgehub_proxy_addr: config.remote.l1_bridgehub_proxy_addr, + state_transition_proxy_addr: config.remote.l1_state_transition_proxy_addr, + server_notifier_addr: config.remote.l1_server_notifier_addr, + multicall3: None, + validator_timelock_addr: None, + no_da_validium_l1_validator_addr: None, + }), + sl_ecosystem_contracts: Some(EcosystemCommonContracts { + bridgehub_proxy_addr: config.remote.sl_bridgehub_proxy_addr, + state_transition_proxy_addr: config.remote.sl_state_transition_proxy_addr, + server_notifier_addr: config.remote.sl_server_notifier_addr, + multicall3: None, + validator_timelock_addr: None, + no_da_validium_l1_validator_addr: None, + }), + l2_testnet_paymaster_addr: config.remote.l2_testnet_paymaster_addr, req_entities_limit: Some(config.optional.req_entities_limit), fee_history_limit: Some(config.optional.fee_history_limit), @@ -1519,6 +1563,7 @@ impl From<&ExternalNodeConfig> for InternalApiConfigBuilder { l1_batch_commit_data_generator_mode: config.remote.l1_batch_commit_data_generator_mode, timestamp_asserter_address: config.remote.l2_timestamp_asserter_addr, l1_server_notifier_addr: config.remote.l1_server_notifier_addr, + l1_wrapped_base_token_store: config.remote.l1_wrapped_base_token_store, } } } @@ -1553,42 +1598,63 @@ impl From<&ExternalNodeConfig> for TxSenderConfig { } } -impl From<&ExternalNodeConfig> for L1SpecificContracts { - fn from(config: &ExternalNodeConfig) -> Self { +impl ExternalNodeConfig { + pub fn l1_specific_contracts(&self) -> L1SpecificContracts { L1SpecificContracts { - bytecodes_supplier_addr: config.remote.l1_bytecodes_supplier_addr, - wrapped_base_token_store: config.remote.l1_wrapped_base_token_store, - bridge_hub: config.remote.l1_bridgehub_proxy_addr, - shared_bridge: config.remote.l1_shared_bridge_proxy_addr, - erc_20_bridge: config.remote.l1_erc20_bridge_proxy_addr, - base_token_address: config.remote.base_token_addr, - l1_diamond_proxy: config.l1_diamond_proxy_address(), + bytecodes_supplier_addr: self.remote.l1_bytecodes_supplier_addr, + wrapped_base_token_store: self.remote.l1_wrapped_base_token_store, + bridge_hub: self.remote.l1_bridgehub_proxy_addr, + shared_bridge: self.remote.l1_shared_bridge_proxy_addr, + erc_20_bridge: self.remote.l1_erc20_bridge_proxy_addr, + base_token_address: self.remote.base_token_addr, + l1_diamond_proxy: self.l1_diamond_proxy_address(), } } -} - -impl From<&ExternalNodeConfig> for ChainSpecificContracts { - fn from(config: &ExternalNodeConfig) -> Self { + pub fn l1_chain_contracts(&self) -> ChainSpecificContracts { ChainSpecificContracts { ecosystem_contracts: EcosystemCommonContracts { - bridgehub_proxy_addr: config.remote.l1_bridgehub_proxy_addr, - state_transition_proxy_addr: config.remote.l1_state_transition_proxy_addr, - server_notifier_addr: config.remote.l1_server_notifier_addr, + bridgehub_proxy_addr: self.remote.l1_bridgehub_proxy_addr, + state_transition_proxy_addr: self.remote.l1_state_transition_proxy_addr, + server_notifier_addr: self.remote.l1_server_notifier_addr, + multicall3: None, + validator_timelock_addr: None, + no_da_validium_l1_validator_addr: None, + }, + chain_contracts_config: ChainContracts { + diamond_proxy_addr: self.remote.l1_diamond_proxy_addr, + chain_admin: None, + }, + l2_contracts: L2Contracts { + erc20_default_bridge: self.remote.l2_erc20_bridge_addr, + shared_bridge_addr: self.remote.l2_shared_bridge_addr, + legacy_shared_bridge_addr: self.remote.l2_legacy_shared_bridge_addr, + timestamp_asserter_addr: self.remote.l2_timestamp_asserter_addr, + da_validator_addr: None, + testnet_paymaster_addr: self.remote.l2_testnet_paymaster_addr, + }, + } + } + pub fn sl_chain_contracts(&self) -> ChainSpecificContracts { + ChainSpecificContracts { + ecosystem_contracts: EcosystemCommonContracts { + bridgehub_proxy_addr: self.remote.sl_bridgehub_proxy_addr, + state_transition_proxy_addr: self.remote.sl_state_transition_proxy_addr, + server_notifier_addr: self.remote.sl_server_notifier_addr, multicall3: None, validator_timelock_addr: None, no_da_validium_l1_validator_addr: None, }, chain_contracts_config: ChainContracts { - diamond_proxy_addr: config.remote.l1_diamond_proxy_addr, + diamond_proxy_addr: self.remote.sl_diamond_proxy_addr.unwrap(), chain_admin: None, }, l2_contracts: L2Contracts { - erc20_default_bridge: config.remote.l2_erc20_bridge_addr, - shared_bridge_addr: config.remote.l2_shared_bridge_addr, - legacy_shared_bridge_addr: config.remote.l2_legacy_shared_bridge_addr, - timestamp_asserter_addr: config.remote.l2_timestamp_asserter_addr, + erc20_default_bridge: self.remote.l2_erc20_bridge_addr, + shared_bridge_addr: self.remote.l2_shared_bridge_addr, + legacy_shared_bridge_addr: self.remote.l2_legacy_shared_bridge_addr, + timestamp_asserter_addr: self.remote.l2_timestamp_asserter_addr, da_validator_addr: None, - testnet_paymaster_addr: config.remote.l2_testnet_paymaster_addr, + testnet_paymaster_addr: self.remote.l2_testnet_paymaster_addr, }, } } diff --git a/core/bin/external_node/src/node_builder.rs b/core/bin/external_node/src/node_builder.rs index 661603dae60f..f11e7b349bb0 100644 --- a/core/bin/external_node/src/node_builder.rs +++ b/core/bin/external_node/src/node_builder.rs @@ -153,8 +153,9 @@ impl ExternalNodeBuilder { fn add_settlement_layer_data(mut self) -> anyhow::Result { self.node.add_layer(SettlementLayerDataEn::new( - (&self.config).into(), - (&self.config).into(), + self.config.l1_specific_contracts(), + self.config.sl_chain_contracts(), + self.config.l1_chain_contracts(), )); Ok(self) } diff --git a/core/lib/web3_decl/src/namespaces/en.rs b/core/lib/web3_decl/src/namespaces/en.rs index 0f1fd9d34b83..1c3ab1ac6697 100644 --- a/core/lib/web3_decl/src/namespaces/en.rs +++ b/core/lib/web3_decl/src/namespaces/en.rs @@ -57,4 +57,7 @@ pub trait EnNamespace { #[method(name = "getEcosystemContracts")] async fn get_ecosystem_contracts(&self) -> RpcResult; + + #[method(name = "getL1EcosystemContracts")] + async fn get_l1_ecosystem_contracts(&self) -> RpcResult; } diff --git a/core/lib/web3_decl/src/namespaces/zks.rs b/core/lib/web3_decl/src/namespaces/zks.rs index 07a7cc4ff1c2..8afe51a60387 100644 --- a/core/lib/web3_decl/src/namespaces/zks.rs +++ b/core/lib/web3_decl/src/namespaces/zks.rs @@ -46,7 +46,10 @@ pub trait ZksNamespace { async fn get_bridgehub_contract(&self) -> RpcResult>; #[method(name = "getMainContract")] - async fn get_main_contract(&self) -> RpcResult
; + async fn get_main_l1_contract(&self) -> RpcResult
; + + #[method(name = "getMainSlContract")] + async fn get_main_sl_contract(&self) -> RpcResult
; #[method(name = "getTestnetPaymaster")] async fn get_testnet_paymaster(&self) -> RpcResult>; diff --git a/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/en.rs b/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/en.rs index 9f5e54a5f4f7..8bf087c6437b 100644 --- a/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/en.rs +++ b/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/en.rs @@ -69,4 +69,10 @@ impl EnNamespaceServer for EnNamespace { .await .map_err(|err| self.current_method().map_err(err)) } + + async fn get_l1_ecosystem_contracts(&self) -> RpcResult { + self.get_l1_ecosystem_contracts_impl() + .await + .map_err(|err| self.current_method().map_err(err)) + } } diff --git a/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/zks.rs b/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/zks.rs index 3b5b920ca2f8..4ee6bae56e0c 100644 --- a/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/zks.rs +++ b/core/node/api_server/src/web3/backend_jsonrpsee/namespaces/zks.rs @@ -44,8 +44,8 @@ impl ZksNamespaceServer for ZksNamespace { Ok(self.get_bridgehub_contract_impl()) } - async fn get_main_contract(&self) -> RpcResult
{ - Ok(self.get_main_contract_impl()) + async fn get_main_l1_contract(&self) -> RpcResult
{ + Ok(self.get_main_l1_contract_impl()) } async fn get_testnet_paymaster(&self) -> RpcResult> { @@ -203,4 +203,8 @@ impl ZksNamespaceServer for ZksNamespace { .await .map_err(|err| self.current_method().map_err(err)) } + + async fn get_main_sl_contract(&self) -> RpcResult
{ + Ok(self.get_main_sl_contract_impl()) + } } diff --git a/core/node/api_server/src/web3/namespaces/en.rs b/core/node/api_server/src/web3/namespaces/en.rs index 2698aca2ff00..0831a1c5acbf 100644 --- a/core/node/api_server/src/web3/namespaces/en.rs +++ b/core/node/api_server/src/web3/namespaces/en.rs @@ -148,19 +148,52 @@ impl EnNamespace { #[tracing::instrument(skip(self))] pub async fn get_ecosystem_contracts_impl(&self) -> Result { - Ok(self - .state - .api_config - .l1_bridgehub_proxy_addr - .map(|bridgehub_proxy_addr| EcosystemContracts { - bridgehub_proxy_addr, - state_transition_proxy_addr: self.state.api_config.l1_state_transition_proxy_addr, - transparent_proxy_admin_addr: self.state.api_config.l1_transparent_proxy_admin_addr, - l1_bytecodes_supplier_addr: self.state.api_config.l1_bytecodes_supplier_addr, - l1_wrapped_base_token_store: self.state.api_config.l1_wrapped_base_token_store, - server_notifier_addr: self.state.api_config.l1_server_notifier_addr, - }) - .context("Shared bridge doesn't supported")?) + Ok(EcosystemContracts { + bridgehub_proxy_addr: self + .state + .api_config + .sl_ecosystem_contracts + .bridgehub_proxy_addr + .unwrap(), + state_transition_proxy_addr: self + .state + .api_config + .sl_ecosystem_contracts + .state_transition_proxy_addr, + transparent_proxy_admin_addr: None, + l1_bytecodes_supplier_addr: self.state.api_config.l1_bytecodes_supplier_addr, + l1_wrapped_base_token_store: self.state.api_config.l1_wrapped_base_token_store, + server_notifier_addr: self + .state + .api_config + .sl_ecosystem_contracts + .server_notifier_addr, + }) + } + + #[tracing::instrument(skip(self))] + pub async fn get_l1_ecosystem_contracts_impl(&self) -> Result { + Ok(EcosystemContracts { + bridgehub_proxy_addr: self + .state + .api_config + .l1_ecosystem_contracts + .bridgehub_proxy_addr + .unwrap(), + state_transition_proxy_addr: self + .state + .api_config + .l1_ecosystem_contracts + .state_transition_proxy_addr, + transparent_proxy_admin_addr: None, + l1_bytecodes_supplier_addr: self.state.api_config.l1_bytecodes_supplier_addr, + l1_wrapped_base_token_store: self.state.api_config.l1_wrapped_base_token_store, + server_notifier_addr: self + .state + .api_config + .l1_ecosystem_contracts + .server_notifier_addr, + }) } #[tracing::instrument(skip(self))] diff --git a/core/node/api_server/src/web3/namespaces/zks.rs b/core/node/api_server/src/web3/namespaces/zks.rs index c7e742fc24c7..fa7fcd5d5443 100644 --- a/core/node/api_server/src/web3/namespaces/zks.rs +++ b/core/node/api_server/src/web3/namespaces/zks.rs @@ -141,10 +141,17 @@ impl ZksNamespace { } pub fn get_bridgehub_contract_impl(&self) -> Option
{ - self.state.api_config.l1_bridgehub_proxy_addr + self.state + .api_config + .l1_ecosystem_contracts + .bridgehub_proxy_addr + } + + pub fn get_main_sl_contract_impl(&self) -> Address { + self.state.api_config.sl_diamond_proxy_addr } - pub fn get_main_contract_impl(&self) -> Address { + pub fn get_main_l1_contract_impl(&self) -> Address { self.state.api_config.l1_diamond_proxy_addr } diff --git a/core/node/api_server/src/web3/state.rs b/core/node/api_server/src/web3/state.rs index efaf7fec0d91..4638ac860ecc 100644 --- a/core/node/api_server/src/web3/state.rs +++ b/core/node/api_server/src/web3/state.rs @@ -15,7 +15,10 @@ use vise::GaugeGuard; use zksync_config::{ configs::{ api::Web3JsonRpcConfig, - contracts::{ecosystem::L1SpecificContracts, ChainSpecificContracts}, + contracts::{ + ecosystem::{EcosystemCommonContracts, L1SpecificContracts}, + ChainSpecificContracts, + }, }, GenesisConfig, }; @@ -114,12 +117,8 @@ pub struct InternalApiConfigBuilder { pub estimate_gas_acceptable_overestimation: Option, pub estimate_gas_optimize_search: Option, pub bridge_addresses: Option, - pub l1_bytecodes_supplier_addr: Option
, - pub l1_wrapped_base_token_store: Option
, - pub l1_bridgehub_proxy_addr: Option
, - pub l1_state_transition_proxy_addr: Option
, - pub l1_transparent_proxy_admin_addr: Option
, pub l1_diamond_proxy_addr: Option
, + pub sl_diamond_proxy_addr: Option
, pub l2_testnet_paymaster_addr: Option
, pub base_token_address: Option
, pub timestamp_asserter_address: Option
, @@ -127,6 +126,10 @@ pub struct InternalApiConfigBuilder { pub req_entities_limit: Option, pub fee_history_limit: Option, pub filters_disabled: Option, + pub l1_ecosystem_contracts: Option, + pub sl_ecosystem_contracts: Option, + pub l1_bytecodes_supplier_addr: Option
, + pub l1_wrapped_base_token_store: Option
, } impl InternalApiConfigBuilder { @@ -141,19 +144,19 @@ impl InternalApiConfigBuilder { estimate_gas_acceptable_overestimation: None, estimate_gas_optimize_search: None, bridge_addresses: None, - l1_bytecodes_supplier_addr: None, - l1_wrapped_base_token_store: None, - l1_bridgehub_proxy_addr: None, - l1_state_transition_proxy_addr: None, - l1_transparent_proxy_admin_addr: None, l1_diamond_proxy_addr: None, + sl_diamond_proxy_addr: None, l2_testnet_paymaster_addr: None, req_entities_limit: None, fee_history_limit: None, base_token_address: None, filters_disabled: None, + l1_ecosystem_contracts: None, timestamp_asserter_address: None, l1_server_notifier_addr: None, + sl_ecosystem_contracts: None, + l1_bytecodes_supplier_addr: None, + l1_wrapped_base_token_store: None, } } @@ -171,32 +174,37 @@ impl InternalApiConfigBuilder { pub fn with_contracts( self, - contracts_config: ChainSpecificContracts, + l1_contracts_config: ChainSpecificContracts, + sl_contracts_config: ChainSpecificContracts, l1_ecosystem_contracts: L1SpecificContracts, ) -> Self { InternalApiConfigBuilder { bridge_addresses: Some(BridgeAddresses { l1_erc20_default_bridge: l1_ecosystem_contracts.erc_20_bridge, - l2_erc20_default_bridge: contracts_config.l2_contracts.erc20_default_bridge, + l2_erc20_default_bridge: sl_contracts_config.l2_contracts.erc20_default_bridge, l1_shared_default_bridge: l1_ecosystem_contracts.shared_bridge, - l2_shared_default_bridge: contracts_config.l2_contracts.shared_bridge_addr, + l2_shared_default_bridge: sl_contracts_config.l2_contracts.shared_bridge_addr, // WETH bridge is not available l1_weth_bridge: None, l2_weth_bridge: None, - l2_legacy_shared_bridge: contracts_config.l2_contracts.legacy_shared_bridge_addr, + l2_legacy_shared_bridge: sl_contracts_config.l2_contracts.legacy_shared_bridge_addr, }), - l1_bytecodes_supplier_addr: l1_ecosystem_contracts.bytecodes_supplier_addr, - l1_wrapped_base_token_store: l1_ecosystem_contracts.wrapped_base_token_store, - l1_bridgehub_proxy_addr: l1_ecosystem_contracts.bridge_hub, - l1_state_transition_proxy_addr: contracts_config - .ecosystem_contracts - .state_transition_proxy_addr, - l1_transparent_proxy_admin_addr: contracts_config.chain_contracts_config.chain_admin, - l1_diamond_proxy_addr: Some(contracts_config.chain_contracts_config.diamond_proxy_addr), - l2_testnet_paymaster_addr: contracts_config.l2_contracts.testnet_paymaster_addr, + l1_diamond_proxy_addr: Some( + l1_contracts_config + .chain_contracts_config + .diamond_proxy_addr, + ), + sl_diamond_proxy_addr: Some( + sl_contracts_config + .chain_contracts_config + .diamond_proxy_addr, + ), + l2_testnet_paymaster_addr: sl_contracts_config.l2_contracts.testnet_paymaster_addr, base_token_address: l1_ecosystem_contracts.base_token_address, - timestamp_asserter_address: contracts_config.l2_contracts.timestamp_asserter_addr, - l1_server_notifier_addr: contracts_config.ecosystem_contracts.server_notifier_addr, + timestamp_asserter_address: sl_contracts_config.l2_contracts.timestamp_asserter_addr, + sl_ecosystem_contracts: Some(sl_contracts_config.ecosystem_contracts.clone()), + l1_ecosystem_contracts: Some(l1_contracts_config.ecosystem_contracts.clone()), + l1_wrapped_base_token_store: l1_ecosystem_contracts.wrapped_base_token_store, ..self } } @@ -212,11 +220,9 @@ impl InternalApiConfigBuilder { .unwrap(), estimate_gas_optimize_search: self.estimate_gas_optimize_search.unwrap(), bridge_addresses: self.bridge_addresses.unwrap(), + l1_ecosystem_contracts: self.l1_ecosystem_contracts.unwrap(), + sl_ecosystem_contracts: self.sl_ecosystem_contracts.unwrap(), l1_bytecodes_supplier_addr: self.l1_bytecodes_supplier_addr, - l1_wrapped_base_token_store: self.l1_wrapped_base_token_store, - l1_bridgehub_proxy_addr: self.l1_bridgehub_proxy_addr, - l1_state_transition_proxy_addr: self.l1_state_transition_proxy_addr, - l1_transparent_proxy_admin_addr: self.l1_transparent_proxy_admin_addr, l2_testnet_paymaster_addr: self.l2_testnet_paymaster_addr, base_token_address: self.base_token_address, l1_diamond_proxy_addr: self.l1_diamond_proxy_addr.unwrap(), @@ -226,7 +232,8 @@ impl InternalApiConfigBuilder { dummy_verifier: self.dummy_verifier, l1_batch_commit_data_generator_mode: self.l1_batch_commit_data_generator_mode, timestamp_asserter_address: self.timestamp_asserter_address, - l1_server_notifier_addr: self.l1_server_notifier_addr, + sl_diamond_proxy_addr: self.sl_diamond_proxy_addr.unwrap(), + l1_wrapped_base_token_store: self.l1_wrapped_base_token_store, } } } @@ -245,11 +252,11 @@ pub struct InternalApiConfig { pub estimate_gas_acceptable_overestimation: u32, pub estimate_gas_optimize_search: bool, pub bridge_addresses: api::BridgeAddresses, + pub l1_ecosystem_contracts: EcosystemCommonContracts, + pub sl_ecosystem_contracts: EcosystemCommonContracts, pub l1_bytecodes_supplier_addr: Option
, pub l1_wrapped_base_token_store: Option
, - pub l1_bridgehub_proxy_addr: Option
, - pub l1_state_transition_proxy_addr: Option
, - pub l1_transparent_proxy_admin_addr: Option
, + pub sl_diamond_proxy_addr: Address, pub l1_diamond_proxy_addr: Address, pub l2_testnet_paymaster_addr: Option
, pub req_entities_limit: usize, @@ -259,13 +266,13 @@ pub struct InternalApiConfig { pub dummy_verifier: bool, pub l1_batch_commit_data_generator_mode: L1BatchCommitmentMode, pub timestamp_asserter_address: Option
, - pub l1_server_notifier_addr: Option
, } impl InternalApiConfig { pub fn new( web3_config: &Web3JsonRpcConfig, - contracts_config: &ChainSpecificContracts, + l1_contracts_config: &ChainSpecificContracts, + sl_contracts_config: &ChainSpecificContracts, l1_ecosystem_contracts: &L1SpecificContracts, genesis_config: &GenesisConfig, ) -> Self { @@ -279,23 +286,25 @@ impl InternalApiConfig { estimate_gas_optimize_search: web3_config.estimate_gas_optimize_search, bridge_addresses: api::BridgeAddresses { l1_erc20_default_bridge: l1_ecosystem_contracts.erc_20_bridge, - l2_erc20_default_bridge: contracts_config.l2_contracts.erc20_default_bridge, + l2_erc20_default_bridge: sl_contracts_config.l2_contracts.erc20_default_bridge, l1_shared_default_bridge: l1_ecosystem_contracts.shared_bridge, - l2_shared_default_bridge: contracts_config.l2_contracts.shared_bridge_addr, + l2_shared_default_bridge: sl_contracts_config.l2_contracts.shared_bridge_addr, // WETH bridge is not available l1_weth_bridge: None, l2_weth_bridge: None, - l2_legacy_shared_bridge: contracts_config.l2_contracts.legacy_shared_bridge_addr, + l2_legacy_shared_bridge: sl_contracts_config.l2_contracts.legacy_shared_bridge_addr, }, - l1_bridgehub_proxy_addr: l1_ecosystem_contracts.bridge_hub, - l1_state_transition_proxy_addr: contracts_config - .ecosystem_contracts - .state_transition_proxy_addr, - l1_transparent_proxy_admin_addr: None, + l1_ecosystem_contracts: l1_contracts_config.ecosystem_contracts.clone(), + sl_ecosystem_contracts: sl_contracts_config.ecosystem_contracts.clone(), l1_bytecodes_supplier_addr: l1_ecosystem_contracts.bytecodes_supplier_addr, l1_wrapped_base_token_store: l1_ecosystem_contracts.wrapped_base_token_store, - l1_diamond_proxy_addr: contracts_config.chain_contracts_config.diamond_proxy_addr, - l2_testnet_paymaster_addr: contracts_config.l2_contracts.testnet_paymaster_addr, + sl_diamond_proxy_addr: sl_contracts_config + .chain_contracts_config + .diamond_proxy_addr, + l1_diamond_proxy_addr: l1_contracts_config + .chain_contracts_config + .diamond_proxy_addr, + l2_testnet_paymaster_addr: sl_contracts_config.l2_contracts.testnet_paymaster_addr, req_entities_limit: web3_config.req_entities_limit(), fee_history_limit: web3_config.fee_history_limit(), base_token_address: Some( @@ -306,8 +315,7 @@ impl InternalApiConfig { filters_disabled: web3_config.filters_disabled, dummy_verifier: genesis_config.dummy_verifier, l1_batch_commit_data_generator_mode: genesis_config.l1_batch_commit_data_generator_mode, - timestamp_asserter_address: contracts_config.l2_contracts.timestamp_asserter_addr, - l1_server_notifier_addr: contracts_config.ecosystem_contracts.server_notifier_addr, + timestamp_asserter_address: sl_contracts_config.l2_contracts.timestamp_asserter_addr, } } } diff --git a/core/node/api_server/src/web3/tests/mod.rs b/core/node/api_server/src/web3/tests/mod.rs index 723556845244..c03584dd8274 100644 --- a/core/node/api_server/src/web3/tests/mod.rs +++ b/core/node/api_server/src/web3/tests/mod.rs @@ -289,6 +289,7 @@ async fn test_http_server(test: impl HttpTest) { let mut api_config = InternalApiConfig::new( &web3_config, SettlementLayerContracts::new(&contracts_config, None).current_contracts(), + SettlementLayerContracts::new(&contracts_config, None).current_contracts(), &L1SpecificContracts::new(&contracts_config), &genesis, ); diff --git a/core/node/consistency_checker/src/lib.rs b/core/node/consistency_checker/src/lib.rs index 8532616e6b76..8ec8e50d23d9 100644 --- a/core/node/consistency_checker/src/lib.rs +++ b/core/node/consistency_checker/src/lib.rs @@ -22,6 +22,7 @@ use zksync_types::{ ethabi, ethabi::{ParamType, Token}, pubdata_da::PubdataSendingMode, + settlement::SettlementMode, Address, L1BatchNumber, ProtocolVersionId, SLChainId, H256, U256, }; @@ -363,7 +364,7 @@ pub struct ConsistencyChecker { max_batches_to_recheck: u32, sleep_interval: Duration, chain_data: SLChainAccess, - // gateway_chain_data: Option, + settlement_mode: SettlementMode, event_handler: Box, l1_data_mismatch_behavior: L1DataMismatchBehavior, pool: ConnectionPool, @@ -379,6 +380,7 @@ impl ConsistencyChecker { max_batches_to_recheck: u32, pool: ConnectionPool, commitment_mode: L1BatchCommitmentMode, + settlement_mode: SettlementMode, ) -> anyhow::Result { let (health_check, health_updater) = ConsistencyCheckerHealthUpdater::new(); let l1_chain_id = gateway_client.fetch_chain_id().await?; @@ -408,6 +410,7 @@ impl ConsistencyChecker { max_batches_to_recheck, sleep_interval: Self::DEFAULT_SLEEP_INTERVAL, chain_data, + settlement_mode, event_handler: Box::new(health_updater), l1_data_mismatch_behavior: L1DataMismatchBehavior::Log, pool, @@ -526,7 +529,7 @@ impl ConsistencyChecker { // TODO set properly // let is_gateway = self.chain_data.chain_id != self.l1_chain_data.chain_id; - let is_gateway = false; + let is_gateway = self.settlement_mode.is_gateway(); local .verify_commitment(&commitment, is_gateway) .map_err(CheckError::Validation) diff --git a/core/node/consistency_checker/src/tests/mod.rs b/core/node/consistency_checker/src/tests/mod.rs index 26b263d8fb97..9f475a96992e 100644 --- a/core/node/consistency_checker/src/tests/mod.rs +++ b/core/node/consistency_checker/src/tests/mod.rs @@ -567,6 +567,7 @@ async fn checker_works_with_different_settlement_layers() { 100, pool.clone(), commitment_mode, + SettlementMode::Gateway, ) .await .unwrap(); diff --git a/core/node/node_framework/src/implementations/layers/consistency_checker.rs b/core/node/node_framework/src/implementations/layers/consistency_checker.rs index b5e98a1fe8d2..6f06c551e36a 100644 --- a/core/node/node_framework/src/implementations/layers/consistency_checker.rs +++ b/core/node/node_framework/src/implementations/layers/consistency_checker.rs @@ -7,6 +7,7 @@ use crate::{ eth_interface::UniversalClientResource, healthcheck::AppHealthCheckResource, pools::{MasterPool, PoolResource}, + settlement_layer::SettlementModeResource, }, service::StopReceiver, task::{Task, TaskId}, @@ -25,6 +26,7 @@ pub struct ConsistencyCheckerLayer { #[context(crate = crate)] pub struct Input { pub settlement_layer_client: UniversalClientResource, + pub settlement_mode: SettlementModeResource, pub sl_chain_contracts: SettlementLayerContractsResource, pub master_pool: PoolResource, #[context(default)] @@ -63,19 +65,12 @@ impl WiringLayer for ConsistencyCheckerLayer { let settlement_layer_client = input.settlement_layer_client.0; let singleton_pool = input.master_pool.get_singleton().await?; - dbg!( - &input - .sl_chain_contracts - .0 - .chain_contracts_config - .diamond_proxy_addr, - ); - dbg!(&settlement_layer_client); let consistency_checker = ConsistencyChecker::new( settlement_layer_client.into(), self.max_batches_to_recheck, singleton_pool, self.commitment_mode, + input.settlement_mode.0, ) .await .map_err(WiringError::Internal)? diff --git a/core/node/node_framework/src/implementations/layers/settlement_layer_data_en.rs b/core/node/node_framework/src/implementations/layers/settlement_layer_data_en.rs index 89a33995f3d5..caba8a513e15 100644 --- a/core/node/node_framework/src/implementations/layers/settlement_layer_data_en.rs +++ b/core/node/node_framework/src/implementations/layers/settlement_layer_data_en.rs @@ -20,18 +20,21 @@ use crate::{ /// Wiring layer for [`SettlementLayerData`]. #[derive(Debug)] pub struct SettlementLayerDataEn { - l1specific_contracts: L1SpecificContracts, - chain_specific_contracts: ChainSpecificContracts, + l1_specific_contracts: L1SpecificContracts, + sl_chain_contracts: ChainSpecificContracts, + l1_chain_contracts: ChainSpecificContracts, } impl SettlementLayerDataEn { pub fn new( - l1specific_contracts: L1SpecificContracts, - chain_specific_contracts: ChainSpecificContracts, + l1_specific_contracts: L1SpecificContracts, + sl_chain_contracts: ChainSpecificContracts, + l1_chain_contracts: ChainSpecificContracts, ) -> Self { Self { - l1specific_contracts, - chain_specific_contracts, + l1_specific_contracts, + sl_chain_contracts, + l1_chain_contracts, } } } @@ -63,9 +66,10 @@ impl WiringLayer for SettlementLayerDataEn { } async fn wire(self, input: Self::Input) -> Result { + // TODO fix sl_mode, now it's incorrect for en let initial_sl_mode = get_settlement_layer( &input.eth_client.0, - self.chain_specific_contracts + self.l1_chain_contracts .chain_contracts_config .diamond_proxy_addr, &getters_facet_contract(), @@ -84,9 +88,11 @@ impl WiringLayer for SettlementLayerDataEn { }; Ok(Output { - contracts: SettlementLayerContractsResource(self.chain_specific_contracts.clone()), - l1_contracts: L1ChainContractsResource(self.chain_specific_contracts.clone()), - l1_ecosystem_contracts: L1EcosystemContractsResource(self.l1specific_contracts.clone()), + contracts: SettlementLayerContractsResource(self.sl_chain_contracts.clone()), + l1_contracts: L1ChainContractsResource(self.l1_chain_contracts.clone()), + l1_ecosystem_contracts: L1EcosystemContractsResource( + self.l1_specific_contracts.clone(), + ), initial_settlement_mode: SettlementModeResource(initial_sl_mode), sl_chain_id_resource: SlChainIdResource(chain_id), }) diff --git a/core/node/node_framework/src/implementations/layers/web3_api/server/mod.rs b/core/node/node_framework/src/implementations/layers/web3_api/server/mod.rs index 44e641242f7b..e0377be3894b 100644 --- a/core/node/node_framework/src/implementations/layers/web3_api/server/mod.rs +++ b/core/node/node_framework/src/implementations/layers/web3_api/server/mod.rs @@ -18,7 +18,10 @@ use crate::{ }, resources::{ circuit_breakers::CircuitBreakersResource, - contracts::{L1EcosystemContractsResource, SettlementLayerContractsResource}, + contracts::{ + L1ChainContractsResource, L1EcosystemContractsResource, + SettlementLayerContractsResource, + }, eth_interface::EthInterfaceResource, healthcheck::AppHealthCheckResource, main_node_client::MainNodeClientResource, @@ -134,7 +137,8 @@ pub struct Input { pub app_health: AppHealthCheckResource, pub main_node_client: Option, pub l1_client: EthInterfaceResource, - pub contracts_resource: SettlementLayerContractsResource, + pub sl_contracts_resource: SettlementLayerContractsResource, + pub l1_contracts_resource: L1ChainContractsResource, pub l1_ecosystem_contracts_resource: L1EcosystemContractsResource, } @@ -201,10 +205,15 @@ impl WiringLayer for Web3ServerLayer { let sync_state = input.sync_state.map(|state| state.0); let tree_api_client = input.tree_api_client.map(|client| client.0); - let contracts = input.contracts_resource.0; + let sl_contracts = input.sl_contracts_resource.0; + let l1_contracts = input.l1_contracts_resource.0; let internal_api_config = self .internal_api_config_builder - .with_contracts(contracts, input.l1_ecosystem_contracts_resource.0) + .with_contracts( + l1_contracts, + sl_contracts, + input.l1_ecosystem_contracts_resource.0, + ) .build(); let sealed_l2_block_handle = SealedL2BlockNumber::default(); @@ -230,7 +239,8 @@ impl WiringLayer for Web3ServerLayer { bridge_address_updater: bridge_addresses_handle.clone(), l1_eth_client: Box::new(input.l1_client.0), bridgehub_addr: internal_api_config - .l1_bridgehub_proxy_addr + .l1_ecosystem_contracts + .bridgehub_proxy_addr .context("Lacking l1 bridgehub proxy address")?, update_interval: self.optional_config.bridge_addresses_refresh_interval, bridgehub_abi: bridgehub_contract(), diff --git a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs index d7baa09c971c..1fe9488d8513 100644 --- a/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs +++ b/zkstack_cli/crates/zkstack/src/commands/dev/commands/gateway.rs @@ -315,7 +315,7 @@ pub async fn check_chain_readiness( } }; - let diamond_proxy_addr = l2_client.get_main_contract().await?; + let diamond_proxy_addr = l2_client.get_main_l1_contract().await?; if inflight_txs_count != 0 { anyhow::bail!("Chain not ready since there are inflight txs!");