mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat: phase out payload conversion helpers (#14090)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -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",);
|
||||||
|
|
||||||
|
|||||||
@ -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();
|
||||||
|
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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]
|
||||||
|
|||||||
@ -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>>,
|
||||||
|
|||||||
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user