一根假价格骗走一比一池子:稳定池失衡攻击怎么把币换空 图 1
一根假价格骗走一比一池子:稳定池失衡攻击怎么把币换空 · 图 1

稳定币互换池是 DeFi 里给人安全感最强的一类设施:几币同锚,进出都按一比一,滑点小得像没有。也正因为这份直觉,它的攻击方式很少有人能一句话讲清:没人盗币,没有人被清算,池子只是被人用一笔假价格「调了个秤」,然后按调过的秤提走了货。这类打法通常被称为失衡攻击,它赌的不是合约漏洞,而是稳定池对链上余额的无条件信任。

先讲清楚稳定池的记账直觉。以乘积池做对照:恒定乘积公式让池内价格完全由两种币的数量比例决定,谁把一边砸偏,价格立刻偏给你看。稳定池换了个形状:在接近平衡的区间里曲线刻意做平,让一比一兑换几乎不吃滑点,越往失衡方向走才越陡峭。这个设计让日常换币便宜,但留下一个软肋——池子自己看不见外面的世界,它只知道两种币的余额比例,并把余额比例当成价值比例。

攻击的三步走法是这样的。第一步,操纵参照价:攻击者用闪贷在外部市场集中卖出或砸偏某一侧稳定币的现货价,或者让上游喂价短暂失真,池子里的余额却分文未动——此刻外面的价格说「A 币贬了」,池子的秤却说「没这回事」。第二步,利用免检窗口:许多池的存款、取款接口只做余额校验,不查外部价格,攻击者在混乱窗口里用被砸低的 A 币大量存入或做小额高频调仓,把池内比例推向失衡一侧。第三步,按错误的汇率兑现:稳定池的累计价值(虚拟价格)设计上是靠套利者逐步修正的,窗口期内它仍停在被蒙骗的水平,攻击者把币换回并重取余额,拿走的就是被低估的那一侧的超额份额,留给池子一个必须靠后续修正才能消化掉的失衡。

为什么放大的偏偏是稳定池?因为它默认「两边一样值钱」,失衡区间内的边际价格远低于真实价值差时,每一次「看似平价」的进出都在吃差价。乘积池里价格跟着数量走,欺骗窗口极短;稳定池里价格跟着形状走,失衡越深,秤砣失灵得越久。放大系数越大,浅失衡区越平,被蒙的窗口反而越长。

防线也因此集中在「让池子看见外面」。第一条:给存取款加外部价格校验,偏离合格区间就拒绝或改走惩罚性费率;第二条:用随失衡程度上升的交易费(失衡费)把窗口内套利的成本抬起来;第三条:极端时段直接暂停存取,给参数修正争取时间;事后层面,许多协议用收益池补贴被污染的汇率,再补上治理投票的权限收紧。这些机制的软肋是共同的:校验源本身也是预言机,操纵成本更贵的价格源只是抬高门槛,不是关死门。

作为存币方,你能自查的东西很有限但值得看完:这个池的存款有没有价格校验、校验源是谁;当前池子离平衡多远、失衡费曲线长什么样;最近有没有治理提案改过存取款参数。如果答案都在「以官网为准」里,至少确认官网文档确实写过这些参数,而不是页面空白。

从流动性提供者视角回看,失衡攻击在账面上的样子很特别:攻击结束那一刻,池子份额的兑换率曲线会跳一个与行情无关的台阶,TVL 却几乎不动——币没有少,只是同样的币被重新标了价。这也是 LP 事后核验的关键线索:把份额对应资产数量的历史序列与外部价格时间线对齐,跳变发生在哪一分钟、当时池价与外部价的裂口多宽,两组数据交叉就能定位损失到底来自行情还是来自机制被利用。赎回本身不追溯,费用机制也不补偿既成稀释,这就是为什么防线全部前置在校验与费率上。

本文只拆解机制,文中的攻击路径为原理演示,不指认任何具体历史事件的责任与损失规模;稳定池存在汇率失真、参数变更与校验源被操纵的风险,不构成投资建议。

一根假价格骗走一比一池子:稳定池失衡攻击怎么把币换空 图 2
一根假价格骗走一比一池子:稳定池失衡攻击怎么把币换空 · 图 2