- 第一步,你下單并把錢打給支付寶;
- 第二步,支付寶收款后通知賣家可以發貨了;
- 第三步,賣家收到支付寶通知之后給你發貨;
- 第四步,你收到書之后,覺得滿意,在支付寶上選擇確認收貨;
- 第五步,支付寶收到通知,把款項打給賣家。流程結束。
你會發現,雖然你是在跟賣家做交易,但是,所有的關鍵流程都是在跟支付寶打交道。這樣的好處在于:萬一哪個環節出問題,賣家和買家都可以通過支付寶尋求幫助,讓支付寶做出仲裁。這就是一個最簡單的基于中心化思維構建的交易模型,它的價值顯著,就是建立權威,通過權威背書來獲得多方的信任,同時依賴權威方背后的資本和技術實力確保數據的可靠安全。
你一定會擺出一個巨大的問號臉 ⊙.⊙?——“通過權威背書來獲得多方的信任,同時依賴權威方背后的資本和技術實力確保數據的可靠安全”,真的可以嘛?!
假如說,支付寶程序發生重大 BUG,導致一段時間內的轉賬記錄全部丟失,或者更徹底一點,支付寶的服務器被金三胖的一個導彈全部炸毀了。而我剛剛轉出去的 100 元找誰說理去,這個時候,你就成了刀殂上的魚肉;支付寶有良心,會勉為其難承認你剛剛轉賬的事實,但他不承認你也沒轍,因為確實連他自己也不知道這筆轉賬是否真實存在。
上述就是中心化最大的弊端——過分依賴中心和權威,也就意味著逐漸喪失自己的話語權。
去中心化?
那么去中心化的形態是什么樣子呢?還是拿剛才那個例子繼續,我們構建一個極簡的去中心化的交易系統,看看我們是如何在網絡上從不認識的賣家手里買到一本書的。
- 第一步,你下單并把錢打給賣家;
- 第二步,你將這條轉賬信息記錄在自己賬本上;
- 第三步,你將這條轉賬信息廣播出去;
- 第四步,賣家和支付寶在收到你的轉賬信息之后,在他們自己的賬本上分別記錄;
- 第五步,賣家發貨,同時將發貨的事實記錄在自己的賬本上;
- 第六步,賣家把這條事實記錄廣播出去;
- 第七步,你和支付寶收到這條事實記錄,在自己的賬本上分別記錄;
- 第八步,你收到書籍。至此,交易流程走完。
剛才“人為刀俎我為魚肉”的情況在這個體系下就比較難發生,因為所有人的賬本上都有著完全一樣的交易記錄,支付寶的賬本服務器壞了,對不起賣家的賬本還存在,我的賬本還存在;這些都是這筆交易真實發生的鐵證。
當然,在這套極簡的交易系統中,你已經發現了諸多漏洞和不理解,比如說三方當中有一個是壞人,他故意記錄了對他更有利的轉賬信息怎么辦;又比如說消息在傳遞過程中被黑客篡改了怎么辦等等等等。這在以往的計算機概論或者計算機網絡書本上中可能都有提及到——“類兩軍”和“拜占庭將軍”問題。這里就不打算贅述,因為暫時跟主線不相關,感興趣的同學可以去 Google 或者百度一下,你只需要知道,在我們下面即將展開講到的區塊鏈系統中,通過巧妙的設計,足以解決上述存在的 BUG。
既然話已說到這份上,相信了解一點技術、特別是有運維背景的同學大概能夠從極簡交易系統中窺視到了更多區塊鏈的一些影子——
- 分布式存儲,通過多地備份,制造數據冗余
- 讓所有人都有能力都去維護共同一份數據庫
- 讓所有人都有能力彼此監督維護數據庫的行為
在我看來,你猜測的基本上沒錯。其實這些就是區塊鏈技術最核心的東西,外人看起來高大上、深不可測,但探究其根本發現就是這么簡單和淳樸。當然,這里面肯定會有很多很多很多細枝末節的技術需要重構。
如果你差不多認同上面的觀點,那我們應該基本上可以達成共識,分布式部署肯定是構建去中心化網絡理所當然的解決方向——通過 P2P 協議將全世界所有節點計算機彼此相互連接,形成一張密密麻麻的網絡;以巧妙的機制,通過節點之間的交易數據同步來保證全球計算機節點的數據共享和一致。
哈哈,說的輕巧,“交易數據這么重要的東西,在一個完全不信任的 P2P 網絡節點中以一種錯綜復雜的方式傳遞,數據的一致性和安全性誰來保證,如果說互相監督,他們到底怎么做到?”
好了,不賣關子了,下面讓我們圍繞這個最最最最直接的問題開始進入到真正區塊鏈的世界,抽絲剝繭看看它到底是如何一步一步形成的,又是如何一步一步穩定運轉。
# 從全球節點到交易數據
這張圖的制作的意義為的是幫助你在宏觀上先快速理解區塊鏈中所涉及到的相關名詞以及他們的層級關系。同時,文章的知識結構和設計思路也大抵上也會按照:
- 首先,將區塊作為最小單位體,講述極簡區塊鏈系統是如何運轉的;
- 接著,進入到比區塊更小單位體——交易記錄,理解區塊鏈是如何處理數據的;
- 最后,將所有知識點柔和在一起,重回到區塊和區塊鏈,完整講述整個工作流程。
希望你在這個引導和結構下有一個比較好的閱讀體驗。Let's go~
# 區塊,混沌世界的起源
既然已經達成共識,所以,我們事先構建好了一個去中心化的 P2P 網絡;同時,為了讓讀者朋友們聽起來更輕松,我先粗暴的規定在這個極簡的區塊鏈系統里,每十分鐘有且僅產生一筆交易。
故事繼續,在節點的視野里,大概每十分鐘會憑空產生一個建立在自己平行宇宙世界的神奇區塊(你可以將區塊想象為一個盒子),這個區塊里放著一些數字貨幣以及一張小紙條,小紙條上記錄了這十分鐘內產生的那唯一一筆交易信息,比如說——“小 A 轉賬給了小 B100 元”;當然,這段信息肯定是被加密處理過的,為的就是保證只有小 A 和小 B(通過他們手上的鑰匙)才有能力解讀里面真正的內容。
這個神奇的區塊被創造出來之后,很快被埋在了地底下,至于埋在哪里?沒有一個人不知道,需要所有計算機節點一起參與進來掘地三尺后才有可能找到(找到一個有效的工作量證明)。顯然,這是一件工作量巨大、成果隨機的事件。但是呢,對于計算機節點來說,一旦從地底下挖出這個區塊,他將獲得區塊內價值不菲的數字貨幣,以及“小 A 轉賬給了小 B100 元”過程中小 A 所支付的小費。同時,對于這個節點來說,也只有他才有權利真正記錄小紙條里的內容,這是一份榮耀,而其他節點相當于只能使用它的復制品,一個已經沒有數字貨幣加持的副本。當然這個神奇的區塊還有一些其他很特別的地方,后面我們會再細細聊。
為了更好的描述,我們將計算機節點從地底下挖出區塊的過程叫做「挖礦」,剛才說了,這是一件工作量巨大、運氣成分較多、但收益豐厚的事兒。
過了一會兒,來自中國上海浦東新區張衡路上的一個節點突然跳出來很興奮的說:“ 我挖到區塊了!里面的小紙條都是有效的!獎勵歸我!” 。雖然此刻張衡路節點已經拿到了數字貨幣,但對于其他計算機節點來說,因為這里面還涉及到其他一些利益瓜葛,他們不會選擇默認相信張衡路節點所說的話;基于陌生節點彼此不信任的原則,他們拿過張衡路節點所謂挖到的區塊(副本),開始校驗區塊內的小紙條信息是否真實有效等等。在區塊鏈世界里,節點們正是通過校驗小紙條信息的準確性,或間接或直接判斷成功挖出區塊的節點是否撒謊。(如何定義小紙條信息真實有效,后面會講解,這里暫不做贅述)。
在校驗過程中,各個節點們會直接通過下面兩個行為表達自己對張衡路節點的認同(準確無誤)和態度:
- 停止已經進行了一半甚至 80%的挖礦進程;
- 將張衡路節點成功挖出的區塊(副本)追加到自己區塊鏈的末尾。
你可以稍微有點困惑:停止可能已經執行了 80%的挖礦行為,那之前 80%的工作不是就白做了嘛?!然后,區塊鏈的末尾又是個什么鬼東西?
對于第一個困惑。我想說,你說的一點沒錯,但是沒辦法,現實就是這么殘酷,即便工作做了 80%,那也得放棄,這 80%的工作勞苦幾乎可以視為無用功,絕對的傷財勞眾。第二個困惑,區塊鏈和區塊鏈的末尾是什么鬼?這里因為事先并沒有講清楚,但是你可以簡單想象一下:區塊是周期性不斷的產生和不斷的被挖出來,一個計算機節點可能事先已經執行了 N 次“從別人手上拿過區塊 -> 校驗小紙條有效性”的流程,肯定在自己的節點上早已經存放了 N 個區塊,這些區塊會按照時間順序整齊的一字排列成為一個鏈狀。沒錯,這個鏈條,就是你一直以來認為的那個區塊鏈。如果你還是不能夠理解,沒關系,文章后面還會有很多次機會深入研究。