mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
Upstream ExecutionData to alloy (#14188)
This commit is contained in:
1
Cargo.lock
generated
1
Cargo.lock
generated
@ -8758,7 +8758,6 @@ version = "1.2.0"
|
||||
dependencies = [
|
||||
"alloy-rpc-types",
|
||||
"reth-chainspec",
|
||||
"reth-engine-primitives",
|
||||
"reth-primitives",
|
||||
"reth-primitives-traits",
|
||||
]
|
||||
|
||||
@ -12,9 +12,9 @@
|
||||
extern crate alloc;
|
||||
|
||||
use alloy_consensus::BlockHeader;
|
||||
use alloy_eips::{eip7685::Requests, Decodable2718};
|
||||
use alloy_eips::eip7685::Requests;
|
||||
use alloy_primitives::B256;
|
||||
use alloy_rpc_types_engine::{ExecutionPayloadSidecar, PayloadError};
|
||||
use alloy_rpc_types_engine::{ExecutionData, PayloadError};
|
||||
use core::fmt::{self, Debug};
|
||||
use reth_payload_primitives::{
|
||||
validate_execution_requests, BuiltPayload, EngineApiMessageVersion,
|
||||
@ -23,7 +23,7 @@ use reth_payload_primitives::{
|
||||
};
|
||||
use reth_primitives::{NodePrimitives, SealedBlock};
|
||||
use reth_primitives_traits::Block;
|
||||
use serde::{de::DeserializeOwned, Deserialize, Serialize};
|
||||
use serde::{de::DeserializeOwned, Serialize};
|
||||
|
||||
mod error;
|
||||
pub use error::*;
|
||||
@ -40,41 +40,6 @@ pub use event::*;
|
||||
mod invalid_block_hook;
|
||||
pub use invalid_block_hook::InvalidBlockHook;
|
||||
|
||||
/// Struct aggregating [`alloy_rpc_types_engine::ExecutionPayload`] and [`ExecutionPayloadSidecar`]
|
||||
/// and encapsulating complete payload supplied for execution.
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
pub struct ExecutionData {
|
||||
/// Execution payload.
|
||||
pub payload: alloy_rpc_types_engine::ExecutionPayload,
|
||||
/// Additional fork-specific fields.
|
||||
pub sidecar: ExecutionPayloadSidecar,
|
||||
}
|
||||
|
||||
impl ExecutionData {
|
||||
/// Creates new instance of [`ExecutionData`].
|
||||
pub const fn new(
|
||||
payload: alloy_rpc_types_engine::ExecutionPayload,
|
||||
sidecar: ExecutionPayloadSidecar,
|
||||
) -> Self {
|
||||
Self { payload, sidecar }
|
||||
}
|
||||
|
||||
/// Tries to create a new unsealed block from the given payload and payload sidecar.
|
||||
///
|
||||
/// Performs additional validation of `extra_data` and `base_fee_per_gas` fields.
|
||||
///
|
||||
/// # Note
|
||||
///
|
||||
/// The log bloom is assumed to be validated during serialization.
|
||||
///
|
||||
/// See <https://github.com/ethereum/go-ethereum/blob/79a478bb6176425c2400e949890e668a3d9a3d05/core/beacon/types.go#L145>
|
||||
pub fn try_into_block<T: Decodable2718>(
|
||||
self,
|
||||
) -> Result<alloy_consensus::Block<T>, PayloadError> {
|
||||
self.payload.try_into_block_with_sidecar(&self.sidecar)
|
||||
}
|
||||
}
|
||||
|
||||
/// An execution payload.
|
||||
pub trait ExecutionPayload:
|
||||
Serialize + DeserializeOwned + Debug + Clone + Send + Sync + 'static
|
||||
@ -152,7 +117,7 @@ pub trait EngineTypes:
|
||||
/// Execution data.
|
||||
type ExecutionData: ExecutionPayload;
|
||||
|
||||
/// Converts a [`BuiltPayload`] into an [`ExecutionPayload`] and [`ExecutionPayloadSidecar`].
|
||||
/// Converts a [`BuiltPayload`] into an [`ExecutionData`].
|
||||
fn block_to_payload(
|
||||
block: SealedBlock<
|
||||
<<Self::BuiltPayload as BuiltPayload>::Primitives as NodePrimitives>::Block,
|
||||
|
||||
@ -3200,12 +3200,13 @@ mod tests {
|
||||
use alloy_primitives::Bytes;
|
||||
use alloy_rlp::Decodable;
|
||||
use alloy_rpc_types_engine::{
|
||||
CancunPayloadFields, ExecutionPayloadSidecar, ExecutionPayloadV1, ExecutionPayloadV3,
|
||||
CancunPayloadFields, ExecutionData, ExecutionPayloadSidecar, ExecutionPayloadV1,
|
||||
ExecutionPayloadV3,
|
||||
};
|
||||
use assert_matches::assert_matches;
|
||||
use reth_chain_state::{test_utils::TestBlockBuilder, BlockState};
|
||||
use reth_chainspec::{ChainSpec, HOLESKY, MAINNET};
|
||||
use reth_engine_primitives::{ExecutionData, ForkchoiceStatus};
|
||||
use reth_engine_primitives::ForkchoiceStatus;
|
||||
use reth_ethereum_consensus::EthBeaconConsensus;
|
||||
use reth_ethereum_engine_primitives::{EthEngineTypes, EthereumEngineValidator};
|
||||
use reth_ethereum_primitives::{Block, EthPrimitives};
|
||||
|
||||
@ -2,14 +2,14 @@
|
||||
|
||||
use alloy_consensus::{Header, Transaction};
|
||||
use alloy_rpc_types_engine::{
|
||||
CancunPayloadFields, ExecutionPayload, ExecutionPayloadSidecar, ForkchoiceState, PayloadStatus,
|
||||
CancunPayloadFields, ExecutionData, ExecutionPayload, ExecutionPayloadSidecar, ForkchoiceState,
|
||||
PayloadStatus,
|
||||
};
|
||||
use futures::{stream::FuturesUnordered, Stream, StreamExt, TryFutureExt};
|
||||
use itertools::Either;
|
||||
use reth_chainspec::EthChainSpec;
|
||||
use reth_engine_primitives::{
|
||||
BeaconEngineMessage, BeaconOnNewPayloadError, EngineTypes, ExecutionData,
|
||||
ExecutionPayload as _, OnForkChoiceUpdated,
|
||||
BeaconEngineMessage, BeaconOnNewPayloadError, EngineTypes, OnForkChoiceUpdated,
|
||||
};
|
||||
use reth_errors::{BlockExecutionError, BlockValidationError, RethError, RethResult};
|
||||
use reth_ethereum_forks::EthereumHardforks;
|
||||
|
||||
@ -13,14 +13,14 @@ extern crate alloc;
|
||||
|
||||
mod payload;
|
||||
use alloc::sync::Arc;
|
||||
use alloy_rpc_types_engine::{ExecutionPayload, PayloadError};
|
||||
use alloy_rpc_types_engine::{ExecutionData, ExecutionPayload, PayloadError};
|
||||
pub use alloy_rpc_types_engine::{
|
||||
ExecutionPayloadEnvelopeV2, ExecutionPayloadEnvelopeV3, ExecutionPayloadEnvelopeV4,
|
||||
ExecutionPayloadV1, PayloadAttributes as EthPayloadAttributes,
|
||||
};
|
||||
pub use payload::{EthBuiltPayload, EthPayloadBuilderAttributes};
|
||||
use reth_chainspec::ChainSpec;
|
||||
use reth_engine_primitives::{EngineTypes, EngineValidator, ExecutionData, PayloadValidator};
|
||||
use reth_engine_primitives::{EngineTypes, EngineValidator, PayloadValidator};
|
||||
use reth_payload_primitives::{
|
||||
validate_version_specific_fields, BuiltPayload, EngineApiMessageVersion,
|
||||
EngineObjectValidationError, PayloadOrAttributes, PayloadTypes,
|
||||
|
||||
@ -7,12 +7,12 @@ use std::{
|
||||
};
|
||||
|
||||
use crate::{BeaconConsensusEngineEvent, BeaconConsensusEngineHandle, EthApiBuilderCtx};
|
||||
use alloy_rpc_types::engine::ClientVersionV1;
|
||||
use alloy_rpc_types::engine::{ClientVersionV1, ExecutionData};
|
||||
use futures::TryFutureExt;
|
||||
use reth_chainspec::EthereumHardforks;
|
||||
use reth_node_api::{
|
||||
AddOnsContext, BlockTy, EngineTypes, EngineValidator, ExecutionData, FullNodeComponents,
|
||||
NodeAddOns, NodeTypes, NodeTypesWithEngine,
|
||||
AddOnsContext, BlockTy, EngineTypes, EngineValidator, FullNodeComponents, NodeAddOns,
|
||||
NodeTypes, NodeTypesWithEngine,
|
||||
};
|
||||
use reth_node_core::{
|
||||
node_config::NodeConfig,
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
use alloy_rpc_types_engine::{
|
||||
ExecutionPayload, ExecutionPayloadEnvelopeV2, ExecutionPayloadV1, PayloadError,
|
||||
ExecutionData, ExecutionPayload, ExecutionPayloadEnvelopeV2, ExecutionPayloadV1, PayloadError,
|
||||
};
|
||||
use op_alloy_rpc_types_engine::{
|
||||
OpExecutionPayloadEnvelopeV3, OpExecutionPayloadEnvelopeV4, OpPayloadAttributes,
|
||||
@ -11,8 +11,8 @@ use reth_node_api::{
|
||||
EngineObjectValidationError, MessageValidationKind, PayloadOrAttributes, PayloadTypes,
|
||||
VersionSpecificValidationError,
|
||||
},
|
||||
validate_version_specific_fields, BuiltPayload, EngineTypes, EngineValidator, ExecutionData,
|
||||
NodePrimitives, PayloadValidator,
|
||||
validate_version_specific_fields, BuiltPayload, EngineTypes, EngineValidator, NodePrimitives,
|
||||
PayloadValidator,
|
||||
};
|
||||
use reth_optimism_chainspec::OpChainSpec;
|
||||
use reth_optimism_forks::{OpHardfork, OpHardforks};
|
||||
|
||||
@ -2,9 +2,10 @@
|
||||
|
||||
pub use reth_optimism_rpc::OpEngineApi;
|
||||
|
||||
use alloy_rpc_types_engine::ExecutionData;
|
||||
use reth_chainspec::EthereumHardforks;
|
||||
use reth_node_api::{
|
||||
AddOnsContext, EngineTypes, ExecutionData, FullNodeComponents, NodeTypes, NodeTypesWithEngine,
|
||||
AddOnsContext, EngineTypes, FullNodeComponents, NodeTypes, NodeTypesWithEngine,
|
||||
};
|
||||
use reth_node_builder::rpc::{BasicEngineApiBuilder, EngineApiBuilder, EngineValidatorBuilder};
|
||||
|
||||
|
||||
@ -3,15 +3,15 @@
|
||||
use alloy_eips::eip7685::Requests;
|
||||
use alloy_primitives::{BlockHash, B256, U64};
|
||||
use alloy_rpc_types_engine::{
|
||||
ClientVersionV1, ExecutionPayloadBodiesV1, ExecutionPayloadInputV2, ExecutionPayloadV3,
|
||||
ForkchoiceState, ForkchoiceUpdated, PayloadId, PayloadStatus,
|
||||
ClientVersionV1, ExecutionData, ExecutionPayloadBodiesV1, ExecutionPayloadInputV2,
|
||||
ExecutionPayloadV3, ForkchoiceState, ForkchoiceUpdated, PayloadId, PayloadStatus,
|
||||
};
|
||||
use derive_more::Constructor;
|
||||
use jsonrpsee::proc_macros::rpc;
|
||||
use jsonrpsee_core::{server::RpcModule, RpcResult};
|
||||
use op_alloy_rpc_types_engine::OpExecutionPayloadV4;
|
||||
use reth_chainspec::EthereumHardforks;
|
||||
use reth_node_api::{EngineTypes, EngineValidator, ExecutionData};
|
||||
use reth_node_api::{EngineTypes, EngineValidator};
|
||||
use reth_provider::{BlockReader, HeaderProvider, StateProviderFactory};
|
||||
use reth_rpc_api::IntoEngineApiRpcModule;
|
||||
use reth_rpc_engine_api::{EngineApi, EngineApiServer};
|
||||
|
||||
@ -16,7 +16,6 @@ workspace = true
|
||||
reth-chainspec.workspace = true
|
||||
reth-primitives.workspace = true
|
||||
reth-primitives-traits.workspace = true
|
||||
reth-engine-primitives.workspace = true
|
||||
|
||||
# alloy
|
||||
alloy-rpc-types = { workspace = true, features = ["engine"] }
|
||||
|
||||
@ -8,9 +8,8 @@
|
||||
#![cfg_attr(not(test), warn(unused_crate_dependencies))]
|
||||
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
|
||||
|
||||
use alloy_rpc_types::engine::{MaybeCancunPayloadFields, PayloadError};
|
||||
use alloy_rpc_types::engine::{ExecutionData, MaybeCancunPayloadFields, PayloadError};
|
||||
use reth_chainspec::EthereumHardforks;
|
||||
use reth_engine_primitives::ExecutionData;
|
||||
use reth_primitives::SealedBlock;
|
||||
use reth_primitives_traits::{Block, SignedTransaction};
|
||||
use std::sync::Arc;
|
||||
|
||||
@ -70,8 +70,8 @@ reth-engine-primitives.workspace = true
|
||||
alloy-primitives.workspace = true
|
||||
alloy-rpc-types-eth.workspace = true
|
||||
alloy-rpc-types-trace.workspace = true
|
||||
alloy-rpc-types-engine.workspace = true
|
||||
alloy-eips.workspace = true
|
||||
alloy-rpc-types-engine.workspace = true
|
||||
|
||||
tokio = { workspace = true, features = ["rt", "rt-multi-thread"] }
|
||||
serde_json.workspace = true
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
//!
|
||||
//! ```
|
||||
//! use reth_consensus::{ConsensusError, FullConsensus};
|
||||
//! use reth_engine_primitives::{ExecutionData, PayloadValidator};
|
||||
//! use reth_engine_primitives::PayloadValidator;
|
||||
//! use reth_evm::{execute::BlockExecutorProvider, ConfigureEvm};
|
||||
//! use reth_evm_ethereum::EthEvmConfig;
|
||||
//! use reth_network_api::{NetworkInfo, Peers};
|
||||
@ -87,7 +87,7 @@
|
||||
//!
|
||||
//! ```
|
||||
//! use reth_consensus::{ConsensusError, FullConsensus};
|
||||
//! use reth_engine_primitives::{ExecutionData, PayloadValidator};
|
||||
//! use reth_engine_primitives::PayloadValidator;
|
||||
//! use reth_evm::{execute::BlockExecutorProvider, ConfigureEvm};
|
||||
//! use reth_evm_ethereum::EthEvmConfig;
|
||||
//! use reth_network_api::{NetworkInfo, Peers};
|
||||
@ -641,7 +641,7 @@ where
|
||||
///
|
||||
/// ```no_run
|
||||
/// use reth_consensus::noop::NoopConsensus;
|
||||
/// use reth_engine_primitives::{ExecutionData, PayloadValidator};
|
||||
/// use reth_engine_primitives::PayloadValidator;
|
||||
/// use reth_evm::ConfigureEvm;
|
||||
/// use reth_evm_ethereum::execute::EthExecutorProvider;
|
||||
/// use reth_network_api::noop::NoopNetwork;
|
||||
|
||||
@ -9,18 +9,16 @@ use alloy_eips::{
|
||||
};
|
||||
use alloy_primitives::{BlockHash, BlockNumber, B256, U64};
|
||||
use alloy_rpc_types_engine::{
|
||||
CancunPayloadFields, ClientVersionV1, ExecutionPayload, ExecutionPayloadBodiesV1,
|
||||
ExecutionPayloadBodyV1, ExecutionPayloadInputV2, ExecutionPayloadSidecar, ExecutionPayloadV1,
|
||||
ExecutionPayloadV3, ForkchoiceState, ForkchoiceUpdated, PayloadId, PayloadStatus,
|
||||
PraguePayloadFields, TransitionConfiguration,
|
||||
CancunPayloadFields, ClientVersionV1, ExecutionData, ExecutionPayload,
|
||||
ExecutionPayloadBodiesV1, ExecutionPayloadBodyV1, ExecutionPayloadInputV2,
|
||||
ExecutionPayloadSidecar, ExecutionPayloadV1, ExecutionPayloadV3, ForkchoiceState,
|
||||
ForkchoiceUpdated, PayloadId, PayloadStatus, PraguePayloadFields, TransitionConfiguration,
|
||||
};
|
||||
use async_trait::async_trait;
|
||||
use jsonrpsee_core::{server::RpcModule, RpcResult};
|
||||
use parking_lot::Mutex;
|
||||
use reth_chainspec::{EthereumHardfork, EthereumHardforks};
|
||||
use reth_engine_primitives::{
|
||||
BeaconConsensusEngineHandle, EngineTypes, EngineValidator, ExecutionData,
|
||||
};
|
||||
use reth_engine_primitives::{BeaconConsensusEngineHandle, EngineTypes, EngineValidator};
|
||||
use reth_payload_builder::PayloadStore;
|
||||
use reth_payload_primitives::{
|
||||
validate_payload_timestamp, EngineApiMessageVersion, PayloadBuilderAttributes,
|
||||
|
||||
@ -7,14 +7,14 @@ use alloy_rpc_types_beacon::relay::{
|
||||
BuilderBlockValidationRequestV3, BuilderBlockValidationRequestV4,
|
||||
};
|
||||
use alloy_rpc_types_engine::{
|
||||
BlobsBundleV1, CancunPayloadFields, ExecutionPayload, ExecutionPayloadSidecar, PayloadError,
|
||||
PraguePayloadFields,
|
||||
BlobsBundleV1, CancunPayloadFields, ExecutionData, ExecutionPayload, ExecutionPayloadSidecar,
|
||||
PayloadError, PraguePayloadFields,
|
||||
};
|
||||
use async_trait::async_trait;
|
||||
use jsonrpsee::core::RpcResult;
|
||||
use reth_chainspec::{ChainSpecProvider, EthereumHardforks};
|
||||
use reth_consensus::{Consensus, FullConsensus, PostExecutionInput};
|
||||
use reth_engine_primitives::{ExecutionData, PayloadValidator};
|
||||
use reth_engine_primitives::PayloadValidator;
|
||||
use reth_errors::{BlockExecutionError, ConsensusError, ProviderError};
|
||||
use reth_evm::execute::{BlockExecutorProvider, Executor};
|
||||
use reth_metrics::{metrics, metrics::Gauge, Metrics};
|
||||
|
||||
@ -22,8 +22,9 @@ use alloy_genesis::Genesis;
|
||||
use alloy_primitives::{Address, B256};
|
||||
use alloy_rpc_types::{
|
||||
engine::{
|
||||
ExecutionPayloadEnvelopeV2, ExecutionPayloadEnvelopeV3, ExecutionPayloadEnvelopeV4,
|
||||
ExecutionPayloadV1, PayloadAttributes as EthPayloadAttributes, PayloadId,
|
||||
ExecutionData, ExecutionPayloadEnvelopeV2, ExecutionPayloadEnvelopeV3,
|
||||
ExecutionPayloadEnvelopeV4, ExecutionPayloadV1, PayloadAttributes as EthPayloadAttributes,
|
||||
PayloadId,
|
||||
},
|
||||
Withdrawal,
|
||||
};
|
||||
@ -53,7 +54,7 @@ use reth_engine_local::payload::UnsupportedLocalAttributes;
|
||||
use reth_ethereum_payload_builder::EthereumBuilderConfig;
|
||||
use reth_node_api::{
|
||||
payload::{EngineApiMessageVersion, EngineObjectValidationError, PayloadOrAttributes},
|
||||
validate_version_specific_fields, AddOnsContext, EngineTypes, EngineValidator, ExecutionData,
|
||||
validate_version_specific_fields, AddOnsContext, EngineTypes, EngineValidator,
|
||||
FullNodeComponents, PayloadAttributes, PayloadBuilderAttributes, PayloadValidator,
|
||||
};
|
||||
use reth_node_core::{args::RpcServerArgs, node_config::NodeConfig};
|
||||
|
||||
Reference in New Issue
Block a user