@@ -9,6 +9,7 @@ use bitcoin::secp256k1::key::PublicKey;
9
9
use lightning:: chain;
10
10
use lightning:: chain:: keysinterface:: KeysManager ;
11
11
use lightning:: ln:: features:: InvoiceFeatures ;
12
+ use lightning:: ln:: msgs:: NetAddress ;
12
13
use lightning:: ln:: { PaymentHash , PaymentSecret } ;
13
14
use lightning:: routing:: network_graph:: NetGraphMsgHandler ;
14
15
use lightning:: routing:: router;
@@ -18,7 +19,7 @@ use lightning_invoice::{utils, Currency, Invoice};
18
19
use std:: env;
19
20
use std:: io;
20
21
use std:: io:: { BufRead , Write } ;
21
- use std:: net:: { SocketAddr , ToSocketAddrs } ;
22
+ use std:: net:: { IpAddr , SocketAddr , ToSocketAddrs } ;
22
23
use std:: ops:: Deref ;
23
24
use std:: path:: Path ;
24
25
use std:: str:: FromStr ;
@@ -33,12 +34,14 @@ pub(crate) struct LdkUserInfo {
33
34
pub ( crate ) bitcoind_rpc_host : String ,
34
35
pub ( crate ) ldk_storage_dir_path : String ,
35
36
pub ( crate ) ldk_peer_listening_port : u16 ,
37
+ pub ( crate ) ldk_announced_listen_addr : Option < NetAddress > ,
38
+ pub ( crate ) ldk_announced_node_name : [ u8 ; 32 ] ,
36
39
pub ( crate ) network : Network ,
37
40
}
38
41
39
42
pub ( crate ) fn parse_startup_args ( ) -> Result < LdkUserInfo , ( ) > {
40
43
if env:: args ( ) . len ( ) < 3 {
41
- println ! ( "ldk-tutorial-node requires 3 arguments: `cargo run <bitcoind-rpc-username>:<bitcoind-rpc-password>@<bitcoind-rpc-host>:<bitcoind-rpc-port> ldk_storage_directory_path [<ldk-incoming-peer-listening-port>] [bitcoin-network]`" ) ;
44
+ println ! ( "ldk-tutorial-node requires 3 arguments: `cargo run <bitcoind-rpc-username>:<bitcoind-rpc-password>@<bitcoind-rpc-host>:<bitcoind-rpc-port> ldk_storage_directory_path [<ldk-incoming-peer-listening-port>] [bitcoin-network] [announced-listen-addr announced-node-name] `" ) ;
42
45
return Err ( ( ) ) ;
43
46
}
44
47
let bitcoind_rpc_info = env:: args ( ) . skip ( 1 ) . next ( ) . unwrap ( ) ;
@@ -84,13 +87,41 @@ pub(crate) fn parse_startup_args() -> Result<LdkUserInfo, ()> {
84
87
Some ( _) => panic ! ( "Unsupported network provided. Options are: `regtest`, `testnet`" ) ,
85
88
None => Network :: Testnet ,
86
89
} ;
90
+
91
+ let ldk_announced_listen_addr = match env:: args ( ) . skip ( arg_idx + 1 ) . next ( ) . as_ref ( ) {
92
+ Some ( s) => match IpAddr :: from_str ( s) {
93
+ Ok ( IpAddr :: V4 ( a) ) => {
94
+ Some ( NetAddress :: IPv4 { addr : a. octets ( ) , port : ldk_peer_listening_port } )
95
+ }
96
+ Ok ( IpAddr :: V6 ( a) ) => {
97
+ Some ( NetAddress :: IPv6 { addr : a. octets ( ) , port : ldk_peer_listening_port } )
98
+ }
99
+ Err ( _) => panic ! ( "Failed to parse announced-listen-addr into an IP address" ) ,
100
+ } ,
101
+ None => None ,
102
+ } ;
103
+
104
+ let ldk_announced_node_name = match env:: args ( ) . skip ( arg_idx + 2 ) . next ( ) . as_ref ( ) {
105
+ Some ( s) => {
106
+ if s. len ( ) > 32 {
107
+ panic ! ( "Node Alias can not be longer than 32 bytes" ) ;
108
+ }
109
+ let mut bytes = [ 0 ; 32 ] ;
110
+ bytes[ ..s. len ( ) ] . copy_from_slice ( s. as_bytes ( ) ) ;
111
+ bytes
112
+ }
113
+ None => [ 0 ; 32 ] ,
114
+ } ;
115
+
87
116
Ok ( LdkUserInfo {
88
117
bitcoind_rpc_username,
89
118
bitcoind_rpc_password,
90
119
bitcoind_rpc_host,
91
120
bitcoind_rpc_port,
92
121
ldk_storage_dir_path,
93
122
ldk_peer_listening_port,
123
+ ldk_announced_listen_addr,
124
+ ldk_announced_node_name,
94
125
network,
95
126
} )
96
127
}
@@ -393,19 +424,22 @@ fn list_channels(channel_manager: Arc<ChannelManager>) {
393
424
println ! ( "" ) ;
394
425
println ! ( "\t {{" ) ;
395
426
println ! ( "\t \t channel_id: {}," , hex_utils:: hex_str( & chan_info. channel_id[ ..] ) ) ;
427
+ if let Some ( funding_txo) = chan_info. funding_txo {
428
+ println ! ( "\t \t funding_txid: {}," , funding_txo. txid) ;
429
+ }
396
430
println ! (
397
431
"\t \t peer_pubkey: {}," ,
398
432
hex_utils:: hex_str( & chan_info. remote_network_id. serialize( ) )
399
433
) ;
400
- let mut pending_channel = false ;
401
- match chan_info. short_channel_id {
402
- Some ( id) => println ! ( "\t \t short_channel_id: {}," , id) ,
403
- None => {
404
- pending_channel = true ;
405
- }
434
+ if let Some ( id) = chan_info. short_channel_id {
435
+ println ! ( "\t \t short_channel_id: {}," , id) ;
406
436
}
407
- println ! ( "\t \t pending_open : {}," , pending_channel ) ;
437
+ println ! ( "\t \t is_confirmed_onchain : {}," , chan_info . is_funding_locked ) ;
408
438
println ! ( "\t \t channel_value_satoshis: {}," , chan_info. channel_value_satoshis) ;
439
+ if chan_info. is_usable {
440
+ println ! ( "\t \t available_balance_for_send_msat: {}," , chan_info. outbound_capacity_msat) ;
441
+ println ! ( "\t \t available_balance_for_recv_msat: {}," , chan_info. inbound_capacity_msat) ;
442
+ }
409
443
println ! ( "\t \t channel_can_send_payments: {}," , chan_info. is_usable) ;
410
444
println ! ( "\t }}," ) ;
411
445
}
0 commit comments