Skip to main content

reth_provider/traits/
full.rs

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