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