以太坊如何控制区块大小?|白话区块链入门

原创
2054 天前
15162

作者 | Fiona

作为市值第二的老大哥的以太坊,经常被拿来和比特币比来比去。不知你是否发现,和比特币扩容事件此起彼伏的热闹场面相比,以太坊似乎没有过类拟的区块扩容困扰,要知道,从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日,因1C0原因,交易量激增,以太坊在不到2个小时内,就实现了33%的增长。

下图是以太坊网络每个区块中包含算力的变化情况,从最早的3百多万,到目前基本稳定在8百万gas中。在能提供的算力增长时,如有足够的交易能消耗完,自然矿工会得到更多收益,但也需要矿工付出更多成本——更大的宽带、更快的计算能力,所以这个过程虽然不需要多方争议,但也受限于物理性能,客观上不会一蹴而就。


总结:

以太坊通过在每个区块中包括相对稳定的算力而非区块容量的大小,实现了对区块的规范化管理;并用逐块的算力调整机制(调整正负0.0976% ),以应对交易处理量变化情况。