- 區塊鏈原理、設計與應用(第2版)
- 楊保華 陳昌
- 2032字
- 2020-08-11 18:07:55
2.1 定義與原理
1.定義
區塊鏈技術自身仍在飛速發展中,相關規范和標準還待進一步成熟。
公認的最早關于區塊鏈的描述性文獻是中本聰所撰寫的《比特幣:一種點對點的電子現金系統》,但該文獻的重點在于討論比特幣系統,并沒有明確提出區塊鏈的術語。在其中,將區塊和鏈描述為用于記錄比特幣交易賬目歷史的數據結構。
另外,Wikipedia上給出的定義中,將區塊鏈類比為一種分布式數據庫技術,通過維護數據塊的鏈式結構,可以維持持續增長的、不可篡改的數據記錄。
筆者認為,區塊鏈可以從狹義和廣義兩個層面來看待:
●狹義上,區塊鏈是一種以區塊為基本單位的鏈式數據結構,區塊中利用數字摘要對之前的交易歷史進行校驗,適合分布式記賬場景下防篡改和可擴展性的需求。
●廣義上,區塊鏈指代基于區塊鏈結構實現的分布式記賬技術,包括分布式共識、隱私與安全保護、點對點通信技術、網絡協議、智能合約等。
2.早期應用
早在1990年8月,Bellcore(1984年由AT&T拆分而來的研究機構)的Stuart Haber和W.Scott Stornetta在論文“How to Time-Stamp a Digital Document”中就提出利用鏈式結構來解決防篡改問題,其中新生成的時間證明需要包括之前證明的Hash值。這可以認為是區塊鏈結構的最早雛形。
2005年7月,在Git等開源軟件中,也使用了類似于區塊鏈結構的機制來記錄提交歷史。區塊鏈結構最早的大規模應用出現在2009年初上線的比特幣項目中。在無集中式管理的情況下,比特幣網絡持續穩定,支持了海量的交易記錄,并且從未出現過嚴重的漏洞,從而引發了廣泛關注。這些都與區塊鏈結構自身強校驗的特性密切相關。
3.基本原理
區塊鏈的基本原理理解起來并不復雜。首先來看三個基本概念。
●交易(transaction):一次對賬本的操作,導致賬本狀態的一次改變,如添加一條轉賬記錄。
●區塊(block):記錄一段時間內發生的所有交易和狀態結果等,是對當前賬本狀態的一次共識。
●鏈(chain):由區塊按照發生順序串聯而成,是整個賬本狀態變化的日志記錄。
如果把區塊鏈系統作為一個狀態機,則每次交易意味著一次狀態改變;生成的區塊就是參與者對其中交易導致狀態改變結果的共識。
區塊鏈的目標是實現一個分布的數據記錄賬本,這個賬本只允許添加,不允許刪除。賬本底層的基本結構是一個線性的鏈表。鏈表由一個個“區塊”串聯組成(如圖2-1所示),后繼區塊中記錄前導區塊的Hash(散列)值。某個區塊(以及塊里的交易)是否合法,可通過計算Hash值的方式進行快速檢驗。網絡中的節點可以提議添加一個新的區塊,但必須經過共識機制來對區塊達成確認。

圖2-1 區塊鏈結構
4.以比特幣為例理解區塊鏈工作過程
下面我們以比特幣網絡為例,來看其中是如何使用區塊鏈技術的。
首先,用戶通過比特幣客戶端發起一項交易,消息廣播到比特幣網絡中等待確認。網絡中的節點會將收到的等待確認的交易請求打包在一起,添加上前一個區塊頭部的Hash值等信息,組成一個區塊結構。然后,試圖找到一個nonce串(隨機串)放到區塊里,使得區塊結構的Hash結果滿足一定條件(比如小于某個值)。這個計算nonce串的過程,即俗稱的“挖礦”。查找nonce串需要花費一定的計算力。
一旦節點找到了滿足條件的nonce串,這個區塊在格式上就“合法”了,成為候選區塊。節點將其在網絡中廣播出去。其他節點收到候選區塊后進行驗證,發現確實合法,就承認這個區塊是一個新的合法區塊,并添加到自己維護的本地區塊鏈結構上。當大部分節點都接受了該區塊后,意味著區塊被網絡接受,區塊中所包括的交易也就得到確認。
這里比較關鍵的步驟有兩個:一個是完成對一批交易的共識(創建合法區塊結構);另一個是新的區塊被添加到鏈結構上,被網絡認可,確保未來無法被篡改。當然,在實現上還會有很多額外的細節。
比特幣的這種基于算力(尋找nonce串)的共識機制稱為工作量證明(Proof of Work,PoW)。這是因為要讓Hash值結果滿足一定條件,并無已知的快速啟發式算法,只能對nonce值進行逐個嘗試的蠻力計算。嘗試的次數越多(工作量越大),算出來的概率越大。
通過調節對hash值結果的限制條件,比特幣網絡控制平均約10分鐘產生一個合法區塊。算出區塊的節點將得到區塊中所有交易的管理費和協議固定發放的獎勵費(目前是12.5比特幣,每四年減半)。
讀者可能會關心,比特幣網絡是任何人都可以加入的,如果網絡中存在惡意節點,能否進行惡意操作來對區塊鏈中的記錄進行篡改,從而破壞整個比特幣網絡系統?比如最簡單的,故意不承認別人產生的合法候選區塊,或者干脆拒絕來自其他節點的交易請求等。
實際上,因為比特幣網絡中存在大量(據估計有數千個)的維護節點,而且大部分節點都是正常工作的,默認都只承認所看到的最長的鏈結構。只要網絡中不存在超過一半的節點提前勾結在一起采取惡意行動,則最長的鏈將很大概率上成為最終合法的鏈。而且隨著時間的增加,這個概率會越來越大。例如,生成6個區塊后,即便有一半的節點聯合起來想顛覆已被確認的結果,其概率也僅為,即可能性低于1/60。生成10個區塊后,這個概率將降到1‰以下。
當然,如果整個網絡中大多數的節點都聯合起來作惡,將會導致整個系統無法正常工作。要做到這一點,往往意味著要付出很大的代價,與通過作惡得到的收益相比,得不償失。