From 078781a6da777d84c41f41ae810d369e9d94db14 Mon Sep 17 00:00:00 2001 From: Revertron Date: Mon, 19 Apr 2021 15:31:05 +0200 Subject: [PATCH] Fixed block checking code. Optimized build.rs. --- build.rs | 16 +++++++++++++--- src/blockchain/chain.rs | 4 +++- src/p2p/network.rs | 2 +- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/build.rs b/build.rs index ebffa2b..51d8092 100644 --- a/build.rs +++ b/build.rs @@ -1,12 +1,17 @@ extern crate winres; use std::fs::File; +use std::fs::read_to_string; use std::path::Path; use std::io::Write; use crypto::digest::Digest; use crypto::sha2::Sha256; +const IANA_FILE: &'static str = "iana-tlds.txt"; +const IANA_HASHES: &'static str = "iana-hashes.txt"; +const IANA_ZONES_URL: &'static str = "https://data.iana.org/TLD/tlds-alpha-by-domain.txt"; + fn main() { if cfg!(target_os = "windows") { let mut res = winres::WindowsResource::new(); @@ -14,13 +19,18 @@ fn main() { res.compile().unwrap(); } - download_iana_zones("iana-tlds.txt", "iana-hashes.txt"); + download_iana_zones(IANA_FILE, IANA_HASHES); } fn download_iana_zones(zones_name: &str, hashes_name: &str) { - let response = minreq::get("https://data.iana.org/TLD/tlds-alpha-by-domain.txt").send().expect("Could not make request!"); + let response = match read_to_string(Path::new(IANA_FILE)) { + Ok(string) => { string } + Err(_) => { + let response = minreq::get(IANA_ZONES_URL).send().expect("Could not make request!"); + response.as_str().expect("Response is not a valid UTF-8!").to_lowercase() + } + }; - let response = response.as_str().expect("Response is not a valid UTF-8!").to_lowercase(); let list: Vec<_> = response.split("\n").collect(); let mut zones = String::new(); let mut hashes = String::new(); diff --git a/src/blockchain/chain.rs b/src/blockchain/chain.rs index 1565456..6c64590 100644 --- a/src/blockchain/chain.rs +++ b/src/blockchain/chain.rs @@ -754,8 +754,10 @@ impl Chain { Twin }; } + } else if block.prev_block_hash != last_block.hash { + warn!("Ignoring block with wrong previous hash:\n{:?}", &block); + return Bad; } - } } diff --git a/src/p2p/network.rs b/src/p2p/network.rs index b749f65..6060456 100644 --- a/src/p2p/network.rs +++ b/src/p2p/network.rs @@ -509,7 +509,7 @@ fn process_new_block(context: Arc>, peers: &mut Peers, token: &To BlockQuality::Future => { debug!("Ignoring future block {}", block.index); } BlockQuality::Bad => { // TODO save bad public keys to banned table - debug!("Ignoring bad block {} with hash {:?}", block.index, block.hash); + debug!("Ignoring bad block {} with hash {:?} from {}", block.index, block.hash, peer.get_addr()); let height = context.chain.height(); context.chain.update_max_height(height); context.bus.post(crate::event::Event::SyncFinished);