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