@@ -1341,6 +1341,33 @@ impl<Signer: ChannelSigner> ChannelContext<Signer> {
1341
1341
fn counterparty_funding_pubkey ( & self ) -> & PublicKey {
1342
1342
& self . get_counterparty_pubkeys ( ) . funding_pubkey
1343
1343
}
1344
+
1345
+ pub fn get_feerate_sat_per_1000_weight ( & self ) -> u32 {
1346
+ self . feerate_per_kw
1347
+ }
1348
+
1349
+ pub fn get_dust_buffer_feerate ( & self , outbound_feerate_update : Option < u32 > ) -> u32 {
1350
+ // When calculating our exposure to dust HTLCs, we assume that the channel feerate
1351
+ // may, at any point, increase by at least 10 sat/vB (i.e 2530 sat/kWU) or 25%,
1352
+ // whichever is higher. This ensures that we aren't suddenly exposed to significantly
1353
+ // more dust balance if the feerate increases when we have several HTLCs pending
1354
+ // which are near the dust limit.
1355
+ let mut feerate_per_kw = self . feerate_per_kw ;
1356
+ // If there's a pending update fee, use it to ensure we aren't under-estimating
1357
+ // potential feerate updates coming soon.
1358
+ if let Some ( ( feerate, _) ) = self . pending_update_fee {
1359
+ feerate_per_kw = cmp:: max ( feerate_per_kw, feerate) ;
1360
+ }
1361
+ if let Some ( feerate) = outbound_feerate_update {
1362
+ feerate_per_kw = cmp:: max ( feerate_per_kw, feerate) ;
1363
+ }
1364
+ cmp:: max ( 2530 , feerate_per_kw * 1250 / 1000 )
1365
+ }
1366
+
1367
+ /// Get forwarding information for the counterparty.
1368
+ pub fn counterparty_forwarding_info ( & self ) -> Option < CounterpartyForwardingInfo > {
1369
+ self . counterparty_forwarding_info . clone ( )
1370
+ }
1344
1371
}
1345
1372
1346
1373
// Internal utility functions for channels
@@ -2920,7 +2947,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
2920
2947
let ( htlc_timeout_dust_limit, htlc_success_dust_limit) = if self . context . opt_anchors ( ) {
2921
2948
( 0 , 0 )
2922
2949
} else {
2923
- let dust_buffer_feerate = self . get_dust_buffer_feerate ( outbound_feerate_update) as u64 ;
2950
+ let dust_buffer_feerate = self . context . get_dust_buffer_feerate ( outbound_feerate_update) as u64 ;
2924
2951
( dust_buffer_feerate * htlc_timeout_tx_weight ( false ) / 1000 ,
2925
2952
dust_buffer_feerate * htlc_success_tx_weight ( false ) / 1000 )
2926
2953
} ;
@@ -2952,7 +2979,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
2952
2979
let ( htlc_timeout_dust_limit, htlc_success_dust_limit) = if self . context . opt_anchors ( ) {
2953
2980
( 0 , 0 )
2954
2981
} else {
2955
- let dust_buffer_feerate = self . get_dust_buffer_feerate ( outbound_feerate_update) as u64 ;
2982
+ let dust_buffer_feerate = self . context . get_dust_buffer_feerate ( outbound_feerate_update) as u64 ;
2956
2983
( dust_buffer_feerate * htlc_timeout_tx_weight ( false ) / 1000 ,
2957
2984
dust_buffer_feerate * htlc_success_tx_weight ( false ) / 1000 )
2958
2985
} ;
@@ -3075,7 +3102,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
3075
3102
let ( htlc_success_dust_limit, htlc_timeout_dust_limit) = if self . context . opt_anchors ( ) {
3076
3103
( self . context . counterparty_dust_limit_satoshis , self . context . holder_dust_limit_satoshis )
3077
3104
} else {
3078
- let dust_buffer_feerate = self . get_dust_buffer_feerate ( None ) as u64 ;
3105
+ let dust_buffer_feerate = self . context . get_dust_buffer_feerate ( None ) as u64 ;
3079
3106
( self . context . counterparty_dust_limit_satoshis + dust_buffer_feerate * htlc_success_tx_weight ( false ) / 1000 ,
3080
3107
self . context . holder_dust_limit_satoshis + dust_buffer_feerate * htlc_timeout_tx_weight ( false ) / 1000 )
3081
3108
} ;
@@ -3383,7 +3410,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
3383
3410
let ( htlc_timeout_dust_limit, htlc_success_dust_limit) = if self . context . opt_anchors ( ) {
3384
3411
( 0 , 0 )
3385
3412
} else {
3386
- let dust_buffer_feerate = self . get_dust_buffer_feerate ( None ) as u64 ;
3413
+ let dust_buffer_feerate = self . context . get_dust_buffer_feerate ( None ) as u64 ;
3387
3414
( dust_buffer_feerate * htlc_timeout_tx_weight ( false ) / 1000 ,
3388
3415
dust_buffer_feerate * htlc_success_tx_weight ( false ) / 1000 )
3389
3416
} ;
@@ -4394,7 +4421,7 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
4394
4421
return Err ( ChannelError :: Close ( "Peer sent update_fee when we needed a channel_reestablish" . to_owned ( ) ) ) ;
4395
4422
}
4396
4423
Channel :: < Signer > :: check_remote_fee ( fee_estimator, msg. feerate_per_kw , Some ( self . context . feerate_per_kw ) , logger) ?;
4397
- let feerate_over_dust_buffer = msg. feerate_per_kw > self . get_dust_buffer_feerate ( None ) ;
4424
+ let feerate_over_dust_buffer = msg. feerate_per_kw > self . context . get_dust_buffer_feerate ( None ) ;
4398
4425
4399
4426
self . context . pending_update_fee = Some ( ( msg. feerate_per_kw , FeeUpdateState :: RemoteAnnounced ) ) ;
4400
4427
self . context . update_time_counter += 1 ;
@@ -5126,28 +5153,6 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
5126
5153
} )
5127
5154
}
5128
5155
5129
- pub fn get_feerate_sat_per_1000_weight ( & self ) -> u32 {
5130
- self . context . feerate_per_kw
5131
- }
5132
-
5133
- pub fn get_dust_buffer_feerate ( & self , outbound_feerate_update : Option < u32 > ) -> u32 {
5134
- // When calculating our exposure to dust HTLCs, we assume that the channel feerate
5135
- // may, at any point, increase by at least 10 sat/vB (i.e 2530 sat/kWU) or 25%,
5136
- // whichever is higher. This ensures that we aren't suddenly exposed to significantly
5137
- // more dust balance if the feerate increases when we have several HTLCs pending
5138
- // which are near the dust limit.
5139
- let mut feerate_per_kw = self . context . feerate_per_kw ;
5140
- // If there's a pending update fee, use it to ensure we aren't under-estimating
5141
- // potential feerate updates coming soon.
5142
- if let Some ( ( feerate, _) ) = self . context . pending_update_fee {
5143
- feerate_per_kw = cmp:: max ( feerate_per_kw, feerate) ;
5144
- }
5145
- if let Some ( feerate) = outbound_feerate_update {
5146
- feerate_per_kw = cmp:: max ( feerate_per_kw, feerate) ;
5147
- }
5148
- cmp:: max ( 2530 , feerate_per_kw * 1250 / 1000 )
5149
- }
5150
-
5151
5156
pub fn get_cur_holder_commitment_transaction_number ( & self ) -> u64 {
5152
5157
self . context . cur_holder_commitment_transaction_number + 1
5153
5158
}
@@ -6247,11 +6252,6 @@ impl<Signer: WriteableEcdsaChannelSigner> Channel<Signer> {
6247
6252
}
6248
6253
}
6249
6254
6250
- /// Get forwarding information for the counterparty.
6251
- pub fn counterparty_forwarding_info ( & self ) -> Option < CounterpartyForwardingInfo > {
6252
- self . context . counterparty_forwarding_info . clone ( )
6253
- }
6254
-
6255
6255
pub fn channel_update ( & mut self , msg : & msgs:: ChannelUpdate ) -> Result < ( ) , ChannelError > {
6256
6256
if msg. contents . htlc_minimum_msat >= self . context . channel_value_satoshis * 1000 {
6257
6257
return Err ( ChannelError :: Close ( "Minimum htlc value is greater than channel value" . to_string ( ) ) ) ;
@@ -7735,7 +7735,7 @@ mod tests {
7735
7735
let mut node_a_chan = Channel :: < EnforcingSigner > :: new_outbound ( & feeest, & & keys_provider, & & keys_provider, node_b_node_id, & channelmanager:: provided_init_features ( & config) , 10000000 , 100000 , 42 , & config, 0 , 42 ) . unwrap ( ) ;
7736
7736
assert ! ( node_a_chan. context. counterparty_forwarding_info. is_none( ) ) ;
7737
7737
assert_eq ! ( node_a_chan. context. holder_htlc_minimum_msat, 1 ) ; // the default
7738
- assert ! ( node_a_chan. counterparty_forwarding_info( ) . is_none( ) ) ;
7738
+ assert ! ( node_a_chan. context . counterparty_forwarding_info( ) . is_none( ) ) ;
7739
7739
7740
7740
// Make sure that receiving a channel update will update the Channel as expected.
7741
7741
let update = ChannelUpdate {
@@ -7758,7 +7758,7 @@ mod tests {
7758
7758
// The counterparty can send an update with a higher minimum HTLC, but that shouldn't
7759
7759
// change our official htlc_minimum_msat.
7760
7760
assert_eq ! ( node_a_chan. context. holder_htlc_minimum_msat, 1 ) ;
7761
- match node_a_chan. counterparty_forwarding_info ( ) {
7761
+ match node_a_chan. context . counterparty_forwarding_info ( ) {
7762
7762
Some ( info) => {
7763
7763
assert_eq ! ( info. cltv_expiry_delta, 100 ) ;
7764
7764
assert_eq ! ( info. fee_base_msat, 110 ) ;
0 commit comments