reth_provider/traits/
full.rs

1//! Helper provider traits to encapsulate all provider traits for simplicity.
2
3use crate::{
4    AccountReader, BlockReaderIdExt, ChainSpecProvider, ChangeSetReader, DatabaseProviderFactory,
5    EvmEnvProvider, HeaderProvider, StageCheckpointReader, StateProviderFactory,
6    StaticFileProviderFactory, TransactionsProvider,
7};
8use reth_chain_state::{CanonStateSubscriptions, ForkChoiceSubscriptions};
9use reth_chainspec::EthereumHardforks;
10use reth_node_types::{BlockTy, HeaderTy, NodeTypesWithDB, ReceiptTy, TxTy};
11use reth_storage_api::NodePrimitivesProvider;
12
13/// Helper trait to unify all provider traits for simplicity.
14pub trait FullProvider<N: NodeTypesWithDB>:
15    DatabaseProviderFactory<DB = N::DB>
16    + NodePrimitivesProvider<Primitives = N::Primitives>
17    + StaticFileProviderFactory
18    + BlockReaderIdExt<
19        Transaction = TxTy<N>,
20        Block = BlockTy<N>,
21        Receipt = ReceiptTy<N>,
22        Header = HeaderTy<N>,
23    > + AccountReader
24    + StateProviderFactory
25    + EvmEnvProvider
26    + ChainSpecProvider<ChainSpec = N::ChainSpec>
27    + ChangeSetReader
28    + CanonStateSubscriptions
29    + ForkChoiceSubscriptions<Header = HeaderTy<N>>
30    + StageCheckpointReader
31    + Clone
32    + Unpin
33    + 'static
34{
35}
36
37impl<T, N: NodeTypesWithDB> FullProvider<N> for T where
38    T: DatabaseProviderFactory<DB = N::DB>
39        + NodePrimitivesProvider<Primitives = N::Primitives>
40        + StaticFileProviderFactory
41        + BlockReaderIdExt<
42            Transaction = TxTy<N>,
43            Block = BlockTy<N>,
44            Receipt = ReceiptTy<N>,
45            Header = HeaderTy<N>,
46        > + AccountReader
47        + StateProviderFactory
48        + EvmEnvProvider
49        + ChainSpecProvider<ChainSpec = N::ChainSpec>
50        + ChangeSetReader
51        + CanonStateSubscriptions
52        + ForkChoiceSubscriptions<Header = HeaderTy<N>>
53        + StageCheckpointReader
54        + Clone
55        + Unpin
56        + 'static
57{
58}
59
60/// Helper trait to unify all provider traits required to support `eth` RPC server behaviour, for
61/// simplicity.
62pub trait FullRpcProvider:
63    StateProviderFactory
64    + EvmEnvProvider
65    + ChainSpecProvider<ChainSpec: EthereumHardforks>
66    + BlockReaderIdExt
67    + HeaderProvider
68    + TransactionsProvider
69    + StageCheckpointReader
70    + Clone
71    + Unpin
72    + 'static
73{
74}
75
76impl<T> FullRpcProvider for T where
77    T: StateProviderFactory
78        + EvmEnvProvider
79        + ChainSpecProvider<ChainSpec: EthereumHardforks>
80        + BlockReaderIdExt
81        + HeaderProvider
82        + TransactionsProvider
83        + StageCheckpointReader
84        + Clone
85        + Unpin
86        + 'static
87{
88}