@@ -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