Merge pull request #72 from ethcore/db_block_number

Added db::Store::block_number
This commit is contained in:
Marek Kotewicz 2016-11-01 23:44:09 +01:00 committed by GitHub
commit a611ac8c62
2 changed files with 19 additions and 3 deletions

View File

@ -33,6 +33,9 @@ pub trait Store : Send + Sync {
/// get best block
fn best_block(&self) -> Option<BestBlock>;
/// resolves number by block hash
fn block_number(&self, hash: &H256) -> Option<u32>;
/// resolves hash by block number
fn block_hash(&self, number: u32) -> Option<H256>;
@ -263,6 +266,10 @@ impl Store for Storage {
self.best_block.read().clone()
}
fn block_number(&self, _hash: &H256) -> Option<u32> {
unimplemented!()
}
fn block_hash(&self, number: u32) -> Option<H256> {
self.get(COL_BLOCK_HASHES, &u32_key(number))
.map(|val| H256::from(&**val))

View File

@ -21,6 +21,7 @@ struct TestData {
best_block: Option<BestBlock>,
blocks: HashMap<H256, chain::Block>,
heights: HashMap<u32, H256>,
hashes: HashMap<H256, u32>,
}
impl TestStorage {
@ -44,7 +45,8 @@ impl TestStorage {
for (idx, block) in blocks.iter().enumerate() {
let hash = block.hash();
data.blocks.insert(hash.clone(), block.clone());
data.heights.insert(idx as u32, hash);
data.heights.insert(idx as u32, hash.clone());
data.hashes.insert(hash, idx as u32);
}
}
}
@ -62,6 +64,11 @@ impl Store for TestStorage {
self.data.read().best_block.clone()
}
fn block_number(&self, hash: &H256) -> Option<u32> {
let data = self.data.read();
data.hashes.get(hash).cloned()
}
fn block_hash(&self, number: u32) -> Option<H256> {
let data = self.data.read();
data.heights.get(&number).cloned()
@ -124,14 +131,16 @@ impl Store for TestStorage {
number: best_block_number + 1,
hash: hash.clone(),
});
data.heights.insert(best_block_number + 1, hash);
data.heights.insert(best_block_number + 1, hash.clone());
data.hashes.insert(hash, best_block_number + 1);
},
None => {
data.best_block = Some(BestBlock {
number: 0,
hash: hash.clone(),
});
data.heights.insert(0, hash);
data.heights.insert(0, hash.clone());
data.hashes.insert(hash, 0);
},
}