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