Uniswap 毒池:0% 报价 12.8% 收费,29 小时敛财 13 万

核心要点

BNB Chain上Uniswap v4动态费率池利用Hook机制,通过区分模拟与真实交易环境,实现报价0%而执行12.8%费率。29小时内收割13万美元,揭示聚合器报价漏洞与滑点保护失效风险。

据 Woofun AI 消息,BNB Chain 上出现一个利用 Uniswap v4 架构特性的 USDC/WBNB 动态费率池,其核心欺诈逻辑在于向聚合器展示 0% 的费率报价,却在用户实际成交时收取高达 12.8% 的流动性提供者费用(LP fee)。

这种前后不一的费率执行机制,使得该池子在短时间内完成了对 unsuspecting 用户的精准收割。

从时间线来看,该恶意池子的活跃期集中在 2026 年 8 月 22 日到 23 日,总计持续约 29 个小时。在此期间,该池子共处理了 21,086 笔交易,累计收取的手续费总额达到 131,888 美元。在完成收割后,该池子随即被注销。

值得注意的是,所有受害交易在链上均显示为'成功'状态:合约未被黑客盗取,输出金额高于用户设定的下限,没有任何明显的异常信号触发警报,资金差额只是安静地转化为了高额手续费。

以一笔样本交易为例,其哈希值为 0x7615dec2ce80506ec461a47739eb8533ac2bc7c605ca56c255964481b76363d0。在这笔交易中,用户投入了 5,926.90 USDT,但最终到手的金额比预期少了 757.43 USDT。

这一具体案例清晰地展示了用户如何在看似正常的交易流程中遭受实质性损失,也为后续拆解该池子如何实现'报价 0%、执行 12.8%'提供了切入点。

技术层面,该欺诈行为依赖于 Uniswap v4 的 Hook 权限与费率覆盖机制。在 v4 架构中,PoolKey.fee 被设置为 0x800000,以此声明这是一个动态费率池。Hook 合约在 beforeSwap 函数的第三个返回值中携带 0x400000 | fee 的组合数据。在 v4-core 的代码逻辑中(Pool.sol:303-305),isOverride() 函数检查覆盖标志,removeOverrideFlagAndValidate() 函数剥掉 0x400000 并校验费率不超过 MAX_LP_FEE = 1,000,000(即 100%),随后按该费率执行本笔 swap 并写入 Swap 事件。

这意味着,只要 Hook 返回的费率在允许范围内,用户就必须支付该费率,前提是输出金额仍高于 amountOutMin。该 Hook 仅声明了两项权限,v4 将权限编码在合约地址低 14 位(Hooks.sol:29-47),部署时校验且事后不可更改。

Woofun AI 整理数据显示,欺诈判定的第一层与第二层主要基于 Origin 与 Gas 差异。费率函数首先比对 tx.origin,若等于三个常量地址中的任何一个,则直接返回回退档费率。当前配置的回退档为 0%。这三个地址的选择并非随机,因为 eth_call 未指定 from 时,交易的 origin 会落在零地址上,而聚合器批量询价通常不指定 from 地址。本地 fork 验证显示,第一层只认这三个地址。

当 tx.origin 换成普通地址时,第一层被绕过,但费率仍为 0%,这引出了第二层判定:gasleft() 10100 / 10000 >= gate。聚合器报价习惯给予高 gas 以防止模拟失败,而真实交易在进入 Hook 前,gas 已被 Router、授权等前置步骤消耗。实测显示,分界线位于 16.85M–16.9M gas 之间。30M 与 2.59M 的 gas 差异,正是区分'报价'与'执行'的关键。

欺诈判定的第三层涉及伪随机费率与动态配置。前两层都通过的真实交易进入第三层,系统将区块环境指纹哈希后对 10,000 取模,按结果所在区间返回对应费率档。当前配置为三档:8% / 10% / 10%,若落空则回退至 0%。指纹中混入了 calldata 的三个字段,由于聚合器报价的 calldata 与真实路由不同,指纹自然也不同。

这种逐笔伪随机设计使得费率呈现分布特征,难以通过简单枚举察觉规律。在全部 21,086 笔链上事件中,出现了 19 档历史费率,范围在 6.8%–28% 之间,表明费率档由管理员函数按需重配。样本交易成交时生效的费率为 12.8%。

交易之所以能够成功,关键在于滑点保护的失效。在该样本交易中,Swap 事件记录的生效费率为 128000,v4 的费率单位以 1,000,000 为 100%,因此 128000 对应 12.8%。从整条路线看,稳定币进出差额为 757.43 USDT,折损比例为 12.7794%,其中包含前置跳费用与脱锚偏差。两个数字仅差 0.02 个百分点,说明主要折损来源即为该池子的 LP fee。amountOutMin 仅校验最终输出下限,不看中间每一跳的收费情况。12.8% 的费率完全落在 20.32% 的缓冲范围内,输出仍高于底线,因此交易成功且未回退。主流稳定币路线的常规默认滑点为 0.1%–1%,而该路线给予了 20 倍以上的空间,用户误以为宽缓冲能增加稳定性,实则将路径上的合约控制权交给了对端。

白名单机制与刷量操纵手段进一步加剧了欺诈效果。在 beforeAddLiquidity 函数中,加流动性需通过三道门:首先是 PoolManager 调用检查,其次必须经由官方 PositionManager,最后核对头寸持有人的白名单。不在名单上的地址会被合约回退,其他 LP 无法进入,手续费收入不被稀释,全部归部署者所有。名单由管理员函数(选择器 0xc4452e52)维护。

分析 21,086 笔交易的分布可见,0% 档有 6,946 笔,成交 12,947,751 美元,笔均 1,864 美元;收费档有 14,140 笔,成交 1,120,106 美元,笔均 79 美元。大额成交集中在 0% 档,收费集中在小额交易。大额 0% 交易很可能是部署者自己使用高 gas 进行的自成交,以刷出成交量。快照显示 24 小时成交约 1,082 万美元、16,671 笔,这使得池子在聚合器眼中呈现出深度好、费率低的假象。

该池子的生命周期始于 08-22 06:57 建池,07:13 出现第一笔 swap,21:39 为样本交易,08-23 12:25 最后一笔成交后注销。整个活跃期总成交 14,067,857 美元,手续费收入 131,888 美元。复核时发现注册标志已回到启用状态,池子仍存在再次启用的风险。

关键地址包括费率配置函数选择器 0x4d909a45,存储槽读数 0x0138800186a00186a0,PoolManager 地址 0x28e2ea090877bf75740558f6bfb36a5ffee9e9df,Pool ID 为 0x36e5540e9dedc02229fe8a82aa5b10c0bf07d1fa74e4f2ffe0efd00fa1a36aea,Hook 地址为 0xd111b3ddd92e627f1864520c770e913ec04e0880,管理员地址为 0x08b03e1a5444d469f4dc954e74d3f662c94a6b13,样本交易位于区块 117497524。

这一案例揭示了动态费率池在缺乏透明度和审计时的巨大风险,聚合器需优化模拟机制,用户应收紧滑点设置,以防范此类'毒池'陷阱。

评论

回复 @用户
0/800

暂无评论

消息提醒

登录后查看消息
查看全部消息管理订阅