simplify compression and move it out of rlp crate (#7957)
* simplify compression and move it out of rlp crate * removed lazy_static dependency from rlp
This commit is contained in:
@@ -25,6 +25,7 @@ use ethereum_types::{H256, Bloom, U256};
|
||||
use parking_lot::{Mutex, RwLock};
|
||||
use bytes::Bytes;
|
||||
use rlp::*;
|
||||
use rlp_compress::{compress, decompress, blocks_swapper};
|
||||
use header::*;
|
||||
use transaction::*;
|
||||
use views::*;
|
||||
@@ -254,7 +255,7 @@ impl BlockProvider for BlockChain {
|
||||
|
||||
let result = match opt {
|
||||
Some(b) => {
|
||||
let bytes: Bytes = UntrustedRlp::new(&b).decompress(RlpType::Blocks).into_vec();
|
||||
let bytes = decompress(&b, blocks_swapper()).into_vec();
|
||||
let mut write = self.block_headers.write();
|
||||
write.insert(*hash, bytes.clone());
|
||||
Some(encoded::Header::new(bytes))
|
||||
@@ -290,7 +291,7 @@ impl BlockProvider for BlockChain {
|
||||
|
||||
let result = match opt {
|
||||
Some(b) => {
|
||||
let bytes: Bytes = UntrustedRlp::new(&b).decompress(RlpType::Blocks).into_vec();
|
||||
let bytes = decompress(&b, blocks_swapper()).into_vec();
|
||||
let mut write = self.block_bodies.write();
|
||||
write.insert(*hash, bytes.clone());
|
||||
Some(encoded::Body::new(bytes))
|
||||
@@ -702,9 +703,8 @@ impl BlockChain {
|
||||
|
||||
assert!(self.pending_best_block.read().is_none());
|
||||
|
||||
let block_rlp = UntrustedRlp::new(bytes);
|
||||
let compressed_header = block_rlp.at(0).unwrap().compress(RlpType::Blocks);
|
||||
let compressed_body = UntrustedRlp::new(&Self::block_to_body(bytes)).compress(RlpType::Blocks);
|
||||
let compressed_header = compress(block.header_rlp().as_raw(), blocks_swapper());
|
||||
let compressed_body = compress(&Self::block_to_body(bytes), blocks_swapper());
|
||||
|
||||
// store block in db
|
||||
batch.put(db::COL_HEADERS, &hash, &compressed_header);
|
||||
@@ -901,9 +901,12 @@ impl BlockChain {
|
||||
|
||||
assert!(self.pending_best_block.read().is_none());
|
||||
|
||||
let compressed_header = compress(block.header_rlp().as_raw(), blocks_swapper());
|
||||
let compressed_body = compress(&Self::block_to_body(bytes), blocks_swapper());
|
||||
|
||||
// store block in db
|
||||
batch.put_compressed(db::COL_HEADERS, &hash, block.header_rlp().as_raw().to_vec());
|
||||
batch.put_compressed(db::COL_BODIES, &hash, Self::block_to_body(bytes));
|
||||
batch.put(db::COL_HEADERS, &hash, &compressed_header);
|
||||
batch.put(db::COL_BODIES, &hash, &compressed_body);
|
||||
|
||||
let info = self.block_info(&header);
|
||||
|
||||
|
||||
@@ -83,6 +83,7 @@ extern crate price_info;
|
||||
extern crate rand;
|
||||
extern crate rayon;
|
||||
extern crate rlp;
|
||||
extern crate rlp_compress;
|
||||
extern crate keccak_hash as hash;
|
||||
extern crate heapsize;
|
||||
extern crate memorydb;
|
||||
|
||||
@@ -485,7 +485,7 @@ impl fmt::Debug for Account {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use rlp::{UntrustedRlp, RlpType, Compressible};
|
||||
use rlp_compress::{compress, decompress, snapshot_swapper};
|
||||
use ethereum_types::{H256, Address};
|
||||
use memorydb::MemoryDB;
|
||||
use bytes::Bytes;
|
||||
@@ -495,10 +495,9 @@ mod tests {
|
||||
#[test]
|
||||
fn account_compress() {
|
||||
let raw = Account::new_basic(2.into(), 4.into()).rlp();
|
||||
let rlp = UntrustedRlp::new(&raw);
|
||||
let compact_vec = rlp.compress(RlpType::Snapshot).into_vec();
|
||||
let compact_vec = compress(&raw, snapshot_swapper());
|
||||
assert!(raw.len() > compact_vec.len());
|
||||
let again_raw = UntrustedRlp::new(&compact_vec).decompress(RlpType::Snapshot);
|
||||
let again_raw = decompress(&compact_vec, snapshot_swapper());
|
||||
assert_eq!(raw, again_raw.into_vec());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user