From f20380d6b46475cc4cc87ddb5cbe972b4c1aab9c Mon Sep 17 00:00:00 2001 From: Robert Kelly Date: Fri, 11 May 2018 14:07:41 -0400 Subject: [PATCH] changed RwLock to RefCell --- src/bin/genesis-demo.rs | 3 ++- src/signature.rs | 13 +++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/bin/genesis-demo.rs b/src/bin/genesis-demo.rs index 10ea4b9ef5..134d3403c6 100644 --- a/src/bin/genesis-demo.rs +++ b/src/bin/genesis-demo.rs @@ -42,13 +42,14 @@ fn main() { let users = rnd.gen_n_keys(num_accounts, tokens_per_user); - let last_id = demo.mint.last_id(); let mint_keypair = demo.mint.keypair(); + let last_id = demo.mint.last_id(); eprintln!("Signing {} transactions...", num_accounts); let events: Vec<_> = users .into_par_iter() .map(|(pkcs8, tokens)| { + let last_id = demo.mint.last_id(); let rando = KeyPair::from_pkcs8(Input::from(&pkcs8)).unwrap(); let tr = Transaction::new(&mint_keypair, rando.pubkey(), tokens, last_id); Event::Transaction(tr) diff --git a/src/signature.rs b/src/signature.rs index f554fd0b8c..f882ca41c5 100644 --- a/src/signature.rs +++ b/src/signature.rs @@ -3,13 +3,12 @@ use generic_array::typenum::{U32, U64}; use generic_array::GenericArray; use rand::{ChaChaRng, Rng, SeedableRng}; -use rayon::prelude::*; use ring::error::Unspecified; use ring::rand::SecureRandom; use ring::signature::Ed25519KeyPair; use ring::{rand, signature}; +use std::cell::RefCell; use std::mem; -use std::sync::RwLock; use untrusted; pub type KeyPair = Ed25519KeyPair; @@ -49,7 +48,9 @@ impl SignatureUtil for GenericArray { } pub struct GenKeys { - generator: RwLock, + // This is necessary because the rng needs to mutate its state to remain + // deterministic, and the fill trait requires an immuatble reference to self + generator: RefCell, } impl GenKeys { @@ -57,7 +58,7 @@ impl GenKeys { let seed: &[u8] = &seed_values[..]; let rng: ChaChaRng = SeedableRng::from_seed(unsafe { mem::transmute(seed) }); GenKeys { - generator: RwLock::new(rng), + generator: RefCell::new(rng), } } @@ -67,7 +68,7 @@ impl GenKeys { pub fn gen_n_keys(&self, n_keys: i64, tokens_per_user: i64) -> Vec<(Vec, i64)> { let users: Vec<_> = (0..n_keys) - .into_par_iter() + .into_iter() .map(|_| { let pkcs8 = self.new_key(); (pkcs8, tokens_per_user) @@ -79,7 +80,7 @@ impl GenKeys { impl SecureRandom for GenKeys { fn fill(&self, dest: &mut [u8]) -> Result<(), Unspecified> { - let mut rng = self.generator.write().unwrap(); + let mut rng = self.generator.borrow_mut(); rng.fill_bytes(dest); Ok(()) }