diff --git a/Cargo.lock b/Cargo.lock index e4e910fe9..6ae7d5b0a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6443,6 +6443,16 @@ dependencies = [ "typenum", ] +[[package]] +name = "reth-engine-primitives" +version = "0.2.0-beta.5" +dependencies = [ + "reth-primitives", + "reth-rpc-types", + "serde", + "thiserror", +] + [[package]] name = "reth-eth-wire" version = "0.2.0-beta.5" @@ -6500,6 +6510,21 @@ dependencies = [ "tokio-util", ] +[[package]] +name = "reth-ethereum-engine-primitives" +version = "0.2.0-beta.5" +dependencies = [ + "alloy-rlp", + "reth-engine-primitives", + "reth-primitives", + "reth-rpc-types", + "reth-rpc-types-compat", + "revm-primitives", + "serde", + "serde_json", + "sha2 0.10.8", +] + [[package]] name = "reth-ethereum-forks" version = "0.2.0-beta.5" @@ -6788,12 +6813,9 @@ name = "reth-node-api" version = "0.2.0-beta.5" dependencies = [ "reth-db", + "reth-engine-primitives", "reth-evm", - "reth-primitives", "reth-provider", - "reth-rpc-types", - "serde", - "thiserror", ] [[package]] @@ -6902,19 +6924,16 @@ dependencies = [ "futures", "reth-basic-payload-builder", "reth-db", + "reth-ethereum-engine-primitives", "reth-ethereum-payload-builder", "reth-evm-ethereum", "reth-exex", "reth-network", - "reth-node-api", "reth-node-builder", "reth-payload-builder", - "reth-primitives", "reth-provider", - "reth-rpc-types", "reth-tracing", "reth-transaction-pool", - "serde", ] [[package]] @@ -6975,21 +6994,18 @@ dependencies = [ name = "reth-payload-builder" version = "0.2.0-beta.5" dependencies = [ - "alloy-rlp", "futures-util", "metrics", + "reth-engine-primitives", + "reth-ethereum-engine-primitives", "reth-interfaces", "reth-metrics", - "reth-node-api", "reth-primitives", "reth-provider", "reth-rpc-types", - "reth-rpc-types-compat", "reth-transaction-pool", "revm", - "revm-primitives", "serde_json", - "sha2 0.10.8", "thiserror", "tokio", "tokio-stream", diff --git a/Cargo.toml b/Cargo.toml index fb17f01e3..98b18dd6d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,8 @@ members = [ "crates/rpc/rpc-testing-util/", "crates/rpc/rpc-types/", "crates/rpc/rpc-types-compat/", + "crates/engine-primitives/", + "crates/ethereum-engine-primitives/", "crates/node-ethereum/", "crates/node-builder/", "crates/node-optimism/", @@ -206,6 +208,8 @@ reth-db = { path = "crates/storage/db" } reth-discv4 = { path = "crates/net/discv4" } reth-discv5 = { path = "crates/net/discv5" } reth-dns-discovery = { path = "crates/net/dns" } +reth-engine-primitives = { path = "crates/engine-primitives" } +reth-ethereum-engine-primitives = { path = "crates/ethereum-engine-primitives" } reth-node-builder = { path = "crates/node-builder" } reth-node-ethereum = { path = "crates/node-ethereum" } reth-node-optimism = { path = "crates/node-optimism" } diff --git a/crates/engine-primitives/Cargo.toml b/crates/engine-primitives/Cargo.toml new file mode 100644 index 000000000..86f208774 --- /dev/null +++ b/crates/engine-primitives/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "reth-engine-primitives" +version.workspace = true +edition.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true + +[lints] +workspace = true + +[dependencies] +# reth +reth-primitives.workspace = true +reth-rpc-types.workspace = true + +# misc +serde.workspace = true +thiserror.workspace = true diff --git a/crates/node-api/src/engine/error.rs b/crates/engine-primitives/src/error.rs similarity index 100% rename from crates/node-api/src/engine/error.rs rename to crates/engine-primitives/src/error.rs diff --git a/crates/node-api/src/engine/mod.rs b/crates/engine-primitives/src/lib.rs similarity index 96% rename from crates/node-api/src/engine/mod.rs rename to crates/engine-primitives/src/lib.rs index 4d549be32..e144d0fcd 100644 --- a/crates/node-api/src/engine/mod.rs +++ b/crates/engine-primitives/src/lib.rs @@ -1,4 +1,12 @@ -//! This contains the [EngineTypes] trait and implementations for ethereum mainnet types. +//! Traits, validation methods, and helper types used to abstract over engine types. + +#![doc( + html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png", + html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256", + issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/" +)] +#![cfg_attr(not(test), warn(unused_crate_dependencies))] +#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] use core::fmt; use reth_primitives::ChainSpec; diff --git a/crates/node-api/src/engine/payload.rs b/crates/engine-primitives/src/payload.rs similarity index 100% rename from crates/node-api/src/engine/payload.rs rename to crates/engine-primitives/src/payload.rs diff --git a/crates/node-api/src/engine/traits.rs b/crates/engine-primitives/src/traits.rs similarity index 100% rename from crates/node-api/src/engine/traits.rs rename to crates/engine-primitives/src/traits.rs diff --git a/crates/ethereum-engine-primitives/Cargo.toml b/crates/ethereum-engine-primitives/Cargo.toml new file mode 100644 index 000000000..e38488413 --- /dev/null +++ b/crates/ethereum-engine-primitives/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "reth-ethereum-engine-primitives" +version.workspace = true +edition.workspace = true +rust-version.workspace = true +license.workspace = true +homepage.workspace = true +repository.workspace = true + +[lints] +workspace = true + +[dependencies] +# reth +reth-primitives.workspace = true +reth-engine-primitives.workspace = true +reth-rpc-types.workspace = true +reth-rpc-types-compat.workspace = true +revm-primitives.workspace = true +alloy-rlp.workspace = true + +# misc +serde.workspace = true +sha2.workspace = true + +[dev-dependencies] +serde_json.workspace = true diff --git a/crates/node-ethereum/src/engine.rs b/crates/ethereum-engine-primitives/src/lib.rs similarity index 70% rename from crates/node-ethereum/src/engine.rs rename to crates/ethereum-engine-primitives/src/lib.rs index 1f2dc5466..6b030a9c5 100644 --- a/crates/node-ethereum/src/engine.rs +++ b/crates/ethereum-engine-primitives/src/lib.rs @@ -1,8 +1,20 @@ -use reth_node_api::{ +//! Ethereum specifc + +#![doc( + html_logo_url = "https://raw.githubusercontent.com/paradigmxyz/reth/main/assets/reth-docs.png", + html_favicon_url = "https://avatars0.githubusercontent.com/u/97369466?s=256", + issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/" +)] +#![cfg_attr(not(test), warn(unused_crate_dependencies))] +#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] + +mod payload; +pub use payload::{EthBuiltPayload, EthPayloadBuilderAttributes}; + +use reth_engine_primitives::{ validate_version_specific_fields, EngineApiMessageVersion, EngineObjectValidationError, EngineTypes, PayloadOrAttributes, }; -use reth_payload_builder::{EthBuiltPayload, EthPayloadBuilderAttributes}; use reth_primitives::ChainSpec; use reth_rpc_types::{ engine::{ diff --git a/crates/payload/builder/src/payload.rs b/crates/ethereum-engine-primitives/src/payload.rs similarity index 99% rename from crates/payload/builder/src/payload.rs rename to crates/ethereum-engine-primitives/src/payload.rs index bb739dddc..6e8c820a7 100644 --- a/crates/payload/builder/src/payload.rs +++ b/crates/ethereum-engine-primitives/src/payload.rs @@ -1,7 +1,7 @@ //! Contains types required for building a payload. use alloy_rlp::Encodable; -use reth_node_api::{BuiltPayload, PayloadBuilderAttributes}; +use reth_engine_primitives::{BuiltPayload, PayloadBuilderAttributes}; use reth_primitives::{ constants::EIP1559_INITIAL_BASE_FEE, revm::config::revm_spec_by_timestamp_after_merge, Address, BlobTransactionSidecar, ChainSpec, Hardfork, Header, SealedBlock, Withdrawals, B256, U256, diff --git a/crates/node-api/Cargo.toml b/crates/node-api/Cargo.toml index 323f730d9..2d8e1aa6b 100644 --- a/crates/node-api/Cargo.toml +++ b/crates/node-api/Cargo.toml @@ -12,12 +12,7 @@ workspace = true [dependencies] # reth -reth-primitives.workspace = true -reth-rpc-types.workspace = true reth-evm.workspace = true reth-provider.workspace = true reth-db.workspace = true - -# misc -serde.workspace = true -thiserror.workspace = true +reth-engine-primitives.workspace = true diff --git a/crates/node-api/src/lib.rs b/crates/node-api/src/lib.rs index 2f189732b..c1088f242 100644 --- a/crates/node-api/src/lib.rs +++ b/crates/node-api/src/lib.rs @@ -9,15 +9,8 @@ #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] /// Traits, validation methods, and helper types used to abstract over engine types. -/// -/// Notably contains the [EngineTypes] trait and implementations for ethereum mainnet types. -pub mod engine; -pub use engine::{ - validate_payload_timestamp, validate_version_specific_fields, validate_withdrawals_presence, - BuiltPayload, EngineApiMessageVersion, EngineObjectValidationError, EngineTypes, - MessageValidationKind, PayloadAttributes, PayloadBuilderAttributes, PayloadOrAttributes, - VersionSpecificValidationError, -}; +pub use reth_engine_primitives as engine; +pub use reth_engine_primitives::*; /// Traits and helper types used to abstract over EVM methods and types. pub use reth_evm::{ConfigureEvm, ConfigureEvmEnv}; diff --git a/crates/node-ethereum/Cargo.toml b/crates/node-ethereum/Cargo.toml index a88627491..d5a7c6a82 100644 --- a/crates/node-ethereum/Cargo.toml +++ b/crates/node-ethereum/Cargo.toml @@ -12,12 +12,10 @@ workspace = true [dependencies] # reth -reth-primitives.workspace = true reth-payload-builder.workspace = true +reth-ethereum-engine-primitives.workspace = true reth-basic-payload-builder.workspace = true reth-ethereum-payload-builder.workspace = true -reth-rpc-types.workspace = true -reth-node-api.workspace = true reth-node-builder.workspace = true reth-tracing.workspace = true reth-provider.workspace = true @@ -27,7 +25,6 @@ reth-evm-ethereum.workspace = true # misc eyre.workspace = true -serde.workspace = true [dev-dependencies] reth-db.workspace = true diff --git a/crates/node-ethereum/src/lib.rs b/crates/node-ethereum/src/lib.rs index e2b368004..cea2e7be0 100644 --- a/crates/node-ethereum/src/lib.rs +++ b/crates/node-ethereum/src/lib.rs @@ -8,14 +8,10 @@ #![cfg_attr(not(test), warn(unused_crate_dependencies))] #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] -/// Exports commonly used concrete instances of the [EngineTypes](reth_node_api::EngineTypes) -/// trait. -pub mod engine; -pub use engine::EthEngineTypes; +pub use reth_ethereum_engine_primitives::EthEngineTypes; -/// Exports commonly used concrete instances of the -/// [ConfigureEvmEnv](reth_node_api::ConfigureEvmEnv) trait. pub mod evm; pub use evm::EthEvmConfig; + pub mod node; pub use node::EthereumNode; diff --git a/crates/payload/builder/Cargo.toml b/crates/payload/builder/Cargo.toml index 207fbc43f..aa4b785cd 100644 --- a/crates/payload/builder/Cargo.toml +++ b/crates/payload/builder/Cargo.toml @@ -17,13 +17,9 @@ reth-primitives.workspace = true reth-rpc-types.workspace = true reth-transaction-pool.workspace = true reth-interfaces.workspace = true -reth-rpc-types-compat.workspace = true reth-provider.workspace = true -reth-node-api.workspace = true - -# ethereum -alloy-rlp.workspace = true -revm-primitives.workspace = true +reth-engine-primitives.workspace = true +reth-ethereum-engine-primitives.workspace = true # async tokio = { workspace = true, features = ["sync"] } @@ -36,7 +32,6 @@ metrics.workspace = true # misc thiserror.workspace = true -sha2.workspace = true tracing.workspace = true [dev-dependencies] diff --git a/crates/payload/builder/src/events.rs b/crates/payload/builder/src/events.rs index 8b4bb97f1..66f299bbb 100644 --- a/crates/payload/builder/src/events.rs +++ b/crates/payload/builder/src/events.rs @@ -1,5 +1,5 @@ use futures_util::Stream; -use reth_node_api::EngineTypes; +use reth_engine_primitives::EngineTypes; use tokio::sync::broadcast; use tokio_stream::{ wrappers::{errors::BroadcastStreamRecvError, BroadcastStream}, diff --git a/crates/payload/builder/src/lib.rs b/crates/payload/builder/src/lib.rs index 345577545..b3baf1199 100644 --- a/crates/payload/builder/src/lib.rs +++ b/crates/payload/builder/src/lib.rs @@ -105,7 +105,6 @@ pub mod database; pub mod error; mod events; mod metrics; -mod payload; mod service; mod traits; @@ -115,7 +114,10 @@ pub mod noop; pub mod test_utils; pub use events::Events; -pub use payload::{EthBuiltPayload, EthPayloadBuilderAttributes}; pub use reth_rpc_types::engine::PayloadId; pub use service::{PayloadBuilderHandle, PayloadBuilderService, PayloadStore}; pub use traits::{KeepPayloadJobAlive, PayloadJob, PayloadJobGenerator}; + +// re-export the Ethereum engine primitives for convenience +#[doc(inline)] +pub use reth_ethereum_engine_primitives::{EthBuiltPayload, EthPayloadBuilderAttributes}; diff --git a/crates/payload/builder/src/noop.rs b/crates/payload/builder/src/noop.rs index 5c4c0b8e5..bdfadf766 100644 --- a/crates/payload/builder/src/noop.rs +++ b/crates/payload/builder/src/noop.rs @@ -2,7 +2,7 @@ use crate::{service::PayloadServiceCommand, PayloadBuilderHandle}; use futures_util::{ready, StreamExt}; -use reth_node_api::{EngineTypes, PayloadBuilderAttributes}; +use reth_engine_primitives::{EngineTypes, PayloadBuilderAttributes}; use std::{ future::Future, pin::Pin, diff --git a/crates/payload/builder/src/service.rs b/crates/payload/builder/src/service.rs index 10534b48d..81d3445b0 100644 --- a/crates/payload/builder/src/service.rs +++ b/crates/payload/builder/src/service.rs @@ -11,7 +11,7 @@ use crate::{ KeepPayloadJobAlive, PayloadJob, }; use futures_util::{future::FutureExt, Stream, StreamExt}; -use reth_node_api::{BuiltPayload, EngineTypes, PayloadBuilderAttributes}; +use reth_engine_primitives::{BuiltPayload, EngineTypes, PayloadBuilderAttributes}; use reth_provider::CanonStateNotification; use reth_rpc_types::engine::PayloadId; use std::{ diff --git a/crates/payload/builder/src/test_utils.rs b/crates/payload/builder/src/test_utils.rs index be5422073..40237aa92 100644 --- a/crates/payload/builder/src/test_utils.rs +++ b/crates/payload/builder/src/test_utils.rs @@ -5,7 +5,7 @@ use crate::{ EthPayloadBuilderAttributes, PayloadBuilderHandle, PayloadBuilderService, PayloadJob, PayloadJobGenerator, }; -use reth_node_api::EngineTypes; +use reth_engine_primitives::EngineTypes; use reth_primitives::{Block, U256}; use reth_provider::CanonStateNotification; use std::{ diff --git a/crates/payload/builder/src/traits.rs b/crates/payload/builder/src/traits.rs index 09bc64325..cf747b0da 100644 --- a/crates/payload/builder/src/traits.rs +++ b/crates/payload/builder/src/traits.rs @@ -1,7 +1,7 @@ //! Trait abstractions used by the payload crate. use crate::error::PayloadBuilderError; -use reth_node_api::{BuiltPayload, PayloadBuilderAttributes}; +use reth_engine_primitives::{BuiltPayload, PayloadBuilderAttributes}; use reth_provider::CanonStateNotification; use std::future::Future;