Convert RpcBlock to an enum that indicates availability (#8424)

Co-Authored-By: Eitan Seri-Levi <eserilev@ucsc.edu>

Co-Authored-By: Mark Mackey <mark@sigmaprime.io>

Co-Authored-By: Eitan Seri-Levi <eserilev@gmail.com>

Co-Authored-By: Jimmy Chen <jchen.tc@gmail.com>
This commit is contained in:
Eitan Seri-Levi
2026-01-27 21:59:32 -08:00
committed by GitHub
parent c4409cdf28
commit f7b5c7ee3f
23 changed files with 1368 additions and 579 deletions

View File

@@ -21,7 +21,6 @@ use beacon_chain::{
compute_proposer_duties_from_head, ensure_state_can_determine_proposers_for_epoch,
},
custody_context::NodeCustodyType,
data_availability_checker::MaybeAvailableBlock,
historical_blocks::HistoricalBlockError,
migrate::MigratorConfig,
};
@@ -3176,16 +3175,19 @@ async fn weak_subjectivity_sync_test(
.expect("should get block")
.expect("should get block");
if let MaybeAvailableBlock::Available(block) = harness
.chain
.data_availability_checker
.verify_kzg_for_rpc_block(
let rpc_block =
harness.build_rpc_block_from_store_blobs(Some(block_root), Arc::new(full_block));
match rpc_block {
RpcBlock::FullyAvailable(available_block) => {
harness
.build_rpc_block_from_store_blobs(Some(block_root), Arc::new(full_block)),
)
.expect("should verify kzg")
{
available_blocks.push(block);
.chain
.data_availability_checker
.verify_kzg_for_available_block(&available_block)
.expect("should verify kzg");
available_blocks.push(available_block);
}
RpcBlock::BlockOnly { .. } => panic!("Should be an available block"),
}
}
@@ -3194,15 +3196,16 @@ async fn weak_subjectivity_sync_test(
let mut batch_with_invalid_first_block =
available_blocks.iter().map(clone_block).collect::<Vec<_>>();
batch_with_invalid_first_block[0] = {
let (block_root, block, data) = clone_block(&available_blocks[0]).deconstruct();
let (_, block, data) = clone_block(&available_blocks[0]).deconstruct();
let mut corrupt_block = (*block).clone();
*corrupt_block.signature_mut() = Signature::empty();
AvailableBlock::__new_for_testing(
block_root,
AvailableBlock::new(
Arc::new(corrupt_block),
data,
&beacon_chain.data_availability_checker,
Arc::new(spec),
)
.expect("available block")
};
// Importing the invalid batch should error.
@@ -3746,7 +3749,13 @@ async fn process_blocks_and_attestations_for_unaligned_checkpoint() {
assert_eq!(split.block_root, valid_fork_block.parent_root());
assert_ne!(split.state_root, unadvanced_split_state_root);
let invalid_fork_rpc_block = RpcBlock::new_without_blobs(None, invalid_fork_block.clone());
let invalid_fork_rpc_block = RpcBlock::new(
invalid_fork_block.clone(),
None,
&harness.chain.data_availability_checker,
harness.spec.clone(),
)
.unwrap();
// Applying the invalid block should fail.
let err = harness
.chain
@@ -3762,7 +3771,13 @@ async fn process_blocks_and_attestations_for_unaligned_checkpoint() {
assert!(matches!(err, BlockError::WouldRevertFinalizedSlot { .. }));
// Applying the valid block should succeed, but it should not become head.
let valid_fork_rpc_block = RpcBlock::new_without_blobs(None, valid_fork_block.clone());
let valid_fork_rpc_block = RpcBlock::new(
valid_fork_block.clone(),
None,
&harness.chain.data_availability_checker,
harness.spec.clone(),
)
.unwrap();
harness
.chain
.process_block(