From d8ac1e3c32e8f9ab44505b7c0c67e694e7e38f6a Mon Sep 17 00:00:00 2001 From: Revertron Date: Wed, 17 Mar 2021 10:22:34 +0100 Subject: [PATCH] Fixed wait for signing mode in miner. --- src/blockchain/chain.rs | 15 ++++++++++++++- src/miner.rs | 12 ++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/blockchain/chain.rs b/src/blockchain/chain.rs index ba7803b..ec8d919 100644 --- a/src/blockchain/chain.rs +++ b/src/blockchain/chain.rs @@ -13,7 +13,7 @@ use crate::blockchain::enums::BlockQuality::*; use crate::blockchain::hash_utils::*; use crate::settings::Settings; use crate::keys::check_public_key_strength; -use std::cmp::min; +use std::cmp::{min, max}; const DB_NAME: &str = "blockchain.db"; const SQL_CREATE_TABLES: &str = "CREATE TABLE blocks ( @@ -329,6 +329,19 @@ impl Chain { } } + pub fn next_minable_block(&self) -> u64 { + match self.last_full_block { + None => { self.height() + 1 } + Some(ref block) => { + if block.index < LOCKER_BLOCK_START { + self.height() + 1 + } else { + max(block.index, self.height()) + LOCKER_BLOCK_SIGNS + } + } + } + } + pub fn max_height(&self) -> u64 { self.max_height } diff --git a/src/miner.rs b/src/miner.rs index d4703b8..6f21625 100644 --- a/src/miner.rs +++ b/src/miner.rs @@ -209,14 +209,10 @@ fn find_hash(context: Arc>, digest: &mut dyn Digest, mut block: B loop { block.random = rand::random(); block.index = context.lock().unwrap().chain.height() + 1; - if let Some(last_block) = context.lock().unwrap().chain.last_block() { - block.prev_block_hash = last_block.hash; - if block.transaction.is_some() && last_block.transaction.is_some() { - // We can't mine our domain block over a block with domain - // TODO make a method in Chain to get next available to mine block index - thread::sleep(Duration::from_millis(1000)); - continue; - } + if context.lock().unwrap().chain.next_minable_block() > block.index { + // We can't mine now, as we need to wait for block to be signed + thread::sleep(Duration::from_millis(1000)); + continue; } debug!("Mining block {}", serde_json::to_string(&block).unwrap()); for nonce in 0..std::u64::MAX {