@@ -101,8 +101,8 @@ BlockSourceResult<ValidatedBlockHeader> {
101101/// let mut cache = UnboundedCache::new();
102102/// let mut monitor_listener = (monitor, &*tx_broadcaster, &*fee_estimator, &*logger);
103103/// 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) ),
106106/// ];
107107/// let chain_tip = init::synchronize_listeners(
108108/// block_source, Network::Bitcoin, &mut cache, listeners).await.unwrap();
@@ -125,7 +125,7 @@ pub async fn synchronize_listeners<B: BlockSource, C: Cache>(
125125 block_source : & mut B ,
126126 network : Network ,
127127 header_cache : & mut C ,
128- mut chain_listeners : Vec < ( BlockHash , & dyn chain:: Listen ) > ,
128+ mut chain_listeners : Vec < ( BlockHash , & ( dyn chain:: Listen + Send + Sync ) ) > ,
129129) -> BlockSourceResult < ValidatedBlockHeader > {
130130 let best_header = validate_best_block_header ( block_source) . await ?;
131131
@@ -198,7 +198,7 @@ impl<'a, C: Cache> Cache for ReadOnlyCache<'a, C> {
198198}
199199
200200/// 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 ) ) ;
202202
203203impl < ' a > chain:: Listen for DynamicChainListener < ' a > {
204204 fn block_connected ( & self , _block : & Block , _height : u32 ) {
@@ -211,7 +211,7 @@ impl<'a> chain::Listen for DynamicChainListener<'a> {
211211}
212212
213213/// 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 ) ) > ) ;
215215
216216impl < ' a > chain:: Listen for ChainListenerSet < ' a > {
217217 fn block_connected ( & self , block : & Block , height : u32 ) {
@@ -249,9 +249,9 @@ mod tests {
249249 . expect_block_connected ( * chain. at_height ( 4 ) ) ;
250250
251251 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 ) ) ,
255255 ] ;
256256 let mut cache = chain. header_cache ( 0 ..=4 ) ;
257257 match synchronize_listeners ( & mut chain, Network :: Bitcoin , & mut cache, listeners) . await {
@@ -284,9 +284,9 @@ mod tests {
284284 . expect_block_connected ( * main_chain. at_height ( 4 ) ) ;
285285
286286 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 ) ) ,
290290 ] ;
291291 let mut cache = fork_chain_1. header_cache ( 2 ..=4 ) ;
292292 cache. extend ( fork_chain_2. header_cache ( 3 ..=4 ) ) ;
@@ -327,9 +327,9 @@ mod tests {
327327 . expect_block_connected ( * main_chain. at_height ( 4 ) ) ;
328328
329329 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 ) ) ,
333333 ] ;
334334 let mut cache = fork_chain_1. header_cache ( 2 ..=4 ) ;
335335 cache. extend ( fork_chain_2. header_cache ( 3 ..=4 ) ) ;
@@ -351,7 +351,7 @@ mod tests {
351351 . expect_block_disconnected ( * old_tip)
352352 . expect_block_connected ( * new_tip) ;
353353
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 ) ) ] ;
355355 let mut cache = fork_chain. header_cache ( 2 ..=2 ) ;
356356 match synchronize_listeners ( & mut main_chain, Network :: Bitcoin , & mut cache, listeners) . await {
357357 Ok ( _) => {
0 commit comments