所謂共識(shí)算法财剖,就是每個(gè)節(jié)點(diǎn)對(duì)于本區(qū)塊的正確性達(dá)成共識(shí)悠夯。
共識(shí)是一切交易的基礎(chǔ),達(dá)成共識(shí)越分散(參與度越高)躺坟,其效率就越低沦补,但安全性越高,因此也越穩(wěn)定咪橙;相反夕膀,達(dá)成共識(shí)越集中(參與度越低),效率越高美侦,也越容易出現(xiàn)獨(dú)裁和腐敗現(xiàn)象产舞,安全性越低。
以主流 PoW(Proof of Work) 為例菠剩,根據(jù)區(qū)塊頭與一個(gè)隨機(jī)數(shù)進(jìn)行哈希運(yùn)算易猫,可簡(jiǎn)單理解為必須通過(guò)大量數(shù)學(xué)計(jì)算之后,才能將區(qū)塊掛入?yún)^(qū)塊鏈中具壮。
為什么不能讓礦工直接把區(qū)塊掛上去呢准颓?
在區(qū)塊鏈中,最長(zhǎng)的鏈被認(rèn)為是正確的鏈棺妓,所有礦工選擇最長(zhǎng)的鏈來(lái)挖攘已,才能確保鏈的唯一性。公有鏈作為一個(gè)完全開放的系統(tǒng) —— 任何節(jié)點(diǎn)都可以來(lái)當(dāng)?shù)V工怜跑,其背后的設(shè)計(jì)哲學(xué)在于“作惡得到的好處小于付出的代價(jià)样勃,所以理性節(jié)點(diǎn)不會(huì)做惡”。傳奇跑者普雷方丹也有一句名言:“你可以打敗我性芬,但你必須付出足夠的努力與汗水峡眶。”如果礦工可以直接把區(qū)塊掛到鏈上植锉,那么攻擊者就可以分叉幌陕,然后瘋狂的把這條鏈加長(zhǎng),使人誤以為這才是正確的區(qū)塊鏈汽煮。
在 PoW 中搏熄,攻擊者必須進(jìn)行工作量證明才能把分叉鏈加長(zhǎng)棚唆,必須付出比全網(wǎng)更大的算力(51% 以上)才能跑的最快,同一時(shí)間形成更多區(qū)塊心例,讓人誤以為這是最長(zhǎng)的鏈宵凌,從而完成攻擊,但這顯然是不可能的止后。這個(gè)系統(tǒng)的設(shè)計(jì)邏輯沒有問(wèn)題瞎惫,但在 PoW 的過(guò)程中,需要消耗大量無(wú)謂的算力與能源译株。
首先瓜喇,PoW 所需的算力不斷增大,比特幣為了保證每 10 分鐘出一個(gè)塊歉糜,同時(shí)在 2140 年產(chǎn)生 2100 萬(wàn)枚全部比特幣乘寒,就必須每 2016 個(gè)塊之后進(jìn)行難度升級(jí)。所以挖礦設(shè)備也不斷的進(jìn)行更新?lián)Q代才能滿足需求匪补。從 CPU 挖礦伞辛,到 GPU,到 FPGA 挖礦等等夯缺,耗電量也與日俱增蚤氏。
其次,主鏈上同一時(shí)間只會(huì)有一個(gè)區(qū)塊上鏈踊兜,這個(gè)由計(jì)算出來(lái)的礦工獲得竿滨,但是其他參與計(jì)算的礦工雖然消耗了大量算力,卻沒有任何收益捏境,浪費(fèi)了大量計(jì)算資源于游。
最重要的一點(diǎn),這些計(jì)算并不是有實(shí)際意義的計(jì)算典蝌,換句話說(shuō):以比特幣為代表的使用 PoW 共識(shí)的公有鏈曙砂,本質(zhì)上只能起到賬本的作用头谜,而不具備實(shí)際的功能骏掀,所以其所做的計(jì)算也都是沒有實(shí)際作用的。
所以說(shuō)柱告,減少能源的消耗截驮,同時(shí)完成有意義的計(jì)算,是共識(shí)機(jī)制設(shè)計(jì)的關(guān)鍵所在际度。但是這兩點(diǎn)同時(shí)實(shí)現(xiàn)極為困難葵袭。第一,如果消耗的資源減少乖菱,安全性就越低坡锡,因?yàn)楣粽咴饺菀讓⒎植骀溩尨蠹艺`以為是主鏈蓬网;第二,有意義的計(jì)算如何有規(guī)律的與區(qū)塊鏈系統(tǒng)連接起來(lái)鹉勒,比如如果做機(jī)器學(xué)習(xí)計(jì)算帆锋,穩(wěn)定的 Data Set 從何而來(lái),計(jì)算的獎(jiǎng)勵(lì)如何分配禽额,都是需要精心設(shè)計(jì)的地方锯厢。在這樣的一個(gè)背景下,“激進(jìn)”的 PoS 逐漸獲得了更多的認(rèn)可脯倒,幾乎完全不需要進(jìn)行計(jì)算实辑,從而大大降低了能耗。
PoS (Proof of Stake):權(quán)益證明藻丢。如果把 PoW 比作意大利國(guó)家隊(duì)穩(wěn)健的防守體系剪撬,那么 PoS 則擁有巴西隊(duì)野心,以降低防守力郁岩,來(lái)增加攻擊性婿奔。
PoS 完全不需要進(jìn)行計(jì)算,而是需要證明者對(duì)某些數(shù)量的權(quán)益展示所有權(quán)问慎。證明節(jié)點(diǎn)對(duì)區(qū)塊結(jié)果進(jìn)行押注萍摊,如果錯(cuò)誤則喪失押注,如果正確則贏得獎(jiǎng)勵(lì)如叼。
然而冰木,無(wú)論是在工業(yè)界還是學(xué)術(shù)界,PoS 都是一把雙刃劍笼恰,在提升性能的同時(shí)踊沸,很難保證其安全性。最著名的兩個(gè)問(wèn)題是:nothing at stake 以及 long range attack (長(zhǎng)距離攻擊)社证。以太坊在 PoS 的過(guò)程中也遇到了諸多困難逼龟。
Nothing at stake:如果攻擊者 fork 當(dāng)前的鏈,挖礦節(jié)點(diǎn)的保證金已經(jīng)押在了兩條鏈上追葡,他不需要去判斷哪條是正確的鏈腺律,而是都支持,從而導(dǎo)致攻擊者得逞宜肉,而無(wú)論攻擊者是否得逞匀钧,節(jié)點(diǎn)選擇全部挖的策略也可以保障自己的收益,所以只要理性節(jié)點(diǎn)不是“token 大戶”谬返,都會(huì)去支持攻擊者之斯。
這個(gè)問(wèn)題已經(jīng)有人提出一些解決方案,例如 vitalik 提出的“錯(cuò)誤懲罰”遣铝,如果一個(gè)節(jié)點(diǎn)在發(fā)生分叉時(shí)選擇都押注佑刷,如果押注超過(guò)一條鏈或者押注了錯(cuò)誤的鏈會(huì)被懲罰莉擒。
Long range attack則是更為棘手的問(wèn)題:可以理解為 PoS 中的女巫攻擊。攻擊者不是去 fork 現(xiàn)有的鏈瘫絮,而是回到初始階段的鏈啰劲,造一條更長(zhǎng)的新的鏈,讓網(wǎng)絡(luò)誤以為是主鏈檀何。因?yàn)?PoS 共識(shí)中節(jié)點(diǎn)的增長(zhǎng)速度沒有限定(比特幣 PoW 有限定蝇裤,10 分鐘出一個(gè)塊),攻擊者可以用很短的時(shí)間造一條更長(zhǎng)的鏈频鉴。一個(gè)區(qū)塊鏈系統(tǒng)栓辜,一開始不會(huì)有很多礦工,前期的塊都是少數(shù)礦工挖的垛孔,如果這些礦工互相串通好藕甩,聯(lián)合起來(lái)回到早起階段,因?yàn)槟莻€(gè)階段只有他們可以挖接下來(lái)的塊周荐,他們可以很容易聯(lián)合發(fā)起此攻擊狭莱。
目前 long range attack 沒有很好的解決方案,一些客戶端(包括 casper)試圖通過(guò)限定更改區(qū)塊的長(zhǎng)度來(lái)解決這個(gè)問(wèn)題概作,比如 NXT 的處理方式為超過(guò) 720 個(gè)區(qū)塊的不能被更改腋妙。但這只是降低了問(wèn)題發(fā)生的概率,或者說(shuō)轉(zhuǎn)化了問(wèn)題讯榕,會(huì)導(dǎo)致“weak subjectivity”骤素。
事實(shí)上,已經(jīng)有很多 PoS 算法試圖解決上述問(wèn)題:
Ouroboros:一個(gè)可證明安全的 PoS 區(qū)塊鏈協(xié)議愚屁,Ouroboros 加入了權(quán)益證明算法济竹,定義了節(jié)點(diǎn)對(duì)賬本狀態(tài)達(dá)到共識(shí)的方法,它是第一個(gè)宣稱進(jìn)行嚴(yán)格的安全分析的 PoS 類型的區(qū)塊鏈協(xié)議霎槐。
Ouroboros 在一定條件下的實(shí)踐驗(yàn)證中送浊,解決了各種攻擊,包括雙花攻擊丘跌、交易拒絕攻擊袭景、51% 攻擊、無(wú)利害關(guān)系碍岔、去同步攻擊以及其他攻擊浴讯。某些前提下朵夏,它被科學(xué)證明安全的蔼啦。它在亞馬遜云中運(yùn)行了基準(zhǔn)測(cè)試,這些測(cè)試展現(xiàn)了 Ouroboros 的權(quán)益證明區(qū)塊鏈協(xié)議仰猖,在性能方面的優(yōu)勢(shì)捏肢。
不過(guò)經(jīng)衬巫眩回頭驗(yàn)證的模式也有問(wèn)題。多次回頭鸵赫,一方面影響 TPS衣屏,一方面會(huì)增加更多的通信,另一方面還很難驗(yàn)證回頭 stake 的是否都為正確辩棒。
DPoS狼忱,相比于普通的 PoS,多了一個(gè)選舉機(jī)制一睁,類似議會(huì)制度钻弄,不僅幣數(shù)很關(guān)鍵,聲望更加關(guān)鍵者吁,從而實(shí)現(xiàn)速度與安全性的提高窘俺,DPoS 希望通過(guò)投票來(lái)篩選信任節(jié)點(diǎn),解決 PoS 的安全隱患复凳。
類似的瘤泪,還有 PoP,PoC:
PoP (Proof of Participation),基于賬戶參與度的算法育八,PoP 將 PoI 和 DPoS 的思想結(jié)合对途,既能確保對(duì)設(shè)備的公平性,又擁有社區(qū)的共識(shí)髓棋,同時(shí)減少了算力浪費(fèi)掀宋。讓記賬這件事情更經(jīng)濟(jì)效率 , 從而支撐起更多大規(guī)模的協(xié)作體系。
PoC (Proof of Credit)仲锄,信用共識(shí)機(jī)制 , “PoC”繼承了“PoW”通過(guò)計(jì)算來(lái)實(shí)現(xiàn)賬本安全的特性劲妙,但同時(shí)提出的非常有創(chuàng)新的一點(diǎn)“利用用戶的信用值”作為挖礦的準(zhǔn)入門檻,這樣就會(huì)積累有效的節(jié)點(diǎn)為網(wǎng)絡(luò)加密計(jì)算儒喊。同樣“PoC”也相對(duì)“PoW”在社區(qū)發(fā)展中公平了很多镣奋,在參與挖礦的時(shí)候,是根據(jù)自己的信用值來(lái)判斷是不是有共識(shí)(挖礦)資格怀愧。在達(dá)到共識(shí)的信用值后侨颈,為了防止節(jié)點(diǎn)的違規(guī)行為還必須提交一定的保證金額,才能參與共識(shí)芯义,共識(shí)網(wǎng)絡(luò)中加入了簡(jiǎn)單的智能合約哈垢,作為共識(shí)的契約來(lái)約束每個(gè)節(jié)點(diǎn)參與共識(shí),如果有違規(guī)扛拨,會(huì)付出很大的懲罰耘分。這也保證了節(jié)點(diǎn)會(huì)正常參與共識(shí),用來(lái)提高網(wǎng)絡(luò)的安全性。
但目前求泰,沒有一種 PoS 是被證明和 PoW 一樣安全的央渣,在設(shè)計(jì)上盡可能的通過(guò)制定出塊規(guī)則與獎(jiǎng)勵(lì)懲罰機(jī)制來(lái)解決 nothing at stake 等問(wèn)題,但本質(zhì)還是不安全的渴频。比較可行的方法是進(jìn)行一個(gè)折中芽丹,PoW+PoS 混合共識(shí)機(jī)制。
例如第一個(gè)使用 PoS 的項(xiàng)目:peercoin卜朗。peercoin 是第一個(gè) PoS 算法拔第,于 2012 年提出,PPCoin 的最大創(chuàng)新是其采礦方式混合了 PoW+PoS 方式场钉,而 PoW 部分加入幣齡的概念楼肪,越早買優(yōu)勢(shì)越大,相比與純 PoS 或者純 PoW惹悄,達(dá)到節(jié)能和安全的平衡春叫。
類似的還有 CFFG,PoW+PoS 混合模型泣港,由 Vitalik Buterin 帶領(lǐng)研究 Casper the Friendly Finality Gadget(CFFG)暂殖,需要進(jìn)行兩周期投票,并且需要質(zhì)押 TOKEN当纱。第一次是 PoW呛每,超過(guò) 2/3 即可驗(yàn)證成功,第二次是 PoS坡氯,超過(guò) 2/3 即可驗(yàn)證成功晨横,然后確認(rèn)區(qū)塊,驗(yàn)證者即可獲得收益箫柳。驗(yàn)證者是被激勵(lì)著集合在權(quán)威鏈上的手形,因?yàn)槿绻麄兂掷m(xù)在不同的鏈上進(jìn)行投票將會(huì)受到懲罰。驗(yàn)證者不僅僅會(huì)為雙重投票而受罰悯恍,也要為在不正確的鏈上進(jìn)行投票而受到懲罰库糠。
Tendermin,2014 年涮毫,由 Jae Kwon 帶領(lǐng)研究瞬欧,BFT 與 PoS 混合機(jī)制,假設(shè)少于 1/3 的驗(yàn)證者是拜占庭罢防,Tendermint 保證安全永遠(yuǎn)不會(huì)被破壞——也就是艘虎,驗(yàn)證者(2/3 以上)永遠(yuǎn)不會(huì)在同一個(gè)高度提交沖突的區(qū)塊。因此咒吐,基于 Temdermint 的區(qū)塊鏈永遠(yuǎn)不會(huì)分叉野建。Tendermint 的設(shè)計(jì)決策偏向于安全性和不可改變性属划。但這樣的混合共識(shí)機(jī)制,雖然降低了能耗贬墩,但依然沒有本質(zhì)上解決 PoW“浪費(fèi)不必要能耗”的問(wèn)題。為了設(shè)計(jì)可持續(xù)發(fā)展的共識(shí)算法妄呕,需要同時(shí)做到以下兩點(diǎn):找到一個(gè)低能耗陶舞、有實(shí)際效用的算法將此實(shí)際效用作為 PoS 的防御機(jī)制