mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
fix(cli): set start header (#7725)
Co-authored-by: Roman Krasiuk <rokrassyuk@gmail.com>
This commit is contained in:
8
Cargo.lock
generated
8
Cargo.lock
generated
@ -8934,18 +8934,18 @@ checksum = "a38c90d48152c236a3ab59271da4f4ae63d678c5d7ad6b7714d7cb9760be5e4b"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.59"
|
version = "1.0.58"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f0126ad08bff79f29fc3ae6a55cc72352056dfff61e3ff8bb7129476d44b23aa"
|
checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"thiserror-impl",
|
"thiserror-impl",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror-impl"
|
name = "thiserror-impl"
|
||||||
version = "1.0.59"
|
version = "1.0.58"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d1cd413b5d558b4c5bf3680e324a6fa5014e7b7c067a51e69dbdf47eb7148b66"
|
checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|||||||
2
Makefile
2
Makefile
@ -316,7 +316,7 @@ lint:
|
|||||||
make fmt && \
|
make fmt && \
|
||||||
make lint-reth && \
|
make lint-reth && \
|
||||||
make lint-op-reth && \
|
make lint-op-reth && \
|
||||||
make lint-other-targets \
|
make lint-other-targets && \
|
||||||
make lint-codespell
|
make lint-codespell
|
||||||
|
|
||||||
fix-lint-reth:
|
fix-lint-reth:
|
||||||
|
|||||||
@ -29,7 +29,10 @@ use reth_node_core::init::init_genesis;
|
|||||||
use reth_node_ethereum::EthEvmConfig;
|
use reth_node_ethereum::EthEvmConfig;
|
||||||
use reth_node_events::node::NodeEvent;
|
use reth_node_events::node::NodeEvent;
|
||||||
use reth_primitives::{stage::StageId, ChainSpec, PruneModes, B256};
|
use reth_primitives::{stage::StageId, ChainSpec, PruneModes, B256};
|
||||||
use reth_provider::{HeaderSyncMode, ProviderFactory, StageCheckpointReader};
|
use reth_provider::{
|
||||||
|
BlockNumReader, HeaderProvider, HeaderSyncMode, ProviderError, ProviderFactory,
|
||||||
|
StageCheckpointReader,
|
||||||
|
};
|
||||||
use reth_stages::{
|
use reth_stages::{
|
||||||
prelude::*,
|
prelude::*,
|
||||||
stages::{ExecutionStage, ExecutionStageThresholds, SenderRecoveryStage},
|
stages::{ExecutionStage, ExecutionStageThresholds, SenderRecoveryStage},
|
||||||
@ -158,8 +161,7 @@ impl ImportCommand {
|
|||||||
"Importing chain file chunk"
|
"Importing chain file chunk"
|
||||||
);
|
);
|
||||||
|
|
||||||
// override the tip
|
let tip = file_client.tip().ok_or(eyre::eyre!("file client has no tip"))?;
|
||||||
let tip = file_client.tip().expect("file client has no tip");
|
|
||||||
info!(target: "reth::cli", "Chain file chunk read");
|
info!(target: "reth::cli", "Chain file chunk read");
|
||||||
|
|
||||||
let (mut pipeline, events) = self
|
let (mut pipeline, events) = self
|
||||||
@ -221,15 +223,25 @@ impl ImportCommand {
|
|||||||
eyre::bail!("unable to import non canonical blocks");
|
eyre::bail!("unable to import non canonical blocks");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Retrieve latest header found in the database.
|
||||||
|
let last_block_number = provider_factory.last_block_number()?;
|
||||||
|
let local_head = provider_factory
|
||||||
|
.sealed_header(last_block_number)?
|
||||||
|
.ok_or(ProviderError::HeaderNotFound(last_block_number.into()))?;
|
||||||
|
|
||||||
let mut header_downloader = ReverseHeadersDownloaderBuilder::new(config.stages.headers)
|
let mut header_downloader = ReverseHeadersDownloaderBuilder::new(config.stages.headers)
|
||||||
.build(file_client.clone(), consensus.clone())
|
.build(file_client.clone(), consensus.clone())
|
||||||
.into_task();
|
.into_task();
|
||||||
header_downloader.update_local_head(file_client.start_header().unwrap());
|
// TODO: The pipeline should correctly configure the downloader on its own.
|
||||||
|
// Find the possibility to remove unnecessary pre-configuration.
|
||||||
|
header_downloader.update_local_head(local_head);
|
||||||
header_downloader.update_sync_target(SyncTarget::Tip(file_client.tip().unwrap()));
|
header_downloader.update_sync_target(SyncTarget::Tip(file_client.tip().unwrap()));
|
||||||
|
|
||||||
let mut body_downloader = BodiesDownloaderBuilder::new(config.stages.bodies)
|
let mut body_downloader = BodiesDownloaderBuilder::new(config.stages.bodies)
|
||||||
.build(file_client.clone(), consensus.clone(), provider_factory.clone())
|
.build(file_client.clone(), consensus.clone(), provider_factory.clone())
|
||||||
.into_task();
|
.into_task();
|
||||||
|
// TODO: The pipeline should correctly configure the downloader on its own.
|
||||||
|
// Find the possibility to remove unnecessary pre-configuration.
|
||||||
body_downloader
|
body_downloader
|
||||||
.set_download_range(file_client.min_block().unwrap()..=file_client.max_block().unwrap())
|
.set_download_range(file_client.min_block().unwrap()..=file_client.max_block().unwrap())
|
||||||
.expect("failed to set download range");
|
.expect("failed to set download range");
|
||||||
|
|||||||
@ -179,12 +179,6 @@ impl FileClient {
|
|||||||
self.headers.get(&self.max_block()?).map(|h| h.clone().seal_slow())
|
self.headers.get(&self.max_block()?).map(|h| h.clone().seal_slow())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Clones and returns the lowest header of this client has or `None` if empty. Seals header
|
|
||||||
/// before returning.
|
|
||||||
pub fn start_header(&self) -> Option<SealedHeader> {
|
|
||||||
self.headers.get(&self.min_block()?).map(|h| h.clone().seal_slow())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns true if all blocks are canonical (no gaps)
|
/// Returns true if all blocks are canonical (no gaps)
|
||||||
pub fn has_canonical_blocks(&self) -> bool {
|
pub fn has_canonical_blocks(&self) -> bool {
|
||||||
if self.headers.is_empty() {
|
if self.headers.is_empty() {
|
||||||
|
|||||||
Reference in New Issue
Block a user