区块链扩容一直是区块链团队的重点研究方向。由于比特币对区块大小的设定是固定的,并且中本聪将最初大小值限定为1M,但随着交易量的增长,网络拥堵状况也愈渐严重,最终也致使了比特币的分叉。算法
区别于比特币固定区块大小的设定,以太坊则引入了燃料(gas)的概念,并采起了区块燃料限制(Block Gas Limit)动态调整机制,即根据交易量大小来调节Block Gas Limit。一般咱们以TPS来衡量区块链的交易处理能力, Block Gas Limit值越大则意味着容许区块打包的交易量也就越多,也就是说网络拥有越高的TPS。因此,以太坊的扩容方案之一就是提升Gas值限制,以此来缓解网络拥堵的状况。网络
Gas Limit动态调整机制性能
以太坊主要经过矿工投票机制来决定目标燃料限制(TGL,Target Gas Limit),同时不能小于最小燃料限制(MGL,Min Gas Limit)。而其动态调整机制主要是在区块gas使用量超过父区块Block Gas Limit的2/3时,全网对当前区块的Block Gas Limit进行适当提高,但不容许超过TGL。区块链
然而,经过提高Block Gas Limit的扩容方案在实现上也有弊端。若Block Gas Limit无上限,那么区块在进行广播的时候一定会有时延问题。越高的TGL也就意味着Block Gas Limit值越大,被容许打包到区块之中的交易越多,消耗的gas也就越多,其同步到整个区块链网络所需的时间也就越长,那么该区块也颇有可能由于时延问题而竞争失败,最终被抛弃而成为叔块(Uncle Block)。根据Vitalik Buterin的脚本实验分析,被打包的区块每增长1,000,000 gas价值的交易,其变为叔块的几率就会增长约1.86%。一方面,由于数块只能得到75%的区块奖励,因此矿工由于利益问题也不肯意选择提高TGL。另外一方面,在提高TGL的同时也须要面临算力中心化的问题。就目前来讲,还没有找到合适的数学算法来对TGL进行设定,其决定权依然归属于矿工,因此区块燃料限制动态调整机制仍需完善。优化
Gas相关的计算加密
Gas主要用来支付交易的手续费,其计算也相对简单。当咱们在进行交易时,gas的最大消耗限制须要由交易者自行设置,即gas limit。那么咱们能够获得交易的最大gas费用计算公式,以下所示spa
其中,表示容许消耗的gas最大值,表示单位gas的价值,二者相乘即为最大的交易手续费。举例来讲,若Gas Limit=50,000,Gas Price=20Gwei,那么所需最高手续费(以最大消耗量来算)为0.001ETH。其中3d
然而在整个交易执行过程当中,还可能涉及其余费用,如合约建立费用等。那么实际消耗的gas计算公式,以下所示blog
其中,Predifined Gas Fee表示执行交易预约费用,Storage Fee表示随交易发送的数据的gas费用(零字节和非零字节会根据对应的设定值消耗必定的gas量),Contract Creation表示合约建立交易还需额外的费用。事件
那么,交易完成后剩余的gas即为交易最大gas费用减去使用的Intrinsic Gas
其中,Gas Limit≧Intrinsic Gas,待交易执行完毕,剩余的gas也会退还给交易者。
在费用估算上,对交易者而言,前期gas费用能够取最大gas费用与传送总值的总和。
其中,Upfront Cost表示交易执行的前期费用,Gas Limit表示gas消耗的最大量,Gas Price表示gas单价,Value表示发送方传送给接收方的总值。
对于以太坊网络来讲,“网络又堵了”经常被拿出来讨论。从2017年的加密猫堵死网络事件到近期的交易所刷单大拥堵事件,或者是面对黑客的DDOS攻击,以太坊也尝试经过调整Gas值限制来解决网络堵塞问题,虽然能够见到暂时性的成效,但问题并无彻底解决,仍需经过其余扩容方案来优化网络性能,从而有效解决网络大拥堵问题。