Changes to enable validation api extension (#4783)

Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
christn
2023-09-30 21:10:30 +08:00
committed by GitHub
parent 05198e990c
commit fd697d9d3f
10 changed files with 53 additions and 15 deletions

1
Cargo.lock generated
View File

@ -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",

View File

@ -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

View File

@ -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<RpcServerHandle, RpcError>
where
Provider: BlockReaderIdExt
+ AccountReader
+ HeaderProvider
+ StateProviderFactory
+ EvmEnvProvider

View File

@ -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<T: RethNodeCommandConfig> RethNodeCommandConfig for NoArgs<T> {
where
Conf: RethRpcConfig,
Provider: BlockReaderIdExt
+ AccountReader
+ StateProviderFactory
+ EvmEnvProvider
+ ChainSpecProvider

View File

@ -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))]

View File

@ -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, Pool, Network, Events>(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, Pool, Network, Events, EngineApi>(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<Provider, Pool, Network, Tasks, Events>(
) -> Result<RpcServerHandle, RpcError>
where
Provider: BlockReaderIdExt
+ AccountReader
+ StateProviderFactory
+ EvmEnvProvider
+ ChainSpecProvider
@ -318,6 +319,7 @@ impl<Provider, Pool, Network, Tasks, Events>
RpcModuleBuilder<Provider, Pool, Network, Tasks, Events>
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<Provider, Pool, Network, Tasks, Events>
RethModuleRegistry<Provider, Pool, Network, Tasks, Events>
where
Provider: BlockReaderIdExt
+ AccountReader
+ StateProviderFactory
+ EvmEnvProvider
+ ChainSpecProvider

View File

@ -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;

View File

@ -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;

View File

@ -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<Ok, Err> {
pub trait ToRpcResult<Ok, Err> {
/// Converts the error of the [Result] to an [RpcResult] via the `Err` [Display] impl.
fn to_rpc_result(self) -> RpcResult<Ok>
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);

View File

@ -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<DB, Tree> AccountReader for BlockchainProvider<DB, Tree>
where
DB: Database + Sync + Send,
Tree: Sync + Send,
{
/// Get basic account information.
fn basic_account(&self, address: Address) -> RethResult<Option<Account>> {
self.database.provider()?.basic_account(address)
}
}