Fix naming of validators in CLI (#1332)

## Issue Addressed

NA

## Proposed Changes

- Adds a `lighthouse account validator list` command, to list all known validators.
- Fixes the validator names; previously they were using a full path (e.g., `"/home/paul/.lighthouse/validators/0x8ce25415d078bdc83133758604578ba51707a55965eeca8982f44695db7432d6ff1c23529020a971faa68ab60baf3118"` but now we only use the final directory name (e.g., `0x8ce25415d078bdc83133758604578ba51707a55965eeca8982f44695db7432d6ff1c23529020a971faa68ab60baf3118`).
This commit is contained in:
Paul Hauner 2020-07-27 01:25:20 +00:00
parent a413b43fed
commit 5680355b31
3 changed files with 40 additions and 5 deletions

View File

@ -0,0 +1,30 @@
use crate::VALIDATOR_DIR_FLAG;
use clap::{App, ArgMatches};
use std::path::PathBuf;
use validator_dir::Manager as ValidatorManager;
pub const CMD: &str = "list";
pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
App::new(CMD).about("Lists the names of all validators.")
}
pub fn cli_run(matches: &ArgMatches<'_>) -> Result<(), String> {
let data_dir = clap_utils::parse_path_with_default_in_home_dir(
matches,
VALIDATOR_DIR_FLAG,
PathBuf::new().join(".lighthouse").join("validators"),
)?;
let mgr = ValidatorManager::open(&data_dir)
.map_err(|e| format!("Unable to read --{}: {:?}", VALIDATOR_DIR_FLAG, e))?;
for (name, _path) in mgr
.directory_names()
.map_err(|e| format!("Unable to list wallets: {:?}", e))?
{
println!("{}", name)
}
Ok(())
}

View File

@ -1,5 +1,6 @@
pub mod create; pub mod create;
pub mod deposit; pub mod deposit;
pub mod list;
use crate::common::base_wallet_dir; use crate::common::base_wallet_dir;
use clap::{App, Arg, ArgMatches}; use clap::{App, Arg, ArgMatches};
@ -20,6 +21,7 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
) )
.subcommand(create::cli_app()) .subcommand(create::cli_app())
.subcommand(deposit::cli_app()) .subcommand(deposit::cli_app())
.subcommand(list::cli_app())
} }
pub fn cli_run<T: EthSpec>(matches: &ArgMatches, env: Environment<T>) -> Result<(), String> { pub fn cli_run<T: EthSpec>(matches: &ArgMatches, env: Environment<T>) -> Result<(), String> {
@ -28,6 +30,7 @@ pub fn cli_run<T: EthSpec>(matches: &ArgMatches, env: Environment<T>) -> Result<
match matches.subcommand() { match matches.subcommand() {
(create::CMD, Some(matches)) => create::cli_run::<T>(matches, env, base_wallet_dir), (create::CMD, Some(matches)) => create::cli_run::<T>(matches, env, base_wallet_dir),
(deposit::CMD, Some(matches)) => deposit::cli_run::<T>(matches, env), (deposit::CMD, Some(matches)) => deposit::cli_run::<T>(matches, env),
(list::CMD, Some(matches)) => list::cli_run(matches),
(unknown, _) => Err(format!( (unknown, _) => Err(format!(
"{} does not have a {} command. See --help", "{} does not have a {} command. See --help",
CMD, unknown CMD, unknown

View File

@ -164,10 +164,12 @@ impl Manager {
/// ///
/// Returns an error if a directory is unable to be read. /// Returns an error if a directory is unable to be read.
pub fn directory_names(&self) -> Result<HashMap<String, PathBuf>, Error> { pub fn directory_names(&self) -> Result<HashMap<String, PathBuf>, Error> {
Ok(HashMap::from_iter( Ok(HashMap::from_iter(self.iter_dir()?.into_iter().filter_map(
self.iter_dir()? |path| {
.into_iter() path.file_name()
.map(|path| (format!("{:?}", path), path)), .and_then(|os_string| os_string.to_str().map(|s| s.to_string()))
)) .map(|filename| (filename, path))
},
)))
} }
} }