GHOST 對比特幣的最長鏈規則進行更改,每次分叉時選取擁有最重子樹的分叉節點,在提升吞吐量的情況下比最長鏈規則更具安全性。

原文標題:《共識算法解讀-PoW 算法之 GHOST》
撰文:Johnathan

問題引入:高吞吐量下比特幣的安全性如何?

比特幣爲了保障其安全性,採用最長鏈規則,並固定了區塊大小和出塊時間間隔,從而導致其低吞吐量 (<10Tps) 和長時間區塊確認間隔 (6 個區塊,每個區塊平均需要 10 分鐘),這一直以來飽受詬病,影響了比特幣網絡的大規模使用。

一開始人們思考的是在比特幣最長鏈的規則上,通過增加區塊大小(1M->4M) 和減小出塊間隔來增大吞吐量,但是這卻帶來了三個很大的問題:

  • 不斷的分叉!分叉也就意味着安全性降低,容易引起雙花攻擊。
  • 區塊獎勵受網絡延遲影響:整個網絡的區塊獎勵不單單與算力有關,網絡延遲較低的節點更有可能獲得出塊獎勵。
  • 容易受到自私挖礦攻擊:惡意節點出塊後先不公佈,直到發現比主鏈長時再公佈

下圖闡釋了在一種區塊生成間隔較小(區塊生成率大於區塊傳播延遲)的網絡中,區塊鏈網絡高度分叉,此時攻擊者可以祕密創造 6 個區塊(由紅色虛線標記),從而超過主鏈的場景。

如何保證區塊鏈安全性且提升 TPS?技術解讀 GHOST 共識算法

於是,研究人員開始思考,如何在保證高吞吐量的同時,還能保證安全性?

2015 年,以色列的學者 Yonatan Sompolinsky 和 Aviv Zohar 就提出了一種 The Greedy Heaviest-Observed Sub-Tree (GHOST) 貪婪最重可觀測子樹算法,以解決這個問題。

論文鏈接:共識算法相關 paper:Secure High-Rate Transaction Processing in Bitcoin1

那麼 GHOST 又是如何做的?

GHOST 的思路很簡單,它對比特幣的最長鏈規則進行更改,在每次分叉的時候選取擁有最重子樹的分叉節點。舉例來說(參考上圖),就是在 0 處分叉爲 1B 和 1A 時,1A 的子樹(它進行自私挖礦)共有 6 個塊(包括 1A 塊),1B 的子樹有 12 個塊,12>6, 所以選 1B 爲主鏈的塊。這樣就減輕了了分叉帶來的問題,使得主鏈不斷向後增長。

也就是說,主鏈之外的區塊也被計入了算力。具體的算法如下,輸入整個樹結構的區塊鏈,輸出最終主鏈的最後一個區塊 B:

如何保證區塊鏈安全性且提升 TPS?技術解讀 GHOST 共識算法

該算法,從創世區塊 (Genesis) 開始,每次分叉就選取最重子樹,直到確定完主鏈的序。還是拿圖中的例子,最終選取的主鏈是 0, 1B, 2C, 3D, 4B

那麼 GHOST 能否保證能夠唯一的確定主鏈嗎?相對於比特幣他的安全性又如何?GHOST 算法對吞吐量的影響又如何呢?這就涉及到 GHOST 的特性。

GHOST 特性

1.收斂特性:任何一個區塊,經過足夠長的時間,最終會被主鏈完全丟棄或者採用。也就是經過足夠長的時間,任何節點的主鏈會是一樣的
2.抗 51% 攻擊:在有限的時間內,攻擊者將任意在主鏈區塊 B,替換到鏈下的概率接近於 0。
3.吞吐量和安全性:如下圖,隨着區塊生成速度λ(每秒產生的區塊數)增加,GHOST 的吞吐量相對於最長鏈 Longest Chain 規則沒有太多下降,並且安全性沒有任何下降,而最長鏈的安全性卻指數下降

如何保證區塊鏈安全性且提升 TPS?技術解讀 GHOST 共識算法

前路

GHOST 在保證安全性的前提,提升了 TPS,那麼有沒有可能進一步提升?

同時由於把非主鏈的區塊拋棄了,只有主鏈的區塊纔有出塊獎勵,這樣的激勵機制會導致礦工不願意貢獻算力,這又改如何解決?

來源鏈接:mp.weixin.qq.com