feat: ✨ data and hash time cost added to the chain
This commit is contained in:
parent
eca7a6e50a
commit
5111196588
3 changed files with 23 additions and 8 deletions
|
@ -1,3 +1,5 @@
|
|||
use std::time::{Duration, Instant};
|
||||
|
||||
use chrono::Utc;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use sha3::{Digest, Sha3_512};
|
||||
|
@ -8,9 +10,11 @@ use crate::blockchain::BlockChain;
|
|||
pub struct Block {
|
||||
pub index: u64,
|
||||
pub timestamp: u64,
|
||||
pub data: String,
|
||||
pub proof_of_work: u64,
|
||||
pub previous_hash: String,
|
||||
pub hash: String,
|
||||
pub hash_time_cost: Duration,
|
||||
}
|
||||
|
||||
impl Block {
|
||||
|
@ -24,13 +28,15 @@ impl Block {
|
|||
format!("{:x}", hash)
|
||||
}
|
||||
|
||||
pub fn new(index: u64, previous_hash: String) -> Self {
|
||||
pub fn new(index: u64, data: String, previous_hash: String, instant: Instant) -> Self {
|
||||
Block {
|
||||
index,
|
||||
timestamp: Utc::now().timestamp_millis() as u64,
|
||||
data,
|
||||
proof_of_work: 0_u64,
|
||||
previous_hash,
|
||||
hash: String::new(),
|
||||
hash_time_cost: instant.elapsed(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
use std::time::{Duration, Instant};
|
||||
|
||||
use chrono::Utc;
|
||||
|
||||
use crate::block::Block;
|
||||
|
@ -14,9 +16,11 @@ impl BlockChain {
|
|||
let genesis_block = Block {
|
||||
index: 0,
|
||||
timestamp: Utc::now().timestamp_millis() as u64,
|
||||
data: String::from("Tahinli"),
|
||||
proof_of_work: 0_u64,
|
||||
previous_hash: String::new(),
|
||||
hash: String::new(),
|
||||
hash_time_cost: Duration::from_secs(0),
|
||||
};
|
||||
|
||||
let chain = vec![genesis_block.clone()];
|
||||
|
@ -28,10 +32,12 @@ impl BlockChain {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn add_block(&mut self) {
|
||||
pub fn add_block(&mut self, data: String, instant: Instant) {
|
||||
let new_block = Block::new(
|
||||
self.chain.len() as u64,
|
||||
data,
|
||||
self.chain[&self.chain.len() - 1].hash.clone(),
|
||||
instant,
|
||||
)
|
||||
.mine(self.clone());
|
||||
self.chain.push(new_block);
|
||||
|
|
15
src/main.rs
15
src/main.rs
|
@ -8,14 +8,17 @@ fn main() {
|
|||
let difficulty = 1;
|
||||
|
||||
let mut blockchain = BlockChain::new(difficulty);
|
||||
let time = Instant::now();
|
||||
BlockChain::add_block(&mut blockchain);
|
||||
BlockChain::add_block(&mut blockchain);
|
||||
BlockChain::add_block(&mut blockchain);
|
||||
BlockChain::add_block(&mut blockchain);
|
||||
let instant = Instant::now();
|
||||
BlockChain::add_block(&mut blockchain, "T".to_string(), Instant::now());
|
||||
BlockChain::add_block(&mut blockchain, "a".to_string(), Instant::now());
|
||||
BlockChain::add_block(&mut blockchain, "h".to_string(), Instant::now());
|
||||
BlockChain::add_block(&mut blockchain, "i".to_string(), Instant::now());
|
||||
BlockChain::add_block(&mut blockchain, "n".to_string(), Instant::now());
|
||||
BlockChain::add_block(&mut blockchain, "l".to_string(), Instant::now());
|
||||
BlockChain::add_block(&mut blockchain, "i".to_string(), Instant::now());
|
||||
println!(
|
||||
"\t ⛏️⛏️⛏️ | Mined | ⛏️⛏️⛏️\n\n\tElapsed: {:?}\n\n{:#?}",
|
||||
time.elapsed(),
|
||||
instant.elapsed(),
|
||||
blockchain
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue