summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-10-21 21:10:03 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-10-21 21:14:13 +0800
commitd15e68de27f8b5e1a3130a0f8415dd132e5bbe58 (patch)
tree256c6096c2ca1ba1716dfcc7fd22e734ec5d6df4
parentdec78fd8bb4cc8f52c857088b274fd06cea2e730 (diff)
feat: display block and blockchain
-rw-r--r--src/blocks.rs15
-rw-r--r--src/client.rs2
-rw-r--r--src/network.rs6
-rw-r--r--src/transaction.rs2
-rw-r--r--src/ui.rs9
5 files changed, 24 insertions, 10 deletions
diff --git a/src/blocks.rs b/src/blocks.rs
index a058c3c..9908be6 100644
--- a/src/blocks.rs
+++ b/src/blocks.rs
@@ -1,6 +1,7 @@
use bincode::Encode;
use sha2::{Digest, Sha256, digest::DynDigest};
use std::{
+ fmt::Display,
hash::{Hash, Hasher},
ops::Deref,
};
@@ -13,7 +14,7 @@ pub trait CryptoDigest {
fn digest(&self, state: &mut impl DynDigest);
}
-#[derive(Deserialize, Serialize, Clone, PartialEq, Encode)]
+#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Encode)]
pub struct Block {
pub prev_hash: Vec<u8>,
pub trans: Transaction,
@@ -79,7 +80,7 @@ impl CryptoDigest for Block {
}
}
-#[derive(Default, Deserialize, Serialize, Clone, PartialEq)]
+#[derive(Debug, Default, Deserialize, Serialize, Clone, PartialEq)]
pub struct BlockChain {
pub blocks: Vec<Block>,
}
@@ -106,9 +107,13 @@ impl BlockChain {
}
pub fn store(&mut self, block: Block) {
- // TODO: verify blocks
- self.blocks
- .push(block)
+ // TODO: check config
+ if (block.verify_pow()) {
+ self.blocks
+ .push(block)
+ } else {
+ eprint!("Err: Failed to store unverified block")
+ }
}
}
diff --git a/src/client.rs b/src/client.rs
index eb417fd..ea4f9bb 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -2,7 +2,7 @@ use bincode::Encode;
use rand::Rng;
use serde::{Deserialize, Serialize};
-#[derive(Hash, Deserialize, Serialize, Clone, Copy, PartialEq, Encode)]
+#[derive(Debug, Hash, Deserialize, Serialize, Clone, Copy, PartialEq, Encode)]
pub struct Client {
id: u32,
}
diff --git a/src/network.rs b/src/network.rs
index 197c997..969d021 100644
--- a/src/network.rs
+++ b/src/network.rs
@@ -223,14 +223,15 @@ impl Peer {
async fn handle(parent: Weak<Mutex<Network>>, req: Request) {
match req {
Request::Block(mut block) => {
- if !block
+ if block
.pow
- .is_none()
+ .is_some()
{
if !block.verify_pow() {
eprintln!("Rejecting remote block, POW verification failed"); // TODO: log remote IP
return;
}
+ println!("Accepting and storing remote block: {:?}", block);
parent
.upgrade()
.unwrap()
@@ -241,7 +242,6 @@ impl Peer {
.await
.store(block)
} else {
- print!("as");
block.calc_set_pow();
let parent = parent
.upgrade()
diff --git a/src/transaction.rs b/src/transaction.rs
index 760f080..585617e 100644
--- a/src/transaction.rs
+++ b/src/transaction.rs
@@ -3,7 +3,7 @@ use serde::{Deserialize, Serialize};
use crate::client::Client;
-#[derive(Hash, Deserialize, Serialize, Clone, Copy, PartialEq, Encode)]
+#[derive(Debug, Hash, Deserialize, Serialize, Clone, Copy, PartialEq, Encode)]
pub struct Transaction {
from: Client,
to: Client,
diff --git a/src/ui.rs b/src/ui.rs
index b2c57c0..81477c4 100644
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -40,6 +40,15 @@ impl Ui {
.new_block(trans),
));
}
+
+ if cmd[0] == "bc" {
+ println!(
+ "{:?}",
+ self.blockchain
+ .lock()
+ .await
+ );
+ }
None
}
}