fix blob validation for empty blobs when using

This commit is contained in:
realbigsean 2022-12-23 12:59:04 -05:00
parent 1dc0759f57
commit adf5f462d5
No known key found for this signature in database
GPG Key ID: B372B64D866BF8CC
4 changed files with 11 additions and 7 deletions

View File

@ -42,6 +42,7 @@ pub enum Error {
// Boxed to avoid an infinite-size recursion issue.
BeaconChain(Box<BeaconChainError>),
MissingBeaconState(Hash256),
MissingBlobs,
FailedToTransitionState(StateAdvanceError),
CannotAttestToFutureState {
state_slot: Slot,

View File

@ -2935,7 +2935,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
// If the write fails, revert fork choice to the version from disk, else we can
// end up with blocks in fork choice that are missing from disk.
// See https://github.com/sigp/lighthouse/issues/2028
let (signed_block, blobs) = signed_block.deconstruct();
let (signed_block, blobs) = signed_block.deconstruct(Some(block_root));
let block = signed_block.message();
let mut ops: Vec<_> = confirmed_state_roots
.into_iter()

View File

@ -69,7 +69,7 @@ impl<E: EthSpec> EarlyAttesterCache<E> {
},
};
let (block, blobs) = block.deconstruct();
let (block, blobs) = block.deconstruct(Some(beacon_block_root));
let item = CacheItem {
epoch,
committee_lengths,
@ -77,7 +77,7 @@ impl<E: EthSpec> EarlyAttesterCache<E> {
source,
target,
block,
blobs: blobs?,
blobs: blobs.map_err(|_|Error::MissingBlobs)?,
proto_block,
};

View File

@ -93,11 +93,14 @@ impl<T: EthSpec> BlockWrapper<T> {
self.block().parent_root()
}
pub fn deconstruct(self) -> (Arc<SignedBeaconBlock<T>>, Result<Option<Arc<BlobsSidecar<T>>>, BlobReconstructionError>) {
pub fn deconstruct(self, block_root: Option<Hash256>) -> (Arc<SignedBeaconBlock<T>>, Result<Option<Arc<BlobsSidecar<T>>>, BlobReconstructionError>) {
match self {
BlockWrapper::Block(block) => (block, block
.reconstruct_empty_blobs(block_root)
.map(|blob_opt| blob_opt.map(Arc::new))),
BlockWrapper::Block(block) => {
let blobs = block
.reconstruct_empty_blobs(block_root)
.map(|blob_opt| blob_opt.map(Arc::new));
(block,blobs)
} ,
BlockWrapper::BlockAndBlob(block_sidecar_pair) => {
let SignedBeaconBlockAndBlobsSidecar {
beacon_block,