Implement beacon_blocks_by_head (#9237)

Co-Authored-By: dapplion <35266934+dapplion@users.noreply.github.com>
This commit is contained in:
Lion - dapplion
2026-05-06 20:41:01 -06:00
committed by GitHub
parent 31e5f308c3
commit 7148bfcdd1
14 changed files with 637 additions and 8 deletions

View File

@@ -161,6 +161,9 @@ pub enum Response<E: EthSpec> {
DataColumnsByRange(Option<Arc<DataColumnSidecar<E>>>),
/// A response to a get BLOCKS_BY_ROOT request.
BlocksByRoot(Option<Arc<SignedBeaconBlock<E>>>),
/// A response to a get BEACON_BLOCKS_BY_HEAD request. A None response signals the end of the
/// batch.
BlocksByHead(Option<Arc<SignedBeaconBlock<E>>>),
/// A response to a get `EXECUTION_PAYLOAD_ENVELOPES_BY_ROOT` request.
PayloadEnvelopesByRoot(Option<Arc<SignedExecutionPayloadEnvelope<E>>>),
/// A response to a get `EXECUTION_PAYLOAD_ENVELOPES_BY_RANGE` request.
@@ -186,6 +189,10 @@ impl<E: EthSpec> std::convert::From<Response<E>> for RpcResponse<E> {
Some(b) => RpcResponse::Success(RpcSuccessResponse::BlocksByRoot(b)),
None => RpcResponse::StreamTermination(ResponseTermination::BlocksByRoot),
},
Response::BlocksByHead(r) => match r {
Some(b) => RpcResponse::Success(RpcSuccessResponse::BlocksByHead(b)),
None => RpcResponse::StreamTermination(ResponseTermination::BlocksByHead),
},
Response::BlocksByRange(r) => match r {
Some(b) => RpcResponse::Success(RpcSuccessResponse::BlocksByRange(b)),
None => RpcResponse::StreamTermination(ResponseTermination::BlocksByRange),

View File

@@ -1691,6 +1691,14 @@ impl<E: EthSpec> Network<E> {
request_type,
})
}
RequestType::BlocksByHead(_) => {
metrics::inc_counter_vec(&metrics::TOTAL_RPC_REQUESTS, &["blocks_by_head"]);
Some(NetworkEvent::RequestReceived {
peer_id,
inbound_request_id,
request_type,
})
}
RequestType::PayloadEnvelopesByRange(_) => {
metrics::inc_counter_vec(
&metrics::TOTAL_RPC_REQUESTS,
@@ -1827,6 +1835,9 @@ impl<E: EthSpec> Network<E> {
RpcSuccessResponse::BlocksByRoot(resp) => {
self.build_response(id, peer_id, Response::BlocksByRoot(Some(resp)))
}
RpcSuccessResponse::BlocksByHead(resp) => {
self.build_response(id, peer_id, Response::BlocksByHead(Some(resp)))
}
RpcSuccessResponse::PayloadEnvelopesByRange(resp) => self.build_response(
id,
peer_id,
@@ -1871,6 +1882,7 @@ impl<E: EthSpec> Network<E> {
let response = match termination {
ResponseTermination::BlocksByRange => Response::BlocksByRange(None),
ResponseTermination::BlocksByRoot => Response::BlocksByRoot(None),
ResponseTermination::BlocksByHead => Response::BlocksByHead(None),
ResponseTermination::PayloadEnvelopesByRange => {
Response::PayloadEnvelopesByRange(None)
}