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


即使这些交易似乎没有上链的意图 , 这些从未被打包的 Hammerbot 交易的 Gas Price 还是显得太低了:在市场要求给出 30 Gwei 乃至更高价格时 , 这些交易几乎总是只给 5 Gwei 。 Hammerbot 交易既没有像套利机器人经常做的那样加速交易(从而炒高 Gas Price) , 又高效地消耗掉了节点的交易池资源 。
从整体上来看 , 虽然进入交易池的交易数量急剧增加 , 交易池中还是有很大一个比例的交易 Gas Price 被人为压低了 。
|分析 Mempool,复盘“黑色星期四”
本文插图
- 从 UTC 时间 8 点到 10 点间的交易 Gas Price 箱型图(按分钟划分) 。 蓝线表示最终上链的交易的情形 。 橙线表示从未上链过的交易的情形 。 -
拿出一笔 Hammerbot 交易作为例子(我们用的是一笔 nonce 值为 3070 的交易) , 可能有说明价值 。 这里是最终的交易哈希值:0x5b00c13020b82c9e8a098393564feca976dbbd2e8da6c54263f6e492be56fbfb 。
仅仅用你惯用的区块浏览器检视这笔交易并不能给出除了其区块确认信息以外的洞见 。 表面上来看 , 这笔交易平平无奇 。 但 Blocknative 的交易池数据平台检测到了这笔交易上链之前使用这个 nonce 值的 418 笔独特交易 。 这些交易都是在一个小时内出现的 , 也就是这些置换交易平均每 6.86 秒重发一次 , 而某些置换交易之间的时间差不超过 0.1 秒 。
|分析 Mempool,复盘“黑色星期四”
本文插图
- 地址 0x5cf2fa4e0c84e71fd2e4fa86d2fa64b7a50a6fc0 从 UTC 时间 9 点开始在相连的 4 个 nonce 上发起的置换交易次数(按分钟计)-
大多数置换交易都使用同样高的 Gas Price , 都是因为节点的交易丢弃机制才作为 “新” 交易成功进入到节点的交易池内 。 只有最后一笔想要上链的置换交易才需要给出更高的 Gas Price , 然后被打包到区块内 。
|分析 Mempool,复盘“黑色星期四”
本文插图
- 地址 0x5cf2fa4e0c84e71fd2e4fa86d2fa64b7a50a6fc0 从 UTC 时间 9 点开始在相连的 4 个 nonce 上的平均 Gas Price(按分钟作平均化)-
这种模式使我们很难说这些 Hammerbot 交易到底是有心还是无意的 。 实际上 , 我们的系统在一分钟之内记录下了超过 20 个从 UTC 时间 9:05 开始活跃的可能的 Hammerbot 地址:
|分析 Mempool,复盘“黑色星期四”
本文插图
- 如果你是上述任一地址的运营者 , 我们很希望跟您聊聊 。 请联系我们 -
注意:这些特征明显的、使用同样的 Gas Price 重发被丢弃交易的 Hammerbot 行为 , 也可能跟最近大家讨论的 “backrunning” 行为有关 。 见此处和此处 。
交易池漏洞对 MakerDAO 的影响
MakerDAO 的担保债仓(CDP)是用户生成稳定币 DAI 时托管被锁定的担保品 ETH 的智能合约 。 因为 ETH 的价格有波动 , 而 DAI 希望能保持 1 美元的价格 , 所以维持一个开放的 CDP 所需的担保品数量是不断变动的 。
当 3 月 12 日 ETH 价格暴跌时 , 大量的 CDP 立即变成了担保不足的状态 , 需要被强制清算 。 系统为保证担保品清算时可以获得竞争性的市场价格 , 安排了折价机制:参与清算者可以以折价买到担保品 ETH;这就使得许多人都愿意运营多种多样的 Keeper 机器人 。 清算活动的表现形式为拍卖 。
任何 Keeper(看护者)都可以用链上出价参与拍卖 , 而一个看护者出价之后 , 另一个看护者想要与之竞争必须在 10 分钟之内发送竞拍价更高的交易 。 每当有新的竞拍交易到达 , 都会刷新 10 分钟的竞拍窗口期 。 如果 10 分钟之内系统没有收到更高的出价 , 则拍卖结束 , 最高出价者胜出 。 [注意:在 “黑色星期四” 下午 , MakerDAO 把竞拍窗口期从 10 分钟提高到了 6 小时 。 ]但是 , 当矿工节点因为网络拥堵和交易池压缩而以异常高的比例丢弃交易时 , 许多看护者的交易都被卡住了 , 因此根本没能及时让清算 CDP 的竞拍交易成功上链 。 结果就是看护者们无法在由 0 价格竞拍交易开启的窗口中可靠地开展竞争 , 即使看护机器人正确地发现了 0 价格拍卖并发送出了更高出价的交易也没用 。 最终 , 因为拥堵和实际手续费的混淆 , 看护者无法恰当地解读出 Gas Price 的实际上涨幅度 , 看护者的交易也因此被节点丢弃 。 接下来是产生 nonce 空缺、交易在使用默认交易池设置的节点处卡壳 。 遭遇此种情形的看护者机器人为其他拍卖发出的所有后续竞拍交易会全部被卡住 , 让该看护者根本无法在 10 分钟的竞拍窗口内参与交易 , 最终让 0 价格竞拍交易得逞 。


推荐阅读