@@ -748,6 +748,9 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
748
748
let mut final_amount_sat = 0 ;
749
749
let mut original_tx;
750
750
751
+ let mut array_original_txid = Vec :: new ( ) ;
752
+ let mut array_rbf_txid = Vec :: new ( ) ;
753
+
751
754
// Step 1: Bump fee and change output address
752
755
distribute_funds_all_nodes ! ( ) ;
753
756
validate_balances ! ( amount_sat, false ) ;
@@ -767,18 +770,21 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
767
770
final_amount_sat += amount_sat;
768
771
}
769
772
validate_balances ! ( final_amount_sat, is_insert_block || is_insertion_original_tx) ;
773
+ array_original_txid. push ( original_tx. compute_txid ( ) ) ;
770
774
771
775
// Step 2: Bump fee only
772
776
distribute_funds_all_nodes ! ( ) ;
773
777
validate_total_onchain_balance ! ( amount_sat + final_amount_sat) ;
774
778
( tx, fee_output_index) = prepare_rbf ( electrs, txid, & scripts_buf) ;
775
779
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) ;
777
781
if is_insertion_original_tx {
778
782
generate_block_and_insert_transactions ( bitcoind, electrs, & [ original_tx. clone ( ) ] ) ;
779
783
}
780
784
final_amount_sat += amount_sat;
781
785
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 ( ) ) ;
782
788
783
789
// Step 3: Increase output value
784
790
let value_sat = 21_000 ;
@@ -792,7 +798,7 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
792
798
}
793
799
} ) ;
794
800
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) ;
796
802
if is_insertion_original_tx {
797
803
generate_block_and_insert_transactions ( bitcoind, electrs, & [ original_tx. clone ( ) ] ) ;
798
804
}
@@ -801,6 +807,8 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
801
807
final_amount_sat += value_sat;
802
808
}
803
809
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 ( ) ) ;
804
812
805
813
// Step 4: Decrease output value
806
814
distribute_funds_all_nodes ! ( ) ;
@@ -813,7 +821,7 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
813
821
}
814
822
} ) ;
815
823
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) ;
817
825
if is_insertion_original_tx {
818
826
generate_block_and_insert_transactions ( bitcoind, electrs, & [ original_tx. clone ( ) ] ) ;
819
827
}
@@ -822,10 +830,31 @@ fn run_rbf_test(is_insert_block: bool, is_insertion_original_tx: bool) {
822
830
final_amount_sat -= value_sat;
823
831
}
824
832
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 ( ) ) ;
825
835
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
+ }
829
858
}
830
859
831
860
// Check if it is possible to send all funds from the node
0 commit comments