深入理解以太坊系列(4): 以太坊共识机制及挖矿

目前的以太坊的共识机制是工作量证明(PoW)。效仿比特币,以太坊也通过挖矿的模式来产生系统中流通的货币——以太币。同时,通过奖励的机制来激励那些处理交易并维护网络安全的矿工。虽然很多方面都与比特币系统相似,不过以太坊的挖矿机制也有其不同之处。

在解释挖矿之前,先略讲一下以太坊的数字货币——以太币。

与比特币累计发行总量固定为2100万不同,以太坊目前的设计是每年都会发行一定数量的货币,并且会一直发行下去。我们知道,比特币是通缩的,那么这是否意味着随着以太币的不断发放,会造成严重的通胀呢?按照以太坊的官方说法,其每年发行的货币有个数量上限,即1800万。随着时间的推移及货币的流失(如丢失、忘记私钥等),每年的通货膨胀率将递减,最终趋于零,达到平衡状态。

关于以太币的一些数量上的常识如下:

1. 预售期共发行了7,200万。其中6,000万用于募资,1200万归属开发团队及以太坊基金。
2. 每挖出一个区块奖励矿工5个以太币。在最新的Byzantium版本中,奖励额降为3个。
3. 每年发行上限为1,800万。

以太坊的挖矿算法并未采用比特币所使用的Sha256,而是在Hashimoto和Dagger基础上建立了自己的Ethash算法。算法设计概要如下:

与CPU无关,与内存大小及带宽相关
抵御专门的矿机(ASIC)
Ethash使用了一种DAG的数据结构
每30,000个区块(约125个小时)随机生成一个新的DAG
PoW尝试基于给定的DAG和难度系数来解决一个约束问题
解决问题的过程难,验证答案的过程易

目前主流以太坊挖矿采用GPU。实际挖矿操作,需要每个GPU最少具备1G+的RAM用以加载DAG。另,由于挖矿算法是通过OpenCL实现的,所以在同等价格下,AMD GPU相比较NVIDIA GPU有更好的表现。

挖矿的奖励机制是这样的:

奖励给成功挖出区块的矿工:
每个区块奖励5个单位以太币,在Byzantium版本中调整为3个单位
区块中的交易所花掉的费用(由gas和gasprice决定,并以以太币记)
如果区块中包含了叔区块,那么每收录一个叔区块将额外获得1/32的区块奖励(最多收录2个)

奖励给被区块矿工收录的叔区块矿工:
区块奖励的7/8(即4.375个以太币),Byzantium版本为2.625个以太币

需要注意的是,在未来规划的以太坊Serenity版本中,共识机制计划会变更为权益证明(PoS),不过这一机制还需要大量的网络测试,2019年之前是否能够变更还是未知数。