返回
Execution7 分钟阅读

报价不等于成交

0x 分析了 84,163 个 Uniswap v4 hook,其中 54.2% 具有恶意,实际成交价格最多比报价低 50%。

每个路由器在成交之前都会先给你看一个数字。那个数字是报价。你拿到的才是成交。在 DeFi 的大部分历史里,这两者是同一回事,或者接近到没有人追问。

现在它们不是同一回事了。

这项研究

0x 于 2026 年 9 月 14 日发布一项研究,分析了 Uniswap v4 hooks。在看到那个标题数字之前,先读它的方法是值得的。他们分析了 6 条链上的 84,163 个 hooks,使用的是静态分析、动态分析以及对已成交交易的观测。数据截至 2026 年 9 月 11 日。

结果是:19.4% 安全,54.2% 恶意,26.4% 可能恶意。

机制并不是什么精巧的漏洞利用。它更简单,也更糟。恶意 hook 在你的聚合器索要报价时对外报出一个价格,而当 swap 执行时却按另一个价格成交。有些模式的行为像掷骰子。有些会检查 EVM 环境,判断自己是否正在被报价。底层行为是一致的:一条路由对外报出的价格,不是用户能够可靠预期拿到的价格。

0x 直接给出了代价:经由恶意 v4 路由的交易,执行时交付的金额最多比向用户报出的金额低 50%。

让问题变得具体的部分

汇总出来的百分比很容易被一笑了之。具体到单个池子就没那么好打发了。

同一份分析中:hook 0x800cef53c3fd41109dffec62e5251bdd7acba5c7,位于 Base,交易对 ETH/NVDAc。总成交数 6,516。收费成交 3,946,占 60.6%。费率区间为 0 到 18%。全部成交的费率中位数为 17.96%。

再读一遍。超过一半的成交中,这个池子都收了费。它对外报出的费率是 0 到 18%。这不是骗局跑路那种意义上的隐藏转账;这是一个报出好看数字、然后对这笔交易收费的池子,而把你路由过去的聚合器,是因为那个报价看起来最优。

也要注意 0x 的路由规模在这里意味着什么。他们说今年路由了 81.92 million 笔交易、交易额 $42.67 billion,其中约 70% 的交易触及 Uniswap 流动性。他们描述的是一个有真实分发量的聚合器,同时也把自己描述成这件事里承担风险的一方。请据此判断它的动机,但数字照样要读。

hook 为什么能做到这些

Uniswap 的官方文档解释了这项设计。Hooks 是挂在单个池子上的外部智能合约。每个池子可以有一个;一个 hook 可以服务数量不限的池子。池子的 hook 在创建时指定,写在 PoolManager.initialize 调用里。

Hooks 在特定节点触发:swap 前后的 beforeSwap 和 afterSwap,流动性变化与捐赠前后有对应的一对。权限被编码进 hook 的合约地址,PoolManager 用这些编码后的权限来决定对某个池子调用哪些函数。

这些都不是缺陷。它们就是特性。Uniswap 的文档列出了预期用途:定价曲线不同于 xy = k 的定制 AMM、收益农场、衍生品与合成资产平台、借贷 hooks。

同一份文档也列出了这样一件事的可能性:一个由任何人部署、并拦截 swap 的 hook 能做到什么——它是运行在执行路径里的自定义代码,而这条执行路径属于 DeFi 中集成度最高的场所所路由到的池子。

这正是 0x 在争论的取舍,而且他们说得很直白。同一套设计既让正当的构建者获得对执行过程的表达力控制,也让聚合器更难判断哪些池子可以信任。恶意 hook 不需要品牌、不需要用户、不需要分发渠道。它只需要让自己的池子在对流动性做聚合的系统面前看起来有吸引力。如果一个聚合器看到最优报价,它就有理由把路由发过去。如果某个钱包或应用信任这个聚合器,那么这个池子就是通过用户本就信任的基础设施被抵达的。

Uniswap 的说法

Uniswap 的回应是这是个技术能力问题,并指向自家的 API,称那是能够绕开它的路径。

这个 API 是怎么被描述的,值得知道。它的白名单范围很窄:人工审查只适用于部署在 0x91 地址的 hooks,或使用 delta 标志、动态费率的 hooks。其余的已经自动进入白名单。而用 Uniswap 自己的话说,这项审查本身既不是安全审计,也不是背书。

这是对适用范围的坦率说明,比多数项目愿意说的都多。但它也不等于保证 hook 不会报出一个价格、却按另一个价格成交。

交易者实际能做的

你手上没有那么多时间,去审计自己被路由到的那个池子上的 hook。所以有用的做法是结构性的,而不是调查性的。

把对外报出的费率当作一项主张,而不是事实。 一个显示 0 到 18%、在 60.6% 的成交上收费的池子,描述自己时是准确的。要问的是费率中位数,不是最低值。

留意那个破绽。 同一交易对上明显优于其他所有路由的报价,并不自动意味着一笔好交易。在这份数据集中,它同时也是问题的特征。聚合器挑选最优报价,做的是它被造出来要做的事。

优先选择报价能被“拿住”的场所。 这里的失效模式是一个只在请求那一刻存在的价格。一条按既定价格与订单簿成交的路由,或者一个给出带地址的确定报价的路由,会让你事后有东西可以拿来核对成交。

有意识地设置滑点容忍度,并弄清楚它覆盖什么。 容忍度就是报价与成交之间的差距。一个在容忍度之外成交的恶意 hook 应当回滚。一个在容忍度之内成交的 hook,仍然收了你不曾同意的费用,所以宽松的容忍度不是一个免费的选择。

核对成交,而不只是交易成功。 一笔成功的交易不是好交易的证据。每次都把实际收到的金额与报出的金额对比,直到你建立起自己的基准线。

更大的问题

聚合解决了一个真实问题:用同一个界面触达碎片化的流动性。它没有解决信任,而这两件事很容易被混淆。一个路由可以把当前最好的价格显示给你,同时仍把你路由到一个那个价格并不存在的地方。

这里的数字来自一家公司的研究,而那家公司卖的正是聚合服务。方法论是公开的,被点名的例子也具体到足以核查。但诚实的解读不是“Uniswap 有 54% 是恶意的”。而是:无需许可的可扩展性把信任边界从一条已知曲线挪到了任意代码上,而做价格聚合的工具还没有完全消化这次转移。

完整分析连同一手来源已嵌入在上方。


风险提示:加密货币交易、杠杆永续合约和自动化算法策略都存在快速且彻底的财务损失的重大风险。绝不要拿你承受不起完全损失的资金去冒险。路由经由第三方流动性还带有自身的执行风险,包括成交价格明显劣于报出价格的情况。本文中的任何内容都不是投资建议、推荐,或任何产品出售要约。