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