從零認識比特幣 2.5課 區塊鏈由來和本質與分佈式存儲

區塊鏈的由來和本質

在網上購買一本書的流程:

1,你下單並把錢打給支付寶

2,支付寶收款後,通知賣家可以發貨了

3,賣家收到支付寶的通知之後給你發貨了

4,你收到書之後,覺得滿意,在支付寶上確認收貨

5,支付寶收到通知,把款項打給賣家

雖然是在跟賣家交易,但是所有的關鍵流程都是在跟支付寶打交道。好處在於,如果哪裏出現問題,買家和賣家都可以通過支付寶尋求幫助,讓支付寶仲裁。這就是一個簡單的基於中心化思維構建的交易模型。

它的關鍵在於建立權威,通過權威來獲取多方新人,同時依賴權威放背後的此本和技術實力確保數據的可靠安全

假如支付寶程序發生重大BUG,導致一段時間內的轉賬記錄全部丟失,而我剛剛轉出去的100元找誰說理去,這個時候,你就成了刀殂上的魚肉;支付寶有良心,會勉爲其難承認你剛剛轉賬的事實,但他不承認你也沒轍,因爲確實連他自己也不知道這筆轉賬是否真實存在。

這就是中心化最大的弊端——過分依賴中心和權威,也就意味着喪失自己的話語權


那麼去中心化的形態是什麼樣子呢?還是拿剛纔那個例子繼續,我們構建一個極簡的去中心化的交易系統,看看我們是如何在網絡上從不認識的賣家手裏買到一本書的。

1,你下單並把錢打給賣家;

2,你將這條轉賬信息記錄在自己賬本上;

3,你將這條轉賬信息廣播出去;

4,賣家和支付寶在收到你的轉賬信息之後,在他們自己的賬本上分別記錄;

5,賣家發貨,同時將發貨的事實記錄在自己的賬本上;

6,賣家把這條事實記錄廣播出去;

7,你和支付寶收到這條事實記錄,在自己的賬本上分別記錄;

8,你收到書籍。至此,交易流程走完。

剛纔“人爲刀俎我爲魚肉”的情況在這個體系下就比較難發生,因爲所有人的賬本上都有着完全一樣的交易記錄,支付寶的賬本服務器壞了,但賣家的賬本還存在,我的賬本還存在。這些都是這筆交易真實發生的鐵證。

到這裏,相信同學們大概能夠從極簡交易系統中窺視到了更多區塊鏈的一些影子——

分佈式存儲,通過多地備份,形成數據冗餘

讓所有人都有能力共同去維護同一個數據庫

讓所有人都有能力彼此監督維護數據庫的行爲


我們爲何願意相信遠在千里之外的一個賣書的商家,並且給他付款呢?在中心化的交易系統中,因爲在這個交易過程中,我們把信任託付給了國家機構或者大型企業。我們與賣書的人之間是不信任的,但是,由於國家或大型企業的背書,我們願意讓其做個見證,這是一種比較常用的增加互信的方式。

而區塊鏈正是拯救信任危機的利器。它的實質是一個不斷增長的分佈式結算數據庫,能完美解決信息系統中的信任危機。它起源於下面的問題:你憑什麼相信一個陌生人?別人憑什麼相信你?區塊鏈用算法證明機制來保證這份信任。藉助它,整個系統中的所有節點能夠在信任的環境下自動安全地交換數據。

現在我們進入正題,來了解下區塊鏈的本質:他是一個分佈在全球各地、能夠協同運轉的數據庫存儲系統,區別於傳統數據庫運作——讀寫權限掌握在一個公司或者一個集權手上(中心化的特徵)。區塊鏈認爲,任何有能力架設服務器的人都可以參與其中,來自全球各地的掘金者在當地部署了自己的服務器,並連接到區塊鏈網絡中,成爲這個分佈式數據庫存儲系統中的一個節點。一旦加入,該節點享有同其他所有節點完全一樣的權利與義務(去中心化、分佈式的特徵)。與此同時,對於在區塊鏈上開展服務的人,可以往這個系統中的任意的節點進行讀寫操作,最後全世界所有節點會根據某種機制完成一次又一次的同步,從而實現在區塊鏈網絡中所有節點的數據完全一致。

簡單的說,區塊鏈實際上是一個分佈式數據庫,在這個數據庫中記賬不是由個人或者某個中心化的主體來控制的,而是由所有節點共同維護、共同記賬的。所有的單一節點都無法篡改它。如果你想篡改一個記錄,你需要同時控制整個網絡超過51%的節點或計算能力纔可以,而區塊鏈中的節點無限多且無時無刻都在增加新的節點,這基本上是不可能完成的事情,而且篡改的成本非常高,幾乎任何人都承擔不起。這就解決了信任問題。


分佈式存儲

前面我們已經提到,區塊鏈要解決的是如何用一種可信的方式記錄數據,使得用戶可以信任區塊鏈系統記錄的數據,而無須假設記賬節點的可信性。怎麼實現呢?

“無須信任”技術上的解決辦法就是假設互相不信任。因此,每個節點都存有一份完整的數據記錄,每條新的交易都要被重新驗證。當一個節點重新加入網絡並需要同步數據的時候,也是從其他節點同步交易歷史,然後重新計算驗證,這就決定了其第一個特點,即分佈式存儲(不能完全信任他人的存儲)。

這麼多記賬節點爲什麼願意按照一致性協議記賬呢?依靠的就是巧妙的記賬激勵機制——誠實的記賬節點會得到相應的獎賞,且誠實的記錄比惡意篡改記錄的收益更大——這就是一致性協議設計中的要點。下面就對區塊鏈的數據結構、分佈式存儲和一致性協議進行詳細介紹。

在這裏插入圖片描述

首先從數據結構來理解區塊鏈,上圖展示了比特幣區塊鏈的數據結構。

系統中的交易(Transaction)被打包成一個個區塊(Block)。在區塊鏈系統運行過程中,區塊鏈每次只能添加一個區塊,並且每個區塊均包含了用於驗證其有效鏈接於上一個區塊之後的數學憑證。正如它的名稱“區塊鏈”(Blockchain),一個個區塊按照密碼學算法鏈接在一起。這樣的組織設計可以很容易地驗證數據是否篡改、追蹤歷史以及保證安全。

其次,區塊鏈的架構是分佈式、去中心化的。系統中各個節點組成一個P2P網絡,每個節點均分別執行、驗證和記錄相同的交易,每個節點都可以在本地存儲完整的區塊鏈數據。沒有一箇中心機構能夠干預交易的執行順序和結果。“去中心”在這裏不是目的,而是一種達到可信的手段。

最後,爲了保證各節點狀態的一致性,還需要共識機制,即一致性協議(如PoW、PoS、PoA等)。以PoW爲例,爲了使得各個節點記錄的結果是一致的,在每一時刻系統要選擇一個記賬節點來計算下一個區塊。其他節點對該記賬節點的區塊結果進行驗證,通過後則接受這個區塊。爲了激勵大家高效正確地記賬,系統對記賬節點有相應的獎賞,這樣一來大家會貢獻計算和存儲資源來爭奪記賬權。由於可以互相驗證,也保證了記賬的可靠性。

接下來,我們要解決的問題就是:如何公平地選取這個記賬節點,以及如何設計激勵機制。PoW中採用的是“猜散列值”這個公平的、依靠消耗算力的方式,也被稱作“挖礦”。誰先算出給定要求的散列值,誰就以大概率先爭奪到這個記賬權。爲什麼說是概率呢,因爲在分佈式網絡中,由於延遲,消息傳遞到其他各個節點的時間是不一樣的。在不同節點上對下一區塊的認可在短時間內可能是不同的。最終,以系統中最長的鏈條(後續會講)作爲共識結果,即大家認可的賬本內容。

發佈了76 篇原創文章 · 獲贊 8 · 訪問量 7382
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章