Skip to content

Commit

Permalink
feat: Add dumpgenesis subcommand (#6797)
Browse files Browse the repository at this point in the history
  • Loading branch information
AbnerZheng committed Feb 27, 2024
1 parent 3f6d55b commit a47c62c
Show file tree
Hide file tree
Showing 7 changed files with 170 additions and 1 deletion.
6 changes: 5 additions & 1 deletion bin/reth/src/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ use crate::{
},
cli::ext::RethCliExt,
commands::{
config_cmd, db, debug_cmd, import, init_cmd, node, p2p, recover, stage, test_vectors,
config_cmd, db, debug_cmd, dump_genesis, import, init_cmd, node, p2p, recover, stage,
test_vectors,
},
core::cli::runner::CliRunner,
version::{LONG_VERSION, SHORT_VERSION},
Expand Down Expand Up @@ -81,6 +82,7 @@ impl<Ext: RethCliExt> Cli<Ext> {
Commands::Node(command) => runner.run_command_until_exit(|ctx| command.execute(ctx)),
Commands::Init(command) => runner.run_blocking_until_ctrl_c(command.execute()),
Commands::Import(command) => runner.run_blocking_until_ctrl_c(command.execute()),
Commands::DumpGenesis(command) => runner.run_blocking_until_ctrl_c(command.execute()),
Commands::Db(command) => runner.run_blocking_until_ctrl_c(command.execute()),
Commands::Stage(command) => runner.run_blocking_until_ctrl_c(command.execute()),
Commands::P2P(command) => runner.run_until_ctrl_c(command.execute()),
Expand Down Expand Up @@ -128,6 +130,8 @@ pub enum Commands<Ext: RethCliExt = ()> {
/// This syncs RLP encoded blocks from a file.
#[command(name = "import")]
Import(import::ImportCommand),
/// Dumps genesis block JSON configuration to stdout.
DumpGenesis(dump_genesis::DumpGenesisCommand),
/// Database debugging utilities
#[command(name = "db")]
Db(db::Command),
Expand Down
47 changes: 47 additions & 0 deletions bin/reth/src/commands/dump_genesis.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
//! Command that dumps genesis block JSON configuration to stdout
use crate::args::utils::{chain_help, genesis_value_parser, SUPPORTED_CHAINS};
use clap::Parser;
use reth_primitives::ChainSpec;
use std::sync::Arc;

/// Dumps genesis block JSON configuration to stdout
#[derive(Debug, Parser)]
pub struct DumpGenesisCommand {
/// The chain this node is running.
///
/// Possible values are either a built-in chain or the path to a chain specification file.
#[arg(
long,
value_name = "CHAIN_OR_PATH",
long_help = chain_help(),
default_value = SUPPORTED_CHAINS[0],
value_parser = genesis_value_parser
)]
chain: Arc<ChainSpec>,
}

impl DumpGenesisCommand {
/// Execute the `dump-genesis` command
pub async fn execute(self) -> eyre::Result<()> {
println!("{}", serde_json::to_string_pretty(self.chain.genesis())?);
Ok(())
}
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn parse_dump_genesis_command_chain_args() {
for chain in SUPPORTED_CHAINS {
let args: DumpGenesisCommand =
DumpGenesisCommand::parse_from(["reth", "--chain", chain]);
assert_eq!(
Ok(args.chain.chain),
chain.parse::<reth_primitives::Chain>(),
"failed to parse chain {chain}"
);
}
}
}
2 changes: 2 additions & 0 deletions bin/reth/src/commands/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
pub mod config_cmd;
pub mod db;
pub mod debug_cmd;
pub mod dump_genesis;
pub mod import;
pub mod init_cmd;

pub mod node;
pub mod p2p;
pub mod recover;
Expand Down
1 change: 1 addition & 0 deletions book/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
- [`reth node`](./cli/reth/node.md)
- [`reth init`](./cli/reth/init.md)
- [`reth import`](./cli/reth/import.md)
- [`reth dump-genesis`](./cli/reth/dump-genesis.md)
- [`reth db`](./cli/reth/db.md)
- [`reth db stats`](./cli/reth/db/stats.md)
- [`reth db list`](./cli/reth/db/list.md)
Expand Down
1 change: 1 addition & 0 deletions book/cli/SUMMARY.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
- [`reth node`](./reth/node.md)
- [`reth init`](./reth/init.md)
- [`reth import`](./reth/import.md)
- [`reth dump-genesis`](./reth/dump-genesis.md)
- [`reth db`](./reth/db.md)
- [`reth db stats`](./reth/db/stats.md)
- [`reth db list`](./reth/db/list.md)
Expand Down
3 changes: 3 additions & 0 deletions book/cli/reth.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@ Reth

```bash
$ reth --help
Reth

Usage: reth [OPTIONS] <COMMAND>

Commands:
node Start the node
init Initialize the database from a genesis file
import This syncs RLP encoded blocks from a file
dump-genesis Dumps genesis block JSON configuration to stdout
db Database debugging utilities
stage Manipulate individual stages
p2p P2P Debugging utilities
Expand Down
111 changes: 111 additions & 0 deletions book/cli/reth/dump-genesis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
# reth dump-genesis

This dumps genesis block JSON configuration to stdout

```bash
$ reth dump-genesis
Dumps genesis block JSON configuration to stdout

Usage: reth dump-genesis [OPTIONS]

Options:
--chain <CHAIN_OR_PATH>
The chain this node is running.
Possible values are either a built-in chain or the path to a chain specification file.

Built-in chains:
mainnet, sepolia, goerli, holesky, dev

[default: mainnet]

--instance <INSTANCE>
Add a new instance of a node.

Configures the ports of the node to avoid conflicts with the defaults. This is useful for running multiple nodes on the same machine.

Max number of instances is 200. It is chosen in a way so that it's not possible to have port numbers that conflict with each other.
Changes to the following port numbers: - DISCOVERY_PORT: default + `instance` - 1 - AUTH_PORT: default + `instance` * 100 - 100 - HTTP_RPC_PORT: default - `instance` + 1 - WS_RPC_PORT: default + `instance` * 2 - 2
[default: 1]
-h, --help
Print help (see a summary with '-h')
Logging:
--log.stdout.format <FORMAT>
The format to use for logs written to stdout
[default: terminal]
Possible values:
- json: Represents JSON formatting for logs. This format outputs log records as JSON objects, making it suitable for structured logging
- log-fmt: Represents logfmt (key=value) formatting for logs. This format is concise and human-readable, typically used in command-line applications
- terminal: Represents terminal-friendly formatting for logs
--log.stdout.filter <FILTER>
The filter to use for logs written to stdout
[default: ]
--log.file.format <FORMAT>
The format to use for logs written to the log file
[default: terminal]
Possible values:
- json: Represents JSON formatting for logs. This format outputs log records as JSON objects, making it suitable for structured logging
- log-fmt: Represents logfmt (key=value) formatting for logs. This format is concise and human-readable, typically used in command-line applications
- terminal: Represents terminal-friendly formatting for logs
--log.file.filter <FILTER>
The filter to use for logs written to the log file
[default: debug]
--log.file.directory <PATH>
The path to put log files in
[default: <CACHE_DIR>/logs]
--log.file.max-size <SIZE>
The maximum size (in MB) of one log file
[default: 200]
--log.file.max-files <COUNT>
The maximum amount of log files that will be stored. If set to 0, background file logging is disabled
[default: 5]
--log.journald
Write logs to journald
--log.journald.filter <FILTER>
The filter to use for logs written to journald
[default: error]
--color <COLOR>
Sets whether or not the formatter emits ANSI terminal escape codes for colors and other text formatting
[default: always]
Possible values:
- always: Colors on
- auto: Colors on
- never: Colors off
Display:
-v, --verbosity...
Set the minimum log level.
-v Errors
-vv Warnings
-vvv Info
-vvvv Debug
-vvvvv Traces (warning: very verbose!)
-q, --quiet
Silence all log output
```

0 comments on commit a47c62c

Please sign in to comment.