PoS(Proof of Stake)本質(zhì)上是一種持有一定幣量而獲得挖礦資格和收益的共識(shí)協(xié)議,在最初 Proof of Stake 2013年被提出來(lái)后, Nothing At Stake (無(wú)利害關(guān)系)的問(wèn)題和 Long-Range Attack(長(zhǎng)程攻擊)問(wèn)題是經(jīng)常被談?wù)摰?Proof of Stake 共識(shí)協(xié)議的挑戰(zhàn)。
今天我們先來(lái)看看 Nothing At Stake problem (無(wú)利害關(guān)系)。
Nothing At Stake, a situation where someone loses nothing when behaving badly, but stands to gain everything.
Nothing At Stake 問(wèn)題的本質(zhì)是 “作惡無(wú)成本,好處無(wú)限多”。具體來(lái)講,是當(dāng)在 PoS 共識(shí)系統(tǒng)出現(xiàn)分叉 (fork) 的情況時(shí) ,出塊節(jié)點(diǎn)可以在”不受任何損失“的前提下,同時(shí)為多條鏈出塊,從而有可能獲得“所有收益”。
這就好比有個(gè)窗口,排隊(duì)既可領(lǐng)錢(qián),當(dāng)只有一個(gè)窗口時(shí),大家會(huì)乖乖的排隊(duì),每人都有,其樂(lè)融融。
但是當(dāng)?shù)诙€(gè)窗口出現(xiàn)時(shí)。大家知道,最終這兩個(gè)窗口有可能只有一個(gè)領(lǐng)到的是“真錢(qián)”,另外一個(gè)的錢(qián)會(huì)變成廢紙。但排隊(duì)的你不知道哪個(gè)窗口會(huì)是發(fā)“ 真錢(qián)” 的窗口。所以你會(huì)怎么做呢? 你可能會(huì)下個(gè)跑腿訂單幫你分身同時(shí)去另外一個(gè)窗口排隊(duì)。
但是,在實(shí)際 PoS 出塊節(jié)點(diǎn)時(shí),此時(shí)的分身無(wú)成本,只是計(jì)算機(jī)做一個(gè)運(yùn)算而已。
這會(huì)造成什么亂象呢?
聰明的出塊節(jié)點(diǎn)會(huì)有動(dòng)力產(chǎn)生新的分叉,支持或發(fā)起不合法交易,其他逐利的出塊節(jié)點(diǎn)會(huì)同時(shí)在多條鏈(窗口)上排隊(duì)出塊支持新的分叉。隨著時(shí)間的推移,分叉越來(lái)越多,非法交易,作惡猖狂。區(qū)塊鏈將不再是唯一鏈,所有出塊節(jié)點(diǎn)沒(méi)有辦法達(dá)成共識(shí)。
另外,無(wú)利害關(guān)系問(wèn)題還讓雙花攻擊更容易。不像 PoW 51% 的攻擊那樣,PoS 的攻擊節(jié)點(diǎn)只需要多一定的算力 (有時(shí)候僅僅1% )就有可以進(jìn)行攻擊。例如一個(gè)質(zhì)押總量占流通幣量只有30%的幣,攻擊成本相比 60% 質(zhì)押率的網(wǎng)絡(luò)更容易攻擊。
有多容易呢?如下圖所示,仍然是 A、B、C 三個(gè)出塊節(jié)點(diǎn),假如 A是攻擊節(jié)點(diǎn),它在產(chǎn)生分叉時(shí)創(chuàng)造兩筆交易。一筆將X個(gè)幣發(fā)給自己的一個(gè)錢(qián)包地址,同時(shí)在另外一個(gè)分叉上將X個(gè)幣發(fā)到交易所。B、C出塊節(jié)點(diǎn)因 Nothing At Stake 所以同時(shí)會(huì)在兩條分叉鏈上出塊。當(dāng)交易被交易所確認(rèn)后, A 將 X 個(gè)幣出售兌換成隱私幣種,移出交易所。之后 A 通過(guò)增加質(zhì)押幣量,或創(chuàng)建多個(gè)其他出塊節(jié)點(diǎn)的方式提升出塊權(quán)重,只在分叉鏈繼續(xù)出塊。此時(shí)最長(zhǎng)鏈很明顯,且逐漸拉開(kāi)差距,會(huì)最終成為最長(zhǎng)鏈,A 成功將 X 個(gè)幣雙花。
為什么 Nothing At Stake 問(wèn)題僅僅是 PoS 的挑戰(zhàn)? PoW難道不會(huì)有嗎?
PoW機(jī)制天生避免了這個(gè)問(wèn)題。因?yàn)樵诔鰤K時(shí),礦工會(huì)付出機(jī)會(huì)成本 — 算力資源。如果分叉出現(xiàn), 礦工需要慎重的選擇在哪條鏈上出塊,一旦選錯(cuò),付出的算力成本則沒(méi)有收益。礦工也不會(huì)選擇在兩條鏈上均分算力,這樣只會(huì)將原鏈的出塊概率縮小一半,可能得不償失。
那么如何解決 Nothing At Stake問(wèn)題 ?
一般的策略都是后置懲罰,既如果被判為惡意出塊行為,則會(huì)將 stake 的一部分或保證金作為罰金。然而,所有的懲罰和監(jiān)管措施都只是事后,而不像 PoW需算力出塊的隱形約束直接。
我們來(lái)看看 Tezos 是怎樣使用懲罰機(jī)制來(lái)避免 Nothing At Stake 問(wèn)題的:在 Tezos 鏈上參與挖礦需要保證金,這部分保證金就是用來(lái)保證“面包師” (baker)的誠(chéng)實(shí)行為,如果面包師試圖在兩個(gè)分支上廣播區(qū)塊,那么他的保證金將被沒(méi)收。如果面包師成功創(chuàng)建和廣播了合法區(qū)塊,他將獲得區(qū)塊獎(jiǎng)勵(lì)和交易手續(xù)費(fèi)。這種機(jī)制用金錢(qián)獎(jiǎng)懲來(lái)避免雙挖礦問(wèn)題,節(jié)點(diǎn)的安全由面包師自行維護(hù)。
除了后置懲罰,至今的解決方案,都是要犧牲一定程度的性能、去中心化原則,合約機(jī)制的設(shè)計(jì)也更復(fù)雜。
這種復(fù)雜性體現(xiàn)在什么地方呢?
在 PoS 中,節(jié)點(diǎn)的角色和職責(zé)眾多:除了和PoW中類(lèi)似的出塊節(jié)點(diǎn) (Miner), 還有驗(yàn)證節(jié)點(diǎn)(Validator) 為區(qū)塊背書(shū) ,守護(hù)獵人(State Guardian) 抓“壞人”。
守護(hù)獵人的 stake 有一定的鎖定期,一般是需要X個(gè)區(qū)塊之后才可以拿到質(zhì)押的幣,這樣可以給守護(hù)獵人足夠時(shí)間來(lái)抓住非法節(jié)點(diǎn)。
此外,雖然項(xiàng)目方可以通過(guò)前置節(jié)點(diǎn)篩選選擇信任的節(jié)點(diǎn),但是中心化的問(wèn)題依然不可避免:
· 如果網(wǎng)絡(luò)發(fā)展迅速,利益超過(guò)了組織的信譽(yù),那么,被選出的實(shí)名節(jié)點(diǎn)不一定仍然可信;
· 節(jié)點(diǎn)是否有足夠的動(dòng)機(jī)或技術(shù)能力去保證自身的反攻擊能力,從而保證網(wǎng)絡(luò)安全;
· 節(jié)點(diǎn)數(shù)量有限,伸縮性不夠,仍然是中心化;