Skip to content

Commit

Permalink
Fix test_bump_penalty_txn_on_remote_commitment
Browse files Browse the repository at this point in the history
  • Loading branch information
arik-so committed Dec 11, 2024
1 parent 65c25ed commit 98ede1c
Showing 1 changed file with 32 additions and 24 deletions.
56 changes: 32 additions & 24 deletions lightning/src/ln/functional_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7758,22 +7758,29 @@ fn test_bump_penalty_txn_on_remote_commitment() {
let node_chanmgrs = create_node_chanmgrs(2, &node_cfgs, &[None, None]);
let nodes = create_network(2, &node_cfgs, &node_chanmgrs);

let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000);
let (payment_preimage, payment_hash, ..) = route_payment(&nodes[0], &[&nodes[1]], 3_000_000);
route_payment(&nodes[1], &vec!(&nodes[0])[..], 3000000).0;

// Remote commitment txn with 4 outputs : to_local, to_remote, 1 outgoing HTLC, 1 incoming HTLC
let remote_txn = get_local_commitment_txn!(nodes[0], chan.2);
assert_eq!(remote_txn[0].output.len(), 4);
assert_eq!(remote_txn[0].input.len(), 1);
assert_eq!(remote_txn[0].input[0].previous_output.txid, chan.3.compute_txid());

// Claim a HTLC without revocation (provide B monitor with preimage)
nodes[1].node.claim_funds(payment_preimage);
expect_payment_claimed!(nodes[1], payment_hash, 3_000_000);
mine_transaction(&nodes[1], &remote_txn[0]);
check_added_monitors!(nodes[1], 2);
connect_blocks(&nodes[1], TEST_FINAL_CLTV); // Confirm blocks until the HTLC expires
let remote_txn = {
let htlc_value_a_msats = 847_000;
let htlc_value_b_msats = 546_000;

let chan = create_announced_chan_between_nodes_with_value(&nodes, 0, 1, 1000000, 59000000);
let (payment_preimage, payment_hash, ..) = route_payment(&nodes[0], &[&nodes[1]], htlc_value_a_msats);
route_payment(&nodes[1], &vec!(&nodes[0])[..], htlc_value_b_msats).0;

// Remote commitment txn with 4 outputs : to_local, to_remote, 1 outgoing HTLC, 1 incoming HTLC
let remote_txn = get_local_commitment_txn!(nodes[0], chan.2);
assert_eq!(remote_txn[0].output.len(), 4);
assert_eq!(remote_txn[0].input.len(), 1);
assert_eq!(remote_txn[0].input[0].previous_output.txid, chan.3.compute_txid());

// Claim a HTLC without revocation (provide B monitor with preimage)
nodes[1].node.claim_funds(payment_preimage);
expect_payment_claimed!(nodes[1], payment_hash, htlc_value_a_msats);
mine_transaction(&nodes[1], &remote_txn[0]);
check_added_monitors!(nodes[1], 2);
connect_blocks(&nodes[1], TEST_FINAL_CLTV); // Confirm blocks until the HTLC expires

remote_txn
};

// One or more claim tx should have been broadcast, check it
let timeout;
Expand All @@ -7783,9 +7790,11 @@ fn test_bump_penalty_txn_on_remote_commitment() {
let feerate_preimage;
{
let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
// 3 transactions including:
// 3-6 transactions including:
// preimage and timeout sweeps from remote commitment + preimage sweep bump
assert_eq!(node_txn.len(), 3);
// plus, depending on the block connection style, two further bumps
assert!(node_txn.len() >= 3);
assert!(node_txn.len() <= 6);
assert_eq!(node_txn[0].input.len(), 1);
assert_eq!(node_txn[1].input.len(), 1);
assert_eq!(node_txn[2].input.len(), 1);
Expand All @@ -7798,11 +7807,9 @@ fn test_bump_penalty_txn_on_remote_commitment() {
let fee = remote_txn[0].output[index as usize].value.to_sat() - node_txn[0].output[0].value.to_sat();
feerate_preimage = fee * 1000 / node_txn[0].weight().to_wu();

let (preimage_bump_tx, timeout_tx) = if node_txn[2].input[0].previous_output == node_txn[0].input[0].previous_output {
(node_txn[2].clone(), node_txn[1].clone())
} else {
(node_txn[1].clone(), node_txn[2].clone())
};
let preimage_tx = &node_txn[0];
let timeout_tx = node_txn.iter().skip(1).find(|t| t.input[0].previous_output != preimage_tx.input[0].previous_output).unwrap().clone();
let preimage_bump_tx = node_txn.iter().skip(1).find(|t| t.input[0].previous_output == preimage_tx.input[0].previous_output).unwrap().clone();

preimage_bump = preimage_bump_tx;
check_spends!(preimage_bump, remote_txn[0]);
Expand All @@ -7822,7 +7829,8 @@ fn test_bump_penalty_txn_on_remote_commitment() {
connect_blocks(&nodes[1], crate::chain::package::LOW_FREQUENCY_BUMP_INTERVAL);
{
let mut node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
assert_eq!(node_txn.len(), 1);
assert!(node_txn.len() >= 1);
assert!(node_txn.len() <= 2);
assert_eq!(node_txn[0].input.len(), 1);
assert_eq!(preimage_bump.input.len(), 1);
check_spends!(node_txn[0], remote_txn[0]);
Expand Down

0 comments on commit 98ede1c

Please sign in to comment.