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