@@ -70,6 +70,9 @@ pub struct Client {
7070
7171 importer : Importer ,
7272
73+ /// Handles block sealing
74+ miner : Arc < Miner > ,
75+
7376 /// Timer for reseal_min_period on miner client
7477 reseal_timer : TimerApi ,
7578}
@@ -101,7 +104,7 @@ impl Client {
101104
102105 let engine = scheme. engine . clone ( ) ;
103106
104- let importer = Importer :: try_new ( config, engine. clone ( ) , message_channel. clone ( ) , miner) ?;
107+ let importer = Importer :: try_new ( config, engine. clone ( ) , message_channel. clone ( ) , Arc :: clone ( & miner) ) ?;
105108
106109 let client = Arc :: new ( Client {
107110 engine,
@@ -112,6 +115,7 @@ impl Client {
112115 notify : RwLock :: new ( Vec :: new ( ) ) ,
113116 queue_transactions : AtomicUsize :: new ( 0 ) ,
114117 importer,
118+ miner,
115119 reseal_timer,
116120 } ) ;
117121
@@ -162,7 +166,7 @@ impl Client {
162166
163167 /// This is triggered by a message coming from a engine when a new block should be created
164168 pub fn update_sealing ( & self , parent_block : BlockId , allow_empty_block : bool ) {
165- self . importer . miner . update_sealing ( self , parent_block, allow_empty_block) ;
169+ self . miner . update_sealing ( self , parent_block, allow_empty_block) ;
166170 }
167171
168172 fn block_hash ( chain : & BlockChain , id : & BlockId ) -> Option < BlockHash > {
@@ -193,7 +197,7 @@ impl Client {
193197 self . queue_transactions . fetch_sub ( transactions. len ( ) , AtomicOrdering :: SeqCst ) ;
194198 let transactions: Vec < UnverifiedTransaction > =
195199 transactions. iter ( ) . filter_map ( |bytes| Rlp :: new ( bytes) . as_val ( ) . ok ( ) ) . collect ( ) ;
196- let results = self . importer . miner . import_external_transactions ( self , transactions) ;
200+ let results = self . miner . import_external_transactions ( self , transactions) ;
197201 results. len ( )
198202 }
199203
@@ -223,7 +227,7 @@ impl Client {
223227 }
224228
225229 let enacted = self . importer . extract_enacted ( vec ! [ update_result] ) ;
226- self . importer . miner . chain_new_blocks ( self , & [ ] , & [ ] , & enacted) ;
230+ self . miner . chain_new_blocks ( self , & [ ] , & [ ] , & enacted) ;
227231 self . new_blocks ( & [ ] , & [ ] , & enacted) ;
228232 }
229233
@@ -465,18 +469,15 @@ impl ImportBlock for Client {
465469 update_result
466470 } ;
467471 let enacted = self . importer . extract_enacted ( vec ! [ update_result] ) ;
468- self . importer . miner . chain_new_blocks ( self , & [ h] , & [ ] , & enacted) ;
472+ self . miner . chain_new_blocks ( self , & [ h] , & [ ] , & enacted) ;
469473 self . new_blocks ( & [ h] , & [ ] , & enacted) ;
470474 self . db ( ) . flush ( ) . expect ( "DB flush failed." ) ;
471475 Ok ( h)
472476 }
473477
474478 fn set_min_timer ( & self ) {
475479 self . reseal_timer . cancel ( RESEAL_MIN_TIMER_TOKEN ) . expect ( "Reseal min timer clear succeeds" ) ;
476- match self
477- . reseal_timer
478- . schedule_once ( self . importer . miner . get_options ( ) . reseal_min_period , RESEAL_MIN_TIMER_TOKEN )
479- {
480+ match self . reseal_timer . schedule_once ( self . miner . get_options ( ) . reseal_min_period , RESEAL_MIN_TIMER_TOKEN ) {
480481 Ok ( _) => { }
481482 Err ( TimerScheduleError :: TokenAlreadyScheduled ) => {
482483 // Since set_min_timer could be called in multi thread, ignore the TokenAlreadyScheduled error
@@ -493,7 +494,7 @@ impl BlockChainClient for Client {
493494
494495 /// Import own transaction
495496 fn queue_own_transaction ( & self , transaction : VerifiedTransaction ) -> Result < ( ) , Error > {
496- self . importer . miner . import_own_transaction ( self , transaction) ?;
497+ self . miner . import_own_transaction ( self , transaction) ?;
497498 Ok ( ( ) )
498499 }
499500
@@ -516,31 +517,31 @@ impl BlockChainClient for Client {
516517 }
517518
518519 fn delete_all_pending_transactions ( & self ) {
519- self . importer . miner . delete_all_pending_transactions ( ) ;
520+ self . miner . delete_all_pending_transactions ( ) ;
520521 }
521522
522523 fn ready_transactions ( & self , range : Range < u64 > ) -> PendingVerifiedTransactions {
523524 let size_limit = self
524525 . common_params ( BlockId :: Latest )
525526 . expect ( "Common params of the latest block always exists" )
526527 . max_body_size ( ) ;
527- self . importer . miner . ready_transactions ( size_limit, range)
528+ self . miner . ready_transactions ( size_limit, range)
528529 }
529530
530531 fn count_pending_transactions ( & self , range : Range < u64 > ) -> usize {
531- self . importer . miner . count_pending_transactions ( range)
532+ self . miner . count_pending_transactions ( range)
532533 }
533534
534535 fn future_pending_transactions ( & self , range : Range < u64 > ) -> PendingVerifiedTransactions {
535- self . importer . miner . future_pending_transactions ( range)
536+ self . miner . future_pending_transactions ( range)
536537 }
537538
538539 fn future_included_count_pending_transactions ( & self , range : Range < u64 > ) -> usize {
539- self . importer . miner . future_included_count_pending_transactions ( range)
540+ self . miner . future_included_count_pending_transactions ( range)
540541 }
541542
542543 fn is_pending_queue_empty ( & self ) -> bool {
543- self . importer . miner . status ( ) . transactions_in_pending_queue == 0
544+ self . miner . status ( ) . transactions_in_pending_queue == 0
544545 }
545546
546547 fn block_number ( & self , id : & BlockId ) -> Option < BlockNumber > {
@@ -641,23 +642,23 @@ impl BlockProducer for Client {
641642
642643impl MiningBlockChainClient for Client {
643644 fn get_malicious_users ( & self ) -> Vec < Public > {
644- self . importer . miner . get_malicious_users ( )
645+ self . miner . get_malicious_users ( )
645646 }
646647
647648 fn release_malicious_users ( & self , prisoner_vec : Vec < Public > ) {
648- self . importer . miner . release_malicious_users ( prisoner_vec)
649+ self . miner . release_malicious_users ( prisoner_vec)
649650 }
650651
651652 fn imprison_malicious_users ( & self , prisoner_vec : Vec < Public > ) {
652- self . importer . miner . imprison_malicious_users ( prisoner_vec)
653+ self . miner . imprison_malicious_users ( prisoner_vec)
653654 }
654655
655656 fn get_immune_users ( & self ) -> Vec < Public > {
656- self . importer . miner . get_immune_users ( )
657+ self . miner . get_immune_users ( )
657658 }
658659
659660 fn register_immune_users ( & self , immune_user_vec : Vec < Public > ) {
660- self . importer . miner . register_immune_users ( immune_user_vec)
661+ self . miner . register_immune_users ( immune_user_vec)
661662 }
662663}
663664
0 commit comments