Skip to main content

reth_provider/traits/
full.rs

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