做者:林冠宏 / 指尖下的幽靈html
博客: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共識機制
還不瞭解的朋友,能夠看下我以前的一篇文章區塊鏈
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 協議
的全稱是「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 的鏈是含有區塊數最多的。所以該鏈勝出,這就是幽靈協議選擇最初鏈的機制。
此外,對於在最長鏈中
被包含進去了的形成鏈分叉
的塊,例如上圖中的3E
和3C
,Ghost 協議
對它們也有一套對應的處理機制,這些區塊會被根據規則處理爲:
比特幣鏈中的分叉塊都是孤塊
。關於叔塊方方面面的通俗詳細介紹,在我書裏,這裏就不展開說了。
咱們總結一下,Ghost
幽靈協議在以太坊中主要起到了下面兩點做用:
前提: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
投注方式是存在有驗證人聯盟在一塊兒,共同投注某個區塊使之勝出的問題的,對於這個問題的解決方案,目前以太坊還沒完整公佈,處於進一步的研究之中。
完