17-ETH-GHOST協議

聲明:本文是要點筆記,介紹和系列筆記均收錄在專題:區塊鏈技術與應用

BTC系統中出塊時間爲10min,而以太坊中出塊時間被降低到15s左右,雖然有效提高了系統反應時間和吞吐率,卻也導致系統臨時性分叉變成常態,且分叉數目更多。這對於共識協議來說,就存在很大挑戰。在BTC系統中,不在最長合法鏈上的節點最後都是作廢的,但如果在以太坊系統中,如果這樣處理,由於系統中經常性會出現分叉,則礦工挖到礦很大可能會被廢棄,這會大大降低礦工挖礦積極性。而對於個人礦工來說,和大型礦池相比更是存在天然劣勢。

對此,以太坊設計了新的公式協議——GHOST協議(該協議並非原創,而是對原本就有的Ghost協議進行了改進)。

GHOST協議最初版本

如下圖,假定以太坊系統存在以下情況,A、B、C、D在四個分支上,最後,隨着時間推移 B 所在鏈成爲最長合法鏈,因此A、C、D區塊都作廢,但爲了補償這些區塊所屬礦工所作的工作,給這些區塊一些“補償”,並稱其爲"Uncle Block"(叔父區塊)。

規定 E 區塊在發佈時可以將 A、C、D 叔父區塊包含進來,A、C、D 叔父區塊可以得到出塊獎勵的 7/8,而爲了激勵 E 包含叔父區塊,規定 E 每包含一個叔父區塊可以額外得到 1/32 的出塊獎勵。爲了防止 E 大量包含叔父區塊,規定一個區塊只能最多包含 2 個叔父區塊,因此 E 在 A、C、D 中最多隻能包含兩個區塊作爲自己的出塊獎勵。

假定一個礦工挖出了 B,此時他沿着其所在鏈繼續挖,而他知道 A 是和自己“同輩”,則可以將A包含進區塊挖礦,若挖礦過程中又監聽到 C 也是“同輩”,則可以停止挖礦,將C包含進來重新組織成一個新區塊重新挖礦,實際中,由於挖礦過程的無記憶性,這樣並不會降低成功挖到礦的概率。

GHOST協議最初版本缺陷:

  1. 因爲叔父區塊最多隻能包含 2 個,如上圖出現 3 個怎麼辦?
  2. 礦工自私,故意不包含叔父區塊,導致叔父區塊7/8出塊獎勵沒了,而自己僅僅損失1/32。如果甲、乙兩個大型礦池存在競爭關係,那麼他們可以採用故意不包含對方的叔父區塊,因爲這樣對自己損失小而對對方損失大。

Ghost協議新的版本

如下圖1中,爲對上面例子的補充,F 爲 E 後面一個新的區塊。因爲規定 E 最多隻能包含 2 個叔父區塊,所以假定 E 包含了 C 和 D。此時,F 也可以將 A 認爲自己的的叔父區塊(實際上並非叔父輩的,而是爺爺輩的)。如果繼續往下挖(下圖2),F 後的新區塊仍然可以包含 B 同輩的區塊(假定 E、F 未包含完)。這樣,就有效地解決了上面提到的最初Ghost協議版本存在的缺陷。

但這樣仍然存在一定的問題。

我們將“叔父”這個概念進行了擴展,但問題在於,“叔父”這一定義隔多少代纔好呢?

如下圖所示,M 爲該區塊鏈最新的一個區塊,F 爲其嚴格意義上的叔父,E 爲其嚴格意義上的“爺爺輩”。以太坊中規定,如果 M 包含 F 輩區塊,則 F 獲得 7/8 出塊獎勵;如果 M 包含 E 輩區塊,則 F 獲得 6/8 出塊獎勵,以此類推向前。直到包含 A 輩區塊,A 獲得 2/8 出塊獎勵,再往前的“叔父區塊”,對於M來說就不再認可其爲 M 的"叔父"了。

對於M來說,無論包含哪個輩分的“叔父”,得到的出塊獎勵都是 1/32 出塊獎勵。

這樣,就方便了全節點進行記錄,此外,也從協議上鼓勵一旦出現分叉馬上進行合併。

以太坊中的獎勵

  • BTC:靜態獎勵(出塊獎勵)+動態獎勵(交易費,佔據比例很小)
  • ETH:靜態獎勵(出塊獎勵+包含叔父區塊的獎勵)+動態獎勵(汽油費,佔據比例很小,叔父區塊沒有)

BTC中爲了人爲製造稀缺性,比特幣每隔一段時間出塊獎勵會降低,最終當出塊獎勵趨於0後會主要依賴於交易費運作。而以太坊中並沒有人爲規定每隔一段時間降低出塊獎勵。

以太坊中包含了叔父區塊,要不要包含叔父區塊中的交易?
不應該,叔父區塊和同輩的主鏈上區塊有可能包含有衝突的交易。而且我們前文也提到,叔父區塊是沒有動態獎勵的。因此,一個節點在收到一個叔父區塊的時候,只檢查區塊合法性而不檢查其中交易的合法性。

當然,對於分叉後的產生的叔塊鏈應該怎麼辦?例如下圖所示,A->F 該鏈並非一個最長合法鏈,所以 B->F 這些區塊怎麼辦?該給挖礦補償嗎?

如果規定將下面整條鏈作爲一個整體,給予出塊獎勵,這一定程度上鼓勵了分叉攻擊(降低了分叉攻擊的成本,因爲即使攻擊失敗也有獎勵獲得)。因此,ETH系統中規定,只認可A區塊爲叔父區塊,給予其補償,而其後的區塊全部作廢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章