summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-10-21 20:53:28 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-10-21 21:14:13 +0800
commit84b41b9a6619094383dbacfbdaa8c0f3e2819113 (patch)
tree2c7a745b815792e9ef899022eb6418a9d6608c70
parentec257dc4496f4dd9f7b6a5a6cea033ee81206673 (diff)
fix(block): save actual PoW nonce instead of hashed
-rw-r--r--src/blocks.rs10
-rw-r--r--src/network.rs4
2 files changed, 7 insertions, 7 deletions
diff --git a/src/blocks.rs b/src/blocks.rs
index 17e6d4f..67af3f1 100644
--- a/src/blocks.rs
+++ b/src/blocks.rs
@@ -17,7 +17,7 @@ pub trait CryptoDigest {
pub struct Block {
pub prev_hash: Vec<u8>,
pub trans: Transaction,
- pub pow: Vec<u8>,
+ pub pow: Option<u64>,
}
impl Block {
@@ -27,7 +27,7 @@ impl Block {
.unwrap_or(&[])
.to_vec(), // special blocks
trans,
- pow: Vec::default(),
+ pow: None,
}
}
@@ -45,14 +45,14 @@ impl Block {
})
}
- fn calc_pow(&self) -> Vec<u8> {
+ fn calc_pow(&self) -> u64 {
for i in 0.. {
// reset every loop
let mut hasher = Sha256::new();
Digest::update(&mut hasher, bincode::encode_to_vec((&self.prev_hash, &self.trans, i), bincode::config::standard()).unwrap());
let hashed = hasher.finalize();
if Self::pref_zeros(&hashed).is_ok() {
- return hashed.to_vec();
+ return i;
}
}
unreachable!()
@@ -65,7 +65,7 @@ impl Block {
}
pub fn calc_set_pow(&mut self) {
- self.pow = self.calc_pow();
+ self.pow = Some(self.calc_pow());
}
}
diff --git a/src/network.rs b/src/network.rs
index c18ae07..197c997 100644
--- a/src/network.rs
+++ b/src/network.rs
@@ -225,7 +225,7 @@ impl Peer {
Request::Block(mut block) => {
if !block
.pow
- .is_empty()
+ .is_none()
{
if !block.verify_pow() {
eprintln!("Rejecting remote block, POW verification failed"); // TODO: log remote IP
@@ -274,7 +274,7 @@ impl Peer {
.fold(true, |i, b| {
if i {
b.pow
- .is_empty()
+ .is_none()
} else {
false
}