1. 程式人生 > >一文透徹瞭解區塊鏈是如何工作的!

一文透徹瞭解區塊鏈是如何工作的!

本文首發自萬向區塊鏈微信公眾號,未經授權不允許轉載。

為什麼說區塊鏈是“信任的機器”?它是如何工作的?這有篇最簡單的解釋!

ll本文翻譯自Authorito Capital CEO的博文《WTF is The Blockchain?》,略有刪減。

ll原文連結:https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348

區塊鏈的遊戲規則是必須有足夠的人不想依靠第三方來進行交易。多少人才算“足夠多”呢?最少三個。

我們假設有十個玩家想放棄銀行或任何第三方,經相互同意,他們在不知道對方身份的情況下,擁有對方賬戶的詳細資訊。至此,遊戲開始。


一個空白賬本

每個玩家都從一個空白賬本開始,隨著“遊戲”的開始,每個玩家不斷往這個空賬本上記東西,交易越來越多,賬本的頁數也在不斷增加。這個賬本就是我們追蹤交易紀錄的“暫存器”。

當有交易發生時

系統中的每個玩家都擁有一個空白賬本,每當有交易發生時,他們就將交易記錄在賬本上。

現在,假設2號玩家想給9號玩家轉10塊錢。為了進行交易,2號在系統裡吼一聲“大夥兒,我要給9號妹子轉10塊錢,你們快在賬本上記一下”。


接下來,每個玩家就開始檢查2號是否真的有10塊錢轉給9號,如果她真的有足夠的錢,那麼所有玩家都會在賬本的空白頁記下這筆轉賬。這樣,一筆交易就算完成了。


交易繼續

隨著時間的流逝,系統裡有越來越多的玩家需要轉賬給其他人。無論他們什麼時候想轉賬,都只需要在系統裡告訴所有玩家,只要有一個人聽到了,他/她就會將這筆交易記在賬本上。

記賬繼續,直到所有玩家將當前的空白頁用完。假設一頁賬本能記十筆交易,當十筆交易完成時,那麼這個頁面就不能再繼續記賬。


這時候只需將這頁記錄儲存到資料夾中,然後翻到下一個空白頁,繼續記賬就行。

那頁被翻過去的頁面

當我們將記滿10筆交易記錄的頁面翻過去之前,需要使用系統中每個玩家都同意的“神祕鎖(金鑰)”來將它密封起來。通過密封,能夠確保一旦將這頁記錄的副本發放到每個玩家的資料夾中後,任何人都無法對它做出任何更改。一旦進入資料夾中,它將永遠被密封在裡面。“密封”是這個遊戲的關鍵所在。

如何密封頁面

在我們瞭解如何封印頁面之前,先來看看“封印”的工作原理。

魔法機器

想象一下,有一臺被厚厚的牆壁包圍著的機器,如果你從機器左邊傳送一個包含著內容的盒子進去,在右邊,它會吐出一個包含其他內容的盒子。


這臺機器被稱為“雜湊函式”,但我們不必那麼學術,所以就叫它魔法機器吧。

假設你從左邊輸入數字4,我們會發現它從右邊吐出下面的單詞:'dcbea'。


它是如何將數字4轉換成這個詞的?沒人知道。但我們需要知道這是一個不可逆轉的過程。如果我們知道右邊出來的詞語是“dcbea”,是沒法計算出從左邊給機器輸進了什麼東西,但如果我們每次從左邊給機器輸進數字4,右邊必然會出現詞語“dcbea”。

讓我們試試輸進不同的數字,比如“26”。我們這次得到'94c8e'。有趣!


如果我問你下面這個問題:

你能告訴我應該從機器的左側輸進什麼東西,以便我能從右側得到以三個零開頭的數字或單詞?例如,000ab或00098或000fa或其他內容。


我之前說過,這個機器有一個奇怪的屬性:如果我知道右邊輸出的東西,是沒辦法算出左邊輸進了什麼東西的。有這樣一臺機器,怎麼可能回答得出上面的問題呢?

我想到一個方法,逐一嘗試每一個數字,直到我們得出以000開頭的詞語。或許經過數千次的嘗試,我們能得到這樣的結果。


當我們給定了右邊的輸出結果,要計算出左邊輸入的內容,是非常非常困難的。但與此同時,驗證既定的輸入內容是否能產生所需的輸出結果卻非常容易。請記住,這臺機器每次都會針對一個詞語給出相同的輸出結果。

如果我給你一個數字,比如72533,然後問你“這個數字輸進機器中,能得到一個以000開頭的詞語或數字嗎?” 你所需要做的就是把數字扔進機器中,看看你在右邊得到了什麼就行。


這臺機器最重要的特性就是:給定一個輸出,計算輸入非常困難,但如果有輸入和輸出,很容易就能驗證輸入是否能夠得到這個輸出。

如何用這臺機器封存賬本頁

我們將使用這臺魔術機器為我們的頁面生成一個“印章”。

假如我給你兩個盒子。第一個盒子包含數字20893。然後,我問你:“你能算出一個數字,使它加上第一個盒子中的數字,然後送入機器,最後會給我們一個以三個零開始的單詞嗎?”在之前我們說過了,算出這個數字的唯一方法就是遍嘗宇宙中的每一個數字。


經過成千上萬次嘗試,我們偶然發現一個數字21191,當它加上20893(即21191 + 20893 = 42084)並送入機器時,會產生一個滿足我們要求的詞。


在這種情況下,數字21191就成為20893號的印章。假設有一個頁面上記有數字20893,為了封印該頁面,我們將在其上面放置一個標記為“21191”的徽章。一旦密封號碼(即21191)能夠恰好“卡”在頁面上,頁面就被密封。


密封號碼被稱為“工作量證明”,意思是這個數字是辛苦算出它來的證明。

如果有人想驗證頁面上的記錄是否被更改,他所要做的就是將頁面上的內容與密封號碼一起新增到魔法機器中。如果機器得出的結果是以三個零的打頭的字,則內容沒有被修改過。如果出來的單詞不符合我們的要求,那我們可以丟棄該頁面了,因為它的內容已經被修改過了。

我們將使用類似的密封方法來密封我們所有的記錄頁面,並最終將它們安排在我們各自的資料夾中。

最後,封印頁面

為了密封記錄交易內容的頁面,我們需要計算出一個數字將它附加到交易列表中,然後輸入機器中,最後得出一個以000開頭的結果。

注意:“以三個零開頭的詞”只是我舉例來演示雜湊函式的工作原理,真正的雜湊結果比這更復雜。


一旦在機器上計算出該數字,該頁面就被該數字封印了。隨便一個人都可以通過封印密碼驗證頁面內容的完整性。

現在讓我們回到記錄完第十條交易的時間。只要這個頁面被用完了,每個玩家就會開始計算密封這個頁面的“封印密碼”。第一個計算出來的玩家會將封印密碼告訴系統內的所有玩家。

一聽到封印密碼,每個玩家就開始驗證這個密碼是否正確,如果密碼正確,每個玩家都用這個號碼標記他們的頁面,並將其放在他們的資料夾中。


但如果有人,比如7號玩家說“這個封印密碼不正確,我驗證不出來”時該怎麼辦?這種情況極少發生,如果發生了,那麼可能有以下原因:

1、他可能誤解了網路中公佈的交易;

2、他可能誤寫了網路中公佈的交易;

3、他可能為了自身的利益原因,試圖搞欺詐。

不管原因是什麼,7號玩家只有一個選擇——丟棄他的頁面並從別人那裡複製該頁面,以便他也可以將它放在資料夾中。

如果他不把他的頁面放在資料夾中,他就不能繼續記錄系統中交易,因此他也就不能繼續成為這個系統中的一份子。

有一個問題,如果我們都知道有一個人能算出密封號碼並將它公之於眾,為什麼還需要每個人花費時間資源去算呢,坐著等結果不就好了嗎?

因為有報酬!第一個算出來的人是能獲得酬勞的。這就是區塊鏈中的激勵機制。

舉個例子,假如5號玩家第一個算出了封印密碼,他就能獲得1塊錢的獎金。在比特幣區塊鏈上,這個獎金就是比特幣。獎金促使每個玩家繼續為系統工作。

朋友們,這就是區塊鏈工作的原理。在這裡,將賬本的每個頁面視為一個塊,整個賬本視為一條鏈,這就是區塊鏈。