Skip to content

Commit fc6fec0

Browse files
Seulgi Kimmergify[bot]
authored andcommitted
Do not export TrieDB and TrieDBMut
This patch makes codechain use Trie and TrieMut which are abstracted interfaces instead of concrete implementations.
1 parent ed66d37 commit fc6fec0

File tree

9 files changed

+56
-57
lines changed

9 files changed

+56
-57
lines changed

core/src/scheme/scheme.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use std::sync::Arc;
2020
use ccrypto::{blake256, BLAKE_NULL_RLP};
2121
use cjson;
2222
use ckey::Address;
23-
use cmerkle::TrieFactory;
23+
use cmerkle::{TrieFactory, TrieMut};
2424
use cstate::{Metadata, MetadataAddress, Shard, ShardAddress, StateDB, StateResult, StateWithCache, TopLevelState};
2525
use ctypes::errors::SyntaxError;
2626
use ctypes::{BlockHash, CommonParams, Header, ShardId};

state/src/impls/shard_level.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ impl<'db> ShardLevelState<'db> {
670670
fn get_asset_scheme_mut(&self, shard_id: ShardId, asset_type: H160) -> cmerkle::Result<RefMut<AssetScheme>> {
671671
let db = self.db.borrow();
672672
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
673-
self.cache.asset_scheme_mut(&AssetSchemeAddress::new(asset_type, shard_id), &*trie)
673+
self.cache.asset_scheme_mut(&AssetSchemeAddress::new(asset_type, shard_id), &trie)
674674
}
675675

676676
pub fn create_asset(
@@ -697,13 +697,13 @@ impl<'db> ShardStateView for ShardLevelState<'db> {
697697
fn asset_scheme(&self, asset_type: H160) -> cmerkle::Result<Option<AssetScheme>> {
698698
let db = self.db.borrow();
699699
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
700-
self.cache.asset_scheme(&AssetSchemeAddress::new(asset_type, self.shard_id), &*trie)
700+
self.cache.asset_scheme(&AssetSchemeAddress::new(asset_type, self.shard_id), &trie)
701701
}
702702

703703
fn asset(&self, tracker: Tracker, index: usize) -> Result<Option<OwnedAsset>, TrieError> {
704704
let db = self.db.borrow();
705705
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
706-
self.cache.asset(&OwnedAssetAddress::new(tracker, index, self.shard_id), &*trie)
706+
self.cache.asset(&OwnedAssetAddress::new(tracker, index, self.shard_id), &trie)
707707
}
708708
}
709709

@@ -780,13 +780,13 @@ impl<'db> ShardStateView for ReadOnlyShardLevelState<'db> {
780780
fn asset_scheme(&self, asset_type: H160) -> cmerkle::Result<Option<AssetScheme>> {
781781
let db = self.db.borrow();
782782
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
783-
self.cache.asset_scheme(&AssetSchemeAddress::new(asset_type, self.shard_id), &*trie)
783+
self.cache.asset_scheme(&AssetSchemeAddress::new(asset_type, self.shard_id), &trie)
784784
}
785785

786786
fn asset(&self, tracker: Tracker, index: usize) -> Result<Option<OwnedAsset>, TrieError> {
787787
let db = self.db.borrow();
788788
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
789-
self.cache.asset(&OwnedAssetAddress::new(tracker, index, self.shard_id), &*trie)
789+
self.cache.asset(&OwnedAssetAddress::new(tracker, index, self.shard_id), &trie)
790790
}
791791
}
792792

state/src/impls/top_level.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -105,28 +105,28 @@ impl TopStateView for TopLevelState {
105105
fn account(&self, a: &Address) -> TrieResult<Option<Account>> {
106106
let db = self.db.borrow();
107107
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
108-
self.top_cache.account(&a, &*trie)
108+
self.top_cache.account(&a, &trie)
109109
}
110110

111111
fn regular_account_by_address(&self, a: &Address) -> TrieResult<Option<RegularAccount>> {
112112
let a = RegularAccountAddress::from_address(a);
113113
let db = self.db.borrow();
114114
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
115-
Ok(self.top_cache.regular_account(&a, &*trie)?)
115+
Ok(self.top_cache.regular_account(&a, &trie)?)
116116
}
117117

118118
fn metadata(&self) -> TrieResult<Option<Metadata>> {
119119
let db = self.db.borrow();
120120
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
121121
let address = MetadataAddress::new();
122-
self.top_cache.metadata(&address, &*trie)
122+
self.top_cache.metadata(&address, &trie)
123123
}
124124

125125
fn shard(&self, shard_id: ShardId) -> TrieResult<Option<Shard>> {
126126
let db = self.db.borrow();
127127
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
128128
let shard_address = ShardAddress::new(shard_id);
129-
self.top_cache.shard(&shard_address, &*trie)
129+
self.top_cache.shard(&shard_address, &trie)
130130
}
131131

132132
fn shard_state<'db>(&'db self, shard_id: ShardId) -> TrieResult<Option<Box<dyn ShardStateView + 'db>>> {
@@ -143,13 +143,13 @@ impl TopStateView for TopLevelState {
143143
fn text(&self, key: &H256) -> TrieResult<Option<Text>> {
144144
let db = self.db.borrow();
145145
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
146-
Ok(self.top_cache.text(key, &*trie)?.map(Into::into))
146+
Ok(self.top_cache.text(key, &trie)?.map(Into::into))
147147
}
148148

149149
fn action_data(&self, key: &H256) -> TrieResult<Option<ActionData>> {
150150
let db = self.db.borrow();
151151
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
152-
Ok(self.top_cache.action_data(key, &*trie)?.map(Into::into))
152+
Ok(self.top_cache.action_data(key, &trie)?.map(Into::into))
153153
}
154154
}
155155

@@ -173,14 +173,14 @@ impl StateWithCache for TopLevelState {
173173

174174
let shard_cache = self.shard_caches.get_mut(&shard_id).expect("Shard must exist");
175175

176-
shard_cache.commit(&mut *trie)?;
176+
shard_cache.commit(&mut trie)?;
177177
}
178178
self.set_shard_root(shard_id, shard_root)?;
179179
}
180180
{
181181
let mut db = self.db.borrow_mut();
182182
let mut trie = TrieFactory::from_existing(db.as_hashdb_mut(), &mut self.root)?;
183-
self.top_cache.commit(&mut *trie)?;
183+
self.top_cache.commit(&mut trie)?;
184184
}
185185
Ok(self.root)
186186
}
@@ -636,46 +636,46 @@ impl TopLevelState {
636636

637637
let db = self.db.borrow();
638638
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
639-
self.top_cache.account_mut(&a, &*trie)
639+
self.top_cache.account_mut(&a, &trie)
640640
}
641641

642642
fn get_regular_account_mut(&self, public: &Public) -> TrieResult<RefMut<RegularAccount>> {
643643
let regular_account_address = RegularAccountAddress::new(public);
644644
let db = self.db.borrow();
645645
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
646-
self.top_cache.regular_account_mut(&regular_account_address, &*trie)
646+
self.top_cache.regular_account_mut(&regular_account_address, &trie)
647647
}
648648

649649
fn get_metadata_mut(&self) -> TrieResult<RefMut<Metadata>> {
650650
let db = self.db.borrow();
651651
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
652652
let address = MetadataAddress::new();
653-
self.top_cache.metadata_mut(&address, &*trie)
653+
self.top_cache.metadata_mut(&address, &trie)
654654
}
655655

656656
fn get_shard_mut(&self, shard_id: ShardId) -> TrieResult<RefMut<Shard>> {
657657
let db = self.db.borrow();
658658
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
659659
let shard_address = ShardAddress::new(shard_id);
660-
self.top_cache.shard_mut(&shard_address, &*trie)
660+
self.top_cache.shard_mut(&shard_address, &trie)
661661
}
662662

663663
fn get_text(&self, key: &TxHash) -> TrieResult<Option<Text>> {
664664
let db = self.db.borrow();
665665
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
666-
self.top_cache.text(key, &*trie)
666+
self.top_cache.text(key, &trie)
667667
}
668668

669669
fn get_text_mut(&self, key: &TxHash) -> TrieResult<RefMut<Text>> {
670670
let db = self.db.borrow();
671671
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
672-
self.top_cache.text_mut(key, &*trie)
672+
self.top_cache.text_mut(key, &trie)
673673
}
674674

675675
fn get_action_data_mut(&self, key: &H256) -> TrieResult<RefMut<ActionData>> {
676676
let db = self.db.borrow();
677677
let trie = TrieFactory::readonly(db.as_hashdb(), &self.root)?;
678-
self.top_cache.action_data_mut(key, &*trie)
678+
self.top_cache.action_data_mut(key, &trie)
679679
}
680680

681681
pub fn journal_under(&self, batch: &mut DBTransaction, now: u64) -> Result<u32, UtilError> {

state/src/tests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
pub mod helpers {
1818
use std::sync::Arc;
1919

20-
use cmerkle::TrieFactory;
20+
use cmerkle::{TrieFactory, TrieMut};
2121
use ctypes::{BlockNumber, Tracker};
2222
use cvm::ChainTimeInfo;
2323
use hashdb::AsHashDB;

sync/src/snapshot/snapshot.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ mod tests {
296296

297297
use ccore::COL_STATE;
298298

299-
use cmerkle::{Trie, TrieDB, TrieDBMut, TrieMut};
299+
use cmerkle::{Trie, TrieFactory, TrieMut};
300300
use journaldb;
301301
use journaldb::Algorithm;
302302
use kvdb_memorydb;
@@ -315,7 +315,7 @@ mod tests {
315315
let kvdb = Arc::new(kvdb_memorydb::create(1));
316316
let mut jdb = journaldb::new(kvdb.clone(), Algorithm::Archive, COL_STATE);
317317
{
318-
let _ = TrieDBMut::new(jdb.as_hashdb_mut(), &mut root);
318+
let _ = TrieFactory::create(jdb.as_hashdb_mut(), &mut root);
319319
}
320320
/* do nothing */
321321
let result = snapshot.write_snapshot(kvdb.as_ref(), &root);
@@ -341,7 +341,7 @@ mod tests {
341341
let kvdb = Arc::new(kvdb_memorydb::create(1));
342342
let mut jdb = journaldb::new(kvdb.clone(), Algorithm::Archive, COL_STATE);
343343
{
344-
let mut t = TrieDBMut::new(jdb.as_hashdb_mut(), &mut root);
344+
let mut t = TrieFactory::create(jdb.as_hashdb_mut(), &mut root);
345345
let mut inserted_keys = HashSet::new();
346346
for &(ref key, ref value) in &x {
347347
if !inserted_keys.insert(key) {
@@ -364,8 +364,8 @@ mod tests {
364364
let kvdb = Arc::new(kvdb_memorydb::create(1));
365365
snapshot.read_snapshot(kvdb.clone(), &root).unwrap();
366366

367-
let mut jdb = journaldb::new(kvdb, Algorithm::Archive, COL_STATE);
368-
let t = TrieDB::try_new(jdb.as_hashdb_mut(), &root).unwrap();
367+
let jdb = journaldb::new(kvdb, Algorithm::Archive, COL_STATE);
368+
let t = TrieFactory::readonly(jdb.as_hashdb(), &root).unwrap();
369369
let mut inserted_keys = HashSet::new();
370370
for &(ref key, ref value) in &x {
371371
if !inserted_keys.insert(key) {

util/merkle/benches/triedb.rs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ extern crate test;
2929
use std::path::Path;
3030
use std::sync::Arc;
3131

32-
use cmerkle::{Trie, TrieDB, TrieDBMut, TrieMut};
32+
use cmerkle::{Trie, TrieFactory, TrieMut};
3333
use kvdb::DBTransaction;
3434
use primitives::H256;
3535
use rand::random;
@@ -61,7 +61,7 @@ impl TestDB {
6161
let mut root = H256::new();
6262
{
6363
let hashdb = journal.as_hashdb_mut();
64-
let mut trie = TrieDBMut::new(hashdb, &mut root);
64+
let mut trie = TrieFactory::create(hashdb, &mut root);
6565
for i in 0..size {
6666
trie.insert(&i.to_be_bytes(), &i.to_be_bytes()).unwrap();
6767
}
@@ -92,14 +92,14 @@ impl TestDB {
9292
}
9393
}
9494

95-
fn trie(&self) -> TrieDB {
95+
fn trie<'db>(&'db self) -> impl Trie + 'db {
9696
let hashdb = self.journal.as_hashdb();
97-
TrieDB::try_new(hashdb, &self.root).unwrap()
97+
TrieFactory::readonly(hashdb, &self.root).unwrap()
9898
}
9999

100-
fn trie_mut(&mut self) -> TrieDBMut {
100+
fn trie_mut<'db>(&'db mut self) -> impl TrieMut + 'db {
101101
let hashdb = self.journal.as_hashdb_mut();
102-
TrieDBMut::new(hashdb, &mut self.root)
102+
TrieFactory::create(hashdb, &mut self.root)
103103
}
104104

105105
fn flush(&mut self) {
@@ -139,9 +139,11 @@ fn bench_read_multiple(b: &mut Bencher) {
139139
fn bench_write_single(b: &mut Bencher) {
140140
let mut db = TestDB::new(DB_SIZE);
141141
b.iter(|| {
142-
let mut trie = db.trie_mut();
143-
let item = random::<usize>() % DB_SIZE + DB_SIZE;
144-
let _ = trie.insert(&item.to_be_bytes(), &item.to_be_bytes()).unwrap();
142+
{
143+
let mut trie = db.trie_mut();
144+
let item = random::<usize>() % DB_SIZE + DB_SIZE;
145+
let _ = trie.insert(&item.to_be_bytes(), &item.to_be_bytes()).unwrap();
146+
}
145147
db.flush();
146148
});
147149
}
@@ -150,10 +152,12 @@ fn bench_write_single(b: &mut Bencher) {
150152
fn bench_write_multiple(b: &mut Bencher) {
151153
let mut db = TestDB::new(DB_SIZE);
152154
b.iter(|| {
153-
let mut trie = db.trie_mut();
154-
for _ in 0..BATCH {
155-
let item = random::<usize>() % DB_SIZE + DB_SIZE;
156-
let _ = trie.insert(&item.to_be_bytes(), &item.to_be_bytes()).unwrap();
155+
{
156+
let mut trie = db.trie_mut();
157+
for _ in 0..BATCH {
158+
let item = random::<usize>() % DB_SIZE + DB_SIZE;
159+
let _ = trie.insert(&item.to_be_bytes(), &item.to_be_bytes()).unwrap();
160+
}
157161
}
158162
db.flush();
159163
});

util/merkle/src/lib.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ pub mod triehash;
3939

4040
pub use crate::node::Node;
4141
pub use crate::skewed::skewed_merkle_root;
42-
pub use crate::triedb::TrieDB;
43-
pub use crate::triedbmut::TrieDBMut;
42+
use crate::triedb::TrieDB;
43+
use crate::triedbmut::TrieDBMut;
4444

4545
/// Trie Errors.
4646
///
@@ -99,17 +99,17 @@ pub enum TrieFactory {}
9999

100100
impl TrieFactory {
101101
/// Create new immutable instance of Trie.
102-
pub fn readonly<'db>(db: &'db dyn HashDB, root: &'db H256) -> Result<Box<dyn Trie + 'db>> {
103-
Ok(Box::new(TrieDB::try_new(db, root)?))
102+
pub fn readonly<'db>(db: &'db dyn HashDB, root: &'db H256) -> Result<impl Trie + 'db> {
103+
Ok(TrieDB::try_new(db, root)?)
104104
}
105105

106106
/// Create new mutable instance of Trie.
107-
pub fn create<'db>(db: &'db mut dyn HashDB, root: &'db mut H256) -> Box<dyn TrieMut + 'db> {
108-
Box::new(TrieDBMut::new(db, root))
107+
pub fn create<'db>(db: &'db mut dyn HashDB, root: &'db mut H256) -> impl TrieMut + 'db {
108+
TrieDBMut::new(db, root)
109109
}
110110

111111
/// Create new mutable instance of trie and check for errors.
112-
pub fn from_existing<'db>(db: &'db mut dyn HashDB, root: &'db mut H256) -> Result<Box<dyn TrieMut + 'db>> {
113-
Ok(Box::new(TrieDBMut::from_existing(db, root)?))
112+
pub fn from_existing<'db>(db: &'db mut dyn HashDB, root: &'db mut H256) -> Result<impl TrieMut + 'db> {
113+
Ok(TrieDBMut::from_existing(db, root)?)
114114
}
115115
}

util/merkle/src/triedb.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,12 @@ use crate::{Trie, TrieError};
4040
///
4141
/// let mut memdb = MemoryDB::new();
4242
/// let mut root = H256::new();
43-
/// TrieDBMut::new(&mut memdb, &mut root).insert(b"foo", b"bar").unwrap();
44-
/// let t = TrieDB::try_new(&memdb, &root).unwrap();
43+
/// TrieFactory::create(&mut memdb, &mut root).insert(b"foo", b"bar").unwrap();
44+
/// let t = TrieFactory::readonly(&memdb, &root).unwrap();
4545
/// assert!(t.contains(b"foo").unwrap());
4646
/// assert_eq!(t.get(b"foo").unwrap().unwrap(), b"bar".to_vec());
4747
/// ```
48-
pub struct TrieDB<'db> {
48+
pub(crate) struct TrieDB<'db> {
4949
db: &'db dyn HashDB,
5050
root: &'db H256,
5151
}
@@ -67,11 +67,6 @@ impl<'db> TrieDB<'db> {
6767
}
6868
}
6969

70-
/// Get the backing database.
71-
pub fn db(&self) -> &dyn HashDB {
72-
self.db
73-
}
74-
7570
/// Get auxiliary
7671
fn get_aux<T>(
7772
&self,

util/merkle/src/triedbmut.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ fn empty_children() -> [Option<H256>; 16] {
2929
[None; 16]
3030
}
3131

32-
pub struct TrieDBMut<'a> {
32+
pub(crate) struct TrieDBMut<'a> {
3333
db: &'a mut dyn HashDB,
3434
// When Trie is empty, root has None.
3535
root: &'a mut H256,

0 commit comments

Comments
 (0)