去中心化、中介化的區塊鏈技術

除非你是山頂洞人,我確信你已經聽說了比特幣(Bitcoins)和區塊鏈。畢竟,它們是熱點,是這幾天媒體最喜歡的話題,也是年度流行詞。連那些從來沒有聽過加密貨幣(cryptocurrency)、根本不知道它如何運行的傢伙們也在談論它。我的朋友中,非技術宅可比技術宅要多。爲了讓我給他們解釋這個新流行詞,他們已經騷擾我好幾個星期了。我猜,成千上萬人跟我有着同樣的感受。當這種情形出現,是時候要寫一些東西了,好讓每個人都能戳醒那些糊塗蛋——這就是這篇推送的目的——以淺白的英文寫作,讓任何普通的網友都能理解。

區塊鏈:爲什麼我們需要這麼複雜的東西?
“每一個複雜的問題都有一個清晰、簡單並且是錯誤的答案。”——H.L.Mencken*
與互聯網上的其它任何推送相反,我們不會一開始就定義什麼是區塊鏈,我們會先認識它要解決的問題。

想象一下,Joe 是你最好的朋友。他正在海外旅遊。在他假期的第五天,他給你一個電話,“Dude,我把錢花光了,江湖救急。”

你回答”馬上匯款“然後掛掉電話。

然後你打電話給你銀行賬戶的經理,”請從我的賬戶轉 1000 美元到 Joe 的賬戶上“。

你的賬戶經理回覆,”收到,先生“。
他打開賬簿,查看你的賬戶以確定你有足夠的餘額轉出 1000 美元給 Joe。因爲你是個土豪,賬上還有大量餘額,因此,他在賬簿上登記了一個條目,正如下圖所示:

發生了什麼事?你和 Joe 都委託銀行來管理你們的錢。並沒有物理票據的實際流動來轉移你們的錢。所需的一切不過是賬簿上的一個條目。或者更準確一點,賬簿上的一個既不受你和 Joe 控制、也不被你們所擁有的條目。

這就是現有體系的問題。
爲了在我們之間建立互信,我們依賴於獨立第三方。
多少年了,我們依賴於這些中介以信任彼此。你也許會問,“依賴他們有什麼毛病?”
毛病在於,它們清一色只是數字。要在社會上引發一場混亂,所需的不過是一個人或者一個機構走向貪腐墮落,無論是有意識地,還是無意識地。
· 要是記錄下這筆轉賬的賬簿在一場大火中燒成灰燼了呢?
· 要是,你的銀行經理搞錯了,寫了個1500 美元而不是 1000 美元呢?
· 要是,他根本就是有意爲之呢?
多年以來,我們一直把自己所有的雞蛋都放在一個籃子裏,並且還是別人的籃子。
會有這樣一個系統嗎,在那裏我們無需銀行就可以轉賬?
要回答這個問題,我們需要挖得更深,問自己一個更好的問題(畢竟,只有更好的問題纔會導向更好的答案)。
想一下,轉賬意味着什麼?只是賬簿上的一個條目而已。那麼更好的問題將是——
是否有某種手段,可以在我們中間維護那本賬簿,而不是讓其他人來爲我們操作?
現在,總算有一個值得探究的問題了。而答案你或許已經猜到了。區塊鏈就是這個深奧問題的答案。
它就是一種在我們中間維護賬簿而非依賴其他人來爲我們代勞的方法。
你能跟上來嗎?很好。因爲現在許多問題已經開始在你腦海中爆炸,我們將學習這一分散式賬簿是如何工作的。
好吧,告訴我,它是怎麼工作的?
這一方法的要求是:必須有足夠的人不想依賴第三方。只有這樣,這羣人才能靠自己來維護他們的賬簿。
“只讓人們在比特幣帶來的交易中獲取比特幣,或許是有意義的。一旦有足夠的人這樣想,它就會變成一個自我實現的預言。”——中本聰,2009*
多少人纔算是夠?至少要 3 個。打個比方,我們假設有 10 個人想拋棄銀行以及任何第三方。根據相互之間的協議,他們可以一直擁有彼此的賬號信息——但不知道其他人的真實身份
1.一個空的文件夾
一開始的時候,每個人都掌握着一個空文件夾。正如我們要進行的那樣,這 10 個人都將持續向他們的當前的文件夾中添加紙張。而這些紙張的集合將形成追蹤交易的賬簿。
2.一筆交易發生的時候
然後,這個網絡中的每個人都將有紙筆在手。每個人都準備着記錄下該系統內部發生的任何交易。
現在,假設 #2 想要轉 10 美元給 #9。
爲了完成這次交易,#2 吼了一嗓子,告訴每個人,“我想轉 10 美元給 #9。大家都在自己的小本本上記下來!

每個人都瞄一下 #2 是不是有足夠的餘額可以轉 10 美元給 #9。如果她有足夠的錢,每個人都在自己的空白頁上爲這筆交易做了一個記錄。
這樣,一筆轉賬就被認爲是完成了。

3.交易繼續發生
時間過得很快,這個網絡中的更多人想要轉賬給其他人。無論什麼時候他們想要做一筆交易,他們就向其他所有人宣告這筆交易。無論是誰,一聽到這個宣言,就在他/她自己的紙張上寫下來。
這樣的實踐持續進行,直到每個人都用完了他們當前頁的空間。假設 1 頁紙可以記錄 10 筆交易,一旦10筆交易完成,每個人就都用完了空間。
那麼,是時候該將這頁紙存到文件夾裏面,然後拿出一張新的紙、重複上述步驟2了。

4.存放紙張
在你將這頁紙存入我們的文件夾之前,我們需要使用該網絡中每個人都同意的唯一一把鑰匙來密封它。通過密封,我們可以保證,一旦該頁紙的備份已經被存入每一個人的文件夾,沒有人能夠對它作出任何更改——不止今天,不止明天,也不止是一年以後。一旦放入文件夾中,它將永遠呆在文件夾裏面——被封存起來。而且,如果每個人都信任這個封條,那麼每個人都會相信該頁紙中的內容。而這頁紙的封存手法,就是這一方法的關鍵。
[術語箱] 這一用來保護紙張內容的東西被人們稱爲“礦”,但爲了簡化它,我們還是稱之爲“封條”。
早些時候,第三方/中介爲我們賦予信任,其形式是:無論它們在賬簿上已經寫了什麼,都永遠不可變更。在一個分散式的、去中心化的系統中,就像上述我們的系統一樣,這種封條將提供信任替代。
因缺斯汀!那我們怎麼密封這份記錄呢?
在我們學習如何能密封這頁紙之前,我們要知道,一般而言,封條是怎麼工作的。要做到這些,先決條件是學習一些東西,我喜歡稱之爲……
魔法機器
想象一個被厚牆圍起來的機器。如果你從左邊塞一個存有東西的盒子進去,它就會吐出一個帶着其它東西的盒子。
[術語箱] 這個機器被稱爲“哈希方程”,但我們又沒有心情搞得那麼專業。所以,今天,它們就叫“魔法機器”。
-魔法機器(又叫做 哈希方程)-
假設,我們從左邊塞了個數字 4 進去,我們會發現,它在右邊吐出了下列字串:‘dcbea’。

數字 4 是在怎麼轉化成這串字符的?沒有人知道。而且,這個過程是不可逆的。得到了這串字符 ‘dcbea’,也不可能搞清楚這機器從左邊接收到了什麼。但是,任何時候,你輸入數字4給這臺機器,它都總是會吐出同樣的字符,‘dcbea’。

  • hash(4) ==dcbea -
    來試試發送一個別的數字進去。26,怎麼樣?

  • hash(26)==94c8e -
    這次我們得到了 ‘94c8e’,看來字符同樣可以包含數字。有意思!

假如我現在問你如下問題,事情會變成什麼樣?

“你能不能告訴我,要想在機器右邊得到三個 0 開頭的一串字符,我該從左邊輸入什麼東西進去呢?比如,000ab,或者,00098,或者,000fa,或者其它情況中的任何一個。”
想一想這個問題吧。

我已經告訴過你,這臺機器有個屬性:在我們從右邊得到期望的輸出值之後,我們無法計算出來什麼是我們必須從左邊輸入進去的。給我們這樣一臺機器,我們如何能回答我問的那個問題?

我可以想出一個辦法。爲什麼我們不一個接一個地遍歷宇宙中所有數字,直到我們得到一個三個 0 開頭的一串字符?

-嘗試所有數字以算出需要的輸入值-
樂觀估計,經過幾千次嘗試之後,我們最終會得到將在右邊產生要求的輸出值的一個數字。

在給定輸出值的時候,要算出輸入值是極其艱難的。但與此同時,如果預測的輸入值可以產生需要的輸出值的話,它又是極爲容易驗證的。要記住,投入一個同樣數字,這臺機器每一次都會吐出同樣的字符。

如果我給你一個數字,比如 72533,然後問你一個問題:“這個數字,輸入這臺機器之後,會產生一個以三個 0 開頭的字符串嗎”,你覺得要得出答案有多難呢?
你要做的一切,不過是丟這個數字進去,然後查看我們在右邊得到了什麼。就這樣。
這樣的機器最重要的屬性就是——“給定一個輸出值,要算出輸入值是極端困難的。但是,給定輸入值和輸出值,要檢驗該輸入是否會導致該輸出,卻是非常容易的。”
在這片文章剩下的部分,我們要記住這臺魔法機器(或者說哈希方程)的這一屬性:
“給定一個輸出值,要算出輸入值是極端困難的。但是,給定輸入值和輸出值,要檢驗該輸入是否會導致該輸出,卻是非常容易的。”
如何用這樣的機器來加密一份文件?
我們將使用這臺魔法機器爲我們的紙張產生一個密封條。按照慣例,我們將從一種想象的情形開始。
想象我給你了兩個盒子。第一個盒子裝着數字 20893。然後我問你,“你能不能找出一個數字,加上裝在第一個盒子裏面的數字以後,輸進這臺機器,最終會給我們一個以三個 0 開頭的字符?”
這種情形跟我們在之前看到的很相似,而我們已經知道,算出這樣一個數字的爲唯一方法就是窮舉整個宇宙中每一個可能的數字。

又是幾千次嘗試之後,我們會偶然發現一個數字,比如 21191,加上 20893 以後(比如:21191+20893 = 42084)輸入機器,將產生一串符合我們要求的字符。

在這個例子中,數字 21191 就成了數字 20893 的封條。假設現在有一張紙,數字 20893 寫在上面。爲了密封這頁紙(比如:使得沒有人能更改這頁紙上的內容),我們將蓋一個帶有標籤 ‘21191’ 的徽章在上面。一旦密封數字(比如:21191)被戳在紙上,這頁紙就被密封了。
-密封數字-
[術語箱] 密封數字又被稱爲“工作量證明”,意思是,這一數字證明了爲了計算出它來已經付出的努力。爲了我們的目的,我們最好還是稱之爲“密封數字”。
如果任何人想驗證這頁紙是否已經被替換了,他需要做的一切不過是——將這頁紙上的內容與密封數字加在一起、把和值輸入那臺魔法機器。如果機器給出了一串三個 0 開頭的字符,那麼內容就沒有被改變。如果出現的字符不能滿足我們的要求,我們就可以丟掉這頁紙了,因爲它的內容已經有了水分,沒有任何用處了。
我們將使用一個簡單的密封機制來封存所有的記錄,最終在我們各自的文件夾中編排好它們。
最後,封存我們的文件
要密封包含着我們網絡中交易內容的記錄,我們將需要算出一個數字,該數字在添加到交易記錄清單上、輸入機器以後,可以使我們得到一串三個 0 開頭的字符
注意:我一直在使用的“三個 0 開頭的字符”,只是一個例子。它闡明瞭哈希方程是怎麼工作的。實際當中的挑戰要比這個複雜得多。

我們會在這機器上花費時間與電力,然而一旦我們算出那個數字,這頁文件就被那個數字封存起來。永遠永遠,如果有人嘗試改變這頁紙上的內容,這個密封數字允許任何人去驗證這頁紙的完整性。

現在,我們既已知道封存記錄的手法,我們將回到我們在這張紙上寫完了 10 條交易、沒有空間書寫更多記錄的時候。

一旦每個人都用盡一頁紙的空間、無法記錄進一步的交易,他們就開始賣力地計算該頁紙的密封數字,使得它可以被藏入文件夾中。在網絡中,每個人都進行這個計算,而最早算出密封數字的那個人會向其他所有人宣佈這個數字。

聽到密封數字之後,每個人都立即驗證它是否能產生要求的輸出值。如果是的,每個人都爲他們的紙張標上這個數字,然後把紙張放入文件夾中。

但是,如果對某人,比如 #7 來說,那個被宣佈的密封數字無法產生要求的輸出值,怎麼辦?這種情形可並不少見。可能的原因有:

· 他可能聽錯了之前在網絡中宣佈的交易
· 他可能寫錯了之前在網絡中宣佈的交易
· 他可能在記錄交易的時候試圖作弊,爲了謀私,或爲討好網絡中的某些人
無論原因是什麼,#7 只有一個選擇——放棄他的記錄、從其他人處獲得拷貝,以使他也可以將紙張放入文件夾。除非他不將他的紙張放入文件夾,他也就無法繼續記錄進一步的交易,這會因此禁止他成爲網絡中的一員。

大部分人同意的密封數字,無論是它是什麼,都會成爲那個可信的密封數字。

可是,如果他們知道其他人會算出它然後宣佈它,爲什麼每個人都要耗費資源來進行計算呢?爲什麼不坐視不理、等着抱大腿呢?

好問題。這就是激勵加入到這幅圖景的地方。每一個區塊鏈的成員都有資格獲得獎勵。第一個計算出密封數字的人將得到免費的金錢作爲對他的努力(比如:付出的 CPU 算力和電力)的獎勵。

簡單地設想一下,如果 #5 爲一頁記錄算出了密封數字,他得到了一些免費的錢作爲獎勵,假設是憑空鑄造出來的1美元。換句話來說,#5的賬戶餘額增加了1 美元,同時沒有任何人的賬戶餘額有所減少。

這就是比特幣變爲現實的方式。它是在區塊鏈(比如:分散式的賬簿)上被用來交易的第一種貨幣。同時,人們被獎勵以比特幣作爲回報,以使在網絡上,(計算密封數字的)努力會繼續進行。

當足夠多的人持有比特幣,比特幣會升值,使得更多人想要比特幣;這會使比特幣進一步升值;這升值又使更多人想要比特幣;這願望又進一步使比特幣升值;如此循環往復。

這種獎勵,使得網絡中的每一個人都不停歇地工作

一旦每個人都往文件夾中疊進一頁紙,他們會拿出一頁空白紙張,再一次重複整個過程——直至永遠。

[術語箱] 將一頁紙想象爲記錄交易的一個區塊、把文件夾想象爲紙張(區塊)的鏈條,結果是,它變身成了一個區塊鏈。
老鐵,這就是區塊鏈的工作方式。

然而。我還有一件小事沒有告訴你。

想象文件夾中已經有 5 頁紙——都被一個密封數字加密了。如果我回溯到第二頁紙、改動交易記錄以謀私,會怎麼樣?密封數字會讓任何人察覺到交易記錄中的矛盾,對嗎?那假如我更進一步、爲修改後的交易記錄計算出了一個新的密封數字、將這替代品戳到紙上呢?

爲了防止這個問題,即有人回溯並且修改紙張(區塊)和密封數字,這裏還有一個解釋,關於一個密封數字是怎麼計算出來的。

防止對密封數字的修改
還記得我是怎麼跟你說的嗎?我給了你兩個盒子——一個裝着數字 20893,另一個空的讓你來計算?實際上,爲了在區塊鏈上算出密封數字,有三個盒子,而非兩個——兩個提前裝好的,一個被用來計算的。

而當所有三個盒子裏面的內容加起來、輸入魔法機器後,從機器右邊出來的答案必須滿足要求的條件。

我們已經知道了,一個盒子裝着交易記錄的清單,一個盒子將裝着密封數字。而第三個盒子,裝着前一張紙的魔法機器輸出值。

有了這個優雅的小心機,我們可以保證,每一頁紙張都依賴於它之前的紙張。因此,如果有人要修改一張歷史記錄,他將同樣必須改變該頁以後所有紙張的內容和密封數字,以使這條鏈保持一致。

如果某個人,不屬於我們在一開始設想的 10 個人,試圖作弊,修改區塊鏈(保存了所有交易記錄清單紙張的文件夾)中的內容,他將不得不調整多頁紙張、爲所有這些紙張計算新的密封數字。我們都知道計算密封數字有多麼困難。因此,這網絡中的一個壞蛋欺負不了九個老實人。

將會發生的事情是,從這個不誠實的傢伙嘗試作弊的那一夜開始,他將要在這網絡中創造另一個區塊鏈,但那個區塊鏈將永遠無法趕上可信的區塊鏈——僅僅因爲一個傢伙的努力和速度不可能戰勝九個人積累起來的努力和速度。因此,這保證了在一個網絡中,最長的鏈就是可信的鏈。

最長的鏈就是誠實可信的鏈。

當我告訴你一個不誠實的傢伙沒法欺負九個實誠人的時候,它是否點醒了你什麼?

萬一,不是一個,而是六個人搞事情呢?
在這種情況下,這個協議將會落空,流於表面。它就是人們所知的“51%×××”。如果該網絡中的大部分人決定變得不誠實並且欺騙網絡中剩下的人,這個協議將無法實現它的目標。
任何時候,如果區塊鏈可能會陷落,這就是其脆弱性的唯一原因。知道了這一點,它也就不太可能發生了。但是,我們所有人都必須知道這個系統的這個弱點。它建立在這樣的假設之上:一羣人中的大部分都總是誠實的。
老鐵。這就是有關區塊鏈的一切。任何時候你發現有人感覺落後了、感到迷茫,“區塊鏈到底是什麼鬼?”你知道你可以指引他們到哪裏去。
給這個鏈接做個書籤。
想到了某些人現在正應該讀讀這篇東西?“分享”按鈕就在你手上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章