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