Skip to content
Snippets Groups Projects
Commit 09c0ae01 authored by Wei Tang's avatar Wei Tang
Browse files

beacon: process_block_header

parent b0a4f34a
Branches
Tags
No related merge requests found
mod helpers;
mod transition;
#[cfg(feature = "serde")]
use serde::{Serialize, Deserialize};
......
mod per_block;
use crate::primitives::*;
use crate::types::*;
use crate::{Config, BeaconState, Error};
use bm_le::tree_root;
impl<C: Config> BeaconState<C> {
pub fn process_block_header<'a, B: Block>(
&'a mut self,
block: &'a B
) -> Result<(), Error> where
UnsealedBeaconBlock<C>: From<&'a B>,
{
if block.slot() != self.slot {
return Err(Error::BlockSlotInvalid)
}
if block.parent_root() != &tree_root::<C::Digest, _>(&self.latest_block_header) {
return Err(Error::BlockPreviousRootInvalid)
}
self.latest_block_header = BeaconBlockHeader {
slot: block.slot(),
parent_root: *block.parent_root(),
body_root: tree_root::<C::Digest, _>(block.body()),
..Default::default()
};
let proposer = &self.validators[
self.beacon_proposer_index()? as usize
];
if proposer.slashed {
return Err(Error::BlockProposerSlashed)
}
if let Some(signature) = block.signature() {
if !C::bls_verify(
&proposer.pubkey,
&tree_root::<C::Digest, _>(&UnsealedBeaconBlock::from(block)),
signature,
self.domain(C::domain_beacon_proposer(), None)
) {
return Err(Error::BlockSignatureInvalid)
}
}
Ok(())
}
}
mod header;
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment