@@ -2509,10 +2509,10 @@ fn claim_htlc_outputs_shared_tx() {
25092509 let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
25102510
25112511 // 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 );
25132513 // 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 );
25162516
25172517 // Get the will-be-revoked local txn from node[0]
25182518 let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
@@ -2535,9 +2535,9 @@ fn claim_htlc_outputs_shared_tx() {
25352535 check_added_monitors!(nodes[1], 1);
25362536 check_closed_event!(nodes[1], 1, ClosureReason::CommitmentTxConfirmed);
25372537 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() );
25392539
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) ;
25412541 assert_eq!(node_txn.len(), 2); // ChannelMonitor: penalty tx, ChannelManager: local commitment
25422542
25432543 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() {
25542554
25552555 // Next nodes[1] broadcasts its current local tx state:
25562556 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);
25582564 }
25592565 get_announce_close_broadcast_events(&nodes, 0, 1);
25602566 assert_eq!(nodes[0].node.list_channels().len(), 0);
@@ -2573,11 +2579,11 @@ fn claim_htlc_outputs_single_tx() {
25732579 let chan_1 = create_announced_chan_between_nodes(&nodes, 0, 1, InitFeatures::known(), InitFeatures::known());
25742580
25752581 // 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 );
25772583 // 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
25782584 // 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 );
25812587
25822588 // Get the will-be-revoked local txn from node[0]
25832589 let revoked_local_txn = get_local_commitment_txn!(nodes[0], chan_1.2);
@@ -2599,9 +2605,9 @@ fn claim_htlc_outputs_single_tx() {
25992605 }
26002606
26012607 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() );
26032609
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) ;
26052611 assert!(node_txn.len() == 9 || node_txn.len() == 10);
26062612
26072613 // Check the pair local commitment and HTLC-timeout broadcast due to HTLC expiration
@@ -2629,6 +2635,14 @@ fn claim_htlc_outputs_single_tx() {
26292635 assert_eq!(*witness_lens.iter().skip(0).next().unwrap(), 77); // revoked to_local
26302636 assert_eq!(*witness_lens.iter().skip(1).next().unwrap(), OFFERED_HTLC_SCRIPT_WEIGHT); // revoked offered HTLC
26312637 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);
26322646 }
26332647 get_announce_close_broadcast_events(&nodes, 0, 1);
26342648 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) {
72597273 check_added_monitors!(nodes[0], 1);
72607274 check_closed_event!(nodes[0], 1, ClosureReason::CommitmentTxConfirmed);
72617275 assert_eq!(nodes[0].node.get_and_clear_pending_events().len(), 0);
7276+
72627277 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+
72647285 if !revoked {
7265- expect_payment_failed!(nodes[0], dust_hash, true);
72667286 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);
72727287 } 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);
72927289 }
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);
72937295 }
72947296}
72957297
0 commit comments