@@ -294,6 +294,7 @@ struct HTLCStats {
294
294
on_counterparty_tx_dust_exposure_msat : u64 ,
295
295
on_holder_tx_dust_exposure_msat : u64 ,
296
296
holding_cell_msat : u64 ,
297
+ holding_cell_htlcs_count : u32 ,
297
298
}
298
299
299
300
/// An enum gathering stats on commitment transaction, either local or remote.
@@ -2024,6 +2025,7 @@ impl<Signer: Sign> Channel<Signer> {
2024
2025
on_counterparty_tx_dust_exposure_msat : 0 ,
2025
2026
on_holder_tx_dust_exposure_msat : 0 ,
2026
2027
holding_cell_msat : 0 ,
2028
+ holding_cell_htlcs_count : 0 ,
2027
2029
} ;
2028
2030
2029
2031
let counterparty_dust_limit_timeout_sat = ( self . get_dust_buffer_feerate ( outbound_feerate_update) as u64 * HTLC_TIMEOUT_TX_WEIGHT / 1000 ) + self . counterparty_dust_limit_satoshis ;
@@ -2048,6 +2050,7 @@ impl<Signer: Sign> Channel<Signer> {
2048
2050
on_counterparty_tx_dust_exposure_msat : 0 ,
2049
2051
on_holder_tx_dust_exposure_msat : 0 ,
2050
2052
holding_cell_msat : 0 ,
2053
+ holding_cell_htlcs_count : 0 ,
2051
2054
} ;
2052
2055
2053
2056
let counterparty_dust_limit_success_sat = ( self . get_dust_buffer_feerate ( outbound_feerate_update) as u64 * HTLC_SUCCESS_TX_WEIGHT / 1000 ) + self . counterparty_dust_limit_satoshis ;
@@ -2065,6 +2068,7 @@ impl<Signer: Sign> Channel<Signer> {
2065
2068
for update in self . holding_cell_htlc_updates . iter ( ) {
2066
2069
if let & HTLCUpdateAwaitingACK :: AddHTLC { ref amount_msat, .. } = update {
2067
2070
stats. pending_htlcs += 1 ;
2071
+ stats. holding_cell_htlcs_count += 1 ;
2068
2072
stats. pending_htlcs_value_msat += amount_msat;
2069
2073
stats. holding_cell_msat += amount_msat;
2070
2074
if * amount_msat / 1000 < counterparty_dust_limit_success_sat {
@@ -3099,7 +3103,7 @@ impl<Signer: Sign> Channel<Signer> {
3099
3103
let outbound_stats = self . get_outbound_pending_htlc_stats ( Some ( feerate_per_kw) ) ;
3100
3104
let keys = if let Ok ( keys) = self . build_holder_transaction_keys ( self . cur_holder_commitment_transaction_number ) { keys } else { return None ; } ;
3101
3105
let commitment_stats = self . build_commitment_transaction ( self . cur_holder_commitment_transaction_number , & keys, true , true , logger) ;
3102
- let buffer_fee_msat = Channel :: < Signer > :: commit_tx_fee_sat ( feerate_per_kw, commitment_stats. num_nondust_htlcs + CONCURRENT_INBOUND_HTLC_FEE_BUFFER as usize ) * 1000 ;
3106
+ let buffer_fee_msat = Channel :: < Signer > :: commit_tx_fee_sat ( feerate_per_kw, commitment_stats. num_nondust_htlcs + outbound_stats . holding_cell_htlcs_count as usize + CONCURRENT_INBOUND_HTLC_FEE_BUFFER as usize ) * 1000 ;
3103
3107
let holder_balance_msat = commitment_stats. local_balance_msat - outbound_stats. holding_cell_msat ;
3104
3108
if holder_balance_msat < buffer_fee_msat + self . counterparty_selected_channel_reserve_satoshis . unwrap ( ) * 1000 {
3105
3109
//TODO: auto-close after a number of failures?
0 commit comments