finish indexed block refactor
This commit is contained in:
parent
ac1289fa71
commit
0811e876c0
|
@ -1,5 +1,5 @@
|
||||||
use primitives::hash::H256;
|
use primitives::hash::H256;
|
||||||
use chain::{Block, BlockHeader, OutPoint, TransactionOutput, merkle_root};
|
use chain::{Block, OutPoint, TransactionOutput, merkle_root};
|
||||||
use serialization::Serializable;
|
use serialization::Serializable;
|
||||||
use indexed_header::IndexedBlockHeader;
|
use indexed_header::IndexedBlockHeader;
|
||||||
use indexed_transaction::IndexedTransaction;
|
use indexed_transaction::IndexedTransaction;
|
||||||
|
@ -18,7 +18,7 @@ impl PreviousTransactionOutputProvider for IndexedBlock {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn is_spent(&self, _prevout: &OutPoint) -> bool {
|
fn is_spent(&self, _prevout: &OutPoint) -> bool {
|
||||||
unimplemented!();
|
false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,10 +45,6 @@ impl IndexedBlock {
|
||||||
&self.header.hash
|
&self.header.hash
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn header(&self) -> &BlockHeader {
|
|
||||||
&self.header.raw
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn to_raw_block(self) -> Block {
|
pub fn to_raw_block(self) -> Block {
|
||||||
Block::new(self.header.raw, self.transactions.into_iter().map(|tx| tx.raw).collect())
|
Block::new(self.header.raw, self.transactions.into_iter().map(|tx| tx.raw).collect())
|
||||||
}
|
}
|
||||||
|
|
|
@ -190,7 +190,7 @@ impl Storage {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
for tx in accepted_txs {
|
for tx in accepted_txs.iter().skip(1) {
|
||||||
context.meta.insert(
|
context.meta.insert(
|
||||||
tx.hash.clone(),
|
tx.hash.clone(),
|
||||||
TransactionMeta::new(number, tx.raw.outputs.len())
|
TransactionMeta::new(number, tx.raw.outputs.len())
|
||||||
|
|
|
@ -48,7 +48,7 @@ impl BlocksWriter {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
// verify && insert only if parent block is already in the storage
|
// verify && insert only if parent block is already in the storage
|
||||||
if !self.storage.contains_block(db::BlockRef::Hash(indexed_block.header().previous_header_hash.clone())) {
|
if !self.storage.contains_block(db::BlockRef::Hash(indexed_block.header.raw.previous_header_hash.clone())) {
|
||||||
self.orphaned_blocks_pool.insert_orphaned_block(indexed_block.hash().clone(), indexed_block);
|
self.orphaned_blocks_pool.insert_orphaned_block(indexed_block.hash().clone(), indexed_block);
|
||||||
// we can't hold many orphaned blocks in memory during import
|
// we can't hold many orphaned blocks in memory during import
|
||||||
if self.orphaned_blocks_pool.len() > MAX_ORPHANED_BLOCKS {
|
if self.orphaned_blocks_pool.len() > MAX_ORPHANED_BLOCKS {
|
||||||
|
|
|
@ -42,7 +42,7 @@ impl OrphanBlocksPool {
|
||||||
/// Insert orphaned block, for which we have already requested its parent block
|
/// Insert orphaned block, for which we have already requested its parent block
|
||||||
pub fn insert_orphaned_block(&mut self, hash: H256, block: IndexedBlock) {
|
pub fn insert_orphaned_block(&mut self, hash: H256, block: IndexedBlock) {
|
||||||
self.orphaned_blocks
|
self.orphaned_blocks
|
||||||
.entry(block.header().previous_header_hash.clone())
|
.entry(block.header.raw.previous_header_hash.clone())
|
||||||
.or_insert_with(HashMap::new)
|
.or_insert_with(HashMap::new)
|
||||||
.insert(hash, block);
|
.insert(hash, block);
|
||||||
}
|
}
|
||||||
|
|
|
@ -352,7 +352,7 @@ impl Chain {
|
||||||
|
|
||||||
/// Insert new best block to storage
|
/// Insert new best block to storage
|
||||||
pub fn insert_best_block(&mut self, hash: H256, block: &IndexedBlock) -> Result<BlockInsertionResult, db::Error> {
|
pub fn insert_best_block(&mut self, hash: H256, block: &IndexedBlock) -> Result<BlockInsertionResult, db::Error> {
|
||||||
let is_appending_to_main_branch = self.best_storage_block.hash == block.header().previous_header_hash;
|
let is_appending_to_main_branch = self.best_storage_block.hash == block.header.raw.previous_header_hash;
|
||||||
|
|
||||||
// insert to storage
|
// insert to storage
|
||||||
let storage_insertion = try!(self.storage.insert_indexed_block(&block));
|
let storage_insertion = try!(self.storage.insert_indexed_block(&block));
|
||||||
|
|
|
@ -1466,7 +1466,7 @@ impl<T> SynchronizationClientCore<T> where T: TaskExecutor {
|
||||||
}
|
}
|
||||||
|
|
||||||
// check parent block state
|
// check parent block state
|
||||||
let parent_block_state = chain.block_state(&block.header().previous_header_hash);
|
let parent_block_state = chain.block_state(&block.header.raw.previous_header_hash);
|
||||||
match parent_block_state {
|
match parent_block_state {
|
||||||
BlockState::Unknown | BlockState::DeadEnd => {
|
BlockState::Unknown | BlockState::DeadEnd => {
|
||||||
if parent_block_state == BlockState::DeadEnd {
|
if parent_block_state == BlockState::DeadEnd {
|
||||||
|
@ -1510,7 +1510,7 @@ impl<T> SynchronizationClientCore<T> where T: TaskExecutor {
|
||||||
let blocks_hashes_to_forget: Vec<_> = blocks_to_verify.iter().map(|t| t.0.clone()).collect();
|
let blocks_hashes_to_forget: Vec<_> = blocks_to_verify.iter().map(|t| t.0.clone()).collect();
|
||||||
chain.forget_blocks_leave_header(&blocks_hashes_to_forget);
|
chain.forget_blocks_leave_header(&blocks_hashes_to_forget);
|
||||||
// remember that we are verifying these blocks
|
// remember that we are verifying these blocks
|
||||||
let blocks_headers_to_verify: Vec<_> = blocks_to_verify.iter().map(|&(ref h, ref b)| (h.clone(), b.header().clone())).collect();
|
let blocks_headers_to_verify: Vec<_> = blocks_to_verify.iter().map(|&(ref h, ref b)| (h.clone(), b.header.raw.clone())).collect();
|
||||||
chain.verify_blocks(blocks_headers_to_verify);
|
chain.verify_blocks(blocks_headers_to_verify);
|
||||||
// remember that we are verifying block from this peer
|
// remember that we are verifying block from this peer
|
||||||
for verifying_block_hash in blocks_to_verify.iter().map(|&(ref h, _)| h.clone()) {
|
for verifying_block_hash in blocks_to_verify.iter().map(|&(ref h, _)| h.clone()) {
|
||||||
|
|
Loading…
Reference in New Issue