diff --git a/ldk-server/ldk-server-config.toml b/ldk-server/ldk-server-config.toml index f4485e9..f7ada16 100644 --- a/ldk-server/ldk-server-config.toml +++ b/ldk-server/ldk-server-config.toml @@ -1,7 +1,8 @@ # Lightning node settings [node] network = "regtest" # Bitcoin network to use -listening_address = "localhost:3001" # Lightning node listening address +listening_addresses = ["localhost:3001"] # Lightning node listening addresses +announcement_addresses = ["54.3.7.81:3001"] # Lightning node announcement addresses rest_service_address = "127.0.0.1:3002" # LDK Server REST address api_key = "your-secret-api-key" # API key for authenticating REST requests @@ -18,7 +19,7 @@ file_path = "/tmp/ldk-server/ldk-server.log" # Log file path #key_path = "/path/to/tls.key" # Path to TLS private key, by default uses dir_path/tls.key hosts = ["example.com"] # Allowed hosts for TLS, will always include "localhost" and "127.0.0.1" -# Must set either bitcoind or esplora settings, but not both +# Must set one of bitcoind, electrum, or esplora # Bitcoin Core settings [bitcoind] diff --git a/ldk-server/src/main.rs b/ldk-server/src/main.rs index 934098f..038b219 100644 --- a/ldk-server/src/main.rs +++ b/ldk-server/src/main.rs @@ -101,7 +101,8 @@ fn main() { }; ldk_node_config.storage_dir_path = config_file.storage_dir_path.clone(); - ldk_node_config.listening_addresses = Some(vec![config_file.listening_addr]); + ldk_node_config.listening_addresses = config_file.listening_addrs; + ldk_node_config.announcement_addresses = config_file.announcement_addrs; ldk_node_config.network = config_file.network; let mut builder = Builder::from_config(ldk_node_config); diff --git a/ldk-server/src/util/config.rs b/ldk-server/src/util/config.rs index 4044f6a..2969084 100644 --- a/ldk-server/src/util/config.rs +++ b/ldk-server/src/util/config.rs @@ -22,7 +22,8 @@ use serde::{Deserialize, Serialize}; /// Configuration for LDK Server. #[derive(Debug)] pub struct Config { - pub listening_addr: SocketAddress, + pub listening_addrs: Option>, + pub announcement_addrs: Option>, pub alias: Option, pub network: Network, pub api_key: String, @@ -55,13 +56,40 @@ impl TryFrom for Config { type Error = io::Error; fn try_from(toml_config: TomlConfig) -> io::Result { - let listening_addr = - SocketAddress::from_str(&toml_config.node.listening_address).map_err(|e| { - io::Error::new( - io::ErrorKind::InvalidInput, - format!("Invalid listening address configured: {}", e), - ) - })?; + let listening_addrs = toml_config + .node + .listening_addresses + .map(|addresses| { + addresses + .into_iter() + .map(|addr| { + SocketAddress::from_str(&addr).map_err(|e| { + io::Error::new( + io::ErrorKind::InvalidInput, + format!("Invalid listening address configured: {}", e), + ) + }) + }) + .collect() + }) + .transpose()?; + let announcement_addrs = toml_config + .node + .announcement_addresses + .map(|addresses| { + addresses + .into_iter() + .map(|addr| { + SocketAddress::from_str(&addr).map_err(|e| { + io::Error::new( + io::ErrorKind::InvalidInput, + format!("Invalid announcement address configured: {}", e), + ) + }) + }) + .collect() + }) + .transpose()?; let rest_service_addr = SocketAddr::from_str(&toml_config.node.rest_service_address) .map_err(|e| { io::Error::new( @@ -161,7 +189,8 @@ impl TryFrom for Config { }); Ok(Config { - listening_addr, + listening_addrs, + announcement_addrs, network: toml_config.node.network, alias, rest_service_addr, @@ -195,7 +224,8 @@ pub struct TomlConfig { #[derive(Deserialize, Serialize)] struct NodeConfig { network: Network, - listening_address: String, + listening_addresses: Option>, + announcement_addresses: Option>, rest_service_address: String, alias: Option, api_key: String, @@ -331,7 +361,8 @@ mod tests { let toml_config = r#" [node] network = "regtest" - listening_address = "localhost:3001" + listening_addresses = ["localhost:3001"] + announcement_addresses = ["54.3.7.81:3001"] rest_service_address = "127.0.0.1:3002" alias = "LDK Server" api_key = "test_api_key" @@ -375,7 +406,8 @@ mod tests { let config = load_config(storage_path.join(config_file_name)).unwrap(); let expected = Config { - listening_addr: SocketAddress::from_str("localhost:3001").unwrap(), + listening_addrs: Some(vec![SocketAddress::from_str("localhost:3001").unwrap()]), + announcement_addrs: Some(vec![SocketAddress::from_str("54.3.7.81:3001").unwrap()]), alias: Some(NodeAlias(bytes)), network: Network::Regtest, rest_service_addr: SocketAddr::from_str("127.0.0.1:3002").unwrap(), @@ -407,7 +439,9 @@ mod tests { log_file_path: Some("/var/log/ldk-server.log".to_string()), }; - assert_eq!(config.listening_addr, expected.listening_addr); + assert_eq!(config.listening_addrs, expected.listening_addrs); + assert_eq!(config.announcement_addrs, expected.announcement_addrs); + assert_eq!(config.alias, expected.alias); assert_eq!(config.network, expected.network); assert_eq!(config.rest_service_addr, expected.rest_service_addr); assert_eq!(config.api_key, expected.api_key); @@ -424,13 +458,14 @@ mod tests { assert_eq!(config.rabbitmq_exchange_name, expected.rabbitmq_exchange_name); #[cfg(feature = "experimental-lsps2-support")] assert_eq!(config.lsps2_service_config.is_some(), expected.lsps2_service_config.is_some()); + assert_eq!(config.log_level, expected.log_level); + assert_eq!(config.log_file_path, expected.log_file_path); // Test case where only electrum is set let toml_config = r#" [node] network = "regtest" - listening_address = "localhost:3001" rest_service_address = "127.0.0.1:3002" alias = "LDK Server" api_key = "test_api_key" @@ -475,7 +510,6 @@ mod tests { let toml_config = r#" [node] network = "regtest" - listening_address = "localhost:3001" rest_service_address = "127.0.0.1:3002" alias = "LDK Server" api_key = "test_api_key" @@ -524,7 +558,6 @@ mod tests { let toml_config = r#" [node] network = "regtest" - listening_address = "localhost:3001" rest_service_address = "127.0.0.1:3002" alias = "LDK Server" api_key = "test_api_key"