本文分析了 Curve StableSwap-NG 中预言机驱动的重定标机制,该机制旨在使池与链下价格紧密对齐。文章探讨了重定标背后的数学原理、价格对齐方式以及内置的局限性。同时,强调了理解预言机驱动调整对于与此类池交互至关重要,并提出了在存在高波动预言机的情况下,通过引入波动率响应费用来缓解潜在风险。
摘要
Curve 的 StableSwap-NG 在原始的稳定资产 AMM 的基础上进行构建,并进行了一项关键的增强:当外部预言机更新其公允价值时,交易对中的一种代币可以在链上进行重新调整。此功能有助于池子与链下价格保持紧密一致,从而带来流畅而高效的交易体验。
但是,重要的是要了解这种机制引入了某些操作约束。由于价格调整取决于预言机更新,因此并非所有代币都适合此类池子。使用波动性大的资产可能会导致意外的行为、效率低下、损失或交易失败。
本文重点在于理解重新调整背后的数学原理、价格对齐的工作方式以及 StableSwap-NG 的内置限制。通过探索这些机制,我们强调了在与此类池子互动时,清晰理解预言机驱动调整的重要性,以及协议的设计如何在适当的条件下确保稳定性和高效定价。
介绍
当 MixBytes 在文章 “现代 DEX,它们是如何制造的:Curve StableSwapNG” 中分析 StableSwap-NG 时,重点是其关键创新之一:通过将池子的一侧乘以预言机驱动的系数,不变量始终以一致的货币单位计算储备金。在与Hook汇率接近时,交易几乎变得平缓;流动性提供者收取稳定的费用;交易者体验到最小的滑点。这是一个干净、优雅的设计。
但是,虽然很小,但这种机制需要池子部署者仔细考虑。由于重新调整系数可以根据预言机更新动态变化,因此每次调整实际上都会在池子内引入价格变动。如果配置正确,这将提供准确的定价和流畅的交易。但是,如果预言机的波动性很大、不可靠或与所选的代币对不匹配,则该设计可能会导致意外的定价影响或效率低下。
在以下章节中,我们将探讨重新调整系数如何与不变量相互作用,解释何时以及为何会发生价格更新,并概述安全部署池子的关键最佳实践。理解这些机制有助于确保 StableSwap-NG 实现其预期的好处:高效、低滑点的交易,同时避免可能创建不稳定或不安全交易环境的配置。
2. 预言机的“汇率因子”如何直接影响交易价格
StableSwap 池子通过混合两个熟悉的曲线来保持价格接近平价:在Hook汇率处是一个平坦的恒定总和形状,而在更远处是恒定乘积的双曲线。对于两种代币,这种混合由一个三次方程捕获
(1)
其中
x 和 y 是以相同货币单位衡量的池子余额,
A 是放大参数,用于展平或加陡Hook汇率附近的曲线,
D 是一个“虚拟流动性”根,每次储备金变化时都会重新计算,但在单个交易期间被视为常数。
2.1 将外部价格引入链上
如果一种代币是包装代币,例如 wstETH、rETH、收益金库份额,则池子应将该余额乘以从外部预言机获取的汇率因子,将其转换为另一种代币的基础货币。象征性地,
(2)
其中
B₀ , B₁ 是链上代币余额,p 是最新的预言机报价。当预言机移动时,keeper 的交易会更新 p ;没有代币离开合约,但从价值角度来看,池子的一侧刚刚发生了变化。
2.2 不变量如何处理新值
因为 x 和 y 现在共享单位,所以只有在重新计算根 D 之后,不变量 (1) 才在 keeper 写入后保持有效。该重新计算发生在同一交易中,因此池子会立即重新定位到其曲线上的一个新点。在一毫秒后到达的交易者面临不同的交易价格,即使没有人存入或提取流动性。
2.3 封闭形式的交易价格
要准确了解汇率因子是如何传递的,请在保持 D 固定不变的情况下,为无穷小的交易区分不变量。价值单位的斜率是
(3)
撤消方程 (2) 的缩放(记住,一个单位的代币 1 携带 p 单位的价值),你将获得链上汇率
(4)
交易者看到的一切都明确地依赖于 p。将预言机报价提高百分之一,并且——当 A 很大以至于 AD≫B₀ 时——(4)的分母增长相同的百分之一,而分子几乎没有变化。因此,池子几乎完全将每单位代币 0 支付的代币 1 的数量降低了百分之一。
2.4 灵敏度一览
从数学上讲,池子价格相对于预言机的百分比弹性为
(5)
在高放大池子中,其中 AD 超过原始余额几个数量级,弹性接近 –1。交易价格与预言机锁定。在低放大设置中,或者当储备金严重不对称时,AD 不再占主导地位,弹性减小到零——曲线本身会抑制冲击。
下一节使用这种关系来展示交易者如何在精确的时间安排下,在 keeper 更新之前立即购买,并在之后立即出售,从而捕获 (4) 隐含的整个跳跃。重要的是要注意,这种情况只有在池子配置不佳时才有可能,特别是,当它依赖于其中一种资产的高度波动或不合适的预言机时。通过正确选择、稳定的预言机和良好匹配的代币,不会出现此类机会,从而确保池子按预期运行。
3. 为什么提高固定费用不能抵消预言机三明治攻击
该攻击只需要两次常规交易。
由于往返成本大约为 0.06%,因此任何大于(例如,0.065%)的预言机跳跃都会在扣除 gas 和小费后直接转化为利润。这就是为什么部署者必须仔细理解重新调整机制如何与预言机更新交互,并深思熟虑地为这些池子选择资产。选择稳定、良好关联的代币和可靠的预言机有助于防止创建可预测的价格变动能够实现盈利套利的情况,从而确保池子保持高效和安全。
一种自然的防御方法是提高固定费用:例如,每次交易永久性的 0.30% 将往返成本提高到 0.60%,即使是百分之一的预言机变动也变得不那么有吸引力。
在实践中,这种疗法会损害池子本身。
大多数预言机更新的移动幅度小于 0.05%。
对每笔交易收取六倍的费用会将常规交易量推向更便宜的场所。
诸如 wstETH 或 rETH 之类的包装质押资产每年仅增长 3-4%,每天大约增长 0.008%。0.30% 的单笔交易会抹去一个多月的质押收入,从而削弱了流动性提供者的积极性。
固定费用应该奖励 LP,而不是约束短暂的波动峰值。
为了阻止三明治攻击而不惩罚诚实的流量,池子需要一个单独的保护措施——该保护措施仅在预言机跳跃较大时启动,并在条件恢复正常后迅速消失。
4. 为什么失衡附加费未能赶上预言机跳跃
StableSwap-NG 确实具有一项自适应收费:随着原始余额逐渐趋于分离而增长的附加费。对于普通交易而言,这种逻辑是合理的;如果交易从一侧提取的代币太多,则额外的费用会阻止进一步的失衡。不幸的是,keeper 的预言机更新根本不会触及余额;它只会改变它们的估值。因此,池子在写入汇率之前和之后看起来都是完全对称的,因此附加费保持在最低水平。
攻击者的两次交易同样避开了触发器。首次购买仅使余额倾斜了很小的一部分,远低于外部费用阈值,而几秒钟后的平仓销售几乎完全恢复了原始计数。即使在第一条腿确实越过阈值的不太可能的情况下,最大附加费也仅为百分之几——与高放大池子中百分之一的预言机跳跃相比,微不足道。简而言之,附加费衡量的是代币,而真正的问题在于价格,而这两者永远不会相交。除非稍后提出的诸如对波动性敏感的费用之类的附加机制介入以吸收冲击,否则 LP 只能买单。
5. 具有线性衰减的对波动性敏感的费用
固定费用必须保持较低水平才能使 StableSwap-NG 保持竞争力,但是失衡附加费无法看到纯粹的价格冲击。通常,Curve StableSwap-NG 池子不适合与仅依赖于高度波动的预言机的代币对一起使用。但是,我们决定探索一种潜在的解决方案,以解决有人选择创建需要预言机的池子的情况,该预言机可能会引入大于 0.06% 的价格变化。池子需要的是一个断路器,该断路器仅在预言机本身跳跃时才打开:有针对性、可预测且具有成本效益。
机制
1. 冲击检测
每次 keeper 调用都会提供新的汇率 p new。
合约将其与先前的值 p old 进行比较。
如果相对变化 |p new −p old |/p old 超过噪声带(例如,0.10%),则该偏差
与当前区块时间 t ₀ 一起存储。
2. 额外价差
更新后,池子立即设置
其中 α≈1(或者可以是 σ ₀ 的简单函数)。
因此,0.1% 的预言机跳跃从 0.1% 的附加费开始。
3. 线性衰减
选择衰减窗口 T(例如,3 600 秒)。
对于时间 t≥t ₀ 的交易:
T 秒后,附加费达到零,并保持在该水平,直到下一次较大的预言机移动。
4. 交易者的成本
每笔交易支付
在 1 % 跳跃的示例中,额外费用从 1% 开始,在窗口中间下降到 0.5%,并在一个小时后消失。常规交易很快恢复到通常的 0.03%。
只有三个值存储在存储中:最后汇率、存储的额外费用及其时间戳。Keeper 更新写入一次;交易只需读取并执行两次减法加上一次乘法——最小的额外 gas。
因此,线性衰减的、波动性意识的费用在平静的市场中保持了 StableSwap-NG 的低费用,同时将突然的预言机收益返还给流动性提供者——仅使用基本数学和最小状态。
结论
StableSwap-NG 使预言机Hook池子与外部价格紧密对齐,但相同的机制会将每个预言机震动直接传递到曲线中。当放大参数较大时,池子几乎以一对一的方式复制 ±0.2% 的预言机移动,同时对每条腿仅收取其基本费用。我们针对股票 NG 模板的单元测试表明,交易者围绕 keeper 更新进行两次普通交易可以获得比费用支出大一个数量级的价差——即使池子没有记录任何代币计数不平衡。
提高固定费用将关闭漏洞,但代价是不可接受的:日常交易将变得不具竞争力,并且少数交易可能会消耗掉吸引流动性提供者的年度质押收益的很大一部分。由于费用计划旨在奖励 LP,而不是约束波动性,因此将其与最坏情况的预言机冲击联系起来会适得其反。
更清洁的补救措施是对波动性敏感的附加费:
因此,三明治攻击的往返成本从“基本费用的两倍”增加到“基本费用的两倍加上预言机跳跃本身”,消除了经济激励,同时在平静恢复后,普通交易在很大程度上保持不变。
池子部署者的建议措施
1. 分析预言机行为。
如果典型的更新超过基本费用的两倍,请在池子上线之前实施附加费。
2. 谨慎设置参数。
在回溯测试中,大约 0.10% 的触发阈值和一个小时的衰减窗口已被证明是有效的。
3. 审计和模拟。
通过公式运行历史预言机数据,以确保附加费仅在应该触发时才触发。
此轻量级保护按池子逐个实施,保留了 StableSwap-NG 的标志性低价差,同时将突然的预言机收益返还给提供资金的流动性提供者。
最后的说明
如果使用良好匹配的代币和可靠、稳定的预言机正确配置了池子,则流动性提供者没有额外的风险。但是,如果为需要波动性预言机的不匹配代币创建了池子,则存在无法通过当前的 StableSwap-NG 实施完全缓解的风险。处理此类情况需要更高级的机制和更深入的架构方法。
MixBytes 是一支由专家区块链审计师和安全研究人员组成的团队,专门为 EVM 兼容和基于 Substrate 的项目提供全面的智能合约审计和技术咨询服务。在 X 上加入我们,及时了解最新的行业趋势和见解。
- 原文链接: mixbytes.io/blog/safe-st...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!