官术网_书友最值得收藏!

1.2.3 Tendermint Core

構(gòu)建互聯(lián)互通的Cosmos網(wǎng)絡(luò)的藍(lán)圖令人興奮,但切實(shí)構(gòu)建區(qū)塊鏈網(wǎng)絡(luò)需要直面區(qū)塊鏈開發(fā)中的諸多技術(shù)挑戰(zhàn)。為了催生更多的應(yīng)用專屬區(qū)塊鏈系統(tǒng),需要消除區(qū)塊鏈領(lǐng)域的創(chuàng)新障礙。針對這一問題,Tendermint團(tuán)隊(duì)構(gòu)建了以Tendermint Core和Cosmos-SDK為核心的區(qū)塊鏈開發(fā)框架。Cosmos Hub網(wǎng)絡(luò)的客戶端Gaia便是基于Tendermint Core和Cosmos-SDK構(gòu)建的。Cosmos Hub主網(wǎng)上線以來的平穩(wěn)運(yùn)行,展示了Tendermint Core和Cosmos-SDK的可靠性。

Tendermint團(tuán)隊(duì)將區(qū)塊鏈系統(tǒng)自下而上拆解為3層:對等網(wǎng)絡(luò)通信層、共識協(xié)議層以及上層應(yīng)用層。區(qū)塊鏈系統(tǒng)的3層結(jié)構(gòu)如圖1-3所示。Tendermint Core中提供了對等網(wǎng)絡(luò)通信層與共識協(xié)議層的實(shí)現(xiàn),并抽象出區(qū)塊鏈應(yīng)用接口(application blockchain interface,ABCI)來完成共識協(xié)議層與上層應(yīng)用層的互動。

圖1-3 區(qū)塊鏈系統(tǒng)的3層結(jié)構(gòu)

  • 對等網(wǎng)絡(luò)通信層:對等網(wǎng)絡(luò)通信,確保交易、區(qū)塊、共識協(xié)議的消息能夠快速地在整個網(wǎng)絡(luò)內(nèi)廣播。
  • 共識協(xié)議層:構(gòu)建新的區(qū)塊,并通過共識協(xié)議確保全網(wǎng)就區(qū)塊內(nèi)容(交易、上層應(yīng)用狀態(tài)等)達(dá)成共識。
  • 上層應(yīng)用層:根據(jù)共識協(xié)議層構(gòu)建的區(qū)塊,通過ABCI與上層應(yīng)用交互,執(zhí)行區(qū)塊中的交易并完成上層應(yīng)用的狀態(tài)更新。

在這種分層結(jié)構(gòu)中,共識協(xié)議層不關(guān)心交易的具體內(nèi)容,而將所有的交易看作簡單的字節(jié)切片。共識協(xié)議完成的主要任務(wù),是在全網(wǎng)就交易的順序達(dá)成共識。與以太坊類似,Tendermint Core要求上層應(yīng)用狀態(tài)更新是確定性的過程,即從相同初始狀態(tài)開始,按照相同順序處理交易之后,上層應(yīng)用的狀態(tài)在全網(wǎng)之間應(yīng)保持一致。為了確保這種狀態(tài)更新的一致性,共識協(xié)議層在利用區(qū)塊就交易順序達(dá)成共識之外,也會在區(qū)塊中包含上層應(yīng)用狀態(tài)的“數(shù)字指紋”,確保在每個區(qū)塊開始執(zhí)行之前,全網(wǎng)對上層應(yīng)用狀態(tài)也達(dá)成了共識。

前文提到過,PoW 機(jī)制與中本聰共識協(xié)議帶來的大量資源消耗以及效率低下等問題被廣為詬病。隨著區(qū)塊鏈技術(shù)的演進(jìn),PoS機(jī)制與BFT共識協(xié)議的組合成為應(yīng)對該問題的“良方”。然而PBFT共識協(xié)議存在通信復(fù)雜度大的問題,這導(dǎo)致其無法妥善處理區(qū)塊鏈這種大規(guī)模分布式系統(tǒng)的情形。Tendermint團(tuán)隊(duì)在工程創(chuàng)新之外,也就該問題進(jìn)行了理論創(chuàng)新:通過改進(jìn)PBFT共識協(xié)議,構(gòu)造了適用于區(qū)塊鏈場景的Tendermint共識協(xié)議。基于BFT的Tendermint共識協(xié)議,在支撐幾百個共識節(jié)點(diǎn)的情況下,依然可以實(shí)現(xiàn)秒級出塊的速度。Tendermint共識協(xié)議逐塊最終化(finality)的特性,既保證了區(qū)塊鏈不會發(fā)生比特幣或者以太坊中的重組事件,也實(shí)現(xiàn)了交易的秒級確認(rèn)。

Jae Kwon在2014年開始Tendermint共識協(xié)議的研發(fā),2015年Ethan Buchman參與進(jìn)來一同進(jìn)行相關(guān)協(xié)議和軟件的開發(fā),并最終構(gòu)建了Tendermint Core的原型系統(tǒng)。BFT共識協(xié)議通常要求在執(zhí)行一輪共識協(xié)議之前,要先確定協(xié)議的參與者(后文稱之為驗(yàn)證者),Tendermint共識協(xié)議也不例外。但Tendermint Core并沒有硬編碼選擇驗(yàn)證者的規(guī)則,而是通過適當(dāng)?shù)臋C(jī)制設(shè)計以及ABCI,為上層應(yīng)用保留了更新驗(yàn)證者集合的權(quán)利。

Tendermint共識協(xié)議在每一輪共識協(xié)議執(zhí)行開始前,都會有一個驗(yàn)證者成為新區(qū)塊提案者(proposer),提案者通過打包交易構(gòu)建新的區(qū)塊,并通過對等網(wǎng)絡(luò)將區(qū)塊廣播到全網(wǎng)。所有驗(yàn)證者根據(jù)收到的信息和自身狀態(tài)就區(qū)塊內(nèi)容進(jìn)行兩階段投票:預(yù)投票(prevote)和預(yù)提交(precommit)。Tendermint共識協(xié)議執(zhí)行過程。投票可以投給新構(gòu)造的區(qū)塊,表示驗(yàn)證者認(rèn)同該區(qū)塊內(nèi)容;也可以投給空值,表示驗(yàn)證者因?yàn)槟撤N原因無法認(rèn)同該區(qū)塊的內(nèi)容。對區(qū)塊足夠多的預(yù)投票(超過2/3),可以促使驗(yàn)證者進(jìn)入下一階段的投票過程;而針對區(qū)塊足夠多(超過2/3)的預(yù)提交,可以促使所有節(jié)點(diǎn)提交(commit)該區(qū)塊。區(qū)塊被提交之后,Tendermint Core的共識協(xié)議層通過ABCI與上層應(yīng)用互動,完成區(qū)塊內(nèi)交易的處理,執(zhí)行結(jié)果也通過ABCI返回給共識協(xié)議層。

為了支持上層應(yīng)用的深度定制,Tendermint Core將共識協(xié)議層與上層應(yīng)用的互動通過ABCI進(jìn)行了抽象。通過將區(qū)塊的執(zhí)行過程合理劃分為多個步驟,上層應(yīng)用甚至可以定制篩選驗(yàn)證者的邏輯,賦予了應(yīng)用專屬區(qū)塊鏈系統(tǒng)完全的自主權(quán)。基于ABCI開發(fā)上層應(yīng)用,應(yīng)用只需要實(shí)現(xiàn)特定的接口,就可以復(fù)用Tendermint Core提供的Tendermint共識協(xié)議以及對等網(wǎng)絡(luò)通信。通過這種方式,應(yīng)用開發(fā)者可以專注于上層應(yīng)用的開發(fā),由此應(yīng)用專屬區(qū)塊鏈系統(tǒng)的開發(fā)周期從通常的幾年縮短為幾個月。

主站蜘蛛池模板: 宜黄县| 元氏县| 花垣县| 察哈| 绍兴县| 祁东县| 津市市| 晋宁县| 油尖旺区| 宣城市| 贵溪市| 新郑市| 平邑县| 通城县| 沙坪坝区| 怀化市| 中牟县| 台安县| 定结县| 定安县| 昌图县| 洪泽县| 台东县| 富顺县| 郯城县| 都兰县| 兰西县| 张北县| 上林县| 北宁市| 安阳市| 彭山县| 高碑店市| 河池市| 湾仔区| 县级市| 水城县| 伊金霍洛旗| 克山县| 乌恰县| 德令哈市|