Skip to content

Commit a93ee9f

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 juntar com o segundo commit
1 parent 5e63d24 commit a93ee9f

File tree

3 files changed

+52
-39
lines changed

3 files changed

+52
-39
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 & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,9 @@ fn main() {
6262
let mut builder = Builder::from_config(ldk_node_config);
6363
builder.set_log_facade_logger();
6464

65-
let bitcoind_rpc_addr = config_file.bitcoind_rpc_addr;
66-
6765
builder.set_chain_source_bitcoind_rpc(
68-
bitcoind_rpc_addr.ip().to_string(),
69-
bitcoind_rpc_addr.port(),
66+
config_file.bitcoind_rpc_host,
67+
config_file.bitcoind_rpc_port,
7068
config_file.bitcoind_rpc_user,
7169
config_file.bitcoind_rpc_password,
7270
);

ldk-server/src/util/config.rs

Lines changed: 46 additions & 33 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>,
@@ -241,17 +246,18 @@ pub fn load_config(args_config: &ArgsConfig) -> io::Result<Config> {
241246

242247
// Bitcoind
243248
let bitcoind = toml_config.as_ref().and_then(|t| t.bitcoind.as_ref());
244-
let bitcoind_rpc_addr_str = match args_config
245-
.bitcoind_rpc_address
249+
let bitcoind_rpc_host = args_config
250+
.bitcoind_rpc_host
246251
.as_deref()
247-
.or(bitcoind.and_then(|b| b.rpc_address.as_deref()))
248-
{
249-
Some(addr) => addr,
250-
None => return Err(missing_field_err("bitcoind_rpc_address")),
251-
};
252-
let bitcoind_rpc_addr = SocketAddr::from_str(bitcoind_rpc_addr_str).map_err(|e| {
253-
io::Error::new(io::ErrorKind::InvalidInput, format!("Invalid bitcoind_rpc_address: {}", e))
254-
})?;
252+
.or_else(|| bitcoind.and_then(|b| b.rpc_host.as_deref()))
253+
.ok_or_else(|| missing_field_err("bitcoind_rpc_host"))?
254+
.to_string();
255+
256+
let bitcoind_rpc_port = args_config
257+
.bitcoind_rpc_port
258+
.or_else(|| bitcoind.and_then(|b| b.rpc_port))
259+
.ok_or_else(|| missing_field_err("bitcoind_rpc_port"))?;
260+
255261
let bitcoind_rpc_user = args_config
256262
.bitcoind_rpc_user
257263
.as_deref()
@@ -281,7 +287,8 @@ pub fn load_config(args_config: &ArgsConfig) -> io::Result<Config> {
281287
network,
282288
rest_service_addr,
283289
storage_dir_path,
284-
bitcoind_rpc_addr,
290+
bitcoind_rpc_host,
291+
bitcoind_rpc_port,
285292
bitcoind_rpc_user,
286293
bitcoind_rpc_password,
287294
rabbitmq_connection_string,
@@ -350,7 +357,8 @@ mod tests {
350357
dir_path = "/tmp"
351358
352359
[bitcoind]
353-
rpc_address = "127.0.0.1:8332"
360+
rpc_host = "127.0.0.1"
361+
rpc_port = 8332
354362
rpc_user = "bitcoind-testuser"
355363
rpc_password = "bitcoind-testpassword"
356364
@@ -375,7 +383,8 @@ mod tests {
375383
node_network: Some(Network::Regtest),
376384
node_listening_address: Some(String::from("localhost:3008")),
377385
node_rest_service_address: Some(String::from("127.0.0.1:3009")),
378-
bitcoind_rpc_address: Some(String::from("127.0.1.9:18443")),
386+
bitcoind_rpc_host: Some(String::from("127.0.1.9")),
387+
bitcoind_rpc_port: Some(18443),
379388
bitcoind_rpc_user: Some(String::from("bitcoind-testuser_cli")),
380389
bitcoind_rpc_password: Some(String::from("bitcoind-testpassword_cli")),
381390
storage_dir_path: Some(String::from("/tmp_cli")),
@@ -408,7 +417,8 @@ mod tests {
408417
node_network: None,
409418
node_listening_address: None,
410419
node_rest_service_address: None,
411-
bitcoind_rpc_address: None,
420+
bitcoind_rpc_host: None,
421+
bitcoind_rpc_port: None,
412422
bitcoind_rpc_user: None,
413423
bitcoind_rpc_password: None,
414424
storage_dir_path: None,
@@ -424,7 +434,8 @@ mod tests {
424434
network: Network::Regtest,
425435
rest_service_addr: SocketAddr::from_str("127.0.0.1:3002").unwrap(),
426436
storage_dir_path: "/tmp".to_string(),
427-
bitcoind_rpc_addr: SocketAddr::from_str("127.0.0.1:8332").unwrap(),
437+
bitcoind_rpc_host: "127.0.0.1".to_string(),
438+
bitcoind_rpc_port: 8332,
428439
bitcoind_rpc_user: "bitcoind-testuser".to_string(),
429440
bitcoind_rpc_password: "bitcoind-testpassword".to_string(),
430441
rabbitmq_connection_string: "rabbitmq_connection_string".to_string(),
@@ -446,7 +457,8 @@ mod tests {
446457
assert_eq!(config.network, expected.network);
447458
assert_eq!(config.rest_service_addr, expected.rest_service_addr);
448459
assert_eq!(config.storage_dir_path, expected.storage_dir_path);
449-
assert_eq!(config.bitcoind_rpc_addr, expected.bitcoind_rpc_addr);
460+
assert_eq!(config.bitcoind_rpc_host, expected.bitcoind_rpc_host);
461+
assert_eq!(config.bitcoind_rpc_port, expected.bitcoind_rpc_port);
450462
assert_eq!(config.bitcoind_rpc_user, expected.bitcoind_rpc_user);
451463
assert_eq!(config.bitcoind_rpc_password, expected.bitcoind_rpc_password);
452464
assert_eq!(config.rabbitmq_connection_string, expected.rabbitmq_connection_string);
@@ -465,7 +477,8 @@ mod tests {
465477
node_network: None,
466478
node_listening_address: None,
467479
node_rest_service_address: None,
468-
bitcoind_rpc_address: None,
480+
bitcoind_rpc_host: None,
481+
bitcoind_rpc_port: None,
469482
bitcoind_rpc_user: None,
470483
bitcoind_rpc_password: None,
471484
storage_dir_path: None,
@@ -507,7 +520,8 @@ mod tests {
507520
// The order here is important: it is the reverse of the validation order in `load_config`
508521
validate_missing!("rpc_password", missing_field_msg("bitcoind_rpc_password"));
509522
validate_missing!("rpc_user", missing_field_msg("bitcoind_rpc_user"));
510-
validate_missing!("rpc_address", missing_field_msg("bitcoind_rpc_address"));
523+
validate_missing!("rpc_port", missing_field_msg("bitcoind_rpc_port"));
524+
validate_missing!("rpc_host", missing_field_msg("bitcoind_rpc_host"));
511525
validate_missing!("dir_path", missing_field_msg("storage_dir_path"));
512526
validate_missing!("rest_service_address", missing_field_msg("rest_service_address"));
513527
validate_missing!("listening_address", missing_field_msg("node_listening_address"));
@@ -540,10 +554,8 @@ mod tests {
540554
.unwrap(),
541555
alias: Some(parse_alias(args_config.node_alias.as_deref().unwrap())),
542556
storage_dir_path: args_config.storage_dir_path.unwrap(),
543-
bitcoind_rpc_addr: SocketAddr::from_str(
544-
args_config.bitcoind_rpc_address.as_deref().unwrap(),
545-
)
546-
.unwrap(),
557+
bitcoind_rpc_host: args_config.bitcoind_rpc_host.unwrap(),
558+
bitcoind_rpc_port: args_config.bitcoind_rpc_port.unwrap(),
547559
bitcoind_rpc_user: args_config.bitcoind_rpc_user.unwrap(),
548560
bitcoind_rpc_password: args_config.bitcoind_rpc_password.unwrap(),
549561
rabbitmq_connection_string: String::new(),
@@ -555,7 +567,8 @@ mod tests {
555567
assert_eq!(config.network, expected.network);
556568
assert_eq!(config.rest_service_addr, expected.rest_service_addr);
557569
assert_eq!(config.storage_dir_path, expected.storage_dir_path);
558-
assert_eq!(config.bitcoind_rpc_addr, expected.bitcoind_rpc_addr);
570+
assert_eq!(config.bitcoind_rpc_host, expected.bitcoind_rpc_host);
571+
assert_eq!(config.bitcoind_rpc_port, expected.bitcoind_rpc_port);
559572
assert_eq!(config.bitcoind_rpc_user, expected.bitcoind_rpc_user);
560573
assert_eq!(config.bitcoind_rpc_password, expected.bitcoind_rpc_password);
561574
assert_eq!(config.rabbitmq_connection_string, expected.rabbitmq_connection_string);
@@ -582,7 +595,8 @@ mod tests {
582595
// The order here is important: it is the reverse of the validation order in `load_config`
583596
validate_missing!(bitcoind_rpc_password, missing_field_msg("bitcoind_rpc_password"));
584597
validate_missing!(bitcoind_rpc_user, missing_field_msg("bitcoind_rpc_user"));
585-
validate_missing!(bitcoind_rpc_address, missing_field_msg("bitcoind_rpc_address"));
598+
validate_missing!(bitcoind_rpc_port, missing_field_msg("bitcoind_rpc_port"));
599+
validate_missing!(bitcoind_rpc_host, missing_field_msg("bitcoind_rpc_host"));
586600
validate_missing!(storage_dir_path, missing_field_msg("storage_dir_path"));
587601
validate_missing!(node_rest_service_address, missing_field_msg("rest_service_address"));
588602
validate_missing!(node_listening_address, missing_field_msg("node_listening_address"));
@@ -612,10 +626,8 @@ mod tests {
612626
.unwrap(),
613627
alias: Some(parse_alias(args_config.node_alias.as_deref().unwrap())),
614628
storage_dir_path: args_config.storage_dir_path.unwrap(),
615-
bitcoind_rpc_addr: SocketAddr::from_str(
616-
args_config.bitcoind_rpc_address.as_deref().unwrap(),
617-
)
618-
.unwrap(),
629+
bitcoind_rpc_host: args_config.bitcoind_rpc_host.unwrap(),
630+
bitcoind_rpc_port: args_config.bitcoind_rpc_port.unwrap(),
619631
bitcoind_rpc_user: args_config.bitcoind_rpc_user.unwrap(),
620632
bitcoind_rpc_password: args_config.bitcoind_rpc_password.unwrap(),
621633
rabbitmq_connection_string: "rabbitmq_connection_string".to_string(),
@@ -637,7 +649,8 @@ mod tests {
637649
assert_eq!(config.network, expected.network);
638650
assert_eq!(config.rest_service_addr, expected.rest_service_addr);
639651
assert_eq!(config.storage_dir_path, expected.storage_dir_path);
640-
assert_eq!(config.bitcoind_rpc_addr, expected.bitcoind_rpc_addr);
652+
assert_eq!(config.bitcoind_rpc_host, expected.bitcoind_rpc_host);
653+
assert_eq!(config.bitcoind_rpc_port, expected.bitcoind_rpc_port);
641654
assert_eq!(config.bitcoind_rpc_user, expected.bitcoind_rpc_user);
642655
assert_eq!(config.bitcoind_rpc_password, expected.bitcoind_rpc_password);
643656
assert_eq!(config.rabbitmq_connection_string, expected.rabbitmq_connection_string);

0 commit comments

Comments
 (0)