【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

優達學城Udacity發表於2018-06-19
è½é¾èå²ååï¼æåºçº¸ç¬runæ¡åºåé¾å…åï¼

新課上線!世界區塊鏈權威專家參與課程設計,24 周學習區塊鏈基礎知識、架構與應用。挑戰前沿實戰專案,Learning by Doing ,成為搶手區塊鏈工程師!席位限量,立即加入「區塊鏈工程師」瞭解更多資訊

文/ Tal Kol 譯/ 歐剃 來源/ freecodecamp

萬一你和一群陌生人不幸漂流到一座荒無人煙的小島上,什麼技能是你最好要會的?

你心中可能會有無數種答案,但今天優達菌要告訴你,會生火捉魚摘水果什麼的,只能蔽的了一時飢寒,如果生還者不想活在茹毛飲血以物易物的原始社會的話,建立一個穩定、公平、高效而且去中心化的共識體系,可是非常有必要的。換句話說,發點區塊鏈貨幣,一步到位進入現代社會,瞭解一下?

啥,電腦?誰說發幣就非得要電腦啦?你只需要一群生還的小夥伴,一些紙筆或者差不多能寫字的東西,以及本文。準備好了我們就出發!

故事開端

讓我們回到故事開始的地方。四位勇敢無畏的…倒黴蛋:張三、李四、阿梅和小王,不幸漂流到了南太平洋某處的一座無人荒島。

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

簡單地說,在經歷了以物易物的原始生活,以及用貝殼做貨幣的瘋狂通脹之後,(他們還沒瘋到用石頭做貨幣)他們決定發行一種全新的貨幣——島嶼幣(IslandCoin)——來挽救本地瀕臨崩潰的經濟體系。

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?
為了公平起見,所有人一開始都將有100枚島嶼幣。既然目前造幣廠的建設計劃還遙遙無期,大家都決定通過紙筆來記錄所有權情況。然而,在全島貨幣被“銀行家”阿梅壟斷了一年以後,誰都無法相信別人不會在記錄上做手腳,所以不能讓某一個人獲得壟斷資金記錄的權力。最終,他們決定採用區塊鏈的方式,由所有人共同維護每個人的資金記錄。

目前,這大約是本島上最簡單的區塊鏈應用例項。在未來,他們也許會加入“工作量證明”或“權益證明”之類的概念——當然這些各有利弊——但現在,就從最簡單的情況開始吧。

我們的四位主人公想要的是什麼呢?其實很簡單,不過就是一張紙,上面畫著一個表格,表格裡是每個人的資金情況,僅此而已。問題是,可不能真的只有一張紙,記錄唯一的結果。因此,在做記錄這件事上必須人人平等,每個成員手上都有一份——這就是所謂的“去中心化”;同時,每個成員手上的版本最好都是一致的——這就是所謂的“共識”。

那麼,這張紙長什麼樣呢?

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

荒島求生之Day1


這張紙就是所有人都同意的第一筆記錄——這也是為啥它被標成第一天。正如之前說的,大家都同意,一開始每個人都有100個幣。同時,還需要有一個人來把這個記錄寫下來,釋出給每個成員,確保每人都有一份。就讓張三來做這事吧。

貨幣就是用來交易的,所以持有的數量肯定是不斷變動著的。因此,每一天結束前都需要釋出一個當天的更新。為了保證公平,不能總是讓張三來記錄和釋出金額。
鑑於不能無止境的信任記錄者,在釋出記錄之後,還有一件很重要的事要做。那就是每個成員都分別對這次記錄的更新情況進行確認,如果同意這次的金額變更,就簽上自己的名字。很簡單對不對?

那麼,需要多少人簽字,當天的記錄變更情況才能最終確定,並得到通過?為了達成共識,我們需要大多數人同意。既然目前總共是4人,“多數同意”意味著最少要拿到3個簽名。上面這張紙4個人都簽名了,那麼事情就這麼定了。

為啥不需要4個人一致通過呢?因為這樣將會出現一個成員干擾整個程式的可能。假如李四離開營地好幾天去遠處捕魚,那其他人就無法更新當前的餘額,直到他回來——這將過多的權力賦予了單個成員。

為什麼我們需要大多數,4個人有兩個簽名不行嗎?如果只需要兩個,那可能會出現兩個人(比如張三和李四)支援一種結果,另外兩個人(阿梅和小王)支援另外一種不同結果的情況。這樣將無法達成一致,因為兩個不同版本的結果不能同時都為真。

於是,大家愉快地定下了規矩,區塊鏈經濟的第一天就這樣過去了。

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

荒島求生之Day2


第二天早上,阿梅打算買個番茄吃吃。她花了2個幣向張三購買。於是她把這筆交易寫在一張紙上:

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

這是阿梅的第一筆交易,所以交易號是#1。此外,她還得在紙上簽名,以確保不是別人盜用她的名義進行支付。

到第二天晚上,又該更新並公佈大家的餘額了。第一天是張三來寫,並徵求大家的簽名。之後只要大家輪流這樣做,看起來就很合理對不對?

於是大家達成一致,按照張三->李四->阿梅->小王->張三->李四.... 類似這樣的迴圈,輪流執掌。這就表示第二天應該由李四來發布當天的資金餘額更新情況。因此,他將阿梅的交易資訊計入當天的更新中:

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

李四寫的這張紙還不是最終結果,因為只有一個人,也就是李四自己簽了名。他還需要請其他成員確認更新內容,並簽名。

當然,這事兒要確認起來很簡單。

首先,確認者可以拿出自己手頭保管的記錄資料,檢視上面最後一條的最終記錄資料(當前就一條,也就是第一天的資料)。

接下來,確認者檢查當天新增的交易列表。當天只有一條來自阿梅的交易資訊。這個資訊也很容易確認,只要確認這個條子確實是經阿梅簽名的,並且從上一天的記錄來看,阿梅的餘額裡也有足夠多的幣可以給張三,以完成交易。

一旦每個島民都完成了各自的驗證程式,並在紙上籤了字,那麼李四就得到了第二天餘額變動情況的最終版本,他將這個版本釋出給每個人,每個人都確保自己手頭有一份一樣的副本,於是大家都可以愉悅而滿足地休息啦。

這就是第二天的最終結果:
【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

荒島求生之Day3


第三天到了,這個系統看起來很棒,大家都很有交易的熱情。張三打算花10個幣從李四那邊買一些柴禾,李四打算花25個幣向小王買些藥片,而小王要向張三買2個幣的番茄充飢。他們都分別寫下了交易資訊:

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

當黑夜降臨,今天負責公佈賬目的是阿梅。為了保證阿梅將自己的交易資訊納入,大家都得給阿梅一份交易資訊的紙條。當然,一般來說,交易資訊需要廣播給所有人,因為你交易的時候不一定就會記得今天負責公佈更新資料的到底是哪個人。

然而,小王在這事上實在太拖拉了。等他把交易資訊拿給阿梅的時候,人家早就已經把當天的交易資訊寫好了,還簽了名:

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?
小王這下可是傻眼了,他的交易資訊沒被列入進去。這意味著張三當天並沒有收到小王的轉賬,所以也不會把預定的番茄給小王。於是不幸的小王這天晚上就只能餓肚子了。

飢腸轆轆的小王拒絕在紙上簽字,還憤憤地跑出了營地,嘴裡嘟囔著要自己覓食什麼的話。好在阿梅已經從其他成員那裡拿到了足夠的簽名:
【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

阿梅總共拿到了三個簽名,每個人都確認過記錄的餘額和交易資訊準確無誤,也和前一天的記錄吻合。按照多數原則,今天的資料就算定下來了。

荒島求生之Day4


第四天,一切正常——除了沒人知道小王到底去了哪裡。前一天晚上他跑出去捕魚,結果起了風暴,他一晚上沒回營地。這倒是有點麻煩,畢竟第四天應該是小王負責統計併發布當天的資金變動情況。

阿梅想要做幾個交易,於是她寫下了交易資訊,並傳給了大家:
【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

到了晚上,小王還是沒出現。按之前定好的順序,今天應該是小王來統計,然而大家始終找不到他。於是當天只好輪空,一切暫停不動。

荒島求生之Day5


第五天到了,又輪到張三坐莊啦。因為前兩天的氣候一直不太好,到處溼嗒嗒的,張三希望能換個乾爽暖和一點的地方睡覺。他希望李四能幫他搭個木頭小棚子,李四開價200個幣。問題在於,張三隻有92個幣,怎麼辦呢?張三突然有了一個大膽的想法。

張三覺得,反正今天是他自己負責統計交易餘額資訊,何不直接搏一把大的,單車變摩托,啊不,空手套棚屋。於是他直接寫了200個幣給李四:

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

此外,這一天沒有其他的交易了。不過因為昨天輪空,阿梅的兩筆交易,以及前天沒來得及計入的小王的交易,都歸到今天來記。所以,張三就把自己的記錄混在中間,希圖矇混過關:

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

管它平不平,張三反正壯著膽子就簽了名。但這事他一個人說了還不算,他還需要另外兩個人的簽名。當李四和阿梅看到這個單子的時候,他們很快就發現餘額不符的問題:在第三天的餘額裡,張三隻有92個幣,怎麼可能發給人家200個呢?

他們都拒絕簽字,要求張三把記錄改正。張三隻好滿不情願地把那條記錄刪掉了,重新計算了大家的餘額:

【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?


這下阿梅和李四才最後簽上了名字。

因為有3個簽名,第五天的交易記錄就這麼定下了。

荒島求生之Day6


第六天的早上,小王拖著蹣跚的腳步回到了營地。這幾天他在暴風雨中掙扎求生,簡直糟的不能再糟了。錯過了這兩天的資金變動情況,他甚至已經不太確定自己還有多少幣了。不過他一回來就找了個人問問,並很容易就拿到了第三天和第五天釋出的交易情況。

對小王來說,很容易確認最近的交易內容,以及自己的餘額沒有被篡改。因為這些紙上都有至少3個簽名,基於上面記載的交易記錄,他可以利用自己儲存的第二天的資料進行一下簡單的計算,就能確定第五天時,所有的餘額是正確無誤的。

於是,小王的營地生活又回到了正軌。


荒島求生版的區塊鏈故事


總體來說,這個系統工作的很令人滿意。沒錯,它確實有點簡陋,但對於不得不生活在這裡的四位島民來說,這已經完全夠用了。不過,要用區塊鏈發幣,怎麼能沒有白皮書呢,於是大家全體起草並正式釋出了這麼一份棒極了的白皮書:


【區塊鏈101】教你如何用紙和筆在荒島打造一條交易公鏈?

也許有些讀者要問,說了這麼多,這跟區塊鏈到底什麼關係?讓我解釋一下:

  • 每天釋出的一張當天的餘額表,就是一個區塊。
  • 每一個區塊都有編號,並指向上一個區塊——也就是前一天的餘額表——並就此形成了一條鏈條。
  • 要驗證任意一個區塊的資料是否正確,只需要從鏈條的開頭(第一天的資料,也就是創世區塊)開始,根據每個區塊內的資料按順序進行計算。所有的餘額都是逐日增減的。

所以這就是理想的區塊鏈實現嗎?大概不是,因為可以優化的地方還很多。比如,先這可能只支援4個使用者,如果又有新的人來可怎麼辦呢?要如何調整容納他們?同時,這個區塊鏈現在是需要許可的,能不能轉換成非許可鏈呢?還有,如果希望引入工作量證明,或者權益證明的機制,該怎麼修改呢?

嗯,這也許值得我們之後另文討論,今天,就讓我們這四位勇士好好休息吧。


新課上線!世界區塊鏈權威專家參與課程設計,24 周學習區塊鏈基礎知識、架構與應用。挑戰<數字身份管理><以太坊智慧合約><私鏈公證服務><區塊鏈架構><供應鏈與資料審計>等實戰專案,Learning by Doing ,成為搶手區塊鏈工程師!席位限量,點選「區塊鏈工程師」瞭解更多資訊


Blockchain Developer Nanodegree Program - Udacity


相關文章