@@ -750,6 +750,9 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
750750 let mut final_amount_sat = 0 ;
751751 let mut original_tx;
752752
753+ let mut array_original_txid = Vec :: new ( ) ;
754+ let mut array_rbf_txid = Vec :: new ( ) ;
755+
753756 // Step 1: Bump fee and change output address
754757 distribute_funds_all_nodes ! ( ) ;
755758 validate_balances ! ( amount_sat, false ) ;
@@ -769,18 +772,21 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
769772 final_amount_sat += amount_sat;
770773 }
771774 validate_balances ! ( final_amount_sat, is_insert_block || is_insertion_original_tx) ;
775+ array_original_txid. push ( original_tx. compute_txid ( ) ) ;
772776
773777 // Step 2: Bump fee only
774778 distribute_funds_all_nodes ! ( ) ;
775779 validate_total_onchain_balance ! ( amount_sat + final_amount_sat) ;
776780 ( tx, fee_output_index) = prepare_rbf ( electrs, txid, & scripts_buf) ;
777781 original_tx = tx. clone ( ) ;
778- bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
782+ let rbf_tx = bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
779783 if is_insertion_original_tx {
780784 generate_block_and_insert_transactions ( bitcoind, electrs, & [ original_tx. clone ( ) ] ) ;
781785 }
782786 final_amount_sat += amount_sat;
783787 validate_balances ! ( final_amount_sat, is_insert_block || is_insertion_original_tx) ;
788+ array_original_txid. push ( original_tx. compute_txid ( ) ) ;
789+ array_rbf_txid. push ( rbf_tx. compute_txid ( ) ) ;
784790
785791 // Step 3: Increase output value
786792 let value_sat = 21_000 ;
@@ -794,7 +800,7 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
794800 }
795801 } ) ;
796802 tx. output [ fee_output_index] . value -= Amount :: from_sat ( scripts_buf. len ( ) as u64 * value_sat) ;
797- bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
803+ let rbf_tx = bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
798804 if is_insertion_original_tx {
799805 generate_block_and_insert_transactions ( bitcoind, electrs, & [ original_tx. clone ( ) ] ) ;
800806 }
@@ -803,6 +809,8 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
803809 final_amount_sat += value_sat;
804810 }
805811 validate_balances ! ( final_amount_sat, is_insert_block || is_insertion_original_tx) ;
812+ array_original_txid. push ( original_tx. compute_txid ( ) ) ;
813+ array_rbf_txid. push ( rbf_tx. compute_txid ( ) ) ;
806814
807815 // Step 4: Decrease output value
808816 distribute_funds_all_nodes ! ( ) ;
@@ -815,7 +823,7 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
815823 }
816824 } ) ;
817825 tx. output [ fee_output_index] . value += Amount :: from_sat ( scripts_buf. len ( ) as u64 * value_sat) ;
818- bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
826+ let rbf_tx = bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
819827 if is_insertion_original_tx {
820828 generate_block_and_insert_transactions ( bitcoind, electrs, & [ original_tx. clone ( ) ] ) ;
821829 }
@@ -824,10 +832,31 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
824832 final_amount_sat -= value_sat;
825833 }
826834 validate_balances ! ( final_amount_sat, is_insert_block || is_insertion_original_tx) ;
835+ array_original_txid. push ( original_tx. compute_txid ( ) ) ;
836+ array_rbf_txid. push ( rbf_tx. compute_txid ( ) ) ;
827837
828- if !is_insert_block {
829- generate_blocks_and_wait ( bitcoind, electrs, 1 ) ;
830- validate_balances ! ( final_amount_sat, true ) ;
838+ // Confirm transaction
839+ generate_blocks_and_wait ( bitcoind, electrs, 6 ) ;
840+ validate_balances ! ( final_amount_sat, true ) ;
841+
842+ // Validate the list of payments: all must be succeeded and match the confirmed on-chain txids.
843+ let confirmed_onchain_txids =
844+ if is_insertion_original_tx { array_original_txid } else { array_rbf_txid } ;
845+ for node in & nodes {
846+ let all_payments: Vec < PaymentDetails > = node. list_payments ( ) ;
847+ let pending: Vec < _ > =
848+ all_payments. iter ( ) . filter ( |p| p. status == PaymentStatus :: Pending ) . collect ( ) ;
849+
850+ assert ! ( pending. is_empty( ) ) ;
851+
852+ let succeeded: Vec < _ > =
853+ all_payments. iter ( ) . filter ( |p| p. status == PaymentStatus :: Succeeded ) . collect ( ) ;
854+ assert_eq ! ( succeeded. len( ) , confirmed_onchain_txids. len( ) ) ;
855+ for p in succeeded {
856+ assert_eq ! ( p. direction, PaymentDirection :: Inbound ) ;
857+ assert ! ( matches!( p. kind, PaymentKind :: Onchain { txid: _, .. } ) ) ;
858+ assert ! ( confirmed_onchain_txids. contains( & bitcoin:: Txid :: from_slice( & p. id. 0 ) . unwrap( ) ) ) ;
859+ }
831860 }
832861
833862 // Check if it is possible to send all funds from the node
0 commit comments