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