sample no clone
[ldk-sample] / src / cli.rs
index f8597e33a19439b94c4c7516bce42671fe8eda81..63bc539ba7294ea53b3eefc949f05247d7d779a9 100644 (file)
@@ -12,7 +12,7 @@ use lightning::chain::keysinterface::KeysManager;
 use lightning::ln::features::InvoiceFeatures;
 use lightning::ln::msgs::NetAddress;
 use lightning::ln::{PaymentHash, PaymentSecret};
-use lightning::routing::network_graph::NetGraphMsgHandler;
+use lightning::routing::network_graph::{NetGraphMsgHandler, NetworkGraph};
 use lightning::routing::router;
 use lightning::routing::router::RouteHint;
 use lightning::util::config::{ChannelConfig, ChannelHandshakeLimits, UserConfig};
@@ -137,7 +137,13 @@ pub(crate) fn parse_startup_args() -> Result<LdkUserInfo, ()> {
 pub(crate) async fn poll_for_user_input(
        peer_manager: Arc<PeerManager>, channel_manager: Arc<ChannelManager>,
        keys_manager: Arc<KeysManager>,
-       router: Arc<NetGraphMsgHandler<Arc<dyn chain::Access + Send + Sync>, Arc<FilesystemLogger>>>,
+       router: Arc<
+               NetGraphMsgHandler<
+                       Arc<NetworkGraph>,
+                       Arc<dyn chain::Access + Send + Sync>,
+                       Arc<FilesystemLogger>,
+               >,
+       >,
        inbound_payments: PaymentInfoStorage, outbound_payments: PaymentInfoStorage,
        ldk_data_dir: String, logger: Arc<FilesystemLogger>, network: Network,
 ) {
@@ -462,6 +468,11 @@ fn list_channels(channel_manager: Arc<ChannelManager>) {
                }
                println!("\t\tis_confirmed_onchain: {},", chan_info.is_funding_locked);
                println!("\t\tchannel_value_satoshis: {},", chan_info.channel_value_satoshis);
+               println!(
+                       "\t\tlocal_balance_msat: {},",
+                       chan_info.outbound_capacity_msat
+                               + chan_info.unspendable_punishment_reserve.unwrap_or(0) * 1000
+               );
                if chan_info.is_usable {
                        println!("\t\tavailable_balance_for_send_msat: {},", chan_info.outbound_capacity_msat);
                        println!("\t\tavailable_balance_for_recv_msat: {},", chan_info.inbound_capacity_msat);
@@ -580,17 +591,22 @@ fn send_payment(
        payee: PublicKey, amt_msat: u64, final_cltv: u32, payment_hash: PaymentHash,
        payment_secret: Option<PaymentSecret>, payee_features: Option<InvoiceFeatures>,
        route_hints: Vec<&RouteHint>,
-       router: Arc<NetGraphMsgHandler<Arc<dyn chain::Access + Send + Sync>, Arc<FilesystemLogger>>>,
+       router: Arc<
+               NetGraphMsgHandler<
+                       Arc<NetworkGraph>,
+                       Arc<dyn chain::Access + Send + Sync>,
+                       Arc<FilesystemLogger>,
+               >,
+       >,
        channel_manager: Arc<ChannelManager>, payment_storage: PaymentInfoStorage,
        logger: Arc<FilesystemLogger>,
 ) {
-       let network_graph = router.network_graph.read().unwrap();
        let first_hops = channel_manager.list_usable_channels();
        let payer_pubkey = channel_manager.get_our_node_id();
 
        let route = router::get_route(
                &payer_pubkey,
-               &network_graph,
+               &router.network_graph,
                &payee,
                payee_features,
                Some(&first_hops.iter().collect::<Vec<_>>()),
@@ -628,17 +644,22 @@ fn send_payment(
 
 fn keysend(
        payee: PublicKey, amt_msat: u64,
-       router: Arc<NetGraphMsgHandler<Arc<dyn chain::Access + Send + Sync>, Arc<FilesystemLogger>>>,
+       router: Arc<
+               NetGraphMsgHandler<
+                       Arc<NetworkGraph>,
+                       Arc<dyn chain::Access + Send + Sync>,
+                       Arc<FilesystemLogger>,
+               >,
+       >,
        channel_manager: Arc<ChannelManager>, payment_storage: PaymentInfoStorage,
        logger: Arc<FilesystemLogger>,
 ) {
-       let network_graph = router.network_graph.read().unwrap();
        let first_hops = channel_manager.list_usable_channels();
        let payer_pubkey = channel_manager.get_our_node_id();
 
        let route = match router::get_keysend_route(
                &payer_pubkey,
-               &network_graph,
+               &router.network_graph,
                &payee,
                Some(&first_hops.iter().collect::<Vec<_>>()),
                &vec![],