Skip to content

Commit e0e3ac7

Browse files
Seulgi Kimmajecty
authored andcommitted
Make the miner always have AccountProvider
Currently, AccountProvider in the miner is optional to support unit tests who cannot use the account provider which uses the permanent storage. This commit makes the miner uses memory back-end AccountProvider for test.
1 parent 80181ea commit e0e3ac7

File tree

3 files changed

+22
-33
lines changed

3 files changed

+22
-33
lines changed

codechain/run_node.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ fn new_miner(
131131
ap: Arc<AccountProvider>,
132132
db: Arc<dyn KeyValueDB>,
133133
) -> Result<Arc<Miner>, String> {
134-
let miner = Miner::new(config.miner_options()?, scheme, Some(ap), db);
134+
let miner = Miner::new(config.miner_options()?, scheme, ap, db);
135135

136136
match miner.engine_type() {
137137
EngineType::PoW => match &config.mining.author {

core/src/client/test_client.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ impl TestBlockChainClient {
150150
seqs: RwLock::new(HashMap::new()),
151151
storage: RwLock::new(HashMap::new()),
152152
queue_size: AtomicUsize::new(0),
153-
miner: Arc::new(Miner::with_scheme(&scheme, db)),
153+
miner: Arc::new(Miner::with_scheme_for_test(&scheme, db)),
154154
scheme,
155155
latest_block_timestamp: RwLock::new(10_000_000),
156156
history: RwLock::new(None),

core/src/miner/miner.rs

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ pub struct Miner {
124124

125125
sealing_enabled: AtomicBool,
126126

127-
accounts: Option<Arc<AccountProvider>>,
127+
accounts: Arc<AccountProvider>,
128128
notifiers: Notifiers,
129129
malicious_users: Users,
130130
immune_users: Users,
@@ -266,20 +266,20 @@ impl Miner {
266266
pub fn new(
267267
options: MinerOptions,
268268
scheme: &Scheme,
269-
accounts: Option<Arc<AccountProvider>>,
269+
accounts: Arc<AccountProvider>,
270270
db: Arc<dyn KeyValueDB>,
271271
) -> Arc<Self> {
272272
Arc::new(Self::new_raw(options, scheme, accounts, db))
273273
}
274274

275-
pub fn with_scheme(scheme: &Scheme, db: Arc<dyn KeyValueDB>) -> Self {
276-
Self::new_raw(Default::default(), scheme, None, db)
275+
pub fn with_scheme_for_test(scheme: &Scheme, db: Arc<dyn KeyValueDB>) -> Self {
276+
Self::new_raw(Default::default(), scheme, AccountProvider::transient_provider(), db)
277277
}
278278

279279
fn new_raw(
280280
options: MinerOptions,
281281
scheme: &Scheme,
282-
accounts: Option<Arc<AccountProvider>>,
282+
accounts: Arc<AccountProvider>,
283283
db: Arc<dyn KeyValueDB>,
284284
) -> Self {
285285
let mem_limit = options.mem_pool_memory_limit.unwrap_or_else(usize::max_value);
@@ -401,15 +401,11 @@ impl Miner {
401401
self.immune_users.insert(signer_address);
402402
}
403403

404-
let origin = self
405-
.accounts
406-
.as_ref()
407-
.and_then(|accounts| match accounts.has_public(&signer_public) {
408-
Ok(true) => Some(TxOrigin::Local),
409-
Ok(false) => None,
410-
Err(_) => None,
411-
})
412-
.unwrap_or(default_origin);
404+
let origin = if self.accounts.has_public(&signer_public).unwrap_or_default() {
405+
TxOrigin::Local
406+
} else {
407+
default_origin
408+
};
413409

414410
if self.malicious_users.contains(&signer_address) {
415411
// FIXME: just to skip, think about another way.
@@ -834,24 +830,17 @@ impl MinerService for Miner {
834830
self.params.apply(|params| params.author = address);
835831

836832
if self.engine_type().need_signer_key() && self.engine.seals_internally().is_some() {
837-
if let Some(ref ap) = self.accounts {
838-
ctrace!(MINER, "Set author to {:?}", address);
839-
// Sign test message
840-
ap.get_unlocked_account(&address)?.sign(&Default::default())?;
841-
// Limit the scope of the locks.
842-
{
843-
let mut sealing_work = self.sealing_work.lock();
844-
sealing_work.enabled = true;
845-
}
846-
self.engine.set_signer(ap.clone(), address);
847-
Ok(())
848-
} else {
849-
cwarn!(MINER, "No account provider");
850-
Err(AccountProviderError::NotFound)
833+
ctrace!(MINER, "Set author to {:?}", address);
834+
// Sign test message
835+
self.accounts.get_unlocked_account(&address)?.sign(&Default::default())?;
836+
// Limit the scope of the locks.
837+
{
838+
let mut sealing_work = self.sealing_work.lock();
839+
sealing_work.enabled = true;
851840
}
852-
} else {
853-
Ok(())
841+
self.engine.set_signer(Arc::clone(&self.accounts), address);
854842
}
843+
Ok(())
855844
}
856845

857846
fn get_author_address(&self) -> Address {
@@ -1280,7 +1269,7 @@ pub mod test {
12801269
fn check_add_transactions_result_idx() {
12811270
let db = Arc::new(kvdb_memorydb::create(NUM_COLUMNS.unwrap()));
12821271
let scheme = Scheme::new_test();
1283-
let miner = Arc::new(Miner::with_scheme(&scheme, db.clone()));
1272+
let miner = Arc::new(Miner::with_scheme_for_test(&scheme, db.clone()));
12841273

12851274
let mut mem_pool = MemPool::with_limits(8192, usize::max_value(), 3, db.clone(), Default::default());
12861275
let client = generate_test_client(db, Arc::clone(&miner), &scheme).unwrap();

0 commit comments

Comments
 (0)