diff --git a/Cargo.lock b/Cargo.lock index 8aa1c92c5..6f5e3adac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5454,6 +5454,7 @@ dependencies = [ "reth-rpc-builder", "reth-rpc-engine-api", "reth-rpc-types", + "reth-rpc-types-compat", "reth-snapshot", "reth-stages", "reth-tasks", diff --git a/bin/reth/Cargo.toml b/bin/reth/Cargo.toml index 6b01931ea..05f927959 100644 --- a/bin/reth/Cargo.toml +++ b/bin/reth/Cargo.toml @@ -36,6 +36,7 @@ reth-rpc-engine-api = { path = "../../crates/rpc/rpc-engine-api" } reth-rpc-builder = { path = "../../crates/rpc/rpc-builder" } reth-rpc = { path = "../../crates/rpc/rpc" } reth-rpc-types = { path = "../../crates/rpc/rpc-types" } +reth-rpc-types-compat = { path = "../../crates/rpc/rpc-types-compat" } reth-rpc-api = { path = "../../crates/rpc/rpc-api" } reth-network = { path = "../../crates/net/network", features = ["serde"] } reth-network-api.workspace = true diff --git a/bin/reth/src/args/rpc_server_args.rs b/bin/reth/src/args/rpc_server_args.rs index d606d6e2b..180fedacc 100644 --- a/bin/reth/src/args/rpc_server_args.rs +++ b/bin/reth/src/args/rpc_server_args.rs @@ -11,8 +11,8 @@ use clap::{ use futures::TryFutureExt; use reth_network_api::{NetworkInfo, Peers}; use reth_provider::{ - BlockReaderIdExt, CanonStateSubscriptions, ChainSpecProvider, ChangeSetReader, EvmEnvProvider, - HeaderProvider, StateProviderFactory, + AccountReader, BlockReaderIdExt, CanonStateSubscriptions, ChainSpecProvider, ChangeSetReader, + EvmEnvProvider, HeaderProvider, StateProviderFactory, }; use reth_rpc::{ eth::{ @@ -188,6 +188,7 @@ impl RpcServerArgs { ) -> eyre::Result<(RpcServerHandle, AuthServerHandle)> where Provider: BlockReaderIdExt + + AccountReader + HeaderProvider + StateProviderFactory + EvmEnvProvider @@ -254,6 +255,7 @@ impl RpcServerArgs { ) -> Result where Provider: BlockReaderIdExt + + AccountReader + HeaderProvider + StateProviderFactory + EvmEnvProvider diff --git a/bin/reth/src/cli/ext.rs b/bin/reth/src/cli/ext.rs index a2d6b8e8e..b636c8bc7 100644 --- a/bin/reth/src/cli/ext.rs +++ b/bin/reth/src/cli/ext.rs @@ -7,8 +7,8 @@ use reth_network_api::{NetworkInfo, Peers}; use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService}; use reth_primitives::ChainSpec; use reth_provider::{ - BlockReaderIdExt, CanonStateSubscriptions, ChainSpecProvider, ChangeSetReader, EvmEnvProvider, - StateProviderFactory, + AccountReader, BlockReaderIdExt, CanonStateSubscriptions, ChainSpecProvider, ChangeSetReader, + EvmEnvProvider, StateProviderFactory, }; use reth_rpc_builder::{RethModuleRegistry, TransportRpcModules}; use reth_tasks::TaskSpawner; @@ -49,6 +49,7 @@ pub trait RethNodeCommandConfig: fmt::Debug { where Conf: RethRpcConfig, Provider: BlockReaderIdExt + + AccountReader + StateProviderFactory + EvmEnvProvider + ChainSpecProvider @@ -173,6 +174,7 @@ impl RethNodeCommandConfig for NoArgs { where Conf: RethRpcConfig, Provider: BlockReaderIdExt + + AccountReader + StateProviderFactory + EvmEnvProvider + ChainSpecProvider diff --git a/bin/reth/src/lib.rs b/bin/reth/src/lib.rs index 623d5a0a9..8c8906d34 100644 --- a/bin/reth/src/lib.rs +++ b/bin/reth/src/lib.rs @@ -62,6 +62,11 @@ pub mod blockchain_tree { pub use reth_blockchain_tree::*; } +/// Re-exported from `reth_consensus_common`. +pub mod consensus_common { + pub use reth_consensus_common::*; +} + /// Re-exported from `reth_revm`. pub mod revm { pub use reth_revm::*; @@ -104,6 +109,16 @@ pub mod rpc { pub mod eth { pub use reth_rpc::eth::*; } + + /// Re-exported from `reth_rpc::rpc`. + pub mod result { + pub use reth_rpc::result::*; + } + + /// Re-exported from `reth_rpc::eth`. + pub mod compat { + pub use reth_rpc_types_compat::*; + } } #[cfg(all(feature = "jemalloc", unix))] diff --git a/crates/rpc/rpc-builder/src/lib.rs b/crates/rpc/rpc-builder/src/lib.rs index cfa17f494..7c671b0c6 100644 --- a/crates/rpc/rpc-builder/src/lib.rs +++ b/crates/rpc/rpc-builder/src/lib.rs @@ -18,13 +18,13 @@ //! //! ``` //! use reth_network_api::{NetworkInfo, Peers}; -//! use reth_provider::{BlockReaderIdExt, ChainSpecProvider, CanonStateSubscriptions, StateProviderFactory, EvmEnvProvider, ChangeSetReader}; +//! use reth_provider::{AccountReader, BlockReaderIdExt, ChainSpecProvider, CanonStateSubscriptions, StateProviderFactory, EvmEnvProvider, ChangeSetReader}; //! use reth_rpc_builder::{RethRpcModule, RpcModuleBuilder, RpcServerConfig, ServerBuilder, TransportRpcModuleConfig}; //! use reth_tasks::TokioTaskExecutor; //! use reth_transaction_pool::TransactionPool; //! pub async fn launch(provider: Provider, pool: Pool, network: Network, events: Events) //! where -//! Provider: BlockReaderIdExt + ChainSpecProvider + ChangeSetReader + StateProviderFactory + EvmEnvProvider + Clone + Unpin + 'static, +//! Provider: AccountReader + BlockReaderIdExt + ChainSpecProvider + ChangeSetReader + StateProviderFactory + EvmEnvProvider + Clone + Unpin + 'static, //! Pool: TransactionPool + Clone + 'static, //! Network: NetworkInfo + Peers + Clone + 'static, //! Events: CanonStateSubscriptions + Clone + 'static, @@ -51,7 +51,7 @@ //! ``` //! use tokio::try_join; //! use reth_network_api::{NetworkInfo, Peers}; -//! use reth_provider::{BlockReaderIdExt, ChainSpecProvider, CanonStateSubscriptions, StateProviderFactory, EvmEnvProvider, ChangeSetReader}; +//! use reth_provider::{AccountReader, BlockReaderIdExt, ChainSpecProvider, CanonStateSubscriptions, StateProviderFactory, EvmEnvProvider, ChangeSetReader}; //! use reth_rpc::JwtSecret; //! use reth_rpc_builder::{RethRpcModule, RpcModuleBuilder, RpcServerConfig, TransportRpcModuleConfig}; //! use reth_tasks::TokioTaskExecutor; @@ -60,7 +60,7 @@ //! use reth_rpc_builder::auth::AuthServerConfig; //! pub async fn launch(provider: Provider, pool: Pool, network: Network, events: Events, engine_api: EngineApi) //! where -//! Provider: BlockReaderIdExt + ChainSpecProvider + ChangeSetReader + StateProviderFactory + EvmEnvProvider + Clone + Unpin + 'static, +//! Provider: AccountReader + BlockReaderIdExt + ChainSpecProvider + ChangeSetReader + StateProviderFactory + EvmEnvProvider + Clone + Unpin + 'static, //! Pool: TransactionPool + Clone + 'static, //! Network: NetworkInfo + Peers + Clone + 'static, //! Events: CanonStateSubscriptions + Clone + 'static, @@ -109,8 +109,8 @@ use jsonrpsee::{ use reth_ipc::server::IpcServer; use reth_network_api::{NetworkInfo, Peers}; use reth_provider::{ - BlockReader, BlockReaderIdExt, CanonStateSubscriptions, ChainSpecProvider, ChangeSetReader, - EvmEnvProvider, StateProviderFactory, + AccountReader, BlockReader, BlockReaderIdExt, CanonStateSubscriptions, ChainSpecProvider, + ChangeSetReader, EvmEnvProvider, StateProviderFactory, }; use reth_rpc::{ eth::{ @@ -173,6 +173,7 @@ pub async fn launch( ) -> Result where Provider: BlockReaderIdExt + + AccountReader + StateProviderFactory + EvmEnvProvider + ChainSpecProvider @@ -318,6 +319,7 @@ impl RpcModuleBuilder where Provider: BlockReaderIdExt + + AccountReader + StateProviderFactory + EvmEnvProvider + ChainSpecProvider @@ -566,6 +568,7 @@ impl RpcModuleSelection { ) -> RpcModule<()> where Provider: BlockReaderIdExt + + AccountReader + StateProviderFactory + EvmEnvProvider + ChainSpecProvider @@ -807,6 +810,7 @@ impl RethModuleRegistry where Provider: BlockReaderIdExt + + AccountReader + StateProviderFactory + EvmEnvProvider + ChainSpecProvider diff --git a/crates/rpc/rpc-types/src/eth/mod.rs b/crates/rpc/rpc-types/src/eth/mod.rs index 81d19d07d..c966b7495 100644 --- a/crates/rpc/rpc-types/src/eth/mod.rs +++ b/crates/rpc/rpc-types/src/eth/mod.rs @@ -21,7 +21,7 @@ mod work; pub use account::*; pub use block::*; pub use call::{Bundle, CallInput, CallInputError, CallRequest, EthCallResponse, StateContext}; -pub use engine::{ExecutionPayload, PayloadError}; +pub use engine::{ExecutionPayload, ExecutionPayloadV1, ExecutionPayloadV2, PayloadError}; pub use fee::{FeeHistory, TxGasAndReward}; pub use filter::*; pub use index::Index; diff --git a/crates/rpc/rpc/src/lib.rs b/crates/rpc/rpc/src/lib.rs index 0695cd113..1c75b0f30 100644 --- a/crates/rpc/rpc/src/lib.rs +++ b/crates/rpc/rpc/src/lib.rs @@ -54,4 +54,4 @@ pub use tracing_call::{TracingCallGuard, TracingCallPool}; pub use txpool::TxPoolApi; pub use web3::Web3Api; -pub(crate) mod result; +pub mod result; diff --git a/crates/rpc/rpc/src/result.rs b/crates/rpc/rpc/src/result.rs index 80e889991..d18759011 100644 --- a/crates/rpc/rpc/src/result.rs +++ b/crates/rpc/rpc/src/result.rs @@ -4,10 +4,11 @@ use crate::eth::error::EthApiError; use jsonrpsee::core::RpcResult; use reth_interfaces::RethResult; use reth_primitives::Block; +use reth_rpc_types::engine::PayloadError; use std::fmt::Display; /// Helper trait to easily convert various `Result` types into [`RpcResult`] -pub(crate) trait ToRpcResult { +pub trait ToRpcResult { /// Converts the error of the [Result] to an [RpcResult] via the `Err` [Display] impl. fn to_rpc_result(self) -> RpcResult where @@ -101,6 +102,7 @@ macro_rules! impl_to_rpc_result { }; } +impl_to_rpc_result!(PayloadError); impl_to_rpc_result!(reth_interfaces::RethError); impl_to_rpc_result!(reth_network_api::NetworkError); diff --git a/crates/storage/provider/src/providers/mod.rs b/crates/storage/provider/src/providers/mod.rs index d0ededc90..5d0e5eebd 100644 --- a/crates/storage/provider/src/providers/mod.rs +++ b/crates/storage/provider/src/providers/mod.rs @@ -1,5 +1,5 @@ use crate::{ - BlockHashReader, BlockIdReader, BlockNumReader, BlockReader, BlockReaderIdExt, + AccountReader, BlockHashReader, BlockIdReader, BlockNumReader, BlockReader, BlockReaderIdExt, BlockchainTreePendingStateProvider, BundleStateDataProvider, CanonChainTracker, CanonStateNotifications, CanonStateSubscriptions, ChainSpecProvider, ChangeSetReader, EvmEnvProvider, HeaderProvider, ProviderError, PruneCheckpointReader, ReceiptProvider, @@ -14,7 +14,7 @@ use reth_interfaces::{ }; use reth_primitives::{ stage::{StageCheckpoint, StageId}, - Address, Block, BlockHash, BlockHashOrNumber, BlockId, BlockNumHash, BlockNumber, + Account, Address, Block, BlockHash, BlockHashOrNumber, BlockId, BlockNumHash, BlockNumber, BlockNumberOrTag, BlockWithSenders, ChainInfo, ChainSpec, Header, PruneCheckpoint, PrunePart, Receipt, SealedBlock, SealedBlockWithSenders, SealedHeader, TransactionMeta, TransactionSigned, TransactionSignedNoHash, TxHash, TxNumber, Withdrawal, B256, U256, @@ -810,3 +810,14 @@ where self.database.provider()?.account_block_changeset(block_number) } } + +impl AccountReader for BlockchainProvider +where + DB: Database + Sync + Send, + Tree: Sync + Send, +{ + /// Get basic account information. + fn basic_account(&self, address: Address) -> RethResult> { + self.database.provider()?.basic_account(address) + } +}