From 2c57fefe06f74b4b5cc72c6b5d006f35236094a9 Mon Sep 17 00:00:00 2001 From: Guy Nir Date: Wed, 15 Jan 2025 14:44:01 +0200 Subject: [PATCH] chore(consensus): update ConsensusManagerConfig with new parameters --- config/papyrus/default_config.json | 75 --------- config/sequencer/default_config.json | 149 ++++++++++-------- crates/papyrus_node/src/config/pointers.rs | 1 - ...fig__config_test__dump_default_config.snap | 93 ----------- .../papyrus_consensus/src/config.rs | 12 +- .../starknet_consensus_manager/src/config.rs | 51 +++++- .../src/consensus_manager.rs | 3 +- .../starknet_integration_tests/src/utils.rs | 2 +- .../src/config/node_config.rs | 2 +- 9 files changed, 135 insertions(+), 253 deletions(-) diff --git a/config/papyrus/default_config.json b/config/papyrus/default_config.json index 63638d5c32..c4e9948988 100644 --- a/config/papyrus/default_config.json +++ b/config/papyrus/default_config.json @@ -89,81 +89,6 @@ "privacy": "Public", "value": 5 }, - "consensus.network_config.advertised_multiaddr": { - "description": "The external address other peers see this node. If this is set, the node will not try to find out which addresses it has and will write this address as external instead", - "privacy": "Public", - "value": "" - }, - "consensus.network_config.advertised_multiaddr.#is_none": { - "description": "Flag for an optional field.", - "privacy": "TemporaryValue", - "value": true - }, - "consensus.network_config.bootstrap_peer_multiaddr": { - "description": "The multiaddress of the peer node. It should include the peer's id. For more info: https://docs.libp2p.io/concepts/fundamentals/peers/", - "privacy": "Public", - "value": "" - }, - "consensus.network_config.bootstrap_peer_multiaddr.#is_none": { - "description": "Flag for an optional field.", - "privacy": "TemporaryValue", - "value": true - }, - "consensus.network_config.chain_id": { - "description": "The chain to follow. For more details see https://docs.starknet.io/documentation/architecture_and_concepts/Blocks/transactions/#chain-id.", - "pointer_target": "chain_id", - "privacy": "Public" - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.base_delay_millis": { - "description": "The base delay in milliseconds for the exponential backoff strategy.", - "privacy": "Public", - "value": 2 - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.factor": { - "description": "The factor for the exponential backoff strategy.", - "privacy": "Public", - "value": 5 - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.max_delay_seconds": { - "description": "The maximum delay in seconds for the exponential backoff strategy.", - "privacy": "Public", - "value": 5 - }, - "consensus.network_config.discovery_config.heartbeat_interval": { - "description": "The interval between each discovery (Kademlia) query in milliseconds.", - "privacy": "Public", - "value": 100 - }, - "consensus.network_config.idle_connection_timeout": { - "description": "Amount of time in seconds that a connection with no active sessions will stay alive.", - "privacy": "Public", - "value": 120 - }, - "consensus.network_config.peer_manager_config.malicious_timeout_seconds": { - "description": "The duration in seconds a peer is blacklisted after being marked as malicious.", - "privacy": "Public", - "value": 31536000 - }, - "consensus.network_config.peer_manager_config.unstable_timeout_millis": { - "description": "The duration in milliseconds a peer blacklisted after being reported as unstable.", - "privacy": "Public", - "value": 1000 - }, - "consensus.network_config.secret_key": { - "description": "The secret key used for building the peer id. If it's an empty string a random one will be used.", - "privacy": "Private", - "value": "" - }, - "consensus.network_config.session_timeout": { - "description": "Maximal time in seconds that each session can take before failing on timeout.", - "privacy": "Public", - "value": 120 - }, - "consensus.network_config.tcp_port": { - "description": "The port that the node listens on for incoming tcp connections.", - "privacy": "Public", - "value": 10100 - }, "consensus.network_topic": { "description": "The network topic of the consensus.", "privacy": "Public", diff --git a/config/sequencer/default_config.json b/config/sequencer/default_config.json index 851114d499..d3710fc3f4 100644 --- a/config/sequencer/default_config.json +++ b/config/sequencer/default_config.json @@ -524,135 +524,150 @@ "privacy": "Public", "value": 5 }, - "consensus_manager_config.consensus_config.network_config.advertised_multiaddr": { + "consensus_manager_config.consensus_config.network_topic": { + "description": "The network topic of the consensus.", + "privacy": "Public", + "value": "consensus" + }, + "consensus_manager_config.consensus_config.num_validators": { + "description": "The number of validators in the consensus.", + "privacy": "Public", + "value": 1 + }, + "consensus_manager_config.consensus_config.start_height": { + "description": "The height to start the consensus from.", + "privacy": "Public", + "value": 0 + }, + "consensus_manager_config.consensus_config.sync_retry_interval": { + "description": "The duration (seconds) between sync attempts.", + "privacy": "Public", + "value": 1.0 + }, + "consensus_manager_config.consensus_config.timeouts.precommit_timeout": { + "description": "The timeout (seconds) for a precommit.", + "privacy": "Public", + "value": 1.0 + }, + "consensus_manager_config.consensus_config.timeouts.prevote_timeout": { + "description": "The timeout (seconds) for a prevote.", + "privacy": "Public", + "value": 1.0 + }, + "consensus_manager_config.consensus_config.timeouts.proposal_timeout": { + "description": "The timeout (seconds) for a proposal.", + "privacy": "Public", + "value": 3.0 + }, + "consensus_manager_config.consensus_config.validator_id": { + "description": "The validator id of the node.", + "pointer_target": "validator_id", + "privacy": "Public" + }, + "consensus_manager_config.context_config.batcher_build_buffer": { + "description": "The buffer size for the batcher when building proposals.", + "privacy": "Public", + "value": 100 + }, + "consensus_manager_config.context_config.chain_id": { + "description": "The chain id of the Starknet chain.", + "pointer_target": "chain_id", + "privacy": "Public" + }, + "consensus_manager_config.context_config.num_validators": { + "description": "The number of validators.", + "privacy": "Public", + "value": 1 + }, + "consensus_manager_config.immediate_active_height": { + "description": "The height at which the consensus manager becomes active.", + "privacy": "Public", + "value": 0 + }, + "consensus_manager_config.network_config.advertised_multiaddr": { "description": "The external address other peers see this node. If this is set, the node will not try to find out which addresses it has and will write this address as external instead", "privacy": "Public", "value": "" }, - "consensus_manager_config.consensus_config.network_config.advertised_multiaddr.#is_none": { + "consensus_manager_config.network_config.advertised_multiaddr.#is_none": { "description": "Flag for an optional field.", "privacy": "TemporaryValue", "value": true }, - "consensus_manager_config.consensus_config.network_config.bootstrap_peer_multiaddr": { + "consensus_manager_config.network_config.bootstrap_peer_multiaddr": { "description": "The multiaddress of the peer node. It should include the peer's id. For more info: https://docs.libp2p.io/concepts/fundamentals/peers/", "privacy": "Public", "value": "" }, - "consensus_manager_config.consensus_config.network_config.bootstrap_peer_multiaddr.#is_none": { + "consensus_manager_config.network_config.bootstrap_peer_multiaddr.#is_none": { "description": "Flag for an optional field.", "privacy": "TemporaryValue", "value": true }, - "consensus_manager_config.consensus_config.network_config.chain_id": { + "consensus_manager_config.network_config.chain_id": { "description": "The chain to follow. For more details see https://docs.starknet.io/documentation/architecture_and_concepts/Blocks/transactions/#chain-id.", "pointer_target": "chain_id", "privacy": "Public" }, - "consensus_manager_config.consensus_config.network_config.discovery_config.bootstrap_dial_retry_config.base_delay_millis": { + "consensus_manager_config.network_config.discovery_config.bootstrap_dial_retry_config.base_delay_millis": { "description": "The base delay in milliseconds for the exponential backoff strategy.", "privacy": "Public", "value": 2 }, - "consensus_manager_config.consensus_config.network_config.discovery_config.bootstrap_dial_retry_config.factor": { + "consensus_manager_config.network_config.discovery_config.bootstrap_dial_retry_config.factor": { "description": "The factor for the exponential backoff strategy.", "privacy": "Public", "value": 5 }, - "consensus_manager_config.consensus_config.network_config.discovery_config.bootstrap_dial_retry_config.max_delay_seconds": { + "consensus_manager_config.network_config.discovery_config.bootstrap_dial_retry_config.max_delay_seconds": { "description": "The maximum delay in seconds for the exponential backoff strategy.", "privacy": "Public", "value": 5 }, - "consensus_manager_config.consensus_config.network_config.discovery_config.heartbeat_interval": { + "consensus_manager_config.network_config.discovery_config.heartbeat_interval": { "description": "The interval between each discovery (Kademlia) query in milliseconds.", "privacy": "Public", "value": 100 }, - "consensus_manager_config.consensus_config.network_config.idle_connection_timeout": { + "consensus_manager_config.network_config.idle_connection_timeout": { "description": "Amount of time in seconds that a connection with no active sessions will stay alive.", "privacy": "Public", "value": 120 }, - "consensus_manager_config.consensus_config.network_config.peer_manager_config.malicious_timeout_seconds": { + "consensus_manager_config.network_config.peer_manager_config.malicious_timeout_seconds": { "description": "The duration in seconds a peer is blacklisted after being marked as malicious.", "privacy": "Public", "value": 31536000 }, - "consensus_manager_config.consensus_config.network_config.peer_manager_config.unstable_timeout_millis": { + "consensus_manager_config.network_config.peer_manager_config.unstable_timeout_millis": { "description": "The duration in milliseconds a peer blacklisted after being reported as unstable.", "privacy": "Public", "value": 1000 }, - "consensus_manager_config.consensus_config.network_config.secret_key": { + "consensus_manager_config.network_config.secret_key": { "description": "The secret key used for building the peer id. If it's an empty string a random one will be used.", "privacy": "Private", "value": "" }, - "consensus_manager_config.consensus_config.network_config.session_timeout": { + "consensus_manager_config.network_config.session_timeout": { "description": "Maximal time in seconds that each session can take before failing on timeout.", "privacy": "Public", "value": 120 }, - "consensus_manager_config.consensus_config.network_config.tcp_port": { + "consensus_manager_config.network_config.tcp_port": { "description": "The port that the node listens on for incoming tcp connections.", "privacy": "Public", - "value": 10100 - }, - "consensus_manager_config.consensus_config.network_topic": { - "description": "The network topic of the consensus.", - "privacy": "Public", - "value": "consensus" - }, - "consensus_manager_config.consensus_config.num_validators": { - "description": "The number of validators in the consensus.", - "privacy": "Public", - "value": 1 - }, - "consensus_manager_config.consensus_config.start_height": { - "description": "The height to start the consensus from.", - "privacy": "Public", - "value": 0 - }, - "consensus_manager_config.consensus_config.sync_retry_interval": { - "description": "The duration (seconds) between sync attempts.", - "privacy": "Public", - "value": 1.0 - }, - "consensus_manager_config.consensus_config.timeouts.precommit_timeout": { - "description": "The timeout (seconds) for a precommit.", - "privacy": "Public", - "value": 1.0 - }, - "consensus_manager_config.consensus_config.timeouts.prevote_timeout": { - "description": "The timeout (seconds) for a prevote.", - "privacy": "Public", - "value": 1.0 - }, - "consensus_manager_config.consensus_config.timeouts.proposal_timeout": { - "description": "The timeout (seconds) for a proposal.", - "privacy": "Public", - "value": 3.0 - }, - "consensus_manager_config.consensus_config.validator_id": { - "description": "The validator id of the node.", - "pointer_target": "validator_id", - "privacy": "Public" + "value": 10000 }, - "consensus_manager_config.context_config.batcher_build_buffer": { - "description": "The buffer size for the batcher when building proposals.", + "consensus_manager_config.proposals_topic": { + "description": "The topic for consensus proposals.", "privacy": "Public", - "value": 100 + "value": "consensus_proposals" }, - "consensus_manager_config.context_config.chain_id": { - "description": "The chain id of the Starknet chain.", - "pointer_target": "chain_id", - "privacy": "Public" - }, - "consensus_manager_config.context_config.num_validators": { - "description": "The number of validators.", + "consensus_manager_config.votes_topic": { + "description": "The topic for consensus votes.", "privacy": "Public", - "value": 1 + "value": "consensus_votes" }, "eth_fee_token_address": { "description": "A required param! Address of the ETH fee token.", diff --git a/crates/papyrus_node/src/config/pointers.rs b/crates/papyrus_node/src/config/pointers.rs index ee8a18d5d4..33c93c204d 100644 --- a/crates/papyrus_node/src/config/pointers.rs +++ b/crates/papyrus_node/src/config/pointers.rs @@ -60,7 +60,6 @@ pub static CONFIG_POINTERS: LazyLock = LazyLock::new(|| { set_pointing_param_paths(&[ "consensus.chain_id", "context.chain_id", - "consensus.network_config.chain_id", "network.chain_id", "rpc.chain_id", "storage.db_config.chain_id", diff --git a/crates/papyrus_node/src/config/snapshots/papyrus_node__config__config_test__dump_default_config.snap b/crates/papyrus_node/src/config/snapshots/papyrus_node__config__config_test__dump_default_config.snap index ea0e438164..b6902bf353 100644 --- a/crates/papyrus_node/src/config/snapshots/papyrus_node__config__config_test__dump_default_config.snap +++ b/crates/papyrus_node/src/config/snapshots/papyrus_node__config__config_test__dump_default_config.snap @@ -101,99 +101,6 @@ expression: dumped_default_config }, "privacy": "Public" }, - "consensus.network_config.advertised_multiaddr": { - "description": "The external address other peers see this node. If this is set, the node will not try to find out which addresses it has and will write this address as external instead", - "value": "", - "privacy": "Public" - }, - "consensus.network_config.advertised_multiaddr.#is_none": { - "description": "Flag for an optional field.", - "value": true, - "privacy": "TemporaryValue" - }, - "consensus.network_config.bootstrap_peer_multiaddr": { - "description": "The multiaddress of the peer node. It should include the peer's id. For more info: https://docs.libp2p.io/concepts/fundamentals/peers/", - "value": "", - "privacy": "Public" - }, - "consensus.network_config.bootstrap_peer_multiaddr.#is_none": { - "description": "Flag for an optional field.", - "value": true, - "privacy": "TemporaryValue" - }, - "consensus.network_config.chain_id": { - "description": "The chain to follow. For more details see https://docs.starknet.io/documentation/architecture_and_concepts/Blocks/transactions/#chain-id.", - "value": "SN_MAIN", - "privacy": "Public" - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.base_delay_millis": { - "description": "The base delay in milliseconds for the exponential backoff strategy.", - "value": { - "$serde_json::private::Number": "2" - }, - "privacy": "Public" - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.factor": { - "description": "The factor for the exponential backoff strategy.", - "value": { - "$serde_json::private::Number": "5" - }, - "privacy": "Public" - }, - "consensus.network_config.discovery_config.bootstrap_dial_retry_config.max_delay_seconds": { - "description": "The maximum delay in seconds for the exponential backoff strategy.", - "value": { - "$serde_json::private::Number": "5" - }, - "privacy": "Public" - }, - "consensus.network_config.discovery_config.heartbeat_interval": { - "description": "The interval between each discovery (Kademlia) query in milliseconds.", - "value": { - "$serde_json::private::Number": "100" - }, - "privacy": "Public" - }, - "consensus.network_config.idle_connection_timeout": { - "description": "Amount of time in seconds that a connection with no active sessions will stay alive.", - "value": { - "$serde_json::private::Number": "120" - }, - "privacy": "Public" - }, - "consensus.network_config.peer_manager_config.malicious_timeout_seconds": { - "description": "The duration in seconds a peer is blacklisted after being marked as malicious.", - "value": { - "$serde_json::private::Number": "31536000" - }, - "privacy": "Public" - }, - "consensus.network_config.peer_manager_config.unstable_timeout_millis": { - "description": "The duration in milliseconds a peer blacklisted after being reported as unstable.", - "value": { - "$serde_json::private::Number": "1000" - }, - "privacy": "Public" - }, - "consensus.network_config.secret_key": { - "description": "The secret key used for building the peer id. If it's an empty string a random one will be used.", - "value": "", - "privacy": "Private" - }, - "consensus.network_config.session_timeout": { - "description": "Maximal time in seconds that each session can take before failing on timeout.", - "value": { - "$serde_json::private::Number": "120" - }, - "privacy": "Public" - }, - "consensus.network_config.tcp_port": { - "description": "The port that the node listens on for incoming tcp connections.", - "value": { - "$serde_json::private::Number": "10100" - }, - "privacy": "Public" - }, "consensus.network_topic": { "description": "The network topic of the consensus.", "value": "consensus", diff --git a/crates/sequencing/papyrus_consensus/src/config.rs b/crates/sequencing/papyrus_consensus/src/config.rs index 4c06656dd3..81b6a1f5e0 100644 --- a/crates/sequencing/papyrus_consensus/src/config.rs +++ b/crates/sequencing/papyrus_consensus/src/config.rs @@ -11,7 +11,6 @@ use papyrus_config::converters::{ }; use papyrus_config::dumping::{append_sub_config_name, ser_param, SerializeConfig}; use papyrus_config::{ParamPath, ParamPrivacyInput, SerializedParam}; -use papyrus_network::NetworkConfig; use papyrus_protobuf::consensus::DEFAULT_VALIDATOR_ID; use serde::{Deserialize, Serialize}; use starknet_api::block::BlockNumber; @@ -20,17 +19,18 @@ use validator::Validate; use crate::types::ValidatorId; -const CONSENSUS_TCP_PORT: u16 = 10100; - /// Configuration for consensus. #[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Validate)] pub struct ConsensusConfig { + // TODO(guyn): this will be removed in one of the next PRs. /// The chain id of the Starknet chain. pub chain_id: ChainId, /// The validator ID of the node. pub validator_id: ValidatorId, + // TODO(guyn): this will be removed in one of the next PRs. /// The network topic of the consensus. pub network_topic: String, + // TODO(guyn): this will be removed in one of the next PRs?? /// The height to start the consensus from. pub start_height: BlockNumber, /// The number of validators in the consensus. @@ -44,9 +44,6 @@ pub struct ConsensusConfig { /// The duration (seconds) between sync attempts. #[serde(deserialize_with = "deserialize_float_seconds_to_duration")] pub sync_retry_interval: Duration, - /// The network configuration for the consensus. - #[validate] - pub network_config: NetworkConfig, } impl SerializeConfig for ConsensusConfig { @@ -96,14 +93,12 @@ impl SerializeConfig for ConsensusConfig { ), ]); config.extend(append_sub_config_name(self.timeouts.dump(), "timeouts")); - config.extend(append_sub_config_name(self.network_config.dump(), "network_config")); config } } impl Default for ConsensusConfig { fn default() -> Self { - let network_config = NetworkConfig { tcp_port: CONSENSUS_TCP_PORT, ..Default::default() }; Self { chain_id: ChainId::Other("0x0".to_string()), validator_id: ValidatorId::from(DEFAULT_VALIDATOR_ID), @@ -113,7 +108,6 @@ impl Default for ConsensusConfig { consensus_delay: Duration::from_secs(5), timeouts: TimeoutsConfig::default(), sync_retry_interval: Duration::from_secs_f64(1.0), - network_config, } } } diff --git a/crates/starknet_consensus_manager/src/config.rs b/crates/starknet_consensus_manager/src/config.rs index 60ec2c8e53..6e8f455751 100644 --- a/crates/starknet_consensus_manager/src/config.rs +++ b/crates/starknet_consensus_manager/src/config.rs @@ -1,20 +1,26 @@ use std::collections::BTreeMap; -use papyrus_config::dumping::{append_sub_config_name, SerializeConfig}; -use papyrus_config::{ParamPath, SerializedParam}; +use papyrus_config::dumping::{append_sub_config_name, ser_param, SerializeConfig}; +use papyrus_config::{ParamPath, ParamPrivacyInput, SerializedParam}; use papyrus_consensus::config::ConsensusConfig; use papyrus_consensus::types::ContextConfig; use papyrus_consensus_orchestrator::cende::CendeConfig; +use papyrus_network::NetworkConfig; use serde::{Deserialize, Serialize}; use validator::Validate; /// The consensus manager related configuration. /// TODO(Matan): Remove ConsensusManagerConfig if it's only field remains ConsensusConfig. -#[derive(Clone, Default, Debug, Serialize, Deserialize, Validate, PartialEq)] +#[derive(Clone, Debug, Serialize, Deserialize, Validate, PartialEq)] pub struct ConsensusManagerConfig { pub consensus_config: ConsensusConfig, pub context_config: ContextConfig, + #[validate] + pub network_config: NetworkConfig, pub cende_config: CendeConfig, + pub votes_topic: String, + pub proposals_topic: String, + pub immediate_active_height: u64, } impl SerializeConfig for ConsensusManagerConfig { @@ -23,8 +29,45 @@ impl SerializeConfig for ConsensusManagerConfig { append_sub_config_name(self.consensus_config.dump(), "consensus_config"), append_sub_config_name(self.context_config.dump(), "context_config"), append_sub_config_name(self.cende_config.dump(), "cende_config"), + append_sub_config_name(self.network_config.dump(), "network_config"), ]; + let mut output_tree: BTreeMap = + sub_configs.into_iter().flatten().collect(); + let additional_parameters = BTreeMap::from_iter([ + ser_param( + "votes_topic", + &self.votes_topic, + "The topic for consensus votes.", + ParamPrivacyInput::Public, + ), + ser_param( + "proposals_topic", + &self.proposals_topic, + "The topic for consensus proposals.", + ParamPrivacyInput::Public, + ), + ser_param( + "immediate_active_height", + &self.immediate_active_height, + "The height at which the consensus manager becomes active.", + ParamPrivacyInput::Public, + ), + ]); + output_tree.extend(additional_parameters); + output_tree + } +} - sub_configs.into_iter().flatten().collect() +impl Default for ConsensusManagerConfig { + fn default() -> Self { + ConsensusManagerConfig { + consensus_config: ConsensusConfig::default(), + context_config: ContextConfig::default(), + cende_config: CendeConfig::default(), + network_config: NetworkConfig::default(), + votes_topic: "consensus_votes".to_string(), + proposals_topic: "consensus_proposals".to_string(), + immediate_active_height: 0, + } } } diff --git a/crates/starknet_consensus_manager/src/consensus_manager.rs b/crates/starknet_consensus_manager/src/consensus_manager.rs index 04a510cd8a..15dd584364 100644 --- a/crates/starknet_consensus_manager/src/consensus_manager.rs +++ b/crates/starknet_consensus_manager/src/consensus_manager.rs @@ -40,8 +40,7 @@ impl ConsensusManager { } pub async fn run(&self) -> Result<(), ConsensusError> { - let mut network_manager = - NetworkManager::new(self.config.consensus_config.network_config.clone(), None); + let mut network_manager = NetworkManager::new(self.config.network_config.clone(), None); let proposals_broadcast_channels = network_manager .register_broadcast_topic::>( diff --git a/crates/starknet_integration_tests/src/utils.rs b/crates/starknet_integration_tests/src/utils.rs index 85985c994e..8b4fd61b82 100644 --- a/crates/starknet_integration_tests/src/utils.rs +++ b/crates/starknet_integration_tests/src/utils.rs @@ -133,11 +133,11 @@ pub(crate) fn create_consensus_manager_configs_from_network_configs( .into_iter() // TODO(Matan): Get config from default config file. .map(|network_config| ConsensusManagerConfig { + network_config, consensus_config: ConsensusConfig { start_height: BlockNumber(1), // TODO(Matan, Dan): Set the right amount consensus_delay: Duration::from_secs(15), - network_config, num_validators, timeouts: timeouts.clone(), ..Default::default() diff --git a/crates/starknet_sequencer_node/src/config/node_config.rs b/crates/starknet_sequencer_node/src/config/node_config.rs index 5da3e75757..23df6bd03f 100644 --- a/crates/starknet_sequencer_node/src/config/node_config.rs +++ b/crates/starknet_sequencer_node/src/config/node_config.rs @@ -53,7 +53,7 @@ pub static CONFIG_POINTERS: LazyLock = LazyLock::new(|| { "batcher_config.storage.db_config.chain_id", "consensus_manager_config.consensus_config.chain_id", "consensus_manager_config.context_config.chain_id", - "consensus_manager_config.consensus_config.network_config.chain_id", + "consensus_manager_config.network_config.chain_id", "gateway_config.chain_info.chain_id", "l1_scraper_config.chain_id", "mempool_p2p_config.network_config.chain_id",