|分析 Mempool,复盘“黑色星期四”( 五 )


下面我们用 1866 号拍卖作为例子来说明上述过程:

  1. 一个 “0 价格竞拍机器人” 在 UTC 时间 15:59:50 时以 200 Gwei 的价格发送一笔 0 价格竞拍交易 。 该交易在 26 秒后成功上链 , 10 分钟倒计时就此开始 。
  2. 一个 “诚信看护者机器人” 在 16:08:01 时以 450 Gwei 的 Gas Price 发送一笔竞价交易 。 这笔交易是在 10 分钟内发出的 —— 之隔了 8 分 11 秒 —— 而且 Gas 价格还是最初那笔 0 价格竞拍交易的 2.5 倍 。 如果能在接下来的 1 分 49 秒内被打包到区块中 , 1866 号拍卖就会像大家预期的那样进行 。 但是 , 这笔竞拍交易因为这个好机器人之前发送的一笔交易被丢弃(也就是产生了 nonce 空缺)而被卡住了 。
  3. 这个好机器人在 16:15:31 又发出一笔 4500 Gwei 的竞价交易 。 但是哪怕 Gas Price 提高了 10 倍也无济于事 , 因为这个地址被 nonce 空缺锁死了 。 再然后 , 等到竞价交易不再被卡的时候 , 已经过了 10 分钟的窗口期 , 交易自然就失败了 。
上述模式可能重复了一整天 , 最终导致总计 832 万美元的担保品被 0 价格拍走 。 值得指出的是 , 大多数 Hammerbot 的活动似乎都在当天较早的时候发生 , 这样就造成了后来影响到 Keeper 机器人交易的拥堵情况 。
Gas Price 的迅速上升、导致 Gas 价格估计失灵的交易池压缩 , 同样对其它价格信息传输机制造成了负面影响 。 这导致了定价方面的混乱 , 也有可能使得面临清算风险的 CDP 持有者推迟了添加担保品的决定 。
总结我们的发现
总结一下 , 我们对 “黑色星期四” 交易池状况的事后检验暗示了下述情况:
  1. 多种 Hammerbot 的活动导致挖矿节点的交易池饱和 。 这推高了以太坊网络的拥堵程度并使之不断上升 。
  2. 发送许多以同样的 Gas Price 发出的置换交易在点对点 gossip 层和节点本身产生了巨大的开销 。
  3. 正常交易的传播受到阻碍 , 大量的交易被挖矿节点丢弃或者拒绝 。
  4. 这又反过来提高了出现 nonce 空缺和卡壳交易的几率 , 还扭曲了对 Gas Price 的估计 。
  5. 虽然自动化的交易系统通常被设计成会自动提高交易的 Gas Price , 许多交易系统并不能很好地处理 nonce 空缺问题 —— 甚至是完全束手无策 。
以上就是我们在研究过程中的发现 。 我们的数据集可能还能揭示出更多的证据 以及/或者 新的发现来支持或证否我们的结论 。
为加速这个发现过程 , 我们现在把那两天的交易池存档数据开放给社区 , 我们希望这能促进对交易池在 “黑色星期四” 及以太坊网络其它类似事件中所扮演的角色的研究 。
建议:保护好你自己 , 以及你的用户
交易池是区块链生态系统非常关键的一环 , 虽然它瞬息万变 , 常常被忽略 。 因此 , 交易池中藏着很多开发者和用户 “完全无知的未知之物” 。
现在 , 我们并不知道有多少人在开发这样的利用交易池弱点的技术 —— 只是显然有人在利用交易池的特点 。 我们也不知道有多少这样的弱点存在 —— 只是那些复杂的利用方法似乎已经在现实中证明了其有效性 。
因此 , 我们建议所有交易、所有协议、所有钱包供应商和交易员:
  1. 持续监控交易池的情况 , 注意(1)发现交易池开始变得拥堵的时机;(2)交易丢弃率和拒绝率的变化 。
  2. 理解交易 nonce 排序的细微差别 。 即使合理构造的交易也可能被卡在网络的某个角落 。
  3. 主动观察被卡壳的交易 , 并且要知道加速先前的哪一笔交易能使发送交易的地址脱困 。
  4. 基于交易池中对矿工有吸引力的部分来计算 Gas Price 。 还需要知道你所依赖的 Gas Price 报告服务所用的算法 。
  5. 在高度拥堵期间 , 不要假设交易待打包的情形是可以预测的 。 先防范 , 你要监控每一笔交易 , 了解每一个细节 , 包括 Gas 是否充分 , 交易是不是被丢弃、被卡壳 , 会不会被人抢跑(front-running) , 等等 。


    推荐阅读