From e53a84c85ee725ebf71d0e88a389c333fc2dc102 Mon Sep 17 00:00:00 2001 From: Eitan Seri-Levi Date: Mon, 31 Mar 2025 09:14:49 -0700 Subject: [PATCH 1/4] make sure ssz object is spec compliant --- beacon_node/http_api/src/light_client.rs | 25 ++++++++++++------------ common/eth2/src/types.rs | 8 ++++---- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/beacon_node/http_api/src/light_client.rs b/beacon_node/http_api/src/light_client.rs index ac8c08581ca..46e0c7d58b2 100644 --- a/beacon_node/http_api/src/light_client.rs +++ b/beacon_node/http_api/src/light_client.rs @@ -3,8 +3,7 @@ use crate::version::{ }; use beacon_chain::{BeaconChain, BeaconChainError, BeaconChainTypes}; use eth2::types::{ - self as api_types, ChainSpec, ForkVersionedResponse, LightClientUpdate, - LightClientUpdateResponseChunk, LightClientUpdateSszResponse, LightClientUpdatesQuery, + self as api_types, ChainSpec, ForkVersionedResponse, LightClientUpdate, LightClientUpdateResponseChunk, LightClientUpdateResponseChunkInner, LightClientUpdatesQuery }; use ssz::Encode; use std::sync::Arc; @@ -37,15 +36,9 @@ pub fn get_light_client_updates( .map(|update| map_light_client_update_to_ssz_chunk::(&chain, update)) .collect::>(); - let ssz_response = LightClientUpdateSszResponse { - response_chunk_len: (light_client_updates.len() as u64).to_le_bytes().to_vec(), - response_chunk: response_chunks.as_ssz_bytes(), - } - .as_ssz_bytes(); - Response::builder() .status(200) - .body(ssz_response) + .body(response_chunks.as_ssz_bytes()) .map(|res: Response>| add_ssz_content_type_header(res)) .map_err(|e| { warp_utils::reject::custom_server_error(format!( @@ -159,16 +152,24 @@ fn map_light_client_update_to_ssz_chunk( ) -> LightClientUpdateResponseChunk { let fork_name = chain .spec - .fork_name_at_slot::(*light_client_update.signature_slot()); + .fork_name_at_slot::(light_client_update.attested_header_slot()); let fork_digest = ChainSpec::compute_fork_digest( chain.spec.fork_version_for_name(fork_name), chain.genesis_validators_root, ); - LightClientUpdateResponseChunk { + let payload = light_client_update.as_ssz_bytes(); + let response_chunk_len = fork_digest.len() + payload.len(); + + let response_chunk = LightClientUpdateResponseChunkInner { context: fork_digest, - payload: light_client_update.as_ssz_bytes(), + payload, + }; + + LightClientUpdateResponseChunk { + response_chunk_len: response_chunk_len as u8, + response_chunk } } diff --git a/common/eth2/src/types.rs b/common/eth2/src/types.rs index dd4f5437aee..32d50093f1a 100644 --- a/common/eth2/src/types.rs +++ b/common/eth2/src/types.rs @@ -800,13 +800,13 @@ pub struct LightClientUpdatesQuery { } #[derive(Encode, Decode)] -pub struct LightClientUpdateSszResponse { - pub response_chunk_len: Vec, - pub response_chunk: Vec, +pub struct LightClientUpdateResponseChunk { + pub response_chunk_len: u8, + pub response_chunk: LightClientUpdateResponseChunkInner, } #[derive(Encode, Decode)] -pub struct LightClientUpdateResponseChunk { +pub struct LightClientUpdateResponseChunkInner { pub context: [u8; 4], pub payload: Vec, } From 057c00ea6bba138b3bde23fb1b099bafff612700 Mon Sep 17 00:00:00 2001 From: Eitan Seri-Levi Date: Mon, 31 Mar 2025 12:21:44 -0700 Subject: [PATCH 2/4] fmt --- beacon_node/http_api/src/light_client.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/beacon_node/http_api/src/light_client.rs b/beacon_node/http_api/src/light_client.rs index 46e0c7d58b2..66b18a14a23 100644 --- a/beacon_node/http_api/src/light_client.rs +++ b/beacon_node/http_api/src/light_client.rs @@ -3,7 +3,8 @@ use crate::version::{ }; use beacon_chain::{BeaconChain, BeaconChainError, BeaconChainTypes}; use eth2::types::{ - self as api_types, ChainSpec, ForkVersionedResponse, LightClientUpdate, LightClientUpdateResponseChunk, LightClientUpdateResponseChunkInner, LightClientUpdatesQuery + self as api_types, ChainSpec, ForkVersionedResponse, LightClientUpdate, + LightClientUpdateResponseChunk, LightClientUpdateResponseChunkInner, LightClientUpdatesQuery, }; use ssz::Encode; use std::sync::Arc; @@ -167,9 +168,9 @@ fn map_light_client_update_to_ssz_chunk( payload, }; - LightClientUpdateResponseChunk { - response_chunk_len: response_chunk_len as u8, - response_chunk + LightClientUpdateResponseChunk { + response_chunk_len: response_chunk_len as u8, + response_chunk, } } From 6a60551d606a30e1e07609ba6dff7c48f6ea9df4 Mon Sep 17 00:00:00 2001 From: Eitan Seri-Levi Date: Thu, 10 Apr 2025 16:03:11 -0700 Subject: [PATCH 3/4] make u64 --- common/eth2/src/types.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/eth2/src/types.rs b/common/eth2/src/types.rs index 32d50093f1a..93baa8cec17 100644 --- a/common/eth2/src/types.rs +++ b/common/eth2/src/types.rs @@ -801,7 +801,7 @@ pub struct LightClientUpdatesQuery { #[derive(Encode, Decode)] pub struct LightClientUpdateResponseChunk { - pub response_chunk_len: u8, + pub response_chunk_len: u64, pub response_chunk: LightClientUpdateResponseChunkInner, } From 31e007c874392fe7b12db1120b3d073f8d07e07d Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Fri, 11 Apr 2025 10:03:01 +1000 Subject: [PATCH 4/4] Fix build --- beacon_node/http_api/src/light_client.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/beacon_node/http_api/src/light_client.rs b/beacon_node/http_api/src/light_client.rs index 66b18a14a23..2d0a5d09a1a 100644 --- a/beacon_node/http_api/src/light_client.rs +++ b/beacon_node/http_api/src/light_client.rs @@ -169,7 +169,7 @@ fn map_light_client_update_to_ssz_chunk( }; LightClientUpdateResponseChunk { - response_chunk_len: response_chunk_len as u8, + response_chunk_len: response_chunk_len as u64, response_chunk, } }