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
5 changes: 3 additions & 2 deletions ldk-server/ldk-server-config.toml
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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]
Expand Down
3 changes: 2 additions & 1 deletion ldk-server/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
65 changes: 49 additions & 16 deletions ldk-server/src/util/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<Vec<SocketAddress>>,
pub announcement_addrs: Option<Vec<SocketAddress>>,
pub alias: Option<NodeAlias>,
pub network: Network,
pub api_key: String,
Expand Down Expand Up @@ -55,13 +56,40 @@ impl TryFrom<TomlConfig> for Config {
type Error = io::Error;

fn try_from(toml_config: TomlConfig) -> io::Result<Self> {
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(
Expand Down Expand Up @@ -161,7 +189,8 @@ impl TryFrom<TomlConfig> for Config {
});

Ok(Config {
listening_addr,
listening_addrs,
announcement_addrs,
network: toml_config.node.network,
alias,
rest_service_addr,
Expand Down Expand Up @@ -195,7 +224,8 @@ pub struct TomlConfig {
#[derive(Deserialize, Serialize)]
struct NodeConfig {
network: Network,
listening_address: String,
listening_addresses: Option<Vec<String>>,
announcement_addresses: Option<Vec<String>>,
rest_service_address: String,
alias: Option<String>,
api_key: String,
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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(),
Expand Down Expand Up @@ -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);
Expand All @@ -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"
Expand Down Expand Up @@ -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"
Expand Down Expand Up @@ -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"
Expand Down