@@ -8422,48 +8422,48 @@ fn test_pre_lockin_no_chan_closed_update() {
8422
8422
#[ test]
8423
8423
fn test_htlc_no_detection ( ) {
8424
8424
// This test is a mutation to underscore the detection logic bug we had
8425
- // before #653. HTLC value routed is above the remaining balance, thus
8426
- // inverting HTLC and `to_remote` output. HTLC will come second and
8427
- // it wouldn't be seen by pre-#653 detection as we were enumerate()'ing
8428
- // on a watched outputs vector (Vec<TxOut>) thus implicitly relying on
8429
- // outputs order detection for correct spending children filtring.
8430
-
8431
- let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
8432
- let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
8433
- let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
8434
- let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
8435
-
8436
- // Create some initial channels
8437
- let chan_1 = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100000 , 10001 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
8438
-
8439
- send_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] ) [ ..] , 1_000_000 , 1_000_000 ) ;
8440
- let ( _, our_payment_hash) = route_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] ) [ ..] , 2_000_000 ) ;
8441
- let local_txn = get_local_commitment_txn ! ( nodes[ 0 ] , chan_1. 2 ) ;
8442
- assert_eq ! ( local_txn[ 0 ] . input. len( ) , 1 ) ;
8443
- assert_eq ! ( local_txn[ 0 ] . output. len( ) , 3 ) ;
8444
- check_spends ! ( local_txn[ 0 ] , chan_1. 3 ) ;
8445
-
8446
- // Timeout HTLC on A's chain and so it can generate a HTLC-Timeout tx
8447
- let header = BlockHeader { version : 0x20000000 , prev_blockhash : Default :: default ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
8448
- connect_block ( & nodes[ 0 ] , & Block { header, txdata : vec ! [ local_txn[ 0 ] . clone( ) ] } , 200 ) ;
8425
+ // before #653. HTLC value routed is above the remaining balance, thus
8426
+ // inverting HTLC and `to_remote` output. HTLC will come second and
8427
+ // it wouldn't be seen by pre-#653 detection as we were enumerate()'ing
8428
+ // on a watched outputs vector (Vec<TxOut>) thus implicitly relying on
8429
+ // outputs order detection for correct spending children filtring.
8430
+
8431
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
8432
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
8433
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
8434
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
8435
+
8436
+ // Create some initial channels
8437
+ let chan_1 = create_announced_chan_between_nodes_with_value ( & nodes, 0 , 1 , 100000 , 10001 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
8438
+
8439
+ send_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] ) [ ..] , 1_000_000 , 1_000_000 ) ;
8440
+ let ( _, our_payment_hash) = route_payment ( & nodes[ 0 ] , & vec ! ( & nodes[ 1 ] ) [ ..] , 2_000_000 ) ;
8441
+ let local_txn = get_local_commitment_txn ! ( nodes[ 0 ] , chan_1. 2 ) ;
8442
+ assert_eq ! ( local_txn[ 0 ] . input. len( ) , 1 ) ;
8443
+ assert_eq ! ( local_txn[ 0 ] . output. len( ) , 3 ) ;
8444
+ check_spends ! ( local_txn[ 0 ] , chan_1. 3 ) ;
8445
+
8446
+ // Timeout HTLC on A's chain and so it can generate a HTLC-Timeout tx
8447
+ let header = BlockHeader { version : 0x20000000 , prev_blockhash : Default :: default ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
8448
+ connect_block ( & nodes[ 0 ] , & Block { header, txdata : vec ! [ local_txn[ 0 ] . clone( ) ] } , 200 ) ;
8449
8449
// We deliberately connect the local tx twice as this should provoke a failure calling
8450
8450
// this test before #653 fix.
8451
- connect_block ( & nodes[ 0 ] , & Block { header, txdata : vec ! [ local_txn[ 0 ] . clone( ) ] } , 200 ) ;
8452
- check_closed_broadcast ! ( nodes[ 0 ] , false ) ;
8453
- check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
8454
-
8455
- let htlc_timeout = {
8456
- let node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
8457
- assert_eq ! ( node_txn[ 0 ] . input. len( ) , 1 ) ;
8458
- assert_eq ! ( node_txn[ 0 ] . input[ 0 ] . witness. last( ) . unwrap( ) . len( ) , OFFERED_HTLC_SCRIPT_WEIGHT ) ;
8459
- check_spends ! ( node_txn[ 0 ] , local_txn[ 0 ] ) ;
8460
- node_txn[ 0 ] . clone ( )
8461
- } ;
8462
-
8463
- let header_201 = BlockHeader { version : 0x20000000 , prev_blockhash : header. block_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
8464
- connect_block ( & nodes[ 0 ] , & Block { header : header_201, txdata : vec ! [ htlc_timeout. clone( ) ] } , 201 ) ;
8465
- connect_blocks ( & nodes[ 0 ] , ANTI_REORG_DELAY - 1 , 201 , true , header_201. block_hash ( ) ) ;
8466
- expect_payment_failed ! ( nodes[ 0 ] , our_payment_hash, true ) ;
8451
+ connect_block ( & nodes[ 0 ] , & Block { header, txdata : vec ! [ local_txn[ 0 ] . clone( ) ] } , 200 ) ;
8452
+ check_closed_broadcast ! ( nodes[ 0 ] , false ) ;
8453
+ check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
8454
+
8455
+ let htlc_timeout = {
8456
+ let node_txn = nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
8457
+ assert_eq ! ( node_txn[ 0 ] . input. len( ) , 1 ) ;
8458
+ assert_eq ! ( node_txn[ 0 ] . input[ 0 ] . witness. last( ) . unwrap( ) . len( ) , OFFERED_HTLC_SCRIPT_WEIGHT ) ;
8459
+ check_spends ! ( node_txn[ 0 ] , local_txn[ 0 ] ) ;
8460
+ node_txn[ 0 ] . clone ( )
8461
+ } ;
8462
+
8463
+ let header_201 = BlockHeader { version : 0x20000000 , prev_blockhash : header. block_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
8464
+ connect_block ( & nodes[ 0 ] , & Block { header : header_201, txdata : vec ! [ htlc_timeout. clone( ) ] } , 201 ) ;
8465
+ connect_blocks ( & nodes[ 0 ] , ANTI_REORG_DELAY - 1 , 201 , true , header_201. block_hash ( ) ) ;
8466
+ expect_payment_failed ! ( nodes[ 0 ] , our_payment_hash, true ) ;
8467
8467
}
8468
8468
8469
8469
fn do_test_onchain_htlc_settlement_after_close ( broadcast_alice : bool , go_onchain_before_fulfill : bool ) {
0 commit comments