@@ -378,8 +378,8 @@ impl Wallet {
378378 ) ;
379379 let payment =
380380 self . payment_store . get ( & payment_id) . ok_or ( Error :: InvalidPaymentId ) ?;
381- let pending_payment_details = self
382- . create_pending_payment_from_tx ( payment. clone ( ) , conflict_txids. clone ( ) ) ;
381+ let pending_payment_details =
382+ self . create_pending_payment_from_tx ( payment, conflict_txids. clone ( ) ) ;
383383
384384 self . pending_payment_store . insert_or_update ( pending_payment_details) ?;
385385 } ,
@@ -1042,6 +1042,16 @@ impl Wallet {
10421042 return Some ( direct_payment_id) ;
10431043 }
10441044
1045+ if let Some ( replaced_details) = self
1046+ . pending_payment_store
1047+ . list_filter (
1048+ |p| matches ! ( p. details. kind, PaymentKind :: Onchain { txid, .. } if txid == target_txid) ,
1049+ )
1050+ . first ( )
1051+ {
1052+ return Some ( replaced_details. details . id ) ;
1053+ }
1054+
10451055 if let Some ( replaced_details) = self
10461056 . pending_payment_store
10471057 . list_filter ( |p| p. conflicting_txids . contains ( & target_txid) )
@@ -1125,13 +1135,13 @@ impl Wallet {
11251135 old_fee_rate. to_sat_per_kwu ( ) + INCREMENTAL_RELAY_FEE_SAT_PER_1000_WEIGHT as u64 ;
11261136
11271137 let confirmation_target = ConfirmationTarget :: OnchainPayment ;
1128- let estimated_fee_rate =
1129- fee_rate. unwrap_or_else ( || self . fee_estimator . estimate_fee_rate ( confirmation_target) ) ;
1138+ let estimated_fee_rate = self . fee_estimator . estimate_fee_rate ( confirmation_target) ;
11301139
11311140 // Use the higher of minimum RBF requirement or current network estimate
11321141 let final_fee_rate_sat_per_kwu =
11331142 min_required_fee_rate_sat_per_kwu. max ( estimated_fee_rate. to_sat_per_kwu ( ) ) ;
1134- let final_fee_rate = FeeRate :: from_sat_per_kwu ( final_fee_rate_sat_per_kwu) ;
1143+ let final_fee_rate =
1144+ fee_rate. unwrap_or_else ( || FeeRate :: from_sat_per_kwu ( final_fee_rate_sat_per_kwu) ) ;
11351145
11361146 let mut psbt = {
11371147 let mut builder = locked_wallet. build_fee_bump ( txid) . map_err ( |e| {
@@ -1156,6 +1166,17 @@ impl Wallet {
11561166 match builder. finish ( ) {
11571167 Ok ( psbt) => Ok ( psbt) ,
11581168 Err ( CreateTxError :: FeeRateTooLow { required : required_fee_rate } ) => {
1169+ if fee_rate. is_some ( ) {
1170+ log_error ! (
1171+ self . logger,
1172+ "Provided fee rate {} is too low for RBF fee bump of txid {}, required minimum fee rate: {}" ,
1173+ fee_rate. unwrap( ) ,
1174+ txid,
1175+ required_fee_rate
1176+ ) ;
1177+ return Err ( Error :: InvalidFeeRate ) ;
1178+ }
1179+
11591180 log_info ! ( self . logger, "BDK requires higher fee rate: {}" , required_fee_rate) ;
11601181
11611182 // BDK may require a higher fee rate than our estimate due to
0 commit comments