diff --git a/Cargo.lock b/Cargo.lock
index 3f2530addd..ae9071f4f2 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -261,7 +261,6 @@ dependencies = [
"codechain-key",
"codechain-keystore",
"codechain-logger",
- "codechain-merkle",
"codechain-network",
"codechain-rpc",
"codechain-state",
@@ -303,7 +302,6 @@ dependencies = [
"codechain-key",
"codechain-keystore",
"codechain-logger",
- "codechain-merkle",
"codechain-network",
"codechain-state",
"codechain-stratum",
@@ -319,6 +317,7 @@ dependencies = [
"linked-hash-map",
"log 0.4.6",
"lru-cache",
+ "merkle-trie",
"num-rational",
"parking_lot 0.6.4",
"primitives",
@@ -457,21 +456,6 @@ dependencies = [
"time",
]
-[[package]]
-name = "codechain-merkle"
-version = "0.1.0"
-dependencies = [
- "codechain-crypto",
- "codechain-db",
- "kvdb",
- "kvdb-rocksdb",
- "primitives",
- "rand 0.6.1",
- "rlp",
- "tempfile",
- "trie-standardmap",
-]
-
[[package]]
name = "codechain-network"
version = "0.1.0"
@@ -544,13 +528,13 @@ dependencies = [
"codechain-db",
"codechain-key",
"codechain-logger",
- "codechain-merkle",
"codechain-types",
"codechain-vm",
"kvdb",
"kvdb-memorydb",
"log 0.4.6",
"lru-cache",
+ "merkle-trie",
"parking_lot 0.6.4",
"primitives",
"rlp",
@@ -584,7 +568,6 @@ dependencies = [
"codechain-db",
"codechain-key",
"codechain-logger",
- "codechain-merkle",
"codechain-network",
"codechain-state",
"codechain-timer",
@@ -592,6 +575,7 @@ dependencies = [
"kvdb",
"kvdb-memorydb",
"log 0.4.6",
+ "merkle-trie",
"never-type",
"parking_lot 0.6.4",
"primitives",
@@ -1575,6 +1559,20 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f9dc261e2b62d7a622bf416ea3c5245cdd5d9a7fcc428c0d06804dfce1775b3"
+[[package]]
+name = "merkle-trie"
+version = "0.1.0"
+source = "git+https://github.com/CodeChain-io/rust-merkle-trie.git#a6e067fe71c232d9024952ee63905ab4f5c4407d"
+dependencies = [
+ "codechain-crypto",
+ "codechain-db",
+ "primitives",
+ "rand 0.6.1",
+ "rlp",
+ "rlp_derive",
+ "snap",
+]
+
[[package]]
name = "mime"
version = "0.2.6"
diff --git a/Cargo.toml b/Cargo.toml
index 70a4c7352f..753c49c770 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -23,7 +23,6 @@ codechain-discovery = { path = "discovery" }
codechain-logger = { path = "util/logger" }
codechain-key = { path = "key" }
codechain-keystore = { path = "keystore" }
-codechain-merkle = { path = "util/merkle" }
codechain-network = { path = "network" }
codechain-rpc = { path = "rpc" }
codechain-state = { path = "state" }
diff --git a/core/Cargo.toml b/core/Cargo.toml
index 85fbb765f1..ee8ec36be0 100644
--- a/core/Cargo.toml
+++ b/core/Cargo.toml
@@ -12,7 +12,6 @@ codechain-json = { path = "../json" }
codechain-key = { path = "../key" }
codechain-keystore = { path="../keystore" }
codechain-logger = { path = "../util/logger" }
-codechain-merkle = { path = "../util/merkle" }
codechain-network = { path = "../network" }
codechain-state = { path = "../state" }
codechain-timer = { path = "../util/timer" }
@@ -28,6 +27,7 @@ kvdb-memorydb = "0.1"
linked-hash-map = "0.5"
log = "0.4.6"
lru-cache = "0.1.2"
+merkle-trie = { git = "https://github.com/CodeChain-io/rust-merkle-trie.git", version = "0.1" }
num-rational = "0.2.1"
parking_lot = "0.6.0"
primitives = { git = "https://github.com/CodeChain-io/rust-codechain-primitives.git", version = "0.4" }
diff --git a/core/src/block.rs b/core/src/block.rs
index d5ac1a9185..18ced1bf3c 100644
--- a/core/src/block.rs
+++ b/core/src/block.rs
@@ -18,13 +18,13 @@ use std::collections::HashSet;
use ccrypto::BLAKE_NULL_RLP;
use ckey::Address;
-use cmerkle::skewed_merkle_root;
use cstate::{FindActionHandler, StateDB, StateError, StateWithCache, TopLevelState};
use ctypes::errors::HistoryError;
use ctypes::header::{Header, Seal};
use ctypes::util::unexpected::Mismatch;
use ctypes::{BlockNumber, CommonParams, TxHash};
use cvm::ChainTimeInfo;
+use merkle_trie::skewed_merkle_root;
use primitives::{Bytes, H256};
use rlp::{Decodable, DecoderError, Encodable, Rlp, RlpStream};
diff --git a/core/src/client/client.rs b/core/src/client/client.rs
index 8dc16eaf41..27e0778cd7 100644
--- a/core/src/client/client.rs
+++ b/core/src/client/client.rs
@@ -21,7 +21,6 @@ use std::sync::{Arc, Weak};
use cdb::{new_journaldb, Algorithm, AsHashDB, DatabaseError};
use cio::IoChannel;
use ckey::{Address, NetworkId, PlatformAddress, Public};
-use cmerkle::Result as TrieResult;
use cnetwork::NodeId;
use cstate::{
ActionHandler, AssetScheme, FindActionHandler, OwnedAsset, StateDB, StateResult, Text, TopLevelState, TopStateView,
@@ -31,6 +30,7 @@ use ctypes::transaction::{AssetTransferInput, PartialHashing, ShardTransaction};
use ctypes::{BlockHash, BlockNumber, CommonParams, ShardId, Tracker, TxHash};
use cvm::{decode, execute, ChainTimeInfo, ScriptResult, VMConfig};
use kvdb::{DBTransaction, KeyValueDB};
+use merkle_trie::Result as TrieResult;
use parking_lot::{Mutex, RwLock, RwLockReadGuard};
use primitives::{Bytes, H160, H256, U256};
use rlp::Rlp;
diff --git a/core/src/client/mod.rs b/core/src/client/mod.rs
index f513f13ad9..6daea05e45 100644
--- a/core/src/client/mod.rs
+++ b/core/src/client/mod.rs
@@ -32,13 +32,13 @@ use std::sync::Arc;
use cdb::DatabaseError;
use ckey::{Address, NetworkId, PlatformAddress, Public};
-use cmerkle::Result as TrieResult;
use cnetwork::NodeId;
use cstate::{AssetScheme, FindActionHandler, OwnedAsset, StateResult, Text, TopLevelState, TopStateView};
use ctypes::transaction::{AssetTransferInput, PartialHashing, ShardTransaction};
use ctypes::{BlockHash, BlockNumber, CommonParams, ShardId, Tracker, TxHash};
use cvm::ChainTimeInfo;
use kvdb::KeyValueDB;
+use merkle_trie::Result as TrieResult;
use primitives::{Bytes, H160, H256, U256};
use crate::block::{ClosedBlock, OpenBlock, SealedBlock};
diff --git a/core/src/client/test_client.rs b/core/src/client/test_client.rs
index 1d0a3764b6..7723da76c6 100644
--- a/core/src/client/test_client.rs
+++ b/core/src/client/test_client.rs
@@ -38,7 +38,6 @@ use std::sync::Arc;
use cdb;
use ckey::{public_to_address, Address, Generator, KeyPair, NetworkId, PlatformAddress, Private, Public, Random};
-use cmerkle::skewed_merkle_root;
use cnetwork::NodeId;
use cstate::tests::helpers::empty_top_state;
use cstate::{FindActionHandler, StateDB, TopLevelState};
@@ -48,6 +47,7 @@ use ctypes::{BlockHash, BlockNumber, CommonParams, Header as BlockHeader, Tracke
use cvm::ChainTimeInfo;
use kvdb::KeyValueDB;
use kvdb_memorydb;
+use merkle_trie::skewed_merkle_root;
use parking_lot::RwLock;
use primitives::{Bytes, H256, U256};
use rlp::*;
diff --git a/core/src/error.rs b/core/src/error.rs
index 36eef08b8c..e8f8b5284f 100644
--- a/core/src/error.rs
+++ b/core/src/error.rs
@@ -20,11 +20,11 @@ use std::io::Error as StdIoError;
use cdb::DatabaseError;
use cio::IoError;
use ckey::{Address, Error as KeyError};
-use cmerkle::TrieError;
use cstate::StateError;
use ctypes::errors::{HistoryError, RuntimeError, SyntaxError};
use ctypes::util::unexpected::{Mismatch, OutOfBounds};
use ctypes::{BlockHash, BlockNumber};
+use merkle_trie::TrieError;
use primitives::{H256, U256};
use rlp::DecoderError;
diff --git a/core/src/lib.rs b/core/src/lib.rs
index b3e1a55d99..b648f0744c 100644
--- a/core/src/lib.rs
+++ b/core/src/lib.rs
@@ -24,7 +24,6 @@ extern crate codechain_key as ckey;
extern crate codechain_keystore as ckeystore;
#[macro_use]
extern crate codechain_logger as clogger;
-extern crate codechain_merkle as cmerkle;
extern crate codechain_network as cnetwork;
extern crate codechain_state as cstate;
extern crate codechain_stratum as cstratum;
diff --git a/core/src/scheme/scheme.rs b/core/src/scheme/scheme.rs
index 64c427131b..6f075aa947 100644
--- a/core/src/scheme/scheme.rs
+++ b/core/src/scheme/scheme.rs
@@ -21,10 +21,10 @@ use ccrypto::{blake256, BLAKE_NULL_RLP};
use cdb::{AsHashDB, HashDB};
use cjson;
use ckey::Address;
-use cmerkle::{TrieFactory, TrieMut};
use cstate::{Metadata, MetadataAddress, Shard, ShardAddress, StateDB, StateResult, StateWithCache, TopLevelState};
use ctypes::errors::SyntaxError;
use ctypes::{BlockHash, CommonParams, Header, ShardId};
+use merkle_trie::{TrieFactory, TrieMut};
use parking_lot::RwLock;
use primitives::{Bytes, H256, U256};
use rlp::{Encodable, Rlp, RlpStream};
diff --git a/core/src/verification/verification.rs b/core/src/verification/verification.rs
index 5ad32138f6..a8cb57d129 100644
--- a/core/src/verification/verification.rs
+++ b/core/src/verification/verification.rs
@@ -16,9 +16,9 @@
use std::time::{SystemTime, UNIX_EPOCH};
-use cmerkle::skewed_merkle_root;
use ctypes::util::unexpected::{Mismatch, OutOfBounds};
use ctypes::{BlockNumber, CommonParams, Header};
+use merkle_trie::skewed_merkle_root;
use primitives::{Bytes, H256};
use rlp::Rlp;
diff --git a/state/Cargo.toml b/state/Cargo.toml
index 97a34ed845..6124dd69d5 100644
--- a/state/Cargo.toml
+++ b/state/Cargo.toml
@@ -8,7 +8,6 @@ edition = "2018"
codechain-crypto = { git = "https://github.com/CodeChain-io/rust-codechain-crypto.git", version = "0.1" }
codechain-db = { git = "https://github.com/CodeChain-io/rust-codechain-db.git", version = "0.1" }
codechain-logger = { path = "../util/logger" }
-codechain-merkle = { path = "../util/merkle" }
codechain-key = { path = "../key" }
codechain-types = { path = "../types" }
codechain-vm = { path = "../vm" }
@@ -16,6 +15,7 @@ kvdb = "0.1"
kvdb-memorydb = "0.1"
log = "0.4.6"
lru-cache = "0.1.1"
+merkle-trie = { git = "https://github.com/CodeChain-io/rust-merkle-trie.git", version = "0.1" }
parking_lot = "0.6.0"
primitives = { git = "https://github.com/CodeChain-io/rust-codechain-primitives.git", version = "0.4" }
rlp = { git = "https://github.com/CodeChain-io/rlp.git", version = "0.4" }
diff --git a/state/src/cache/shard_cache.rs b/state/src/cache/shard_cache.rs
index ae76ef8b65..d0b18e5812 100644
--- a/state/src/cache/shard_cache.rs
+++ b/state/src/cache/shard_cache.rs
@@ -16,7 +16,7 @@
use std::cell::RefMut;
-use cmerkle::{Result as TrieResult, Trie, TrieMut};
+use merkle_trie::{Result as TrieResult, Trie, TrieMut};
use super::WriteBack;
use crate::{AssetScheme, AssetSchemeAddress, OwnedAsset, OwnedAssetAddress};
diff --git a/state/src/cache/top_cache.rs b/state/src/cache/top_cache.rs
index 1b592f6d0c..225734f2fe 100644
--- a/state/src/cache/top_cache.rs
+++ b/state/src/cache/top_cache.rs
@@ -17,7 +17,7 @@
use std::cell::RefMut;
use ckey::Address;
-use cmerkle::{Result as TrieResult, Trie, TrieMut};
+use merkle_trie::{Result as TrieResult, Trie, TrieMut};
use primitives::H256;
use super::WriteBack;
diff --git a/state/src/cache/write_back.rs b/state/src/cache/write_back.rs
index 07b3c0a213..b4123fd4b0 100644
--- a/state/src/cache/write_back.rs
+++ b/state/src/cache/write_back.rs
@@ -22,7 +22,7 @@ use std::fmt;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::vec::Vec;
-use cmerkle::{self, Result as TrieResult, Trie, TrieMut};
+use merkle_trie::{Result as TrieResult, Trie, TrieMut};
use super::CacheableItem;
@@ -195,7 +195,7 @@ where
/// Check caches for required data
/// First searches for account in the local, then the shared cache.
/// Populates local cache if nothing found.
- pub fn get(&self, a: &Item::Address, db: &dyn Trie) -> cmerkle::Result