1. 程式人生 > >第13講 | 深入區塊鏈技術(五):PoS共識機制

第13講 | 深入區塊鏈技術(五):PoS共識機制

運行 離線 難題 感謝 並且 發現 即使 pos系統 分享

  上一篇我們講到了PoW共識機制,這一篇我們就來分享另外一種共識機制,PoS共識機制。

  PoS全稱是Proof of Stake,中文翻譯為權益證明。這一篇我們會將PoS與PoW對比講解,幫助你加深理解。

PoS的由來

  PoS最早出現在點點幣的創始人Sunny King的白皮書中,它的目的就是為了解決使用PoW挖礦出現大量資源浪費的問題。PoS共識機制一經提出就引起了廣泛關註,Sunny King 也基於PoW的基礎框架實現了第一代PoS區塊鏈:點點幣。

  PoW的具體實現有很多版本,但它們大多只是在挖礦算法上有所改進,主體邏輯並沒有發生質的變化。PoS包含了多個變種實現,每個變種往往會涉及區塊鏈代幣經濟模型的改動,可以說是牽一發而動全身。

  這些實現有點點幣、黑幣、未來幣、瑞迪幣,它們都推動了PoS機制的發展,PoS研究前沿還有以太坊的 Casper ,以及 Cardano 的Ouroboros。

  那到底是什麽樣的機制導致PoS具有這樣的特性呢?讓我們來看一看。

什麽是PoS?

  在講PoS之前,我先來講一個叫做幣齡的概念,幣齡這個概念其實很好理解,它的英文是 CoinAge,字面意思就是幣數量乘以天數。

  比如你有100個幣,在某個地址上9天沒有動,那麽產生的幣齡就是900,如果你把這個地址上這100幣轉移到任意地址,包括你自己的地址,那麽900個幣齡就在轉移過程中被花費了,你的幣數量雖然還是100個,但是幣齡變更為0。幣齡在數據鏈上就可以取到,任何人都可以驗證。

  我們回過頭來看看PoS究竟是什麽,區塊鏈共識機制的第一步就是隨機篩選一個記賬者,PoW是通過計算能力來獲得記賬權,計算能力越強,獲得記賬權的概率越大。

  PoS則將此處的計算能力更換為財產證明,就是節點所擁有的幣齡越多,獲得的記賬的概率就越大。這有點像公司的股權結構,股權占比大的合夥人話語權越重。

  以上算是簡述了PoS的概念,實際上,PoS的發展經歷了三個版本,第一個版本是以點點幣為代幣的PoS1.0版本,這個版本中使用的是幣齡;第二個版本為代表的是黑幣(blackcoin),它使用的為PoS2.0版本,對應這個版本使用的是幣數量,相當於是財產證明,後面黑幣又升級到PoS3.0,這個版本又回到了幣齡。

  PoW早在比特幣出現之前就已經應用了,而PoS是才是真正意義上為了區塊鏈而創造出來的概念。

PoS的實現原理

  好了,現在我們開始講解PoS的具體實現原理吧。這一部分公式較多,如果你在收聽音頻,可以點擊文稿查看。

  通過上一篇我們知道PoW挖礦的基本邏輯和步驟,我們先尋求一個nonce小於目標值,這一步用公式可表示為:

Hash (block_header) < Target

  從公式中我們可以看到,PoW下所有礦工的目標值是一樣的,只要計算結果哈希小於目標值即可,簡化來看就是前導0的個數。

  而在PoS系統中,這個公式變更為:

Hash (block_header) < Target * CoinAge

  我們可以看出多引入了一個變量叫做CoinAge,也就是幣齡,這裏就有意思了。

  這個變量為會造成每個礦工看到的目標值不一樣,如果你的幣齡越大,也就意味著你的獲得答案越容易。這裏的Target與PoW一致,與全網難度成反比,用來控制出塊速度的。

  例如當前全網的目標是4369,A礦工的輸入的幣齡是15,那麽A礦工的目標值為65535,換算成十六進制就是0xFFFF,完整的哈希長度假設是8位,也就是0x0000FFFF。

  而B礦工比較有錢,他輸入的幣齡是240,那麽B礦工的目標值就是0x000FFFFF。你如果仔細觀察肯定會發現,相比A礦工的目標值,B直接少了一個零。即如下:

  • A 礦工 Hash( block_header ) < 0x0000FFFF
  • B 礦工 Hash( block_header ) < 0x000FFFFF

  所以B礦工獲得記賬權的概率肯定要比A高。

  具體代碼分析這裏就不講解了,這裏需要幣齡作為輸入,如果我們寫示例代碼也只是一個簡單的參數,PoS需要放到區塊鏈的語境中才能運作。

PoS的相關問題

  通過上述的介紹我們知道:PoS似乎完美地解決了PoW挖礦資源浪費的問題,甚至還順帶解決了51%攻擊的問題,這裏可以順便講一下51%攻擊是什麽,它是指PoW礦工如果積累了超過51%的算力,則可以一定程度篡改賬本。

  這裏順便科普一下,什麽是51%攻擊呢,我們發現,礦工挖礦的成本不再是物理設備和電費,而是虛擬代幣,它的邊際成本幾乎為零,本質上PoS讓挖礦者和使用者合二為一了。

  這也意味著如果挖礦者發起51%攻擊,就需要擁有全網51%的幣或幣齡,這幾乎不可能辦到,即使你成功地實施了51%攻擊,那麽也意味著作為全網最大的持幣大戶的你,損失也會最大。

  PoS看起來相當完美,其實並不然,PoS有很多缺陷。

  PoS遇到的第一個問題就是幣發行的問題。一開始的時候,只有創始區塊上有幣,意味著只有這一個節點可以挖礦,所以讓幣分散出去才能讓整個網絡壯大,那麽如何分散出去又是另外一個難題了。

  所以早期PoS幣種基本都采用了分階段挖礦,有的叫混合挖礦,其實,我並不同意混合挖礦這個說法,混合就意味著同時。很多幣種其實是分了階段的,即第一階段是PoW挖礦,到第二階段才是PoS挖礦。

  隨著ERC20類型的標準合約代幣的出現,這個問題被解決了,不再需要第一階段改成PoW,也可以將代幣分散出去。

  第二個問題是由於幣齡是與時間掛鉤的,這也意味著用戶可以無限囤積一定的幣,等過了很久再一次性挖礦發起攻擊;所以解決方案是:PoS機制需要引入一個時間上限來控制時間因素的自然增長。

  第三個問題是雖然引入了時間上下限,用戶還是傾向於囤積代幣,這會造成幣流通的不充分;基於此,所以瑞迪幣引入了幣齡按時間衰減,構造了權益速度證明,鼓勵用戶流動代幣,而不是傾向於囤積代幣。

  第四個問題是離線攻擊,即使引入了時間上下限,時間仍然是自然流動的,也就是可以不需要求挖礦節點長時間在線。挖礦是可以離線的,這簡直是災難,所以任意一個PoS機制的實踐形式都必須避免這個問題,因為網絡節點數量的多少直接關系到區塊鏈網絡的健壯性。

  當然這些問題都不是致命問題,還記得我們一開始提到了PoS經歷了三個版本,而第二個版本PoS 2.0使用的不是幣齡,而直接是幣的數量。

  這會造成完全不同的結果,上述第二、三、四問題都不存在了,似乎看起來直接使用幣的數量會更好一些,但卻出現了整個PoS機制的致命問題。

  這個問題叫做Nothing at Stake,翻譯過來叫做無成本利益問題。大體的意思在PoS系統中做任何事幾乎沒有成本,比如在PoS系統上挖礦幾乎沒有成本,這也就意味著分叉非常方便。

  方便到什麽程度呢,每個誠實礦工在產生孤塊的時候都可以繼續挖下去,反正也沒什麽成本,反正分叉鏈和主鏈都可以同時挖,也就是任何持幣較少的用戶都可以嘗試分叉,並且把分叉鏈廣播出去。

  這個時候如果其他誠實礦工看到了,第一反應也是沒有成本,那麽咱們也來挖吧,說不定什麽時候就值錢了,意思就是說任何逐利的礦工並不會使這個系統變得更強壯穩定,而是更加的混亂。

  無成本利益問題無論以幣齡還是幣數量作為PoS的參數,都無法避免。

  而PoW則沒有這樣的問題,我們回到PoW系統中來看,因為任何的分叉都會造成挖礦成本直接變成負收益,所以這會抵抗分叉的產生,礦工傾向於跟隨“最長”的鏈。

  由於以太坊部分采用了PoS共識,它的名字叫做Casper,它必須解決上述無成本利益問題攻擊。所以Casper協議要求PoS礦工需通過抵押保證金的方法對共識結果進行下註,具體實踐結果我們還需要拭目以待。

總結

  最後我們來總結一下PoS共識機制,PoS的區塊鏈系統無需外部物理輸入,所以它相比PoW更為環保不費電,並且礦工就是使用者,這會在一定程度上抵禦了51%攻擊,所以基於PoS機制的數字貨幣屬於理想狀態的數字貨幣。

  PoS的缺點是缺乏工業級的區塊鏈應用,從邏輯上來看有點循環自證明的味道,就是用自己的幣來維護系統的安全,而幣的安全性是由系統保證的,所以現階段PoS共識機制往往不是獨立運行的,而是混合了PoW一起運行,這就可以彌補PoS的缺陷。

  PoS共識機制目前也出現了礦池,也可能會出現中心化挖礦的風險。

  雖然PoS共識機制未來變數依然很多,但它的可塑性比PoW好,技術上的探索空間大,目前PoS幣種相比較PoW幣種風險也較高。

  那麽有哪些區塊鏈項目使用了PoS共識機制呢?你可以給我留言,我們一起討論,感謝你的收聽,我們下期再見。

第13講 | 深入區塊鏈技術(五):PoS共識機制