@@ -101,8 +101,8 @@ BlockSourceResult<ValidatedBlockHeader> {
101
101
/// let mut cache = UnboundedCache::new();
102
102
/// let mut monitor_listener = (monitor, &*tx_broadcaster, &*fee_estimator, &*logger);
103
103
/// let listeners = vec![
104
- /// (monitor_block_hash, &monitor_listener as &dyn chain::Listen),
105
- /// (manager_block_hash, &manager as &dyn chain::Listen),
104
+ /// (monitor_block_hash, &monitor_listener as &( dyn chain::Listen + Send + Sync) ),
105
+ /// (manager_block_hash, &manager as &( dyn chain::Listen + Send + Sync) ),
106
106
/// ];
107
107
/// let chain_tip = init::synchronize_listeners(
108
108
/// block_source, Network::Bitcoin, &mut cache, listeners).await.unwrap();
@@ -125,7 +125,7 @@ pub async fn synchronize_listeners<B: BlockSource, C: Cache>(
125
125
block_source : & mut B ,
126
126
network : Network ,
127
127
header_cache : & mut C ,
128
- mut chain_listeners : Vec < ( BlockHash , & dyn chain:: Listen ) > ,
128
+ mut chain_listeners : Vec < ( BlockHash , & ( dyn chain:: Listen + Send + Sync ) ) > ,
129
129
) -> BlockSourceResult < ValidatedBlockHeader > {
130
130
let best_header = validate_best_block_header ( block_source) . await ?;
131
131
@@ -198,7 +198,7 @@ impl<'a, C: Cache> Cache for ReadOnlyCache<'a, C> {
198
198
}
199
199
200
200
/// Wrapper for supporting dynamically sized chain listeners.
201
- struct DynamicChainListener < ' a > ( & ' a dyn chain:: Listen ) ;
201
+ struct DynamicChainListener < ' a > ( & ' a ( dyn chain:: Listen + Send + Sync ) ) ;
202
202
203
203
impl < ' a > chain:: Listen for DynamicChainListener < ' a > {
204
204
fn block_connected ( & self , _block : & Block , _height : u32 ) {
@@ -211,7 +211,7 @@ impl<'a> chain::Listen for DynamicChainListener<'a> {
211
211
}
212
212
213
213
/// A set of dynamically sized chain listeners, each paired with a starting block height.
214
- struct ChainListenerSet < ' a > ( Vec < ( u32 , & ' a dyn chain:: Listen ) > ) ;
214
+ struct ChainListenerSet < ' a > ( Vec < ( u32 , & ' a ( dyn chain:: Listen + Send + Sync ) ) > ) ;
215
215
216
216
impl < ' a > chain:: Listen for ChainListenerSet < ' a > {
217
217
fn block_connected ( & self , block : & Block , height : u32 ) {
@@ -249,9 +249,9 @@ mod tests {
249
249
. expect_block_connected ( * chain. at_height ( 4 ) ) ;
250
250
251
251
let listeners = vec ! [
252
- ( chain. at_height( 1 ) . block_hash, & listener_1 as & dyn chain:: Listen ) ,
253
- ( chain. at_height( 2 ) . block_hash, & listener_2 as & dyn chain:: Listen ) ,
254
- ( chain. at_height( 3 ) . block_hash, & listener_3 as & dyn chain:: Listen ) ,
252
+ ( chain. at_height( 1 ) . block_hash, & listener_1 as & ( dyn chain:: Listen + Send + Sync ) ) ,
253
+ ( chain. at_height( 2 ) . block_hash, & listener_2 as & ( dyn chain:: Listen + Send + Sync ) ) ,
254
+ ( chain. at_height( 3 ) . block_hash, & listener_3 as & ( dyn chain:: Listen + Send + Sync ) ) ,
255
255
] ;
256
256
let mut cache = chain. header_cache ( 0 ..=4 ) ;
257
257
match synchronize_listeners ( & mut chain, Network :: Bitcoin , & mut cache, listeners) . await {
@@ -284,9 +284,9 @@ mod tests {
284
284
. expect_block_connected ( * main_chain. at_height ( 4 ) ) ;
285
285
286
286
let listeners = vec ! [
287
- ( fork_chain_1. tip( ) . block_hash, & listener_1 as & dyn chain:: Listen ) ,
288
- ( fork_chain_2. tip( ) . block_hash, & listener_2 as & dyn chain:: Listen ) ,
289
- ( fork_chain_3. tip( ) . block_hash, & listener_3 as & dyn chain:: Listen ) ,
287
+ ( fork_chain_1. tip( ) . block_hash, & listener_1 as & ( dyn chain:: Listen + Send + Sync ) ) ,
288
+ ( fork_chain_2. tip( ) . block_hash, & listener_2 as & ( dyn chain:: Listen + Send + Sync ) ) ,
289
+ ( fork_chain_3. tip( ) . block_hash, & listener_3 as & ( dyn chain:: Listen + Send + Sync ) ) ,
290
290
] ;
291
291
let mut cache = fork_chain_1. header_cache ( 2 ..=4 ) ;
292
292
cache. extend ( fork_chain_2. header_cache ( 3 ..=4 ) ) ;
@@ -327,9 +327,9 @@ mod tests {
327
327
. expect_block_connected ( * main_chain. at_height ( 4 ) ) ;
328
328
329
329
let listeners = vec ! [
330
- ( fork_chain_1. tip( ) . block_hash, & listener_1 as & dyn chain:: Listen ) ,
331
- ( fork_chain_2. tip( ) . block_hash, & listener_2 as & dyn chain:: Listen ) ,
332
- ( fork_chain_3. tip( ) . block_hash, & listener_3 as & dyn chain:: Listen ) ,
330
+ ( fork_chain_1. tip( ) . block_hash, & listener_1 as & ( dyn chain:: Listen + Send + Sync ) ) ,
331
+ ( fork_chain_2. tip( ) . block_hash, & listener_2 as & ( dyn chain:: Listen + Send + Sync ) ) ,
332
+ ( fork_chain_3. tip( ) . block_hash, & listener_3 as & ( dyn chain:: Listen + Send + Sync ) ) ,
333
333
] ;
334
334
let mut cache = fork_chain_1. header_cache ( 2 ..=4 ) ;
335
335
cache. extend ( fork_chain_2. header_cache ( 3 ..=4 ) ) ;
@@ -351,7 +351,7 @@ mod tests {
351
351
. expect_block_disconnected ( * old_tip)
352
352
. expect_block_connected ( * new_tip) ;
353
353
354
- let listeners = vec ! [ ( old_tip. block_hash, & listener as & dyn chain:: Listen ) ] ;
354
+ let listeners = vec ! [ ( old_tip. block_hash, & listener as & ( dyn chain:: Listen + Send + Sync ) ) ] ;
355
355
let mut cache = fork_chain. header_cache ( 2 ..=2 ) ;
356
356
match synchronize_listeners ( & mut main_chain, Network :: Bitcoin , & mut cache, listeners) . await {
357
357
Ok ( _) => {
0 commit comments