diff --git a/Cargo.toml b/Cargo.toml index 433712ae6..747cd4f38 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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" } diff --git a/src/bin/mint-demo.rs b/src/bin/mint-demo.rs new file mode 100644 index 000000000..1a2d9485a --- /dev/null +++ b/src/bin/mint-demo.rs @@ -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::().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()); +} diff --git a/src/mint.rs b/src/mint.rs index f3b6c5e59..754cacaa4 100644 --- a/src/mint.rs +++ b/src/mint.rs @@ -58,6 +58,12 @@ impl Mint { } } +#[derive(Serialize, Deserialize, Debug)] +pub struct MintDemo { + pub mint: Mint, + pub users: Vec<(Vec, i64)>, +} + #[cfg(test)] mod tests { use super::*;