diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-10-21 21:10:03 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-10-21 21:14:13 +0800 |
| commit | d15e68de27f8b5e1a3130a0f8415dd132e5bbe58 (patch) | |
| tree | 256c6096c2ca1ba1716dfcc7fd22e734ec5d6df4 | |
| parent | dec78fd8bb4cc8f52c857088b274fd06cea2e730 (diff) | |
feat: display block and blockchain
| -rw-r--r-- | src/blocks.rs | 15 | ||||
| -rw-r--r-- | src/client.rs | 2 | ||||
| -rw-r--r-- | src/network.rs | 6 | ||||
| -rw-r--r-- | src/transaction.rs | 2 | ||||
| -rw-r--r-- | src/ui.rs | 9 |
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, @@ -40,6 +40,15 @@ impl Ui { .new_block(trans), )); } + + if cmd[0] == "bc" { + println!( + "{:?}", + self.blockchain + .lock() + .await + ); + } None } } |
