稳定池的价是跟谁看的:一格换算率借来的报价链 图 1
稳定池的价是跟谁看的:一格换算率借来的报价链 · 图 1

把一种「理论一比一、实际略有价差」的资产放进稳定池,池子的曲线方程不能直接用它计价。带收益的质押凭证对基础资产有一个缓慢爬行的兑换率,把它当成一比一塞进曲线,等于每天把零点几个百分点的系统性差价错记在池子头上。所以这类池子定价前有一道预处理:把外部资产乘上一个换算率、折成基础资产单位,再喂给曲线。绝大多数事故不在曲线本身,而在这道预处理「跟谁看价」。

最省事的取数方式是直接引用另一个兑换池的即时价格:两个代币在别处有个成交活跃的池子,读那里的储备比例当换算率,成本最低、数据也最新鲜。但这等于把定价链搭成了「A 池的报价依赖 B 池的报价」的结构——B 池是个开放兑换场,任何人一笔单子都能在同一个区块里改变它的储备比例。B 池的价格不是「市场的真值」,它只是「B 池此刻库存的形状」。一条依赖别人库存形状的报价链,天生就有被人当场捏住的一天。

攻击的模板是这样的:先在 B 池里用一笔大单把兑换率朝一个方向推歪,同一个区块里,凡是引用 B 池即时价的 A 池、借贷市场或清算器都跟着歪;然后在这些下游系统里按被歪的价成交对自己有利的一笔操作——通常是用被高估的抵押凭证多借或多换,把下游池子按真实价格不该给的那部分价值抽走。事后看,攻击者付出的只是推歪 B 池的滑点成本,捞回的是整个下游网络按假价付的钱。这类结构在质押凭证相关的事故里反复出现过,2023 年就有借贷市场因为用即时池价合成抵押凭证的报价,被单块推价在关联的稳定池兑换里套走一笔的公开案例,各家的复盘把根因都指向同一个词:外部换算率的取数方式。

协议端的防线是分层搭的。最基础的是换源:不读单一池子的点价,改用时间加权平均、多池取中位、或者独立喂价网络,把「单块可控成本」抬高几个数量级。往上一层是界限检查:换算率偏离历史带太远时,池子拒绝按这个价计价,宁可暂停兑换或降级收费,这就是很多曲线池把「报价出带」与「自动钝化曲线」绑在一起的原因——曲线变钝之后,靠推换算率套走价值的滑点成本陡然上升。再往上一层是额度控制:对凭证类资产先打折再进池,把最坏偏差包进折扣里,宁可平时少换一点,不让极端时刻多亏一截。

给池子做市的人要看懂的不是防线清单,而是自己仓位同时踩在几条链上。你持有的仓位报价由曲线库存和外部换算率共同决定,前者受池内兑换影响,后者受别的池子影响;一个只监控自己池内价格带的提醒,拦不住换算率被推歪带来的错位成交。实操上值得做的三件事:搞清你的池子换算率从哪个源来、更新频率如何、有没有出带保护;大波动时段避免在数据源刚跳价的那几分钟里做兑换,那是一口价最容易失真的窗口;复核收益时把换算率漂移造成的被动换汇单独标出来——那部分不是手续费收益的对手盘,是定价链的错位成本。

最后是一个容易被语气掩盖的事实:引用别的池子的即时价,不是「不严谨」这么简单,它是把自家池子的可提价值定价权外包给了对手盘最活跃的那个场所。协议选择这条链,图的是新鲜度;付出的代价是推价风险。读协议文档时,凡是看到兑换率「取自某池当前储备比」的字样,就应当顺着去找它有没有加权、有没有界限、有没有降级模式;三样都没有的池子,它的低滑点报价里含着一份你没被告知的或有负债。

本文只做机制整理,文中的取数链、界限带与打折处理均为原理示例,不指向任何协议当前的实时参数;跨池定价存在单块报价失真、连锁清算与LP价值漏损等风险,不构成投资建议。