Skip to content

Commit dcb0659

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 020f407 commit dcb0659

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

lightning/src/ln/functional_tests.rs

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7784,12 +7784,14 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
77847784
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0]);
77857785
assert_eq!(revoked_htlc_txn[1].input.len(), 1);
77867786
assert_eq!(revoked_htlc_txn[1].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
7787+
assert_eq!(revoked_htlc_txn[1].output.len(), 1);
77877788
check_spends!(revoked_htlc_txn[1], revoked_local_txn[0]);
77887789
} else if revoked_htlc_txn[1].input[0].witness.last().unwrap().len() == ACCEPTED_HTLC_SCRIPT_WEIGHT {
77897790
assert_eq!(revoked_htlc_txn[1].input.len(), 1);
77907791
check_spends!(revoked_htlc_txn[1], revoked_local_txn[0]);
77917792
assert_eq!(revoked_htlc_txn[0].input.len(), 1);
77927793
assert_eq!(revoked_htlc_txn[0].input[0].witness.last().unwrap().len(), OFFERED_HTLC_SCRIPT_WEIGHT);
7794+
assert_eq!(revoked_htlc_txn[0].output.len(), 1);
77937795
check_spends!(revoked_htlc_txn[0], revoked_local_txn[0]);
77947796
}
77957797

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

7820-
// Connect three more block to see if bumped penalty are issued for HTLC txn
7847+
// Connect one more block to see if bumped penalty are issued for HTLC txn
78217848
let header_130 = BlockHeader { version: 0x20000000, prev_blockhash: header_129.block_hash(), merkle_root: Default::default(), time: 42, bits: 42, nonce: 42 };
78227849
nodes[0].block_notifier.block_connected(&Block { header: header_130, txdata: penalty_txn }, 130);
78237850
{
@@ -7826,6 +7853,11 @@ fn test_bump_penalty_txn_on_revoked_htlcs() {
78267853

78277854
check_spends!(node_txn[0], revoked_local_txn[0]);
78287855
check_spends!(node_txn[1], revoked_local_txn[0]);
7856+
// Note that these are both bogus - they spend outputs already claimed in block 129:
7857+
assert!((node_txn[0].input[0].previous_output == revoked_htlc_txn[0].input[0].previous_output &&
7858+
node_txn[1].input[0].previous_output == revoked_htlc_txn[1].input[0].previous_output) ||
7859+
(node_txn[0].input[0].previous_output == revoked_htlc_txn[1].input[0].previous_output &&
7860+
node_txn[1].input[0].previous_output == revoked_htlc_txn[0].input[0].previous_output));
78297861

78307862
node_txn.clear();
78317863
};

0 commit comments

Comments
 (0)