diff --git a/src/miner/worker.rs b/src/miner/worker.rs
index ffaf26edfb8147fa0ad78e551925ad2bd833ae0e..452439cd17a6d47820044ef3e9dfc3942e2cea7b 100644
--- a/src/miner/worker.rs
+++ b/src/miner/worker.rs
@@ -3,21 +3,26 @@ use log::{debug, info};
 use crate::types::block::Block;
 use crate::network::server::Handle as ServerHandle;
 use std::thread;
+use std::sync::{Arc, Mutex};
+use crate::Blockchain;
 
 #[derive(Clone)]
 pub struct Worker {
     server: ServerHandle,
     finished_block_chan: Receiver<Block>,
+    blockchain:Arc<Mutex<Blockchain>>
 }
 
 impl Worker {
     pub fn new(
         server: &ServerHandle,
         finished_block_chan: Receiver<Block>,
+        blockchain: &Arc<Mutex<Blockchain>>
     ) -> Self {
         Self {
             server: server.clone(),
             finished_block_chan,
+            blockchain: Arc::clone(blockchain)
         }
     }
 
@@ -35,6 +40,8 @@ impl Worker {
         loop {
             let _block = self.finished_block_chan.recv().expect("Receive finished block error");
             // TODO for student: insert this finished block to blockchain, and broadcast this block hash
+            let mut new_blockchain = self.blockchain.lock().unwrap();
+            new_blockchain.insert(&_block);
         }
     }
 }