GHOST(Greedy Heaviest Observed Subtree)是一種主鏈選擇協議(不是側鏈選擇協議)。舉例來講:經典的Proof-of-Work(POW)是以取最長的主鏈爲基本原則,GHOST協議則是以包含子樹數目最多爲基本原則。segmentfault
POW協議不能以太快的頻率(上圖的Block Generation Rate)發佈新的區塊,由於太快發佈區塊,區塊中的數據重複驗證6次(若干次)當即永久封存地區塊中,一旦51%算力攻擊一旦發生,double-spend等糟糕問題會出現,惡意的數據容易永久封存於區塊中,整個blockchain系統須要足夠長的時間來處理和恢復黑客惡意攻擊所形成的破壞——這段時間能夠理解爲系統的有效修復時間,也能夠理解爲交易信息被確認的等待時間,從安全的角度,顯然這段時間越長,交易數據可靠性被驗證的越多,因此越可靠。
相比而言,GHOST協議就沒有這個問題了,由於在GHOST協議控制下, 「區塊發佈太快」 和 「51%攻擊持續性地控制主動權」 兩者沒有必然的關係,GHOST不是採用絕對算力優點獲取主動權的協議。這也是爲何以太坊的出塊速度要遠遠大於區塊鏈。安全
在比特幣協議中,最長的鏈被認爲是絕對的正確。若是一個塊不是最長鏈的一部分,那麼它被稱爲是「孤塊」。一個孤立的塊也是合法的,可是發現的稍晚,或者是網絡傳輸稍慢,而沒有能成爲最長的鏈的一部分。在比特幣中,孤塊沒有意義,隨後將被拋棄,發現這個孤塊的礦工也拿不到採礦相關的獎勵。例如:挖礦節點A是一個礦池佔有全網30%的算力,挖礦節點B佔有全網算力的10%,節點A會有70%的機率產生廢塊,節點B有90%的機率產生廢塊. 若是新舊區塊之間產生的間隔過短, 則節點A會由於規模效應而比B節點更爲高效。因此新舊區塊的間隔太短會致使單一的礦池主導全網的挖礦過程。
這個問題在以太坊中獲得了很好的解決,根據GHOST協議,不認爲孤塊沒有價值,而是會給與發現孤塊的礦工以回報。孤塊被稱爲「叔塊」(uncle block),它們能夠爲主鏈的安全做出貢獻,也一樣能得到獎勵,這激勵了礦工在新發現的塊中去引用叔塊,減小了孤塊的產生。網絡
Ghost協議解決了兩個問題:摒棄了單一的最長鏈原則, 取而代之的是最大子數原則;孤塊獎勵問題。學習
以下圖所示:
區塊鏈
若是單純的計算最長鏈原則, 主鏈應該是 0 -> 1B -> 2D -> 3F -> 3F -> 4C -> 5B.
若是採用了GHOST協議, 之前的"廢塊"也會被考慮到主鏈的計算量中.每個節點下含一個子樹, 兄弟節點之間子樹節點最多的被選爲主鏈. 這樣一來 0 -> 1B -> 2C -> 3D -> 4B 成爲主鏈,
若是採用GHOST協議, 一個攻擊者僅僅提供一個1A到6A的長鏈並不能被認爲是主鏈.spa
Ghost協議的優點在於:blog
孤塊獎勵問題:rem
被引用的叔塊,其礦工的報酬和叔塊與區塊之間的間隔層數有關係。get
間隔層數 | 報酬比例 | 報酬(ether) |
---|---|---|
1 | 7/8 | 4.375 |
2 | 6/8 | 3.75 |
3 | 5/8 | 3.125 |
4 | 4/8 | 2.5 |
5 | 3/8 | 1.875 |
6 | 2/8 | 1.25 |