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

做者:林冠宏 / 指尖下的幽靈html

掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8git

博客:http://www.cnblogs.com/linguanh/github

GitHub : https://github.com/af913337456/算法

騰訊雲專欄: https://cloud.tencent.com/developer/user/1148436/activities瀏覽器

蟲洞區塊鏈專欄:https://www.chongdongshequ.com/article/1536563643883.html網絡


前序

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

目錄

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

PoW 與 PoS 共識機制

若是對PoW共識機制還不瞭解的朋友,能夠看下我以前的一篇文章區塊鏈

PoW共識機制通俗講解code

PoS共識機制通俗講解htm

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

若是別人問你「以太坊目前所使用的共識算法」是什麼?若是你此時去瀏覽器搜索發現有些文章說是PoS,又有些說是PoW

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

  • Frontier(前沿)。這個階段的版本是以太坊的基礎,此時的以太坊具有了挖礦交易以及智能合約功能模塊。可是沒有供普通用戶使用的圖形化界面,僅適合於開發者使用。所使用的共識算法是「PoW」。
  • Homestead(家園)。這個階段的以太坊網絡變得更加穩定,且具有了圖形界面的錢包軟件。所使用的共識算法仍是是「PoW」。
  • Metropolis(大都會)。分有下面兩個子版本:
    • 拜占庭。發佈了集合錢包功能以及合約發佈等豐富功能的圖形化界面軟件「Mist」,同時也引入了不少新的技術,例如零知識證實,抽象帳號等。使用的共識算法仍然是「PoW」。
    • 君士坦丁堡。使用混合共識算法「PoW + PoS」,爲「寧靜」作鋪墊。
  • Serenity(寧靜)。將把以太坊的共識算法所有換成基於「PoS」的變種算法--「Casper投注共識」,它屬於PoS系列。

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

Chost 協議

Chost 協議的全稱是「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投注方式是存在有驗證人聯盟在一塊兒,共同投注某個區塊使之勝出的問題的,對於這個問題的解決方案,目前以太坊還沒完整公佈,處於進一步的研究之中。

相關文章
相關標籤/搜索