From f4c17bc15fee2c2629cfb399208194fbbf021538 Mon Sep 17 00:00:00 2001 From: Revertron Date: Sun, 18 Apr 2021 18:34:32 +0200 Subject: [PATCH] Added some checks to prevent user from mining if last full block is not signed enough. --- src/blockchain/chain.rs | 11 +++++++++++ src/web_ui.rs | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/blockchain/chain.rs b/src/blockchain/chain.rs index 6f0c556..d6d72fd 100644 --- a/src/blockchain/chain.rs +++ b/src/blockchain/chain.rs @@ -234,6 +234,17 @@ impl Chain { None } + pub fn is_waiting_signers(&self) -> bool { + if let Some(full_block) = &self.last_full_block { + let sign_count = self.height() - full_block.index; + if sign_count < BLOCK_SIGNERS_MIN { + return true; + } + } + + false + } + fn delete_transaction(&mut self, index: u64) -> sqlite::Result<()> { let mut statement = self.db.prepare(SQL_DELETE_DOMAIN)?; statement.bind(1, index as i64)?; diff --git a/src/web_ui.rs b/src/web_ui.rs index 6713023..10286ad 100644 --- a/src/web_ui.rs +++ b/src/web_ui.rs @@ -357,6 +357,11 @@ fn action_create_domain(context: Arc>, miner: Arc>, show_warning(web_view, "You don't have keys loaded!
Load or mine the keys and try again."); return; } + if context.chain.is_waiting_signers() { + show_warning(web_view, "Waiting for last full block to be signed. Try again later."); + info!("Waiting for last full block to be signed. Try again later."); + return; + } let keystore = context.get_keystore().unwrap(); let pub_key = keystore.get_public(); let mut data = match serde_json::from_str::(&data) { @@ -407,6 +412,12 @@ fn action_create_domain(context: Arc>, miner: Arc>, } fn action_create_zone(context: Arc>, miner: Arc>, web_view: &mut WebView<()>, name: String, data: String) { + if context.lock().unwrap().chain.is_waiting_signers() { + show_warning(web_view, "Waiting for last full block to be signed. Try again later."); + info!("Waiting for last full block to be signed. Try again later."); + return; + } + let name = name.to_lowercase(); if name.len() > ZONE_MAX_LENGTH || !check_domain(&name, false) || context.lock().unwrap().x_zones.has_zone(&name) { warn!("This zone is unavailable for mining!");