diff --git a/multinode-demo/setup.sh b/multinode-demo/setup.sh index 7c0e268994ff9f..0342feccfbb57b 100755 --- a/multinode-demo/setup.sh +++ b/multinode-demo/setup.sh @@ -87,7 +87,7 @@ if $node_type_leader; then $solana_mint <<<"$num_tokens" > "$SOLANA_CONFIG_PRIVATE_DIR"/mint.json echo "Creating $SOLANA_CONFIG_DIR/genesis.log" - $solana_genesis < "$SOLANA_CONFIG_PRIVATE_DIR"/mint.json > "$SOLANA_CONFIG_DIR"/genesis.log + $solana_genesis --tokens "$num_tokens" < "$SOLANA_CONFIG_PRIVATE_DIR"/mint.json > "$SOLANA_CONFIG_DIR"/genesis.log echo "Creating $SOLANA_CONFIG_DIR/leader.json" $solana_fullnode_config "${leader_address_args[@]}" > "$SOLANA_CONFIG_DIR"/leader.json diff --git a/src/bin/genesis.rs b/src/bin/genesis.rs index bdbee0d04f4283..8be4db3e13d347 100644 --- a/src/bin/genesis.rs +++ b/src/bin/genesis.rs @@ -1,10 +1,12 @@ //! A command-line executable for generating the chain's genesis block. extern crate atty; +extern crate clap; extern crate serde_json; extern crate solana; use atty::{is, Stream}; +use clap::{App, Arg}; use solana::entry_writer::EntryWriter; use solana::mint::Mint; use std::error; @@ -12,6 +14,24 @@ use std::io::{stdin, stdout, Read}; use std::process::exit; fn main() -> Result<(), Box> { + let matches = App::new("solana-genesis") + .arg( + Arg::with_name("tokens") + .short("t") + .long("tokens") + .value_name("NUMBER") + .takes_value(true) + .required(true) + .help("Number of tokens with which to initialize mint"), + ) + .get_matches(); + let tokens: i64; + if let Some(t) = matches.value_of("tokens") { + tokens = t.to_string().parse().expect("integer"); + } else { + tokens = 0; + } + if is(Stream::Stdin) { eprintln!("nothing found on stdin, expected a json file"); exit(1); @@ -24,7 +44,8 @@ fn main() -> Result<(), Box> { exit(1); } - let mint: Mint = serde_json::from_str(&buffer)?; + let pkcs8: Vec = serde_json::from_str(&buffer)?; + let mint: Mint = Mint::new_from_keygen(tokens, pkcs8); let mut writer = stdout(); EntryWriter::write_entries(&mut writer, mint.create_entries())?; Ok(()) diff --git a/src/mint.rs b/src/mint.rs index 6931e7df069b3a..7079903b45e3d7 100644 --- a/src/mint.rs +++ b/src/mint.rs @@ -29,6 +29,16 @@ impl Mint { tokens, } } + pub fn new_from_keygen(tokens: i64, pkcs8: Vec) -> Self { + let keypair = KeyPair::from_pkcs8(Input::from(&pkcs8)) + .expect("keypair from_pkcs8 in mint pub fn new_from_keypair"); + let pubkey = keypair.pubkey(); + Mint { + pkcs8, + pubkey, + tokens, + } + } pub fn seed(&self) -> Hash { hash(&self.pkcs8) }