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