区块链时代的拜占庭容错:Tendermint(五)
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
原文題目:《Tendermint: Byzantine Fault Tolerance in the Age of Blockchains》
原文作者:Ethan Buchman
翻譯:傅曉波
校對(duì):潘振東
本文為節(jié)選
?
目前為止的章節(jié),論文闡述了Tendermint共識(shí)協(xié)議和應(yīng)用環(huán)境相關(guān)的基礎(chǔ)要素。現(xiàn)實(shí)世界中系統(tǒng)的關(guān)鍵要素,例如驗(yàn)證人集合(validator set)的變更管理、故障恢復(fù)機(jī)制等,還尚未討論。
?
這個(gè)章節(jié)提出了一種解決這些問題的方法,正視共識(shí)系統(tǒng)的治理任務(wù)。當(dāng)驗(yàn)證人集合包含更分散的代理人集合時(shí),維護(hù)網(wǎng)絡(luò)的有效治理將變得非常重要。
?
Governmint
治理(governance)的基本職能是篩選提議行為,通常是以一種投票的形式來完成的。治理的實(shí)現(xiàn)作為軟件的最基礎(chǔ)模塊,它允許用戶發(fā)起提議,對(duì)其進(jìn)行投票,并對(duì)投票進(jìn)行計(jì)數(shù)。提議可能是程序化的,在這種情況下,它們可能在成功的投票后進(jìn)行自動(dòng)執(zhí)行;亦或并非程序化的,這種情況下它們的執(zhí)行依賴于手工運(yùn)行。
?
為了在Tendermint中啟用特定的操作,比如驗(yàn)證人集合變更、升級(jí)軟件,而實(shí)現(xiàn)了一個(gè)叫Governmint的治理模塊。Governmint是一個(gè)最小的、可行的治理應(yīng)用程序,它支持多組實(shí)體,每一個(gè)都是可以內(nèi)部投票的提議,其中一些可能產(chǎn)生程序化執(zhí)行的行為,就像驗(yàn)證人集合變更,或Governmint的自動(dòng)升級(jí)等。
?
系統(tǒng)利用數(shù)字簽名對(duì)投票驗(yàn)證人進(jìn)行身份驗(yàn)證,并可能使用各種可能的投票方案。特別有趣的是二次投票方案,投票的成本是投票權(quán)重的二次方。這點(diǎn)被證明了更加能滿足投票驗(yàn)證人的選擇權(quán)。
?
驗(yàn)證人集合變更
驗(yàn)證人集合的變更是現(xiàn)實(shí)世界共識(shí)算法的一個(gè)重要組成部分,許多以前的方法論都沒有這方面的說明,也或許像某種魔法(black art)一樣失傳了。Raft算法為驗(yàn)證人集合變更闡述了一個(gè)健全的協(xié)議,這需要使用一個(gè)新的消息類型,使更改通過協(xié)商一致。Tendermint采用了類似的方法,不過它是通過使用EndBlock消息的TMSP接口標(biāo)準(zhǔn)化的,該消息在所有AppendTx消息之后運(yùn)行,但在提交之前。如果一個(gè)交易或一組交易包含在一個(gè)塊中,其目的是更新驗(yàn)證人集合,那么應(yīng)用程序可以通過指定它們的公鑰和響應(yīng)EndBlock消息的新的投票權(quán)來返回要更新的驗(yàn)證人列表。驗(yàn)證人可以通過將其投票權(quán)重(voting power)設(shè)置為零來刪除。這為應(yīng)用程序提供了一種通用的方法來更新驗(yàn)證人集合,而無需指定交易類型。
?
如果高度為H的區(qū)塊返回了一組已更新的驗(yàn)證人集合,那么在H+1高度的區(qū)塊中將反映出這個(gè)變更。但是請(qǐng)注意,在H+1這個(gè)高度區(qū)塊的LastCommit方法必須使用高度為H區(qū)塊的驗(yàn)證人集合,因?yàn)樗赡馨艘烟蕹?yàn)證人的簽名(signatures)。
?
投票權(quán)重的變更應(yīng)用到H+1高度的區(qū)塊,如此下一個(gè)出塊提議人將受到這個(gè)更新的影響。尤其是本應(yīng)是下一個(gè)提議者的驗(yàn)證人已被剔除的情況。這里Round-robin算法可以優(yōu)雅地處理這個(gè)問題,簡(jiǎn)單有序地轉(zhuǎn)移到下一個(gè)出塊提議人。因?yàn)橥粋€(gè)區(qū)塊在至少三分之二的驗(yàn)證人節(jié)點(diǎn)上被復(fù)制,同時(shí)Round-robin是確定性算法,所以他們都將進(jìn)行相同的更新,并等待下一個(gè)提議人。
?
懲罰拜占庭驗(yàn)證人
比特幣設(shè)計(jì)中的一個(gè)顯著的特點(diǎn)是它的激勵(lì)機(jī)制(incentive structure),就目前而言,協(xié)議的目標(biāo)是通過獎(jiǎng)勵(lì)驗(yàn)證者來激勵(lì)他們正確行事。雖然這在比特幣的共識(shí)協(xié)議背景下是有意義的,但更好的獎(jiǎng)懲制度也許需要提供一種健壯性反激勵(lì)機(jī)制(strong dis-incentives),如此對(duì)于網(wǎng)絡(luò)驗(yàn)證人來說利益共享、風(fēng)險(xiǎn)共擔(dān),而不是一些溫和的機(jī)會(huì)成本(opportunity cost)。
?
在Tendermint中的獎(jiǎng)懲可以使用一種方法來實(shí)現(xiàn),這就是由Vitalik Buterin以一種名為Proof-of-Stake的協(xié)議來提出的。從本質(zhì)上來說,驗(yàn)證人必須準(zhǔn)備一份安全保證金(他們必須持有一定的股份)才能參與到共識(shí)中。如果他們被發(fā)現(xiàn)有雙重簽名的提議或投票行為,其他驗(yàn)證人就可以以交易的形式發(fā)布這些違規(guī)行為的證據(jù),通過剔除違規(guī)者,應(yīng)用程序狀態(tài)可以使用交易的形式來變更驗(yàn)證人集合,并懲處他的保證金。這就產(chǎn)生了將顯性經(jīng)濟(jì)成本與拜占庭行為相關(guān)聯(lián)的影響,進(jìn)而使得諸如賄賂三分之一甚至更多驗(yàn)證人的拜占庭節(jié)點(diǎn)(Byzantine)考量自己的違規(guī)成本。
?
請(qǐng)注意,一種共識(shí)協(xié)議可能會(huì)指定更多的可以被懲罰的行為,而不僅僅是雙重簽名。我們尤其喜歡懲罰任何帶有強(qiáng)烈信號(hào)的不當(dāng)行為——典型如 任何上報(bào)的狀態(tài)變更都不是基于其它節(jié)點(diǎn)已上報(bào)的狀態(tài)。例如在Tendermint實(shí)現(xiàn)版本中,所有的預(yù)提交必須帶有證明他們的波卡鎖,驗(yàn)證人可能因廣播不合理的預(yù)提交而受到懲罰。但是請(qǐng)注意,我們不能僅僅因?yàn)槿魏蔚囊馔庑袨槎鴩?yán)厲懲罰——例如,當(dāng)一個(gè)驗(yàn)證人在不是他的當(dāng)前回合而發(fā)起提議,可能就是一種異步搶占(pre-empt asynchrony)或節(jié)點(diǎn)奔潰(crashed nodes)的情況為依據(jù)來優(yōu)化。
?
軟件升級(jí)
Governmint也可以在一個(gè)去中心化的網(wǎng)絡(luò)(decentralized network)上以一種自然的方式商議軟件升級(jí)問題。眾所周知,在一個(gè)公共網(wǎng)絡(luò)上的軟件升級(jí)是一個(gè)具有挑戰(zhàn)的事情,需要慎重規(guī)劃去保持因沒有第一時(shí)間升級(jí)的用戶的向下兼容性(backwards compatibility),也不能由于軟件引入缺陷、移除產(chǎn)品特性、增加復(fù)雜度、或者,也許最糟糕的是未經(jīng)許可而自動(dòng)升級(jí)而讓忠實(shí)的用戶感到不快。
?
在比特幣上升級(jí)一個(gè)去中心化的共識(shí)系統(tǒng)的挑戰(zhàn)是顯而易見的。以太坊已經(jīng)完成了一項(xiàng)成功的、非向下兼容的升級(jí),是因?yàn)樗袕?qiáng)大的領(lǐng)導(dǎo)力和意見統(tǒng)一的社區(qū);而比特幣由于帶有惡意、分化的社區(qū)以及缺乏強(qiáng)大的領(lǐng)導(dǎo)力,盡管大量的軟件工程問題暴露,卻不能完成一些必須的升級(jí)。
?
由于變更的適用范圍不同,區(qū)塊鏈的升級(jí)通常可分為軟分叉(soft forks)和硬分叉(hard forks)。軟分叉意味著向下兼容,并使用協(xié)議中的自由度,沒有升級(jí)的用戶可能會(huì)忽略這一點(diǎn),但是這可以為已升級(jí)的用戶提供新的特性。另一方面,硬分叉是不向下兼容的升級(jí),就比特幣而言,硬分叉可能會(huì)導(dǎo)致安全方面的破壞,而就Tendermint而言,則會(huì)導(dǎo)致整個(gè)系統(tǒng)停止運(yùn)行。
?
為了應(yīng)對(duì)這一問題,比特幣軟件的開發(fā)者們推出了一系列軟分叉,驗(yàn)證人可以通過在新的區(qū)塊中發(fā)出信號(hào)來投票。一旦驗(yàn)證人的某個(gè)閾值發(fā)出更新的信號(hào),它就會(huì)自動(dòng)在整個(gè)網(wǎng)絡(luò)中生效,至少對(duì)于支持更新的軟件版本的用戶來說是這樣的。比特幣系統(tǒng)的實(shí)用性在這些軟分叉的基礎(chǔ)上得到了極大的提高,而且可以預(yù)見這一切將會(huì)繼續(xù)。有趣的是,社區(qū)未能對(duì)軟件成功的硬分叉,一方面引起了人們對(duì)該系統(tǒng)長(zhǎng)期穩(wěn)定性的擔(dān)憂,另一方面也引起了對(duì)系統(tǒng)恢復(fù)舞弊治理的激勵(lì)和啟發(fā)——這是一種無法治理的能力。
?
考慮到當(dāng)今世界明顯的政府貪腐現(xiàn)象(government corruption),有很多理由采用后一種方法(譯者注:去中心化系統(tǒng)治理自治的方案)。如此,由密碼學(xué)和分布式共識(shí)提供了一套新的工具,很大程度上能夠?qū)崿F(xiàn)一定透明度和問責(zé)制,這在現(xiàn)代政府的紙質(zhì)版世界里是無法想象的,甚至在傳統(tǒng)網(wǎng)絡(luò)(traditional web)中的數(shù)字世界(digital world)里也不存在,因?yàn)閭鹘y(tǒng)網(wǎng)絡(luò)嚴(yán)重缺乏足夠健壯的身份驗(yàn)證系統(tǒng)(suffers tremendously from a lack of sufficiently robust authentication systems)。
?
在使用Governmint的系統(tǒng)中,開發(fā)者將是區(qū)塊鏈上的可識(shí)別個(gè)體,可以為系統(tǒng)升級(jí)提交提議。這種機(jī)制與Github上的Pull Request非常相似,只是它被集成到一個(gè)實(shí)時(shí)運(yùn)行的系統(tǒng)中,并通過共識(shí)協(xié)議達(dá)成一致。應(yīng)該使用可配置的更新參數(shù)來實(shí)現(xiàn)客戶端,這樣他們就可以指定是系統(tǒng)自動(dòng)更新還是先通知客戶端。
?
當(dāng)然,任何未經(jīng)徹底審查的軟件升級(jí)對(duì)系統(tǒng)來講都可能形成風(fēng)險(xiǎn),一般來說應(yīng)該采取保守的方法來升級(jí)。
?
故障恢復(fù)
在某些諸如交易日志中的歧義,或者系統(tǒng)停止運(yùn)行等緊急事件的情況下,傳統(tǒng)的共識(shí)系統(tǒng)幾乎不提供任何保證,通常需要通過人工干預(yù)來解決。
?
Tendermint確保那些違反安全的驗(yàn)證人可以被標(biāo)識(shí)出來,如此,那些可以連接到至少一個(gè)誠實(shí)節(jié)點(diǎn)的任意客戶端,能夠明確辨別誰是不誠實(shí)的驗(yàn)證人,并由此選擇跟隨誠實(shí)的節(jié)點(diǎn)進(jìn)入一個(gè)新的鏈,其中包含一個(gè)不包括拜占庭節(jié)點(diǎn)的驗(yàn)證人集合。
?
例如,假設(shè)有三分之一甚至更多的驗(yàn)證人違反了鎖定規(guī)則(locking rules),導(dǎo)致在高度H提交了兩個(gè)區(qū)塊,誠實(shí)的驗(yàn)證人可以通過廣播(gossipping)所有的投票來確定是誰在重復(fù)簽名(double-signed)。在這點(diǎn)上,它們不能使用協(xié)商一致協(xié)議,因?yàn)橐呀?jīng)違背了基本錯(cuò)誤假設(shè)。注意,此時(shí)能夠在高度H搜集投票意味著一種很強(qiáng)的假設(shè)場(chǎng)景,在故障期間網(wǎng)絡(luò)的連通性和可用性,如果p2p網(wǎng)絡(luò)已經(jīng)無法提供這個(gè)能力,則可能需要驗(yàn)證人使用諸如社交媒體和高可用服務(wù)的替代方法來傳遞憑證(evidence)。只要超過三分之二的誠實(shí)節(jié)點(diǎn)收集到所有的憑證,就可以啟動(dòng)一條新的區(qū)塊鏈。
?
另一種方法是,修改Tendermint協(xié)議來使得預(yù)提交(pre-commits)帶有波爾卡鎖,這能夠確保分叉的責(zé)任人(those responsible for the fork)會(huì)立即受到懲罰,而且不需要額外的公布時(shí)間。這項(xiàng)修改有待今后的工作來實(shí)現(xiàn)。
?
Governmint更復(fù)雜的應(yīng)用可能更適合處理各種故障細(xì)節(jié),比如永久性崩潰(permanent crash failures)和私鑰泄露(compromise of private keys)等。不管怎樣必須仔細(xì)考慮這些問題,因?yàn)樗鼈兛赡芷茐牡讓訁f(xié)議的安全保障。我們把對(duì)于這些問題的研究留給未來的工作,但請(qǐng)注意在理解區(qū)塊鏈從故障恢復(fù)的能力方面,它所處的社會(huì)經(jīng)濟(jì)環(huán)境的重要性。
?
無論故障恢復(fù)如何進(jìn)行,能否成功還是取決于客戶端集成。如果客戶端不接受新鏈,那么它提供的服務(wù)實(shí)際上是離線的。因此,客戶端必須知道指定區(qū)塊鏈用于恢復(fù)的具體規(guī)則。在上述安全違規(guī)的情況下,它們還必須搜集憑證來確定要移除哪個(gè)驗(yàn)證人,并通過其余的驗(yàn)證人重新計(jì)算狀態(tài)。在沒有在線的情況下,保持治理能力。
?
最后結(jié)論
治理能力是分布式共識(shí)系統(tǒng)的一個(gè)關(guān)鍵要素(critical element),盡管主流的治理系統(tǒng)仍未得到充分理解。Tendermint提供了一種稱為Governmint的TMSP模塊,旨在促進(jìn)對(duì)分布式系統(tǒng)的基于軟件治理(software-based governance for distributed systems)的更多實(shí)驗(yàn)。
?
相關(guān)閱讀:
區(qū)塊鏈時(shí)代的拜占庭容錯(cuò):Tendermint(一)
區(qū)塊鏈時(shí)代的拜占庭容錯(cuò):Tendermint(二)
區(qū)塊鏈時(shí)代的拜占庭容錯(cuò):Tendermint(三)
區(qū)塊鏈時(shí)代的拜占庭容錯(cuò):Tendermint(四)
轉(zhuǎn)載于:https://my.oschina.net/u/3620978/blog/2992472
總結(jié)
以上是生活随笔為你收集整理的区块链时代的拜占庭容错:Tendermint(五)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: L200
- 下一篇: virtualbox+vagrant学习