首頁U新聞5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

2026-03-14
一笔价值5040万美元的USDT抵押品轮换交易,因路由系统缺陷被导向流动性极低的SushiSwap AAVE/WETH池,导致仅换得3.59万美元等值AAVE。事件非黑客攻击,而是CoW协议报价逻辑薄弱、Aave前端适配器缺陷及多层风控缺失共同引发的系统性路由失败。
5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

单看事件标题,大概率会误以为这是一起漏洞利用攻击。

有人将价值 5040 万美元的 USDT,最终仅兑换到价值 3.59 万美元的 AAVE。

我初次听闻此事时,着实震惊。因此,我彻头彻尾地梳理了整个事件:交易追踪、求解器路径、合约调用、历史储备、结算数据、适配器流程、Aave 界面代码、CoW 闪电贷 SDK,以及判断报价是否“合理”的路由代码。

这不是一次黑客攻击。

公链没有出问题,出问题的是路由。

在我看来,轻描淡写将此事归为单纯的“用户操作失误”,并非客观严谨的态度。诚然,用户完成了订单签名,但整套软件系统,竟允许一笔涉及近 5000 万美元抵押品轮换的操作,完成报价、签名、路由规划直至最终执行,且全部流程指向一个仅持有约 331 枚 AAVE 的低流动性池。这本该是完全不可能发生的事,至少理应在结算环节启动前,就被系统强硬拦截拒绝。

本次异常交易哈希为:0x9fa9feab3c1989a33424728c23e6de07a40a26a98ff7ff5139f3492ce430801f,于 2026 年 3 月 12 日在以太坊主网区块高度 24643151 处确认,交易索引为 1,消耗 Gas 量 3780570 单位,交易执行成功。订单归属钱包地址为 0x98b9 开头,实际执行交易的求解器(交易发送方)地址为 0x3980 开头,在 CoW 竞赛数据中标记为 tsolver。

首先要明白,这不是一次简单的钱包层面的 USDT 到 AAVE 兑换。卖出代币是 aEthUSDT,即 Aave 平台上生息的 USDT 存款凭证。买入代币是 aEthAAVE,即 Aave 平台上生息的 AAVE 存款凭证。所以,这实际上是一次通过 CoW 协议的结算系统及其闪电贷适配器流程进行的 Aave 抵押品轮换。

交易前,该钱包持有约 50,432,693.075254 个 aEthUSDT 和 0 个 aEthAAVE。交易后,它仅剩 4.980399 个 aEthUSDT,并收到了 327.241335505966487788 个 aEthAAVE。实际上,该钱包卖出了几乎全部头寸。

元数据更清晰地表明,路由在执行前就已经是“有毒”的。订单来自 aave-v3-interface-collateral-swap 流程。CoW 的 API 将其显示为已签名的卖出订单,而应用元数据则将其标记为使用 121 个基点智能滑点的市价式抵押品互换。签名的卖出金额是 50,432,688.41618 个 aEthUSDT。签名的最低买入金额是 324.949260918413591035 个 aEthAAVE。实际结算支付了 327.241335505966487788 个 aEthAAVE。

这是一个极其重要的细节。这笔订单本就没期望获得成千上万的 AAVE,然后在中途不知何故被摧毁。它在构建之初,就围绕着三百多个 AAVE 这样的结果。

一旦你跟随交易追踪,整个过程便残酷地直截了当。

顶层资金流转核心依托 CoW 协议 0x9008 开头的 GPv2Settlement 结算合约。首先,0x60bf 开头的 HooksTrampoline 合约完成 aEthUSDT 授权操作,允许 CoW 金库中继器无需单独交易授权,即可提取用户资产;随后,0xc92e 开头的 GPv2VaultRelayer 合约从用户钱包提取 50432688.41618 枚 aEthUSDT 进入结算流程,截至此环节,所有操作均符合正常逻辑。

结算合约随后将 aEthUSDT 操作权限授予 0xd524 开头的未开源辅助合约,并通过函数选择器 0x494b3137 发起调用;该辅助合约再将执行权限转交至 0x699c 开头的未开源执行器合约,至此,异常交易路由的全貌彻底暴露。

首个有效调用指向 0x87870 开头的 Aave 资金池合约,通过 withdraw 函数(选择器 0x69328dec)销毁 aEthUSDT,赎回底层原生 USDT;随后路由跳转至 0x4e68 开头的 Uniswap V3 深度 USDT/WETH 交易池,将全部 50432688.41618 枚 USDT 兑换为 17957.810805702142342238 枚 WETH。

这一阶段的交易完全正常:兑换汇率约为 2808.4 USDT 兑换 1 枚 WETH,符合当时市场行情,无流动性不足问题,无计算偏差,第一跳交易链路不存在任何异常。

问题出在第二跳,一旦你看到流动性储备,剩下的故事就不可避免了。

执行器获取 17957.810805702142342238 枚 WETH 后,将全部资金转入 0xd75ea151a61d06868e31f8988d28dfe5e9df57b4 地址的 SushiSwap V2 AAVE/WETH 交易池。

我核查了该交易池在异常交易发生前一刻(区块高度 24643150)的历史流动性储备数据,池内仅持有:

331.631982538108027323 枚 AAVE、17.653276196397688066 枚 WETH

这并非数据录入错误,而是铁一般的事实。

这条交易路由,将近 17958 枚 WETH 全部注入一个仅储备 17.65 枚 WETH、对应 AAVE 总库存仅 331.63 枚的微型交易池,输入的 WETH 体量竟是池内 WETH 储备的约 1017 倍。

这绝非“滑点偏高”或“流动性略薄”的常规问题,而是一条极端荒谬的市价单执行路径,相当于强迫一个体量极小的恒定乘积 AMM 池,承接一笔规模超出自身数千倍的巨额交易。

AMM 交易池按照既定算法执行了操作,近乎耗尽了池内全部 AAVE 储备。

SushiSwap 交易对触发核心 Swap 交换事件:执行器转入 17957.810805702142342238 枚 WETH,仅换回 331.305315608938235428 枚 AAVE。交易完成后,该池剩余流动性约为:

0.326666929169791895 枚 AAVE、17975.464081898540030304 枚 WETH

说白了,池中约 99.9% 的 AAVE 库存在一跳中被抽干。

根据交易前的储备,池子隐含的 AAVE 价格约为 149.50 美元。用户的实际执行价格约为 154,114.66 USDT 兑 1 AAVE。这比交易前的现货价格差了超过 1000 倍。

接着,这些 AAVE 被供应回 Aave 资金池,使用选择器 0x617ba037,即 supply(address,uint256,address,uint16)。结果是新铸造的 aEthAAVE 被送回结算合约。结算合约最终将 327.241335505966487788 个 aEthAAVE 转给了用户。大约 4.06398010297174764 个 aEthAAVE 作为相对于用户支付的盈余,留在了结算合约中。

所以,结算并没有突然将一个好的执行结果扭曲成一个坏结果。它只是最终敲定了路由早已产生的结果。

这是关键点,值得明确说出: 灾难性的结果在路由执行前就已经“预设”在其中了。

路由内嵌的辅助合约调用数据中,买入端目标金额约为 331.272185078031026739 枚,用户签名约定的最低买入金额为 324.949260918413591035 枚,实际结算金额为 327.241335505966487788 枚,所有核心数值在结算前,就锁定在三百余枚 AAVE 的量级。

这条路由生来就是坏的。

答案是:系统每一层校验机制,都在核查错误的维度。

却几乎没有核心层级校验交易路由在经济层面是否具备合理性,这是机制失守的核心根源。

首个明显的代码异常点,出现在 Aave 界面的 CoW 适配器报价流程中:原本用于在请求报价时,附带适配器专属应用数据的函数,被直接强制禁用。

5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

来源:和

并没有附上实际发布订单时会附加的闪电贷和钩子元数据

只要报价 Gas 费用为正、输出金额非零

5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

来源:

这是一个令人震惊的薄弱

这是本次事件的核心漏洞。

第三个问题,在于 Uniswap V2 风格的流动性池建模方式:代码仅采用标准恒定乘积算法,仅拒绝零储备、数值下溢、储备溢出等数学层面的不可能情况,不做经济层面的可行性校验。

5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

来源:和

该段代码不会判断流动性池体量是否足以承接对应路由交易,仅判断交换操作在数学上是否有效。因此,即便一个仅储备 331 枚 AAVE 的微型池,也会被判定为承接 17957 枚 WETH 买入请求的有效场所,只因恒定乘积算法能算出非零结果,却完全无视这个结果会带来毁灭性的资产损耗。

随后,闪电贷 SDK 直接将这份失效报价,固化到订单与钩子的执行载荷中,没有做任何二次风险拦截。

5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

接着:

5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

来源:和

并没有

没有真正保护用户

5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

来源:

如果报价本身就已经是胡言乱语,订单仍然可以通过。

不是一个硬性的熔断开关

5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

一旦用户勾选了复选框,障碍就被清除了:

5000 万 USDT 换回 3.5 万美元 AAVE:灾难如何发生?我们又该怪谁?

来源:和

因此,即便这笔交易会近乎清空全部资产价值,系统也仅将其判定为需用户确认的操作,而非系统必须强硬拒绝的高危交易,预警机制完全失去了风险拦截作用。

基于以上所有机制失守,我绝不认同“这只是用户犯傻”的敷衍结论。用户确实完成了签名,但整套软件系统有无数次机会拦截这场灾难,却每一层都仅做了基础校验,判定“非零、可执行、已签名”后直接放行,最终酿成恶果。

这一环节至关重要,直接排除了大量错误猜测:aave-v3-interface-collateral-swap 对应的 Aave 官方界面流程,会在 useSwapOrderAmounts.ts 文件第 139 行,结合报价、网络费用、合作方费用、闪电贷费用,计算滑点调整后的买入金额;第 331 行将其转换为 buyAmountBigInt 数值;随后在 CollateralSwapActionsViaCoWAdapters.tsx 文件第 191 行,对该金额完成精准签名。

后续适配器合约会在 AaveV3BaseAdapter.sol 文件第 141 行,校验签名订单字段与存储数值完全匹配;CoW 结算合约会在 GPv2Settlement.sol 文件第 337 行,强制执行签名约定的限额规则。因此,链上执行结果并未超出签名订单允许的范围,用户实际收到的资产,甚至高于签名约定的最低限额。

这足以证明:灾难发生在结算环节之前,而非结算过程中,路由的致命缺陷早已注定结局。

同一区块内的下一笔交易(哈希 0x45388b0f 开头),针对被破坏的 SushiSwap AAVE/WETH 池完成了回跑套利。异常交易用巨量 WETH 塞满池子、抽干绝大部分 AAVE 后,套利者立即将 AAVE 卖回池中,收割流动性失衡带来的超额价值。

本次回跑套利共提取约 17929.770158685933 枚 WETH,随后向该区块构建者支付约 13087.73 枚 ETH,向套利执行地址支付约 4824.31 枚 ETH。

用户损失的全部经济价值,最终几乎瞬间转化为同一区块内的 MEV 套利收益与区块构建者收益。

另外核查区块级时间序可以确认:交易前无人恶意操纵 SushiSwap 交易池设套诱骗用户,该 AAVE/WETH 交易对首次被触及,就是本次异常交易(交易索引 1);紧接着的下一笔交易(交易索引 2),就针对本次交易造成的价格扭曲完成首次回跑;交易索引 3 也在市场修复过程中触及该交易对。时间线清晰印证:本次异常交易制造了极端扭曲价格,后续交易直接收割了这份扭曲收益。

没有

没有

没有

真正的系统性失败,发生在更上层的路由与风控层面:

主要责任方为 CoW 协议的路由、报价与求解器模块

次要责任方为 Aave 前端界面

这是一次交易路由质量与风控护栏的极端性失败,直接将一笔合法合规的抵押品轮换操作,演变成了一场毁灭性的资产损失事件。

線上客服
客服團隊

剛剛

親愛的 LBank 用戶

我們的線上客服系統目前遇到連線故障。我們正積極修復這一問題,但暫時無法提供確切的恢復時間。對於由此給您帶來的不便,我們深表歉意。

如需幫助,您可以透過電子郵件聯繫我們,我們將盡快回覆。

感謝您的理解與耐心。

LBank 客服團隊