diff --git a/src/block.rs b/src/block.rs index 121660f..92c4665 100644 --- a/src/block.rs +++ b/src/block.rs @@ -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(), } } diff --git a/src/blockchain.rs b/src/blockchain.rs index 784a8df..a6a450c 100644 --- a/src/blockchain.rs +++ b/src/blockchain.rs @@ -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); diff --git a/src/main.rs b/src/main.rs index 719237d..eb88fa8 100644 --- a/src/main.rs +++ b/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 ); }