Skip to content

Commit 6da6d60

Browse files
committed
Clean up test_bump_penalty_txn_on_revoked_htlcs
Add a few comments to make it clear whats going on a bit more and assert the basic structure of more transactions. Further, point out where transactions are double-spends and don't confirm double-spends.
1 parent ebb8d2d commit 6da6d60

File tree

1 file changed

+36
-2
lines changed

1 file changed

+36
-2
lines changed

lightning/src/ln/functional_tests.rs

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7786,12 +7786,14 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
77867786
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0]);
77877787
assert_eq!(revoked_htlc_txn[1].input.len(), 1);
77887788
assert_eq!(revoked_htlc_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
7789+
assert_eq!(revoked_htlc_txn[1].output.len(), 1);
77897790
check_spends!(revoked_htlc_txn[1], revoked_local_txn[0]);
77907791
} else if revoked_htlc_txn[1].input[0].witness.last().unwrap().len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
77917792
assert_eq!(revoked_htlc_txn[1].input.len(), 1);
77927793
check_spends!(revoked_htlc_txn[1], revoked_local_txn[0]);
77937794
assert_eq!(revoked_htlc_txn[0].input.len(), 1);
77947795
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
7796+
assert_eq!(revoked_htlc_txn[0].output.len(), 1);
77957797
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0]);
77967798
}
77977799

@@ -7808,18 +7810,43 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
78087810
let mut node_txn = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap();
78097811
assert_eq!(node_txn.len(), 5); // 3 penalty txn on revoked commitment tx + A commitment tx + 1 penalty tnx on revoked HTLC txn
78107812
// Verify claim tx are spending revoked HTLC txn
7813+
7814+
// node_txn 0-2 each spend a separate revoked output from revoked_local_txn[0]
7815+
// Note that node_txn[0] and node_txn[1] are bogus - they double spend the revoked_htlc_txn
7816+
// which are included in the same block (they are broadcasted just because and in case of
7817+
// reorgs).
7818+
assert_eq!(node_txn[0].input.len(), 1);
7819+
check_spends!(node_txn[0], revoked_local_txn[0]);
7820+
assert_eq!(node_txn[1].input.len(), 1);
7821+
check_spends!(node_txn[1], revoked_local_txn[0]);
7822+
assert_eq!(node_txn[2].input.len(), 1);
7823+
check_spends!(node_txn[2], revoked_local_txn[0]);
7824+
7825+
assert_ne!(node_txn[0].input[0].previous_output, node_txn[1].input[0].previous_output);
7826+
assert_ne!(node_txn[0].input[0].previous_output, node_txn[2].input[0].previous_output);
7827+
assert_ne!(node_txn[1].input[0].previous_output, node_txn[2].input[0].previous_output);
7828+
7829+
assert_eq!(node_txn[0].input[0].previous_output, revoked_htlc_txn[0].input[0].previous_output);
7830+
assert_eq!(node_txn[1].input[0].previous_output, revoked_htlc_txn[1].input[0].previous_output);
7831+
7832+
// node_txn[3] is the local commitment tx broadcast just because (and somewhat in case of
7833+
// reorgs)
7834+
check_spends!(node_txn[3], chan.3);
7835+
7836+
// node_txn[4] spends the revoked outputs from the revoked_htlc_txn (which only have one
7837+
// output, checked above).
78117838
assert_eq!(node_txn[4].input.len(), 2);
78127839
assert_eq!(node_txn[4].output.len(), 1);
78137840
check_spends!(node_txn[4], revoked_htlc_txn[0], revoked_htlc_txn[1]);
78147841
first = node_txn[4].txid();
78157842
// Store both feerates for later comparison
78167843
let fee_1 = revoked_htlc_txn[0].output[0].value + revoked_htlc_txn[1].output[0].value - node_txn[4].output[0].value;
78177844
feerate_1 = fee_1 * 1000 / node_txn[4].get_weight() as u64;
7818-
penalty_txn = vec![node_txn[0].clone(), node_txn[1].clone(), node_txn[2].clone()];
7845+
penalty_txn = vec![node_txn[2].clone()];
78197846
node_txn.clear();
78207847
}
78217848

7822-
// Connect three more block to see if bumped penalty are issued for HTLC txn
7849+
// Connect one more block to see if bumped penalty are issued for HTLC txn
78237850
let header_130 = BlockHeader { version: 0x20000000, prev_blockhash: header_129.block_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
78247851
nodes[0].block_notifier.block_connected(&Block { header: header_130, txdata: penalty_txn }, 130);
78257852
{
@@ -7828,6 +7855,13 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
78287855

78297856
check_spends!(node_txn[0], revoked_local_txn[0]);
78307857
check_spends!(node_txn[1], revoked_local_txn[0]);
7858+
// Note that these are both bogus - they spend outputs already claimed in block 129:
7859+
if node_txn[0].input[0].previous_output == revoked_htlc_txn[0].input[0].previous_output {
7860+
assert_eq!(node_txn[1].input[0].previous_output, revoked_htlc_txn[1].input[0].previous_output);
7861+
} else {
7862+
assert_eq!(node_txn[0].input[0].previous_output, revoked_htlc_txn[1].input[0].previous_output);
7863+
assert_eq!(node_txn[1].input[0].previous_output, revoked_htlc_txn[0].input[0].previous_output);
7864+
}
78317865

78327866
node_txn.clear();
78337867
};

0 commit comments

Comments
 (0)