區(qū)塊鏈技術(shù)常見的共識機制及其應(yīng)用介紹
Q1:先來科普一下什么是“區(qū)塊鏈的共識機制”吧?
區(qū)塊鏈系統(tǒng)是一個去中心化的分布式系統(tǒng),節(jié)點是分散在各處,需要設(shè)計一套完善的機制,以維護系統(tǒng)的運作順序與公平性,統(tǒng)一區(qū)塊鏈的版本,同時獎勵提供資源維護區(qū)塊鏈的使用者,并懲罰惡意的危害者。這樣的機制,需要依賴某種方式來證明,證明是由誰取得了一個區(qū)塊鏈的記帳權(quán),并可以獲取打包這一個區(qū)塊的獎勵;或者是誰意圖作惡,會獲得一定的懲罰,這就是區(qū)塊鏈系統(tǒng)的共識機制。
上面的介紹比較抽象,下面會收斂一下。我們知道區(qū)塊鏈應(yīng)用和傳統(tǒng)的互聯(lián)網(wǎng)應(yīng)用的最大的區(qū)別在于應(yīng)用的維護方不屬于單個實體內(nèi)部,節(jié)點之間互不信任,并且一般的公鏈網(wǎng)絡(luò)規(guī)模會比較龐大。在這樣的場景下,如何保證網(wǎng)絡(luò)中所有節(jié)點的最終一致性是一件非常困難的事情,區(qū)塊鏈的共識機制就是解決這個問題的??偨Y(jié)一下:區(qū)塊鏈的共識機制解決的是“不可信環(huán)境下全球部署的分布式一致性問題”。
Q2: 常見的共識類型及應(yīng)用主要有哪些呢?
自比特幣網(wǎng)絡(luò)創(chuàng)建以來至今已經(jīng)經(jīng)過10多年了,區(qū)塊鏈的共識也有很大的發(fā)展,近年來不斷有新的算法相繼被提出,下面這個圖簡單總結(jié)一下常見的共識機制及其應(yīng)用。
Q3: 百度超級鏈共識框架的設(shè)計初衷是怎么樣的呢?
超級鏈設(shè)計上是一個通用的區(qū)塊鏈框架,用戶可以很方便地依據(jù)自己的應(yīng)用場景進行選擇或者定制自己的功能。共識機制是區(qū)塊鏈系統(tǒng)中一個非常重要的模塊,是整個網(wǎng)絡(luò)安全性保障的重要部分,所以共識機制的設(shè)計是區(qū)塊鏈網(wǎng)絡(luò)中的一個難點。同時不同的共識機制,適合不同的應(yīng)用場景。
為了幫助用戶能夠輕松快速地選擇和定制自己的共識機制,超級鏈設(shè)計了一個能夠復(fù)用底層共識安全的共識框架,用戶基于這樣的框架可以輕松地定義自己的鏈,而不需要考慮底層的共識安全和網(wǎng)絡(luò)安全。并且結(jié)合著超級鏈的治理機制,能夠?qū)崿F(xiàn)共識的熱插拔升級。
Q4:前面提到了“結(jié)合著超級鏈的治理機制,能夠?qū)崿F(xiàn)共識的熱插拔升級”,那么超級鏈的共識為什么要設(shè)計成熱插拔的呢?這個熱插拔主要體現(xiàn)在哪些方面呢?
超級鏈設(shè)計上是一個平行鏈的架構(gòu),不同鏈創(chuàng)建時可以選擇自己的共識機制。但是隨著業(yè)務(wù)的發(fā)展,創(chuàng)建鏈時選定的共識類型或者共識參數(shù)可能不能很好地滿足業(yè)務(wù)的需求,所以會存在升級共識的需求。因此超級鏈的共識機制才設(shè)計成了熱插拔的形式。
超級鏈的熱插拔共識主要體現(xiàn)在以下3個方面:
1. 平行鏈可以通過配置創(chuàng)世塊的方式選擇符合自己應(yīng)用場景的共識;
2. 單鏈內(nèi)的共識類型可以通過系統(tǒng)的治理機制進行共識的熱升級;
3. 平行鏈也可以選擇復(fù)用主鏈的共識從而共享主鏈的共識安全。
Q5:我們了解了超級鏈共識機制設(shè)計的背景,那共識框架究竟是什么樣子呢?
上圖就是超級鏈共識模塊的整體架構(gòu)圖。自底向上主要包括3層:
1 共識公共組件層:該層主要是不同共識可以共用的組件,包括共識公共節(jié)點Consensus
Interface、Chained-BFT、GPS原子鐘等,它可以為鏈提供底層的共識safety保障;
2 共識類型層:中間層為超級鏈以及支持或者即將支持的共識類型,主要包括TDPoS、Pow、授權(quán)共識等?;诘讓拥墓沧R安全能力,這一層,用戶可以定義有自己特色的共識類型,如類似DPoS這種選舉機制的共識,也可以定義其自己鏈的Staking等相關(guān)邏輯;
3 可插拔共識層:最上層是可插拔共識的運行態(tài),包括Step Consensus 和Pluggable Consensus兩個實例,該層主要負責(zé)維護了鏈從創(chuàng)建到當(dāng)前高度的共識的所有升級歷史。
Q6:既然說“不同鏈可以擁有自己共識”,那么在單鏈內(nèi)共識的流程又是怎樣的呢?
超級鏈單鏈內(nèi)與共識交互的主要函數(shù)有2個,分別是Miner和SendBlock。
Miner是挖礦的主流程,SendBlock是節(jié)點接受到一個新的區(qū)塊驗證的主要過程。
超級鏈的共識整體流程如上圖所示,主要包括7個步驟:
1. 用戶提交交易到網(wǎng)絡(luò),交易執(zhí)行完后會進入未確認(rèn)狀態(tài),并記錄在交易的未確認(rèn)列表中TxPool中;
2. 節(jié)點的Miner流程通過訪問Consensus模塊判斷自己是否為當(dāng)前的礦工;
3. 當(dāng)節(jié)點判斷自己是礦工時需要從TxPool中拉取交易并進行區(qū)塊的打包;
4. 當(dāng)?shù)V工完成打包后會將區(qū)塊廣播給其他的驗證節(jié)點,同時會通過步驟7將區(qū)塊寫入到賬本;
5. 如果某個時刻其他節(jié)點判斷自己是礦工,同樣地會按照上述1-5流程進行區(qū)塊打包,打包完后會將區(qū)塊廣播給該節(jié)點;
6. 節(jié)點收到區(qū)塊后,會調(diào)用consensus模塊進行區(qū)塊的有效性驗證;
7. 礦工打包完后或者驗證節(jié)點收到一個有效的區(qū)塊后,將區(qū)塊寫入賬本。
Q7:那超級鏈共識框架接口以及使用場景具體有哪些呢?
超級鏈整個共識框架主要有2套接口,分別是共識基礎(chǔ)接口和共識安全接口,適用的場景不同,用戶可以根據(jù)其自己的需求進行選擇。
場景一:用戶希望定義自己的共識功能并獨立負責(zé)共識安全;那么用戶僅需要實現(xiàn)共識基礎(chǔ)接口即可,就可以和整體的流程打通;
場景二:用戶希望定義自己的共識功能,但是希望框架底層能幫助保證共識安全;那么用戶需要實現(xiàn)共識基礎(chǔ)接口和共識安全接口,這樣用戶在設(shè)計自己的共識時就不需要考慮底層共識safety問題;
Q8:共識基礎(chǔ)接口是什么呢?
共識基礎(chǔ)接口是共識模塊的核心接口,是與core模塊交互的主要部分。其中最核心的部分主要是CompeteMaster和CheckMinerMatch兩個。CompeteMaster是一個節(jié)點判斷自己是否為主的主要邏輯,CheckMinerMatch是節(jié)點收到一個區(qū)塊驗證其區(qū)塊有效性的主要邏輯。
Q9:那共識安全接口又是什么?
共識安全接口是保證底層共識安全的核心接口,共識框架底層支持了Hotstuff算法的高性能的共識安全模塊Chained-BFT。暴露出了 PacemakerInterface 和 ExternalInterface 兩套接口,其中PacemakerInterface 是Chained-BFT的活性保證,此外為了擴展Chained-BFT安全模塊能夠應(yīng)用于更多的仲裁類型,底層Chained-BFT設(shè)計上不需要理解仲裁的具體內(nèi)容,通過ExternalInterface 會與外層的共識進行通信。
來源: 百度超級鏈?