1. 程式人生 > >以太坊的區塊和儲存(二):區塊體之叔區塊

以太坊的區塊和儲存(二):區塊體之叔區塊

昨天講了以太坊的區塊頭,接著來我們今天講講區塊體。

在比特幣裡,區塊體裡就一個東西,那就是一筆一筆的交易資訊。但在以太坊的區塊體裡,除了交易資訊,還有一些特殊區塊的區塊頭。

因為這些特殊區塊的父區塊(上一區塊)和本區塊(包含它們的區塊)的爺爺區塊(上上個區塊)相同,也就是說,這些特殊區塊是本區塊的叔叔,所以叫“叔區塊”。

對於以太坊的交易資訊,我們在0719中介紹過,所以現在主要講講叔區塊。 為什麼以太坊要搞一個這麼奇葩的叔區塊機制呢?

我們知道,比特幣大概10分鐘出一個塊,而以太坊大概15秒就出一個塊,出塊速度大大提高。出塊速度越快,說明為產出區塊所要解的題難度就越低,因為難度低大家才能更快地算出來。

但同時,難度越低,就越容易多個礦工同時解出題。同時因為區塊間隔時間短,只有10多秒,一個區塊被打包之後,在這10多秒裡可能還沒有在全網播布完,所以比較多地會出現分叉情況,也就是一部分節點先收到A打包的區塊,另一部分節點先收到B打包的區塊。

但是因為POW機制的“最長區塊鏈”原則,只有最長的那條鏈才是有效的,這就導致可能某些節點跟在A區塊後面建立了很多區塊,但後面發現B鏈條更長,這就很悲催了,這些最終不在B鏈條的區塊,稱之為“孤區塊”。在比特幣裡,這些孤區塊消耗了算力,但沒為系統做出貢獻,也沒獎勵。

當然,比特幣的孤區塊不多,不算個事。但在以太坊裡,孤區塊實在太多,才成為一個問題。 大家想想,如果一個小礦工,整天挖到孤塊,拿不到獎勵,是不是很影響積極性,長期以往,很多小礦工可能就退出了,使得整個以太坊系統的算力下降,算力下降也就意味著安全性降低。而叔區塊機制就很好地避免了這一個問題。

區塊裡包含叔區塊,意味著叔區塊的工作量也納入了整個系統,也為安全做出了貢獻。既然做了貢獻,那肯定要給予獎勵。以太坊這個獎勵機制也設定得很好,使得大家皆大歡喜。

我們先看一個正常區塊的收益,首先它有一個5以太幣的固定獎勵,然後是該區塊裡的交易上繳的gas費用。這兩點跟比特幣類似。最後,就是納入叔區塊的獎勵,如果該區塊包含了叔區塊,每包含一個,可以得到固定獎勵的1/32,也就是0.15625以太幣。這就刺激了區塊包含叔區塊的積極性。

不過,以太坊也設定了數量上限,一個區塊最多包含2個叔區塊。這是包含叔區塊的區塊所獲得的獎勵。

當然,叔區塊的建立者本身也會獲得獎勵,不過這個獎勵公式稍微複雜一點: 叔區塊獎勵 = ( 叔區塊高度 + 8 - 本區塊的高度 ) * 固定區塊獎勵 / 8 根據我們之前對叔區塊的定義,因為叔區塊和本區塊高度相差1,所以可以很快算出來一個叔區塊的收益為4.375以太幣,不少啊!

其實,根據這個公式可以看出,叔區塊可以不必拘泥於一定是本區塊的叔叔,也可以是本區塊的叔爺爺,叔曾爺爺,甚至是自己的兄弟都行,而且“血緣”關係越近,叔區塊拿到的獎勵越多,不過最多不要超過8層,因為根據公式超過8層就沒獎勵了。 不過,現在以太坊用到的應該還只是純正的叔區塊。

好了,以太坊的區塊結構就講到這了。