From 2093d2bd9a72074be19f410116a9fb256eb15eed Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Thu, 21 Nov 2024 18:03:05 +0100 Subject: [PATCH] chore(sdk): Add `NodePrimitives::BlockHeader` and `NodePrimitives::BlockBody` (#12647) --- .github/assets/check_wasm.sh | 1 + Cargo.lock | 1 + crates/optimism/node/Cargo.toml | 5 ++++ crates/optimism/node/src/node.rs | 16 +++-------- crates/optimism/primitives/Cargo.toml | 15 +++++++++-- crates/optimism/primitives/src/lib.rs | 10 ++++--- crates/primitives-traits/Cargo.toml | 2 +- crates/primitives-traits/src/node.rs | 38 ++++++++++++++++++++++++--- crates/primitives/src/lib.rs | 11 ++------ 9 files changed, 68 insertions(+), 31 deletions(-) diff --git a/.github/assets/check_wasm.sh b/.github/assets/check_wasm.sh index 35f4bdda5..11e5b5e00 100755 --- a/.github/assets/check_wasm.sh +++ b/.github/assets/check_wasm.sh @@ -47,6 +47,7 @@ exclude_crates=( reth-optimism-node reth-optimism-payload-builder reth-optimism-rpc + reth-optimism-primitives reth-rpc reth-rpc-api reth-rpc-api-testing-util diff --git a/Cargo.lock b/Cargo.lock index 10b7f2fbd..9ea3283dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8328,6 +8328,7 @@ dependencies = [ "reth-optimism-forks", "reth-optimism-node", "reth-optimism-payload-builder", + "reth-optimism-primitives", "reth-optimism-rpc", "reth-payload-builder", "reth-payload-util", diff --git a/crates/optimism/node/Cargo.toml b/crates/optimism/node/Cargo.toml index 2e3e9fb4f..18ceee8ef 100644 --- a/crates/optimism/node/Cargo.toml +++ b/crates/optimism/node/Cargo.toml @@ -39,6 +39,7 @@ reth-optimism-rpc.workspace = true reth-optimism-chainspec.workspace = true reth-optimism-consensus.workspace = true reth-optimism-forks.workspace = true +reth-optimism-primitives.workspace = true # revm with required optimism features revm = { workspace = true, features = ["secp256k1", "blst", "c-kzg"] } @@ -119,3 +120,7 @@ test-utils = [ "revm/test-utils", "reth-optimism-node/test-utils", ] +reth-codec = [ + "reth-primitives/reth-codec", + "reth-optimism-primitives/reth-codec", +] \ No newline at end of file diff --git a/crates/optimism/node/src/node.rs b/crates/optimism/node/src/node.rs index bdc3d0d3a..46841a2a5 100644 --- a/crates/optimism/node/src/node.rs +++ b/crates/optimism/node/src/node.rs @@ -9,8 +9,7 @@ use reth_db::transaction::{DbTx, DbTxMut}; use reth_evm::{execute::BasicBlockExecutorProvider, ConfigureEvm}; use reth_network::{NetworkConfig, NetworkHandle, NetworkManager, PeersInfo}; use reth_node_api::{ - AddOnsContext, EngineValidator, FullNodeComponents, FullNodePrimitives, NodeAddOns, - PayloadBuilder, + AddOnsContext, EngineValidator, FullNodeComponents, NodeAddOns, PayloadBuilder, }; use reth_node_builder::{ components::{ @@ -25,12 +24,13 @@ use reth_optimism_chainspec::OpChainSpec; use reth_optimism_consensus::OpBeaconConsensus; use reth_optimism_evm::{OpEvmConfig, OpExecutionStrategyFactory}; use reth_optimism_payload_builder::builder::OpPayloadTransactions; +use reth_optimism_primitives::OpPrimitives; use reth_optimism_rpc::{ witness::{DebugExecutionWitnessApiServer, OpDebugWitnessApi}, OpEthApi, }; use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService}; -use reth_primitives::{Block, BlockBody, Receipt, TransactionSigned, TxType}; +use reth_primitives::BlockBody; use reth_provider::{ providers::ChainStorage, BlockBodyWriter, CanonStateSubscriptions, DBProvider, EthStorage, ProviderResult, @@ -49,16 +49,6 @@ use crate::{ txpool::{OpTransactionPool, OpTransactionValidator}, OpEngineTypes, }; -/// Optimism primitive types. -#[derive(Debug, Default, Clone, PartialEq, Eq)] -pub struct OpPrimitives; - -impl FullNodePrimitives for OpPrimitives { - type Block = Block; - type SignedTx = TransactionSigned; - type TxType = TxType; - type Receipt = Receipt; -} /// Storage implementation for Optimism. #[derive(Debug, Default, Clone)] diff --git a/crates/optimism/primitives/Cargo.toml b/crates/optimism/primitives/Cargo.toml index ade6d4eb6..fc3688077 100644 --- a/crates/optimism/primitives/Cargo.toml +++ b/crates/optimism/primitives/Cargo.toml @@ -39,10 +39,21 @@ reth-codecs = { workspace = true, features = ["test-utils"] } rstest.workspace = true [features] -default = ["reth-codec"] +default = ["std", "reth-codec"] +std = [ + "reth-primitives-traits/std", + "reth-primitives/std", + "reth-node-types/std", + "reth-codecs/std", + "alloy-consensus/std", + "alloy-eips/std", + "alloy-primitives/std", + "serde/std", +] reth-codec = [ "dep:reth-codecs", - "reth-primitives/reth-codec" + "reth-primitives/reth-codec", + "reth-primitives-traits/reth-codec", ] serde = [ "dep:serde", diff --git a/crates/optimism/primitives/src/lib.rs b/crates/optimism/primitives/src/lib.rs index 5f6b1848e..26499bb43 100644 --- a/crates/optimism/primitives/src/lib.rs +++ b/crates/optimism/primitives/src/lib.rs @@ -6,21 +6,25 @@ issue_tracker_base_url = "https://github.com/paradigmxyz/reth/issues/" )] #![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))] +#![cfg_attr(not(feature = "std"), no_std)] pub mod bedrock; pub mod tx_type; pub use tx_type::OpTxType; -use reth_node_types::NodePrimitives; -use reth_primitives::{Block, Receipt, TransactionSigned}; +use alloy_consensus::Header; +use reth_node_types::FullNodePrimitives; +use reth_primitives::{Block, BlockBody, Receipt, TransactionSigned}; /// Optimism primitive types. #[derive(Debug, Default, Clone, PartialEq, Eq)] pub struct OpPrimitives; -impl NodePrimitives for OpPrimitives { +impl FullNodePrimitives for OpPrimitives { type Block = Block; + type BlockHeader = Header; + type BlockBody = BlockBody; type SignedTx = TransactionSigned; type TxType = OpTxType; type Receipt = Receipt; diff --git a/crates/primitives-traits/Cargo.toml b/crates/primitives-traits/Cargo.toml index b686a2e98..df4491b2d 100644 --- a/crates/primitives-traits/Cargo.toml +++ b/crates/primitives-traits/Cargo.toml @@ -100,4 +100,4 @@ reth-codec = [ "dep:reth-codecs", "dep:modular-bitfield", "dep:byteorder", -] \ No newline at end of file +] diff --git a/crates/primitives-traits/src/node.rs b/crates/primitives-traits/src/node.rs index 180920d39..7cb321e9a 100644 --- a/crates/primitives-traits/src/node.rs +++ b/crates/primitives-traits/src/node.rs @@ -1,6 +1,8 @@ use core::fmt; -use crate::{BlockBody, FullBlock, FullReceipt, FullSignedTx, FullTxType, MaybeSerde}; +use crate::{ + FullBlock, FullBlockBody, FullBlockHeader, FullReceipt, FullSignedTx, FullTxType, MaybeSerde, +}; /// Configures all the primitive types of the node. pub trait NodePrimitives: @@ -17,6 +19,28 @@ pub trait NodePrimitives: + Eq + MaybeSerde + 'static; + /// Block header primitive. + type BlockHeader: Send + + Sync + + Unpin + + Clone + + Default + + fmt::Debug + + PartialEq + + Eq + + MaybeSerde + + 'static; + /// Block body primitive. + type BlockBody: Send + + Sync + + Unpin + + Clone + + Default + + fmt::Debug + + PartialEq + + Eq + + MaybeSerde + + 'static; /// Signed version of the transaction type. type SignedTx: Send + Sync @@ -45,6 +69,8 @@ pub trait NodePrimitives: impl NodePrimitives for () { type Block = (); + type BlockHeader = (); + type BlockBody = (); type SignedTx = (); type TxType = (); type Receipt = (); @@ -55,7 +81,11 @@ pub trait FullNodePrimitives: Send + Sync + Unpin + Clone + Default + fmt::Debug + PartialEq + Eq + 'static { /// Block primitive. - type Block: FullBlock>; + type Block: FullBlock
; + /// Block header primitive. + type BlockHeader: FullBlockHeader + 'static; + /// Block body primitive. + type BlockBody: FullBlockBody + 'static; /// Signed version of the transaction type. type SignedTx: FullSignedTx; /// Transaction envelope type ID. @@ -66,9 +96,11 @@ pub trait FullNodePrimitives: impl NodePrimitives for T where - T: FullNodePrimitives, + T: FullNodePrimitives, { type Block = T::Block; + type BlockHeader = T::BlockHeader; + type BlockBody = T::BlockBody; type SignedTx = T::SignedTx; type TxType = T::TxType; type Receipt = T::Receipt; diff --git a/crates/primitives/src/lib.rs b/crates/primitives/src/lib.rs index 027bf97cf..c46c437dd 100644 --- a/crates/primitives/src/lib.rs +++ b/crates/primitives/src/lib.rs @@ -79,17 +79,10 @@ pub mod serde_bincode_compat { #[derive(Debug, Clone, Default, PartialEq, Eq, serde::Serialize, serde::Deserialize)] pub struct EthPrimitives; -#[cfg(feature = "reth-codec")] impl reth_primitives_traits::FullNodePrimitives for EthPrimitives { type Block = crate::Block; - type SignedTx = crate::TransactionSigned; - type TxType = crate::TxType; - type Receipt = crate::Receipt; -} - -#[cfg(not(feature = "reth-codec"))] -impl NodePrimitives for EthPrimitives { - type Block = crate::Block; + type BlockHeader = alloy_consensus::Header; + type BlockBody = crate::BlockBody; type SignedTx = crate::TransactionSigned; type TxType = crate::TxType; type Receipt = crate::Receipt;