From 01f2e972a66805c928a60d9b63b0f30980459e34 Mon Sep 17 00:00:00 2001 From: PJColombo Date: Tue, 11 Feb 2025 02:13:04 +0100 Subject: [PATCH] refactor: flatten block response from beacon client --- src/clients/beacon/mod.rs | 2 +- src/clients/beacon/types.rs | 24 +++++++++++++++++-- .../event_handlers/finalized_checkpoint.rs | 2 +- src/slots_processor/mod.rs | 16 ++++++------- 4 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/clients/beacon/mod.rs b/src/clients/beacon/mod.rs index e8d1dbc..dfb37ca 100644 --- a/src/clients/beacon/mod.rs +++ b/src/clients/beacon/mod.rs @@ -62,7 +62,7 @@ impl CommonBeaconClient for BeaconClient { let url = self.base_url.join(path.as_str())?; json_get!(&self.client, url, BlockResponse, self.exp_backoff.clone()).map(|res| match res { - Some(r) => Some(r.data), + Some(r) => Some(r.into()), None => None, }) } diff --git a/src/clients/beacon/types.rs b/src/clients/beacon/types.rs index 4ff04ce..5a3471d 100644 --- a/src/clients/beacon/types.rs +++ b/src/clients/beacon/types.rs @@ -22,6 +22,15 @@ pub enum Topic { FinalizedCheckpoint, } +#[derive(Deserialize, Debug)] +pub struct Block { + pub blob_kzg_commitments: Option>, + pub execution_payload: Option, + pub parent_root: B256, + #[serde(deserialize_with = "deserialize_number")] + pub slot: u32, +} + #[derive(Deserialize, Debug)] pub struct ExecutionPayload { pub block_hash: B256, @@ -43,13 +52,13 @@ pub struct BlockMessage { } #[derive(Deserialize, Debug)] -pub struct Block { +pub struct BlockData { pub message: BlockMessage, } #[derive(Deserialize, Debug)] pub struct BlockResponse { - pub data: Block, + pub data: BlockData, } #[derive(Deserialize, Debug)] @@ -194,6 +203,17 @@ impl From for BlockHeader { } } +impl From for Block { + fn from(response: BlockResponse) -> Self { + Block { + blob_kzg_commitments: response.data.message.body.blob_kzg_commitments, + execution_payload: response.data.message.body.execution_payload, + parent_root: response.data.message.parent_root, + slot: response.data.message.slot, + } + } +} + #[derive(Debug, thiserror::Error)] pub enum BlockIdResolutionError { #[error("Block with id '{0}' not found")] diff --git a/src/indexer/event_handlers/finalized_checkpoint.rs b/src/indexer/event_handlers/finalized_checkpoint.rs index 28e03a3..c443b89 100644 --- a/src/indexer/event_handlers/finalized_checkpoint.rs +++ b/src/indexer/event_handlers/finalized_checkpoint.rs @@ -53,7 +53,7 @@ where err, ) })? { - Some(block) => match block.message.body.execution_payload { + Some(block) => match block.execution_payload { Some(execution_payload) => execution_payload.block_number, None => { return Err(FinalizedCheckpointEventHandlerError::BlockNotFound( diff --git a/src/slots_processor/mod.rs b/src/slots_processor/mod.rs index fe67bb3..eb35706 100644 --- a/src/slots_processor/mod.rs +++ b/src/slots_processor/mod.rs @@ -145,7 +145,7 @@ impl SlotsProcessor { } }; - let execution_payload = match beacon_block.message.body.execution_payload { + let execution_payload = match beacon_block.execution_payload { Some(payload) => payload, None => { debug!( @@ -157,7 +157,7 @@ impl SlotsProcessor { } }; - let has_kzg_blob_commitments = match beacon_block.message.body.blob_kzg_commitments { + let has_kzg_blob_commitments = match beacon_block.blob_kzg_commitments { Some(commitments) => !commitments.is_empty(), None => false, }; @@ -350,7 +350,7 @@ impl SlotsProcessor { } }; - if let Some(execution_payload) = &canonical_block.message.body.execution_payload { + if let Some(execution_payload) = &canonical_block.execution_payload { if execution_payload.block_hash == blobscan_block.hash { return Ok(vec![]); } @@ -358,14 +358,14 @@ impl SlotsProcessor { let mut current_canonical_block_root = head_block_root; - while canonical_block.message.parent_root != B256::ZERO { - let canonical_block_parent_root = canonical_block.message.parent_root; + while canonical_block.parent_root != B256::ZERO { + let canonical_block_parent_root = canonical_block.parent_root; - if canonical_block.message.slot < blobscan_block.slot { + if canonical_block.slot < blobscan_block.slot { return Ok(vec![]); } - if let Some(execution_payload) = &canonical_block.message.body.execution_payload { + if let Some(execution_payload) = &canonical_block.execution_payload { if execution_payload.block_hash == blobscan_block.hash { return Ok(canonical_execution_blocks); } @@ -373,7 +373,7 @@ impl SlotsProcessor { canonical_execution_blocks.push(BlockData { root: current_canonical_block_root, parent_root: canonical_block_parent_root, - slot: canonical_block.message.slot, + slot: canonical_block.slot, execution_block_hash: execution_payload.block_hash, }); }