以太坊 GHOST協議

2021-09-19 20:57:44 字數 1894 閱讀 9507

在區塊鏈中為了提高交易速度,需要減少出塊時間從而加快出塊速度;區塊時間的減少會導致網路安全性下降,而且對大的礦池有利,對小的礦池或單個礦工不利。在以太坊中引入ghost協議,來解決這個問題。關於為什麼出塊時間縮短後,會出現安全性下降和對小礦池不利可以參考《以太坊原理簡介》中叔塊部分內容。

另外,在以太坊中,區塊分叉非常常見,所以在發生分叉之後應盡快合併分叉以維護區塊鏈的統。

假設當前以太坊網路中所有礦工都是基於a來挖礦,當乙個礦工(w0)打包出乙個區塊b,並將b廣播出去,告訴其他礦工b已經被挖掘出來了,你們可以來基於b來挖礦了。目前以太坊的處快時間是15s,而在15s內,這個區塊b可能還沒有傳遍整個區塊鏈網路,在收到廣播前礦工們還是基於a來繼續挖礦;假設有四個礦工w1、w2、w3、w4在收到廣播前基於a分別挖出了b1、b2、b3、b4,並廣播的網路中。

此時將面臨這樣幾個問題:

- 礦工w0、w1、w2、w3、w4都希望自己挖出的區塊能放到主鏈上。

- 因為w0最早廣播,所以也就最可能成為主鏈上的區塊。

區塊鏈的主鏈只有一條,如何讓大家都願意在同乙個條主鏈上挖礦,並且有動力的挖礦呢?即對於小礦工們而言,願意接受大礦池挖出來的區塊成為主鏈的區塊,並且自己挖出新塊以後也能得到一定的獎勵,而不會因為廣播的時間差而盡做無用功?

如上圖所示;礦池p0中的礦工基於b挖礦的時候,可以接納其他礦工挖出來的區塊(b1、b2)作為叔塊。因為p0是大礦池,假設p0礦池很快挖出c塊並廣播出去,因為接納了兩個分叉區塊b1、b2,那麼b1、b2對應的礦工w1、w2分別獲得出塊獎勵的7/8;另外,p0因為接納了兩個分叉區塊,除了出塊獎勵之外,可以額外得到出塊獎勵的1/32*2(2指的是接納的叔塊數量)。

還在繼續挖c塊的礦工,在收到c塊資訊以後廣播後,檢驗發現p0發布的c塊確實是最長鏈。而挖出b1、b2的礦工w1、w2如果繼續在自己的分叉鏈上繼續挖礦,而競爭讓自己的分叉鏈競爭成為主鏈的可能性很低,這樣自己將一無所獲;如果接受c對應的鏈,則可獲得區塊獎勵的7/8作為回報,兩相對比很容易選擇接納c對應的鏈作為主鏈。如此對於礦池p0和礦工w1、w2都是有益的,如此也能讓整個以太坊網路分叉迅速收斂。

因為c區塊接納了b1、b2作為叔塊,響應的w1、w2獲得了出塊獎勵;但是對於其他的分叉(b3、b4)來說確實什麼都沒獲得,那麼w3、w4能願意放棄自己挖出來區塊麼?如何讓他們放棄自己所在的分叉,轉而擁抱最長的主鏈?ghost協議規定,如果d接納b3、b4,那麼b3、b4對應的礦工w3、w4分別能獲得出塊獎勵的6/8,因為d接納了分叉區塊,除了出塊獎勵以外,還能獲得出塊獎勵的1/32*2。

為什麼b3、b4被d接納時,礦工獲得的獎勵是6/8,而b1、b2被c接納時,礦工獲得的獎勵是7/8呢?那是因為d距離b3、b4的路徑更遠,b3、b4競爭成為主鏈的希望更加渺茫,所以獎勵自然會少一些。

當然如果基於a挖出來的子塊遠遠不止b、b1、b2、b3、b4,那麼接下來乙個區塊同樣可以引用這些b級叔塊,不過最大的深度不超過6。

區塊可以不引用叔塊,但最多引用兩個叔塊。

叔塊必須是區塊的前2層~前7層的祖先的直接的子塊。

被引用過的叔塊不能被重複引用。

引用叔塊的區塊,可以獲得挖礦報酬的1/32,也就是5*1/32=0.15625 ether。最多獲得2*0.15625=0.3125 ether

被引用的叔塊,其礦工的報酬和叔塊與區塊之間的間隔層數有關係。

間隔層數

報酬比例

報酬(ether) 1

7/84.375 2

6/83.75 3

5/83.125 4

4/82.5 5

3/81.875 6

2/81.25

以太坊五之GHOST協議

這個地方在位元幣中就一句話 最長合法鏈,但是在以太坊中因為以太幣的出塊時間只有幾十秒,分叉現象特別頻繁,這個方法就不能用了。這裡的標準就是ghost協議。5.1叔父區塊 位元幣中有講,目前挖礦的趨勢是裝置的專業化,算力的集中化。每個區塊得到出塊獎勵的概率應該是佔總算力的比例。但是如果出塊時間很短會出...

以太坊Whisper協議

在本教程中,我們將學習如何使用以太坊的whisper協議建立簡單的聊天cli。儘管本教程中的所有操作都在你的控制台中進行,但是你應該能夠重新使用我們在你自己的應用程式中提供的js,並對如何傳送和顯示不同型別的訊息有乙個很好的了解,以及使用whisper可以構建什麼。我們專門為本教程建立了這個儲存庫。...

以太坊Whisper協議

在本教程中,我們將學習如何使用以太坊的whisper協議建立簡單的聊天cli。儘管本教程中的所有操作都在你的控制台中進行,但是你應該能夠重新使用我們在你自己的應用程式中提供的js,並對如何傳送和顯示不同型別的訊息有乙個很好的了解,以及使用whisper可以構建什麼。我們專門為本教程建立了這個儲存庫。...