@@ -2509,10 +2509,10 @@ fn claim_htlc_outputs_shared_tx() {
2509
2509
let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
2510
2510
2511
2511
// Rebalance the network to generate htlc in the two directions
2512
- send_payment(&nodes[0], &vec!( &nodes[1])[.. ], 8000000 );
2512
+ send_payment(&nodes[0], &[ &nodes[1]], 8_000_000 );
2513
2513
// node[0] is gonna to revoke an old state thus node[1] should be able to claim both offered/received HTLC outputs on top of commitment tx
2514
- let payment_preimage_1 = route_payment(&nodes[0], &vec!( &nodes[1])[.. ], 3000000 ).0;
2515
- let (_payment_preimage_2, payment_hash_2, _) = route_payment(&nodes[1], &vec!( &nodes[0])[.. ], 3000000 );
2514
+ let payment_preimage_1 = route_payment(&nodes[0], &[ &nodes[1]], 3_000_000 ).0;
2515
+ let (_payment_preimage_2, payment_hash_2, _) = route_payment(&nodes[1], &[ &nodes[0]], 3_000_000 );
2516
2516
2517
2517
// Get the will-be-revoked local txn from node[0]
2518
2518
let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
@@ -2535,9 +2535,9 @@ fn claim_htlc_outputs_shared_tx() {
2535
2535
check_added_monitors!(nodes[1], 1);
2536
2536
check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
2537
2537
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
2538
- expect_payment_failed !(nodes[1], payment_hash_2, true );
2538
+ assert !(nodes[1].node.get_and_clear_pending_events().is_empty() );
2539
2539
2540
- let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
2540
+ let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0) ;
2541
2541
assert_eq!(node_txn.len(), 2); // ChannelMonitor: penalty tx, ChannelManager: local commitment
2542
2542
2543
2543
assert_eq!(node_txn[0].input.len(), 3); // Claim the revoked output + both revoked HTLC outputs
@@ -2554,7 +2554,13 @@ fn claim_htlc_outputs_shared_tx() {
2554
2554
2555
2555
// Next nodes[1] broadcasts its current local tx state:
2556
2556
assert_eq!(node_txn[1].input.len(), 1);
2557
- assert_eq!(node_txn[1].input[0].previous_output.txid, chan_1.3.txid()); //Spending funding tx unique txouput, tx broadcasted by ChannelManager
2557
+ check_spends!(node_txn[1], chan_1.3);
2558
+
2559
+ // Finally, mine the penalty transaction and check that we get an HTLC failure after
2560
+ // ANTI_REORG_DELAY confirmations.
2561
+ mine_transaction(&nodes[1], &node_txn[0]);
2562
+ connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
2563
+ expect_payment_failed!(nodes[1], payment_hash_2, true);
2558
2564
}
2559
2565
get_announce_close_broadcast_events(&nodes, 0, 1);
2560
2566
assert_eq!(nodes[0].node.list_channels().len(), 0);
@@ -2573,11 +2579,11 @@ fn claim_htlc_outputs_single_tx() {
2573
2579
let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
2574
2580
2575
2581
// Rebalance the network to generate htlc in the two directions
2576
- send_payment(&nodes[0], &vec!( &nodes[1])[.. ], 8000000 );
2582
+ send_payment(&nodes[0], &[ &nodes[1]], 8_000_000 );
2577
2583
// node[0] is gonna to revoke an old state thus node[1] should be able to claim both offered/received HTLC outputs on top of commitment tx, but this
2578
2584
// time as two different claim transactions as we're gonna to timeout htlc with given a high current height
2579
- let payment_preimage_1 = route_payment(&nodes[0], &vec!( &nodes[1])[.. ], 3000000 ).0;
2580
- let (_payment_preimage_2, payment_hash_2, _payment_secret_2) = route_payment(&nodes[1], &vec!( &nodes[0])[.. ], 3000000 );
2585
+ let payment_preimage_1 = route_payment(&nodes[0], &[ &nodes[1]], 3_000_000 ).0;
2586
+ let (_payment_preimage_2, payment_hash_2, _payment_secret_2) = route_payment(&nodes[1], &[ &nodes[0]], 3_000_000 );
2581
2587
2582
2588
// Get the will-be-revoked local txn from node[0]
2583
2589
let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
@@ -2599,9 +2605,9 @@ fn claim_htlc_outputs_single_tx() {
2599
2605
}
2600
2606
2601
2607
connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
2602
- expect_payment_failed !(nodes[1], payment_hash_2, true );
2608
+ assert !(nodes[1].node.get_and_clear_pending_events().is_empty() );
2603
2609
2604
- let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap();
2610
+ let node_txn = nodes[1].tx_broadcaster.txn_broadcasted.lock().unwrap().split_off(0) ;
2605
2611
assert!(node_txn.len() == 9 || node_txn.len() == 10);
2606
2612
2607
2613
// Check the pair local commitment and HTLC-timeout broadcast due to HTLC expiration
@@ -2629,6 +2635,14 @@ fn claim_htlc_outputs_single_tx() {
2629
2635
assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
2630
2636
assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
2631
2637
assert_eq!(*witness_lens.iter().skip(2).next().unwrap(), ACCEPTED_HTLC_SCRIPT_WEIGHT); // revoked received HTLC
2638
+
2639
+ // Finally, mine the penalty transactions and check that we get an HTLC failure after
2640
+ // ANTI_REORG_DELAY confirmations.
2641
+ mine_transaction(&nodes[1], &node_txn[2]);
2642
+ mine_transaction(&nodes[1], &node_txn[3]);
2643
+ mine_transaction(&nodes[1], &node_txn[4]);
2644
+ connect_blocks(&nodes[1], ANTI_REORG_DELAY - 1);
2645
+ expect_payment_failed!(nodes[1], payment_hash_2, true);
2632
2646
}
2633
2647
get_announce_close_broadcast_events(&nodes, 0, 1);
2634
2648
assert_eq!(nodes[0].node.list_channels().len(), 0);
@@ -7259,37 +7273,25 @@ fn do_test_sweep_outbound_htlc_failure_update(revoked: bool, local: bool) {
7259
7273
check_added_monitors!(nodes[0], 1);
7260
7274
check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
7261
7275
assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
7276
+
7262
7277
connect_blocks(&nodes[0], TEST_FINAL_CLTV - 1); // Confirm blocks until the HTLC expires
7263
- timeout_tx.push(nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap()[1].clone());
7278
+ timeout_tx = nodes[0].tx_broadcaster.txn_broadcasted.lock().unwrap().drain(..)
7279
+ .filter(|tx| tx.input[0].previous_output.txid == bs_commitment_tx[0].txid()).collect();
7280
+ check_spends!(timeout_tx[0], bs_commitment_tx[0]);
7281
+ // For both a revoked or non-revoked commitment transaction, after ANTI_REORG_DELAY the
7282
+ // dust HTLC should have been failed.
7283
+ expect_payment_failed!(nodes[0], dust_hash, true);
7284
+
7264
7285
if !revoked {
7265
- expect_payment_failed!(nodes[0], dust_hash, true);
7266
7286
assert_eq!(timeout_tx[0].input[0].witness.last().unwrap().len(), ACCEPTED_HTLC_SCRIPT_WEIGHT);
7267
- // We fail non-dust-HTLC 2 by broadcast of local timeout tx on remote commitment tx
7268
- mine_transaction(&nodes[0], &timeout_tx[0]);
7269
- assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
7270
- connect_blocks(&nodes[0], ANTI_REORG_DELAY - 1);
7271
- expect_payment_failed!(nodes[0], non_dust_hash, true);
7272
7287
} else {
7273
- // If revoked, both dust & non-dust HTLCs should have been failed after ANTI_REORG_DELAY confs of revoked
7274
- // commitment tx
7275
- let events = nodes[0].node.get_and_clear_pending_events();
7276
- assert_eq!(events.len(), 2);
7277
- let first;
7278
- match events[0] {
7279
- Event::PaymentPathFailed { payment_hash, .. } => {
7280
- if payment_hash == dust_hash { first = true; }
7281
- else { first = false; }
7282
- },
7283
- _ => panic!("Unexpected event"),
7284
- }
7285
- match events[1] {
7286
- Event::PaymentPathFailed { payment_hash, .. } => {
7287
- if first { assert_eq!(payment_hash, non_dust_hash); }
7288
- else { assert_eq!(payment_hash, dust_hash); }
7289
- },
7290
- _ => panic!("Unexpected event"),
7291
- }
7288
+ assert_eq!(timeout_tx[0].lock_time, 0);
7292
7289
}
7290
+ // We fail non-dust-HTLC 2 by broadcast of local timeout/revocation-claim tx
7291
+ mine_transaction(&nodes[0], &timeout_tx[0]);
7292
+ assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
7293
+ connect_blocks(&nodes[0], ANTI_REORG_DELAY - 1);
7294
+ expect_payment_failed!(nodes[0], non_dust_hash, true);
7293
7295
}
7294
7296
}
7295
7297
0 commit comments