feat: phase out payload conversion helpers (#14090)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
DevOrbitlabs
2025-01-31 20:04:41 +07:00
committed by GitHub
parent 54a5fcc24d
commit 6afededdbf
8 changed files with 16 additions and 59 deletions

View File

@ -13,14 +13,13 @@ use crate::{
}; };
use alloy_primitives::B256; use alloy_primitives::B256;
use alloy_provider::{network::AnyRpcBlock, Provider}; use alloy_provider::{network::AnyRpcBlock, Provider};
use alloy_rpc_types_engine::ForkchoiceState; use alloy_rpc_types_engine::{ExecutionPayload, ForkchoiceState};
use clap::Parser; use clap::Parser;
use csv::Writer; use csv::Writer;
use reth_cli_runner::CliContext; use reth_cli_runner::CliContext;
use reth_node_core::args::BenchmarkArgs; use reth_node_core::args::BenchmarkArgs;
use reth_primitives::SealedBlock; use reth_primitives::SealedBlock;
use reth_primitives_traits::SealedHeader; use reth_primitives_traits::SealedHeader;
use reth_rpc_types_compat::engine::payload::block_to_payload;
use std::time::Instant; use std::time::Instant;
use tracing::{debug, info}; use tracing::{debug, info};
@ -81,7 +80,8 @@ impl Command {
let versioned_hashes: Vec<B256> = let versioned_hashes: Vec<B256> =
block.body().blob_versioned_hashes_iter().copied().collect(); block.body().blob_versioned_hashes_iter().copied().collect();
let parent_beacon_block_root = block.parent_beacon_block_root; 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",); debug!(?block_number, "Sending payload",);

View File

@ -13,11 +13,11 @@ use crate::{
}; };
use alloy_primitives::B256; use alloy_primitives::B256;
use alloy_provider::Provider; use alloy_provider::Provider;
use alloy_rpc_types_engine::ExecutionPayload;
use clap::Parser; use clap::Parser;
use csv::Writer; use csv::Writer;
use reth_cli_runner::CliContext; use reth_cli_runner::CliContext;
use reth_node_core::args::BenchmarkArgs; use reth_node_core::args::BenchmarkArgs;
use reth_rpc_types_compat::engine::payload::block_to_payload;
use std::time::Instant; use std::time::Instant;
use tracing::{debug, info}; use tracing::{debug, info};
@ -64,7 +64,8 @@ impl Command {
let versioned_hashes: Vec<B256> = let versioned_hashes: Vec<B256> =
block.body().blob_versioned_hashes_iter().copied().collect(); block.body().blob_versioned_hashes_iter().copied().collect();
let parent_beacon_block_root = block.parent_beacon_block_root; 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(); let block_number = payload.block_number();

View File

@ -28,7 +28,6 @@ use reth_revm::{
db::{states::bundle_state::BundleRetention, State}, db::{states::bundle_state::BundleRetention, State},
DatabaseCommit, DatabaseCommit,
}; };
use reth_rpc_types_compat::engine::payload::block_to_payload;
use std::{ use std::{
collections::VecDeque, collections::VecDeque,
future::Future, future::Future,
@ -426,7 +425,7 @@ where
.seal_slow(); .seal_slow();
Ok(( 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? // todo(onbjerg): how do we support execution requests?
reorg_target reorg_target
.header .header

View File

@ -27,7 +27,6 @@ use reth_payload_primitives::{
}; };
use reth_payload_validator::ExecutionPayloadValidator; use reth_payload_validator::ExecutionPayloadValidator;
use reth_primitives::{Block, NodePrimitives, SealedBlock}; 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. /// The types used in the default mainnet ethereum beacon consensus engine.
#[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)] #[derive(Debug, Default, Clone, serde::Deserialize, serde::Serialize)]
@ -61,7 +60,7 @@ where
<<Self::BuiltPayload as BuiltPayload>::Primitives as NodePrimitives>::Block, <<Self::BuiltPayload as BuiltPayload>::Primitives as NodePrimitives>::Block,
>, >,
) -> (ExecutionPayload, ExecutionPayloadSidecar) { ) -> (ExecutionPayload, ExecutionPayloadSidecar) {
block_to_payload(block) ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block())
} }
} }

View File

@ -21,7 +21,6 @@ use reth_optimism_payload_builder::{OpBuiltPayload, OpPayloadBuilderAttributes};
use reth_optimism_primitives::OpBlock; use reth_optimism_primitives::OpBlock;
use reth_payload_validator::ExecutionPayloadValidator; use reth_payload_validator::ExecutionPayloadValidator;
use reth_primitives::SealedBlock; use reth_primitives::SealedBlock;
use reth_rpc_types_compat::engine::payload::block_to_payload;
use std::sync::Arc; use std::sync::Arc;
/// The types used in the optimism beacon consensus engine. /// The types used in the optimism beacon consensus engine.
@ -55,7 +54,7 @@ where
<<Self::BuiltPayload as BuiltPayload>::Primitives as NodePrimitives>::Block, <<Self::BuiltPayload as BuiltPayload>::Primitives as NodePrimitives>::Block,
>, >,
) -> (ExecutionPayload, ExecutionPayloadSidecar) { ) -> (ExecutionPayload, ExecutionPayloadSidecar) {
block_to_payload(block) ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block())
} }
} }

View File

@ -8,9 +8,9 @@ use alloy_rpc_types_engine::{
PayloadError, PayloadError,
}; };
use assert_matches::assert_matches; 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_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::{ use reth_testing_utils::generators::{
self, random_block, random_block_range, BlockParams, BlockRangeParams, Rng, self, random_block, random_block_range, BlockParams, BlockRangeParams, Rng,
}; };
@ -22,11 +22,8 @@ fn transform_block<F: FnOnce(Block) -> Block>(src: SealedBlock, f: F) -> Executi
transformed.header.transactions_root = transformed.header.transactions_root =
proofs::calculate_transaction_root(&transformed.body.transactions); proofs::calculate_transaction_root(&transformed.body.transactions);
transformed.header.ommers_hash = proofs::calculate_ommers_root(&transformed.body.ommers); transformed.header.ommers_hash = proofs::calculate_ommers_root(&transformed.body.ommers);
block_to_payload(SealedBlock::from_sealed_parts(
SealedHeader::seal_slow(transformed.header), ExecutionPayload::from_block_slow(&transformed).0
transformed.body,
))
.0
} }
#[test] #[test]

View File

@ -1,52 +1,15 @@
//! Standalone Conversion Functions for Handling Different Versions of Execution Payloads in //! Standalone Conversion Functions for Handling Different Versions of Execution Payloads in
//! Ethereum's Engine //! 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_primitives::U256;
use alloy_rpc_types_engine::{ use alloy_rpc_types_engine::{
payload::{ExecutionPayloadBodyV1, ExecutionPayloadFieldV2}, payload::{ExecutionPayloadBodyV1, ExecutionPayloadFieldV2},
CancunPayloadFields, ExecutionPayload, ExecutionPayloadSidecar, ExecutionPayloadV1, ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3,
ExecutionPayloadV2, ExecutionPayloadV3, PraguePayloadFields,
}; };
use reth_primitives::{Block, SealedBlock}; use reth_primitives::{Block, SealedBlock};
use reth_primitives_traits::{BlockBody as _, SignedTransaction}; use reth_primitives_traits::{BlockBody as _, SignedTransaction};
/// Converts [`SealedBlock`] to [`ExecutionPayload`].
///
/// TODO(mattsse): remove after next alloy bump
pub fn block_to_payload<T: SignedTransaction>(
value: SealedBlock<Block<T>>,
) -> (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`] /// Converts [`SealedBlock`] to [`ExecutionPayloadV1`]
pub fn block_to_payload_v1<T: SignedTransaction>( pub fn block_to_payload_v1<T: SignedTransaction>(
value: SealedBlock<Block<T>>, value: SealedBlock<Block<T>>,

View File

@ -41,7 +41,6 @@ use reth::{
primitives::{Block, EthPrimitives, SealedBlock, TransactionSigned}, primitives::{Block, EthPrimitives, SealedBlock, TransactionSigned},
providers::{CanonStateSubscriptions, EthStorage, StateProviderFactory}, providers::{CanonStateSubscriptions, EthStorage, StateProviderFactory},
rpc::{ rpc::{
compat::engine::payload::block_to_payload,
eth::EthApi, eth::EthApi,
types::engine::{ExecutionPayload, ExecutionPayloadSidecar, PayloadError}, types::engine::{ExecutionPayload, ExecutionPayloadSidecar, PayloadError},
}, },
@ -181,7 +180,7 @@ impl EngineTypes for CustomEngineTypes {
<<Self::BuiltPayload as reth_node_api::BuiltPayload>::Primitives as reth_node_api::NodePrimitives>::Block, <<Self::BuiltPayload as reth_node_api::BuiltPayload>::Primitives as reth_node_api::NodePrimitives>::Block,
>, >,
) -> (ExecutionPayload, ExecutionPayloadSidecar) { ) -> (ExecutionPayload, ExecutionPayloadSidecar) {
block_to_payload(block) ExecutionPayload::from_block_unchecked(block.hash(), &block.into_block())
} }
} }