mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
refactor: move cli utils to new reth-cli-utils crate (#790)
* Move bin/src/util to reth-cli-utils * Add reth-cli-utils to workspace members * Fix imports in bin/src * Create reth-cli-utils crate * Add utils import
This commit is contained in:
17
Cargo.lock
generated
17
Cargo.lock
generated
@ -3541,6 +3541,7 @@ dependencies = [
|
||||
"metrics",
|
||||
"metrics-exporter-prometheus",
|
||||
"metrics-util",
|
||||
"reth-cli-utils",
|
||||
"reth-consensus",
|
||||
"reth-db",
|
||||
"reth-downloaders",
|
||||
@ -3565,6 +3566,22 @@ dependencies = [
|
||||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reth-cli-utils"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"eyre",
|
||||
"reth-consensus",
|
||||
"reth-db",
|
||||
"reth-primitives",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"shellexpand",
|
||||
"tracing",
|
||||
"tracing-subscriber",
|
||||
"walkdir",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "reth-codecs"
|
||||
version = "0.1.0"
|
||||
|
||||
@ -31,5 +31,6 @@ members = [
|
||||
"crates/tasks",
|
||||
"crates/transaction-pool",
|
||||
"crates/metrics/metrics-derive",
|
||||
"crates/cli/utils",
|
||||
]
|
||||
default-members = ["bin/reth"]
|
||||
default-members = ["bin/reth"]
|
||||
|
||||
@ -21,6 +21,7 @@ reth-executor = { path = "../../crates/executor" }
|
||||
reth-rlp = { path = "../../crates/common/rlp" }
|
||||
reth-network = {path = "../../crates/net/network", features = ["serde"] }
|
||||
reth-downloaders = {path = "../../crates/net/downloaders" }
|
||||
reth-cli-utils = { path = "../../crates/cli/utils" }
|
||||
|
||||
# tracing
|
||||
tracing = "0.1"
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
//! CLI definition and entrypoint to executable
|
||||
|
||||
use crate::{
|
||||
db, node, p2p, stage, test_eth_chain,
|
||||
util::reth_tracing::{self, TracingMode},
|
||||
};
|
||||
use crate::{db, node, p2p, stage, test_eth_chain};
|
||||
|
||||
use clap::{ArgAction, Parser, Subcommand};
|
||||
use reth_cli_utils::reth_tracing::{self, TracingMode};
|
||||
use tracing_subscriber::util::SubscriberInitExt;
|
||||
|
||||
/// main function that parses cli and runs command
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
//! reth data directories.
|
||||
use crate::util::parse_path;
|
||||
use reth_cli_utils::parse_path;
|
||||
use std::{
|
||||
env::VarError,
|
||||
fmt::{Debug, Display, Formatter},
|
||||
|
||||
@ -15,9 +15,9 @@ pub mod p2p;
|
||||
pub mod prometheus_exporter;
|
||||
pub mod stage;
|
||||
pub mod test_eth_chain;
|
||||
pub mod util;
|
||||
|
||||
use clap::Parser;
|
||||
pub use reth_cli_utils as utils;
|
||||
use reth_primitives::NodeRecord;
|
||||
|
||||
#[derive(Debug, Parser)]
|
||||
|
||||
@ -4,16 +4,15 @@
|
||||
use crate::{
|
||||
config::Config,
|
||||
dirs::{ConfigPath, DbPath},
|
||||
prometheus_exporter,
|
||||
util::{
|
||||
chainspec::{chain_spec_value_parser, ChainSpecification},
|
||||
init::{init_db, init_genesis},
|
||||
parse_socket_address,
|
||||
},
|
||||
NetworkOpts,
|
||||
prometheus_exporter, NetworkOpts,
|
||||
};
|
||||
use clap::{crate_version, Parser};
|
||||
use fdlimit::raise_fd_limit;
|
||||
use reth_cli_utils::{
|
||||
chainspec::{chain_spec_value_parser, ChainSpecification},
|
||||
init::{init_db, init_genesis},
|
||||
parse_socket_address,
|
||||
};
|
||||
use reth_consensus::BeaconConsensus;
|
||||
use reth_downloaders::{bodies, headers};
|
||||
use reth_executor::Config as ExecutorConfig;
|
||||
|
||||
@ -1,6 +1,10 @@
|
||||
//! P2P Debugging tool
|
||||
use backon::{ConstantBackoff, Retryable};
|
||||
use clap::{Parser, Subcommand};
|
||||
use reth_cli_utils::{
|
||||
chainspec::{chain_spec_value_parser, ChainSpecification},
|
||||
hash_or_num_value_parser,
|
||||
};
|
||||
use reth_db::mdbx::{Env, EnvKind, WriteMap};
|
||||
use reth_interfaces::p2p::{
|
||||
bodies::client::BodiesClient,
|
||||
@ -10,14 +14,7 @@ use reth_network::FetchClient;
|
||||
use reth_primitives::{BlockHashOrNumber, Header, NodeRecord, SealedHeader};
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::{
|
||||
config::Config,
|
||||
dirs::ConfigPath,
|
||||
util::{
|
||||
chainspec::{chain_spec_value_parser, ChainSpecification},
|
||||
hash_or_num_value_parser,
|
||||
},
|
||||
};
|
||||
use crate::{config::Config, dirs::ConfigPath};
|
||||
|
||||
/// `reth p2p` command
|
||||
#[derive(Debug, Parser)]
|
||||
|
||||
@ -4,12 +4,11 @@
|
||||
use crate::{
|
||||
config::Config,
|
||||
dirs::{ConfigPath, DbPath},
|
||||
prometheus_exporter,
|
||||
util::{
|
||||
chainspec::{chain_spec_value_parser, ChainSpecification},
|
||||
init::{init_db, init_genesis},
|
||||
},
|
||||
NetworkOpts,
|
||||
prometheus_exporter, NetworkOpts,
|
||||
};
|
||||
use reth_cli_utils::{
|
||||
chainspec::{chain_spec_value_parser, ChainSpecification},
|
||||
init::{init_db, init_genesis},
|
||||
};
|
||||
use reth_consensus::BeaconConsensus;
|
||||
use reth_downloaders::bodies::concurrent::ConcurrentDownloader;
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
//! Command for running Ethereum chain tests.
|
||||
|
||||
use crate::util;
|
||||
use clap::Parser;
|
||||
use eyre::eyre;
|
||||
use std::path::PathBuf;
|
||||
@ -24,7 +23,7 @@ impl Command {
|
||||
let futs: Vec<_> = self
|
||||
.path
|
||||
.iter()
|
||||
.flat_map(|item| util::find_all_files_with_postfix(item, ".json"))
|
||||
.flat_map(|item| reth_cli_utils::find_all_files_with_postfix(item, ".json"))
|
||||
.map(|file| async { (runner::run_test(file.clone()).await, file) })
|
||||
.collect();
|
||||
|
||||
|
||||
24
crates/cli/utils/Cargo.toml
Normal file
24
crates/cli/utils/Cargo.toml
Normal file
@ -0,0 +1,24 @@
|
||||
[package]
|
||||
name = "reth-cli-utils"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
license = "MIT"
|
||||
repository = "https://github.com/paradigmxyz/reth"
|
||||
readme = "README.md"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
reth-primitives = { path = "../../primitives" }
|
||||
reth-consensus = { path = "../../consensus", features = ["serde"] }
|
||||
reth-db = {path = "../../storage/db", features = ["mdbx", "test-utils"] }
|
||||
|
||||
|
||||
serde = "1.0"
|
||||
serde_json = "1.0"
|
||||
eyre = "0.6.8"
|
||||
shellexpand = "2.1"
|
||||
walkdir = "2.3"
|
||||
|
||||
tracing = "0.1"
|
||||
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
|
||||
@ -72,9 +72,15 @@ pub struct GenesisAccount {
|
||||
/// to a custom one.
|
||||
pub fn chain_spec_value_parser(s: &str) -> Result<ChainSpecification, eyre::Error> {
|
||||
Ok(match s {
|
||||
"mainnet" => serde_json::from_str(include_str!("../../res/chainspec/mainnet.json"))?,
|
||||
"goerli" => serde_json::from_str(include_str!("../../res/chainspec/goerli.json"))?,
|
||||
"sepolia" => serde_json::from_str(include_str!("../../res/chainspec/mainnet.json"))?,
|
||||
"mainnet" => {
|
||||
serde_json::from_str(include_str!("../../../../bin/reth/res/chainspec/mainnet.json"))?
|
||||
}
|
||||
"goerli" => {
|
||||
serde_json::from_str(include_str!("../../../../bin/reth/res/chainspec/goerli.json"))?
|
||||
}
|
||||
"sepolia" => {
|
||||
serde_json::from_str(include_str!("../../../../bin/reth/res/chainspec/sepolia.json"))?
|
||||
}
|
||||
_ => {
|
||||
let raw = std::fs::read_to_string(PathBuf::from(shellexpand::full(s)?.into_owned()))?;
|
||||
serde_json::from_str(&raw)?
|
||||
@ -1,4 +1,4 @@
|
||||
use crate::util::chainspec::Genesis;
|
||||
use crate::chainspec::Genesis;
|
||||
use reth_db::{
|
||||
cursor::DbCursorRO,
|
||||
database::Database,
|
||||
@ -1,3 +1,10 @@
|
||||
#![warn(missing_docs, unreachable_pub)]
|
||||
#![deny(unused_must_use, rust_2018_idioms)]
|
||||
#![doc(test(
|
||||
no_crate_inject,
|
||||
attr(deny(warnings, rust_2018_idioms), allow(dead_code, unused_variables))
|
||||
))]
|
||||
|
||||
//! Utility functions.
|
||||
use reth_primitives::{BlockHashOrNumber, H256};
|
||||
use std::{
|
||||
@ -15,7 +22,7 @@ pub mod chainspec;
|
||||
pub mod init;
|
||||
|
||||
/// Finds all files in a directory with a given postfix.
|
||||
pub(crate) fn find_all_files_with_postfix(path: &Path, postfix: &str) -> Vec<PathBuf> {
|
||||
pub fn find_all_files_with_postfix(path: &Path, postfix: &str) -> Vec<PathBuf> {
|
||||
WalkDir::new(path)
|
||||
.into_iter()
|
||||
.filter_map(|e| e.ok())
|
||||
@ -26,12 +33,12 @@ pub(crate) fn find_all_files_with_postfix(path: &Path, postfix: &str) -> Vec<Pat
|
||||
|
||||
/// Parses a user-specified path with support for environment variables and common shorthands (e.g.
|
||||
/// ~ for the user's home directory).
|
||||
pub(crate) fn parse_path(value: &str) -> Result<PathBuf, shellexpand::LookupError<VarError>> {
|
||||
pub fn parse_path(value: &str) -> Result<PathBuf, shellexpand::LookupError<VarError>> {
|
||||
shellexpand::full(value).map(|path| PathBuf::from(path.into_owned()))
|
||||
}
|
||||
|
||||
/// Parse [BlockHashOrNumber]
|
||||
pub(crate) fn hash_or_num_value_parser(value: &str) -> Result<BlockHashOrNumber, eyre::Error> {
|
||||
pub fn hash_or_num_value_parser(value: &str) -> Result<BlockHashOrNumber, eyre::Error> {
|
||||
match H256::from_str(value) {
|
||||
Ok(hash) => Ok(BlockHashOrNumber::Hash(hash)),
|
||||
Err(_) => Ok(BlockHashOrNumber::Number(value.parse()?)),
|
||||
@ -48,7 +55,7 @@ pub(crate) fn hash_or_num_value_parser(value: &str) -> Result<BlockHashOrNumber,
|
||||
/// - Otherwise it is assumed to be a hostname
|
||||
///
|
||||
/// An error is returned if the value is empty.
|
||||
pub(crate) fn parse_socket_address(value: &str) -> Result<SocketAddr, eyre::Error> {
|
||||
pub fn parse_socket_address(value: &str) -> Result<SocketAddr, eyre::Error> {
|
||||
if value.is_empty() {
|
||||
eyre::bail!("Cannot parse socket address from an empty string");
|
||||
}
|
||||
Reference in New Issue
Block a user