@@ -2522,6 +2522,7 @@ fn test_justice_tx_htlc_timeout() {
2522
2522
assert_eq!(tx.input.len(), 1);
2523
2523
check_spends!(tx, revoked_local_txn[0]);
2524
2524
}
2525
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
2525
2526
node_txn.clear();
2526
2527
}
2527
2528
check_added_monitors!(nodes[1], 1);
@@ -2746,6 +2747,9 @@ fn claim_htlc_outputs() {
2746
2747
assert_eq!(node_txn[1].input.len(), 2); // Claims both pinnable, revoked HTLC outputs separately.
2747
2748
check_spends!(node_txn[0], revoked_local_txn[0]);
2748
2749
check_spends!(node_txn[1], revoked_local_txn[0]);
2750
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
2751
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[1].previous_output);
2752
+ assert_ne!(node_txn[1].input[0].previous_output, node_txn[1].input[1].previous_output);
2749
2753
2750
2754
let mut witness_lens = BTreeSet::new();
2751
2755
witness_lens.insert(node_txn[0].input[0].witness.last().unwrap().len());
@@ -2917,15 +2921,22 @@ fn test_htlc_on_chain_success() {
2917
2921
let mut node_txn = $node.tx_broadcaster.txn_broadcasted.lock().unwrap();
2918
2922
// HTLC timeout claims for non-anchor channels are only aggregated when claimed from the
2919
2923
// remote commitment transaction.
2920
- assert_eq!(node_txn.len(), if $htlc_offered { 2 } else { 1 });
2921
- check_spends!(node_txn[0], $commitment_tx);
2922
- assert_ne!(node_txn[0].lock_time, LockTime::ZERO);
2923
2924
if $htlc_offered {
2924
- assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2925
- assert!(node_txn[0].output[0].script_pubkey.is_p2wsh()); // revokeable output
2925
+ assert_eq!(node_txn.len(), 2);
2926
+ for tx in node_txn.iter() {
2927
+ check_spends!(tx, $commitment_tx);
2928
+ assert_ne!(tx.lock_time, LockTime::ZERO);
2929
+ assert_eq!(tx.input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
2930
+ assert!(tx.output[0].script_pubkey.is_p2wsh()); // revokeable output
2931
+ }
2932
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
2926
2933
} else {
2934
+ assert_eq!(node_txn.len(), 1);
2935
+ check_spends!(node_txn[0], $commitment_tx);
2936
+ assert_ne!(node_txn[0].lock_time, LockTime::ZERO);
2927
2937
assert_eq!(node_txn[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
2928
2938
assert!(node_txn[0].output[0].script_pubkey.is_p2wpkh()); // direct payment
2939
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[0].input[1].previous_output);
2929
2940
}
2930
2941
node_txn.clear();
2931
2942
} }
@@ -2949,6 +2960,7 @@ fn test_htlc_on_chain_success() {
2949
2960
} else {
2950
2961
// Certain `ConnectStyle`s will cause RBF bumps of the previous HTLC transaction to be broadcast.
2951
2962
// FullBlockViaListen
2963
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
2952
2964
if node_txn[0].input[0].previous_output.txid == node_a_commitment_tx[0].compute_txid() {
2953
2965
check_spends!(node_txn[1], commitment_tx[0]);
2954
2966
&node_txn[0]
@@ -4686,6 +4698,7 @@ fn test_static_spendable_outputs_justice_tx_revoked_commitment_tx() {
4686
4698
assert_eq!(tx.input.len(), 1);
4687
4699
check_spends!(tx, revoked_local_txn[0]);
4688
4700
}
4701
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
4689
4702
4690
4703
mine_transaction(&nodes[1], &node_txn[0]);
4691
4704
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
@@ -4743,10 +4756,13 @@ fn test_static_spendable_outputs_justice_tx_revoked_htlc_timeout_tx() {
4743
4756
assert_eq!(node_txn.len(), 2);
4744
4757
assert_eq!(node_txn[0].input.len(), 2);
4745
4758
check_spends!(node_txn[0], revoked_local_txn[0], revoked_htlc_txn[0]);
4759
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[0].input[1].previous_output);
4746
4760
4747
4761
assert_eq!(node_txn[1].input.len(), 1);
4748
4762
check_spends!(node_txn[1], revoked_local_txn[0]);
4749
4763
assert_eq!(node_txn[1].input[0].previous_output, revoked_htlc_txn[0].input[0].previous_output);
4764
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
4765
+ assert_ne!(node_txn[0].input[1].previous_output, node_txn[1].input[0].previous_output);
4750
4766
4751
4767
mine_transaction(&nodes[1], &node_txn[0]);
4752
4768
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
@@ -4806,7 +4822,7 @@ fn test_static_spendable_outputs_justice_tx_revoked_htlc_success_tx() {
4806
4822
let node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().clone();
4807
4823
assert_eq!(node_txn.len(), 2);
4808
4824
4809
- // TThe first transaction generated will become out-of-date as it spends the output already spent
4825
+ // The first transaction generated will become out-of-date as it spends the output already spent
4810
4826
// by revoked_htlc_txn[0]. That's OK, we'll spend with valid transactions next...
4811
4827
assert_eq!(node_txn[0].input.len(), 1);
4812
4828
check_spends!(node_txn[0], revoked_local_txn[0]);
@@ -7449,6 +7465,8 @@ fn test_bump_penalty_txn_on_revoked_commitment() {
7449
7465
$penalty_txids.insert(input.previous_output, tx.compute_txid());
7450
7466
}
7451
7467
}
7468
+ assert_eq!($fee_rates.len(), 3);
7469
+ assert_eq!($penalty_txids.len(), 3);
7452
7470
node_txn.clear();
7453
7471
}
7454
7472
}
@@ -7834,7 +7852,12 @@ fn test_bump_txn_sanitize_tracking_maps() {
7834
7852
let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
7835
7853
assert_eq!(node_txn.len(), 2); //ChannelMonitor: justice txn * 2
7836
7854
check_spends!(node_txn[0], revoked_local_txn[0]);
7855
+ assert_eq!(node_txn[0].input.len(), 1);
7837
7856
check_spends!(node_txn[1], revoked_local_txn[0]);
7857
+ assert_eq!(node_txn[1].input.len(), 2);
7858
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
7859
+ assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[1].previous_output);
7860
+ assert_ne!(node_txn[1].input[0].previous_output, node_txn[1].input[1].previous_output);
7838
7861
let penalty_txn = vec![node_txn[0].clone(), node_txn[1].clone()];
7839
7862
node_txn.clear();
7840
7863
penalty_txn
0 commit comments