feat(provider): stage checkpoint provider (#2907)

This commit is contained in:
Roman Krasiuk
2023-05-30 14:10:26 +03:00
committed by GitHub
parent 4384767187
commit fba2adf8c1
4 changed files with 23 additions and 4 deletions

View File

@@ -15,9 +15,9 @@ pub use traits::{
BlockProvider, BlockProviderIdExt, BlockSource, BlockchainTreePendingStateProvider,
CanonChainTracker, CanonStateNotification, CanonStateNotificationSender,
CanonStateNotifications, CanonStateSubscriptions, EvmEnvProvider, ExecutorFactory,
HeaderProvider, PostStateDataProvider, ReceiptProvider, ReceiptProviderIdExt, StateProvider,
StateProviderBox, StateProviderFactory, StateRootProvider, TransactionsProvider,
WithdrawalsProvider,
HeaderProvider, PostStateDataProvider, ReceiptProvider, ReceiptProviderIdExt,
StageCheckpointProvider, StateProvider, StateProviderBox, StateProviderFactory,
StateRootProvider, TransactionsProvider, WithdrawalsProvider,
};
/// Provider trait implementations.

View File

@@ -2,7 +2,8 @@ use crate::{
providers::state::{historical::HistoricalStateProvider, latest::LatestStateProvider},
traits::{BlockSource, ReceiptProvider},
BlockHashProvider, BlockNumProvider, BlockProvider, EvmEnvProvider, HeaderProvider,
ProviderError, StateProviderBox, TransactionsProvider, WithdrawalsProvider,
ProviderError, StageCheckpointProvider, StateProviderBox, TransactionsProvider,
WithdrawalsProvider,
};
use reth_db::{cursor::DbCursorRO, database::Database, tables, transaction::DbTx};
use reth_interfaces::Result;
@@ -455,6 +456,12 @@ impl<DB: Database> WithdrawalsProvider for ShareableDatabase<DB> {
}
}
impl<DB: Database> StageCheckpointProvider for ShareableDatabase<DB> {
fn get_stage_checkpoint(&self, id: StageId) -> Result<Option<StageCheckpoint>> {
Ok(get_stage_checkpoint(&self.db.tx()?, id)?)
}
}
impl<DB: Database> EvmEnvProvider for ShareableDatabase<DB> {
fn fill_env_at(
&self,

View File

@@ -44,3 +44,6 @@ pub use chain::{
CanonStateNotification, CanonStateNotificationSender, CanonStateNotifications,
CanonStateSubscriptions,
};
mod stage_checkpoint;
pub use stage_checkpoint::StageCheckpointProvider;

View File

@@ -0,0 +1,9 @@
use reth_interfaces::Result;
use reth_primitives::{stage::StageId, StageCheckpoint};
/// The trait for fetching stage checkpoint related data.
#[auto_impl::auto_impl(&, Arc)]
pub trait StageCheckpointProvider: Send + Sync {
/// Fetch the checkpoint for the given stage.
fn get_stage_checkpoint(&self, id: StageId) -> Result<Option<StageCheckpoint>>;
}