mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-20 14:28:37 +00:00
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:
@@ -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),
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user