爲何說區塊鏈是「信任的機器」?它是如何工做的?這有篇最簡單的解釋!api
ll本文翻譯自Authorito Capital CEO的博文《WTF is The Blockchain?》,略有刪減。網絡
ll原文連接:https://hackernoon.com/wtf-is-the-blockchain-1da89ba19348函數
區塊鏈的遊戲規則是必須有足夠的人不想依靠第三方來進行交易。多少人才算「足夠多」呢?最少三個。區塊鏈
咱們假設有十個玩家想放棄銀行或任何第三方,經相互贊成,他們在不知道對方身份的狀況下,擁有對方帳戶的詳細信息。至此,遊戲開始。翻譯
一個空白帳本遊戲
每一個玩家都從一個空白帳本開始,隨着「遊戲」的開始,每一個玩家不斷往這個空帳本上記東西,交易愈來愈多,帳本的頁數也在不斷增長。這個帳本就是咱們追蹤交易紀錄的「寄存器」。資源
當有交易發生時it
系統中的每一個玩家都擁有一個空白帳本,每當有交易發生時,他們就將交易記錄在帳本上。比特幣
如今,假設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號玩家說「這個封印密碼不正確,我驗證不出來」時該怎麼辦?這種狀況極少發生,若是發生了,那麼可能有如下緣由:
一、他可能誤解了網絡中公佈的交易;
二、他可能誤寫了網絡中公佈的交易;
三、他可能爲了自身的利益緣由,試圖搞欺詐。
無論緣由是什麼,7號玩家只有一個選擇——丟棄他的頁面並從別人那裏複製該頁面,以便他也能夠將它放在文件夾中。
若是他不把他的頁面放在文件夾中,他就不能繼續記錄系統中交易,所以他也就不能繼續成爲這個系統中的一份子。
有一個問題,若是咱們都知道有一我的能算出密封號碼並將它公之於衆,爲何還須要每一個人花費時間資源去算呢,坐着等結果不就行了嗎?
由於有報酬!第一個算出來的人是能得到酬勞的。這就是區塊鏈中的激勵機制。
舉個例子,假如5號玩家第一個算出了封印密碼,他就能得到1塊錢的獎金。在比特幣區塊鏈上,這個獎金就是比特幣。獎金促使每一個玩家繼續爲系統工做。
朋友們,這就是區塊鏈工做的原理。在這裏,將帳本的每一個頁面視爲一個塊,整個帳本視爲一條鏈,這就是區塊鏈。