mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat(sync): set max block if debug.tip provided (#1522)
This commit is contained in:
@ -2,17 +2,14 @@
|
||||
use crate::{
|
||||
args::DiscoveryArgs,
|
||||
dirs::{ConfigPath, PlatformPath},
|
||||
utils::get_single_header,
|
||||
};
|
||||
use backon::{ConstantBuilder, Retryable};
|
||||
use clap::{Parser, Subcommand};
|
||||
use reth_db::mdbx::{Env, EnvKind, WriteMap};
|
||||
use reth_discv4::NatResolver;
|
||||
use reth_interfaces::p2p::{
|
||||
bodies::client::BodiesClient,
|
||||
headers::client::{HeadersClient, HeadersRequest},
|
||||
};
|
||||
use reth_network::FetchClient;
|
||||
use reth_primitives::{BlockHashOrNumber, ChainSpec, NodeRecord, SealedHeader};
|
||||
use reth_interfaces::p2p::bodies::client::BodiesClient;
|
||||
use reth_primitives::{BlockHashOrNumber, ChainSpec, NodeRecord};
|
||||
use reth_provider::ShareableDatabase;
|
||||
use reth_staged_sync::{
|
||||
utils::{chainspec::chain_spec_value_parser, hash_or_num_value_parser},
|
||||
@ -117,7 +114,7 @@ impl Command {
|
||||
|
||||
match self.command {
|
||||
Subcommands::Header { id } => {
|
||||
let header = (move || self.get_single_header(fetch_client.clone(), id))
|
||||
let header = (move || get_single_header(fetch_client.clone(), id))
|
||||
.retry(&backoff)
|
||||
.notify(|err, _| println!("Error requesting header: {err}. Retrying..."))
|
||||
.await?;
|
||||
@ -130,10 +127,7 @@ impl Command {
|
||||
println!("Block number provided. Downloading header first...");
|
||||
let client = fetch_client.clone();
|
||||
let header = (move || {
|
||||
self.get_single_header(
|
||||
client.clone(),
|
||||
BlockHashOrNumber::Number(number),
|
||||
)
|
||||
get_single_header(client.clone(), BlockHashOrNumber::Number(number))
|
||||
})
|
||||
.retry(&backoff)
|
||||
.notify(|err, _| println!("Error requesting header: {err}. Retrying..."))
|
||||
@ -162,43 +156,4 @@ impl Command {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Get a single header from network
|
||||
pub async fn get_single_header(
|
||||
&self,
|
||||
client: FetchClient,
|
||||
id: BlockHashOrNumber,
|
||||
) -> eyre::Result<SealedHeader> {
|
||||
let request = HeadersRequest {
|
||||
direction: reth_primitives::HeadersDirection::Rising,
|
||||
limit: 1,
|
||||
start: id,
|
||||
};
|
||||
|
||||
let (_, response) = client.get_headers(request).await?.split();
|
||||
|
||||
if response.len() != 1 {
|
||||
eyre::bail!(
|
||||
"Invalid number of headers received. Expected: 1. Received: {}",
|
||||
response.len()
|
||||
)
|
||||
}
|
||||
|
||||
let header = response.into_iter().next().unwrap().seal_slow();
|
||||
|
||||
let valid = match id {
|
||||
BlockHashOrNumber::Hash(hash) => header.hash() == hash,
|
||||
BlockHashOrNumber::Number(number) => header.number == number,
|
||||
};
|
||||
|
||||
if !valid {
|
||||
eyre::bail!(
|
||||
"Received invalid header. Received: {:?}. Expected: {:?}",
|
||||
header.num_hash(),
|
||||
id
|
||||
);
|
||||
}
|
||||
|
||||
Ok(header)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user