solana/src/bin/genesis.rs

61 lines
1.7 KiB
Rust
Raw Normal View History

//! A command-line executable for generating the chain's genesis block.
2018-06-13 15:07:36 -07:00
extern crate atty;
2018-07-12 14:42:01 -07:00
#[macro_use]
extern crate clap;
extern crate serde_json;
2018-03-27 15:24:05 -07:00
extern crate solana;
2018-06-13 15:07:36 -07:00
use atty::{is, Stream};
2018-07-12 14:42:01 -07:00
use clap::{App, Arg};
use solana::ledger::LedgerWriter;
2018-03-27 15:24:05 -07:00
use solana::mint::Mint;
2018-07-01 08:04:41 -07:00
use std::error;
use std::io::{stdin, Read};
2018-04-19 07:55:47 -07:00
use std::process::exit;
2018-07-01 08:04:41 -07:00
fn main() -> Result<(), Box<error::Error>> {
2018-07-12 14:42:01 -07:00
let matches = App::new("solana-genesis")
.version(crate_version!())
2018-07-12 14:42:01 -07:00
.arg(
Arg::with_name("tokens")
.short("t")
.long("tokens")
2018-09-14 15:32:57 -07:00
.value_name("NUM")
2018-07-12 14:42:01 -07:00
.takes_value(true)
.required(true)
.help("Number of tokens with which to initialize mint"),
2018-09-14 16:25:14 -07:00
).arg(
Arg::with_name("ledger")
.short("l")
.long("ledger")
.value_name("DIR")
.takes_value(true)
.required(true)
2018-09-14 15:32:57 -07:00
.help("Use directory as persistent ledger location"),
2018-09-14 16:25:14 -07:00
).get_matches();
2018-07-12 14:42:01 -07:00
let tokens = value_t_or_exit!(matches, "tokens", i64);
let ledger_path = matches.value_of("ledger").unwrap();
2018-07-12 14:42:01 -07:00
2018-06-13 15:07:36 -07:00
if is(Stream::Stdin) {
2018-04-21 06:12:57 -07:00
eprintln!("nothing found on stdin, expected a json file");
exit(1);
}
let mut buffer = String::new();
2018-07-01 08:04:41 -07:00
let num_bytes = stdin().read_to_string(&mut buffer)?;
2018-04-21 06:12:57 -07:00
if num_bytes == 0 {
eprintln!("empty file on stdin, expected a json file");
exit(1);
}
2018-07-12 14:42:01 -07:00
let pkcs8: Vec<u8> = serde_json::from_str(&buffer)?;
let mint = Mint::new_with_pkcs8(tokens, pkcs8);
let mut ledger_writer = LedgerWriter::open(&ledger_path, true)?;
ledger_writer.write_entries(&mint.create_entries())?;
2018-07-01 08:04:41 -07:00
Ok(())
}