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

@@ -1,6 +1,8 @@
#![cfg(not(debug_assertions))]
use beacon_chain::attestation_simulator::produce_unaggregated_attestation;
use beacon_chain::block_verification_types::RpcBlock;
use beacon_chain::custody_context::NodeCustodyType;
use beacon_chain::test_utils::{AttestationStrategy, BeaconChainHarness, BlockStrategy};
use beacon_chain::validator_monitor::UNAGGREGATED_ATTESTATION_LAG_SLOTS;
use beacon_chain::{StateSkipConfig, WhenSlotSkipped, metrics};
@@ -114,6 +116,8 @@ async fn produces_attestations() {
.keypairs(KEYPAIRS[..].to_vec())
.fresh_ephemeral_store()
.mock_execution_layer()
// SemiSupernode ensures enough columns are stored for sampling + custody validation for RpcBlock
.node_custody_type(NodeCustodyType::SemiSupernode)
.build();
let chain = &harness.chain;
@@ -221,14 +225,16 @@ async fn produces_attestations() {
let rpc_block =
harness.build_rpc_block_from_store_blobs(Some(block_root), Arc::new(block.clone()));
let beacon_chain::data_availability_checker::MaybeAvailableBlock::Available(
available_block,
) = chain
.data_availability_checker
.verify_kzg_for_rpc_block(rpc_block)
.unwrap()
else {
panic!("block should be available")
let available_block = match rpc_block {
RpcBlock::FullyAvailable(available_block) => {
chain
.data_availability_checker
.verify_kzg_for_available_block(&available_block)
.unwrap();
available_block
}
RpcBlock::BlockOnly { .. } => panic!("block should be available"),
};
let early_attestation = {
@@ -288,14 +294,17 @@ async fn early_attester_cache_old_request() {
let rpc_block = harness
.build_rpc_block_from_store_blobs(Some(head.beacon_block_root), head.beacon_block.clone());
let beacon_chain::data_availability_checker::MaybeAvailableBlock::Available(available_block) =
harness
.chain
.data_availability_checker
.verify_kzg_for_rpc_block(rpc_block)
.unwrap()
else {
panic!("block should be available")
let available_block = match rpc_block {
RpcBlock::FullyAvailable(available_block) => {
harness
.chain
.data_availability_checker
.verify_kzg_for_available_block(&available_block)
.unwrap();
available_block
}
RpcBlock::BlockOnly { .. } => panic!("block should be available"),
};
harness