@@ -54,7 +54,7 @@ use prelude::*;
54
54
use alloc:: collections:: BTreeSet ;
55
55
use std:: collections:: { HashMap , HashSet } ;
56
56
use core:: default:: Default ;
57
- use std:: sync:: Mutex ;
57
+ use std:: sync:: { Arc , Mutex } ;
58
58
59
59
use ln:: functional_test_utils:: * ;
60
60
use ln:: chan_utils:: CommitmentTransaction ;
@@ -2750,7 +2750,8 @@ fn test_htlc_on_chain_success() {
2750
2750
let chan_2 = create_announced_chan_between_nodes ( & nodes, 1 , 2 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
2751
2751
2752
2752
// Ensure all nodes are at the same height
2753
- let node_max_height = std:: cmp:: max ( nodes[ 0 ] . blocks . borrow ( ) . len ( ) , std:: cmp:: max ( nodes[ 1 ] . blocks . borrow ( ) . len ( ) , nodes[ 2 ] . blocks . borrow ( ) . len ( ) ) ) as u32 ;
2753
+ let node_max_height = std:: cmp:: max ( nodes[ 0 ] . blocks . lock ( ) . unwrap ( ) . len ( ) ,
2754
+ std:: cmp:: max ( nodes[ 1 ] . blocks . lock ( ) . unwrap ( ) . len ( ) , nodes[ 2 ] . blocks . lock ( ) . unwrap ( ) . len ( ) ) ) as u32 ;
2754
2755
connect_blocks ( & nodes[ 0 ] , node_max_height - nodes[ 0 ] . best_block_info ( ) . 1 ) ;
2755
2756
connect_blocks ( & nodes[ 1 ] , node_max_height - nodes[ 1 ] . best_block_info ( ) . 1 ) ;
2756
2757
connect_blocks ( & nodes[ 2 ] , node_max_height - nodes[ 2 ] . best_block_info ( ) . 1 ) ;
@@ -4523,7 +4524,7 @@ fn test_dup_htlc_onchain_fails_on_reload() {
4523
4524
// Note that if we re-connect the block which exposed nodes[0] to the payment preimage (but
4524
4525
// which the current ChannelMonitor has not seen), the ChannelManager's de-duplication of
4525
4526
// payment events should kick in, leaving us with no pending events here.
4526
- nodes[ 0 ] . chain_monitor . chain_monitor . block_connected ( & claim_block, nodes[ 0 ] . blocks . borrow ( ) . len ( ) as u32 - 1 ) ;
4527
+ nodes[ 0 ] . chain_monitor . chain_monitor . block_connected ( & claim_block, nodes[ 0 ] . blocks . lock ( ) . unwrap ( ) . len ( ) as u32 - 1 ) ;
4527
4528
assert ! ( nodes[ 0 ] . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
4528
4529
}
4529
4530
@@ -5244,7 +5245,8 @@ fn test_onchain_to_onchain_claim() {
5244
5245
let chan_2 = create_announced_chan_between_nodes ( & nodes, 1 , 2 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
5245
5246
5246
5247
// Ensure all nodes are at the same height
5247
- let node_max_height = std:: cmp:: max ( nodes[ 0 ] . blocks . borrow ( ) . len ( ) , std:: cmp:: max ( nodes[ 1 ] . blocks . borrow ( ) . len ( ) , nodes[ 2 ] . blocks . borrow ( ) . len ( ) ) ) as u32 ;
5248
+ let node_max_height = std:: cmp:: max ( nodes[ 0 ] . blocks . lock ( ) . unwrap ( ) . len ( ) ,
5249
+ std:: cmp:: max ( nodes[ 1 ] . blocks . lock ( ) . unwrap ( ) . len ( ) , nodes[ 2 ] . blocks . lock ( ) . unwrap ( ) . len ( ) ) ) as u32 ;
5248
5250
connect_blocks ( & nodes[ 0 ] , node_max_height - nodes[ 0 ] . best_block_info ( ) . 1 ) ;
5249
5251
connect_blocks ( & nodes[ 1 ] , node_max_height - nodes[ 1 ] . best_block_info ( ) . 1 ) ;
5250
5252
connect_blocks ( & nodes[ 2 ] , node_max_height - nodes[ 2 ] . best_block_info ( ) . 1 ) ;
@@ -5357,7 +5359,9 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
5357
5359
let chan_2 = create_announced_chan_between_nodes ( & nodes, 1 , 2 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
5358
5360
create_announced_chan_between_nodes ( & nodes, 2 , 3 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
5359
5361
5360
- let node_max_height = std:: cmp:: max ( std:: cmp:: max ( nodes[ 0 ] . blocks . borrow ( ) . len ( ) , nodes[ 1 ] . blocks . borrow ( ) . len ( ) ) , std:: cmp:: max ( nodes[ 2 ] . blocks . borrow ( ) . len ( ) , nodes[ 3 ] . blocks . borrow ( ) . len ( ) ) ) as u32 ;
5362
+ let node_max_height = std:: cmp:: max (
5363
+ std:: cmp:: max ( nodes[ 0 ] . blocks . lock ( ) . unwrap ( ) . len ( ) , nodes[ 1 ] . blocks . lock ( ) . unwrap ( ) . len ( ) ) ,
5364
+ std:: cmp:: max ( nodes[ 2 ] . blocks . lock ( ) . unwrap ( ) . len ( ) , nodes[ 3 ] . blocks . lock ( ) . unwrap ( ) . len ( ) ) ) as u32 ;
5361
5365
connect_blocks ( & nodes[ 0 ] , node_max_height - nodes[ 0 ] . best_block_info ( ) . 1 ) ;
5362
5366
connect_blocks ( & nodes[ 1 ] , node_max_height - nodes[ 1 ] . best_block_info ( ) . 1 ) ;
5363
5367
connect_blocks ( & nodes[ 2 ] , node_max_height - nodes[ 2 ] . best_block_info ( ) . 1 ) ;
@@ -7689,7 +7693,7 @@ fn test_data_loss_protect() {
7689
7693
logger = test_utils:: TestLogger :: with_id ( format ! ( "node {}" , 0 ) ) ;
7690
7694
let mut chain_monitor = <( BlockHash , ChannelMonitor < EnforcingSigner > ) >:: read ( & mut :: std:: io:: Cursor :: new ( previous_chain_monitor_state. 0 ) , keys_manager) . unwrap ( ) . 1 ;
7691
7695
chain_source = test_utils:: TestChainSource :: new ( Network :: Testnet ) ;
7692
- tx_broadcaster = test_utils:: TestBroadcaster { txn_broadcasted : Mutex :: new ( Vec :: new ( ) ) } ;
7696
+ tx_broadcaster = test_utils:: TestBroadcaster { txn_broadcasted : Mutex :: new ( Vec :: new ( ) ) , blocks : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
7693
7697
fee_estimator = test_utils:: TestFeeEstimator { sat_per_kw : 253 } ;
7694
7698
persister = test_utils:: TestPersister :: new ( ) ;
7695
7699
monitor = test_utils:: TestChainMonitor :: new ( Some ( & chain_source) , & tx_broadcaster, & logger, & fee_estimator, & persister, keys_manager) ;
@@ -8474,14 +8478,18 @@ fn test_secret_timeout() {
8474
8478
if let Err ( APIError :: APIMisuseError { err } ) = nodes[ 1 ] . node . create_inbound_payment_for_hash ( payment_hash, Some ( 100_000 ) , 2 , 0 ) {
8475
8479
assert_eq ! ( err, "Duplicate payment hash" ) ;
8476
8480
} else { panic ! ( ) ; }
8477
- let mut block = Block {
8478
- header : BlockHeader {
8479
- version : 0x2000000 ,
8480
- prev_blockhash : nodes[ 1 ] . blocks . borrow ( ) . last ( ) . unwrap ( ) . 0 . block_hash ( ) ,
8481
- merkle_root : Default :: default ( ) ,
8482
- time : nodes[ 1 ] . blocks . borrow ( ) . len ( ) as u32 + 7200 , bits : 42 , nonce : 42 } ,
8483
- txdata : vec ! [ ] ,
8484
- } ;
8481
+ let mut block;
8482
+ {
8483
+ let node_1_blocks = nodes[ 1 ] . blocks . lock ( ) . unwrap ( ) ;
8484
+ block = Block {
8485
+ header : BlockHeader {
8486
+ version : 0x2000000 ,
8487
+ prev_blockhash : node_1_blocks. last ( ) . unwrap ( ) . 0 . block_hash ( ) ,
8488
+ merkle_root : Default :: default ( ) ,
8489
+ time : node_1_blocks. len ( ) as u32 + 7200 , bits : 42 , nonce : 42 } ,
8490
+ txdata : vec ! [ ] ,
8491
+ } ;
8492
+ }
8485
8493
connect_block ( & nodes[ 1 ] , & block) ;
8486
8494
if let Err ( APIError :: APIMisuseError { err } ) = nodes[ 1 ] . node . create_inbound_payment_for_hash ( payment_hash, Some ( 100_000 ) , 2 , 0 ) {
8487
8495
assert_eq ! ( err, "Duplicate payment hash" ) ;
@@ -8630,6 +8638,9 @@ fn test_update_err_monitor_lockdown() {
8630
8638
watchtower
8631
8639
} ;
8632
8640
let header = BlockHeader { version : 0x20000000 , prev_blockhash : Default :: default ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
8641
+ // Make the tx_broadcaster aware of enough blocks that it doesn't think we're violating
8642
+ // transaction lock time requirements here.
8643
+ chanmon_cfgs[ 0 ] . tx_broadcaster . blocks . lock ( ) . unwrap ( ) . resize ( 200 , ( header, 0 ) ) ;
8633
8644
watchtower. chain_monitor . block_connected ( & Block { header, txdata : vec ! [ ] } , 200 ) ;
8634
8645
8635
8646
// Try to update ChannelMonitor
@@ -8689,6 +8700,9 @@ fn test_concurrent_monitor_claim() {
8689
8700
watchtower
8690
8701
} ;
8691
8702
let header = BlockHeader { version : 0x20000000 , prev_blockhash : Default :: default ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
8703
+ // Make the tx_broadcaster aware of enough blocks that it doesn't think we're violating
8704
+ // transaction lock time requirements here.
8705
+ chanmon_cfgs[ 0 ] . tx_broadcaster . blocks . lock ( ) . unwrap ( ) . resize ( ( CHAN_CONFIRM_DEPTH + 1 + TEST_FINAL_CLTV + LATENCY_GRACE_PERIOD_BLOCKS ) as usize , ( header, 0 ) ) ;
8692
8706
watchtower_alice. chain_monitor . block_connected ( & Block { header, txdata : vec ! [ ] } , CHAN_CONFIRM_DEPTH + 1 + TEST_FINAL_CLTV + LATENCY_GRACE_PERIOD_BLOCKS ) ;
8693
8707
8694
8708
// Watchtower Alice should have broadcast a commitment/HTLC-timeout
0 commit comments