From 6afededdbf0268f160f0061c0149916de68158fa Mon Sep 17 00:00:00 2001 From: DevOrbitlabs Date: Fri, 31 Jan 2025 20:04:41 +0700 Subject: [PATCH] feat: phase out payload conversion helpers (#14090) Co-authored-by: Matthias Seitz --- bin/reth-bench/src/bench/new_payload_fcu.rs | 6 +-- bin/reth-bench/src/bench/new_payload_only.rs | 5 ++- crates/engine/util/src/reorg.rs | 3 +- crates/ethereum/engine-primitives/src/lib.rs | 3 +- crates/optimism/node/src/engine.rs | 3 +- crates/rpc/rpc-engine-api/tests/it/payload.rs | 11 ++--- .../rpc-types-compat/src/engine/payload.rs | 41 +------------------ examples/custom-engine-types/src/main.rs | 3 +- 8 files changed, 16 insertions(+), 59 deletions(-) diff --git a/bin/reth-bench/src/bench/new_payload_fcu.rs b/bin/reth-bench/src/bench/new_payload_fcu.rs index 12caecbd0..972ececab 100644 --- a/bin/reth-bench/src/bench/new_payload_fcu.rs +++ b/bin/reth-bench/src/bench/new_payload_fcu.rs @@ -13,14 +13,13 @@ use crate::{ }; use alloy_primitives::B256; use alloy_provider::{network::AnyRpcBlock, Provider}; -use alloy_rpc_types_engine::ForkchoiceState; +use alloy_rpc_types_engine::{ExecutionPayload, ForkchoiceState}; use clap::Parser; use csv::Writer; use reth_cli_runner::CliContext; use reth_node_core::args::BenchmarkArgs; use reth_primitives::SealedBlock; use reth_primitives_traits::SealedHeader; -use reth_rpc_types_compat::engine::payload::block_to_payload; use std::time::Instant; use tracing::{debug, info}; @@ -81,7 +80,8 @@ impl Command { let versioned_hashes: Vec = block.body().blob_versioned_hashes_iter().copied().collect(); let parent_beacon_block_root = block.parent_beacon_block_root; - let payload = block_to_payload(block).0; + let (payload, _) = + ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block()); debug!(?block_number, "Sending payload",); diff --git a/bin/reth-bench/src/bench/new_payload_only.rs b/bin/reth-bench/src/bench/new_payload_only.rs index f72b9f2d5..5904d648d 100644 --- a/bin/reth-bench/src/bench/new_payload_only.rs +++ b/bin/reth-bench/src/bench/new_payload_only.rs @@ -13,11 +13,11 @@ use crate::{ }; use alloy_primitives::B256; use alloy_provider::Provider; +use alloy_rpc_types_engine::ExecutionPayload; use clap::Parser; use csv::Writer; use reth_cli_runner::CliContext; use reth_node_core::args::BenchmarkArgs; -use reth_rpc_types_compat::engine::payload::block_to_payload; use std::time::Instant; use tracing::{debug, info}; @@ -64,7 +64,8 @@ impl Command { let versioned_hashes: Vec = block.body().blob_versioned_hashes_iter().copied().collect(); let parent_beacon_block_root = block.parent_beacon_block_root; - let payload = block_to_payload(block).0; + let (payload, _) = + ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block()); let block_number = payload.block_number(); diff --git a/crates/engine/util/src/reorg.rs b/crates/engine/util/src/reorg.rs index 3120264f5..64b29958f 100644 --- a/crates/engine/util/src/reorg.rs +++ b/crates/engine/util/src/reorg.rs @@ -28,7 +28,6 @@ use reth_revm::{ db::{states::bundle_state::BundleRetention, State}, DatabaseCommit, }; -use reth_rpc_types_compat::engine::payload::block_to_payload; use std::{ collections::VecDeque, future::Future, @@ -426,7 +425,7 @@ where .seal_slow(); Ok(( - block_to_payload(reorg_block).0, + ExecutionPayload::from_block_unchecked(reorg_block.hash(), &reorg_block.into_block()).0, // todo(onbjerg): how do we support execution requests? reorg_target .header diff --git a/crates/ethereum/engine-primitives/src/lib.rs b/crates/ethereum/engine-primitives/src/lib.rs index d58e7ff1c..febbd8230 100644 --- a/crates/ethereum/engine-primitives/src/lib.rs +++ b/crates/ethereum/engine-primitives/src/lib.rs @@ -27,7 +27,6 @@ use reth_payload_primitives::{ }; use reth_payload_validator::ExecutionPayloadValidator; use reth_primitives::{Block, NodePrimitives, SealedBlock}; -use reth_rpc_types_compat::engine::payload::block_to_payload; /// The types used in the default mainnet ethereum beacon consensus engine. #[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)] @@ -61,7 +60,7 @@ where <::Primitives as NodePrimitives>::Block, >, ) -> (ExecutionPayload, ExecutionPayloadSidecar) { - block_to_payload(block) + ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block()) } } diff --git a/crates/optimism/node/src/engine.rs b/crates/optimism/node/src/engine.rs index 184952e02..2f07ff360 100644 --- a/crates/optimism/node/src/engine.rs +++ b/crates/optimism/node/src/engine.rs @@ -21,7 +21,6 @@ use reth_optimism_payload_builder::{OpBuiltPayload, OpPayloadBuilderAttributes}; use reth_optimism_primitives::OpBlock; use reth_payload_validator::ExecutionPayloadValidator; use reth_primitives::SealedBlock; -use reth_rpc_types_compat::engine::payload::block_to_payload; use std::sync::Arc; /// The types used in the optimism beacon consensus engine. @@ -55,7 +54,7 @@ where <::Primitives as NodePrimitives>::Block, >, ) -> (ExecutionPayload, ExecutionPayloadSidecar) { - block_to_payload(block) + ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block()) } } diff --git a/crates/rpc/rpc-engine-api/tests/it/payload.rs b/crates/rpc/rpc-engine-api/tests/it/payload.rs index 6edfeaf16..1a23daca3 100644 --- a/crates/rpc/rpc-engine-api/tests/it/payload.rs +++ b/crates/rpc/rpc-engine-api/tests/it/payload.rs @@ -8,9 +8,9 @@ use alloy_rpc_types_engine::{ PayloadError, }; use assert_matches::assert_matches; -use reth_primitives::{Block, SealedBlock, SealedHeader, TransactionSigned}; +use reth_primitives::{Block, SealedBlock, TransactionSigned}; use reth_primitives_traits::proofs; -use reth_rpc_types_compat::engine::payload::{block_to_payload, block_to_payload_v1}; +use reth_rpc_types_compat::engine::payload::block_to_payload_v1; use reth_testing_utils::generators::{ self, random_block, random_block_range, BlockParams, BlockRangeParams, Rng, }; @@ -22,11 +22,8 @@ fn transform_block Block>(src: SealedBlock, f: F) -> Executi transformed.header.transactions_root = proofs::calculate_transaction_root(&transformed.body.transactions); transformed.header.ommers_hash = proofs::calculate_ommers_root(&transformed.body.ommers); - block_to_payload(SealedBlock::from_sealed_parts( - SealedHeader::seal_slow(transformed.header), - transformed.body, - )) - .0 + + ExecutionPayload::from_block_slow(&transformed).0 } #[test] diff --git a/crates/rpc/rpc-types-compat/src/engine/payload.rs b/crates/rpc/rpc-types-compat/src/engine/payload.rs index b0262dbd8..82e13f632 100644 --- a/crates/rpc/rpc-types-compat/src/engine/payload.rs +++ b/crates/rpc/rpc-types-compat/src/engine/payload.rs @@ -1,52 +1,15 @@ //! Standalone Conversion Functions for Handling Different Versions of Execution Payloads in //! Ethereum's Engine -use alloy_eips::{eip2718::Encodable2718, eip4895::Withdrawals, eip7685::RequestsOrHash}; +use alloy_eips::{eip2718::Encodable2718, eip4895::Withdrawals}; use alloy_primitives::U256; use alloy_rpc_types_engine::{ payload::{ExecutionPayloadBodyV1, ExecutionPayloadFieldV2}, - CancunPayloadFields, ExecutionPayload, ExecutionPayloadSidecar, ExecutionPayloadV1, - ExecutionPayloadV2, ExecutionPayloadV3, PraguePayloadFields, + ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, }; use reth_primitives::{Block, SealedBlock}; use reth_primitives_traits::{BlockBody as _, SignedTransaction}; -/// Converts [`SealedBlock`] to [`ExecutionPayload`]. -/// -/// TODO(mattsse): remove after next alloy bump -pub fn block_to_payload( - value: SealedBlock>, -) -> (ExecutionPayload, ExecutionPayloadSidecar) { - let cancun = - value.parent_beacon_block_root.map(|parent_beacon_block_root| CancunPayloadFields { - parent_beacon_block_root, - versioned_hashes: value.body().blob_versioned_hashes_iter().copied().collect(), - }); - - let prague = value - .requests_hash - .map(|requests_hash| PraguePayloadFields { requests: RequestsOrHash::Hash(requests_hash) }); - - let sidecar = match (cancun, prague) { - (Some(cancun), Some(prague)) => ExecutionPayloadSidecar::v4(cancun, prague), - (Some(cancun), None) => ExecutionPayloadSidecar::v3(cancun), - _ => ExecutionPayloadSidecar::none(), - }; - - let execution_payload = if value.parent_beacon_block_root.is_some() { - // block with parent beacon block root: V3 - ExecutionPayload::V3(block_to_payload_v3(value)) - } else if value.body().withdrawals.is_some() { - // block with withdrawals: V2 - ExecutionPayload::V2(block_to_payload_v2(value)) - } else { - // otherwise V1 - ExecutionPayload::V1(block_to_payload_v1(value)) - }; - - (execution_payload, sidecar) -} - /// Converts [`SealedBlock`] to [`ExecutionPayloadV1`] pub fn block_to_payload_v1( value: SealedBlock>, diff --git a/examples/custom-engine-types/src/main.rs b/examples/custom-engine-types/src/main.rs index 2de7d3bf5..f3d9548c4 100644 --- a/examples/custom-engine-types/src/main.rs +++ b/examples/custom-engine-types/src/main.rs @@ -41,7 +41,6 @@ use reth::{ primitives::{Block, EthPrimitives, SealedBlock, TransactionSigned}, providers::{CanonStateSubscriptions, EthStorage, StateProviderFactory}, rpc::{ - compat::engine::payload::block_to_payload, eth::EthApi, types::engine::{ExecutionPayload, ExecutionPayloadSidecar, PayloadError}, }, @@ -181,7 +180,7 @@ impl EngineTypes for CustomEngineTypes { <::Primitives as reth_node_api::NodePrimitives>::Block, >, ) -> (ExecutionPayload, ExecutionPayloadSidecar) { - block_to_payload(block) + ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block()) } }