這個地方在位元幣中就一句話:最長合法鏈,但是在以太坊中因為以太幣的出塊時間只有幾十秒,分叉現象特別頻繁,這個方法就不能用了。這裡的標準就是ghost協議。
5.1叔父區塊
位元幣中有講,目前挖礦的趨勢是裝置的專業化,算力的集中化。每個區塊得到出塊獎勵的概率應該是佔總算力的比例。但是如果出塊時間很短會出現及其不平衡的情況。例如cde都是b的後續區塊,但是d區塊是個大礦池挖出來的。如果僅考慮最長合法鏈,大礦池會無視c和e,哪怕它們是最長合法鏈,大礦池會繼續自己的d挖。所以雖然本身cde的出現是公平的,但是cde成為最長合法鏈的概率卻是不公平的。
那怎麼處理c和e的分叉呢?平衡一下block reward。以太坊開始的時候block reward是4個以太幣,現在是3個,即d會被獎勵3個以太幣,而c和e會得到(7/8)個出塊獎勵,即(3*7/8)個以太幣。看起來不少啊,就差了(3/8)個。那f為什麼要把c和e的結果打包到區塊鏈中呢?所以如果f把c和e打包到區塊鏈中除了f得到的3個以太幣的出塊獎勵外還會額外獲得(叔父區塊的個數*1/32)個區塊獎勵 。f最多可以包含兩個叔父區塊。
5.2 叔父區塊有效的代數
上面的方法還有問題。其一,因為十幾秒實在是太短了,區塊鏈是工作在應用層的,網路層的延遲可能就不止十幾秒了,即分叉的概率會非常高,只儲存兩個,還是太拼運氣了。其二,我現在能不能找到創世區塊後面的那個塊慢慢挖,完了會有人包含我這個叔父區塊,多好。而且如果這樣會造成時間和空間的浪費,時間是因為要找很久遠的叔父區塊,空間自然就是太多交易了。其三,非大礦池的礦工可能永遠都只能成為叔父區塊。其四,肖老師說了,如果主鏈上的區塊不打包叔父區塊呢?例如上圖中的f不打包c和e。表面上看這是個損人不利己的事,但是各個礦池之間是競爭的關係,我僅丟了1/32的獎勵,卻讓敵人丟了7/8,我其實是賺了。
第三個問題肖老師沒有提,我後來也想了一下,成為叔父區塊也還好,畢竟只丟了1/8個區塊而已。那交易小費呢?在以太坊中小費就是汽油費,叔父區塊肯定是沒有汽油費的,畢竟叔父區塊不是有效節點。那以後會不會出現出塊獎勵無限趨於零,交易的收益主要依賴汽油費呢?位元幣會出現定期出塊獎勵減半的情況,但是以太坊並沒有這個規定。位元幣是為了人為製造稀缺性,以太坊在17年10月將出塊獎勵由5個減為3個是因為挖礦難度的問題,所以這個問題先不用考慮。
第一二四個問題有解,就是下面這張圖
l到a為主鏈,其它的是叔父區塊。以太坊僅會包括7代以內的叔父區塊,等到a的時候,m是它的叔父區塊,能拿到7/8的出塊獎勵,n能拿到6/8的出塊獎勵,直到r能拿到2/8的出塊獎勵。其它的叔父區塊如果一旦已經被某個侄子包含就不會再考慮了。比如區塊s如果已經被c或b包含了,a的時候就不會再包含它了,所以還是越早被包含越能獲得更多的出塊獎勵。所謂的7代是指從a到h一共有8輩分,一共7代(這個7代就這麼理解吧)。第乙個問題,七代每代都能包含兩個,每代都又能成為第一代第二代叔父區塊,所以能包含很多很多區塊。第二個問題在七代方法下直接解決。第四個問題,大礦池的g不是不包含嘛,但是f可能又是我挖出來的,我把自己包含了不就完了,比較每個礦池挖出區塊的概率是公平的。這樣的7代設計也有利於分叉的快速合併,再說一遍,區塊的有效性和時間戳無關,越早並入主鏈就能獲得越多的出塊獎勵。1/32的叔父區塊打包獎勵和包含的第幾代沒關係。
5.2 q&
叔父區塊是否有效?
叔父區塊根本就是乙個有效區塊,只是類似於礦池資源分配的那種,為了平衡挖出無效區塊的礦工心情。因此叔父區塊不僅拿不到汽油費,裡面的交易也是無效的。在檢查叔父區塊的有效性時,侄子區塊並不會檢查內部交易的有效性,僅會檢查挖礦難度那個nonce是否有效。那如果有的礦工隨便打包乙個不符合交易要求但是符合nonce的區塊怎麼辦?首先,如果這個區塊想拿到更多的獎勵它就得打包有效交易,其次那要是有的人只為了混叔父區塊獎勵呢?因為叔父區塊的獎勵也不少。我自己來答一下,首先做出符合nonce而且塊頭資料結構是正確的區塊本身就不是一件容易的事情,這個難度和生成乙個完全正確交易樹的區塊差不多了,與其這麼混,真不如把正確的交易打包進去了。
叔父區塊只有區塊頭有效嗎?
假設j->e是一條合法鏈,b肯定是叔父區塊,有獎勵,那a和k還有獎勵嗎?表明看起來應該給,這樣更符合叔父區塊的設計理念,但是這樣的話會讓分叉攻擊變得更容易。例如f中有甲->乙4個以太幣,等過了幾個區塊後,乙認為安全了,但是此時甲決定回滾這個交易,甲會再發布甲->甲『的交易區塊b。如果上面那條鏈變最長我成功回滾了那就贏了,如果沒有我也能獲得叔父區塊獎勵。因此就只給塊頭獎勵。
會不會有人掙叔父區塊
如果我正在挖礦或者正在執行智慧型合約,有人已經發布了乙個可用區塊,我要不要拋棄當前的挖礦工作呢?我覺得不用,去爭叔父區塊。但是肖老師說目前沒有這樣做的,因為我能挖到區塊的概率和我挖了多久是沒關係的。這個理由我懂了,後面這個理由我有點不懂,肖老師說:「就算你挖出來了還要切換到主鏈」.
5.3 eg
這個是實際的區塊,其中uncles reward是指叔父區塊拿到的獎勵,因為本區塊肯定是有效區塊。uncles reward是2.25個以太幣,這個叔父區塊是兩代的,因為2.25=3*(6/8)。block reward有三部分,分別是出塊獎勵、汽油費和打包叔父區塊的獎勵。
這是另乙個區塊,包含了兩個叔父區塊,其中4.875是6/8和7/8的和。
以太坊 GHOST協議
在區塊鏈中為了提高交易速度,需要減少出塊時間從而加快出塊速度 區塊時間的減少會導致網路安全性下降,而且對大的礦池有利,對小的礦池或單個礦工不利。在以太坊中引入ghost協議,來解決這個問題。關於為什麼出塊時間縮短後,會出現安全性下降和對小礦池不利可以參考 以太坊原理簡介 中叔塊部分內容。另外,在以太...
以太坊Whisper協議
在本教程中,我們將學習如何使用以太坊的whisper協議建立簡單的聊天cli。儘管本教程中的所有操作都在你的控制台中進行,但是你應該能夠重新使用我們在你自己的應用程式中提供的js,並對如何傳送和顯示不同型別的訊息有乙個很好的了解,以及使用whisper可以構建什麼。我們專門為本教程建立了這個儲存庫。...
以太坊Whisper協議
在本教程中,我們將學習如何使用以太坊的whisper協議建立簡單的聊天cli。儘管本教程中的所有操作都在你的控制台中進行,但是你應該能夠重新使用我們在你自己的應用程式中提供的js,並對如何傳送和顯示不同型別的訊息有乙個很好的了解,以及使用whisper可以構建什麼。我們專門為本教程建立了這個儲存庫。...