fix blob validation for empty blobs when using
This commit is contained in:
parent
1dc0759f57
commit
adf5f462d5
@ -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,
|
||||
|
@ -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()
|
||||
|
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user