當前位置:
首頁 > 新聞 > 從當年 PPCoin的PoS 模式看 PoS 的演化

從當年 PPCoin的PoS 模式看 PoS 的演化

i鏈說

發現區塊鏈價值,洞悉趨勢

來源 | 以太坊愛好者(ethfans)

本文研究的是 PPCoin 系統,作為 PoS 模式的案例分析。PPCoin 系統是 PoS 模式的先驅者。從中我們可以了解到,為實現兼具彈性和安全性的區塊鏈系統,PoS 模式必須解決的幾大挑戰。

PPCoin 發佈於 2012 年 8 月 19 日,是第一條真正融入 PoS 模式的區塊鏈。它雖然不是純粹 PoS 模式的區塊鏈,但是交替使用 PoW 和 PoS 模式生成區塊(請看這個區塊瀏覽器)。換言之,PoS 模式生成的區塊可以跟在 PoW 模式生成的區塊後面,反之亦然。

創建 PPCoin 的主要原因是比特幣收益的遞減:隨著 PoW 模式下挖礦獎勵的減少,礦工的挖礦積極性也會下降(除非交易費大幅提高,這是大家都不願看到的)。由於 PoS 模式下生成區塊的成本要低得多,並且,作為一種長期解決方案,相應的挖礦獎勵會低得多且恆定不變,旨在將年通脹率維持在 1 %。

PPCoin 鑄造新代幣的方式不同於 PoW 模式。它的核心理念是在區塊中納入幣齡消耗量證明(而不是高強度計算量證明)。換言之,如果是 90 天之前創造出的 10 單位代幣(即價值為 10 的未花費交易輸出(UTXO)),則總的 天數 (即幣齡)為 900 。

1

PPCoin 是如何生成 PoS 塊的

進入技術講解環節,如引起不適,望請見諒。

如上文所述,PoS 模式下出塊方式不同於比特幣之類的 PoW 模式。

首先,我們發現 PoW 模式基本都採用的比特幣的出塊方式。PoS 模式的出塊方式則不同。每生成一個 PoS 塊就要花費一個舊幣,消耗掉它的幣齡。一個舊 幣 只有滿足下列公式才能在 time_in_seconds 生成一個 PoS 塊:

其中:

coin(代幣)指的是創建了一段時間(timeweight(coin))的 UTXO(為防止舊幣的權重過大,創建天數以 90 天為上限),value(coin) 指的是 UTXO 的值。二者相乘得出 幣齡 。

time_in_seconds指的是精確到秒的當前時間。和比特幣一樣,PPCoin 同樣要假設誠實的節點擁有同步時鐘(偏差很小)。如果一個區塊的時間戳晚於節點時鐘的當前時間或是早於前一個區塊的時間戳,節點應將其視為無效。

d是可調的難度參數,旨在將 PoS 塊的出塊速度維持在 10 分鐘。

prev_blocks_data是這個公式里最有趣,也是最巧妙的參數。它的功能是防止有人預先知道滿足上述公式的代幣(從而獲得生成 PoS 塊的資格),並且對選塊過程進行操控。這個參數決定了系統的公正性,換言之,從權益者中選出出塊者的過程是公正的。(我們有時也會將這一過程稱為 出塊選舉 ——權益者的獲選概率應該與其持有代幣的總幣齡成正比,而且無法提前預知自己會於何時獲選)。我們將檢驗一些 prev_blocks_data 的替代參數,並發現它們的問題所在。

如果滿足了上述公式,代幣 的所有者就可以生成一個區塊,裡面包括一個通過花費 代幣 創造新的交易輸出的 代幣權益 交易,它的值略高於 value(coin) (超出每年幣齡消耗量的 1/100 ,相當於 1% 的年通脹率)。

PoS 區塊和 PoW 區塊之間的主要差別在於 隨機數(nonce) 欄位。 為了生成一個 PoS 區塊,區塊鏈中的每個代幣每秒都有一次機會參與選舉(即符合公式)。如果成功獲選,控制 該代幣 的權益者可以發布一個區塊。否則必須等待一秒後才能再次嘗試。此處很適合強調工作量證明挖礦的兩大不同之處:

在 PoW 模式下,礦工持有的代幣量不會影響找到合法區塊的過程。

更重要的是,在 PoW 模式下,為了找到一個合法的區塊,礦工在硬體條件允許的情況下每秒可以進行儘可能多的嘗試。在上一篇文章中,我們指出到 2018 年 6 月為止,比特幣網路每秒可產出大約 3500 萬兆個哈希——遠遠超過 PPCoin 中(每個幣)每秒只能進行一次嘗試。

2

公平的出塊選舉

到目前為止是不是看起來前途一片光明。接下來讓我們從 prev_blocks_data 的角度更深入地研究一下這個系統。 以下是三種潛在的替代方案:

prev_blocks_data = 空值。如果將 prev_blocks_data 從公式中去掉,凡是關注該區塊鏈的人都會有「預見」能力,可以找出哪個幣在哪個時刻有資格發布 PoS 區塊。出塊過程的不可預見性蕩然無存。然而,問題還不止於此——聰明的權益者會調整 UTXO ,以便儘快獲得出塊資格。於是,PPCoin 會成為一種昂貴的 PoW 系統,在尋找「獲選潛力大的」代幣的過程中消耗大量成本。

prev_blocks_data = 前一個區塊的哈希值。在這種情況下,由於每個區塊使用的 prev_blocks_data 都會變化,出現「預見」情況的可能性要小得多。然而,問題在於區塊提議者可以選擇區塊,這樣就有一個特定的代幣在不久的將來有資格生成 PoS 塊。這就賦予了出塊選舉過程很高的可操縱性。更糟糕的是,如果持有權益較多的權益者將自己的代幣正確分割開來,(只需要很低的成本)就可以偷偷創建出一條很長的鏈,然後使用這條鏈發起雙花攻擊。為操控出塊選舉過程調整區塊通常被稱為 粉碎攻擊(Grinding Attack) 。

prev_blocks_data = 前一個 PoW 區塊的哈希值。這種方案理當可以緩解 粉碎攻擊 的問題,因為礦工不可能放棄他們找到的合法的 PoW 區塊(在 PoW 模式下,自私挖礦 可以被視為一種影響力非常有限的粉碎攻擊)。這種方案也有助於抑制「預見」問題——「預見」能力只能持續到下一個 PoW 塊出來之前。不過 PoS 模式的問題依然存在。經過簡單的分析可知,(如果將持有的幣正確分割開來)平均每生成 4?=4096 個區塊之後,持有全網 1/4 權益的權益者就有資格生成連續 6 個 PoS 區塊。對於 PoW 區塊來說當然也是如此,不同之處在於潛在的攻擊者會預先知道自己是否能夠連續生成多個塊,從而制定相應的攻擊計劃。(掌握的算力不足全網 1/2 的礦工)偷偷創建一條 PoW 鏈需要承擔很大的風險,因此礦工為避免經濟損失不會試圖發動這類攻擊。然而,在 PPCoin 的模式下,假設每 6 小時生成一個 PoW 塊,如果權益者發現自己接下來有資格生成連續 6 個塊,就可以實現長達 6 個塊的重組。這樣就可以在無成本的情況下發起隱藏鏈攻擊。此外,如果出塊率很低的話,會很難留住 PoW 礦工。如果我們提高 PoW 的出塊率,所謂的 PoS 系統就名不副實了。

經過上述分析,你應該已經相信公平的權益者選舉過程設計起來並不容易了吧。然而,PPCoin 不只存在這一個問題。另一個有趣的問題是 理性分叉 。

3

理性分叉

要理解這個問題,讓我們重新思考一下 PoW ——如果 PoW 鏈上的一個礦工發現某個可以開挖的區塊點(tip),在上面創建了一個區塊,然後驗證其有效性,她立馬就能得到響應。如果區塊是合法的,她會將它發布到網路上。否則她會提高 nonce 值,並再次嘗試。關鍵在於她的計算資源在任何時候都是充分利用的。因此,如果礦工當時還知道另一個具有替代性的可挖區塊點,她必須決定如何分割自己資源。她的最佳策略是將自己的資源貢獻給最有可能認可她的區塊的網路,如果她真的有幸找到一個區塊的話。

現在讓我們考慮一下 PPCoin 的情況。與 PoW 相似,權益者嘗試基於已知 tip 創建了一個區塊,並立即得到了回復。如果該區塊是有效的,她會將它發布到網路上。反之,她必須等待整整一秒才能進行下一次嘗試。在這一秒中,她的計算資源是閑置的。因此,在等待期間,如果她將計算資源貢獻給了不太可能認可她的區塊的鏈,她不會遭受損失(不過收益也不高)。具體來說,如果權益者(在相同的區塊高度上)知道了兩個相互競爭的區塊點,她不可能老老實實地只選擇其中一個創建區塊。她更有可能選擇同時維護兩條分叉鏈,以便獲得更多(預期)收益。

如果所有權益者都採用上述策略,那麼這條鏈會經常出現重組,整個系統的可靠性就會大幅降低。越是縮短出塊的間隔時間,這個問題就會越發嚴重,因此 PPCoin 的 PoS 系統無法實現擴容或是縮短確認時長。

4

「無利害關係」問題

上述問題還可以從另一個方面思考,即 無利害關係(Nothing-at-stake) 問題。權益者會試圖另外創建一條(隱藏的)鏈來攻擊主鏈。她們會不間斷地試圖拓展已有的鏈條,除非發現在某條鏈上連續出塊的機會。因為這些嘗試實際上都是零成本的,他們不會遭受損失。如果他們發現主鏈比隱藏的分叉鏈長很多,他們只需放棄這條分叉鏈,再從距當今更近的點上創建一條鏈。值得一提的是,當攻擊發生的時候,他們可以同時嘗試擴展主鏈,確保無論如何自己都不會遭受任何損失。發動這種攻擊最後是會成功的,然而更糟糕的是,攻擊者不承擔任何成本。

PoS 系統的無利害關係問題的主要原因是出塊成本「很低」,而且無需「工作量」。在 PPCoin 中,這一問題與出塊的出塊選舉方式有直接關聯。我們會在後續文章分開討論這兩個問題,及其解決之道。

上述分析基於 Iddo Bentov 等人所著論文的第二節。

5

去中心化的妥協?如何實現公平和激勵?

要確保持有代幣的權益者沒有操控 PoS 塊的選舉流程,prev_blocks_data 選用了一種非常複雜的函數(點擊此處查看詳情)。PPCoin 的開發人員通過對 prev_blocks_data 的設計降低了權益者在出塊選舉方面的影響力。然而,這種解決方案的效果如何很難評定,在下一篇文章中,我們將討論另一種解決方案——「低影響力函數」。

此外,PPCoin 的開發人員會通過 檢查點機制 解決理性分叉(以及隱藏鏈攻擊)的問題。 檢查點會抑制權益者的隱藏鏈攻擊——由於鏈的合法性實際由檢查點機制決定,任何長鏈重組行為都將無法實現。

當然,檢查點機制也存在一個問題,即作為一種中心化手段來實現系統的穩定性。此外,出塊選舉過程似乎很容易受到權益者的操控。

在後續文章中,我們將提出 PoS 系統設計者真正需要解決的問題:1)為出塊選舉賦予無法預測和無法操控的隨機性以及 2)如何解決出塊的低成本問題(以防 鏈融合 或 隱藏鏈攻擊 之類的短程攻擊和 同步新節點 之類的長程攻擊)。

另一個需要解決的問題是在 PoS 系統中,至少是在 PPCoin 的 PoS 系統中,權益者獲得的收益很少,因此參與出塊過程的積極性不高。由於許多權益者可能會在很長一段時間內保持離線狀態,參與度會成為一個問題。

阿劍按:在看 PPCoin 的運行模式描述時,我完全沒意識到還可以像「理性分叉」講的這樣攻擊。什麼是「honest」呢?太難定義了。在 PPCoin 模式下,人們每秒可以嘗試一次出塊,但什麼是「honest」呢?換一個出塊點嘗試算是惡意嗎?

(以上言論不代表 EthFans 觀點,EthFans 期待聽見不同的聲音 ~)

版權聲明 | 來源:以太坊愛好者(ethfans),作者:David Yakira,翻譯&校對:閔敏 & 阿劍,本文由作者授權 EthFans 翻譯及再出版。

https://medium.com/orbs-network/forget-eos-and-ethereum-how-much-has-proof-of-stake-evolved-since-ppcoin-93a56d734884


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 i鏈說 的精彩文章:

區塊鏈是數字化遷徙體系,未來將「鏈滿天下」

TAG:i鏈說 |