check if state root is valid for old blocks
This commit is contained in:
parent
d7b79c1274
commit
6c6229c963
@ -373,15 +373,18 @@ impl<V> Client<V> where V: Verifier {
|
|||||||
|
|
||||||
let block_number = self.block_number(id.clone());
|
let block_number = self.block_number(id.clone());
|
||||||
|
|
||||||
|
self.block_header(id).and_then(|header| {
|
||||||
|
let root = HeaderView::new(&header).state_root();
|
||||||
// check that the block is not too old -- blocks within `HISTORY` blocks of the best will
|
// check that the block is not too old -- blocks within `HISTORY` blocks of the best will
|
||||||
// always be available.
|
// always be available. If the block could be too old, check if its state root is valid.
|
||||||
if self.state_db.does_pruning() && self.best_block_number() >= block_number + HISTORY {
|
if self.state_db.does_pruning()
|
||||||
|
&& self.best_block_number() >= block_number + HISTORY
|
||||||
|
&& self.state_db.exists(root) {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.block_header(id).map(|header| {
|
|
||||||
let db = self.state_db.lock().unwrap().boxed_clone();
|
let db = self.state_db.lock().unwrap().boxed_clone();
|
||||||
State::from_existing(db, HeaderView::new(&header).state_root(), self.engine.account_start_nonce())
|
Some(State::from_existing(db, HeaderView::new(&header).state_root(), self.engine.account_start_nonce()))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user