區塊鏈經常被稱為分散式賬本,顧名思義就是分散式系統,所謂的分散式運算,就是一組電腦,透過網絡互相連接,雙方傳遞訊息而形成系統,而彼此之間也為著共同目標而互動。要完成這個目標通常需要進行大量計算,計算內容會被分成小塊由不同的電腦各自計算,再將結果合併。不過這個看似完美的系統並不是沒有弱點,而它的弱點就是分布式共識 —— 拜占庭將軍的問題。
要談到解決方案,就不得不提及 Leslie B.Lamport,這位於 2013 年獲得電腦界諾貝爾獎 Turing Award 的電腦科學家。他早年在 MIT 獲得數學學士學位後,再在波士頓五大名校之一,布蘭戴斯大學取得數學碩士及博士學位。
這位傳統名校尖子在史丹福國際研究院(SRI)工作時,其中一個項目是為美國太空總署建立可容錯的太空系統,當時 Lamport 與同事 Marshall Pies 及 Robert Shostak 共同發表了一篇論文解決特殊故障問題 —— 著名的《拜占庭將軍問題》(The Byzantine Generals Problem):拜占庭是古代東羅馬帝國的首都,而拜占庭將軍的問題是形容戰場上將軍一旦遇上叛徒,軍隊中如何避免假傳軍令的難題。
有趣的是,歷史上從來沒有記載過古羅馬時期拜占庭將軍遇上通訊相關的問題(亦可能只是沒有記載),因此這個名稱不能在古代事跡上找到意義,Lamport 說:「我想給這些『將軍』一個國家,同時不能得罪任何讀者…於是就想到一個更合適的命名 —— Byzantine generals。」這便是《拜占庭將軍問題》的名稱來源。
將拜占庭將軍的問題套用到電腦系統上,軍隊就是分散式系統的組件,在組件發生故障時(軍隊中有叛徒時),為避免引發系統災難性故障,系統的其他組件必須就一致的策略達成共識,而解決方案就是有足夠多的組件正確運行,只要問題組件是少數,就可以確保整個系統運作正常。
根據 Lamport 的論文,只要故障組件的總數不超過三分一,即至少超過三分二的組件是正常的,系統仍然可以達到一致行動。這些故障組件可以類比為各種系統所面對的情況,例如一個可以發出信息,做出行動的錯誤節點;一份失效的合同,諸如此類。
在區塊鏈的網絡中,有很多節點會同時廣播不同的交易消息,在一個不同步,不可靠的點對點網絡中,要令各方使用者得到一本一致的賬本,則所有的節點在紀錄交易消息時都需要達成共識,以比特幣的網絡為例,交易資料會發送到內存池(mempool),礦工會將交易放入下一個區塊,當每個節點收到任何形式表現的訊息時,都會要求發出信息的節點解答一個「工作證明」的問題,這個問題就是哈希(hash)散列,當相關節點解答出這個問題(工作證明),就會傳送到網絡中的其他節點進行驗證,其他節點驗證哈希值是正確的話就達成共識,交易資料會正式紀錄於新的區塊中,節點會隨即開始處理下一個區塊。
有些區塊鏈為確保每一個節點保持「誠實」會引入區塊獎勵,在比特幣的區塊鏈中就是比特幣及交易費用(礦工費),交易費用是在比特幣的區塊鏈不再產生新代幣時,仍有獎勵確保訊息能透過礦工行動準確傳遞。
這種共識機制再配合 Lamport 的分散式系統,就成為了區塊鏈的雛型。
梁永熹
區塊鏈科研創辦人及行政總裁