矿工由于受到激励,会首先选择gas价格最高的交易,因为他们通常会在固定的工作时间中选择价格更高的交易。 以太坊的协议也限制了矿工们挖出一个区块中可以包含多少笔交易。这是由每个区块的最大gas限制决定的。在撰写本文时,这个限制被设置为12.5M gas。 举个简单的例子,我们假设内存池中只有简单的ETH交易,每个交易花费21000 gas。一个矿工可以打包595个这样的交易。假设内存池中有1000个待处理的交易,矿工将通过按gas价格对所有待处理的交易进行排序并选择595个付费更高的交易进行打包。 目前的收费模式基于的是一种简单的拍卖机制,希望自己的交易被矿工处理的用户首先必须以高于其他人的加以费用获得区块中的位置。这样反过来又推高了gas的费用,尤其是当很多用户有紧急交易需要确认的时候。 我们为什么需要gas 为了更好的解释gas,我们需要首先理解为什么gas会存在。以太坊虚拟机作为一个图灵完备的机器,它允许执行任意代码。虽然这是使以太坊如此强大的主要原因之一,但它也更容易受到halting problem的影响。halting problem是指从一个任意计算机程序的代码和输入来确定该程序是会结束运行,还是会永远继续运行。 如果没有gas,用户就可以执行一个永远不会停止的程序,其中的原因可能是代码有问题,也可能是有人作恶。为了防止这种情况发生,以太坊引入了与每个操作相关的gas成本,这将防止程序处于永远运行的状态,最终使整个网络陷入停滞状态。 除了gas价格,每笔交易也有一个gas限制,它必须等于或高于成功执行特定交易所需的预期gas数量。 以太坊虚拟机在执行事务中的每个操作之前,会检查是否有足够的剩余空间用于该操作。如果剩余的gas不够,则使用“out of gas”来还原整个交易,并回滚所有状态。即使交易失败,用户仍将为矿工已完成的工作量支付交易费用。这也是为了避免人们发起对网络的恶意攻击。 如果交易消耗的gas比最初预期的少,那么剩余的gas被转换为ETH并退还给发送者。 同样重要的是,以太坊上的所有操作都要有正确的gas成本;否则,它可能成为另一个攻击目标。其中一起攻击发生在2016年,这导致以太坊网络的硬分叉,最终系统重新对某些简单的操作进行了定价。 现在,由于我们对gas有了更多的了解,让我们来看看最近一段时间交易费用上涨的情况,以及一些可以降低现在和未来交易成本的解决方案。 以太坊的高额费用 (责任编辑:admin) |