From 258c759e3df76c097ad7af1359db1abbeebc290e Mon Sep 17 00:00:00 2001 From: Dafna Matsry Date: Wed, 19 Feb 2025 12:11:53 +0200 Subject: [PATCH] feat(starknet_mempool): add mempool config to sequencer node --- Cargo.lock | 1 + config/sequencer/default_config.json | 17 ++++++++++++++++- crates/starknet_integration_tests/Cargo.toml | 1 + crates/starknet_integration_tests/src/utils.rs | 7 +++++++ crates/starknet_mempool/src/communication.rs | 3 ++- crates/starknet_mempool/src/config.rs | 2 +- .../starknet_sequencer_node/src/components.rs | 3 ++- .../src/config/node_config.rs | 4 ++++ 8 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0c6c9b0feee..831d1ba01a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11249,6 +11249,7 @@ dependencies = [ "starknet_gateway_types", "starknet_http_server", "starknet_infra_utils", + "starknet_mempool", "starknet_mempool_p2p", "starknet_monitoring_endpoint", "starknet_sequencer_infra", diff --git a/config/sequencer/default_config.json b/config/sequencer/default_config.json index 82a74583adc..2d498a899f7 100644 --- a/config/sequencer/default_config.json +++ b/config/sequencer/default_config.json @@ -1049,6 +1049,21 @@ "privacy": "Public", "value": 0 }, + "mempool_config.enable_fee_escalation": { + "description": "If true, transactions can be replaced with higher fee transactions.", + "privacy": "Public", + "value": true + }, + "mempool_config.fee_escalation_percentage": { + "description": "Percentage increase for tip and max gas price to enable transaction replacement.", + "privacy": "Public", + "value": 10 + }, + "mempool_config.transaction_ttl": { + "description": "Time-to-live for transactions in the mempool, in seconds.", + "privacy": "Public", + "value": 60 + }, "mempool_p2p_config.network_buffer_size": { "description": "Network buffer size.", "privacy": "Public", @@ -1449,4 +1464,4 @@ "privacy": "TemporaryValue", "value": 1000000 } -} +} \ No newline at end of file diff --git a/crates/starknet_integration_tests/Cargo.toml b/crates/starknet_integration_tests/Cargo.toml index 26969fd228e..8ceafc859dc 100644 --- a/crates/starknet_integration_tests/Cargo.toml +++ b/crates/starknet_integration_tests/Cargo.toml @@ -36,6 +36,7 @@ starknet_gateway = { workspace = true, features = ["testing"] } starknet_gateway_types.workspace = true starknet_http_server = { workspace = true, features = ["testing"] } starknet_infra_utils = { workspace = true, features = ["testing"] } +starknet_mempool.workspace = true starknet_mempool_p2p.workspace = true starknet_monitoring_endpoint = { workspace = true, features = ["testing"] } starknet_sequencer_infra = { workspace = true, features = ["testing"] } diff --git a/crates/starknet_integration_tests/src/utils.rs b/crates/starknet_integration_tests/src/utils.rs index 7028fadcf79..51f2f39726a 100644 --- a/crates/starknet_integration_tests/src/utils.rs +++ b/crates/starknet_integration_tests/src/utils.rs @@ -43,6 +43,7 @@ use starknet_gateway::config::{ }; use starknet_http_server::test_utils::create_http_server_config; use starknet_infra_utils::test_utils::AvailablePorts; +use starknet_mempool::config::MempoolConfig; use starknet_mempool_p2p::config::MempoolP2pConfig; use starknet_monitoring_endpoint::config::MonitoringEndpointConfig; use starknet_sequencer_node::config::component_config::ComponentConfig; @@ -151,6 +152,7 @@ pub fn create_node_config( let fee_token_addresses = chain_info.fee_token_addresses.clone(); let batcher_config = create_batcher_config(batcher_storage_config, chain_info.clone()); let gateway_config = create_gateway_config(chain_info.clone()); + let mempool_config = create_mempool_config(); let http_server_config = create_http_server_config(available_ports.get_next_local_host_socket()); let class_manager_config = create_class_manager_config(class_manager_storage_config); @@ -163,6 +165,7 @@ pub fn create_node_config( consensus_manager_config, gateway_config, http_server_config, + mempool_config, mempool_p2p_config, monitoring_endpoint_config, state_sync_config, @@ -458,6 +461,10 @@ pub fn create_batcher_config( } } +pub fn create_mempool_config() -> MempoolConfig { + MempoolConfig { transaction_ttl: Duration::from_secs(5 * 60), ..Default::default() } +} + pub fn create_class_manager_config( class_storage_config: FsClassStorageConfig, ) -> FsClassManagerConfig { diff --git a/crates/starknet_mempool/src/communication.rs b/crates/starknet_mempool/src/communication.rs index 29fe70d6702..38d65d228a8 100644 --- a/crates/starknet_mempool/src/communication.rs +++ b/crates/starknet_mempool/src/communication.rs @@ -25,10 +25,11 @@ pub type LocalMempoolServer = pub type RemoteMempoolServer = RemoteComponentServer; pub fn create_mempool( + config: MempoolConfig, mempool_p2p_propagator_client: SharedMempoolP2pPropagatorClient, ) -> MempoolCommunicationWrapper { MempoolCommunicationWrapper::new( - Mempool::new(MempoolConfig::default(), Arc::new(InstantClock)), + Mempool::new(config, Arc::new(InstantClock)), mempool_p2p_propagator_client, ) } diff --git a/crates/starknet_mempool/src/config.rs b/crates/starknet_mempool/src/config.rs index 1d2b3c88a13..1d26867a105 100644 --- a/crates/starknet_mempool/src/config.rs +++ b/crates/starknet_mempool/src/config.rs @@ -46,7 +46,7 @@ impl SerializeConfig for MempoolConfig { ), ser_param( "transaction_ttl", - &self.transaction_ttl, + &self.transaction_ttl.as_secs(), "Time-to-live for transactions in the mempool, in seconds.", ParamPrivacyInput::Public, ), diff --git a/crates/starknet_sequencer_node/src/components.rs b/crates/starknet_sequencer_node/src/components.rs index 15e181e9d50..0e44cc9adb7 100644 --- a/crates/starknet_sequencer_node/src/components.rs +++ b/crates/starknet_sequencer_node/src/components.rs @@ -159,7 +159,8 @@ pub async fn create_node_components( let mempool_p2p_propagator_client = clients .get_mempool_p2p_propagator_shared_client() .expect("Propagator Client should be available"); - let mempool = create_mempool(mempool_p2p_propagator_client); + let mempool = + create_mempool(config.mempool_config.clone(), mempool_p2p_propagator_client); Some(mempool) } ReactiveComponentExecutionMode::Disabled | ReactiveComponentExecutionMode::Remote => None, diff --git a/crates/starknet_sequencer_node/src/config/node_config.rs b/crates/starknet_sequencer_node/src/config/node_config.rs index db45619e2b2..c93db3d0a3e 100644 --- a/crates/starknet_sequencer_node/src/config/node_config.rs +++ b/crates/starknet_sequencer_node/src/config/node_config.rs @@ -28,6 +28,7 @@ use starknet_http_server::config::HttpServerConfig; use starknet_infra_utils::path::resolve_project_relative_path; use starknet_l1_provider::l1_scraper::L1ScraperConfig; use starknet_l1_provider::L1ProviderConfig; +use starknet_mempool::config::MempoolConfig; use starknet_mempool_p2p::config::MempoolP2pConfig; use starknet_monitoring_endpoint::config::MonitoringEndpointConfig; use starknet_sierra_multicompile::config::SierraCompilationConfig; @@ -154,6 +155,8 @@ pub struct SequencerNodeConfig { #[validate] pub l1_scraper_config: L1ScraperConfig, #[validate] + pub mempool_config: MempoolConfig, + #[validate] pub mempool_p2p_config: MempoolP2pConfig, #[validate] pub monitoring_endpoint_config: MonitoringEndpointConfig, @@ -175,6 +178,7 @@ impl SerializeConfig for SequencerNodeConfig { append_sub_config_name(self.gateway_config.dump(), "gateway_config"), append_sub_config_name(self.http_server_config.dump(), "http_server_config"), append_sub_config_name(self.compiler_config.dump(), "compiler_config"), + append_sub_config_name(self.mempool_config.dump(), "mempool_config"), append_sub_config_name(self.mempool_p2p_config.dump(), "mempool_p2p_config"), append_sub_config_name( self.monitoring_endpoint_config.dump(),