From fc4e2985d55d49835cfc13708d3a3d12203efbef Mon Sep 17 00:00:00 2001 From: Antioch Peverell Date: Thu, 26 Sep 2019 14:59:03 +0100 Subject: [PATCH] add block_hash to head_info so we can easily use them later (#3060) --- chain/src/store.rs | 1 + core/src/consensus.rs | 7 +++++++ core/tests/consensus.rs | 1 + servers/src/grin/server.rs | 19 ++----------------- 4 files changed, 11 insertions(+), 17 deletions(-) diff --git a/chain/src/store.rs b/chain/src/store.rs index 673d39f6d..2d100dd62 100644 --- a/chain/src/store.rs +++ b/chain/src/store.rs @@ -562,6 +562,7 @@ impl<'a> Iterator for DifficultyIter<'a> { let scaling = header.pow.secondary_scaling; Some(HeaderInfo::new( + header.hash(), header.timestamp.timestamp() as u64, difficulty, scaling, diff --git a/core/src/consensus.rs b/core/src/consensus.rs index f62ba2d8b..7067cbe59 100644 --- a/core/src/consensus.rs +++ b/core/src/consensus.rs @@ -21,6 +21,7 @@ use std::cmp::{max, min}; use crate::core::block::HeaderVersion; +use crate::core::hash::{Hash, ZERO_HASH}; use crate::global; use crate::pow::Difficulty; @@ -219,6 +220,8 @@ pub const INITIAL_DIFFICULTY: u64 = 1_000_000 * UNIT_DIFFICULTY; /// take place #[derive(Clone, Debug, Eq, PartialEq)] pub struct HeaderInfo { + /// Block hash, ZERO_HASH when this is a sythetic entry. + pub block_hash: Hash, /// Timestamp of the header, 1 when not used (returned info) pub timestamp: u64, /// Network difficulty or next difficulty to use @@ -232,12 +235,14 @@ pub struct HeaderInfo { impl HeaderInfo { /// Default constructor pub fn new( + block_hash: Hash, timestamp: u64, difficulty: Difficulty, secondary_scaling: u32, is_secondary: bool, ) -> HeaderInfo { HeaderInfo { + block_hash, timestamp, difficulty, secondary_scaling, @@ -249,6 +254,7 @@ impl HeaderInfo { /// PoW factor pub fn from_ts_diff(timestamp: u64, difficulty: Difficulty) -> HeaderInfo { HeaderInfo { + block_hash: ZERO_HASH, timestamp, difficulty, secondary_scaling: global::initial_graph_weight(), @@ -261,6 +267,7 @@ impl HeaderInfo { /// timestamp pub fn from_diff_scaling(difficulty: Difficulty, secondary_scaling: u32) -> HeaderInfo { HeaderInfo { + block_hash: ZERO_HASH, timestamp: 1, difficulty, secondary_scaling, diff --git a/core/tests/consensus.rs b/core/tests/consensus.rs index 7d933ceb0..0a819ac4a 100644 --- a/core/tests/consensus.rs +++ b/core/tests/consensus.rs @@ -86,6 +86,7 @@ fn repeat(interval: u64, diff: HeaderInfo, len: u64, cur_time: Option) -> V pairs .map(|(t, d)| { HeaderInfo::new( + diff.block_hash, cur_time + t as u64, d.clone(), diff.secondary_scaling, diff --git a/servers/src/grin/server.rs b/servers/src/grin/server.rs index 414a8f56c..8e1757358 100644 --- a/servers/src/grin/server.rs +++ b/servers/src/grin/server.rs @@ -40,7 +40,7 @@ use crate::common::stats::{ ChainStats, DiffBlock, DiffStats, PeerStats, ServerStateInfo, ServerStats, TxStats, }; use crate::common::types::{Error, ServerConfig, StratumServerConfig}; -use crate::core::core::hash::{Hashed, ZERO_HASH}; +use crate::core::core::hash::Hashed; use crate::core::core::verifier_cache::{LruVerifierCache, VerifierCache}; use crate::core::ser::ProtocolVersion; use crate::core::{consensus, genesis, global, pow}; @@ -436,9 +436,6 @@ impl Server { let tip_height = self.head()?.height as i64; let mut height = tip_height as i64 - last_blocks.len() as i64 + 1; - let header_pmmr = self.chain.header_pmmr(); - let header_pmmr = header_pmmr.read(); - let diff_entries: Vec = last_blocks .windows(2) .map(|pair| { @@ -447,21 +444,9 @@ impl Server { height += 1; - // Use header hash if real header. - // Default to "zero" hash if synthetic header_info. - let hash = if height >= 0 { - if let Ok(hash) = header_pmmr.get_header_hash_by_height(height as u64) { - hash - } else { - ZERO_HASH - } - } else { - ZERO_HASH - }; - DiffBlock { block_height: height, - block_hash: hash, + block_hash: next.block_hash, difficulty: next.difficulty.to_num(), time: next.timestamp, duration: next.timestamp - prev.timestamp,