区块链扩容方案之Gas值限制
区块链扩容一直是区块链团队的重点研究方向。因为比特币对区块大小的设定是固定的,而且中本聪将最初大小值限定为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费用计算公式,如下所示
![](https://oss02.bihu.com/image/20190422/1472f6890efea085a54088fc1a0c053d_HE2TMKRZGI.png)
其中,表示允许消耗的gas最大值,表示单位gas的价值,两者相乘即为最大的交易手续费。举例来说,若Gas Limit=50,000,Gas Price=20Gwei,那么所需最高手续费(以最大消耗量来算)为0.001ETH。其中
![](https://oss02.bihu.com/image/20190422/c1b7b2d232ea5b901675c1904607c6f9_GM2TMKRUGI.png)
然而在整个交易执行过程中,还可能涉及其他费用,如合约创建费用等。那么实际消耗的gas计算公式,如下所示
![](https://oss02.bihu.com/image/20190422/d5c4945e682b63ea00c3e32638e15fb3_GEYTMNBKGEYDA.png)
其中,Predifined Gas Fee表示执行交易预定费用,Storage Fee表示随交易发送的数据的gas费用(零字节和非零字节会根据对应的设定值消耗一定的gas量),Contract Creation表示合约创建交易还需额外的费用。
那么,交易完成后剩余的gas即为交易最大gas费用减去使用的Intrinsic Gas
![](https://oss02.bihu.com/image/20190422/f684fb0b2461ac346c4235d297c47935_HEYDQKRWHA.png)
其中,Gas Limit≧Intrinsic Gas,待交易执行完毕,剩余的gas也会退还给交易者。
在费用估算上,对交易者而言,前期gas费用可以取最大gas费用与传送总值的总和。
![](https://oss02.bihu.com/image/20190422/5489deda5fd082d508a118efa3a8041b_GEYDANBKG44A.png)
其中,Upfront Cost表示交易执行的前期费用,Gas Limit表示gas消耗的最大量,Gas Price表示gas单价,Value表示发送方传送给接收方的总值。
对于以太坊网络来说,“网络又堵了”常常被拿出来讨论。从2017年的加密猫堵死网络事件到近期的交易所刷单大拥堵事件,或者是面对黑客的DDOS攻击,以太坊也尝试通过调整Gas值限制来解决网络堵塞问题,虽然可以见到暂时性的成效,但问题并没有完全解决,仍需通过其他扩容方案来优化网络性能,从而有效解决网络大拥堵问题。