Merge pull request #72 from ethcore/db_block_number
Added db::Store::block_number
This commit is contained in:
commit
a611ac8c62
|
@ -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))
|
||||
|
|
|
@ -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);
|
||||
},
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue