Skip to content

Commit

Permalink
feat(gateway): En fixes for gateway
Browse files Browse the repository at this point in the history
Signed-off-by: Danil <[email protected]>
  • Loading branch information
Deniallugo committed Mar 10, 2025
1 parent c7726e8 commit dbb017c
Show file tree
Hide file tree
Showing 16 changed files with 280 additions and 133 deletions.
144 changes: 105 additions & 39 deletions core/bin/external_node/src/config/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,8 +113,8 @@ pub(crate) struct RemoteENConfig {
pub l1_bridgehub_proxy_addr: Option<Address>,
#[serde(alias = "state_transition_proxy_addr")]
pub l1_state_transition_proxy_addr: Option<Address>,
#[serde(alias = "transparent_proxy_admin_addr")]
pub l1_transparent_proxy_admin_addr: Option<Address>,
// #[serde(alias = "transparent_proxy_admin_addr")]
// pub l1_transparent_proxy_admin_addr: Option<Address>,
/// Should not be accessed directly. Use [`ExternalNodeConfig::l1_diamond_proxy_address`] instead.
#[serde(alias = "diamond_proxy_addr")]
l1_diamond_proxy_addr: Address,
Expand All @@ -139,6 +139,10 @@ pub(crate) struct RemoteENConfig {
pub base_token_addr: Option<Address>,
pub l1_batch_commit_data_generator_mode: L1BatchCommitmentMode,
pub dummy_verifier: bool,
pub sl_diamond_proxy_addr: Option<Address>,
pub sl_bridgehub_proxy_addr: Option<Address>,
pub sl_server_notifier_addr: Option<Address>,
pub sl_state_transition_proxy_addr: Option<Address>,
}

impl RemoteENConfig {
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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,
})
}
Expand All @@ -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,
}
Expand Down Expand Up @@ -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),
Expand All @@ -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,
}
}
}
Expand Down Expand Up @@ -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,
},
}
}
Expand Down
5 changes: 3 additions & 2 deletions core/bin/external_node/src/node_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,9 @@ impl ExternalNodeBuilder {

fn add_settlement_layer_data(mut self) -> anyhow::Result<Self> {
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)
}
Expand Down
3 changes: 3 additions & 0 deletions core/lib/web3_decl/src/namespaces/en.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,4 +57,7 @@ pub trait EnNamespace {

#[method(name = "getEcosystemContracts")]
async fn get_ecosystem_contracts(&self) -> RpcResult<EcosystemContracts>;

#[method(name = "getL1EcosystemContracts")]
async fn get_l1_ecosystem_contracts(&self) -> RpcResult<EcosystemContracts>;
}
5 changes: 4 additions & 1 deletion core/lib/web3_decl/src/namespaces/zks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,10 @@ pub trait ZksNamespace {
async fn get_bridgehub_contract(&self) -> RpcResult<Option<Address>>;

#[method(name = "getMainContract")]
async fn get_main_contract(&self) -> RpcResult<Address>;
async fn get_main_l1_contract(&self) -> RpcResult<Address>;

#[method(name = "getMainSlContract")]
async fn get_main_sl_contract(&self) -> RpcResult<Address>;

#[method(name = "getTestnetPaymaster")]
async fn get_testnet_paymaster(&self) -> RpcResult<Option<Address>>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<EcosystemContracts> {
self.get_l1_ecosystem_contracts_impl()
.await
.map_err(|err| self.current_method().map_err(err))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ impl ZksNamespaceServer for ZksNamespace {
Ok(self.get_bridgehub_contract_impl())
}

async fn get_main_contract(&self) -> RpcResult<Address> {
Ok(self.get_main_contract_impl())
async fn get_main_l1_contract(&self) -> RpcResult<Address> {
Ok(self.get_main_l1_contract_impl())
}

async fn get_testnet_paymaster(&self) -> RpcResult<Option<Address>> {
Expand Down Expand Up @@ -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<Address> {
Ok(self.get_main_sl_contract_impl())
}
}
59 changes: 46 additions & 13 deletions core/node/api_server/src/web3/namespaces/en.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,19 +148,52 @@ impl EnNamespace {

#[tracing::instrument(skip(self))]
pub async fn get_ecosystem_contracts_impl(&self) -> Result<EcosystemContracts, Web3Error> {
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<EcosystemContracts, Web3Error> {
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))]
Expand Down
11 changes: 9 additions & 2 deletions core/node/api_server/src/web3/namespaces/zks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,17 @@ impl ZksNamespace {
}

pub fn get_bridgehub_contract_impl(&self) -> Option<Address> {
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
}

Expand Down
Loading

0 comments on commit dbb017c

Please sign in to comment.