mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-19 21:04:41 +00:00
Light client updates by range RPC (#6383)
* enable lc update over rpc * resolve TODOs * resolve merge conflicts * move max light client updates to eth spec * Merge branch 'unstable' of https://github.com/sigp/lighthouse into light-client-updates-by-range-rpc * remove ethspec dependency * Update beacon_node/network/src/network_beacon_processor/rpc_methods.rs Co-authored-by: Michael Sproul <micsproul@gmail.com> * Update beacon_node/lighthouse_network/src/rpc/methods.rs Co-authored-by: Michael Sproul <micsproul@gmail.com>
This commit is contained in:
@@ -13,10 +13,11 @@ use std::sync::Arc;
|
||||
use strum::IntoStaticStr;
|
||||
use superstruct::superstruct;
|
||||
use types::blob_sidecar::BlobIdentifier;
|
||||
use types::light_client_update::MAX_REQUEST_LIGHT_CLIENT_UPDATES;
|
||||
use types::{
|
||||
blob_sidecar::BlobSidecar, ChainSpec, ColumnIndex, DataColumnIdentifier, DataColumnSidecar,
|
||||
Epoch, EthSpec, Hash256, LightClientBootstrap, LightClientFinalityUpdate,
|
||||
LightClientOptimisticUpdate, RuntimeVariableList, SignedBeaconBlock, Slot,
|
||||
LightClientOptimisticUpdate, LightClientUpdate, RuntimeVariableList, SignedBeaconBlock, Slot,
|
||||
};
|
||||
|
||||
/// Maximum length of error message.
|
||||
@@ -471,6 +472,34 @@ impl DataColumnsByRootRequest {
|
||||
}
|
||||
}
|
||||
|
||||
/// Request a number of beacon data columns from a peer.
|
||||
#[derive(Encode, Decode, Clone, Debug, PartialEq)]
|
||||
pub struct LightClientUpdatesByRangeRequest {
|
||||
/// The starting period to request light client updates.
|
||||
pub start_period: u64,
|
||||
/// The number of periods from `start_period`.
|
||||
pub count: u64,
|
||||
}
|
||||
|
||||
impl LightClientUpdatesByRangeRequest {
|
||||
pub fn max_requested(&self) -> u64 {
|
||||
MAX_REQUEST_LIGHT_CLIENT_UPDATES
|
||||
}
|
||||
|
||||
pub fn ssz_min_len() -> usize {
|
||||
LightClientUpdatesByRangeRequest {
|
||||
start_period: 0,
|
||||
count: 0,
|
||||
}
|
||||
.as_ssz_bytes()
|
||||
.len()
|
||||
}
|
||||
|
||||
pub fn ssz_max_len() -> usize {
|
||||
Self::ssz_min_len()
|
||||
}
|
||||
}
|
||||
|
||||
/* RPC Handling and Grouping */
|
||||
// Collection of enums and structs used by the Codecs to encode/decode RPC messages
|
||||
|
||||
@@ -498,6 +527,9 @@ pub enum RpcSuccessResponse<E: EthSpec> {
|
||||
/// A response to a get LIGHT_CLIENT_FINALITY_UPDATE request.
|
||||
LightClientFinalityUpdate(Arc<LightClientFinalityUpdate<E>>),
|
||||
|
||||
/// A response to a get LIGHT_CLIENT_UPDATES_BY_RANGE request.
|
||||
LightClientUpdatesByRange(Arc<LightClientUpdate<E>>),
|
||||
|
||||
/// A response to a get BLOBS_BY_ROOT request.
|
||||
BlobsByRoot(Arc<BlobSidecar<E>>),
|
||||
|
||||
@@ -534,6 +566,9 @@ pub enum ResponseTermination {
|
||||
|
||||
/// Data column sidecars by range stream termination.
|
||||
DataColumnsByRange,
|
||||
|
||||
/// Light client updates by range stream termination.
|
||||
LightClientUpdatesByRange,
|
||||
}
|
||||
|
||||
/// The structured response containing a result/code indicating success or failure
|
||||
@@ -633,6 +668,7 @@ impl<E: EthSpec> RpcSuccessResponse<E> {
|
||||
Protocol::LightClientOptimisticUpdate
|
||||
}
|
||||
RpcSuccessResponse::LightClientFinalityUpdate(_) => Protocol::LightClientFinalityUpdate,
|
||||
RpcSuccessResponse::LightClientUpdatesByRange(_) => Protocol::LightClientUpdatesByRange,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -704,6 +740,13 @@ impl<E: EthSpec> std::fmt::Display for RpcSuccessResponse<E> {
|
||||
update.signature_slot()
|
||||
)
|
||||
}
|
||||
RpcSuccessResponse::LightClientUpdatesByRange(update) => {
|
||||
write!(
|
||||
f,
|
||||
"LightClientUpdatesByRange Slot: {}",
|
||||
update.signature_slot(),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user