@@ -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,7 @@ 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 = nodes. iter ( ) . map ( |node| node. blocks . borrow ( ) . len ( ) ) . max ( ) . unwrap ( ) as u32 ;
2753
+ let node_max_height = nodes. iter ( ) . map ( |node| node. blocks . lock ( ) . unwrap ( ) . len ( ) ) . max ( ) . unwrap ( ) as u32 ;
2754
2754
connect_blocks ( & nodes[ 0 ] , node_max_height - nodes[ 0 ] . best_block_info ( ) . 1 ) ;
2755
2755
connect_blocks ( & nodes[ 1 ] , node_max_height - nodes[ 1 ] . best_block_info ( ) . 1 ) ;
2756
2756
connect_blocks ( & nodes[ 2 ] , node_max_height - nodes[ 2 ] . best_block_info ( ) . 1 ) ;
@@ -4523,7 +4523,7 @@ fn test_dup_htlc_onchain_fails_on_reload() {
4523
4523
// Note that if we re-connect the block which exposed nodes[0] to the payment preimage (but
4524
4524
// which the current ChannelMonitor has not seen), the ChannelManager's de-duplication of
4525
4525
// 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 ) ;
4526
+ nodes[ 0 ] . chain_monitor . chain_monitor . block_connected ( & claim_block, nodes[ 0 ] . blocks . lock ( ) . unwrap ( ) . len ( ) as u32 - 1 ) ;
4527
4527
assert ! ( nodes[ 0 ] . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
4528
4528
}
4529
4529
@@ -5244,7 +5244,7 @@ fn test_onchain_to_onchain_claim() {
5244
5244
let chan_2 = create_announced_chan_between_nodes ( & nodes, 1 , 2 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
5245
5245
5246
5246
// Ensure all nodes are at the same height
5247
- let node_max_height = nodes. iter ( ) . map ( |node| node. blocks . borrow ( ) . len ( ) ) . max ( ) . unwrap ( ) as u32 ;
5247
+ let node_max_height = nodes. iter ( ) . map ( |node| node. blocks . lock ( ) . unwrap ( ) . len ( ) ) . max ( ) . unwrap ( ) as u32 ;
5248
5248
connect_blocks ( & nodes[ 0 ] , node_max_height - nodes[ 0 ] . best_block_info ( ) . 1 ) ;
5249
5249
connect_blocks ( & nodes[ 1 ] , node_max_height - nodes[ 1 ] . best_block_info ( ) . 1 ) ;
5250
5250
connect_blocks ( & nodes[ 2 ] , node_max_height - nodes[ 2 ] . best_block_info ( ) . 1 ) ;
@@ -5357,7 +5357,7 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
5357
5357
let chan_2 = create_announced_chan_between_nodes ( & nodes, 1 , 2 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
5358
5358
create_announced_chan_between_nodes ( & nodes, 2 , 3 , InitFeatures :: known ( ) , InitFeatures :: known ( ) ) ;
5359
5359
5360
- let node_max_height = nodes. iter ( ) . map ( |node| node. blocks . borrow ( ) . len ( ) ) . max ( ) . unwrap ( ) as u32 ;
5360
+ let node_max_height = nodes. iter ( ) . map ( |node| node. blocks . lock ( ) . unwrap ( ) . len ( ) ) . max ( ) . unwrap ( ) as u32 ;
5361
5361
connect_blocks ( & nodes[ 0 ] , node_max_height - nodes[ 0 ] . best_block_info ( ) . 1 ) ;
5362
5362
connect_blocks ( & nodes[ 1 ] , node_max_height - nodes[ 1 ] . best_block_info ( ) . 1 ) ;
5363
5363
connect_blocks ( & nodes[ 2 ] , node_max_height - nodes[ 2 ] . best_block_info ( ) . 1 ) ;
@@ -7689,7 +7689,7 @@ fn test_data_loss_protect() {
7689
7689
logger = test_utils:: TestLogger :: with_id ( format ! ( "node {}" , 0 ) ) ;
7690
7690
let mut chain_monitor = <( BlockHash , ChannelMonitor < EnforcingSigner > ) >:: read ( & mut :: std:: io:: Cursor :: new ( previous_chain_monitor_state. 0 ) , keys_manager) . unwrap ( ) . 1 ;
7691
7691
chain_source = test_utils:: TestChainSource :: new ( Network :: Testnet ) ;
7692
- tx_broadcaster = test_utils:: TestBroadcaster { txn_broadcasted : Mutex :: new ( Vec :: new ( ) ) } ;
7692
+ tx_broadcaster = test_utils:: TestBroadcaster { txn_broadcasted : Mutex :: new ( Vec :: new ( ) ) , blocks : Arc :: new ( Mutex :: new ( Vec :: new ( ) ) ) } ;
7693
7693
fee_estimator = test_utils:: TestFeeEstimator { sat_per_kw : 253 } ;
7694
7694
persister = test_utils:: TestPersister :: new ( ) ;
7695
7695
monitor = test_utils:: TestChainMonitor :: new ( Some ( & chain_source) , & tx_broadcaster, & logger, & fee_estimator, & persister, keys_manager) ;
@@ -8474,13 +8474,16 @@ fn test_secret_timeout() {
8474
8474
if let Err ( APIError :: APIMisuseError { err } ) = nodes[ 1 ] . node . create_inbound_payment_for_hash ( payment_hash, Some ( 100_000 ) , 2 , 0 ) {
8475
8475
assert_eq ! ( err, "Duplicate payment hash" ) ;
8476
8476
} 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 ! [ ] ,
8477
+ let mut block = {
8478
+ let node_1_blocks = nodes[ 1 ] . blocks . lock ( ) . unwrap ( ) ;
8479
+ Block {
8480
+ header : BlockHeader {
8481
+ version : 0x2000000 ,
8482
+ prev_blockhash : node_1_blocks. last ( ) . unwrap ( ) . 0 . block_hash ( ) ,
8483
+ merkle_root : Default :: default ( ) ,
8484
+ time : node_1_blocks. len ( ) as u32 + 7200 , bits : 42 , nonce : 42 } ,
8485
+ txdata : vec ! [ ] ,
8486
+ }
8484
8487
} ;
8485
8488
connect_block ( & nodes[ 1 ] , & block) ;
8486
8489
if let Err ( APIError :: APIMisuseError { err } ) = nodes[ 1 ] . node . create_inbound_payment_for_hash ( payment_hash, Some ( 100_000 ) , 2 , 0 ) {
@@ -8630,6 +8633,9 @@ fn test_update_err_monitor_lockdown() {
8630
8633
watchtower
8631
8634
} ;
8632
8635
let header = BlockHeader { version : 0x20000000 , prev_blockhash : Default :: default ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
8636
+ // Make the tx_broadcaster aware of enough blocks that it doesn't think we're violating
8637
+ // transaction lock time requirements here.
8638
+ chanmon_cfgs[ 0 ] . tx_broadcaster . blocks . lock ( ) . unwrap ( ) . resize ( 200 , ( header, 0 ) ) ;
8633
8639
watchtower. chain_monitor . block_connected ( & Block { header, txdata : vec ! [ ] } , 200 ) ;
8634
8640
8635
8641
// Try to update ChannelMonitor
@@ -8689,6 +8695,9 @@ fn test_concurrent_monitor_claim() {
8689
8695
watchtower
8690
8696
} ;
8691
8697
let header = BlockHeader { version : 0x20000000 , prev_blockhash : Default :: default ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
8698
+ // Make the tx_broadcaster aware of enough blocks that it doesn't think we're violating
8699
+ // transaction lock time requirements here.
8700
+ 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
8701
watchtower_alice. chain_monitor . block_connected ( & Block { header, txdata : vec ! [ ] } , CHAN_CONFIRM_DEPTH + 1 + TEST_FINAL_CLTV + LATENCY_GRACE_PERIOD_BLOCKS ) ;
8693
8702
8694
8703
// Watchtower Alice should have broadcast a commitment/HTLC-timeout
0 commit comments