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

  • 反应慢半拍的定价算法:交易池中待打包交易的 Gas Price 分布 , 以及近期被打包交易的 Gas Price , 使得一些预测合适 Gas Price 的服务的测算出现扭曲 。 但这(些服务报出已低于实际情形的 Gas Price)就导致更多 Gas Price 过低的新交易出现 , 又进一步加剧了测算值与实际值的不一致 。
  • 交易池堵塞出现时 , 让交易打包上链所需付出的 Gas Price 会升高是意料中的事情 。 但是 , 因为并不是所有人都跟踪到了 Gas Price 这种迅速的提高 —— 包括 , 尤其是那些有 Gas Price 报告功能的服务 ——上链所需的平均 Gas 价格开始偏离进入交易池的交易平均 Gas 价格 。 而一般的出价上涨跟不上当时的价格上涨速率 。 在 3 月 12 日 , 我们的数据平台发现了交易手续费定价的明显偏离 。 在 3 月 13 日 , 交易池中部分交易的 Gas Price 与上链交易的 Gas Price 差额在可预料范围内 , 但在 3 月 12 日 , 已挖出交易和未挖出交易的 Gas 出价简直是天壤之别 。 不能上链的交易要成为可以上链的交易 , 一般来说标准的操作就是提高 Gas Price 。 但是 , 在 3 月 12 日 , 这样做根本就没用 。 因为 , 大量交易池资源被以几乎同样的 Gas Price 重发的交易消耗掉了 。
    |分析 Mempool,复盘“黑色星期四”
    本文插图

    - 2020 年 3 月 12 日至 13 日每小时的 Gas Price 箱型图 。 每个小时的箱型都划分了 1 分位值和 3 分位值 , 两者中间的线表示中值 , 而箱顶和箱底的线表示最大值和最小值 。 已忽略掉了异常值(1.5 IQR) -
    这张图反映了真实情形吗?还是说这些出价过低的交易本身就是为了堵塞掉交易池呢?如果真是有意为之 , 为什么呢?
    3. Hammerbot 交易导致内存池失真
    我们的内存池存档数据暗示 , 机器人成功地提高了堵塞情形 , 并扭曲了交易池中交易的 Gas 价格分布 , 而且还没有导致交易手续费的相应提高 。
    这样做的净效果就是交易卡壳率的提高和 Gas Price 报告服务扭曲 , 结果是交易池一场 , 使天平偏向了某些特定的交易 —— 即 , 提高了清算 CDP 仓位的交易以 0 价格成功竞拍的几率 。
    机器人用本来就无意提交上链的交易捶打(hammer)交易池 。 这些 Hammerbot 通过发送置换率极高的交易(不相应提高 Gas 价格但又不断重发)消耗掉了交易池的资源 。 但是 , 交易池还有一种设计 , 是要求重发交易至少要提高 10% 的 Gas 价格 , 本身就是用来防止此类行为的 。 那这些交易是如何实现置换的呢?
    答案很简单:异常高的交易丢弃率导致节点 “失忆”(见上文) 。
    Hammerbot 等待着 —— 或者仅仅是预估 —— 自己发出的交易从交易内存池中丢弃 , 然后立即用相同(甚至更低)的 Gas 价格重发交易 。 因为节点 “忘记掉了” 之前被丢弃的交易 , 自然就尽职地把这些置换后的交易当成有效交易接了过来 。 当然 , 结果就是进一步的拥堵 。
    Hammerbot 用显然是 “自动化” 的方式让自己的交易变得畸形 , 每一次置换都包括了稍微更改过的合约输出 。 因此 , 每一笔 Hammerbot 交易都有一个独特的哈希值 , 可以绕过所有节点的点对点网络协议中的泛滥攻击过滤保护 。
    如下图中重点标出的粉色线所示 , 从 UTC 时间 3 月 12 日 9 点开始 , 我们的交易池数据平台发现根本不可能被打包的待打包交易数量急剧上升 。 35 分钟后 , 此类不可能上链的交易产生的速度翻了一倍 , 在 10 点之后才降为线性增长的模式 。
    |分析 Mempool,复盘“黑色星期四”
    本文插图

    - 从 UTC 时间 8 点到 10 点期间达到交易池的交易计数 , 以分钟计 。 蓝线表示最终上链了的交易计数;而橙线表示根本没有上链的交易计数 。 -


    推荐阅读