From 7e948eec9dd52388b039df9cc71b2835ca0ec649 Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Wed, 10 Jan 2024 10:44:07 +1100 Subject: [PATCH] Fix block v3 reward encodings (#5049) * Fix block v3 reward encodings * Use crates.io version --- Cargo.lock | 4 ++-- beacon_node/beacon_chain/src/beacon_chain.rs | 6 +++++- beacon_node/http_api/src/produce_block.rs | 2 +- beacon_node/http_api/src/version.rs | 2 +- common/eth2/src/types.rs | 7 ++++--- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 525d51f7e..6eb0491eb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2341,9 +2341,9 @@ dependencies = [ [[package]] name = "ethereum_serde_utils" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f8cb04ea380a33e9c269fa5f8df6f2d63dee19728235f3e639e7674e038686a" +checksum = "de4d5951468846963c24e8744c133d44f39dff2cd3a233f6be22b370d08a524f" dependencies = [ "ethereum-types 0.14.1", "hex", diff --git a/beacon_node/beacon_chain/src/beacon_chain.rs b/beacon_node/beacon_chain/src/beacon_chain.rs index 715ba7152..bf4180547 100644 --- a/beacon_node/beacon_chain/src/beacon_chain.rs +++ b/beacon_node/beacon_chain/src/beacon_chain.rs @@ -511,13 +511,17 @@ impl BeaconBlockResponseWrapper { } } - pub fn consensus_block_value(&self) -> u64 { + pub fn consensus_block_value_gwei(&self) -> u64 { match self { BeaconBlockResponseWrapper::Full(resp) => resp.consensus_block_value, BeaconBlockResponseWrapper::Blinded(resp) => resp.consensus_block_value, } } + pub fn consensus_block_value_wei(&self) -> Uint256 { + Uint256::from(self.consensus_block_value_gwei()) * 1_000_000_000 + } + pub fn is_blinded(&self) -> bool { matches!(self, BeaconBlockResponseWrapper::Blinded(_)) } diff --git a/beacon_node/http_api/src/produce_block.rs b/beacon_node/http_api/src/produce_block.rs index 8388987b4..6b8a1bb1c 100644 --- a/beacon_node/http_api/src/produce_block.rs +++ b/beacon_node/http_api/src/produce_block.rs @@ -80,7 +80,7 @@ pub fn build_response_v3( .fork_name(&chain.spec) .map_err(inconsistent_fork_rejection)?; let execution_payload_value = block_response.execution_payload_value(); - let consensus_block_value = block_response.consensus_block_value(); + let consensus_block_value = block_response.consensus_block_value_wei(); let execution_payload_blinded = block_response.is_blinded(); let metadata = ProduceBlockV3Metadata { diff --git a/beacon_node/http_api/src/version.rs b/beacon_node/http_api/src/version.rs index 343defb80..7cd5e6700 100644 --- a/beacon_node/http_api/src/version.rs +++ b/beacon_node/http_api/src/version.rs @@ -93,7 +93,7 @@ pub fn add_execution_payload_value_header( /// Add the `Eth-Consensus-Block-Value` header to a response. pub fn add_consensus_block_value_header( reply: T, - consensus_payload_value: u64, + consensus_payload_value: Uint256, ) -> Response { reply::with_header( reply, diff --git a/common/eth2/src/types.rs b/common/eth2/src/types.rs index 46c0dff8b..98074615b 100644 --- a/common/eth2/src/types.rs +++ b/common/eth2/src/types.rs @@ -1554,9 +1554,10 @@ pub struct ProduceBlockV3Metadata { )] pub consensus_version: ForkName, pub execution_payload_blinded: bool, + #[serde(with = "serde_utils::u256_dec")] pub execution_payload_value: Uint256, - #[serde(with = "serde_utils::quoted_u64")] - pub consensus_block_value: u64, + #[serde(with = "serde_utils::u256_dec")] + pub consensus_block_value: Uint256, } impl FullBlockContents { @@ -1707,7 +1708,7 @@ impl TryFrom<&HeaderMap> for ProduceBlockV3Metadata { })?; let consensus_block_value = parse_required_header(headers, CONSENSUS_BLOCK_VALUE_HEADER, |s| { - s.parse::() + s.parse::() .map_err(|e| format!("invalid {CONSENSUS_BLOCK_VALUE_HEADER}: {e:?}")) })?;