Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion contrib/ldk-server-config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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; 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"

Expand Down
53 changes: 51 additions & 2 deletions ldk-server/src/util/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -482,7 +484,14 @@ 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) if url.is_empty() => None,
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()?;
Expand Down Expand Up @@ -960,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."
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<String>,

Expand Down Expand Up @@ -1519,6 +1528,46 @@ 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_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();
Expand Down