區塊鏈時代的拜占庭容錯:Tendermint(五)

原文題目:《Tendermint: Byzantine Fault Tolerance in the Age of Blockchains》node

原文做者:Ethan Buchmangit

翻譯:傅曉波web

校對:潘振東算法

本文爲節選promise

 

目前爲止的章節,論文闡述了Tendermint共識協議和應用環境相關的基礎要素。現實世界中系統的關鍵要素,例如驗證人集合(validator set)的變動管理、故障恢復機制等,還還沒有討論。安全

 

這個章節提出了一種解決這些問題的方法,正視共識系統的治理任務。當驗證人集合包含更分散的代理人集合時,維護網絡的有效治理將變得很是重要。網絡

 

Governmint異步

治理(governance)的基本職能是篩選提議行爲,一般是以一種投票的形式來完成的。治理的實現做爲軟件的最基礎模塊,它容許用戶發起提議,對其進行投票,並對投票進行計數。提議多是程序化的,在這種狀況下,它們可能在成功的投票後進行自動執行;亦或並不是程序化的,這種狀況下它們的執行依賴於手工運行。async

 

爲了在Tendermint中啓用特定的操做,好比驗證人集合變動、升級軟件,而實現了一個叫Governmint的治理模塊。Governmint是一個最小的、可行的治理應用程序,它支持多組實體,每個都是能夠內部投票的提議,其中一些可能產生程序化執行的行爲,就像驗證人集合變動,或Governmint的自動升級等。分佈式

 

系統利用數字簽名對投票驗證人進行身份驗證,並可能使用各類可能的投票方案。特別有趣的是二次投票方案,投票的成本是投票權重的二次方。這點被證實了更加能知足投票驗證人的選擇權。

 

驗證人集合變動

驗證人集合的變動是現實世界共識算法的一個重要組成部分,許多之前的方法論都沒有這方面的說明,也或許像某種魔法(black art)同樣失傳了。Raft算法爲驗證人集合變動闡述了一個健全的協議,這須要使用一個新的消息類型,使更改經過協商一致。Tendermint採用了相似的方法,不過它是經過使用EndBlock消息的TMSP接口標準化的,該消息在全部AppendTx消息以後運行,但在提交以前。若是一個交易或一組交易包含在一個塊中,其目的是更新驗證人集合,那麼應用程序能夠經過指定它們的公鑰和響應EndBlock消息的新的投票權來返回要更新的驗證人列表。驗證人能夠經過將其投票權重(voting power)設置爲零來刪除。這爲應用程序提供了一種通用的方法來更新驗證人集合,而無需指定交易類型。

 

若是高度爲H的區塊返回了一組已更新的驗證人集合,那麼在H+1高度的區塊中將反映出這個變動。可是請注意,在H+1這個高度區塊的LastCommit方法必須使用高度爲H區塊的驗證人集合,由於它可能包含了已剔除驗證人的簽名(signatures)。

 

投票權重的變動應用到H+1高度的區塊,如此下一個出塊提議人將受到這個更新的影響。尤爲是本應是下一個提議者的驗證人已被剔除的狀況。這裏Round-robin算法能夠優雅地處理這個問題,簡單有序地轉移到下一個出塊提議人。由於同一個區塊在至少三分之二的驗證人節點上被複制,同時Round-robin是肯定性算法,因此他們都將進行相同的更新,並等待下一個提議人。

 

懲罰拜占庭驗證人

比特幣設計中的一個顯著的特色是它的激勵機制(incentive structure),就目前而言,協議的目標是經過獎勵驗證者來激勵他們正確行事。雖然這在比特幣的共識協議背景下是有意義的,但更好的獎懲制度也許須要提供一種健壯性反激勵機制(strong dis-incentives),如此對於網絡驗證人來講利益共享、風險共擔,而不是一些溫和的機會成本(opportunity cost)。

 

在Tendermint中的獎懲可使用一種方法來實現,這就是由Vitalik Buterin以一種名爲Proof-of-Stake的協議來提出的。從本質上來講,驗證人必須準備一份安全保證金(他們必須持有必定的股份)才能參與到共識中。若是他們被發現有雙重簽名的提議或投票行爲,其餘驗證人就能夠以交易的形式發佈這些違規行爲的證據,經過剔除違規者,應用程序狀態可使用交易的形式來變動驗證人集合,並懲處他的保證金。這就產生了將顯性經濟成本與拜占庭行爲相關聯的影響,進而使得諸如賄賂三分之一甚至更多驗證人的拜占庭節點(Byzantine)考量本身的違規成本。

 

請注意,一種共識協議可能會指定更多的能夠被懲罰的行爲,而不只僅是雙重簽名。咱們尤爲喜歡懲罰任何帶有強烈信號的不當行爲——典型如 任何上報的狀態變動都不是基於其它節點已上報的狀態。例如在Tendermint實現版本中,全部的預提交必須帶有證實他們的波卡鎖,驗證人可能因廣播不合理的預提交而受到懲罰。可是請注意,咱們不能僅僅由於任何的意外行爲而嚴厲懲罰——例如,當一個驗證人在不是他的當前回合而發起提議,可能就是一種異步搶佔(pre-empt asynchrony)或節點奔潰(crashed nodes)的狀況爲依據來優化。

 

軟件升級

Governmint也能夠在一個去中心化的網絡(decentralized network)上以一種天然的方式商議軟件升級問題。衆所周知,在一個公共網絡上的軟件升級是一個具備挑戰的事情,須要慎重規劃去保持因沒有第一時間升級的用戶的向下兼容性(backwards compatibility),也不能因爲軟件引入缺陷、移除產品特性、增長複雜度、或者,也許最糟糕的是未經許可而自動升級而讓忠實的用戶感到不快。

 

在比特幣上升級一個去中心化的共識系統的挑戰是顯而易見的。以太坊已經完成了一項成功的、非向下兼容的升級,是由於它有強大的領導力和意見統一的社區;而比特幣因爲帶有惡意、分化的社區以及缺少強大的領導力,儘管大量的軟件工程問題暴露,卻不能完成一些必須的升級。

 

因爲變動的適用範圍不一樣,區塊鏈的升級一般可分爲軟分叉(soft forks)和硬分叉(hard forks)。軟分叉意味着向下兼容,並使用協議中的自由度,沒有升級的用戶可能會忽略這一點,可是這能夠爲已升級的用戶提供新的特性。另外一方面,硬分叉是不向下兼容的升級,就比特幣而言,硬分叉可能會致使安全方面的破壞,而就Tendermint而言,則會致使整個系統中止運行。

 

爲了應對這一問題,比特幣軟件的開發者們推出了一系列軟分叉,驗證人能夠經過在新的區塊中發出信號來投票。一旦驗證人的某個閾值發出更新的信號,它就會自動在整個網絡中生效,至少對於支持更新的軟件版本的用戶來講是這樣的。比特幣系統的實用性在這些軟分叉的基礎上獲得了極大的提升,並且能夠預見這一切將會繼續。有趣的是,社區未能對軟件成功的硬分叉,一方面引發了人們對該系統長期穩定性的擔心,另外一方面也引發了對系統恢復舞弊治理的激勵和啓發——這是一種沒法治理的能力。

 

考慮到當今世界明顯的政府貪腐現象(government corruption),有不少理由採用後一種方法(譯者注:去中心化系統治理自治的方案)。如此,由密碼學和分佈式共識提供了一套新的工具,很大程度上可以實現必定透明度和問責制,這在現代政府的紙質版世界裏是沒法想象的,甚至在傳統網絡(traditional web)中的數字世界(digital world)裏也不存在,由於傳統網絡嚴重缺少足夠健壯的身份驗證系統(suffers tremendously from a lack of sufficiently robust authentication systems)。

 

在使用Governmint的系統中,開發者將是區塊鏈上的可識別個體,能夠爲系統升級提交提議。這種機制與Github上的Pull Request很是類似,只是它被集成到一個實時運行的系統中,並經過共識協議達成一致。應該使用可配置的更新參數來實現客戶端,這樣他們就能夠指定是系統自動更新仍是先通知客戶端。

 

固然,任何未經完全審查的軟件升級對系統來說均可能造成風險,通常來講應該採起保守的方法來升級。

 

故障恢復

在某些諸如交易日誌中的歧義,或者系統中止運行等緊急事件的狀況下,傳統的共識系統幾乎不提供任何保證,一般須要經過人工干預來解決。

 

Tendermint確保那些違反安全的驗證人能夠被標識出來,如此,那些能夠鏈接到至少一個誠實節點的任意客戶端,可以明確辨別誰是不誠實的驗證人,並由此選擇跟隨誠實的節點進入一個新的鏈,其中包含一個不包括拜占庭節點的驗證人集合。

 

例如,假設有三分之一甚至更多的驗證人違反了鎖定規則(locking rules),致使在高度H提交了兩個區塊,誠實的驗證人能夠經過廣播(gossipping)全部的投票來肯定是誰在重複簽名(double-signed)。在這點上,它們不能使用協商一致協議,由於已經違背了基本錯誤假設。注意,此時可以在高度H蒐集投票意味着一種很強的假設場景,在故障期間網絡的連通性和可用性,若是p2p網絡已經沒法提供這個能力,則可能須要驗證人使用諸如社交媒體和高可用服務的替代方法來傳遞憑證(evidence)。只要超過三分之二的誠實節點收集到全部的憑證,就能夠啓動一條新的區塊鏈。

 

另外一種方法是,修改Tendermint協議來使得預提交(pre-commits)帶有波爾卡鎖,這可以確保分叉的責任人(those responsible for the fork)會當即受到懲罰,並且不須要額外的公佈時間。這項修改有待從此的工做來實現。

 

Governmint更復雜的應用可能更適合處理各類故障細節,好比永久性崩潰(permanent crash failures)和私鑰泄露(compromise of private keys)等。無論怎樣必須仔細考慮這些問題,由於它們可能破壞底層協議的安全保障。咱們把對於這些問題的研究留給將來的工做,但請注意在理解區塊鏈從故障恢復的能力方面,它所處的社會經濟環境的重要性。

 

不管故障恢復如何進行,可否成功仍是取決於客戶端集成。若是客戶端不接受新鏈,那麼它提供的服務其實是離線的。所以,客戶端必須知道指定區塊鏈用於恢復的具體規則。在上述安全違規的狀況下,它們還必須蒐集憑證來肯定要移除哪一個驗證人,並經過其他的驗證人從新計算狀態。在沒有在線的狀況下,保持治理能力。

 

最後結論

治理能力是分佈式共識系統的一個關鍵要素(critical element),儘管主流的治理系統仍未獲得充分理解。Tendermint提供了一種稱爲Governmint的TMSP模塊,旨在促進對分佈式系統的基於軟件治理(software-based governance for distributed systems)的更多實驗。

 

相關閱讀:

區塊鏈時代的拜占庭容錯:Tendermint(一)

區塊鏈時代的拜占庭容錯:Tendermint(二)

區塊鏈時代的拜占庭容錯:Tendermint(三)

區塊鏈時代的拜占庭容錯:Tendermint(四)

相關文章
相關標籤/搜索