Added a new binary, accounts_manager.
- Updated main Cargo.toml file - Created a new readme & binary - Includes configuration options from the validator, which now has it's config as a library.
This commit is contained in:
parent
49f6e7ac65
commit
dc2fc7a250
@ -23,4 +23,5 @@ members = [
|
|||||||
"beacon_node/beacon_chain/test_harness",
|
"beacon_node/beacon_chain/test_harness",
|
||||||
"protos",
|
"protos",
|
||||||
"validator_client",
|
"validator_client",
|
||||||
|
"account_manager",
|
||||||
]
|
]
|
||||||
|
13
account_manager/Cargo.toml
Normal file
13
account_manager/Cargo.toml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
[package]
|
||||||
|
name = "account_manager"
|
||||||
|
version = "0.0.1"
|
||||||
|
authors = ["Luke Anderson <luke@sigmaprime.io>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
bls = { path = "../eth2/utils/bls" }
|
||||||
|
clap = "2.32.0"
|
||||||
|
slog = "^2.2.3"
|
||||||
|
slog-term = "^2.4.0"
|
||||||
|
slog-async = "^2.3.0"
|
||||||
|
validator_client = { path = "../validator_client" }
|
24
account_manager/README.md
Normal file
24
account_manager/README.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Lighthouse Accounts Manager
|
||||||
|
|
||||||
|
The accounts manager (AM) is a stand-alone binary which allows
|
||||||
|
users to generate and manage the cryptographic keys necessary to
|
||||||
|
interact with Ethereum Serenity.
|
||||||
|
|
||||||
|
## Roles
|
||||||
|
|
||||||
|
The AM is responsible for the following tasks:
|
||||||
|
- Generation of cryptographic key pairs
|
||||||
|
- Must acquire sufficient entropy to ensure keys are generated securely (TBD)
|
||||||
|
- Secure storage of private keys
|
||||||
|
- Keys must be encrypted while at rest on the disk (TBD)
|
||||||
|
- The format is compatible with the validator client
|
||||||
|
- Produces messages and transactions necessary to initiate
|
||||||
|
staking on Ethereum 1.x (TPD)
|
||||||
|
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
|
||||||
|
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.
|
58
account_manager/src/main.rs
Normal file
58
account_manager/src/main.rs
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
use bls::Keypair;
|
||||||
|
use clap::{App, Arg, SubCommand};
|
||||||
|
use slog::{debug, info, o, Drain};
|
||||||
|
use std::path::PathBuf;
|
||||||
|
use validator_client::config::ValidatorClientConfig;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
// Logging
|
||||||
|
let decorator = slog_term::TermDecorator::new().build();
|
||||||
|
let drain = slog_term::CompactFormat::new(decorator).build().fuse();
|
||||||
|
let drain = slog_async::Async::new(drain).build().fuse();
|
||||||
|
let log = slog::Logger::root(drain, o!());
|
||||||
|
|
||||||
|
// CLI
|
||||||
|
let matches = App::new("Lighthouse Accounts Manager")
|
||||||
|
.version("0.0.1")
|
||||||
|
.author("Sigma Prime <contact@sigmaprime.io>")
|
||||||
|
.about("Eth 2.0 Accounts Manager")
|
||||||
|
.arg(
|
||||||
|
Arg::with_name("datadir")
|
||||||
|
.long("datadir")
|
||||||
|
.value_name("DIR")
|
||||||
|
.help("Data directory for keys and databases.")
|
||||||
|
.takes_value(true),
|
||||||
|
)
|
||||||
|
.subcommand(
|
||||||
|
SubCommand::with_name("generate")
|
||||||
|
.about("Generates a new validator private key")
|
||||||
|
.version("0.0.1")
|
||||||
|
.author("Sigma Prime <contact@sigmaprime.io>"),
|
||||||
|
)
|
||||||
|
.get_matches();
|
||||||
|
|
||||||
|
let config = ValidatorClientConfig::build_config(&matches)
|
||||||
|
.expect("Unable to build a configuration for the account manager.");
|
||||||
|
|
||||||
|
// Log configuration
|
||||||
|
info!(log, "";
|
||||||
|
"data_dir" => &config.data_dir.to_str());
|
||||||
|
|
||||||
|
match matches.subcommand() {
|
||||||
|
("generate", Some(_gen_m)) => {
|
||||||
|
let keypair = Keypair::random();
|
||||||
|
let key_path: PathBuf = config
|
||||||
|
.save_key(&keypair)
|
||||||
|
.expect("Unable to save newly generated private key.");
|
||||||
|
debug!(
|
||||||
|
log,
|
||||||
|
"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."
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user