Skip to content

Commit c6bf6ab

Browse files
committed
Use Balances to calculate balances instead of ChannelDetails
LDK has deprecated the `ChannelDetails` balance retrieval because its generally not what users want. Instead, we use the `ChainMonitor` `Balance` list.
1 parent 9e6de1b commit c6bf6ab

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

src/cli.rs

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
use crate::disk::{self, INBOUND_PAYMENTS_FNAME, OUTBOUND_PAYMENTS_FNAME};
22
use crate::hex_utils;
33
use crate::{
4-
ChannelManager, HTLCStatus, InboundPaymentInfoStorage, MillisatAmount, NetworkGraph,
5-
OutboundPaymentInfoStorage, PaymentInfo, PeerManager,
4+
ChainMonitor, ChannelManager, HTLCStatus, InboundPaymentInfoStorage, MillisatAmount,
5+
NetworkGraph, OutboundPaymentInfoStorage, PaymentInfo, PeerManager,
66
};
77
use bitcoin::hashes::sha256::Hash as Sha256;
88
use bitcoin::hashes::Hash;
99
use bitcoin::network::Network;
1010
use bitcoin::secp256k1::PublicKey;
11+
use lightning::chain::channelmonitor::Balance;
1112
use lightning::ln::bolt11_payment::payment_parameters_from_invoice;
1213
use lightning::ln::bolt11_payment::payment_parameters_from_zero_amount_invoice;
1314
use lightning::ln::channelmanager::{PaymentId, RecipientOnionFields, Retry};
@@ -46,8 +47,8 @@ pub(crate) struct LdkUserInfo {
4647

4748
pub(crate) fn poll_for_user_input(
4849
peer_manager: Arc<PeerManager>, channel_manager: Arc<ChannelManager>,
49-
keys_manager: Arc<KeysManager>, network_graph: Arc<NetworkGraph>,
50-
inbound_payments: Arc<Mutex<InboundPaymentInfoStorage>>,
50+
chain_monitor: Arc<ChainMonitor>, keys_manager: Arc<KeysManager>,
51+
network_graph: Arc<NetworkGraph>, inbound_payments: Arc<Mutex<InboundPaymentInfoStorage>>,
5152
outbound_payments: Arc<Mutex<OutboundPaymentInfoStorage>>, ldk_data_dir: String,
5253
network: Network, logger: Arc<disk::FilesystemLogger>, fs_store: Arc<FilesystemStore>,
5354
) {
@@ -461,7 +462,7 @@ pub(crate) fn poll_for_user_input(
461462

462463
force_close_channel(channel_id, peer_pubkey, channel_manager.clone());
463464
},
464-
"nodeinfo" => node_info(&channel_manager, &peer_manager),
465+
"nodeinfo" => node_info(&channel_manager, &chain_monitor, &peer_manager),
465466
"listpeers" => list_peers(peer_manager.clone()),
466467
"signmessage" => {
467468
const MSG_STARTPOS: usize = "signmessage".len() + 1;
@@ -515,14 +516,26 @@ fn help() {
515516
println!(" nodeinfo");
516517
}
517518

518-
fn node_info(channel_manager: &Arc<ChannelManager>, peer_manager: &Arc<PeerManager>) {
519+
fn node_info(
520+
channel_manager: &Arc<ChannelManager>, chain_monitor: &Arc<ChainMonitor>,
521+
peer_manager: &Arc<PeerManager>,
522+
) {
519523
println!("\t{{");
520524
println!("\t\t node_pubkey: {}", channel_manager.get_our_node_id());
521525
let chans = channel_manager.list_channels();
522526
println!("\t\t num_channels: {}", chans.len());
523527
println!("\t\t num_usable_channels: {}", chans.iter().filter(|c| c.is_usable).count());
524-
let local_balance_msat = chans.iter().map(|c| c.balance_msat).sum::<u64>();
525-
println!("\t\t local_balance_msat: {}", local_balance_msat);
528+
let balances = chain_monitor.get_claimable_balances(&[]);
529+
let local_balance_sat = balances.iter().map(|b| b.claimable_amount_satoshis()).sum::<u64>();
530+
println!("\t\t local_balance_sat: {}", local_balance_sat);
531+
let close_fees_map = |b| match b {
532+
&Balance::ClaimableOnChannelClose { transaction_fee_satoshis, .. } => {
533+
transaction_fee_satoshis
534+
},
535+
_ => 0,
536+
};
537+
let close_fees_sats = balances.iter().map(close_fees_map).sum::<u64>();
538+
println!("\t\t eventual_close_fees_sat: {}", close_fees_sats);
526539
println!("\t\t num_peers: {}", peer_manager.list_peers().len());
527540
println!("\t}},");
528541
}

src/main.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,13 +1093,15 @@ async fn start_ldk() {
10931093

10941094
// Start the CLI.
10951095
let cli_channel_manager = Arc::clone(&channel_manager);
1096+
let cli_chain_monitor = Arc::clone(&chain_monitor);
10961097
let cli_persister = Arc::clone(&persister);
10971098
let cli_logger = Arc::clone(&logger);
10981099
let cli_peer_manager = Arc::clone(&peer_manager);
10991100
let cli_poll = tokio::task::spawn_blocking(move || {
11001101
cli::poll_for_user_input(
11011102
cli_peer_manager,
11021103
cli_channel_manager,
1104+
cli_chain_monitor,
11031105
keys_manager,
11041106
network_graph,
11051107
inbound_payments,

0 commit comments

Comments
 (0)