|扩展 DeFi 吞吐量:Layer-One 篇(上)( 二 )


要想知道以太坊的 Gas 使用率为何无法超过 95%, 我们需要先了解空块和叔块 。
空块和叔块
纵观以太坊的发展史 , 即使是在供不应求的情况下 , 以太坊的 Gas 使用量也没有超过 Gas 上限的 95%。 令人惊讶的是 , 剩余 5% 的 gas 都是以空块的形式被浪费了 。 空块是有规律的 , 大约每挖出 20 个区块就会有一个空块 。 在有付费交易等待打包的情况下 , 为什么还会有人挖空块?我们来看一下数据:

|扩展 DeFi 吞吐量:Layer-One 篇(上)
本文插图
空块率随时间的流逝而稳定增长 , 目前在 5% 左右 。 所有矿池都有挖空块 , 因此不是恶意行为 。 真正的问题是 , 出块速度过快 。 如果挖出一个区块的时间少于 6 秒 , 这个块是空块的概率会成倍增加(译者注:作者这个断言应该是根据时间戳统计数据得出的 , 因为没有使用虚拟语气) 。
有一种解释是 , 矿工在收到一个新区块的区块头、但还没处理完整个区块时就开始挖下一个区块 。 这在比特币中叫作 “简单支付验证(SPV)” 挖矿 , 可以让矿工立即开始挖下一个块 , 但是只能挖空块 。 一旦新的区块处理完成 , 矿工就可以开始打包并挖出下一个区块 。 可以证实这一解释的另一个证据是 , 如果同一个矿工连续挖出了两个区块 , 空块率就会降低 25%。
除了挖空块之外 , 还有一种方法是在处理新区块的同时继续接着上一个区块挖矿(而不是挖更新的可挖位点) 。 这就有可能导致多个新区块被挖出 。 如果这种情况发生在以太坊上 , 网络就会选出一个合法区块 , 并将其它区块视为叔块 。 挖出叔块的矿工会获得同样的区块奖励 。 叔块率非常稳定:
|扩展 DeFi 吞吐量:Layer-One 篇(上)
本文插图
2018 年 , Gas 使用量达到顶峰时 , 叔块率也达到了顶峰(现已降至稳定的 5%) 。 那段时间 , 空块率也有增加 , 可能是因为矿工改变了策略 。
虽然叔块率对以太坊可扩展性的影响不是很明显 , 但确实存在 。 拜占庭硬分叉中的 EIP-100 调整了区块难度评估公式 , 将叔块计算在内 。 因此 , 叔块率越高意味着在矿工挖出的区块中 , 作为叔块被浪费的区块越多 , 作为合法区块被添加到最长链上的区块越少 。 具体表现为出块时间增加 , 每日 Gas 供应量减少 。 (导致出块时间增加的另一大原因是冰河期 。 )
无论是叔块还是空块 , 都是以太坊上重要的网络健康标志 。 二者中任意一者增加都意味着每日 Gas 供应量减少 。 对叔块率的分析是 EIP 2028 和 1559 背后主要的研究内容之一(参见 1、2、3) 。 令人惊讶的是 , 这两个 EIP 都没有提到空块率 , 而且研究上存在方法上的缺陷 。 最好能采用恰当的统计方法(如逻辑回归)来进行更严格的分析 , 并将叔块率和空块率都纳入考虑范围 。
有一些方法可以用来降低空块率和叔块率 。 假设导致空块率和叔块率较高的根本原因是 , 由于网络和区块处理延迟 , 矿池无法获得最新状态 。 一种简单(但是不可取)的方法是 , 让矿池变得更加中心化 , 将最新状态集中在一处 。 去中心化更高的解决方案是 , 使用 bloxroute 在矿池之间创建专属的互联通道 。 还有一种解决方案的灵感来自 “间谍挖矿(spy mining)” , 就是让矿池预先共享它们正在挖的区块 。 其它矿池就能针对每一个在挖区块准备好下一个区块 , 一旦某个矿池成功挖出了区块 , 其它矿池就知道下一个该挖哪个区块 , 并且马上切换过去 。 从更高层次来看 , 改进节点通信协议和处理算法也会带来帮助 , 或许也能带来一些收益 。 但是 , 正如我们所见 , 降低叔块率和空块率最多可以将每日 gas 供应量提高 5% 左右 。
由此看来 , gas 上限是 gas 供应量的 95%。 那么 , 如果人们对 gas 的需求超过这一上限 , 会发生什么情况呢?


推荐阅读