Retrieving state from store and checking signature
This commit is contained in:
parent
adf1d9c533
commit
40b166edcd
@ -15,7 +15,7 @@ use state_processing::per_block_processing::errors::{
|
|||||||
};
|
};
|
||||||
use state_processing::{
|
use state_processing::{
|
||||||
per_block_processing, per_block_processing_without_verifying_block_signature,
|
per_block_processing, per_block_processing_without_verifying_block_signature,
|
||||||
per_slot_processing, BlockProcessingError,
|
per_slot_processing, BlockProcessingError, common
|
||||||
};
|
};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use store::iter::{BlockIterator, BlockRootsIterator, StateRootsIterator};
|
use store::iter::{BlockIterator, BlockRootsIterator, StateRootsIterator};
|
||||||
@ -480,14 +480,24 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
self.metrics.attestation_processing_requests.inc();
|
self.metrics.attestation_processing_requests.inc();
|
||||||
let timer = self.metrics.attestation_processing_times.start_timer();
|
let timer = self.metrics.attestation_processing_times.start_timer();
|
||||||
|
|
||||||
match self.store.exists::<BeaconBlock>(&attestation.data.target_root) {
|
// Retrieve the attestation's state from `store` if necessary.
|
||||||
Ok(true) => {
|
let attestation_state = match attestation.data.beacon_block_root == self.canonical_head.read().beacon_block_root {
|
||||||
per_block_processing::validate_attestation_time_independent_only(&*self.state.read(), &attestation, &self.spec)?;
|
true => Some(self.state.read().clone()),
|
||||||
self.fork_choice.process_attestation(&*self.state.read(), &attestation);
|
false => match self.store.get::<BeaconBlock>(&attestation.data.beacon_block_root) {
|
||||||
},
|
Ok(Some(block)) => match self.store.get::<BeaconState<T::EthSpec>>(&block.state_root) {
|
||||||
_ => {}
|
Ok(state) => state,
|
||||||
|
_ => None
|
||||||
|
},
|
||||||
|
_ => None
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if let Some(state) = attestation_state {
|
||||||
|
let indexed_attestation = common::convert_to_indexed(&state, &attestation)?;
|
||||||
|
per_block_processing::verify_indexed_attestation(&state, &indexed_attestation, &self.spec)?;
|
||||||
|
self.fork_choice.process_attestation(&state, &attestation);
|
||||||
|
}
|
||||||
|
|
||||||
let result = self
|
let result = self
|
||||||
.op_pool
|
.op_pool
|
||||||
.insert_attestation(attestation, &*self.state.read(), &self.spec);
|
.insert_attestation(attestation, &*self.state.read(), &self.spec);
|
||||||
|
Loading…
Reference in New Issue
Block a user