@@ -338,6 +338,7 @@ impl Wallet {
338338 WalletEvent :: TxUnconfirmed { txid, tx, old_block_time : None } => {
339339 let payment_id = self
340340 . find_payment_by_txid ( txid)
341+ . or_else ( || self . find_payment_by_tx_conflicts ( locked_wallet, & tx) )
341342 . unwrap_or_else ( || PaymentId ( txid. to_byte_array ( ) ) ) ;
342343
343344 let payment = self . create_payment_from_tx (
@@ -378,8 +379,8 @@ impl Wallet {
378379 ) ;
379380 let payment =
380381 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 ( ) ) ;
382+ let pending_payment_details =
383+ self . create_pending_payment_from_tx ( payment, conflict_txids. clone ( ) ) ;
383384
384385 self . pending_payment_store . insert_or_update ( pending_payment_details) ?;
385386 } ,
@@ -1053,6 +1054,15 @@ impl Wallet {
10531054 None
10541055 }
10551056
1057+ fn find_payment_by_tx_conflicts (
1058+ & self , locked_wallet : & PersistedWallet < KVStoreWalletPersister > , tx : & Transaction ,
1059+ ) -> Option < PaymentId > {
1060+ locked_wallet
1061+ . tx_graph ( )
1062+ . direct_conflicts ( tx)
1063+ . find_map ( |( _, conflict_txid) | self . find_payment_by_txid ( conflict_txid) )
1064+ }
1065+
10561066 #[ allow( deprecated) ]
10571067 pub ( crate ) fn bump_fee_rbf (
10581068 & self , payment_id : PaymentId , fee_rate : Option < FeeRate > ,
@@ -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