Skip to content

Commit 23deefc

Browse files
author
Antoine Riard
committed
Modify pending inbound/outbound getters to access dust balances
1 parent f151020 commit 23deefc

File tree

1 file changed

+38
-8
lines changed

1 file changed

+38
-8
lines changed

lightning/src/ln/channel.rs

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1751,31 +1751,59 @@ impl<Signer: Sign> Channel<Signer> {
17511751
}
17521752

17531753
/// Returns (inbound_htlc_count, htlc_inbound_value_msat)
1754-
fn get_inbound_pending_htlc_stats(&self) -> (u32, u64) {
1754+
fn get_inbound_pending_htlc_stats(&self) -> (u32, u64, u64, u64) {
17551755
let mut htlc_inbound_value_msat = 0;
1756+
let mut counterparty_dusted_htlc_msat = 0;
1757+
let mut holder_dusted_htlc_msat = 0;
1758+
1759+
let counterparty_dust_limit_timeout_sat = (self.feerate_per_kw as u64 * HTLC_TIMEOUT_TX_WEIGHT / 1000) + self.counterparty_dust_limit_satoshis;
1760+
let holder_dust_limit_success_sat = (self.feerate_per_kw as u64 * HTLC_SUCCESS_TX_WEIGHT / 1000) + self.holder_dust_limit_satoshis;
17561761
for ref htlc in self.pending_inbound_htlcs.iter() {
17571762
htlc_inbound_value_msat += htlc.amount_msat;
1763+
if htlc.amount_msat / 1000 < counterparty_dust_limit_timeout_sat {
1764+
counterparty_dusted_htlc_msat += htlc.amount_msat;
1765+
}
1766+
if htlc.amount_msat / 1000 < holder_dust_limit_success_sat {
1767+
holder_dusted_htlc_msat += htlc.amount_msat;
1768+
}
17581769
}
1759-
(self.pending_inbound_htlcs.len() as u32, htlc_inbound_value_msat)
1770+
(self.pending_inbound_htlcs.len() as u32, htlc_inbound_value_msat, counterparty_dusted_htlc_msat, holder_dusted_htlc_msat)
17601771
}
17611772

1762-
/// Returns (outbound_htlc_count, htlc_outbound_value_msat) *including* pending adds in our
1763-
/// holding cell.
1764-
fn get_outbound_pending_htlc_stats(&self) -> (u32, u64) {
1773+
/// Returns (outbound_htlc_count, htlc_outbound_value_msat, outbound_dusted_htlc_value_msat) *including*
1774+
/// pending adds in our holding cell.
1775+
fn get_outbound_pending_htlc_stats(&self) -> (u32, u64, u64, u64) {
17651776
let mut htlc_outbound_value_msat = 0;
1777+
let mut counterparty_dusted_htlc_msat = 0;
1778+
let mut holder_dusted_htlc_msat = 0;
1779+
1780+
let counterparty_dust_limit_success_sat = (self.feerate_per_kw as u64 * HTLC_SUCCESS_TX_WEIGHT / 1000) + self.counterparty_dust_limit_satoshis;
1781+
let holder_dust_limit_timeout_sat = (self.feerate_per_kw as u64 * HTLC_TIMEOUT_TX_WEIGHT / 1000) + self.holder_dust_limit_satoshis;
17661782
for ref htlc in self.pending_outbound_htlcs.iter() {
17671783
htlc_outbound_value_msat += htlc.amount_msat;
1784+
if htlc.amount_msat / 1000 < counterparty_dust_limit_success_sat {
1785+
counterparty_dusted_htlc_msat += htlc.amount_msat;
1786+
}
1787+
if htlc.amount_msat / 1000 < holder_dust_limit_timeout_sat {
1788+
holder_dusted_htlc_msat += htlc.amount_msat;
1789+
}
17681790
}
17691791

17701792
let mut htlc_outbound_count = self.pending_outbound_htlcs.len();
17711793
for update in self.holding_cell_htlc_updates.iter() {
17721794
if let &HTLCUpdateAwaitingACK::AddHTLC { ref amount_msat, .. } = update {
17731795
htlc_outbound_count += 1;
17741796
htlc_outbound_value_msat += amount_msat;
1797+
if *amount_msat / 1000 < counterparty_dust_limit_success_sat {
1798+
counterparty_dusted_htlc_msat += amount_msat;
1799+
}
1800+
if *amount_msat / 1000 < holder_dust_limit_timeout_sat {
1801+
holder_dusted_htlc_msat += amount_msat;
1802+
}
17751803
}
17761804
}
17771805

1778-
(htlc_outbound_count as u32, htlc_outbound_value_msat)
1806+
(htlc_outbound_count as u32, htlc_outbound_value_msat, counterparty_dusted_htlc_msat, holder_dusted_htlc_msat)
17791807
}
17801808

17811809
/// Get the available (ie not including pending HTLCs) inbound and outbound balance in msat.
@@ -2003,7 +2031,8 @@ impl<Signer: Sign> Channel<Signer> {
20032031
return Err(ChannelError::Close(format!("Remote side tried to send less than our minimum HTLC value. Lower limit: ({}). Actual: ({})", self.holder_htlc_minimum_msat, msg.amount_msat)));
20042032
}
20052033

2006-
let (inbound_htlc_count, htlc_inbound_value_msat) = self.get_inbound_pending_htlc_stats();
2034+
let (inbound_htlc_count, htlc_inbound_value_msat, on_counterparty_tx_dust_inbound, on_holder_tx_dust_inbound) = self.get_inbound_pending_htlc_stats();
2035+
let (_, _, on_counterparty_tx_dust_outbound, on_holder_tx_dust_outbound) = self.get_outbound_pending_htlc_stats();
20072036
if inbound_htlc_count + 1 > OUR_MAX_HTLCS as u32 {
20082037
return Err(ChannelError::Close(format!("Remote tried to push more than our max accepted HTLCs ({})", OUR_MAX_HTLCS)));
20092038
}
@@ -4075,7 +4104,8 @@ impl<Signer: Sign> Channel<Signer> {
40754104
return Err(ChannelError::Ignore("Cannot send an HTLC while disconnected from channel counterparty".to_owned()));
40764105
}
40774106

4078-
let (outbound_htlc_count, htlc_outbound_value_msat) = self.get_outbound_pending_htlc_stats();
4107+
let (_, _, on_counterparty_tx_dust_inbound, on_holder_tx_dust_inbound) = self.get_inbound_pending_htlc_stats();
4108+
let (outbound_htlc_count, htlc_outbound_value_msat, on_counterparty_tx_dust_outbound, on_holder_tx_dust_outbound) = self.get_outbound_pending_htlc_stats();
40794109
if outbound_htlc_count + 1 > self.counterparty_max_accepted_htlcs as u32 {
40804110
return Err(ChannelError::Ignore(format!("Cannot push more than their max accepted HTLCs ({})", self.counterparty_max_accepted_htlcs)));
40814111
}

0 commit comments

Comments
 (0)