1. 程式人生 > >通俗講解:PoW共識機制與以太坊的關係、Ghost協議 及 Casper PoS共識機制的變種

通俗講解:PoW共識機制與以太坊的關係、Ghost協議 及 Casper PoS共識機制的變種

作者:林冠巨集 / 指尖下的幽靈

掘金:juejin.im/user/587f0d…

部落格:www.cnblogs.com/linguanh/

GitHub : github.com/af913337456…

騰訊雲專欄: cloud.tencent.com/developer/u…

蟲洞區塊鏈專欄:www.chongdongshequ.com/article/153…


前序

本人版暫名為《區塊鏈以太坊DApp實戰開發》一書,即將完成,是一本廢話少、講解通俗、實操性強的技術書籍。本文為書中的小節的部分內容。想涉足這個區塊鏈領域技術開發的同僚可以留意我的部落格,屆時會發布。

目錄

  • PoW 共識機制
  • 以太坊目前所使用的共識演算法
  • Ghost 協議
    • 選擇最優鏈
    • 分叉塊處理
  • Casper PoS變種共識機制
    • 如何成為驗證人
    • 驗證人如何獲取保證金
    • 候選區塊如何產生
    • 按照什麼規則輪著出塊
    • 如何判斷勝出區塊
    • 驗證人聯盟投注的作弊問題

PoW 與 PoS 共識機制

如果對PoW PoS共識機制還不瞭解的朋友,可以看下我之前的兩篇文章

PoW共識機制通俗講解

PoS共識機制通俗講解

以太坊目前所使用的共識演算法

如果別人問你“以太坊目前所使用的共識演算法”是什麼?而你此時去瀏覽器搜尋就會發現有些文章說是PoS

,又有些說是PoW

完整且正確的說法應該是這樣的,首先以太坊的原始碼是分有階段,不同階段所使用的共識演算法要分開來說。這其實也是PoW共識機制以太坊的關係。所分的階段有:

  • Frontier(前沿)。這個階段的版本是以太坊的基礎,此時的以太坊具備了挖礦交易以及智慧合約功能模組。但是沒有供普通使用者使用的圖形化介面,僅適合於開發者使用。所使用的共識演算法是“PoW”。
  • Homestead(家園)。這個階段的以太坊網路變得更加穩定,且具備了圖形介面的錢包軟體。所使用的共識演算法還是是“PoW”。
  • Metropolis(大都會)。分有下面兩個子版本:
    • 拜占庭。釋出了集合錢包功能以及合約釋出等豐富功能的圖形化介面軟體“Mist
      ”,同時也引入了很多新的技術,例如零知識證明,抽象賬號等。使用的共識演算法仍然是“PoW”。
    • 君士坦丁堡。使用混合共識演算法“PoW + PoS”,為“寧靜”做鋪墊。
  • Serenity(寧靜)。將把以太坊的共識演算法全部換成基於“PoS”的變種演算法--“Casper投注共識”,它屬於PoS系列。

截至2018-12-14,目前以太坊的最新發布版本是Metropolis大都會的拜占庭。由上述可知,在以太坊發展的過程中,它的共識演算法對於不同的階段,分別是:PoW共識,PoW + PoS 共識PoS

Ghost 協議

Ghost 協議的全稱是“Greedy Heaviest-Observed Sub-Tree protocol”,貪婪子樹協議,又稱幽靈協議,它屬於主鏈選擇協議範疇。

首先在比特幣公鏈中,它是根據最長鏈規則來解決區塊鏈分叉問題的。請注意,並不是所有的區塊鏈公鏈解決分叉問題都是使用最長鏈規則,以太坊就不是。

選擇最優鏈

以太坊解決區塊鏈分叉問題目前所使用的是Ghost 協議,所以Ghost協議的真實作用是用來進行主鏈選擇的。不同於比特幣的最長鏈規則,它在選擇最長鏈的時候不以哪條鏈區塊連續最長為標準,而是將分叉區塊也考慮了進去,選擇出一條包含了分叉區塊在內區塊數目最多的鏈作為最長鏈。例如下圖所示:

在上圖的分叉情況中,在比特幣公鏈中,最終勝出的是鏈:0 <- 1A <- 2C <- 3F <- 4B <- 5A,一條由最長鏈規則選擇的鏈。而在以太坊公鏈中,由幽靈協議得出的最終勝出的是:0 <- 1A <- 2B <- 3D <- 4A 。

原因就是在上面的分叉情況中,幽靈協議把分叉區塊也考慮進去了,統計總的區塊數,發現在包含了區塊: 0,1A,2B,3E,3D,3C,4A 的鏈是含有區塊數最多的。因此該鏈勝出,這就是幽靈協議選擇最優鏈的機制。

分叉塊處理

此外,對於在最長鏈中被包含進去了的造成鏈分叉的塊,例如上圖中的3E3CGhost 協議對它們也有一套對應的處理機制,這些區塊會被根據規則處理為:

  1. 孤塊,完全沒用的塊,挖出的礦工沒任何收益。比特幣鏈中的分叉塊都是孤塊
  2. 叔塊,被一定範圍內的後續子塊所打包收納的塊,挖出叔塊的礦工會按照一定演算法給予收益。

關於叔塊方方面面的通俗詳細介紹,在我書裡,這裡就不展開說了。

我們總結一下,Ghost幽靈協議在以太坊中主要起到了下面兩點作用:

  1. 選擇出最優鏈
  2. 對最優鏈中分叉塊進行處理

Casper PoS變種共識機制

前提:Casper 目前還沒完全公佈,還處於開發中,下面內容是根據目前現有的知識總結出的。

作為以太坊第四階段版本的共識機制,Casper投注共識增加了懲罰機制,並基於PoS的思想在記賬節點中選取驗證人,能夠投注的角色是:驗證人。可以將這類角色理解為新一代以太坊礦工。

在casper共識機制中,驗證人要拿出保證金的一部分對它認為的大概率勝出的區塊進行下注:

  • 如果賭對了,它們就可以拿回保證金外加區塊中的交易費用,也許還會有一些新發的貨幣;
  • 如果下注沒有迅速達成一致,下注太慢,它們只能拿回部分下注金,相當於損失了一些下注金;
  • 因此數個回合之後下注的結果出來,那些選錯了的驗證人就會輸掉它們的下注金;
  • 此外如果驗證人過於顯著的改變下注,例如先是賭某個塊有很高概率勝出,然後又改賭另外一個塊有高概率勝出,它將被懲罰。

如何成為驗證人

想成為驗證人,是要進行交保證金進行申請的,同時也可以在進入後選擇退出,加入和退出都會將是以太坊網路中的一種特殊的交易型別,目前最常見的交易就是轉賬ETH代幣。也就是說,到時候可能要呼叫一定的以太坊介面來進行申請成為驗證人。保證金很有可能就是以太坊ETH代幣,它將會被用來投注,或被因被以太坊懲罰而沒收掉。

目前Casper的驗證人邏輯將會通過一個名稱為Casper合約的東西來實現,合約它提供投注,加入,取款和獲取共識資訊等一系列功能,因此通過簡單的呼叫Casper合約我們就能提交投注或者進行其他操作。Casper合約的內部狀態如下:

這個合約會記錄當前的驗證人集合,對於每位驗證人的6項主要欄位解析如下:

  • Return address,驗證人保證金的返還地址
  • Deposit size,當前驗證人保證金的數量(注意驗證人的投注會使這個值增加或減少)
  • Validation code,驗證人的驗證程式碼
  • Seq,最近一次投注的序號
  • Prevhash,最近一次投注的hash
  • 驗證人的每次投注的表格

驗證人如何獲取保證金

別人轉賬給驗證人的錢包地址,或者在早期版本基於PoW挖礦收穫。

候選區塊如何產生

驗證人出塊,出塊是一個獨立於其它所有事件而發生的過程:驗證人收集交易,當輪到他們的出塊時間時,他們就製造一個區塊,簽名,然後傳送到網路上。

按照什麼規則輪著出塊

Casper機制提供規則。

如何判斷勝出區塊

當驗證人中的絕大多數,滿足協議定義閾值的一群驗證人的總保證金比例達到67%到90%之間某個百分比以非常高的概率,下注某個塊勝出的時候,此區塊勝出。

驗證人聯盟投注的作弊問題

不難看出Casper投注方式是存在有驗證人聯盟在一起,共同投注某個區塊使之勝出的問題的,對於這個問題的解決方案,目前以太坊還沒完整公佈,處於進一步的研究之中。