Skip to content

Commit 791e639

Browse files
Seulgi Kimmajecty
authored andcommitted
Make the client hold the miner directly
Currently, the client access the miner through the importer. It's better to give a method to access the miner directly.
1 parent fe4ecd4 commit 791e639

File tree

2 files changed

+23
-22
lines changed

2 files changed

+23
-22
lines changed

core/src/client/client.rs

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -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

642643
impl 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

core/src/client/importer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ pub struct Importer {
5050
pub header_queue: HeaderQueue,
5151

5252
/// Handles block sealing
53-
pub miner: Arc<Miner>,
53+
miner: Arc<Miner>,
5454

5555
/// CodeChain engine to be used during import
5656
pub engine: Arc<dyn CodeChainEngine>,

0 commit comments

Comments
 (0)