TUI Mining Screen (block hash and block height) (#2142)
* add block hash to tui mining diff screen include current header in there also * rework the mining screen on the tui show block hash as well as block height fix the "off by one" error
This commit is contained in:
committed by
Ignotus Peverell
parent
305b36dcce
commit
675edb4a19
@@ -20,6 +20,7 @@ use std::sync::Arc;
|
||||
use std::time::SystemTime;
|
||||
|
||||
use crate::core::consensus::graph_weight;
|
||||
use crate::core::core::hash::Hash;
|
||||
|
||||
use chrono::prelude::*;
|
||||
|
||||
@@ -118,8 +119,10 @@ pub struct DiffStats {
|
||||
/// Last n blocks for difficulty calculation purposes
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct DiffBlock {
|
||||
/// Block number (can be negative for a new chain)
|
||||
pub block_number: i64,
|
||||
/// Block height (can be negative for a new chain)
|
||||
pub block_height: i64,
|
||||
/// Block hash (may be synthetic for a new chain)
|
||||
pub block_hash: Hash,
|
||||
/// Block network difficulty
|
||||
pub difficulty: u64,
|
||||
/// Time block was found (epoch seconds)
|
||||
|
||||
+29
-18
@@ -27,6 +27,7 @@ use crate::common::adapters::{
|
||||
};
|
||||
use crate::common::stats::{DiffBlock, DiffStats, PeerStats, ServerStateInfo, ServerStats};
|
||||
use crate::common::types::{Error, ServerConfig, StratumServerConfig, SyncState, SyncStatus};
|
||||
use crate::core::core::hash::{Hashed, ZERO_HASH};
|
||||
use crate::core::core::verifier_cache::{LruVerifierCache, VerifierCache};
|
||||
use crate::core::{consensus, genesis, global, pow};
|
||||
use crate::grin::{dandelion_monitor, seed, sync};
|
||||
@@ -368,29 +369,39 @@ impl Server {
|
||||
let last_blocks: Vec<consensus::HeaderInfo> =
|
||||
global::difficulty_data_to_vector(self.chain.difficulty_iter())
|
||||
.into_iter()
|
||||
.take(consensus::DIFFICULTY_ADJUST_WINDOW as usize)
|
||||
.collect();
|
||||
|
||||
let mut last_time = last_blocks[0].timestamp;
|
||||
let tip_height = self.chain.head().unwrap().height as i64;
|
||||
let earliest_block_height = tip_height as i64 - last_blocks.len() as i64;
|
||||
let mut i = 1;
|
||||
let mut height = tip_height as i64 - last_blocks.len() as i64 + 1;
|
||||
|
||||
let diff_entries: Vec<DiffBlock> = last_blocks
|
||||
.iter()
|
||||
.skip(1)
|
||||
.map(|n| {
|
||||
let dur = n.timestamp - last_time;
|
||||
let height = earliest_block_height + i;
|
||||
i += 1;
|
||||
last_time = n.timestamp;
|
||||
.windows(2)
|
||||
.map(|pair| {
|
||||
let prev = &pair[0];
|
||||
let next = &pair[1];
|
||||
|
||||
height += 1;
|
||||
|
||||
// Use header hash if real header.
|
||||
// Default to "zero" hash if synthetic header_info.
|
||||
let hash = if height >= 0 {
|
||||
if let Ok(header) = self.chain.get_header_by_height(height as u64) {
|
||||
header.hash()
|
||||
} else {
|
||||
ZERO_HASH
|
||||
}
|
||||
} else {
|
||||
ZERO_HASH
|
||||
};
|
||||
|
||||
DiffBlock {
|
||||
block_number: height,
|
||||
difficulty: n.difficulty.to_num(),
|
||||
time: n.timestamp,
|
||||
duration: dur,
|
||||
secondary_scaling: n.secondary_scaling,
|
||||
is_secondary: n.is_secondary,
|
||||
block_height: height,
|
||||
block_hash: hash,
|
||||
difficulty: next.difficulty.to_num(),
|
||||
time: next.timestamp,
|
||||
duration: next.timestamp - prev.timestamp,
|
||||
secondary_scaling: next.secondary_scaling,
|
||||
is_secondary: next.is_secondary,
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
@@ -398,7 +409,7 @@ impl Server {
|
||||
let block_time_sum = diff_entries.iter().fold(0, |sum, t| sum + t.duration);
|
||||
let block_diff_sum = diff_entries.iter().fold(0, |sum, d| sum + d.difficulty);
|
||||
DiffStats {
|
||||
height: tip_height as u64,
|
||||
height: height as u64,
|
||||
last_blocks: diff_entries,
|
||||
average_block_time: block_time_sum / (consensus::DIFFICULTY_ADJUST_WINDOW - 1),
|
||||
average_difficulty: block_diff_sum / (consensus::DIFFICULTY_ADJUST_WINDOW - 1),
|
||||
|
||||
+10
-7
@@ -99,7 +99,8 @@ impl TableViewItem<StratumWorkerColumn> for WorkerStats {
|
||||
}
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
||||
enum DiffColumn {
|
||||
BlockNumber,
|
||||
Height,
|
||||
Hash,
|
||||
PoWType,
|
||||
Difficulty,
|
||||
SecondaryScaling,
|
||||
@@ -110,7 +111,8 @@ enum DiffColumn {
|
||||
impl DiffColumn {
|
||||
fn _as_str(&self) -> &str {
|
||||
match *self {
|
||||
DiffColumn::BlockNumber => "Block Number",
|
||||
DiffColumn::Height => "Height",
|
||||
DiffColumn::Hash => "Hash",
|
||||
DiffColumn::PoWType => "Type",
|
||||
DiffColumn::Difficulty => "Network Difficulty",
|
||||
DiffColumn::SecondaryScaling => "Sec. Scaling",
|
||||
@@ -130,7 +132,8 @@ impl TableViewItem<DiffColumn> for DiffBlock {
|
||||
};
|
||||
|
||||
match column {
|
||||
DiffColumn::BlockNumber => self.block_number.to_string(),
|
||||
DiffColumn::Height => self.block_height.to_string(),
|
||||
DiffColumn::Hash => self.block_hash.to_string(),
|
||||
DiffColumn::PoWType => pow_type,
|
||||
DiffColumn::Difficulty => self.difficulty.to_string(),
|
||||
DiffColumn::SecondaryScaling => self.secondary_scaling.to_string(),
|
||||
@@ -144,7 +147,8 @@ impl TableViewItem<DiffColumn> for DiffBlock {
|
||||
Self: Sized,
|
||||
{
|
||||
match column {
|
||||
DiffColumn::BlockNumber => Ordering::Equal,
|
||||
DiffColumn::Height => Ordering::Equal,
|
||||
DiffColumn::Hash => Ordering::Equal,
|
||||
DiffColumn::PoWType => Ordering::Equal,
|
||||
DiffColumn::Difficulty => Ordering::Equal,
|
||||
DiffColumn::SecondaryScaling => Ordering::Equal,
|
||||
@@ -264,9 +268,8 @@ impl TUIStatusListener for TUIMiningView {
|
||||
);
|
||||
|
||||
let diff_table_view = TableView::<DiffBlock, DiffColumn>::new()
|
||||
.column(DiffColumn::BlockNumber, "Block Number", |c| {
|
||||
c.width_percent(15)
|
||||
})
|
||||
.column(DiffColumn::Height, "Height", |c| c.width_percent(10))
|
||||
.column(DiffColumn::Hash, "Hash", |c| c.width_percent(10))
|
||||
.column(DiffColumn::PoWType, "Type", |c| c.width_percent(10))
|
||||
.column(DiffColumn::Difficulty, "Network Difficulty", |c| {
|
||||
c.width_percent(15)
|
||||
|
||||
Reference in New Issue
Block a user