mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
refactor(prune): segment trait, receipts impl (#4887)
This commit is contained in:
@ -10,7 +10,7 @@ use reth_interfaces::{db::LogLevel, RethError, RethResult};
|
||||
use reth_primitives::{
|
||||
stage::{StageCheckpoint, StageId},
|
||||
Address, Block, BlockHash, BlockHashOrNumber, BlockNumber, BlockWithSenders, ChainInfo,
|
||||
ChainSpec, Header, PruneCheckpoint, PrunePart, Receipt, SealedBlock, SealedHeader,
|
||||
ChainSpec, Header, PruneCheckpoint, PruneSegment, Receipt, SealedBlock, SealedHeader,
|
||||
TransactionMeta, TransactionSigned, TransactionSignedNoHash, TxHash, TxNumber, Withdrawal,
|
||||
B256, U256,
|
||||
};
|
||||
@ -104,14 +104,14 @@ impl<DB: Database> ProviderFactory<DB> {
|
||||
block_number += 1;
|
||||
|
||||
let account_history_prune_checkpoint =
|
||||
provider.get_prune_checkpoint(PrunePart::AccountHistory)?;
|
||||
provider.get_prune_checkpoint(PruneSegment::AccountHistory)?;
|
||||
let storage_history_prune_checkpoint =
|
||||
provider.get_prune_checkpoint(PrunePart::StorageHistory)?;
|
||||
provider.get_prune_checkpoint(PruneSegment::StorageHistory)?;
|
||||
|
||||
let mut state_provider = HistoricalStateProvider::new(provider.into_tx(), block_number);
|
||||
|
||||
// If we pruned account or storage history, we can't return state on every historical block.
|
||||
// Instead, we should cap it at the latest prune checkpoint for corresponding prune part.
|
||||
// Instead, we should cap it at the latest prune checkpoint for corresponding prune segment.
|
||||
if let Some(prune_checkpoint_block_number) =
|
||||
account_history_prune_checkpoint.and_then(|checkpoint| checkpoint.block_number)
|
||||
{
|
||||
@ -404,8 +404,8 @@ where
|
||||
}
|
||||
|
||||
impl<DB: Database> PruneCheckpointReader for ProviderFactory<DB> {
|
||||
fn get_prune_checkpoint(&self, part: PrunePart) -> RethResult<Option<PruneCheckpoint>> {
|
||||
self.provider()?.get_prune_checkpoint(part)
|
||||
fn get_prune_checkpoint(&self, segment: PruneSegment) -> RethResult<Option<PruneCheckpoint>> {
|
||||
self.provider()?.get_prune_checkpoint(segment)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -31,8 +31,8 @@ use reth_primitives::{
|
||||
stage::{StageCheckpoint, StageId},
|
||||
trie::Nibbles,
|
||||
Account, Address, Block, BlockHash, BlockHashOrNumber, BlockNumber, BlockWithSenders,
|
||||
ChainInfo, ChainSpec, Hardfork, Head, Header, PruneCheckpoint, PruneModes, PrunePart, Receipt,
|
||||
SealedBlock, SealedBlockWithSenders, SealedHeader, StorageEntry, TransactionMeta,
|
||||
ChainInfo, ChainSpec, Hardfork, Head, Header, PruneCheckpoint, PruneModes, PruneSegment,
|
||||
Receipt, SealedBlock, SealedBlockWithSenders, SealedHeader, StorageEntry, TransactionMeta,
|
||||
TransactionSigned, TransactionSignedEcRecovered, TransactionSignedNoHash, TxHash, TxNumber,
|
||||
Withdrawal, B256, U256,
|
||||
};
|
||||
@ -2130,17 +2130,17 @@ impl<'this, TX: DbTxMut<'this> + DbTx<'this>> BlockWriter for DatabaseProvider<'
|
||||
}
|
||||
|
||||
impl<'this, TX: DbTx<'this>> PruneCheckpointReader for DatabaseProvider<'this, TX> {
|
||||
fn get_prune_checkpoint(&self, part: PrunePart) -> RethResult<Option<PruneCheckpoint>> {
|
||||
Ok(self.tx.get::<tables::PruneCheckpoints>(part)?)
|
||||
fn get_prune_checkpoint(&self, segment: PruneSegment) -> RethResult<Option<PruneCheckpoint>> {
|
||||
Ok(self.tx.get::<tables::PruneCheckpoints>(segment)?)
|
||||
}
|
||||
}
|
||||
|
||||
impl<'this, TX: DbTxMut<'this>> PruneCheckpointWriter for DatabaseProvider<'this, TX> {
|
||||
fn save_prune_checkpoint(
|
||||
&self,
|
||||
part: PrunePart,
|
||||
segment: PruneSegment,
|
||||
checkpoint: PruneCheckpoint,
|
||||
) -> RethResult<()> {
|
||||
Ok(self.tx.put::<tables::PruneCheckpoints>(part, checkpoint)?)
|
||||
Ok(self.tx.put::<tables::PruneCheckpoints>(segment, checkpoint)?)
|
||||
}
|
||||
}
|
||||
|
||||
@ -15,9 +15,9 @@ use reth_interfaces::{
|
||||
use reth_primitives::{
|
||||
stage::{StageCheckpoint, StageId},
|
||||
Account, Address, Block, BlockHash, BlockHashOrNumber, BlockId, BlockNumHash, BlockNumber,
|
||||
BlockNumberOrTag, BlockWithSenders, ChainInfo, ChainSpec, Header, PruneCheckpoint, PrunePart,
|
||||
Receipt, SealedBlock, SealedBlockWithSenders, SealedHeader, TransactionMeta, TransactionSigned,
|
||||
TransactionSignedNoHash, TxHash, TxNumber, Withdrawal, B256, U256,
|
||||
BlockNumberOrTag, BlockWithSenders, ChainInfo, ChainSpec, Header, PruneCheckpoint,
|
||||
PruneSegment, Receipt, SealedBlock, SealedBlockWithSenders, SealedHeader, TransactionMeta,
|
||||
TransactionSigned, TransactionSignedNoHash, TxHash, TxNumber, Withdrawal, B256, U256,
|
||||
};
|
||||
use revm::primitives::{BlockEnv, CfgEnv};
|
||||
use std::{
|
||||
@ -466,8 +466,8 @@ where
|
||||
DB: Database,
|
||||
Tree: Send + Sync,
|
||||
{
|
||||
fn get_prune_checkpoint(&self, part: PrunePart) -> RethResult<Option<PruneCheckpoint>> {
|
||||
self.database.provider()?.get_prune_checkpoint(part)
|
||||
fn get_prune_checkpoint(&self, segment: PruneSegment) -> RethResult<Option<PruneCheckpoint>> {
|
||||
self.database.provider()?.get_prune_checkpoint(segment)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -319,11 +319,11 @@ delegate_provider_impls!(HistoricalStateProvider<'a, TX> where [TX: DbTx<'a>]);
|
||||
#[derive(Clone, Copy, Debug, Default)]
|
||||
pub struct LowestAvailableBlocks {
|
||||
/// Lowest block number at which the account history is available. It may not be available if
|
||||
/// [reth_primitives::PrunePart::AccountHistory] was pruned.
|
||||
/// [reth_primitives::PruneSegment::AccountHistory] was pruned.
|
||||
/// [Option::None] means all history is available.
|
||||
pub account_history_block_number: Option<BlockNumber>,
|
||||
/// Lowest block number at which the storage history is available. It may not be available if
|
||||
/// [reth_primitives::PrunePart::StorageHistory] was pruned.
|
||||
/// [reth_primitives::PruneSegment::StorageHistory] was pruned.
|
||||
/// [Option::None] means all history is available.
|
||||
pub storage_history_block_number: Option<BlockNumber>,
|
||||
}
|
||||
|
||||
@ -11,9 +11,9 @@ use reth_interfaces::RethResult;
|
||||
use reth_primitives::{
|
||||
stage::{StageCheckpoint, StageId},
|
||||
Account, Address, Block, BlockHash, BlockHashOrNumber, BlockId, BlockNumber, Bytecode, Bytes,
|
||||
ChainInfo, ChainSpec, Header, PruneCheckpoint, PrunePart, Receipt, SealedBlock, SealedHeader,
|
||||
StorageKey, StorageValue, TransactionMeta, TransactionSigned, TransactionSignedNoHash, TxHash,
|
||||
TxNumber, B256, KECCAK_EMPTY, MAINNET, U256,
|
||||
ChainInfo, ChainSpec, Header, PruneCheckpoint, PruneSegment, Receipt, SealedBlock,
|
||||
SealedHeader, StorageKey, StorageValue, TransactionMeta, TransactionSigned,
|
||||
TransactionSignedNoHash, TxHash, TxNumber, B256, KECCAK_EMPTY, MAINNET, U256,
|
||||
};
|
||||
use revm::primitives::{BlockEnv, CfgEnv};
|
||||
use std::{
|
||||
@ -388,7 +388,7 @@ impl WithdrawalsProvider for NoopProvider {
|
||||
}
|
||||
|
||||
impl PruneCheckpointReader for NoopProvider {
|
||||
fn get_prune_checkpoint(&self, _part: PrunePart) -> RethResult<Option<PruneCheckpoint>> {
|
||||
fn get_prune_checkpoint(&self, _segment: PruneSegment) -> RethResult<Option<PruneCheckpoint>> {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,17 +1,20 @@
|
||||
use reth_interfaces::RethResult;
|
||||
use reth_primitives::{PruneCheckpoint, PrunePart};
|
||||
use reth_primitives::{PruneCheckpoint, PruneSegment};
|
||||
|
||||
/// The trait for fetching prune checkpoint related data.
|
||||
#[auto_impl::auto_impl(&, Arc)]
|
||||
pub trait PruneCheckpointReader: Send + Sync {
|
||||
/// Fetch the checkpoint for the given prune part.
|
||||
fn get_prune_checkpoint(&self, part: PrunePart) -> RethResult<Option<PruneCheckpoint>>;
|
||||
/// Fetch the checkpoint for the given prune segment.
|
||||
fn get_prune_checkpoint(&self, segment: PruneSegment) -> RethResult<Option<PruneCheckpoint>>;
|
||||
}
|
||||
|
||||
/// The trait for updating prune checkpoint related data.
|
||||
#[auto_impl::auto_impl(&, Arc)]
|
||||
pub trait PruneCheckpointWriter: Send + Sync {
|
||||
/// Save prune checkpoint.
|
||||
fn save_prune_checkpoint(&self, part: PrunePart, checkpoint: PruneCheckpoint)
|
||||
-> RethResult<()>;
|
||||
fn save_prune_checkpoint(
|
||||
&self,
|
||||
segment: PruneSegment,
|
||||
checkpoint: PruneCheckpoint,
|
||||
) -> RethResult<()>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user