Skip to content

Commit d05dec0

Browse files
Split bitcoind_rpc_address into bitcoind_rpc_host and bitcoind_rpc_port
This change replaces the single RPC address field with separate host and port fields, allowing hostname support and improving compatibility with containerized environments. Closes #66
1 parent 3caae74 commit d05dec0

File tree

3 files changed

+51
-35
lines changed

3 files changed

+51
-35
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ export LDK_SERVER_NODE_NETWORK=regtest
5858
export LDK_SERVER_NODE_LISTENING_ADDRESS=localhost:3001
5959
export LDK_SERVER_NODE_REST_SERVICE_ADDRESS=127.0.0.1:3002
6060
export LDK_SERVER_NODE_ALIAS=LDK-Server
61-
export LDK_SERVER_BITCOIND_RPC_ADDRESS=127.0.0.1:18443
61+
export LDK_SERVER_BITCOIND_RPC_HOST=127.0.0.1
62+
export LDK_SERVER_BITCOIND_RPC_PORT=18443
6263
export LDK_SERVER_BITCOIND_RPC_USER=your-rpc-user
6364
export LDK_SERVER_BITCOIND_RPC_PASSWORD=your-rpc-password
6465
export LDK_SERVER_STORAGE_DIR_PATH=/path/to/storage
@@ -72,7 +73,8 @@ cargo run --bin ldk-server -- \
7273
--node-listening-address localhost:3001 \
7374
--node-rest-service-address 127.0.0.1:3002 \
7475
--node-alias LDK-Server \
75-
--bitcoind-rpc-address 127.0.0.1:18443 \
76+
--bitcoind-rpc-host 127.0.0.1 \
77+
--bitcoind-rpc-port 18443 \
7678
--bitcoind-rpc-user your-rpc-user \
7779
--bitcoind-rpc-password your-rpc-password \
7880
--storage-dir-path /path/to/storage

ldk-server/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ fn main() {
6363
builder.set_log_facade_logger();
6464

6565
builder.set_chain_source_bitcoind_rpc(
66-
config_file.bitcoind_rpc_addr.ip().to_string(),
67-
config_file.bitcoind_rpc_addr.port(),
66+
config_file.bitcoind_rpc_host,
67+
config_file.bitcoind_rpc_port,
6868
config_file.bitcoind_rpc_user,
6969
config_file.bitcoind_rpc_password,
7070
);

ldk-server/src/util/config.rs

Lines changed: 45 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ pub struct Config {
1616
pub network: Network,
1717
pub rest_service_addr: SocketAddr,
1818
pub storage_dir_path: String,
19-
pub bitcoind_rpc_addr: SocketAddr,
19+
pub bitcoind_rpc_host: String,
20+
pub bitcoind_rpc_port: u16,
2021
pub bitcoind_rpc_user: String,
2122
pub bitcoind_rpc_password: String,
2223
pub rabbitmq_connection_string: String,
@@ -54,7 +55,8 @@ struct DiskConfig {
5455

5556
#[derive(Deserialize, Serialize)]
5657
struct BitcoindConfig {
57-
rpc_address: Option<String>,
58+
rpc_host: Option<String>,
59+
rpc_port: Option<u16>,
5860
rpc_user: Option<String>,
5961
rpc_password: Option<String>,
6062
}
@@ -129,8 +131,11 @@ pub struct ArgsConfig {
129131
#[arg(long, env = "LDK_SERVER_NODE_ALIAS")]
130132
node_alias: Option<String>,
131133

132-
#[arg(long, env = "LDK_SERVER_BITCOIND_RPC_ADDRESS")]
133-
bitcoind_rpc_address: Option<String>,
134+
#[arg(long, env = "LDK_SERVER_BITCOIND_RPC_HOST")]
135+
bitcoind_rpc_host: Option<String>,
136+
137+
#[arg(long, env = "LDK_SERVER_BITCOIND_RPC_PORT")]
138+
bitcoind_rpc_port: Option<u16>,
134139

135140
#[arg(long, env = "LDK_SERVER_BITCOIND_RPC_USER")]
136141
bitcoind_rpc_user: Option<String>,
@@ -244,17 +249,19 @@ pub fn load_config(args_config: &ArgsConfig) -> io::Result<Config> {
244249

245250
// Bitcoind
246251
let bitcoind = toml_config.as_ref().and_then(|t| t.bitcoind.as_ref());
247-
let bitcoind_rpc_addr_str = match args_config
248-
.bitcoind_rpc_address
252+
let bitcoind_rpc_host = match args_config
253+
.bitcoind_rpc_host
249254
.as_deref()
250-
.or(bitcoind.and_then(|b| b.rpc_address.as_deref()))
255+
.or(bitcoind.and_then(|b| b.rpc_host.as_deref()))
251256
{
252-
Some(addr) => addr,
253-
None => return Err(missing_field_err("bitcoind_rpc_address")),
257+
Some(host) => host.to_string(),
258+
None => return Err(missing_field_err("bitcoind_rpc_host")),
254259
};
255-
let bitcoind_rpc_addr = SocketAddr::from_str(bitcoind_rpc_addr_str).map_err(|e| {
256-
io::Error::new(io::ErrorKind::InvalidInput, format!("Invalid bitcoind_rpc_address: {}", e))
257-
})?;
260+
let bitcoind_rpc_port =
261+
match args_config.bitcoind_rpc_port.or(bitcoind.and_then(|b| b.rpc_port)) {
262+
Some(port) => port,
263+
None => return Err(missing_field_err("bitcoind_rpc_port")),
264+
};
258265
let bitcoind_rpc_user = match args_config
259266
.bitcoind_rpc_user
260267
.as_deref()
@@ -287,7 +294,8 @@ pub fn load_config(args_config: &ArgsConfig) -> io::Result<Config> {
287294
network,
288295
rest_service_addr,
289296
storage_dir_path,
290-
bitcoind_rpc_addr,
297+
bitcoind_rpc_host,
298+
bitcoind_rpc_port,
291299
bitcoind_rpc_user,
292300
bitcoind_rpc_password,
293301
rabbitmq_connection_string,
@@ -346,7 +354,8 @@ mod tests {
346354
dir_path = "/tmp"
347355
348356
[bitcoind]
349-
rpc_address = "127.0.0.1:8332"
357+
rpc_host = "127.0.0.1"
358+
rpc_port = 8332
350359
rpc_user = "bitcoind-testuser"
351360
rpc_password = "bitcoind-testpassword"
352361
@@ -371,7 +380,8 @@ mod tests {
371380
node_network: Some(Network::Regtest),
372381
node_listening_address: Some(String::from("localhost:3008")),
373382
node_rest_service_address: Some(String::from("127.0.0.1:3009")),
374-
bitcoind_rpc_address: Some(String::from("127.0.1.9:18443")),
383+
bitcoind_rpc_host: Some(String::from("127.0.1.9")),
384+
bitcoind_rpc_port: Some(18443),
375385
bitcoind_rpc_user: Some(String::from("bitcoind-testuser_cli")),
376386
bitcoind_rpc_password: Some(String::from("bitcoind-testpassword_cli")),
377387
storage_dir_path: Some(String::from("/tmp_cli")),
@@ -404,7 +414,8 @@ mod tests {
404414
node_network: None,
405415
node_listening_address: None,
406416
node_rest_service_address: None,
407-
bitcoind_rpc_address: None,
417+
bitcoind_rpc_host: None,
418+
bitcoind_rpc_port: None,
408419
bitcoind_rpc_user: None,
409420
bitcoind_rpc_password: None,
410421
storage_dir_path: None,
@@ -420,7 +431,8 @@ mod tests {
420431
network: Network::Regtest,
421432
rest_service_addr: SocketAddr::from_str("127.0.0.1:3002").unwrap(),
422433
storage_dir_path: "/tmp".to_string(),
423-
bitcoind_rpc_addr: SocketAddr::from_str("127.0.0.1:8332").unwrap(),
434+
bitcoind_rpc_host: "127.0.0.1".to_string(),
435+
bitcoind_rpc_port: 8332,
424436
bitcoind_rpc_user: "bitcoind-testuser".to_string(),
425437
bitcoind_rpc_password: "bitcoind-testpassword".to_string(),
426438
rabbitmq_connection_string: "rabbitmq_connection_string".to_string(),
@@ -442,7 +454,8 @@ mod tests {
442454
assert_eq!(config.network, expected.network);
443455
assert_eq!(config.rest_service_addr, expected.rest_service_addr);
444456
assert_eq!(config.storage_dir_path, expected.storage_dir_path);
445-
assert_eq!(config.bitcoind_rpc_addr, expected.bitcoind_rpc_addr);
457+
assert_eq!(config.bitcoind_rpc_host, expected.bitcoind_rpc_host);
458+
assert_eq!(config.bitcoind_rpc_port, expected.bitcoind_rpc_port);
446459
assert_eq!(config.bitcoind_rpc_user, expected.bitcoind_rpc_user);
447460
assert_eq!(config.bitcoind_rpc_password, expected.bitcoind_rpc_password);
448461
assert_eq!(config.rabbitmq_connection_string, expected.rabbitmq_connection_string);
@@ -461,7 +474,8 @@ mod tests {
461474
node_network: None,
462475
node_listening_address: None,
463476
node_rest_service_address: None,
464-
bitcoind_rpc_address: None,
477+
bitcoind_rpc_host: None,
478+
bitcoind_rpc_port: None,
465479
bitcoind_rpc_user: None,
466480
bitcoind_rpc_password: None,
467481
storage_dir_path: None,
@@ -503,7 +517,8 @@ mod tests {
503517
// The order here is important: it is the reverse of the validation order in `load_config`
504518
validate_missing!("rpc_password", missing_field_msg("bitcoind_rpc_password"));
505519
validate_missing!("rpc_user", missing_field_msg("bitcoind_rpc_user"));
506-
validate_missing!("rpc_address", missing_field_msg("bitcoind_rpc_address"));
520+
validate_missing!("rpc_port", missing_field_msg("bitcoind_rpc_port"));
521+
validate_missing!("rpc_host", missing_field_msg("bitcoind_rpc_host"));
507522
validate_missing!("dir_path", missing_field_msg("storage_dir_path"));
508523
validate_missing!("rest_service_address", missing_field_msg("rest_service_address"));
509524
validate_missing!("listening_address", missing_field_msg("node_listening_address"));
@@ -536,10 +551,8 @@ mod tests {
536551
.unwrap(),
537552
alias: Some(parse_alias(args_config.node_alias.as_deref().unwrap())),
538553
storage_dir_path: args_config.storage_dir_path.unwrap(),
539-
bitcoind_rpc_addr: SocketAddr::from_str(
540-
args_config.bitcoind_rpc_address.as_deref().unwrap(),
541-
)
542-
.unwrap(),
554+
bitcoind_rpc_host: args_config.bitcoind_rpc_host.unwrap(),
555+
bitcoind_rpc_port: args_config.bitcoind_rpc_port.unwrap(),
543556
bitcoind_rpc_user: args_config.bitcoind_rpc_user.unwrap(),
544557
bitcoind_rpc_password: args_config.bitcoind_rpc_password.unwrap(),
545558
rabbitmq_connection_string: String::new(),
@@ -551,7 +564,8 @@ mod tests {
551564
assert_eq!(config.network, expected.network);
552565
assert_eq!(config.rest_service_addr, expected.rest_service_addr);
553566
assert_eq!(config.storage_dir_path, expected.storage_dir_path);
554-
assert_eq!(config.bitcoind_rpc_addr, expected.bitcoind_rpc_addr);
567+
assert_eq!(config.bitcoind_rpc_host, expected.bitcoind_rpc_host);
568+
assert_eq!(config.bitcoind_rpc_port, expected.bitcoind_rpc_port);
555569
assert_eq!(config.bitcoind_rpc_user, expected.bitcoind_rpc_user);
556570
assert_eq!(config.bitcoind_rpc_password, expected.bitcoind_rpc_password);
557571
assert_eq!(config.rabbitmq_connection_string, expected.rabbitmq_connection_string);
@@ -578,7 +592,8 @@ mod tests {
578592
// The order here is important: it is the reverse of the validation order in `load_config`
579593
validate_missing!(bitcoind_rpc_password, missing_field_msg("bitcoind_rpc_password"));
580594
validate_missing!(bitcoind_rpc_user, missing_field_msg("bitcoind_rpc_user"));
581-
validate_missing!(bitcoind_rpc_address, missing_field_msg("bitcoind_rpc_address"));
595+
validate_missing!(bitcoind_rpc_port, missing_field_msg("bitcoind_rpc_port"));
596+
validate_missing!(bitcoind_rpc_host, missing_field_msg("bitcoind_rpc_host"));
582597
validate_missing!(storage_dir_path, missing_field_msg("storage_dir_path"));
583598
validate_missing!(node_rest_service_address, missing_field_msg("rest_service_address"));
584599
validate_missing!(node_listening_address, missing_field_msg("node_listening_address"));
@@ -608,10 +623,8 @@ mod tests {
608623
.unwrap(),
609624
alias: Some(parse_alias(args_config.node_alias.as_deref().unwrap())),
610625
storage_dir_path: args_config.storage_dir_path.unwrap(),
611-
bitcoind_rpc_addr: SocketAddr::from_str(
612-
args_config.bitcoind_rpc_address.as_deref().unwrap(),
613-
)
614-
.unwrap(),
626+
bitcoind_rpc_host: args_config.bitcoind_rpc_host.unwrap(),
627+
bitcoind_rpc_port: args_config.bitcoind_rpc_port.unwrap(),
615628
bitcoind_rpc_user: args_config.bitcoind_rpc_user.unwrap(),
616629
bitcoind_rpc_password: args_config.bitcoind_rpc_password.unwrap(),
617630
rabbitmq_connection_string: "rabbitmq_connection_string".to_string(),
@@ -633,7 +646,8 @@ mod tests {
633646
assert_eq!(config.network, expected.network);
634647
assert_eq!(config.rest_service_addr, expected.rest_service_addr);
635648
assert_eq!(config.storage_dir_path, expected.storage_dir_path);
636-
assert_eq!(config.bitcoind_rpc_addr, expected.bitcoind_rpc_addr);
649+
assert_eq!(config.bitcoind_rpc_host, expected.bitcoind_rpc_host);
650+
assert_eq!(config.bitcoind_rpc_port, expected.bitcoind_rpc_port);
637651
assert_eq!(config.bitcoind_rpc_user, expected.bitcoind_rpc_user);
638652
assert_eq!(config.bitcoind_rpc_password, expected.bitcoind_rpc_password);
639653
assert_eq!(config.rabbitmq_connection_string, expected.rabbitmq_connection_string);

0 commit comments

Comments
 (0)