From 97372b8e633fefb21d8d48f597e39a1e9823ca51 Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Thu, 12 Jul 2018 16:29:49 -0600 Subject: [PATCH] Add --outfile option to solana-keygen --- multinode-demo/client.sh | 2 +- multinode-demo/setup.sh | 2 +- multinode-demo/wallet.sh | 2 +- src/bin/genesis.rs | 1 - src/bin/keygen.rs | 31 ++++++++++++++++++++++++++++++- 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/multinode-demo/client.sh b/multinode-demo/client.sh index ecd5b0c164..6d09fd4b74 100755 --- a/multinode-demo/client.sh +++ b/multinode-demo/client.sh @@ -23,7 +23,7 @@ fi client_json="$SOLANA_CONFIG_CLIENT_DIR"/client.json if [[ ! -r $client_json ]]; then - $solana_keygen > "$client_json" + $solana_keygen -o "$client_json" fi # shellcheck disable=SC2086 # $solana_client_demo should not be quoted diff --git a/multinode-demo/setup.sh b/multinode-demo/setup.sh index 52bea2068c..ba5b06855f 100755 --- a/multinode-demo/setup.sh +++ b/multinode-demo/setup.sh @@ -84,7 +84,7 @@ if $node_type_leader; then mkdir -p "$SOLANA_CONFIG_PRIVATE_DIR" echo "Creating $SOLANA_CONFIG_DIR/mint.json with $num_tokens tokens" - $solana_keygen > "$SOLANA_CONFIG_PRIVATE_DIR"/mint.json + $solana_keygen -o "$SOLANA_CONFIG_PRIVATE_DIR"/mint.json echo "Creating $SOLANA_CONFIG_DIR/genesis.log" $solana_genesis --tokens="$num_tokens" < "$SOLANA_CONFIG_PRIVATE_DIR"/mint.json > "$SOLANA_CONFIG_DIR"/genesis.log diff --git a/multinode-demo/wallet.sh b/multinode-demo/wallet.sh index df52ddbb38..658c79df14 100755 --- a/multinode-demo/wallet.sh +++ b/multinode-demo/wallet.sh @@ -38,7 +38,7 @@ fi client_json="$SOLANA_CONFIG_CLIENT_DIR"/client.json if [[ ! -r $client_json ]]; then - $solana_keygen > "$client_json" + $solana_keygen -o "$client_json" fi set -x diff --git a/src/bin/genesis.rs b/src/bin/genesis.rs index 506b3e8e66..8db6fe81a2 100644 --- a/src/bin/genesis.rs +++ b/src/bin/genesis.rs @@ -23,7 +23,6 @@ fn main() -> Result<(), Box> { .value_name("NUMBER") .takes_value(true) .required(true) - .default_value("0") .help("Number of tokens with which to initialize mint"), ) .get_matches(); diff --git a/src/bin/keygen.rs b/src/bin/keygen.rs index dba63fb26e..8b172428dd 100644 --- a/src/bin/keygen.rs +++ b/src/bin/keygen.rs @@ -1,14 +1,43 @@ +extern crate clap; extern crate ring; extern crate serde_json; +use clap::{App, Arg}; use ring::rand::SystemRandom; use ring::signature::Ed25519KeyPair; use std::error; +use std::fs::{self, File}; +use std::io::Write; +use std::path::Path; fn main() -> Result<(), Box> { + let matches = App::new("solana-genesis") + .arg( + Arg::with_name("outfile") + .short("o") + .long("outfile") + .value_name("PATH") + .takes_value(true) + .default_value("~/.config/solana/id.json") + .help("Number of tokens with which to initialize mint"), + ) + .get_matches(); + let rnd = SystemRandom::new(); let pkcs8_bytes = Ed25519KeyPair::generate_pkcs8(&rnd)?; let serialized = serde_json::to_string(&pkcs8_bytes.to_vec())?; - println!("{}", serialized); + + let outfile = matches.value_of("outfile").unwrap(); + + if outfile == "-" { + println!("{}", serialized); + } else { + if let Some(outdir) = Path::new(outfile).parent() { + fs::create_dir_all(outdir)?; + } + let mut f = File::create(outfile)?; + f.write_all(&serialized.into_bytes())?; + } + Ok(()) }