From 9407078c0c2dbaf7ac32c82f5e153443de9cc5b6 Mon Sep 17 00:00:00 2001 From: benthecarman Date: Tue, 21 Jul 2026 12:10:14 -0500 Subject: [PATCH 1/2] Default to the LDK scorer on mainnet Use the hosted LDK scorer when no external pathfinding scores source is configured on mainnet. Leave the scorer unset by default on test networks. This commit was prepared with OpenAI Codex. --- contrib/ldk-server-config.toml | 2 +- ldk-server/src/util/config.rs | 32 ++++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/contrib/ldk-server-config.toml b/contrib/ldk-server-config.toml index 32f74c8a..2f58970a 100644 --- a/contrib/ldk-server-config.toml +++ b/contrib/ldk-server-config.toml @@ -5,7 +5,7 @@ listening_addresses = ["localhost:9735"] # Lightning node listening address #announcement_addresses = ["54.3.7.81:9735"] # Lightning node announcement addresses #grpc_service_address = "127.0.0.1:3536" # LDK Server gRPC address (optional, defaults to 127.0.0.1:3536) alias = "ldk_server" # Lightning node alias -#pathfinding_scores_source_url = "" # External Pathfinding Scores Source +#pathfinding_scores_source_url = "https://rapidsync.lightningdevkit.org/scoring/scorer.bin" # External pathfinding scores source (optional, defaults to this URL on mainnet) #rgs_server_url = "https://rapidsync.lightningdevkit.org/snapshot/v2/" # Optional: RGS URL for rapid gossip sync #async_payments_role = "client" # Optional async payments role: "client" or "server" diff --git a/ldk-server/src/util/config.rs b/ldk-server/src/util/config.rs index fc2ee45b..a6d6914f 100644 --- a/ldk-server/src/util/config.rs +++ b/ldk-server/src/util/config.rs @@ -23,6 +23,8 @@ use log::LevelFilter; use serde::{Deserialize, Serialize}; const DEFAULT_GRPC_SERVICE_ADDRESS: &str = "127.0.0.1:3536"; +const DEFAULT_PATHFINDING_SCORES_SOURCE_URL: &str = + "https://rapidsync.lightningdevkit.org/scoring/scorer.bin"; const DEFAULT_LOG_MAX_SIZE_MB: u64 = 50; const DEFAULT_LOG_ROTATION_INTERVAL_HOURS: u64 = 24; const DEFAULT_LOG_MAX_FILES: usize = 5; @@ -482,7 +484,13 @@ impl ConfigBuilder { #[cfg(not(feature = "experimental-lsps2-support"))] let lsps2_service_config = None; - let pathfinding_scores_source_url = self.pathfinding_scores_source_url; + let pathfinding_scores_source_url = match self.pathfinding_scores_source_url { + Some(url) => Some(url), + None if network == Network::Bitcoin => { + Some(DEFAULT_PATHFINDING_SCORES_SOURCE_URL.to_string()) + }, + None => None, + }; let async_payments_role = self.async_payments_role.as_deref().map(parse_async_payments_role).transpose()?; @@ -960,7 +968,7 @@ pub struct ArgsConfig { #[arg( long, env = "LDK_SERVER_PATHFINDING_SCORES_SOURCE_URL", - help = "The external scores source that is merged into the local scoring system to improve routing." + help = "The external scores source that is merged into the local scoring system to improve routing. Defaults to https://rapidsync.lightningdevkit.org/scoring/scorer.bin on mainnet." )] pathfinding_scores_source_url: Option, @@ -1519,6 +1527,26 @@ mod tests { assert!(load_config(&args_config).is_ok()); } + #[test] + fn test_mainnet_defaults_pathfinding_scores_source_url() { + let storage_path = std::env::temp_dir(); + let config_file_name = "test_mainnet_pathfinding_scores_source_url.toml"; + + fs::write(storage_path.join(config_file_name), DEFAULT_CONFIG).unwrap(); + + let mut args_config = empty_args_config(); + args_config.config_file = + Some(storage_path.join(config_file_name).to_string_lossy().to_string()); + args_config.node_network = Some(Network::Bitcoin); + + let config = load_config(&args_config).unwrap(); + + assert_eq!( + config.pathfinding_scores_source_url, + Some(DEFAULT_PATHFINDING_SCORES_SOURCE_URL.to_string()) + ); + } + #[test] fn test_config_missing_fields_in_file() { let storage_path = std::env::temp_dir(); From b1f7c489684e58f1e88269adbc2187035bfd761a Mon Sep 17 00:00:00 2001 From: benthecarman Date: Tue, 21 Jul 2026 12:10:37 -0500 Subject: [PATCH 2/2] Allow disabling the scorer with an empty URL Treat an explicitly empty pathfinding scores source as absent so users can opt out of the mainnet default through config inputs. This commit was prepared with OpenAI Codex. --- contrib/ldk-server-config.toml | 2 +- ldk-server/src/util/config.rs | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/contrib/ldk-server-config.toml b/contrib/ldk-server-config.toml index 2f58970a..fb5cea7e 100644 --- a/contrib/ldk-server-config.toml +++ b/contrib/ldk-server-config.toml @@ -5,7 +5,7 @@ listening_addresses = ["localhost:9735"] # Lightning node listening address #announcement_addresses = ["54.3.7.81:9735"] # Lightning node announcement addresses #grpc_service_address = "127.0.0.1:3536" # LDK Server gRPC address (optional, defaults to 127.0.0.1:3536) alias = "ldk_server" # Lightning node alias -#pathfinding_scores_source_url = "https://rapidsync.lightningdevkit.org/scoring/scorer.bin" # External pathfinding scores source (optional, defaults to this URL on mainnet) +#pathfinding_scores_source_url = "https://rapidsync.lightningdevkit.org/scoring/scorer.bin" # External pathfinding scores source (optional, defaults to this URL on mainnet; set to "" to disable) #rgs_server_url = "https://rapidsync.lightningdevkit.org/snapshot/v2/" # Optional: RGS URL for rapid gossip sync #async_payments_role = "client" # Optional async payments role: "client" or "server" diff --git a/ldk-server/src/util/config.rs b/ldk-server/src/util/config.rs index a6d6914f..9d046dac 100644 --- a/ldk-server/src/util/config.rs +++ b/ldk-server/src/util/config.rs @@ -485,6 +485,7 @@ impl ConfigBuilder { let lsps2_service_config = None; let pathfinding_scores_source_url = match self.pathfinding_scores_source_url { + Some(url) if url.is_empty() => None, Some(url) => Some(url), None if network == Network::Bitcoin => { Some(DEFAULT_PATHFINDING_SCORES_SOURCE_URL.to_string()) @@ -968,7 +969,7 @@ pub struct ArgsConfig { #[arg( long, env = "LDK_SERVER_PATHFINDING_SCORES_SOURCE_URL", - help = "The external scores source that is merged into the local scoring system to improve routing. Defaults to https://rapidsync.lightningdevkit.org/scoring/scorer.bin on mainnet." + help = "The external scores source that is merged into the local scoring system to improve routing. Defaults to https://rapidsync.lightningdevkit.org/scoring/scorer.bin on mainnet. Set to an empty string to disable." )] pathfinding_scores_source_url: Option, @@ -1547,6 +1548,26 @@ mod tests { ); } + #[test] + fn test_empty_pathfinding_scores_source_url_disables_source() { + let storage_path = std::env::temp_dir(); + let config_file_name = "test_empty_pathfinding_scores_source_url.toml"; + let toml_config = DEFAULT_CONFIG.replace( + "alias = \"LDK Server\"", + "alias = \"LDK Server\"\npathfinding_scores_source_url = \"\"", + ); + fs::write(storage_path.join(config_file_name), toml_config).unwrap(); + + let mut args_config = empty_args_config(); + args_config.config_file = + Some(storage_path.join(config_file_name).to_string_lossy().to_string()); + args_config.node_network = Some(Network::Bitcoin); + + let config = load_config(&args_config).unwrap(); + + assert_eq!(config.pathfinding_scores_source_url, None); + } + #[test] fn test_config_missing_fields_in_file() { let storage_path = std::env::temp_dir();