以太坊如何控制區塊大小?
白話區塊鏈/Fiona/張詠晴編譯
2019-03-22 17:09

 

作為市值第二的老大哥的以太坊,經常被拿來和比特幣比來比去。不知你是否發現,和比特幣擴容事件此起彼伏的熱鬧場面相比,以太坊似乎沒有過類擬的區塊擴容困擾,要知道,從2017年開始,以太坊的交易量同樣也快速成長,那以太坊又是怎麼搞定這個問題的呢?

 

我們先來看下以太坊的區塊大小變化情況(如下圖)。3月19日,以太坊區塊的平均大小為21345Bytes,約為0.02M(平均出塊時間為15秒)。

 

 

可見,以太坊的區塊大小是不固定的,背後的原因,在於它採用了完全不同於比特幣的做法。

 

比特幣的轉帳交易是統一格式,可以用固定的區塊大小來規範。以太坊則不同,V神(以太坊的創立者)將區塊鏈視為世界電腦,在比特幣基礎上,以太坊實現了智慧合約,這就意味著,除了和比特幣有同樣的轉帳功能外,以太坊網路中更多的是要為大量程式提供運算服務。

 

以太坊網路中不同的事務,所需要的計算成本各不相同。

 

舉個例子,對於轉帳交易類事務,以太坊網路的處理是相對一致的;而對於一個有Bug的程式來說,很可能會消耗掉大量的算力(比如程式中存在無限循環運算時)。以太坊明確了每筆操作會有個最低算力消耗值,而智慧合約的算力消耗量則在最低消耗值基礎上,還需要加上所有代碼執行的算力。實際消耗的算力只有在實際使用時才能確認。

 

因此,以太坊中每筆交易的大小是不確定的。如果需要用一個相對固定的參數來規範以太坊區塊的話,最直觀的就是固定每個區塊中所包含的算力了。這個值由礦工在每個區塊中的GAS LIMIT(單位:gas)參數來表示,每個交易提交時也會有算力需求(單位:gas),乘以算力gas的價格(單位:gwei/gas),就是交易成本了(單位:gwei,gwei和eth類似於比特幣裡的聰和BTC的關係:每 eth = 10^9 gwei)。

 

目前gas price和每個區塊裡的GAS LIMIT數值如下圖:

 

▲數據來源:https://ethstats.net

 

提交每筆交易時,需要附加願意付出的最多成本,礦工在打包時,會遵循以下規則:

 

  • 利益導向_哪筆交易給的酬勞高,會優先打包誰的,直到區塊中包含的算力值(gas limit)消耗殆盡;
  • 多退少不補_按實際算力收取費用,但如果給的不夠,打包時則不會將計算結果提交到鏈上,費用也會全部收取(每筆事務的最低算力消耗值則為21000gas)。

 

在理解了上述規則後,擴容問題的解決就簡單了:為了避免出現比特幣類似的區塊擴容爭議,以太坊協議允許礦工每次可以將上個區塊BGL值調整正負0.0976%(=1/1024 ),按平均每15秒出塊的頻率,以快速滿足網路上快速變化的計算需求。

 

因此,在面對突來的交易激增時,以太坊表現出了較好的靈活性,比如在2017年6月29日,因ICO原因,交易量激增,以太坊在不到2個小時內,就實現了33%的成長。

 

下圖是以太坊網路每個區塊中包含算力的變化情況,從最早的3百多萬,到目前基本穩定在8百萬gas中。在能提供的算力成長時,如有足夠的交易能消耗完,自然礦工會得到更多收益,但也需要礦工付出更多成本_更大的寬頻、更快的計算能力,所以這個過程雖然不需要多方爭議,但也受限於物理性能,客觀上不會一蹴而就。

 

 

總結:

 

以太坊透在每個區塊中包括相對穩定的算力而非區塊容量的大小,實現了對區塊的規範化管理,並用逐塊的算力調整機制(調整正負0.0976% ),以應對交易處理量變化情況。

 

本文為巴比特資訊授權刊登,原文標題為「以太坊如何控制區塊大小?