區塊鏈共識機制技術二——POS(權益證明)共識機制

2020-10-14 14:00:40

前言

由於區塊鏈是去中心化分散網路,所以必須設計一套維護系統的運作順序和公平性的機制,即共識機制,用來決定誰取得區塊鏈的記賬權並獲得系統新幣獎勵。位元幣的POW共識機制是一種多勞多得的模式,其優點是演演算法簡單,容易實現,破壞系統的話需要投入巨大的成本,能夠有一定的安全保障。不過該演演算法的缺點也比較明顯,就是需要耗費大量電力,對交易的處理效率較低,像位元幣系統就是每秒7筆交易的處理能力。因此,人們不斷去琢磨新的共識機制,以便更好地運作區塊鏈系統。

上一節,我們介紹了POW共識機制,本章將對區塊鏈另外的一些共識機制做介紹,它就是POS共識機制。POS全稱為proof of stake,中文翻譯為權益證明,其最早使用在點點幣中,它主要是解決POW中資源浪費的問題。

對於PoW,由於礦場的出現及挖礦裝置效能的不斷提升,算力開始集中,節點數和算力值漸漸不適配,同時PoW太浪費了,曠工持續挖礦進行的重複性Hash計算沒有任何實際或者科學價值,而且還有一個更大的問題,作惡是沒有成本的,曠工的惡意攻擊並不會對曠工下次記賬並獲取相關權益(位元幣)產生任何影響,鑑於此,人們提出了PoS。

PoS演演算法是針對PoW演演算法的缺點的改進。PoS由Quantum Mechanic2011年在bitcointalk首先提出,後經Peercoin和NXT以不同思路實現。PoS不像PoW那樣,無論什麼人,買了礦機,下載了軟體,就可以參與。PoS要求參與者預先放一些代幣(利益)在區塊鏈上,類似將財產儲存在銀行,這種模式會根據你持有數位貨幣的量和時間,分配給你相應的利息。使用者只有將一些利益放進鏈裡,相當於押金,使用者才會更關注,做出的決定才會更理性。同時也可以引入獎懲機制,使節點的執行更可控,同時更好地防止攻擊。

一、PoS的實現原理及公式

要理解pos的實現原理,我認為從pos的實現演演算法公式來理解是最為直觀的,其公式為:

hash(block_header) =<target * coinage

幣齡的計算:coinage = 幣的個數*幣的剩餘使用時間

其中,coinage表示幣齡,這將意味著,幣齡越大,越容易得到答案。而其中幣齡的計算是通過挖礦者擁有的幣乘以每個幣的剩下使用時間得到,這也將意味著擁有的幣越多,也越容易得到答案。這樣,pos解決了pow中浪費資源的問題,同時挖礦者不可能擁有全網51%的幣,所以也解決了51%攻擊的問題。

PoS(Proof of Stake):股權證明,與PoW相比,不需要證明你在記賬前做了某項工作,而是證明你擁有某些財產。股權決定一起,誰的股權大,誰記賬的概率就越大。由於PoS是BitCoin出現後提出的共識演演算法,目前還有得到實際的驗證,並且,PoS不是一個,而是一類共識演演算法。最先使用PoS的是Peer Coin,不過是一種樸素的PoS,目前呼聲很高的是ETH Casper,但還沒有投產(拭目以待吧),所以關於PoS的描述基於Peer Coin。

工作機制
開始競爭出塊記賬前,擁有權益的節點將自己的權益放入PoS機制中,同時身份變為驗證者,PoS機制根據驗證者下注的多少,採用隨機的方式選出一個記賬者進行出塊記賬。這個隨機並不是真正的隨機,一般跟下注的權益成正比,誰的權益多,誰獲取記賬權的概率就越大。如果選出的記賬者在一段時間內沒有記賬,PoS機制重新選擇記賬節點,當出塊完成,開始進入下一輪的記賬。

我們以Peer Coin來舉例說明PoS的工作機制。Peer Coin是最先採用PoS共識機制的數位貨幣。在Peer Coin中,引入了幣齡和幣天的概念。所謂幣天,就是你持有貨幣的時間,幣齡=幣的數量比天。比如你有100個幣,總共持有30天(Peer Coin中未使用至少30天的幣可以參與競爭下一區塊),那麼你的幣齡就是10030=3000,你作為幣的持有者,參與下一輪競爭,過程如下:

  1. 在競爭開始前,你將3000幣齡作為籌碼下注,併成為記賬驗證者,
  2. PoW機制會隨機的選出一個記賬者,剛好是你 你開始記賬並完成
  3. 你的3000幣齡被清0
  4. 你獲得利息=3000 * 5% / 365 = 0.41個幣(每被清空365幣齡,你將會從區塊中獲得0.05個幣的利息)

理解隨機:選我、選我、選我?PoS在選擇記賬者時一般有兩種做法,一種是挑選下注多(權益大)的進行輪流記賬;還有一種是跟PoW結合,在PoW中,決定曠工能否出塊的一個重要因素是出塊的難度,PoS將出塊難度和權益掛鉤,權益越大,難度越小,出塊概率越大。

二、PoS的優缺點

通過上面的描述和PoS的特點,PoS優點為:

  1. 節能環保,不需要無用計算;
  2. 效能高;
  3. 更加安全;
  4. 人人可挖礦(獲得利息),不用擔心算力集中導致中心化出現;
  5. 避免貨幣緊縮

為什麼PoS更加安全?
在指定時間內,在POS體系中,即使你擁有了全球51%的算力,也未必能夠進行51%攻擊,因為,有一部分的貨幣並不是挖礦產生的,而是由利息產生(利息存放在POS區塊中),這要求攻擊者還需要持有全球超過51%的貨幣量。這大大提高了51%攻擊的難度。
在PoS機制下,持有幣越多,越容易獲得記賬權,接近於贏家通吃的感覺,但持有的幣越多,越接近於一個誠實的節點,因為破壞整個網路帶來的損失也越大,即假設富人不會做惡,畢竟做惡的目標是錢,若你富有,自然就沒有做惡的動力。

pos的缺陷:

從pos的實現原理和實現演演算法公式上分析,pos很完美的解決了pow的算力以及51%攻擊問題,那麼,pos是不是真的就很完美了呢?

缺陷一:

我們再從pos的實現演演算法公式去看,幣齡的計算公式中,假如一開始挖礦,只有創始區塊中有幣,也就是說其他礦機是沒法參與挖礦的,因為幣的個數這個值對他們來說永遠是零,這也就是pos機制的缺陷之一幣無法發行的問題。

缺陷二:

同樣是從pos的實現演演算法公式可以分析到,幣齡其實就是時間,一旦挖礦者囤積一定的幣,很久很久之後發起攻擊,這樣他也將很容易拿到記賬權,所以我們得給每個幣設計一個時間上限。

缺陷三:

設計時間上限後,雖然解決掉了部分挖礦者囤積幣的缺陷,從公式中仍然看到還會面臨一個問題,也就是幣的數量這個因素還是會影響我們拿到記賬權,很多挖礦者還會囤積代幣,給代幣造成流通上的缺陷。目前有些平臺引入幣齡按時間衰弱的方案來解決這一缺陷(例如:瑞迪幣)。

缺陷四:

接下來讓我們來看看pos共識機制還有哪方面的不足,即使上面的各種缺陷都多少有些解決方案,但例如挖礦者挖一段時間後離線,此時,時間將不納入幣齡減弱計算,這樣,挖礦者通過離線時間長來囤積挖礦,同樣面臨災難。

三、PoS特點及分類

PoS 特點

  1. PoS需要一定量的權益作為出塊的競爭資本
  2. PoS不需要進行大量的「無用」Hash計算
  3. PoS偏向「權利」集中制,但又做了均衡(出塊清0)
  4. PoS通過股權質押對作惡者進行懲罰
  5. PoS提供激勵機制

PoS 分類
先說三個問題:
鏈分叉問題:PoW從經濟角度,可以自然做到防止鏈分叉,但PoS需要精心審計,即nothing at stake問題。PoS可以採用一定的懲罰機制。

遠端攻擊問題:即如曠工在撤回被定的虛擬資產後,再發起之前發生的例行區塊的分叉。

卡特爾形成問題:即區塊鏈的寡頭壟斷,由於PoS共識演演算法是誰「富有」,誰就有更大的話語權,這樣少數富有曠工之間的「協調」將導致寡頭龍蛋的形成。

目前業內PoS共識演演算法的實現主要分為兩類:

簡單的的PoS系統。這類PoS很少甚至沒有從演演算法的設計上來解決上述問題,一般是比較早期的PoS嘗試。比較典型的例子是Peer Coin(點點幣,PPC)、新星幣(Nova Coin,NVC)、黑幣(Black Coin,BLK)、NextCoin(未來幣,NXT)等等。

精心設計的PoS系統,相對來說比較新。基於不同的實現方式,精心設計的PoS系統可以分為兩種。一種是基於拜占庭容錯的權益證明(BFT based PoS),比如Tendermint,另一種是基於鏈的權益證明(Chain based PoS),比如ETH Casper和ADA的Ouroboros。

第一類PoS系統安全性不夠。第二類PoS系統目前還不夠成熟,有一些處於早期執行階段,有一些還處理討論和測試階段。

四、pos的發展歷程

由於pos存在以上四大缺陷,所以pos的發展歷程經歷了三個版本,即pos1.0、pos2.0以及pos3.0,其中pos2.0在演演算法公式中使用的是幣的數量,這樣,上述缺陷二到四就不再是問題,可這樣以後卻導致了pos共識機制面臨了無成本利益的問題(即 nothing at stake),這也將意味著很容易產生分叉。

五、casper協定

第四章節我們說到pos的發展歷程時,提到其為了解決其中4個缺陷,引出很多版本,也就是使用了pos2.0,也會無法避免的引發無成本利益導致很容易分叉的問題,而以太坊的共識機制就是使用的pos共識機制,那麼我們來看看以太坊是如何解決這個問題的?

1.什麼是無成本利益關係問題

在解決無成本利益關係這個問題前,我們先來看看什麼是無成本利益關係問題,因此,我們可以先模擬下這種場景,如下圖所示:
在這裡插入圖片描述
假設我們處在上面的這種情況下,有一條藍色的主鏈和一條紅色的從主鏈中分出來的鏈條,如何禁止一個惡意的礦工在紅色區塊上挖礦然後推動一次硬分叉(Hard Fork)呢?

在一個工作量證明系統上,這一風險是可以被減輕的。

假設惡意礦工想在紅色鏈上挖礦。即便她投入了她所有的雜湊算力,也不會有任何礦工加入她在新鏈上挖礦。每個其他人都將繼續在藍色鏈上挖礦,因為在最長的鏈上挖礦收益更可觀,而且沒有風險。

記住,工作量證明在資源方面是非常昂貴的。對一個礦工來說,花費許多資源在一個將會被網路拒絕的區塊上是沒有任何意義的。因此,鏈分裂在一個工作量證明系統中是被避免了的,因為攻擊者將不得不付出大量金錢。

但是,當你把這種情形放到到權益證明下的時候,事情看起來就有些不一樣了。如果你是一個驗證者,你可以簡單地把錢投到紅藍兩條鏈上,完全無需擔心間接的不良後果。不管發生什麼事,你都總是可以贏,不會失去任何東西,不管你的行為有多惡意。

這就是所謂的「無成本利益關係(Nothing at Stake)」問題,也是以太坊必須解決的問題。他們需要一種協定,可以實行權益證明,同時減少「無成本利益關係」問題。

2.引入casper協定解決無成本利益關係問題

Csaper是以太坊選擇實行的PoS協定,既然有人惡意去使得我們的區塊鏈產生分叉,那麼我們想方設法去對惡意製造者加以懲罰,這樣不就可以解決我們說的無成本利益關係問題了嗎?Csaper協定正式奔著這樣的做法去實現的,那我們來看看Csaper是如何去做的呢?

  1. 驗證者押下一定比例的他們擁有的以太幣作為保證金。
  2. 然後,他們將開始驗證區塊。也就是說,當他們發現一個可以他們認為可以被加到鏈上的區塊的時候,他們將以通過押下賭注來驗證它。
  3. 如果該區塊被加到鏈上,然後驗證者們將得到一個跟他們的賭注成比例的獎勵。
  4. 但是,如果一個驗證者採用一種惡意的方式行動、試圖做「無利害關係」的事,他們將立即遭到懲罰,他們所有的權益都會被砍掉。

正是利用了這樣的對賭協定,幫我們對惡意製造者加以了懲罰,使得我們的區塊鏈儘量保障不會產生分叉。

3.PoS運作的機制大致如下:

  1. 加入PoS機制的都是持幣人,成為驗證者( validator);
  2. PoS演演算法在這些驗證者裡挑一個給予權利生成新的區塊。挑選順序依據持幣的多少;
  3. 如果在一定時間內,沒有生成區塊,PoS則挑選下一個驗證者,給予生成新區塊的權利,
  4. 以此類推,以區塊鏈中最長的鏈為準。