@@ -2725,7 +2725,14 @@ impl<Signer: Sign> Channel<Signer> {
2725
2725
}
2726
2726
2727
2727
/// Trigger the autoclose timer if it's in the starting position
2728
- pub fn maybe_trigger_autoclose_timer ( & mut self ) -> bool {
2728
+ pub fn maybe_trigger_autoclose_timer ( & mut self , current_feerate : u32 , new_feerate : u32 , background_feerate : u32 ) -> bool {
2729
+
2730
+ // Verify the new feerate is at least superior by 30% of current feerate before to
2731
+ // start a autoclose timer.
2732
+ if new_feerate < current_feerate * 1300 / 1000 && new_feerate < background_feerate {
2733
+ return false ;
2734
+ }
2735
+
2729
2736
// Start an auto-close timer, if the channel feerate doesn't increase before its
2730
2737
// expiration (i.e this outbound feerate update has been committed on both sides),
2731
2738
// the channel will be marked as unsafe and force-closed.
@@ -2985,7 +2992,7 @@ impl<Signer: Sign> Channel<Signer> {
2985
2992
/// Adds a pending update to this channel. See the doc for send_htlc for
2986
2993
/// further details on the optionness of the return value.
2987
2994
/// You MUST call send_commitment prior to any other calls on this Channel
2988
- fn send_update_fee ( & mut self , feerate_per_kw : u32 ) -> Option < msgs:: UpdateFee > {
2995
+ fn send_update_fee ( & mut self , feerate_per_kw : u32 , background_feerate : u32 ) -> Option < msgs:: UpdateFee > {
2989
2996
if !self . is_outbound ( ) {
2990
2997
panic ! ( "Cannot send fee from inbound channel" ) ;
2991
2998
}
@@ -3001,7 +3008,7 @@ impl<Signer: Sign> Channel<Signer> {
3001
3008
return None ;
3002
3009
}
3003
3010
3004
- self . maybe_trigger_autoclose_timer ( ) ;
3011
+ self . maybe_trigger_autoclose_timer ( self . get_feerate ( ) , feerate_per_kw , background_feerate ) ;
3005
3012
3006
3013
debug_assert ! ( self . pending_update_fee. is_none( ) ) ;
3007
3014
self . pending_update_fee = Some ( ( feerate_per_kw, FeeUpdateState :: Outbound ) ) ;
@@ -3012,8 +3019,8 @@ impl<Signer: Sign> Channel<Signer> {
3012
3019
} )
3013
3020
}
3014
3021
3015
- pub fn send_update_fee_and_commit < L : Deref > ( & mut self , feerate_per_kw : u32 , logger : & L ) -> Result < Option < ( msgs:: UpdateFee , msgs:: CommitmentSigned , ChannelMonitorUpdate ) > , ChannelError > where L :: Target : Logger {
3016
- match self . send_update_fee ( feerate_per_kw) {
3022
+ pub fn send_update_fee_and_commit < L : Deref > ( & mut self , feerate_per_kw : u32 , background_feerate : u32 , logger : & L ) -> Result < Option < ( msgs:: UpdateFee , msgs:: CommitmentSigned , ChannelMonitorUpdate ) > , ChannelError > where L :: Target : Logger {
3023
+ match self . send_update_fee ( feerate_per_kw, background_feerate ) {
3017
3024
Some ( update_fee) => {
3018
3025
let ( commitment_signed, monitor_update) = self . send_commitment_no_status_check ( logger) ?;
3019
3026
Ok ( Some ( ( update_fee, commitment_signed, monitor_update) ) )
@@ -3164,6 +3171,7 @@ impl<Signer: Sign> Channel<Signer> {
3164
3171
if self . channel_state & ( ChannelState :: PeerDisconnected as u32 ) == ChannelState :: PeerDisconnected as u32 {
3165
3172
return Err ( ChannelError :: Close ( "Peer sent update_fee when we needed a channel_reestablish" . to_owned ( ) ) ) ;
3166
3173
}
3174
+
3167
3175
Channel :: < Signer > :: check_remote_fee ( fee_estimator, msg. feerate_per_kw ) ?;
3168
3176
let feerate_over_dust_buffer = msg. feerate_per_kw > self . get_dust_buffer_feerate ( ) ;
3169
3177
0 commit comments