Gloas serve envelope rpc (#8896)

Serves envelope by range and by root requests. Added PayloadEnvelopeStreamer so that we dont need to alter upstream code when we introduce blinded payload envelopes.


  


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

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

Co-Authored-By: dapplion <35266934+dapplion@users.noreply.github.com>
This commit is contained in:
Eitan Seri-Levi
2026-03-25 15:45:24 +09:00
committed by GitHub
parent 7ffc637eef
commit c7055b604f
26 changed files with 1778 additions and 13 deletions

View File

@@ -5,6 +5,7 @@ use std::sync::Arc;
use types::{
BlobSidecar, DataColumnSidecar, Epoch, EthSpec, LightClientBootstrap,
LightClientFinalityUpdate, LightClientOptimisticUpdate, LightClientUpdate, SignedBeaconBlock,
SignedExecutionPayloadEnvelope,
};
pub type Id = u32;
@@ -160,6 +161,10 @@ 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 `EXECUTION_PAYLOAD_ENVELOPES_BY_ROOT` request.
PayloadEnvelopesByRoot(Option<Arc<SignedExecutionPayloadEnvelope<E>>>),
/// A response to a get `EXECUTION_PAYLOAD_ENVELOPES_BY_RANGE` request.
PayloadEnvelopesByRange(Option<Arc<SignedExecutionPayloadEnvelope<E>>>),
/// A response to a get BLOBS_BY_ROOT request.
BlobsByRoot(Option<Arc<BlobSidecar<E>>>),
/// A response to a get DATA_COLUMN_SIDECARS_BY_ROOT request.
@@ -185,6 +190,16 @@ impl<E: EthSpec> std::convert::From<Response<E>> for RpcResponse<E> {
Some(b) => RpcResponse::Success(RpcSuccessResponse::BlocksByRange(b)),
None => RpcResponse::StreamTermination(ResponseTermination::BlocksByRange),
},
Response::PayloadEnvelopesByRoot(r) => match r {
Some(p) => RpcResponse::Success(RpcSuccessResponse::PayloadEnvelopesByRoot(p)),
None => RpcResponse::StreamTermination(ResponseTermination::PayloadEnvelopesByRoot),
},
Response::PayloadEnvelopesByRange(r) => match r {
Some(p) => RpcResponse::Success(RpcSuccessResponse::PayloadEnvelopesByRange(p)),
None => {
RpcResponse::StreamTermination(ResponseTermination::PayloadEnvelopesByRange)
}
},
Response::BlobsByRoot(r) => match r {
Some(b) => RpcResponse::Success(RpcSuccessResponse::BlobsByRoot(b)),
None => RpcResponse::StreamTermination(ResponseTermination::BlobsByRoot),

View File

@@ -1524,6 +1524,28 @@ impl<E: EthSpec> Network<E> {
request_type,
})
}
RequestType::PayloadEnvelopesByRange(_) => {
metrics::inc_counter_vec(
&metrics::TOTAL_RPC_REQUESTS,
&["payload_envelopes_by_range"],
);
Some(NetworkEvent::RequestReceived {
peer_id,
inbound_request_id,
request_type,
})
}
RequestType::PayloadEnvelopesByRoot(_) => {
metrics::inc_counter_vec(
&metrics::TOTAL_RPC_REQUESTS,
&["payload_envelopes_by_root"],
);
Some(NetworkEvent::RequestReceived {
peer_id,
inbound_request_id,
request_type,
})
}
RequestType::BlobsByRange(_) => {
metrics::inc_counter_vec(&metrics::TOTAL_RPC_REQUESTS, &["blobs_by_range"]);
Some(NetworkEvent::RequestReceived {
@@ -1638,6 +1660,16 @@ impl<E: EthSpec> Network<E> {
RpcSuccessResponse::BlocksByRoot(resp) => {
self.build_response(id, peer_id, Response::BlocksByRoot(Some(resp)))
}
RpcSuccessResponse::PayloadEnvelopesByRange(resp) => self.build_response(
id,
peer_id,
Response::PayloadEnvelopesByRange(Some(resp)),
),
RpcSuccessResponse::PayloadEnvelopesByRoot(resp) => self.build_response(
id,
peer_id,
Response::PayloadEnvelopesByRoot(Some(resp)),
),
RpcSuccessResponse::BlobsByRoot(resp) => {
self.build_response(id, peer_id, Response::BlobsByRoot(Some(resp)))
}
@@ -1672,6 +1704,12 @@ impl<E: EthSpec> Network<E> {
let response = match termination {
ResponseTermination::BlocksByRange => Response::BlocksByRange(None),
ResponseTermination::BlocksByRoot => Response::BlocksByRoot(None),
ResponseTermination::PayloadEnvelopesByRange => {
Response::PayloadEnvelopesByRange(None)
}
ResponseTermination::PayloadEnvelopesByRoot => {
Response::PayloadEnvelopesByRoot(None)
}
ResponseTermination::BlobsByRange => Response::BlobsByRange(None),
ResponseTermination::BlobsByRoot => Response::BlobsByRoot(None),
ResponseTermination::DataColumnsByRoot => Response::DataColumnsByRoot(None),