@@ -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 ) ]  
5657struct  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 , 
@@ -505,7 +518,8 @@ mod tests {
505518		// The order here is important: it is the reverse of the validation order in `load_config` 
506519		validate_missing ! ( "rpc_password" ,  missing_field_msg( "bitcoind_rpc_password" ) ) ; 
507520		validate_missing ! ( "rpc_user" ,  missing_field_msg( "bitcoind_rpc_user" ) ) ; 
508- 		validate_missing ! ( "rpc_address" ,  missing_field_msg( "bitcoind_rpc_address" ) ) ; 
521+ 		validate_missing ! ( "rpc_port" ,  missing_field_msg( "bitcoind_rpc_port" ) ) ; 
522+ 		validate_missing ! ( "rpc_host" ,  missing_field_msg( "bitcoind_rpc_host" ) ) ; 
509523		validate_missing ! ( "dir_path" ,  missing_field_msg( "storage_dir_path" ) ) ; 
510524		validate_missing ! ( "rest_service_address" ,  missing_field_msg( "rest_service_address" ) ) ; 
511525		validate_missing ! ( "listening_address" ,  missing_field_msg( "node_listening_address" ) ) ; 
@@ -538,10 +552,8 @@ mod tests {
538552			. unwrap ( ) , 
539553			alias :  Some ( parse_alias ( args_config. node_alias . as_deref ( ) . unwrap ( ) ) ) , 
540554			storage_dir_path :  args_config. storage_dir_path . unwrap ( ) , 
541- 			bitcoind_rpc_addr :  SocketAddr :: from_str ( 
542- 				args_config. bitcoind_rpc_address . as_deref ( ) . unwrap ( ) , 
543- 			) 
544- 			. unwrap ( ) , 
555+ 			bitcoind_rpc_host :  args_config. bitcoind_rpc_host . unwrap ( ) , 
556+ 			bitcoind_rpc_port :  args_config. bitcoind_rpc_port . unwrap ( ) , 
545557			bitcoind_rpc_user :  args_config. bitcoind_rpc_user . unwrap ( ) , 
546558			bitcoind_rpc_password :  args_config. bitcoind_rpc_password . unwrap ( ) , 
547559			rabbitmq_connection_string :  String :: new ( ) , 
@@ -553,7 +565,8 @@ mod tests {
553565		assert_eq ! ( config. network,  expected. network) ; 
554566		assert_eq ! ( config. rest_service_addr,  expected. rest_service_addr) ; 
555567		assert_eq ! ( config. storage_dir_path,  expected. storage_dir_path) ; 
556- 		assert_eq ! ( config. bitcoind_rpc_addr,  expected. bitcoind_rpc_addr) ; 
568+ 		assert_eq ! ( config. bitcoind_rpc_host,  expected. bitcoind_rpc_host) ; 
569+ 		assert_eq ! ( config. bitcoind_rpc_port,  expected. bitcoind_rpc_port) ; 
557570		assert_eq ! ( config. bitcoind_rpc_user,  expected. bitcoind_rpc_user) ; 
558571		assert_eq ! ( config. bitcoind_rpc_password,  expected. bitcoind_rpc_password) ; 
559572		assert_eq ! ( config. rabbitmq_connection_string,  expected. rabbitmq_connection_string) ; 
@@ -580,7 +593,8 @@ mod tests {
580593		// The order here is important: it is the reverse of the validation order in `load_config` 
581594		validate_missing ! ( bitcoind_rpc_password,  missing_field_msg( "bitcoind_rpc_password" ) ) ; 
582595		validate_missing ! ( bitcoind_rpc_user,  missing_field_msg( "bitcoind_rpc_user" ) ) ; 
583- 		validate_missing ! ( bitcoind_rpc_address,  missing_field_msg( "bitcoind_rpc_address" ) ) ; 
596+ 		validate_missing ! ( bitcoind_rpc_port,  missing_field_msg( "bitcoind_rpc_port" ) ) ; 
597+ 		validate_missing ! ( bitcoind_rpc_host,  missing_field_msg( "bitcoind_rpc_host" ) ) ; 
584598		validate_missing ! ( storage_dir_path,  missing_field_msg( "storage_dir_path" ) ) ; 
585599		validate_missing ! ( node_rest_service_address,  missing_field_msg( "rest_service_address" ) ) ; 
586600		validate_missing ! ( node_listening_address,  missing_field_msg( "node_listening_address" ) ) ; 
@@ -610,10 +624,8 @@ mod tests {
610624			. unwrap ( ) , 
611625			alias :  Some ( parse_alias ( args_config. node_alias . as_deref ( ) . unwrap ( ) ) ) , 
612626			storage_dir_path :  args_config. storage_dir_path . unwrap ( ) , 
613- 			bitcoind_rpc_addr :  SocketAddr :: from_str ( 
614- 				args_config. bitcoind_rpc_address . as_deref ( ) . unwrap ( ) , 
615- 			) 
616- 			. unwrap ( ) , 
627+ 			bitcoind_rpc_host :  args_config. bitcoind_rpc_host . unwrap ( ) , 
628+ 			bitcoind_rpc_port :  args_config. bitcoind_rpc_port . unwrap ( ) , 
617629			bitcoind_rpc_user :  args_config. bitcoind_rpc_user . unwrap ( ) , 
618630			bitcoind_rpc_password :  args_config. bitcoind_rpc_password . unwrap ( ) , 
619631			rabbitmq_connection_string :  "rabbitmq_connection_string" . to_string ( ) , 
@@ -635,7 +647,8 @@ mod tests {
635647		assert_eq ! ( config. network,  expected. network) ; 
636648		assert_eq ! ( config. rest_service_addr,  expected. rest_service_addr) ; 
637649		assert_eq ! ( config. storage_dir_path,  expected. storage_dir_path) ; 
638- 		assert_eq ! ( config. bitcoind_rpc_addr,  expected. bitcoind_rpc_addr) ; 
650+ 		assert_eq ! ( config. bitcoind_rpc_host,  expected. bitcoind_rpc_host) ; 
651+ 		assert_eq ! ( config. bitcoind_rpc_port,  expected. bitcoind_rpc_port) ; 
639652		assert_eq ! ( config. bitcoind_rpc_user,  expected. bitcoind_rpc_user) ; 
640653		assert_eq ! ( config. bitcoind_rpc_password,  expected. bitcoind_rpc_password) ; 
641654		assert_eq ! ( config. rabbitmq_connection_string,  expected. rabbitmq_connection_string) ; 
0 commit comments