去中心化特性決定了區(qū)塊鏈有達成共識的需要。區(qū)塊鏈的共識機制從比特幣的PoW開始逐漸發(fā)展出新模式,如PoS、BFT等。而波卡采用了混合的共識算法。共識機制一直都會是區(qū)塊鏈技術(shù)發(fā)展的重點領(lǐng)域。
· 雙重支付
· 中心化的貨幣發(fā)行
本文首先介紹比特幣解決上述問題的方法,其次討論共識的一些精妙之處,如容錯性和最終性(最終確定性的簡稱),最后以一些項目為例子進行討論,以及探討未來的方向。
比特幣如何解決雙重支付和貨幣發(fā)行問題?
要理解為什么容錯性對區(qū)塊鏈如此重要,有必要解釋一下比特幣解決的兩個問題(雙花和中心化貨幣發(fā)行)。
換句話說,為了防止任意超發(fā),比特幣以一種可預(yù)測、透明且去中心化的方式發(fā)行貨幣。管理貨幣轉(zhuǎn)賬和發(fā)行過程的機制的就是共識算法,能夠確保整個交易歷史的一致性(共識)。
共識算法在區(qū)塊鏈技術(shù)時代并不是新玩意兒,強調(diào)比特幣為什么具有創(chuàng)新性是很重要的:因為在公有的無須許可的網(wǎng)絡(luò)中,即使有潛在的惡意行為者出現(xiàn),比特幣也可以達成共識。
PoW的共識算法
眾所周知,像比特幣這種PoW的區(qū)塊鏈,節(jié)點通過獲得創(chuàng)建新區(qū)塊所產(chǎn)生的新幣獎勵,來維護整個網(wǎng)絡(luò)的安全。該獎勵提供了一種激勵機制,使礦工在盡可能快速創(chuàng)造新區(qū)塊的同時,始終表現(xiàn)誠實。
獲勝的關(guān)鍵在于,創(chuàng)造新區(qū)塊需要解出一個獨特且計算困難的數(shù)學(xué)難題。它數(shù)學(xué)題的難度從根本上限制了新區(qū)塊產(chǎn)生的速度,且答案的唯一性可以使網(wǎng)絡(luò)識別出獲勝節(jié)點(通過他們的地址)。雖然惡意行為不會受到特意懲罰,但并沒有動力去做,因為不誠實的行為存在機會成本。
存在的一個問題是,節(jié)點之間的通信不是即時的,因此處于網(wǎng)絡(luò)中不同地理區(qū)域的節(jié)點可能會收到自稱已解出難題的不同區(qū)塊(網(wǎng)絡(luò)分區(qū)/分叉)。兩個不同的節(jié)點 (礦工) 有可能碰巧都合法地解出了難題,但是由于全網(wǎng)不同區(qū)域間不是即時通信,網(wǎng)絡(luò)中的不同分區(qū)就會選擇基于不同的獲勝區(qū)塊來構(gòu)建區(qū)塊鏈(臨時性)。這會導(dǎo)致臨時分叉,但由于總有新區(qū)塊被添加到每個分支上,最終總會出現(xiàn)一個較長的分支。
選擇最長的區(qū)塊分支,實際上是比特幣為實現(xiàn)共識而制定的規(guī)則,該規(guī)則被稱為最長鏈規(guī)則。較短分支上的區(qū)塊則會被丟棄,并且所有不在主分支上的交易最終都會被添加到主分支的區(qū)塊中。請注意,非法交易(例如:那些試圖進行雙重支付的交易)則不會被包含在構(gòu)成最長鏈的區(qū)塊中。包含此類交易的區(qū)塊也將被丟棄,因為任何“貨幣”都只能被花費一次。這里需要注意的是,大多數(shù)節(jié)點都是誠實的(至少51%),并且這些節(jié)點不會嘗試去破壞協(xié)議。
理論上講,一條新的最長鏈可以通過擁有更強的挖礦算力創(chuàng)造出來。但是這對于靠近“鏈的頭部”的區(qū)塊(最新產(chǎn)生的區(qū)塊)來說,風(fēng)險是最大的。區(qū)塊在整個鏈上的深度越深,它被逆轉(zhuǎn)的可能性就越小。
這說明PoW 鏈上的區(qū)塊總是會有被逆轉(zhuǎn)的可能,那么這些區(qū)塊中的交易也就可能都沒發(fā)生。在一條被惡意創(chuàng)造的鏈上,交易是不會被保存進新區(qū)塊中,原因如上所述。
比特幣白皮書中建議,等待6 個區(qū)塊的時間便足以確保交易不會被拒絕,因為此時區(qū)塊被丟棄的可能性非常小。我們可以從這里認識“最終確定性”(以下簡稱最終性):無法被逆轉(zhuǎn)的區(qū)塊可以被稱作是“最終確定的”。在比特幣及其他PoW 區(qū)塊鏈中,最終性并不是那么完美,因為區(qū)塊總有被逆轉(zhuǎn)的可能。
以上說明,比特幣具有強大的抵抗故障的魯棒性,并且可以在公共和無須許可的網(wǎng)絡(luò)中以去中心化的方式發(fā)行貨幣。通過探索確保最終性的方法,能夠確保更高水平的安全性。這一觀點將在后文的容錯部分中進行探討。
PoS區(qū)塊鏈
還應(yīng)該注意的是,一些權(quán)益證明(PoS) 區(qū)塊鏈的運行方式與比特幣類似。大多數(shù) PoS 鏈用選舉產(chǎn)生區(qū)塊來代替挖礦。與PoW鏈讓獲勝礦工創(chuàng)建下個區(qū)塊不同,PoS鏈的新區(qū)塊是由隨機選擇的節(jié)點(“領(lǐng)導(dǎo)者”)來創(chuàng)建。
被選中(創(chuàng)建新區(qū)塊)的概率是由權(quán)益的數(shù)量來決定的。這個理念是,持有的幣越多,說明更希望區(qū)塊鏈取得成功,因此這樣的節(jié)點將獲得更大概率來創(chuàng)建下個區(qū)塊。
NXT 是最早的 PoS 鏈之一,使用這種隨機(選舉)領(lǐng)導(dǎo)者的方法來創(chuàng)建新區(qū)塊。NXT 的共識機制與比特幣相同:創(chuàng)建的新區(qū)塊都會被添加到最長鏈上。通過遵守這個規(guī)則,任何分叉問題都能夠被解決,節(jié)點則繼續(xù)在最長鏈上創(chuàng)建區(qū)塊。
拜占庭協(xié)議與容錯性
當(dāng)參與者出現(xiàn)違反協(xié)議的操作時,(網(wǎng)絡(luò))就會出現(xiàn)錯誤。對區(qū)塊鏈來說,因為可能存在惡意行為者試圖利用協(xié)議的弱點,所以我們希望協(xié)議足夠安全,可以抵御任何故障。任何可抵御任意故障的協(xié)議,也足夠安全去防范隨機故障及惡意行為者。
即使有一小部分參與者的行為表現(xiàn)異常,拜占庭容錯(BFT) 協(xié)議也能正常工作。行為不當(dāng)?shù)墓?jié)點,可能是發(fā)生了意外故障,也可能是惡意行為。當(dāng)然,這里假設(shè)大多數(shù)參與者都是遵守協(xié)議的。這種觀點在一篇名為“拜占庭將軍問題”的研究論文中提到。該問題討論的是,多個參與者如何就一個簡單的信息達成一致。(藍狐筆記注:拜占庭問題可以參考藍狐筆記之前的文章《簡單讀懂拜占庭容錯》)
當(dāng)在拜占庭協(xié)議中達成共識時,商定好的結(jié)果一定是正確的。也就是說,商定的結(jié)果可以被看作是確定性的正確,而不是概率性的。當(dāng)應(yīng)用在區(qū)塊鏈時,拜占庭算法保證了交易的最終性。這意味著一旦在區(qū)塊中達成協(xié)議,區(qū)塊就會最終確定,其中的交易也不能被逆轉(zhuǎn)。
顯然這與比特幣和其他PoW 鏈不同。如上所述,那些鏈僅能達成一定概率的確定性。比特幣的共識類型通常被稱為“中本聰共識”,很容易看出來,為什么它會和拜占庭容錯混淆,因為二者都是可容錯的,但只有后者才能保證最終確定性。更深層次的混淆,來自于比特幣的區(qū)塊創(chuàng)建與共識算法高度重疊。但事實上并不需要這樣。
以太坊未來路線的提案之一,就是像現(xiàn)在一樣繼續(xù)由礦工生產(chǎn)區(qū)塊,但會讓一些節(jié)點充當(dāng)驗證者來提供最終確定性,從而加強共識。驗證者在已創(chuàng)建的區(qū)塊上進行投票。通過給某個區(qū)塊投票,即表示他們認為該區(qū)塊是正確的。一旦有三分之二的驗證者投票,那么這個區(qū)塊就可以被認為是最終確定的了。這種在挖礦后的拜占庭共識機制被稱為“最終確定性組件”。
發(fā)展探索
大多數(shù)正在開發(fā)的新項目都將區(qū)塊創(chuàng)建與共識進行分離。未來的一些區(qū)塊鏈也將采用混合共識算法。這一部分將介紹一些正在探索的未來方向。
Cosmos(ATOM)
Cosmos 的區(qū)塊創(chuàng)建也是由(通過權(quán)益的權(quán)重比例)隨機選擇的領(lǐng)導(dǎo)者完成,但是Cosmos 的共識中沒有最長鏈規(guī)則。相應(yīng)地,它采用了被稱為Tendermint 的拜占庭算法。這意味著每個區(qū)塊都能保證最終確定性。此外,如果驗證者不能就單個區(qū)塊達成共識,按照Cosmos的設(shè)計,Cosmos將會暫時停下來,以防止分叉。
Polkadot波卡(DOT)
Polkadot采用混合共識算法。區(qū)塊將由隨機領(lǐng)導(dǎo)者創(chuàng)建,該領(lǐng)導(dǎo)者會將下個區(qū)塊添加到最長鏈上。Polkadot 還將采用拜占庭協(xié)議,但不是每輪投票只產(chǎn)生一個區(qū)塊,而是在一次投票中最終確定多個區(qū)塊。
采用混合共識機制的一個好處是,區(qū)塊鏈可以在最長鏈上連續(xù)生產(chǎn)區(qū)塊,同時在不影響鏈活性(即鏈永遠不會被停止)的情況下,最終實現(xiàn)拜占庭最終確定性。
目前在Polkadot 當(dāng)前的測試網(wǎng)絡(luò) PoC-2 (也叫做 Krumme Lanke) 中,其共識類似于 Cosmos。區(qū)塊由隨機選擇的驗證者節(jié)點生成,在通過拜占庭協(xié)議將其最終確定后,再生產(chǎn)下個區(qū)塊。
Cardano(ADA)
簡單來說,Cardano 的共識算法類似于比特幣(最長鏈規(guī)則)。與NXT 相同,區(qū)塊的生產(chǎn)由隨機選擇的領(lǐng)導(dǎo)者完成。
Cardano 團隊已竭盡全力解決了一些在隨機選擇領(lǐng)導(dǎo)者時出現(xiàn)的問題。他們已經(jīng)確保選擇領(lǐng)導(dǎo)者的隨機性與目前比特幣出塊方式一致。
然而比特幣是沒有領(lǐng)導(dǎo)者的,區(qū)塊由隨機礦工生產(chǎn)。挖礦難題的解集將分布在擁有最大哈希算力的礦工附近。
Ethereum以太坊
以太坊也曾經(jīng)嘗試通過加入一個在出塊后保證最終確定性的步驟,來加強共識算法的方式。區(qū)塊仍舊通過PoW 生成,但是會有一組驗證者節(jié)點對已出區(qū)塊的正確性進行投票。這就是所謂的“最終確定性組件”。也就是說,該方法結(jié)合了最長鏈規(guī)則和拜占庭容錯算法:即兩種共識算法的混合。
最近似乎有跡象表明,以太坊將可能使用權(quán)益證明(PoS) 取代 PoW,使以太坊與正在開發(fā)的新鏈保持一致。區(qū)塊將由一個隨機領(lǐng)導(dǎo)者來創(chuàng)建,然后由一個最終確定化組件來最終確定。
優(yōu)化方法
區(qū)塊鏈的“舊時代”主要圍繞使用PoW 挖礦及使用最長鏈規(guī)則,來增強網(wǎng)絡(luò)共識。后來為了用更節(jié)能的方式,開始嘗試使用 PoS取代挖礦。過去的 PoS 鏈仍然使用最長鏈規(guī)則;然而,近年來的趨勢是將拜占庭容錯協(xié)議也納入共識機制:而不使用最長鏈規(guī)則(Cosmos), 或者讓兩者共存(以太坊和Polkadot)。