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    HeaderProvider, StageCheckpointReader, StateProviderFactory, StaticFileProviderFactory,
6    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<Primitives = N::Primitives>
18    + BlockReaderIdExt<
19        Transaction = TxTy<N>,
20        Block = BlockTy<N>,
21        Receipt = ReceiptTy<N>,
22        Header = HeaderTy<N>,
23    > + AccountReader
24    + StateProviderFactory
25    + ChainSpecProvider<ChainSpec = N::ChainSpec>
26    + ChangeSetReader
27    + CanonStateSubscriptions
28    + ForkChoiceSubscriptions<Header = HeaderTy<N>>
29    + StageCheckpointReader
30    + Clone
31    + Unpin
32    + 'static
33{
34}
35
36impl<T, N: NodeTypesWithDB> FullProvider<N> for T where
37    T: DatabaseProviderFactory<DB = N::DB>
38        + NodePrimitivesProvider<Primitives = N::Primitives>
39        + StaticFileProviderFactory<Primitives = N::Primitives>
40        + BlockReaderIdExt<
41            Transaction = TxTy<N>,
42            Block = BlockTy<N>,
43            Receipt = ReceiptTy<N>,
44            Header = HeaderTy<N>,
45        > + AccountReader
46        + StateProviderFactory
47        + ChainSpecProvider<ChainSpec = N::ChainSpec>
48        + ChangeSetReader
49        + CanonStateSubscriptions
50        + ForkChoiceSubscriptions<Header = HeaderTy<N>>
51        + StageCheckpointReader
52        + Clone
53        + Unpin
54        + 'static
55{
56}
57
58/// Helper trait to unify all provider traits required to support `eth` RPC server behaviour, for
59/// simplicity.
60pub trait FullRpcProvider:
61    StateProviderFactory
62    + ChainSpecProvider<ChainSpec: EthereumHardforks>
63    + BlockReaderIdExt
64    + HeaderProvider
65    + TransactionsProvider
66    + StageCheckpointReader
67    + Clone
68    + Unpin
69    + 'static
70{
71}
72
73impl<T> FullRpcProvider for T where
74    T: StateProviderFactory
75        + ChainSpecProvider<ChainSpec: EthereumHardforks>
76        + BlockReaderIdExt
77        + HeaderProvider
78        + TransactionsProvider
79        + StageCheckpointReader
80        + Clone
81        + Unpin
82        + 'static
83{
84}