幾張趣味圖帶你透徹了解區(qū)塊鏈是如何工作的?
為什么說區(qū)塊鏈是“信任的機器”?它是如何工作的?這有篇最簡單的解釋!
區(qū)塊鏈的游戲規(guī)則是必須有足夠的人不想依靠第三方來進行交易。 多少人才算“足夠多”呢?最少三個。
我們假設有十個玩家想放棄銀行或任何第三方,經相互同意,他們在不知道對方身份的情況下,擁有對方賬戶的詳細信息。至此,游戲開始。
一個空白賬本
每個玩家都從一個空白賬本開始,隨著“游戲”的開始,每個玩家不斷往這個空賬本上記東西,交易越來越多,賬本的頁數(shù)也在不斷增加。這個賬本就是我們追蹤交易紀錄的“寄存器”。
當有交易發(fā)生時
系統(tǒng)中的每個玩家都擁有一個空白賬本,每當有交易發(fā)生時,他們就將交易記錄在賬本上。
現(xiàn)在,假設2號玩家想給9號玩家轉10塊錢。為了進行交易,2號在系統(tǒng)里吼一聲“大伙兒,我要給9號妹子轉10塊錢,你們快在賬本上記一下”。
接下來,每個玩家就開始檢查2號是否真的有10塊錢轉給9號,如果她真的有足夠的錢,那么所有玩家都會在賬本的空白頁記下這筆轉賬。這樣,一筆交易就算完成了。
交易繼續(xù)
隨著時間的流逝,系統(tǒng)里有越來越多的玩家需要轉賬給其他人。無論他們什么時候想轉賬,都只需要在系統(tǒng)里告訴所有玩家,只要有一個人聽到了,他/她就會將這筆交易記在賬本上。
記賬繼續(xù),直到所有玩家將當前的空白頁用完。假設一頁賬本能記十筆交易,當十筆交易完成時,那么這個頁面就不能再繼續(xù)記賬。
這時候只需將這頁記錄保存到文件夾中,然后翻到下一個空白頁,繼續(xù)記賬就行。
那頁被翻過去的頁面
當我們將記滿10筆交易記錄的頁面翻過去之前,需要使用系統(tǒng)中每個玩家都同意的“神秘鎖(密鑰)”來將它密封起來。通過密封,能夠確保一旦將這頁記錄的副本發(fā)放到每個玩家的文件夾中后,任何人都無法對它做出任何更改。一旦進入文件夾中,它將永遠被密封在里面。“密封”是這個游戲的關鍵所在。
如何密封頁面
在我們了解如何封印頁面之前,先來看看“封印”的工作原理。
魔法機器
想象一下,有一臺被厚厚的墻壁包圍著的機器,如果你從機器左邊發(fā)送一個包含著內容的盒子進去,在右邊,它會吐出一個包含其他內容的盒子。
這臺機器被稱為“哈希函數(shù)”,但我們不必那么學術,所以就叫它魔法機器吧。
假設你從左邊輸入數(shù)字4,我們會發(fā)現(xiàn)它從右邊吐出下面的單詞:‘dcbea‘。
是如何將數(shù)字4轉換成這個詞的?沒人知道。 但我們需要知道這是一個不可逆轉的過程。 如果我們知道右邊出來的詞語是“dcbea”,是沒法計算出從左邊給機器輸進了什么東西,但如果我們每次從左邊給機器輸進數(shù)字4,右邊必然會出現(xiàn)詞語“dcbea”。
讓我們試試輸進不同的數(shù)字,比如“26”。我們這次得到‘94c8e‘。有趣!
如果我問你下面這個問題:
你能告訴我應該從機器的左側輸進什么東西,以便我能從右側得到以三個零開頭的數(shù)字或單詞?例如,000ab或00098或000fa或其他內容。
我之前說過,這個機器有一個奇怪的屬性:如果我知道右邊輸出的東西,是沒辦法算出左邊輸進了什么東西的。有這樣一臺機器,怎么可能回答得出上面的問題呢?
我想到一個方法,逐一嘗試每一個數(shù)字,直到我們得出以000開頭的詞語。或許經過數(shù)千次的嘗試,我們能得到這樣的結果。
當我們給定了右邊的輸出結果,要計算出左邊輸入的內容,是非常非常困難的。但與此同時,驗證既定的輸入內容是否能產生所需的輸出結果卻非常容易。請記住,這臺機器每次都會針對一個詞語給出相同的輸出結果。
如果我給你一個數(shù)字,比如72533,然后問你“這個數(shù)字輸進機器中,能得到一個以000開頭的詞語或數(shù)字嗎?” 你所需要做的就是把數(shù)字扔進機器中,看看你在右邊得到了什么就行。
這臺機器最重要的特性就是:給定一個輸出,計算輸入非常困難,但如果有輸入和輸出,很容易就能驗證輸入是否能夠得到這個輸出。
如何用這臺機器封存賬本頁
我們將使用這臺魔術機器為我們的頁面生成一個“ 印章 ”。
假如我給你兩個盒子。第一個盒子包含數(shù)字20893。然后,我問你:“你能算出一個數(shù)字,使它加上第一個盒子中的數(shù)字,然后送入機器,最后會給我們一個以三個零開始的單詞嗎?”在之前我們說過了,算出這個數(shù)字的唯一方法就是遍嘗宇宙中的每一個數(shù)字。
經過成千上萬次嘗試,我們偶然發(fā)現(xiàn)一個數(shù)字21191,當它加上20893(即21191 + 20893 = 42084)并送入機器時,會產生一個滿足我們要求的詞。
在這種情況下,數(shù)字21191就成為20893號的印章。假設有一個頁面上記有數(shù)字20893,為了封印該頁面,我們將在其上面放置一個標記為“21191”的徽章。一旦密封號碼(即21191)能夠恰好“卡”在頁面上,頁面就被密封。
密封號碼被稱為“工作量證明”,意思是這個數(shù)字是辛苦算出它來的證明。
如果有人想驗證頁面上的記錄是否被更改,他所要做的就是將頁面上的內容與密封號碼一起添加到魔法機器中。如果機器得出的結果是以三個零的打頭的字,則內容沒有被修改過。如果出來的單詞不符合我們的要求,那我們可以丟棄該頁面了,因為它的內容已經被修改過了。
我們將使用類似的密封方法來密封我們所有的記錄頁面,并最終將它們安排在我們各自的文件夾中。
為了密封記錄交易內容的頁面,我們需要計算出一個數(shù)字將它附加到交易列表中,然后輸入機器中,最后得出一個以000開頭的結果。
注意:“以三個零開頭的詞”只是我舉例來演示哈希函數(shù)的工作原理,真正的哈希結果比這更復雜。
一旦在機器上計算出該數(shù)字,該頁面就被該數(shù)字封印了。隨便一個人都可以通過封印密碼驗證頁面內容的完整性。
現(xiàn)在讓我們回到記錄完第十條交易的時間。只要這個頁面被用完了,每個玩家就會開始計算密封這個頁面的“封印密碼”。第一個計算出來的玩家會將封印密碼告訴系統(tǒng)內的所有玩家。
一聽到封印密碼,每個玩家就開始驗證這個密碼是否正確,如果密碼正確,每個玩家都用這個號碼標記他們的頁面,并將其放在他們的文件夾中。
但如果有人,比如7號玩家說“這個封印密碼不正確,我驗證不出來”時該怎么辦?這種情況極少發(fā)生,如果發(fā)生了,那么可能有以下原因:
1、他可能誤解了網絡中公布的交易;
2、他可能誤寫了網絡中公布的交易;
3、他可能為了自身的利益原因,試圖搞欺詐。
不管原因是什么,7號玩家只有一個選擇——丟棄他的頁面并從別人那里復制該頁面,以便他也可以將它放在文件夾中。
如果他不把他的頁面放在文件夾中,他就不能繼續(xù)記錄系統(tǒng)中交易,因此他也就不能繼續(xù)成為這個系統(tǒng)中的一份子。
有一個問題,如果我們都知道有一個人能算出密封號碼并將它公之于眾,為什么還需要每個人花費時間資源去算呢,坐著等結果不就好了嗎?
因為有報酬!第一個算出來的人是能獲得酬勞的。這就是區(qū)塊鏈中的激勵機制。
舉個例子,假如5號玩家第一個算出了封印密碼,他就能獲得1塊錢的獎金。在比特幣區(qū)塊鏈上,這個獎金就是比特幣。獎金促使每個玩家繼續(xù)為系統(tǒng)工作。
朋友們,這就是區(qū)塊鏈工作的原理。在這里,將賬本的每個頁面視為一個塊,整個賬本視為一條鏈,這就是區(qū)塊鏈。