Add solana-mint-demo CLI

This extends solana-mint with additional data that will be used by
both solana-client-demo and creating the demo's genesis block.
This commit is contained in:
Greg Fitzgerald 2018-04-16 16:39:59 -04:00
parent 1c923d2f9e
commit 807ccd15ba
3 changed files with 43 additions and 0 deletions

View File

@ -36,6 +36,10 @@ path = "src/bin/genesis-demo.rs"
name = "solana-mint"
path = "src/bin/mint.rs"
[[bin]]
name = "solana-mint-demo"
path = "src/bin/mint-demo.rs"
[badges]
codecov = { repository = "solana-labs/solana", branch = "master", service = "github" }

33
src/bin/mint-demo.rs Normal file
View File

@ -0,0 +1,33 @@
extern crate rayon;
extern crate ring;
extern crate serde_json;
extern crate solana;
use solana::mint::{Mint, MintDemo};
use solana::signature::KeyPair;
use std::io;
use rayon::prelude::*;
use ring::rand::SystemRandom;
fn main() {
let mut input_text = String::new();
io::stdin().read_line(&mut input_text).unwrap();
let trimmed = input_text.trim();
let tokens = trimmed.parse::<i64>().unwrap();
let mint = Mint::new(tokens);
let tokens_per_user = 1_000;
let num_accounts = tokens / tokens_per_user;
let rnd = SystemRandom::new();
let users: Vec<_> = (0..num_accounts)
.into_par_iter()
.map(|_| {
let pkcs8 = KeyPair::generate_pkcs8(&rnd).unwrap().to_vec();
(pkcs8, tokens_per_user)
})
.collect();
let demo = MintDemo { mint, users };
println!("{}", serde_json::to_string(&demo).unwrap());
}

View File

@ -58,6 +58,12 @@ impl Mint {
}
}
#[derive(Serialize, Deserialize, Debug)]
pub struct MintDemo {
pub mint: Mint,
pub users: Vec<(Vec<u8>, i64)>,
}
#[cfg(test)]
mod tests {
use super::*;