除了无法根本解决网络拥堵的问题外,提高 Gas Limit 后由于区块容量扩大,区块的验证和同步时间有所延长。因此导致网络更容易分叉,叔块出现的概率升高,节点维护网络的成本也会增加,最终网络可能出现安全性和中心化问题。虽然提高 Gas Limit 是最简单进行网络扩容的方式,但它带来的弊端也是不能忽视的。不过目前网络拥堵情况加剧,出于可用性考虑,加上矿工会受到更多笔 Gas 费奖励的吸引,未来极有可能仍会提高区块 Gas Limit 来增大承载量。 降低操作的 Gas 消耗虽然以太坊区块的 Gas Limit 在增加,区块的承载量远超过去,但数据显示目前的转账数量刚刚与 2018 年初的转账数量持平,说明了以太坊网络中大部分资源被分配给了更复杂的合约交易。如果在合约编写上能够降低复杂度,减少合约执行所需要的 Gas,或者直接降低操作的 Gas 定价,就可以实现节约 Gas 费的目标,并且节约网络资源。 图 4:以太坊的每日转账数 以太坊的黄皮书规定了 Gas 的消耗规则,智能合约的编写过程中,同一功能的不同实现方式消耗的 Gas 会有所不同,为了节约 Gas 费就需要执行最节约 Gas 的代码实现方法。例如储存新数据和修改数据都要消耗 Gas,所以最好避免重复修改,一次性尽可能多地写入。在下图中,两者在结果上相同,但右边的代码实现消耗 Gas 会更少。 图 5:同一结果的两种代码实现,右边更节约 Gas 除此之外,压缩智能合约的数据输入,避免创建智能合约时将其用作数据存储等方式也可以节约 Gas。有人提出操作消耗 Gas 的原始定价没有经过充分分析,存在定价不当的问题。以太坊中的 EIP 1380、EIP 2046 等提案就涉及降低某个操作的 Gas。但以太坊 Gas 定价的改变要慎重考虑,因为降低有些操作的 Gas 定价会降低重入攻击的难度。 EIP 1559EIP 1559 已经被纳入在以太坊的伦敦硬分叉升级中,它改变了以太坊网络 Gas 费的定价和分配规则。目前以太坊 Gas 费定价规则为市场竞价的方式,用户自行设置愿意支付的 Gas Price,矿工挑选支付最高 Gas Price 的交易打包。每个人都希望能尽快完成交易,因此在网络拥堵时 Gas 费会居高不下。EIP 1559 提出了一种新的 Gas 费收取方案,用户支付的 Gas 费分为基础费和小费,其中基础费直接销毁,小费归矿工收入。 EIP 1559 方案引入了 Gas Target 的概念,区块 Gas 上限是 Gas Target 的两倍,基础费根据网络使用情况进行动态调节,也就是区块实际包含的 Gas 与 Gas Target 的比较。如果区块的 Gas 超过 Gas Target,那么下个区块收取的基础费就会上涨,反之如果低于 Gas Target 就会下降。上涨和下降的幅度不会超过 12.5%,避免了 Gas 费突然暴涨暴跌。由于基础费一直是动态调节的,如果连续多个区块包含的 Gas 一直超过 Gas Target,基础费就会指数上涨到夸张的价格,让用户不得不暂停交易,等待 Gas 降低到 Gas Target 以下,基础费才会下降。基础费是用户必须支付的,矿工的小费可选择支付,在网络使用率不高的情况下,基础费就可以让用户及时完成交易,没有必要支付矿工小费。如果网络拥堵,则需要支付小费优先交易。 (责任编辑:admin) |