本文深入分析了 Curve Finance 协议的各个方面,包括 v1 和 v2 版本的 AMM 机制、crvUSD 稳定币及其 LLAMMA 算法,以及 veCRV 的治理和激励模型。同时,还详细回顾了 Curve 历史上发生的安全事件,并为开发者和审计人员提供了一份全面的安全检查清单,旨在帮助他们更安全地集成和使用 Curve 协议。
Curve Finance 是 DeFi 领域不可或缺的支柱,以设计高效的代币互换而闻名。它的旅程始于 Curve v1 中具有开创性的 Stableswap 池,旨在最大限度地减少稳定币(DAI、USDC)和封装资产(wBTC)等Hook资产的滑点。该协议的演变随着 Curve v2 的 Cryptoswap 池 继续,这扩展了其处理 ETH 和 WBTC 等波动性大、不相关的资产的能力,使其能够与传统的 DEX 竞争。
除了其核心 AMM 之外,进一步的创新导致了 crvUSD 稳定币 及其独特的 LLAMMA(借贷-清算 AMM),这是一种用于管理抵押品和最大限度地减少清算的新颖机制。对于开发人员和安全研究人员来说,深入理解这些复杂的机制不仅仅是学术性的,对于安全的集成、强大的应用程序开发以及 Curve 生态系统中的知情参与至关重要。
理解 Curve v1 是基础。本节深入研究 Curve 原始 StableSwap 池的核心机制,概述其公式、实现细节以及控制其行为的关键参数。
Curve的数学引擎经过精确设计,旨在最大限度地减少特定用例的滑点和费用,主要用于稳定币和其他Hook资产的交换。构思 StableSwap 不变量是为了解决在像 Uniswap V2 这样的传统恒定乘积 AMM 上交易稳定币时出现的高滑点这一严重问题,这些 AMM 将流动性均匀地分布在所有价格范围内。对于预期以或接近 1:1 Hook交易的资产,这种统一的流动性分布效率非常低。
StableSwap 不变量定义了一个混合 键合曲线,该曲线动态地融合了两个更简单模型:恒定和不变量 (x1+x2+⋯+xn=Kx_1 + x_2 + \dots + x_n = Kx1+x2+⋯+xn=K) 和恒定乘积不变量 (x1⋅x2⋅⋯⋅xn=Kx_1 \cdot x_2 \cdot \dots \cdot x_n = Kx1⋅x2⋅⋯⋅xn=K)。当池的资产处于平衡状态时,曲线的行为类似于一条直线(近似于恒定和模型,这意味着接近零滑点),这是稳定币的预期状态。但是,当交易将池推离此平衡状态时,曲线会平稳过渡以类似于双曲线(近似于恒定乘积模型)。这种巧妙的设计确保了流动性始终可用,即使在极端的市场条件下也是如此,尽管价格越来越不利。这种优雅的降级可以防止池完全耗尽一种资产——纯粹恒定和模型的一个关键缺陷。
具有 nnn 个币的池的广义 StableSwap 不变量公式为:
Ann∑xi+D=ADnn+Dn+1nn∏xiA n^n \sum x_i + D = A D n^n + \frac{D^{n+1}}{n^n \prod x_i}Ann∑xi+D=ADnn+nn∏xiDn+1
其中:
放大系数 AAA 是控制 键合曲线形状的关键参数。它决定了曲线近似恒定和模型的程度与恒定乘积模型的程度。较高的 AAA 值会“展平”平衡点周围的曲线,从而有效地集中流动性并减少不会显着失衡池的交易的滑点。从这个意义上讲,AAA 充当一种虚拟杠杆的形式:它放大了公式的线性部分,从而允许在定义的范围内实现极低的滑点。随着池变得越来越不平衡,放大系数的影响会减小,并且曲线的行为会优雅地降级为恒定乘积 AMM 的行为。选择合适的 AAA 值是每个池的关键治理决策,可以在降低滑点的需求与价格差异的风险之间取得平衡。
Curve 的智能合约主要用 Vyper 编写,Vyper 是一种专为以太坊虚拟机 (EVM) 设计的 Pythonic 编程语言。选择 Vyper 是因为其强调可审计性、安全性和简单性,与 Solidity 相比,它通常强制执行更严格的编码模式以减少潜在的漏洞。
StableSwap 不变量的数学优雅性掩盖了其实现的复杂性。对于具有两个以上币的池 (n>2n>2n>2),直接代数解不变量 DDD 是不可行的,因为它需要在链上求解一个高次多项式方程,这是一项计算量大的任务。这种数学约束直接决定了实现策略:协议必须依赖迭代数值方法来近似 DDD 的正确值和交换的输出量。
两个最关键的链上计算是 get_D() 和 get_y()。get_D() 函数计算在添加或删除流动性之后或收集费用时,给定池中所有币的当前储备的不变量 DDD 的值是必要的,因为这些操作会改变池的状态。get_y() 函数在交换期间使用;它计算出一个用户将收到多少输出币 jjj 给定数量的输入币 iii,同时保持 DDD 恒定。
为了求解这些值,Curve 的合约采用了牛顿法,这是一种强大的求根算法。该过程涉及:
此方法的链上实现,可在 CurveStableSwapNGMath.vy 等合约中找到,是 gas 优化数值计算的杰作。它具有一个有界循环(通常迭代高达 255 次),该循环使用整数算术执行这些计算,以避免浮点数学的复杂性和潜在的不准确性。在循环内,每次迭代后都会执行收敛检查,将新的 DDD 值与前一个值进行比较。如果差异小于或等于一个单位 (D−Dprev≤1D - D_{prev} \le 1D−Dprev≤1),则认为计算完成,并返回该值。如果循环完成但未收敛,则该函数会恢复并带有 raise 语句,表明池处于无法解决的状态——这是一个至关重要的安全机制。
raise "Did not converge"
此实现对开发者具有深远的影响。与 Curve 交互的 gas 成本不是恒定的;它取决于这些迭代计算的复杂性。此外,非收敛的可能性(无论多么罕见)都会引入可能导致失败的路径,任何集成智能合约都必须处理该路径。
Curve v2 代表了其前身的一个重大演变,扩展了该协议有效管理波动性和不相关资产之间交换的能力。对于开发人员和安全研究人员来说,理解其数学模型和实现中的基本转变对于安全有效的集成至关重要。
与 Curve v1 的 StableSwap 不变量(侧重于彼此Hook的资产)不同,Curve v2 的 CryptoSwap 不变量专为具有动态、不相关价格变动的资产而设计。核心创新在于它能够围绕当前市场价格创建一个高度集中的流动性池,并根据市场活动动态调整其“Hook”。这种“重新Hook”的过程使 Curve v2 池能够实现比传统的恒定乘积 AMM(例如,x⋅y=kx \cdot y = kx⋅y=k)更高的资本效率,而传统的恒定乘积 AMM 将流动性均匀地分布在从零到无穷大的所有可能价格上,从而导致波动率较大的资产对出现高滑点。
CryptoSwap 白皮书 中详细介绍了此不变量的数学推导,它比 StableSwap 的推导要复杂得多。CryptoSwap 中引入的关键参数包括:
gamma\\gammagamma (gamma):此参数控制Hook周围流动性集中的宽度。较小的 gamma\\gammagamma 值会导致更高的流动性集中,从而导致当前价格附近的交易滑点较低,但推离价格的交易滑点较高。相反,较大的 gamma\\gammagamma 会更广泛地分散流动性。
K0K_0K0(内部价格比例参数):此参数对于管理池内的内部价格至关重要。它允许池适应当前市场价格,从而有效地充当浮动Hook。池的内部价格会随着时间的推移根据交易和预言机数据进行调整,从而确保流动性保持在最需要的地方。
对于开发人员来说,这意味着 CryptoSwap 池的定价逻辑不是静态的,而是本质上依赖于路径。给定交换的汇率受池的当前状态、其历史交易活动以及其内部价格比例的动态调整的影响。这与 StableSwap 相对更简单、以平衡为中心的模型形成鲜明对比。
与 Curve v2 集成或审计 Curve v2 需要深入了解其复杂的组件:
Curve 复杂的数学不变量部署在几种不同的智能合约架构中,每种架构都经过精心定制以满足特定目的。理解这些结构对于正确的集成、安全分析以及与协议的有效交互至关重要。下表总结了主要的池类型:
| 池类型 | 主要用例 | 资产类型 | 关键 AMM 不变量 | 示例 | 关键集成函数 |
|---|---|---|---|---|---|
| 普通池 | 核心稳定币交换 | 稳定币 (DAI, USDC, USDT),封装 BTC | StableSwap | 3pool (DAI/USDC/USDT) | exchange() |
| 借贷池 | 赚取双重收益(交易费用 + 借贷利息) | 生息代币 (cDAI, aUSDC) | StableSwap | Compound 池 (cDAI/cUSDC) | exchange(), exchange_underlying() |
| Metapool | 将新资产与深度基础流动性配对 | 新稳定币 + 基础池 LP 代币 | StableSwap | FRAX/3CRV | exchange(), exchange_underlying() |
| 加密池 (V2) | 交易波动、非Hook资产 | 波动资产 (ETH, WBTC, CRV) | CryptoSwap | Tricrypto2 (USDT/WBTC/WETH) | exchange() |
| Stableswap-NG | 具有增强功能的下一代池 | 稳定币、Rebasing (stETH)、ERC4626、crvUSD | StableSwap | sDAI/crvUSD | exchange(), add_liquidity(), remove_liquidity() |
普通池是 StableSwap 不变量的最直接实现。它们在一个合约中直接持有两个或多个Hook资产。规范的例子是“3pool”,它促进了 DAI、USDC 和 USDT 之间的高效交易。该池是 DeFi 中基础流动性枢纽,通常作为主要稳定币的标准流动性来源集成到其他协议中。对于开发人员来说,与普通池交互通常涉及直接调用 exchange() 来交换资产。
借贷池体现了 DeFi 强大的可组合性。这些池不是直接持有基础资产,而是持有来自主要借贷协议(如 Compound(例如,cDAI、cUSDC)或 Aave(例如,aDAI、aUSDC))的相应生息代币。这种架构允许流动性提供者同时从两个来源赚取收益:来自 Curve 的交易费用和来自底层借贷协议的借贷利息。虽然对于收益优化来说很强大,但这种可组合性也引入了依赖风险。集成借贷协议中的漏洞或失败可能会直接影响 Curve 池中持有的资产,从而使这些池的安全分析本质上更加复杂,因为它需要理解多个协议。这种连接——可组合性等功能既会增加收益,又会带来继承的风险——是安全分析的关键考虑因素。常见的函数包括 cToken 本身的 exchange() 和基础资产直接交换的 exchange_underlying()。
Metapool 是一项提高资本效率和扩展新资产流动性的关键创新。当启动一种新的稳定币(例如,FRAX)时,metapool 将新资产与高流动性基础池的 LP 代币配对,而不是要求它与 USDC 和 USDT 等已建立的资产形成一个全新的池——这会分散流动性(例如,将 FRAX 与 3CRV LP 代币配对)。这种设计允许用户在新资产和基础池的任何底层资产之间进行单笔高效交易的交换,从而利用基础池的深度流动性而不会稀释它。这种结构特别有利于新兴稳定币引导流动性。与 Metapool 集成通常涉及使用 exchange() 在 metapool 中进行直接交换,或使用 exchange_underlying() 交换为底层池的基础资产。
使用 Curve v2 引入的加密池代表了设计的根本背离,专为交易波动、非Hook资产(如 ETH、WBTC 和 CRV)而定制。如前所述,这些池利用复杂的 CryptoSwap 不变量,该不变量动态调整其内部价格以围绕当前市场价格集中流动性。与 v1 池相比,这种动态重新Hook机制能够显着提高波动asset pairs的资本效率。与加密池的集成需要更细致地了解其动态定价、对预言机数据的潜在依赖性以及复杂的费用结构,其中可能包括动态费用和“重新Hook费用”。主要交互仍然通过 exchange() 函数进行,但底层计算要复杂得多。
Stableswap-NG 代表了原始 StableSwap 池架构的重大演变,专为增强模块化、灵活性以及对更广泛的代币类型的支持而设计。这些下一代合约支持最多八个代币的池,以原生方式处理各种代币标准,例如 rebasing 代币(例如,Lido 的 stETH)和 ERC4626 vault 代币,并且可以包括内置的移动平均预言机。对于开发人员来说,与 NG 池交互需要仔细注意特定的代币机制,因为简单的 balanceOf() 调用可能无法准确反映 rebasing 或生息资产的潜在价值。这些池提供了更高的可定制性和面向未来的功能,使其成为了解 Curve 如何继续适应不断发展的 DeFi 格局的关键领域。集成的典型函数包括 exchange()、add_liquidity() 和 remove_liquidity(),但它们的内部逻辑会根据所涉及的代币类型而有很大差异。
Curve 超越其作为去中心化交易所的角色而进行的战略扩张包括通过引入 crvUSD 进入稳定币领域的冒险。此举伴随着清算机制的重大创新,称为借贷-清算 AMM 算法 (LLAMMA)。crvUSD 和 LLAMMA 的设计代表了对抵押债务头寸 (CDP) 应如何管理风险的根本性重新思考,从传统的惩罚性清算模式转向更动态和连续的过程。
crvUSD 的核心是一种与美元软Hook的去中心化稳定币,其架构与 MakerDAO 的 DAI 等已建立的稳定币类似。用户可以通过将接受的波动性加密资产(如以太坊 (ETH) 或比特币 (BTC))作为抵押品存入智能合约来铸造 crvUSD。此头寸必须过度抵押,这意味着存入的抵押品的价值必须超过铸造的 crvUSD 的价值一定幅度。详细的机制在 Curve 创始人 Michael Egorov 撰写的 白皮书中 进行了概述,该白皮书与官方智能合约代码一起发布,提供了从一开始就对系统设计进行透明观察。
LLAMMA 从根本上将传统清算流程重新设计为可以称为“软”清算。LLAMMA 没有采用通常会导致借款人遭受重大损失的单一、离散的清算事件,而是制定了一个由专用 AMM 管理的连续且渐进的抵押品转换流程。有关 LLAMMA 的全面概述,请参阅 Curve 文档。
该机制的工作方式如下:
这种设计将清算“从具有巨大滑点损失的锯齿状、一次性、全有或全无的事情转变为平稳过渡”。这种理念上的转变是深刻的:LLAMMA 不会将清算视为一种需要惩罚的二元失败状态,而是将其视为一种需要积极管理的连续风险范围。对于借款人来说,该系统提供了一个针对短期价格变化和闪电崩盘的缓冲,因为他们的头寸不会立即被清算。相反,它会被动态地降低风险。在价格在清算范围附近徘徊的情况下,持续的买卖甚至可以为借款人创造交易费用,从而将通常具有破坏性的过程转变为潜在的增值过程。
LLAMMA 的实施本质上是复杂的,需要在价格预言机、管理抵押品转换的特殊 AMM 以及划分为“流动性带”的各个用户头寸的状态管理之间建立复杂的互动。这种复杂性需要采取严格的安全姿态。crvUSD 及其相关的借贷合同已经过 MixBytes、ChainSecurity 和 StateMind 等公司进行的多次安全审计,反映了该系统的重要性。
这些审计对于识别和缓解由这种新颖设计引起的潜在漏洞起到了重要作用。例如,StateMind 的一项审计发现 AMM 中动态费用计算存在一个严重缺陷。在特定的、持续的市场条件下(例如,在 14 个连续区块内发生 5% 的价格变化),累积费用在数学上可能会超过 100%。这将破坏 calc_swap_out 函数,从而可能允许攻击者通过交换单个代币来耗尽流动性带。立即采取的缓解措施是 DAO 提案,以设置非零 admin_fee,这将导致计算由于溢出而恢复,从而阻止利用。
if new_fee > FEE_INV - 1:
return MAX_UINT256
# revert("dev: new_fee > max_fee")
同一审计的另一项重大发现是操纵借款利率的潜力。Controller 合约中的 liquidate_extended 函数使用了一种可以通过跨合约重入来利用的回调机制。此外,利率计算依赖于对 CONTROLLER_FACTORY.total_debt() 的调用,该调用可能已过时,这为攻击者操纵借款利率以谋取自身利益或损害其他用户利益创造了一个载体。这些发现强调,crvUSD 的安全性不仅仅在于 CDP 的逻辑,而且还深深地嵌入在其内部价格预言机的完整性以及其动态费用和利率设置算法的数学合理性中,尤其是在对抗性条件下。
Curve DAO 生态系统证明了精心设计的代币经济的力量,其核心激励措施通过围绕 veCRV 的系统进行管理。
Curve 流动性提供者 (LP) 的经济激励通过相互连接的智能合约系统进行管理,这些合约协同工作以分配 CRV 代币排放。
Curve 生态系统中的治理权力和经济利益都以 veCRV 的概念为中心,veCRV 是代币经济学中的一项开创性模型,此后已被许多其他协议采用。
三重效用:持有 veCRV 可赋予其所有者三个截然不同的强大好处:
这个错综复杂的系统创造了一个强大的、自我加强的经济飞轮。为了使协议的稳定币获得成功,它需要深厚的流动性。实现此目的的最具资本效率的场所是 Curve。为了吸引足够的流动性,一个池需要提供高 CRV 奖励。这些奖励的分配由计量器权重投票决定,而这些投票由 veCRV 持有者控制。这为协议创建了一个直接的激励,即获取 CRV,将其锁定为最大时长的 veCRV,并使用该投票权将其排放导向他们自己的池。这种对治理影响力的竞争性动态,被著名地称为“Curve Wars”,是 veCRV 架构的直接且有意的结果,并促使创建了整个协议子生态系统(如 Convex Finance),致力于聚合和优化 veCRV 权力。
为了允许用户在以太坊主网 (L1) 上的 veCRV 余额提高 Arbitrum 和 Optimism 等Layer2网络上的奖励,Curve 使用了一个跨链预言机系统。该系统通过部署在每个 L2 上的 L2VotingEscrowOracle 智能合约运行。
但是,此架构引入了一个关键的安全权衡。L2 预言机的状态未以无需信任的方式更新;相反,它依赖于一小组称为“验证器”的、经过许可的帐户。这些验证器负责安全地从 L1 中继 veCRV 余额和投票数据。
对于与 Curve Finance 协议交互、在此基础上构建或审计 Curve Finance 协议的任何人来说,了解过去的安全事件至关重要。这些事后分析为即使是最复杂的 DeFi 协议也可能遭受的漏洞类型提供了宝贵的见解,为开发商、安全研究人员甚至用户提供了关于集成和使用最佳实践的重要经验教训。通过剖析这些事件,我们可以识别常见的陷阱、识别新兴的攻击向量,并加强整个 Web3 生态系统的集体安全态势。
2023 年 7 月 30 日,DeFi 社区因一系列针对多个 Curve Finance 池的漏洞而受到震动,导致累计损失超过 6000 万美元。该攻击影响了几个“工厂池”(无许可创建的池),包括用于 Alchemix (alETH-ETH)、JPEG’d (pETH-ETH) 和 Metronome (msETH-ETH) 等著名项目的池,以及 Curve 的主要 CRV/ETH 池之一。
最初的猜测指向一种新的重入攻击,但根本原因要根本得多,也更阴险。该漏洞并非位于 Curve 开发人员编写的应用程序级别逻辑中,而是在特定版本的 Vyper 编程语言编译器中的一个潜在错误。受影响的版本被确定为 0.2.15、0.2.16 和 0.3.0。
该错误是编译器如何为重入保护生成字节码的一个缺陷,重入保护是一种旨在防止同一事务中递归调用函数的关键安全功能。正确实现的重入保护使用存储槽作为锁;它在函数执行开始时设置锁,并在结束时清除锁,从而恢复找到已设置锁的任何调用。编译器错误阻止在某些条件下正确设置或清除此锁,从而有效地使受影响池中的重入保护失效。
此事件深刻地强调了认识到协议的安全性超出了其应用程序级别的智能合约代码的重要性。整个工具链(包括编译器本身)都必须被认为是安全边界的关键组成部分。开发人员不仅要编写安全代码,还要敏锐地意识到所使用的特定编译器版本、其已知的漏洞以及可能损害安全性的潜在交互。强大的部署策略必须包括验证编译器完整性和随时了解特定于编译器的错误披露。
2022 年 4 月,安全公司 ChainSecurity 披露了一种不同但更微妙的重入漏洞,该漏洞影响了一些 Curve 池。这种被称为“只读重入”的攻击并非旨在直接从 Curve 窃取资金。相反,它利用 Curve 视图函数来操纵与 Curve 集成的其他协议的价格预言机。
攻击向量集中在 remove_liquidity 函数和 get_virtual_price() 视图函数上。该漏洞利用在单个事务中以精确的步骤顺序展开:
这种被操纵的、人为抬高的价格随后可能被用于利用借贷协议,例如,允许攻击者借入的资产数量远远超过其抵押品的真实价值。此漏洞使超过 1 亿美元的资金面临多个主要 DeFi 协议的风险。
此事件打破了开发人员普遍认为 view 函数本质上免受重入攻击的假设,因为它们不会修改状态。它表明,在高度可组合的生态系统中,如果可以在合约处于暂时不一致的状态时调用 view 函数,则它可能成为强大的攻击媒介。不能孤立地评估函数的安全性;还必须考虑其针对集成协议的潜在攻击性。
建议的缓解措施是让集成协议对这种情况进行防御性编程。在调用 get_virtual_price() 之前,协议应首先在 Curve 池上调用一个良性的状态更改函数,例如 withdraw_admin_fees。此操作将触发池自身的重入保护,如果池正处于另一个操作中,将导致后续对 get_virtual_price() 的调用失败,从而阻止 oracle 操纵。
除了引起公众关注的高调漏洞利用之外,Curve 协议的安全态势还通过多次专业的安全审计不断完善。这些审计由该领域的领先公司进行,提供了对协议风险状况更深入、更细致的看法。综合这些报告中的发现,揭示了反复出现的主题和常见的陷阱,这些对于在 DeFi 领域(尤其是在具有复杂经济逻辑的系统上)进行构建的任何开发人员都具有指导意义。
Curve Finance 通过让顶级审计公司(包括 Trail of Bits、Quantstamp、MixBytes 和 ChainSecurity)对其合约进行严格审查,从而展示了对安全的一贯承诺。审计涵盖了生态系统的各个方面,从核心 DAO 和 DEX 合约到较新的 crvUSD 稳定币和借贷基础设施。
对这些审计报告的审查揭示了几个常见的主题和漏洞类型:
这些发现共同表明,对于像 Curve 这样复杂的协议,安全性不是一次性的成就。审计报告本身通常包含免责声明,声明它们是“有时限的,无法发现所有漏洞”。一长串审计的存在不应被解释为绝对安全的保证,而应被解释为风险管理和缓解的持续过程的证据。最关键的漏洞通常不在于简单的访问控制错误,而在于复杂的金融数学与可以使用闪电贷等工具模拟的对抗性市场条件之间的微妙交叉点。
在 Curve 及其集成协议中发现的许多漏洞都与价格 oracle 安全性有关,这是 DeFi 中的一项系统性挑战。
缓解策略:为了解决这个问题,DeFi 生态系统开发了更强大的 oracle 设计:
除了正式审计之外,Curve 还维护着一个积极且利润丰厚的 bug bounty 计划,作为持续的安全防御层。该计划激励独立的安全研究人员和白帽黑客在恶意行为者利用漏洞之前发现并负责任地披露漏洞。该计划提供丰厚的经济奖励,对于发现可能导致用户资金大量损失或协议核心功能出现故障的关键 bug,其支出高达 250,000 美元。范围已明确定义为侧重于智能合约漏洞,不包括前端代码或先前已知的 bug 问题。该计划通过提供持续的、开放的邀请来审查协议的代码,从而补充了正式审计。
根据对协议设计和过去安全事件的分析,与使用 Curve 的协议集成或审计协议的开发人员应遵守以下安全清单:
get_virtual_price() 进行关键 oracle 读取之前触发合约的重入锁定(例如,通过调用 withdraw_admin_fees)来防止只读重入。与 Curve Finance 集成是利用深度流动性和高级 AMM 功能的强大方法,但这需要高水平的技术严谨性和安全意识。通过认真遵循此清单,开发人员和审计人员可以更安全地驾驭 Curve 生态系统的复杂性,从而降低风险并构建更具弹性的去中心化应用程序。
如需进一步学习和实践学习,请参阅官方 Curve 文档:
此外,请考虑 Cyfrin 上全面的 Curve v1、v2 课程,以更深入地了解协议的机制:
在 Zealynx,我们深入了解像 Curve Finance 这样的协议的复杂 AMM 设计、经济模型和安全挑战。无论你是构建新的 DeFi 协议、审计现有协议,还是需要 AMM 项目安全方面的专家指导,我们的团队都随时准备提供帮助 — 请联系我们。
想要通过更深入的分析来保持领先地位吗?订阅我们的 Newsletter,确保你不会错过未来的见解。
Curve v1 的 StableSwap 不变量是一种混合 bonding curve,旨在最大限度地减少稳定币等Hook资产的滑点和费用。对于平衡池(接近零滑点),它的行为类似于一条直线,并且随着池变得不平衡而平滑过渡到双曲线,即使在极端情况下也能确保流动性可用性。
Curve v2 的 CryptoSwap 不变量专为波动性较大的、不相关的资产而设计。与 StableSwap 的固定Hook不同,CryptoSwap 动态调整其内部“Hook”并将流动性集中在当前市场价格附近,从而提高波动性交易对的资本效率。
crvUSD 是 Curve 的去中心化稳定币,通过存入波动性加密资产作为抵押品来铸造。其独特的 LLAMMA(借贷清算 AMM)机制可实现“软”清算,随着价格下跌,持续且逐步地将抵押品转换为 crvUSD,并在价格回升时将其买回,从而减轻传统清算的影响。
veCRV(vote-escrowed CRV)是通过限时锁定 CRV 代币获得的不可转让的投票权。它赋予三大好处:Curve DAO 中的治理权、协议费用的按比例 शेयर 以及将流动性仓位的 CRV 奖励提高多达 2.5 倍的能力。
2023 年 7 月的漏洞利用是由于 Vyper 编程语言编译器(0.2.15、0.2.16 和 0.3.0)特定版本中的潜在 bug 造成的。此缺陷阻止了重入保护(一项关键的安全功能)被正确地设置或清除,使其在受影响的池中无效。
只读重入是一种漏洞,其中可以操纵 view 函数以在合约处于瞬态、不一致状态时返回人为膨胀的价格。这可以在 Curve 的 get_virtual_price() 函数中看到。缓解措施包括通过在关键 oracle 读取之前触发合约的重入锁定(例如,调用 withdraw_admin_fees)来进行防御性编程。
价格 oracle 安全性具有挑战性,因为存在通过闪电贷操纵 AMM 现货价格的风险,这可能会在一次交易中极大地扭曲价格。强大的解决方案包括时间加权平均价格 (TWAP)、像 Chainlink 这样的去中心化 oracle 网络以及在价格源明显偏离时暂停功能的断路器。
- 原文链接: zealynx.io/blogs/curve-f...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!