區塊鏈到底是怎麼工作的?我們一起來創建一個試試看

區塊鏈到底是怎麼工作的?我們一起來創建一個試試看

區塊鏈在維基百科上是這樣被定義的:區塊鏈是一個分佈式數據庫,用於維護不斷增加的記錄列表(稱為區塊)。

這個解釋聽起來並不像想象中那麼晦澀難懂。但,它究竟是什麼樣的,又是如何運作的呢?

為了清晰的展示一個“區塊鏈”我們將會使用一個叫做“Blockchan CLI”的開源編碼工具。於此同時,我也開發了一個基於瀏覽器應用的版本供大家參考使用。

區塊鏈到底是怎麼工作的?我們一起來創建一個試試看

先不要被這些技術細節嚇到,即使你不是一個專業的“程序猿”,你只是“入門級”的新手或者單純的對區塊鏈技術感興趣,你也可以通過以下的展示,看到這項技術的本質,讓你對它有更進一步的理解。

首先我們要安裝上面提到的開發軟件,大功告成之後,運行終端,你會看到這樣一句話:

接下來我們來看看一個“區塊”長什麼樣子?

首先你要在命令提示符後輸入blockchain或者bc,緊接著你就會看到以下畫面。

區塊鏈到底是怎麼工作的?我們一起來創建一個試試看

這就是一個Block

下面我們來科普下這些字眼都是什麼意思。

❶ Index (Block #)編號: 這是哪一個區塊?(這個命名為Genesis的區塊的編號就是0)

❷ Hash函數:簡單的理解就是接受一段數據作為輸入,然後生成一串數據作為輸出,來判斷這個區塊是否有效

❸ Previous Hash:前一個區塊是否有效?

❹ Timestamp: 這個區塊是什麼時間創建的

❺ Data:這個區塊裡儲存了什麼樣的數據

❻ Nonce:需要運行多少次算法循環(迭代)才能定位這個區塊

在我們的的示例中,所有新建的區塊鏈都會以為開端。我們都知道,每一個新產生的區塊都是基於上一個區塊的,所以這個Genesis是第一個我們要“挖”的塊。

什麼是“挖”呢?期間究竟發生了什麼?

區塊鏈到底是怎麼工作的?我們一起來創建一個試試看

接下來就讓我們開始吧。在命令提示符後輸入mine IloveHuer♥。

就像我們在之前提到的,當前的區塊都是基於上一個區塊而建立的。這個例子中,我們著手開始的區塊就是命名Genesis的這個Block。

❶ Index: o+1 = 1

❷ Previous Hash: 0000018035a828da0…

❸ Timestamp: 區塊被添加的時間

❹ Data: IloveHuer♥

❺ Hash: ??

❻ Nonce: ??

到這裡我們就又回產生一個疑問,我們正在創建的這個區塊的Hash值是怎麼得到的呢?我們簡單的看下。Hash值的定義:它是用來標識數據,唯一的且有固定長度的數值。Hash函數會把Index,前一個區塊的Hash值及以上述所列出的所有數據作為輸入值,計算後的出新的Hash值。得到的Hash 值都是唯一的,並且相同的輸入值只會得到同一個Hash值。

此時你還會注意到Hash值還有一個特點,就是開頭都至少有四個0,不用深入理解,這也被稱作我們都熟悉的POW系統。

緊接著我們再來解釋下什麼是nonce。

通俗點說,nonce就是一個數字,它表示在尋找到下一個有效的區塊Hash值所需運行算法的次數。這個計算nonce值的算法過程就是我們所說的“挖”:尋找一個有效的區塊,並進行確認。

以下代(字)碼(母)就代表一個簡單的“挖”的過程,當然實際的操作和算法會複雜的多,同時還要強大的處理器來運行所有的代碼。

所有成功“挖”到的人都會獲得一定數量的比特幣或者佣金作為獎勵,他們在維護區塊鏈安全和功能的同時,也獲得了報酬。

最後我們來解釋下為什麼區塊鏈這樣運作的機制的意義。

這樣的原理機制保證了區塊鏈的不可複製和隨意篡改的特性。

比如,我們現在有以下區塊鏈A→B→C,如果有人試圖修改在A上的數據,那麼會有以下連鎖反應:

1. 區塊A上的數據發生改變;

2. 區塊A的Hash值發生變化,因為錄入值data一項發生了改變;

3. 此時,A的Hash值會因為輸入數據被篡改,Hash值失去開端的“幾個0”,區塊A變無效;

4. 區塊B的Hash值發生變化,因為A的Hash值曾用來計算B;

5. 區塊B變無效;

6. 同理,區塊C Hash值發生變化;

7. 區塊C變無效。

寫到這裡,相信大多數人對區塊鏈的原理技術會有一個大致的瞭解了。大家不需要都懂編程或過分糾結一些專業詞彙,明白其中的大致原理即可。當然有鑽研探究精神的同學也可以多瞭解多嘗試。


分享到:


相關文章: