Skip to content

Commit 7cf7e98

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 5242498 commit 7cf7e98

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>,
@@ -239,17 +244,19 @@ pub fn load_config(args_config: &ArgsConfig) -> io::Result<Config> {
239244

240245
// Bitcoind
241246
let bitcoind = toml_config.as_ref().and_then(|t| t.bitcoind.as_ref());
242-
let bitcoind_rpc_addr_str = match args_config
243-
.bitcoind_rpc_address
247+
let bitcoind_rpc_host = match args_config
248+
.bitcoind_rpc_host
244249
.as_deref()
245-
.or(bitcoind.and_then(|b| b.rpc_address.as_deref()))
250+
.or(bitcoind.and_then(|b| b.rpc_host.as_deref()))
246251
{
247-
Some(addr) => addr,
248-
None => return Err(missing_field_err("bitcoind_rpc_address")),
252+
Some(host) => host.to_string(),
253+
None => return Err(missing_field_err("bitcoind_rpc_host")),
249254
};
250-
let bitcoind_rpc_addr = SocketAddr::from_str(bitcoind_rpc_addr_str).map_err(|e| {
251-
io::Error::new(io::ErrorKind::InvalidInput, format!("Invalid bitcoind_rpc_address: {}", e))
252-
})?;
255+
let bitcoind_rpc_port =
256+
match args_config.bitcoind_rpc_port.or(bitcoind.and_then(|b| b.rpc_port)) {
257+
Some(port) => port,
258+
None => return Err(missing_field_err("bitcoind_rpc_port")),
259+
};
253260
let bitcoind_rpc_user = match args_config
254261
.bitcoind_rpc_user
255262
.as_deref()
@@ -282,7 +289,8 @@ pub fn load_config(args_config: &ArgsConfig) -> io::Result<Config> {
282289
network,
283290
rest_service_addr,
284291
storage_dir_path,
285-
bitcoind_rpc_addr,
292+
bitcoind_rpc_host,
293+
bitcoind_rpc_port,
286294
bitcoind_rpc_user,
287295
bitcoind_rpc_password,
288296
rabbitmq_connection_string,
@@ -351,7 +359,8 @@ mod tests {
351359
dir_path = "/tmp"
352360
353361
[bitcoind]
354-
rpc_address = "127.0.0.1:8332"
362+
rpc_host = "127.0.0.1"
363+
rpc_port = 8332
355364
rpc_user = "bitcoind-testuser"
356365
rpc_password = "bitcoind-testpassword"
357366
@@ -376,7 +385,8 @@ mod tests {
376385
node_network: Some(Network::Regtest),
377386
node_listening_address: Some(String::from("localhost:3008")),
378387
node_rest_service_address: Some(String::from("127.0.0.1:3009")),
379-
bitcoind_rpc_address: Some(String::from("127.0.1.9:18443")),
388+
bitcoind_rpc_host: Some(String::from("127.0.1.9")),
389+
bitcoind_rpc_port: Some(18443),
380390
bitcoind_rpc_user: Some(String::from("bitcoind-testuser_cli")),
381391
bitcoind_rpc_password: Some(String::from("bitcoind-testpassword_cli")),
382392
storage_dir_path: Some(String::from("/tmp_cli")),
@@ -409,7 +419,8 @@ mod tests {
409419
node_network: None,
410420
node_listening_address: None,
411421
node_rest_service_address: None,
412-
bitcoind_rpc_address: None,
422+
bitcoind_rpc_host: None,
423+
bitcoind_rpc_port: None,
413424
bitcoind_rpc_user: None,
414425
bitcoind_rpc_password: None,
415426
storage_dir_path: None,
@@ -425,7 +436,8 @@ mod tests {
425436
network: Network::Regtest,
426437
rest_service_addr: SocketAddr::from_str("127.0.0.1:3002").unwrap(),
427438
storage_dir_path: "/tmp".to_string(),
428-
bitcoind_rpc_addr: SocketAddr::from_str("127.0.0.1:8332").unwrap(),
439+
bitcoind_rpc_host: "127.0.0.1".to_string(),
440+
bitcoind_rpc_port: 8332,
429441
bitcoind_rpc_user: "bitcoind-testuser".to_string(),
430442
bitcoind_rpc_password: "bitcoind-testpassword".to_string(),
431443
rabbitmq_connection_string: "rabbitmq_connection_string".to_string(),
@@ -447,7 +459,8 @@ mod tests {
447459
assert_eq!(config.network, expected.network);
448460
assert_eq!(config.rest_service_addr, expected.rest_service_addr);
449461
assert_eq!(config.storage_dir_path, expected.storage_dir_path);
450-
assert_eq!(config.bitcoind_rpc_addr, expected.bitcoind_rpc_addr);
462+
assert_eq!(config.bitcoind_rpc_host, expected.bitcoind_rpc_host);
463+
assert_eq!(config.bitcoind_rpc_port, expected.bitcoind_rpc_port);
451464
assert_eq!(config.bitcoind_rpc_user, expected.bitcoind_rpc_user);
452465
assert_eq!(config.bitcoind_rpc_password, expected.bitcoind_rpc_password);
453466
assert_eq!(config.rabbitmq_connection_string, expected.rabbitmq_connection_string);
@@ -466,7 +479,8 @@ mod tests {
466479
node_network: None,
467480
node_listening_address: None,
468481
node_rest_service_address: None,
469-
bitcoind_rpc_address: None,
482+
bitcoind_rpc_host: None,
483+
bitcoind_rpc_port: None,
470484
bitcoind_rpc_user: None,
471485
bitcoind_rpc_password: None,
472486
storage_dir_path: None,
@@ -508,7 +522,8 @@ mod tests {
508522
// The order here is important: it is the reverse of the validation order in `load_config`
509523
validate_missing!("rpc_password", missing_field_msg("bitcoind_rpc_password"));
510524
validate_missing!("rpc_user", missing_field_msg("bitcoind_rpc_user"));
511-
validate_missing!("rpc_address", missing_field_msg("bitcoind_rpc_address"));
525+
validate_missing!("rpc_port", missing_field_msg("bitcoind_rpc_port"));
526+
validate_missing!("rpc_host", missing_field_msg("bitcoind_rpc_host"));
512527
validate_missing!("dir_path", missing_field_msg("storage_dir_path"));
513528
validate_missing!("rest_service_address", missing_field_msg("rest_service_address"));
514529
validate_missing!("listening_address", missing_field_msg("node_listening_address"));
@@ -541,10 +556,8 @@ mod tests {
541556
.unwrap(),
542557
alias: Some(parse_alias(args_config.node_alias.as_deref().unwrap())),
543558
storage_dir_path: args_config.storage_dir_path.unwrap(),
544-
bitcoind_rpc_addr: SocketAddr::from_str(
545-
args_config.bitcoind_rpc_address.as_deref().unwrap(),
546-
)
547-
.unwrap(),
559+
bitcoind_rpc_host: args_config.bitcoind_rpc_host.unwrap(),
560+
bitcoind_rpc_port: args_config.bitcoind_rpc_port.unwrap(),
548561
bitcoind_rpc_user: args_config.bitcoind_rpc_user.unwrap(),
549562
bitcoind_rpc_password: args_config.bitcoind_rpc_password.unwrap(),
550563
rabbitmq_connection_string: String::new(),
@@ -556,7 +569,8 @@ mod tests {
556569
assert_eq!(config.network, expected.network);
557570
assert_eq!(config.rest_service_addr, expected.rest_service_addr);
558571
assert_eq!(config.storage_dir_path, expected.storage_dir_path);
559-
assert_eq!(config.bitcoind_rpc_addr, expected.bitcoind_rpc_addr);
572+
assert_eq!(config.bitcoind_rpc_host, expected.bitcoind_rpc_host);
573+
assert_eq!(config.bitcoind_rpc_port, expected.bitcoind_rpc_port);
560574
assert_eq!(config.bitcoind_rpc_user, expected.bitcoind_rpc_user);
561575
assert_eq!(config.bitcoind_rpc_password, expected.bitcoind_rpc_password);
562576
assert_eq!(config.rabbitmq_connection_string, expected.rabbitmq_connection_string);
@@ -583,7 +597,8 @@ mod tests {
583597
// The order here is important: it is the reverse of the validation order in `load_config`
584598
validate_missing!(bitcoind_rpc_password, missing_field_msg("bitcoind_rpc_password"));
585599
validate_missing!(bitcoind_rpc_user, missing_field_msg("bitcoind_rpc_user"));
586-
validate_missing!(bitcoind_rpc_address, missing_field_msg("bitcoind_rpc_address"));
600+
validate_missing!(bitcoind_rpc_port, missing_field_msg("bitcoind_rpc_port"));
601+
validate_missing!(bitcoind_rpc_host, missing_field_msg("bitcoind_rpc_host"));
587602
validate_missing!(storage_dir_path, missing_field_msg("storage_dir_path"));
588603
validate_missing!(node_rest_service_address, missing_field_msg("rest_service_address"));
589604
validate_missing!(node_listening_address, missing_field_msg("node_listening_address"));
@@ -613,10 +628,8 @@ mod tests {
613628
.unwrap(),
614629
alias: Some(parse_alias(args_config.node_alias.as_deref().unwrap())),
615630
storage_dir_path: args_config.storage_dir_path.unwrap(),
616-
bitcoind_rpc_addr: SocketAddr::from_str(
617-
args_config.bitcoind_rpc_address.as_deref().unwrap(),
618-
)
619-
.unwrap(),
631+
bitcoind_rpc_host: args_config.bitcoind_rpc_host.unwrap(),
632+
bitcoind_rpc_port: args_config.bitcoind_rpc_port.unwrap(),
620633
bitcoind_rpc_user: args_config.bitcoind_rpc_user.unwrap(),
621634
bitcoind_rpc_password: args_config.bitcoind_rpc_password.unwrap(),
622635
rabbitmq_connection_string: "rabbitmq_connection_string".to_string(),
@@ -638,7 +651,8 @@ mod tests {
638651
assert_eq!(config.network, expected.network);
639652
assert_eq!(config.rest_service_addr, expected.rest_service_addr);
640653
assert_eq!(config.storage_dir_path, expected.storage_dir_path);
641-
assert_eq!(config.bitcoind_rpc_addr, expected.bitcoind_rpc_addr);
654+
assert_eq!(config.bitcoind_rpc_host, expected.bitcoind_rpc_host);
655+
assert_eq!(config.bitcoind_rpc_port, expected.bitcoind_rpc_port);
642656
assert_eq!(config.bitcoind_rpc_user, expected.bitcoind_rpc_user);
643657
assert_eq!(config.bitcoind_rpc_password, expected.bitcoind_rpc_password);
644658
assert_eq!(config.rabbitmq_connection_string, expected.rabbitmq_connection_string);

0 commit comments

Comments
 (0)