From c4b973f5bafcf341c7a5847caf570fc8eee6a965 Mon Sep 17 00:00:00 2001 From: chonghe <44791194+chong-he@users.noreply.github.com> Date: Wed, 23 Jul 2025 08:29:21 +0800 Subject: [PATCH] Use SSZ by default when calling /eth/v3/validator/blocks (#7727) * #7698 --- .../validator_services/src/block_service.rs | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/validator_client/validator_services/src/block_service.rs b/validator_client/validator_services/src/block_service.rs index 01f786e160..4ff8b15bed 100644 --- a/validator_client/validator_services/src/block_service.rs +++ b/validator_client/validator_services/src/block_service.rs @@ -524,22 +524,44 @@ impl BlockService { proposer_index: Option, builder_boost_factor: Option, ) -> Result, BlockError> { - let (block_response, _) = beacon_node - .get_validator_blocks_v3::( + let block_response = match beacon_node + .get_validator_blocks_v3_ssz::( slot, randao_reveal_ref, graffiti.as_ref(), builder_boost_factor, ) .await - .map_err(|e| { - BlockError::Recoverable(format!( - "Error from beacon node when producing block: {:?}", - e - )) - })?; + { + Ok((ssz_block_response, _)) => ssz_block_response, + Err(e) => { + warn!( + slot = slot.as_u64(), + error = %e, + "Beacon node does not support SSZ in block production, falling back to JSON" + ); - let (block_proposer, unsigned_block) = match block_response.data { + let (json_block_response, _) = beacon_node + .get_validator_blocks_v3::( + slot, + randao_reveal_ref, + graffiti.as_ref(), + builder_boost_factor, + ) + .await + .map_err(|e| { + BlockError::Recoverable(format!( + "Error from beacon node when producing block: {:?}", + e + )) + })?; + + // Extract ProduceBlockV3Response (data field of the struct ForkVersionedResponse) + json_block_response.data + } + }; + + let (block_proposer, unsigned_block) = match block_response { eth2::types::ProduceBlockV3Response::Full(block) => { (block.block().proposer_index(), UnsignedBlock::Full(block)) }