如果你被困在一座荒島上,懂得如何運作去中心化共識的流程(換句話說,親手運營一條非常簡單的區塊鏈)可以說是非常有用的。你只需要一些倖存者同伴、這篇帖文、一支筆以及幾張紙。

如果你不確定這項技能是否有助於求生,務必閱讀我的上篇帖文,瞭解區塊鏈如何能夠極大地改善島上生活。


讓我們回顧下最初的故事,和勇敢無畏的主人公們(墜落在南太平洋某座荒島上的 Hugo、Sawyer、KateJack
)一起重溫那段經歷。

簡要回顧:這羣人打算髮行 IslandCoin (島幣),即一種具有革命性的新貨幣,終結島上不健全的物物交易經濟。這羣人一致覺得出於公平起見,每個人以
100
個幣起步。因爲他們沒有金屬來鑄造真實的貨幣,所以只能用一些紙來造幣。由於存在信任問題,這羣人還無法就指派哪個人記錄餘額情況達成一致。他們唯一的選擇就是一起維護餘額情況。

我們先討論一下:對於我們的島嶼用例來說,最簡單的區塊鏈實施方案會是怎樣的。在今後的帖文中,我們可以探究一下其它實施方案,並將它們和諸如_工作量證明 _
及_權益證明_之類的概念聯繫起來——這有助於我們發現它們的利弊。不過,眼下還是先從簡單的開始吧。

我們的目標是什麼呢?實際上非常簡單——我們打算在一張紙上維護一張簡單的餘額表。這張表格會顯示每位主人公擁有多少貨幣。訣竅在於,我們不能單憑一張紙來記錄真相——我們必須維持公平,讓每位成員保有各自的版本——這就是
_ 去中心化_的部分。當然,我們希望 4 張紙上最終顯示的餘額情況是一樣的——這就是_共識_部分。

那麼,這張紙看上去是什麼樣的呢?

這張紙上記錄的是_第 1 次_共識情況——因此被標記爲第 1 天。這些餘額是從哪兒來的呢?我們此前已經一致同意每位成員以 100
個幣起步。我們還需要其中一位倖存者在紙上做記錄。是誰來寫真的無所謂,我們就選 Hugo
吧。由他向大家公佈這張紙上的內容並確保每個人都保存一份副本(忘了提了,這座島上還有一臺超棒的影印機)。

因爲貨幣餘額預計會發生變化,我們打算在每天結束時創建一個更新的版本。但更新後的版本不一定總是由 Hugo 發佈的——畢竟我們希望儘可能保持公平。

由於團體內部缺乏信任感,另外重要的一點就是讓每位成員都確認狀態的更新情況。要實現這一點,一個簡單的方式就是讓每位倖存者在每張紙上簽字——但是隻有在他們同意上面記錄的內容的情況下才簽字。

需要多少人在這張紙上簽字才能算作最終批准呢?我們需要達成_共識_,因此要多數人簽字通過。由於一共有 4 個人,多數即至少 3 個人。上述紙條經由 4
個人的簽字,因此肯定是最後版本了。爲什麼不要求 4 個人都在紙條上簽字呢?因爲這樣可能會因個人原因危害到整個過程。如果 Sawyer
外出垂釣航行幾天,這羣人必須等到他回來才能更新餘額——這就賦予了個人過高的權力。爲什麼非要多數人簽字呢?爲什麼 4 人中有 2
人簽字還不足夠呢?因爲如果只要求 4 人中有 2 人簽字,最後可能變成 2 人(Hugo 和 Sawyer)簽署了一個版本的餘額,而另外 2 人(Kate
和 Jack)簽署了另外一個版本。我們無法將兩個互相沖突的現實版本都算作最終版本。


第 2 天早晨,Kate 想買個西紅柿。Hugo 以 2 個幣的單價出售西紅柿。她想轉給 Hugo 2 個幣。Kate
拿出一張新的紙,在上面記錄了這次轉賬:

這是 Kate 的首次交易,因此她這樣標記了。另外,Kate 在這張紙上籤了字。她必須在紙上簽字,從而確保其他人無法在她的賬戶上僞造轉賬請求。

第 2 天結束之際,這羣人想要發佈一份更新過餘額的版本。第一天是 Hugo
發佈的,並收集了所有人的簽字。輪流做這件事比較合乎情理。這羣人同意簡單地輪序:Hugo、Sawyer、Kate、Jack、Huge、Sawyer
以此類推。這意味着第二天由 Sawyer 負責發佈更新後的狀態。他發佈的紙條記錄了 Kate 的轉賬:

Sawyer 的紙條還不是最終版本,因爲只有 Sawyer 自己簽過字。他需要收集更多的簽字。Sawyer
和其它人輪流溝通,讓每個人覈對並簽字。這張紙條很容易覈對。首先,覈對者需要檢查自己收集的紙條,找到記錄前一天(即本例中的第一天)餘額狀態的紙條。接下來,覈對者需要仔細檢查新的轉賬清單。就這個例子而言,只記錄了
Kate 的一次交易。這次轉賬很容易覈對,我們可以確保 Kate 簽過字,以及她的確有足夠的餘額向 Hugo 付款。

一旦每位島上居民完成了他們的核對流程並在紙條上簽字,Sawyer
第二天就有了記錄最終狀態的紙條,可以向所有人發佈。所有人都影印一份副本,然後就可以安然入睡了。


我們迎來了第 3 天。這個系統正常運作,所有人都高興地花着自己的貨幣。Hugo 想用 10 個幣從 Sawyer 那兒買一些木柴。Sawyer 想用 25
個幣從 Jack 那兒買一些藥片,而 Jack 想花 2 個幣從 Hugo 那裏買個西紅柿。他們各自用一張紙詳細記錄下自己的轉賬:

隨着夜幕的降臨,今日餘額情況的發佈者是 Kate。爲了確保 Kate
將這些轉賬記錄在了她自己的紙條上,剩下的人需要各自將轉賬請求影印一份給她。將副本給所有人的確是有意義的,因爲想要進行轉賬的人不必記住今天輪到誰發佈更新情況。

如果 Jack 比較磨蹭,當他把自己的轉賬請求副本交給 Kate 時,Kate 已經更新好了今天的餘額狀態:

Jack 會很沮喪,因爲他的轉賬沒來得及記錄到餘額狀態裏。這意味着 Hugo 不會收到 Jack 購買西紅柿的付款,也就不會給 Jack
西紅柿作爲晚餐。Jack 今晚要餓着肚子睡覺了。他衝出去找別的食物,沒有在今天 Kate 的紙條上簽字。幸運的是,Kate
從剩餘的成員那裏得到了足夠的簽字:

Kate 成功收集到 3 個簽字,簽字者各自證明了該餘額確實符合轉賬及昨天的餘額。因爲多數人達成了共識,所以該餘額狀態表被視爲最終版本。


到了第 4 天,大家都不知道 Jack 的去向。他前一天晚上去釣魚,被暴雨困在了外面,沒有返回營地。這可能有點麻煩,因爲今天輪到 Jack 更新餘額狀態。

Kate 今天想要轉幾筆帳,她將這些轉賬記在紙上,並將副本分發給所有人:

傍晚時分,Jack 還沒有回來。這羣人之前已經約定好今天由 Jack 發佈餘額狀態,但是找不到他,因此跳過了今天的餘額更新。


第 5 天輪到 Hugo 負責餘額狀態更新了。雨已經連續下了好幾天了,Hugo 想要個暖和點的地方睡覺。他讓 Sawyer 給他搭建一個小木屋。Sawyer
想要價 200 個幣。這有點麻煩,因爲 Hugo 只有 98 枚貨幣。然而,Hugo
產生了一個瘋狂的念頭,既然今天輪到他負責發佈餘額表,爲何不無中生有,加上一筆這麼大的轉賬呢 ?

今天沒有其它轉賬產生。不過 Hugo 昨天收到一筆來自 Kate 的轉賬,以及前天沒記錄的 Jack 的轉賬。他將這些轉賬連同他新加的假賬都添加到了紙條上:

儘管 Hugo 的轉賬根本說不通,他還是在更新過的紙條上簽字了。爲了讓這次狀態更新成爲最終版本,他需要再收集 2 個簽字。當他找到 Sawyer 和
Kate 時,他們注意到在上一份餘額表(即第 3 天的餘額表)上,Hugo 只有 92 個幣。他怎麼可能轉 200 個幣給 Sawyer
呢?他們拒絕在這份餘額表上簽字,除非 Hugo 改正這個錯誤並去除這筆無效轉賬。Hugo
不情願地同意了,並重新發布了一份正確的餘額表。他們最終在上面簽了字:

這次餘額更新成了最終版本,因爲上面有 3 個簽字。


到了第 6 天的早晨,Jack
終於回到了營地。他在暴雨中困了好幾天,未能參與前兩天的討論,也錯過了新轉賬的通知和餘額表更新的發佈。他實際上不確定自己現在有多少個幣。他向見到的第一個同伴要了最新版的餘額表。對方還給了他第
5 天的餘額表最終版本以及 Kate 在第 3 天發表且經過認可的餘額更新表。

對於 Jack 來說,和其他成員同步上是很容易的。他可以看到這些餘額更新表上的確有至少 3
個簽字,因此他會比較放心這些更新表的安全性。他還可以親自基於這些更新表以及他手上的最新版的更新表(即第 2 天的更新表)進行計算。這可以讓 Jack
毫無障礙地參與今天的轉賬,就像什麼都沒有錯過一樣。

該系統似乎運作順利。這的確有點過於簡單了,不過足以滿足島上居民的需求了。確實,我們沒有白紙的話,是無法運作區塊鏈的。大家一起坐了下來,通過發表白皮書來慶祝這一偉大的壯舉。

爲何能將其視作區塊鏈呢?對於新手來說,每天發佈的紙條代表一個區塊。每個區塊都有編號,並指向前一個區塊——形成了一條區塊鏈。爲了驗證餘額的現有狀態,任何人都必須從第一個區塊(第
1 天——創世塊)開始,並且按順序一個接一個地驗證所有區塊。餘額表是會逐漸累加的。

這是理想的區塊鏈實施方案嗎?不一定是。該區塊鏈實施方案可以通過多種方式改進。例如,這個方案只供 4
位居民使用。如果又有一位倖存者墜落到島上會怎麼樣呢?這份協議可以容納所有人嗎?這份協議目前是經過許可的,如何將它變成無需許可的呢?是否能將這份協議修改成
_ 工作量證明_或_權益證明_模式呢?

我們將在後續的同系列帖文中探究這些想法。


原文鏈接:

https://hackernoon.com/how-to-run-a-blockchain-on-a-deserted-island-with-pen-and-paper-899949ec555b

作者: Tal Kol

翻譯 & 校對: 張凌 & 閔敏

_ 本文由作者授權 EthFans 翻譯及再出版。_


你可能還會喜歡:

科普 |
用算盤瞭解閃電網絡

乾貨 |
瞭解區塊鏈基本原理的第二節:工作量證明和權益證明

科普 |
區塊鏈是什麼鬼?