2
0
mirror of https://github.com/Revertron/Alfis synced 2024-11-15 06:12:52 +00:00

Randomized signing keys.

This commit is contained in:
Revertron 2021-05-16 15:40:53 +02:00
parent a73894e849
commit 212525e3eb

View File

@ -19,6 +19,7 @@ use crate::blockchain::types::MineResult::*;
use crate::commons::constants::*;
use crate::keystore::check_public_key_strength;
use crate::settings::Settings;
use rand::prelude::IteratorRandom;
const TEMP_DB_NAME: &str = ":memory:";
const SQL_CREATE_TABLES: &str = include_str!("data/create_db.sql");
@ -289,22 +290,25 @@ impl Chain {
};
let signers: HashSet<Bytes> = self.get_block_signers(&block).into_iter().collect();
'key_loop: for keystore in keys {
if signers.contains(&keystore.get_public()) {
let mut rng = rand::thread_rng();
let keystore = keys.iter()
.filter(|keystore| signers.contains(&keystore.get_public()))
.filter(|keystore| {
for index in block.index..=self.get_height() {
let b = self.get_block(index).unwrap();
if b.pub_key == keystore.get_public() {
debug!("We already mined signing block for block {} by {:?}", block.index, &b.pub_key);
continue 'key_loop;
return false;
}
}
true
}).choose(&mut rng);
if let Some(keystore) = keystore {
info!("We have an honor to mine signing block!");
let mut block = Block::new(None, Bytes::default(), last_hash, SIGNER_DIFFICULTY);
block.index = last_index + 1;
return Some((block, keystore.clone()));
}
}
if !signers.is_empty() {
info!("Signing block must be mined by other nodes");
}