Added deterministic keypair generation.

- The Account Manager has a new subcommand, allowing generation of deterministic keys given a particular validator index.
 - Split functionality in generate_deterministic_keypair function
 - Fixed up READMEs to reflect new functionality & correct naming.
This commit is contained in:
Luke Anderson
2019-04-08 15:02:11 +10:00
parent a46f676f89
commit 177a351462
8 changed files with 69 additions and 15 deletions

View File

@@ -11,3 +11,4 @@ slog = "^2.2.3"
slog-term = "^2.4.0"
slog-async = "^2.3.0"
validator_client = { path = "../validator_client" }
types = { path = "../eth2/types" }

View File

@@ -1,6 +1,6 @@
# Lighthouse Accounts Manager
# Lighthouse Account Manager
The accounts manager (AM) is a stand-alone binary which allows
The account manager (AM) is a stand-alone binary which allows
users to generate and manage the cryptographic keys necessary to
interact with Ethereum Serenity.
@@ -21,4 +21,14 @@ staking on Ethereum 1.x (TPD)
The AM is not a service, and does not run continuously, nor does it
interact with any running services.
It is intended to be executed separately from other Lighthouse binaries
and produce files which can be consumed by them.
and produce files which can be consumed by them.&
## Usage
Simply run `./account_manager generate` to generate a new random private key,
which will be automatically saved to the correct directory.
If you prefer to use our "deterministic" keys for testing purposes, simply
run `./accounts_manager generate_deterministic -i <index>`, where `index` is
the validator index for the key. This will reliably produce the same key each time
and save it to the directory.

View File

@@ -3,6 +3,7 @@ use clap::{App, Arg, SubCommand};
use slog::{debug, info, o, Drain};
use std::path::PathBuf;
use validator_client::Config as ValidatorClientConfig;
use types::test_utils::generate_deterministic_keypair;
fn main() {
// Logging
@@ -29,6 +30,21 @@ fn main() {
.version("0.0.1")
.author("Sigma Prime <contact@sigmaprime.io>"),
)
.subcommand(
SubCommand::with_name("generate_deterministic")
.about("Generates a deterministic validator private key FOR TESTING")
.version("0.0.1")
.author("Sigma Prime <contact@sigmaprime.io>")
.arg(
Arg::with_name("validator index")
.long("index")
.short("i")
.value_name("index")
.help("The index of the validator, for which the test key is generated")
.takes_value(true)
.required(true)
)
)
.get_matches();
let config = ValidatorClientConfig::parse_args(&matches, &log)
@@ -50,7 +66,24 @@ fn main() {
keypair.identifier(),
key_path.to_string_lossy()
);
}
},
("generate_deterministic", Some(gen_d_matches)) => {
let validator_index = gen_d_matches
.value_of("validator index")
.expect("Validator index required.")
.parse::<u64>()
.expect("Invalid validator index.") as usize;
let keypair = generate_deterministic_keypair(validator_index);
let key_path: PathBuf = config
.save_key(&keypair)
.expect("Unable to save newly generated deterministic private key.");
debug!(
log,
"Deterministic Keypair generated {:?}, saved to: {:?}",
keypair.identifier(),
key_path.to_string_lossy()
);
},
_ => panic!(
"The account manager must be run with a subcommand. See help for more information."
),