@@ -748,6 +748,9 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
748748 let mut final_amount_sat = 0 ;
749749 let mut original_tx;
750750
751+ let mut array_original_txid = Vec :: new ( ) ;
752+ let mut array_rbf_txid = Vec :: new ( ) ;
753+
751754 // Step 1: Bump fee and change output address
752755 distribute_funds_all_nodes ! ( ) ;
753756 validate_balances ! ( amount_sat, false ) ;
@@ -767,18 +770,21 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
767770 final_amount_sat += amount_sat;
768771 }
769772 validate_balances ! ( final_amount_sat, is_insert_block || is_insertion_original_tx) ;
773+ array_original_txid. push ( original_tx. compute_txid ( ) ) ;
770774
771775 // Step 2: Bump fee only
772776 distribute_funds_all_nodes ! ( ) ;
773777 validate_total_onchain_balance ! ( amount_sat + final_amount_sat) ;
774778 ( tx, fee_output_index) = prepare_rbf ( electrs, txid, & scripts_buf) ;
775779 original_tx = tx. clone ( ) ;
776- bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
780+ let rbf_tx = bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
777781 if is_insertion_original_tx {
778782 generate_block_and_insert_transactions ( bitcoind, electrs, & [ original_tx. clone ( ) ] ) ;
779783 }
780784 final_amount_sat += amount_sat;
781785 validate_balances ! ( final_amount_sat, is_insert_block || is_insertion_original_tx) ;
786+ array_original_txid. push ( original_tx. compute_txid ( ) ) ;
787+ array_rbf_txid. push ( rbf_tx. compute_txid ( ) ) ;
782788
783789 // Step 3: Increase output value
784790 let value_sat = 21_000 ;
@@ -792,7 +798,7 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
792798 }
793799 } ) ;
794800 tx. output [ fee_output_index] . value -= Amount :: from_sat ( scripts_buf. len ( ) as u64 * value_sat) ;
795- bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
801+ let rbf_tx = bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
796802 if is_insertion_original_tx {
797803 generate_block_and_insert_transactions ( bitcoind, electrs, & [ original_tx. clone ( ) ] ) ;
798804 }
@@ -801,6 +807,8 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
801807 final_amount_sat += value_sat;
802808 }
803809 validate_balances ! ( final_amount_sat, is_insert_block || is_insertion_original_tx) ;
810+ array_original_txid. push ( original_tx. compute_txid ( ) ) ;
811+ array_rbf_txid. push ( rbf_tx. compute_txid ( ) ) ;
804812
805813 // Step 4: Decrease output value
806814 distribute_funds_all_nodes ! ( ) ;
@@ -813,7 +821,7 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
813821 }
814822 } ) ;
815823 tx. output [ fee_output_index] . value += Amount :: from_sat ( scripts_buf. len ( ) as u64 * value_sat) ;
816- bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
824+ let rbf_tx = bump_fee_and_broadcast ( bitcoind, electrs, tx, fee_output_index, is_insert_block) ;
817825 if is_insertion_original_tx {
818826 generate_block_and_insert_transactions ( bitcoind, electrs, & [ original_tx. clone ( ) ] ) ;
819827 }
@@ -822,10 +830,31 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
822830 final_amount_sat -= value_sat;
823831 }
824832 validate_balances ! ( final_amount_sat, is_insert_block || is_insertion_original_tx) ;
833+ array_original_txid. push ( original_tx. compute_txid ( ) ) ;
834+ array_rbf_txid. push ( rbf_tx. compute_txid ( ) ) ;
825835
826- if !is_insert_block {
827- generate_blocks_and_wait ( bitcoind, electrs, 1 ) ;
828- validate_balances ! ( final_amount_sat, true ) ;
836+ // Confirm transaction
837+ generate_blocks_and_wait ( bitcoind, electrs, 6 ) ;
838+ validate_balances ! ( final_amount_sat, true ) ;
839+
840+ // Validate the list of payments: all must be succeeded and match the confirmed on-chain txids.
841+ let confirmed_onchain_txids =
842+ if is_insertion_original_tx { array_original_txid } else { array_rbf_txid } ;
843+ for node in & nodes {
844+ let all_payments: Vec < PaymentDetails > = node. list_payments ( ) ;
845+ let pending: Vec < _ > =
846+ all_payments. iter ( ) . filter ( |p| p. status == PaymentStatus :: Pending ) . collect ( ) ;
847+
848+ assert ! ( pending. is_empty( ) ) ;
849+
850+ let succeeded: Vec < _ > =
851+ all_payments. iter ( ) . filter ( |p| p. status == PaymentStatus :: Succeeded ) . collect ( ) ;
852+ assert_eq ! ( succeeded. len( ) , confirmed_onchain_txids. len( ) ) ;
853+ for p in succeeded {
854+ assert_eq ! ( p. direction, PaymentDirection :: Inbound ) ;
855+ assert ! ( matches!( p. kind, PaymentKind :: Onchain { txid: _, .. } ) ) ;
856+ assert ! ( confirmed_onchain_txids. contains( & bitcoin:: Txid :: from_slice( & p. id. 0 ) . unwrap( ) ) ) ;
857+ }
829858 }
830859
831860 // Check if it is possible to send all funds from the node
0 commit comments