2025年6月26日,部署在以太坊主网上的Resupply 稳定币协议遭到攻击,导致约1000万美元的资产损失。由于相关合约的价格预言机实现存在问题,对于新创建的低流动性 Market,攻击者能够通过捐赠攻击操纵借入资产(Resupply 发行的 reUSD)相对于抵押资产的相对价格(即借入资产与抵押资产之间的汇率),使其变为0。这使得攻击者能够绕过资产健康检查,借出大量 reUSD 从中获利。
在 BlockSec 率先在全网公开发出预警并提供初步分析(推文1,推文2)后,Resupply 随后也发布了官方公告,但并未详细说明许多技术细节。本文将提供更详细的分析。另一方面,攻击发生后,项目方与其相关利益方之间也出现了激烈的社区争议。本文将深入探讨协议背后复杂的生态关系,供读者参考。
1. 背景
1.1 关于 Resupply 协议
Resupply 是一个属于 Curve 生态系统的去中心化稳定币协议。Resupply 发行的稳定币称为 reUSD。这是一种由抵押债务仓位(CDP)支持的去中心化稳定币,由其他稳定币——包括 crvUSD 和 frxUSD——提供支持,这些资产在外部平台的借贷市场中赚取利息。用户可以提供 crvUSD 和 frxUSD 来借出 reUSD,从而实现稳定币资产的再融资。

具体来说,用户可以在链上部署的 Resupply Market 中执行借贷相关操作。Market 的创建和行为通过 DAO 进行管理。每个 Market 都指定一个 ERC-4626 Vault 作为抵押资产(collateral),并使用该 Vault 对应的资产作为底层资产(underlying)。用户在 Market 中存入抵押品(Vault 或 Vault 的资产)以借出 reUSD。
以本次攻击涉及的 Market 0x6e90 和 Vault 0x0114 为例,相关资产(代币)如下:
-
Market
0x6e90- underlying:crvUSD
- collateral:cvcrvUSD(即 Vault
0x0114) - borrowed:reUSD
-
Vault
0x0114- asset:crvUSD(实际存储在 Curve LlamaLend Controller 中,该 Controller 同时也是一个 Market)
- collateral:wstUSR
- borrowed:crvUSD
- share:cvcrvUSD(Vault 发行的 ERC-4626 代币)
换句话说,用户可以在该 Market 中质押一定数量的 cvcrvUSD(或 crvUSD,实际上会通过 Vault 转换为 cvcrvUSD)以借出 reUSD。

1.2 系统如何判断用户是否有资格借出资产?
与一般借贷协议类似,Resupply Market 也会对用户的仓位执行资产健康检查(通过修饰符 isSolvent)。

isSolvent 最终会调用 _isSolvent 函数,该函数会检查 LTV(贷款价值比,Loan-to-Value ratio),要求借入资产与抵押资产之间的比率不得超过系统设置的最大值(_ltv <= maxLTV)。
可以看出,LTV 的计算依赖于汇率(_exchangeRate),即借入资产相对于抵押资产的价格(兑换比率)。
2. 攻击分析
2.1 根本原因分析
从合约代码的角度来看,本次攻击的关键原因是 Resupply Market 的价格预言机实现存在问题。对于新创建的低流动性 Market,攻击者可以通过捐赠攻击操纵汇率,从而绕过健康检查,借出大量 reUSD 获利。
如何计算汇率?

公式如下:

显然,如果 getPrices 返回的价格大于 1e36,整数除法向下取整将导致 _exchangeRate = 0。
如何操纵价格?

根据代码,价格可以计算如下:


由于代码中设置了 precision = 1、DEAD_SHARES = 1000,以及 shares = 1e18。

最终,将变量代入后,价格计算公式如下:

可以看出,要放大 price 的值,关键在于扩大 total_assets 和 totalSupply 之间的差距,使 total_assets 变得极大,而 totalSupply 保持极小。在 Resupply 协议的实际实现中,公式中的 total_assets 依赖于底层资产(crvUSD),而 totalSupply 依赖于对应于 Market 中整体流动性的份额(cvcrvUSD)。这正是典型的捐赠攻击场景。
2.2 攻击交易分析
根据攻击交易[4],可以分析出攻击者执行了以下核心步骤:
-
通过闪电贷借入4,000 USDC,并将其兑换为3,999 crvUSD。
-
向 Controller
0x8970捐赠2,000 crvUSD。捐赠前,Controller0x8970持有0 crvUSD。捐赠后,记录的 crvUSD 数量变为2000000000000000000000(18位小数)。 -
向 Vault
0x0114存入约2 crvUSD,并获得1份份额(cvcrvUSD)。此时,记录的 crvUSD 数量为2002000000000000000001(18位小数)。 -
向 Market
0x6e90添加1个单位(即 Vault0x0114的1份份额)的抵押品。 -
从 Market
0x6e90借出10,000,000 reUSD。此时,_exchangeRate = 0,导致_ltv = 0,因此_isSolvent检查通过。

为什么 _exchangeRate 等于0?因为通过之前的步骤,攻击者操纵合约达到了以下状态:

回顾汇率的计算方法:

由于 price > 1e36,_exchangeRate = 0。
- 将借出的 reUSD 兑换获利。
3. 经验教训
Resupply 中被攻击的 Market 使用了与 Curve 模板合约类似的价格预言机实现。

然而,Curve 官方文档早已指出该实现的适用范围——遗憾的是,Resupply 在部署时似乎并未将这一适用性警告纳入考虑。
4. 关系与社区争议
4.1 Curve 生态中五大项目的复杂关系网络
要理解 Resupply 事件的深层影响,我们首先必须了解 Curve 生态系统中五个核心协议之间的复杂关系。

Curve Finance 是整个生态系统的核心,提供流动性池、crvUSD 以及 LlamaLend 协议,支撑着 Resupply、Prisma、Convex 和 Yearn 的运作。Convex 通过质押和治理来优化 Curve 的收益,并为 Prisma 和 Resupply 提供额外的奖励机制。Prisma 依赖于 Curve 的 LP 代币和 Convex 的收益增强功能,而 Resupply 则直接基于 Curve 的 LlamaLend 发行 reUSD,并由 Convex 和 Yearn 共同开发。Yearn 不仅优化 Curve 资金池的收益,还通过与 Convex 的合作推动了 Resupply 的发展。
Curve Finance:作为核心平台,Curve 的流动性池(如 crvUSD 池)和 LlamaLend 协议被 Resupply 直接用于发行 reUSD,被 Prisma 用于质押 LP 代币,被 Yearn 用于收益优化,也被 Convex 用于治理投票。
Convex:Convex 是 Curve 的收益增强协议。用户可以质押 Curve LP 代币,以获得更高的 CRV 奖励以及 Convex 的 CVX 代币。Convex 控制着 Curve 近50%的治理投票权,并为 Prisma 和 Resupply 提供收益提升机制。
Prisma :Prisma 质押 Curve 的 LP 代币,用户通过 Convex 获得增强奖励(cvxPRISMA)。Prisma 依赖于 Curve 的流动性和 Convex 的收益机制。
Yearn:Yearn 是一个收益聚合器,通过优化 Curve LP 代币的收益(借助 Convex 增强)为用户提供高收益。Yearn 与 Convex 合作开发了 Resupply,并在其收益策略中大量使用 Curve 资金池。
Resupply:由 Convex 和 Yearn 共同开发,允许用户通过质押 crvUSD 等稳定币来借出 reUSD,并自动在 Convex 上质押代币以赚取 CRV 和 CVX 奖励,形成一个收益优化循环。
4.2 争议与影响
然而,当 Resupply 遭到攻击时,这张复杂的关系网络立刻成为争议的焦点。Curve 创始人 Michael Egorov 迅速与 Resupply 划清界限,强调:
“There is no single person from Curve working on that project… don’t generalize to Curve please.”

这一划清界限的声明反映出,DeFi 生态系统内部错综复杂的合作关系在危机时刻可能是多么脆弱。
这些相互关联的项目共同构成了一个高度耦合的生态系统——在这样的系统中,任何一个环节出现问题都可能引发连锁反应。因此,Resupply 攻击事件引发了社区关于协议相互依赖性和安全性的广泛讨论,也就不足为奇了。
5. 进一步思考
5.1 时间线
-
2025年5月17日: Resupply 官方地址
0x1f84通过Curve 的 OneWay Lending Factory部署了一个新的 LlamaLend Market。- 该 Market 使用 crvUSD 作为借贷资产,wstUSR 作为抵押代币。
- ERC-4626 Vault 合约为
0x0114,对应的 Controller 为0x8970。
-
2025年5月31日: Resupply 的治理页面上发布了一项新提案wstUSR-long LlamaLend Market。该提案旨在允许用户通过 LlamaLend Market 铸造 reUSD。
-
2025年6月11日: 该提案发布到链上。
-
2025年6月26日 00:18:47(UTC): 提案通过,Resupply 官方地址
0x0417部署了一个新的 ResupplyPair(即 Resupply crvUSD/wstUSR Market)0x6e90,绑定了 Vault0x0114和 Controller0x8970。- 绑定了 Vault 0x0114 和 Controller 0x8970。
- 使用该 Vault 的抵押债务仓位(即以 crvUSD 为底层资产的 cvcrvUSD)作为抵押品。
-
2025年6月26日 01:53:59(UTC): 在 Market
0x6e90部署约1.5小时后,攻击者成功执行了攻击。同时,BlockSec 检测到该攻击并尝试联系项目团队。 -
2025年6月26日 02:26(UTC): 在未能联系到项目团队并确认没有进一步损失后,BlockSec 发出了公开预警。
-
2025年6月26日 02:53:23(UTC): 项目团队暂停了该协议。
5.2 如果当时部署了 Phalcon Security,这场悲剧本可以避免

BlockSec Phalcon Security 代表了 DeFi 安全防护领域的最新突破。通过在内存池(mempool)阶段监控交易,Phalcon Security 能够在攻击交易进入内存池的瞬间识别出异常模式。
该系统由智能分析引擎驱动,集成了超过200种典型攻击特征。在过去六个月中,该系统始终保持着低于0.0001%的超低误报率,实现了真正精准的威胁检测。
该系统利用专有的 gas 竞价策略,确保防御交易能够超越攻击交易,同时自动触发协议的紧急暂停功能。
整个响应流程支持多种权限控制模式——包括 EOA 和多重签名钱包——为不同类型的协议提供灵活的安全解决方案。
如果 Resupply 在部署该 Market 时集成了 Phalcon Security 系统,此次攻击本可以完全避免
在 Market 0x6e90 部署后的1.5小时内,Phalcon Security 系统本可以自动检测到新 Market 的部署,智能分析其配置参数,并识别出潜在的捐赠攻击风险。
系统本可以立即向项目团队发送风险预警,建议增加初始流动性保护或调整相关参数。
即使攻击已经发生,部署 Phalcon Security 仍将为 Resupply 及整个 Curve 生态系统带来巨大价值
一个透明、实时的监控系统向用户和社区展示了项目团队对安全的坚定承诺,而全天候持续保护机制则确保类似事件不再发生。公开的安全监控数据提升了项目的透明度,是重建社区信心的关键手段。对于受影响的项目而言,主动采用顶级安全解决方案证明了其对用户资金安全的责任感,而与 BlockSec 这样的行业领导者合作,也为项目在安全领域的声誉提供了有力的背书。
目前,已有超过500亿美元的资产选择信任 Phalcon Security 的保护。我们已成功阻止了20多次真实黑客攻击,挽回了超过2000万美元的资产损失。在过去六个月中,该系统始终保持着完美的检测准确率记录,并实现了毫秒级的响应速度,始终领先攻击者一步。Phalcon Security 目前支持包括 Ethereum、BSC 和 Arbitrum 等20多个主流区块链网络,为 DeFi 生态系统提供全面的跨链安全防护。
Resupply 的1000万美元损失以及无数其他攻击事件都告诉我们:在 DeFi 世界中,安全不是一种选择——而是生存的必需品。
不要等到下一次攻击发生才后悔。现在就为您的协议部署最强大的安全防护。
BlockSec 的专家团队随时准备为您的项目进行全面的安全评估。
🔗 Phalcon Security:
https://blocksec.com/phalcon/security
🔗 预约演示:
https://blocksec.com/book-demo



