区块链时代的拜占庭容错:Tendermint(五)
2019獨角獸企業重金招聘Python工程師標準>>>
原文題目:《Tendermint: Byzantine Fault Tolerance in the Age of Blockchains》
原文作者:Ethan Buchman
翻譯:傅曉波
校對:潘振東
本文為節選
?
目前為止的章節,論文闡述了Tendermint共識協議和應用環境相關的基礎要素?,F實世界中系統的關鍵要素,例如驗證人集合(validator set)的變更管理、故障恢復機制等,還尚未討論。
?
這個章節提出了一種解決這些問題的方法,正視共識系統的治理任務。當驗證人集合包含更分散的代理人集合時,維護網絡的有效治理將變得非常重要。
?
Governmint
治理(governance)的基本職能是篩選提議行為,通常是以一種投票的形式來完成的。治理的實現作為軟件的最基礎模塊,它允許用戶發起提議,對其進行投票,并對投票進行計數。提議可能是程序化的,在這種情況下,它們可能在成功的投票后進行自動執行;亦或并非程序化的,這種情況下它們的執行依賴于手工運行。
?
為了在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(四)
轉載于:https://my.oschina.net/u/3620978/blog/2992472
總結
以上是生活随笔為你收集整理的区块链时代的拜占庭容错:Tendermint(五)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: L200
- 下一篇: virtualbox+vagrant学习