mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
fix: only use tags if they have been set (#10150)
This commit is contained in:
@ -131,7 +131,9 @@ where
|
|||||||
let last_canonical_hashes =
|
let last_canonical_hashes =
|
||||||
externals.fetch_latest_canonical_hashes(config.num_of_canonical_hashes() as usize)?;
|
externals.fetch_latest_canonical_hashes(config.num_of_canonical_hashes() as usize)?;
|
||||||
|
|
||||||
let last_finalized_block_number = externals.fetch_latest_finalized_block_number()?;
|
// If we haven't written the finalized block, assume it's zero
|
||||||
|
let last_finalized_block_number =
|
||||||
|
externals.fetch_latest_finalized_block_number()?.unwrap_or_default();
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
externals,
|
externals,
|
||||||
|
|||||||
@ -85,7 +85,9 @@ impl<DB: Database, E> TreeExternals<DB, E> {
|
|||||||
Ok(hashes)
|
Ok(hashes)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn fetch_latest_finalized_block_number(&self) -> ProviderResult<BlockNumber> {
|
pub(crate) fn fetch_latest_finalized_block_number(
|
||||||
|
&self,
|
||||||
|
) -> ProviderResult<Option<BlockNumber>> {
|
||||||
self.provider_factory.provider()?.last_finalized_block_number()
|
self.provider_factory.provider()?.last_finalized_block_number()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -20,8 +20,8 @@ impl ChainInfoTracker {
|
|||||||
/// Create a new chain info container for the given canonical head and finalized header if it
|
/// Create a new chain info container for the given canonical head and finalized header if it
|
||||||
/// exists.
|
/// exists.
|
||||||
pub fn new(head: SealedHeader, finalized: Option<SealedHeader>) -> Self {
|
pub fn new(head: SealedHeader, finalized: Option<SealedHeader>) -> Self {
|
||||||
let (finalized_block, _) = watch::channel(finalized.clone());
|
let (finalized_block, _) = watch::channel(finalized);
|
||||||
let (safe_block, _) = watch::channel(finalized);
|
let (safe_block, _) = watch::channel(None);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
inner: Arc::new(ChainInfoInner {
|
inner: Arc::new(ChainInfoInner {
|
||||||
@ -88,14 +88,12 @@ impl ChainInfoTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the safe header of the chain.
|
/// Returns the safe header of the chain.
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn get_safe_num_hash(&self) -> Option<BlockNumHash> {
|
pub fn get_safe_num_hash(&self) -> Option<BlockNumHash> {
|
||||||
let h = self.inner.safe_block.borrow();
|
let h = self.inner.safe_block.borrow();
|
||||||
h.as_ref().map(|h| h.num_hash())
|
h.as_ref().map(|h| h.num_hash())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the finalized header of the chain.
|
/// Returns the finalized header of the chain.
|
||||||
#[allow(dead_code)]
|
|
||||||
pub fn get_finalized_num_hash(&self) -> Option<BlockNumHash> {
|
pub fn get_finalized_num_hash(&self) -> Option<BlockNumHash> {
|
||||||
let h = self.inner.finalized_block.borrow();
|
let h = self.inner.finalized_block.borrow();
|
||||||
h.as_ref().map(|h| h.num_hash())
|
h.as_ref().map(|h| h.num_hash())
|
||||||
|
|||||||
@ -96,7 +96,9 @@ impl Command {
|
|||||||
let last_saved_finalized_block_number = provider.last_finalized_block_number()?;
|
let last_saved_finalized_block_number = provider.last_finalized_block_number()?;
|
||||||
let range_min =
|
let range_min =
|
||||||
range.clone().min().ok_or(eyre::eyre!("Could not fetch lower range end"))?;
|
range.clone().min().ok_or(eyre::eyre!("Could not fetch lower range end"))?;
|
||||||
if range_min < last_saved_finalized_block_number {
|
if last_saved_finalized_block_number.is_none() ||
|
||||||
|
Some(range_min) < last_saved_finalized_block_number
|
||||||
|
{
|
||||||
provider.save_finalized_block_number(BlockNumber::from(range_min))?;
|
provider.save_finalized_block_number(BlockNumber::from(range_min))?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -336,7 +336,12 @@ where
|
|||||||
// update finalized block if needed
|
// update finalized block if needed
|
||||||
let last_saved_finalized_block_number =
|
let last_saved_finalized_block_number =
|
||||||
provider_rw.last_finalized_block_number()?;
|
provider_rw.last_finalized_block_number()?;
|
||||||
if checkpoint.block_number < last_saved_finalized_block_number {
|
|
||||||
|
// If None, that means the finalized block is not written so we should
|
||||||
|
// always save in that case
|
||||||
|
if last_saved_finalized_block_number.is_none() ||
|
||||||
|
Some(checkpoint.block_number) < last_saved_finalized_block_number
|
||||||
|
{
|
||||||
provider_rw.save_finalized_block_number(BlockNumber::from(
|
provider_rw.save_finalized_block_number(BlockNumber::from(
|
||||||
checkpoint.block_number,
|
checkpoint.block_number,
|
||||||
))?;
|
))?;
|
||||||
|
|||||||
@ -83,8 +83,11 @@ where
|
|||||||
latest: SealedHeader,
|
latest: SealedHeader,
|
||||||
) -> ProviderResult<Self> {
|
) -> ProviderResult<Self> {
|
||||||
let provider = database.provider()?;
|
let provider = database.provider()?;
|
||||||
let finalized_block_number = provider.last_finalized_block_number()?;
|
let finalized_header = provider
|
||||||
let finalized_header = provider.sealed_header(finalized_block_number)?;
|
.last_finalized_block_number()?
|
||||||
|
.map(|num| provider.sealed_header(num))
|
||||||
|
.transpose()?
|
||||||
|
.flatten();
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
database,
|
database,
|
||||||
canonical_in_memory_state: CanonicalInMemoryState::with_head(latest, finalized_header),
|
canonical_in_memory_state: CanonicalInMemoryState::with_head(latest, finalized_header),
|
||||||
|
|||||||
@ -3663,7 +3663,7 @@ impl<TX: DbTx> StatsReader for DatabaseProvider<TX> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<TX: DbTx> FinalizedBlockReader for DatabaseProvider<TX> {
|
impl<TX: DbTx> FinalizedBlockReader for DatabaseProvider<TX> {
|
||||||
fn last_finalized_block_number(&self) -> ProviderResult<BlockNumber> {
|
fn last_finalized_block_number(&self) -> ProviderResult<Option<BlockNumber>> {
|
||||||
let mut finalized_blocks = self
|
let mut finalized_blocks = self
|
||||||
.tx
|
.tx
|
||||||
.cursor_read::<tables::ChainState>()?
|
.cursor_read::<tables::ChainState>()?
|
||||||
@ -3671,10 +3671,8 @@ impl<TX: DbTx> FinalizedBlockReader for DatabaseProvider<TX> {
|
|||||||
.take(1)
|
.take(1)
|
||||||
.collect::<Result<BTreeMap<tables::ChainStateKey, BlockNumber>, _>>()?;
|
.collect::<Result<BTreeMap<tables::ChainStateKey, BlockNumber>, _>>()?;
|
||||||
|
|
||||||
let last_finalized_block_number = finalized_blocks
|
let last_finalized_block_number = finalized_blocks.pop_first().map(|pair| pair.1);
|
||||||
.pop_first()
|
Ok(last_finalized_block_number)
|
||||||
.unwrap_or((tables::ChainStateKey::LastFinalizedBlock, 0_u64));
|
|
||||||
Ok(last_finalized_block_number.1)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -121,8 +121,11 @@ where
|
|||||||
.header_by_number(best.best_number)?
|
.header_by_number(best.best_number)?
|
||||||
.ok_or(ProviderError::HeaderNotFound(best.best_number.into()))?;
|
.ok_or(ProviderError::HeaderNotFound(best.best_number.into()))?;
|
||||||
|
|
||||||
let finalized_block_number = provider.last_finalized_block_number()?;
|
let finalized_header = provider
|
||||||
let finalized_header = provider.sealed_header(finalized_block_number)?;
|
.last_finalized_block_number()?
|
||||||
|
.map(|num| provider.sealed_header(num))
|
||||||
|
.transpose()?
|
||||||
|
.flatten();
|
||||||
|
|
||||||
Ok(Self::with_blocks(database, tree, latest_header.seal(best.best_hash), finalized_header))
|
Ok(Self::with_blocks(database, tree, latest_header.seal(best.best_hash), finalized_header))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,9 @@ use reth_primitives::BlockNumber;
|
|||||||
/// Functionality to read the last known finalized block from the database.
|
/// Functionality to read the last known finalized block from the database.
|
||||||
pub trait FinalizedBlockReader: Send + Sync {
|
pub trait FinalizedBlockReader: Send + Sync {
|
||||||
/// Returns the last finalized block number.
|
/// Returns the last finalized block number.
|
||||||
fn last_finalized_block_number(&self) -> ProviderResult<BlockNumber>;
|
///
|
||||||
|
/// If no finalized block has been written yet, this returns `None`.
|
||||||
|
fn last_finalized_block_number(&self) -> ProviderResult<Option<BlockNumber>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Functionality to write the last known finalized block to the database.
|
/// Functionality to write the last known finalized block to the database.
|
||||||
|
|||||||
Reference in New Issue
Block a user