自动做市池看起来是一台自动机:交易进来,公式算出新余额,价格随之改变。但在这台机器内部存在两套数字,一套是合约自己账本上记录的两种代币数量,另一套是合约地址此刻实际持有的代币数量。正常情况下两者始终相等,异常情况下它们会错开,而协议准备了两个专门的维护动作来处理错开。理解这两个动作,比记住公式更能帮你判断一个池子是否健康。
差额从哪里来
第一种成因是账本没跟上。多数池子只在每次交易结束时更新记录,如果有一种方式让代币被直接转进池子地址——绕过交易函数——实际余额就比账本记录多出一块,池子的定价公式对此一无所知,价格也就不会反映这笔钱。第二种成因是记账口径本身的边界:有些实现把费用累积在池内而不是立即转换,或者在升级与迁移过程中留下尾差。
这两类差额对普通交易者有一个共同的直接后果:你按当前报价换出去的量,与池子里真正可动用的量之间存在偏差。偏差通常很小,但在极端行情和薄池子里,这个偏差足以让报价与真实可成交量对不上。

两个动作各自做什么
第一个动作是对齐账本:把合约记录的余额改写为实际持有的余额。它危险的地方也很直白——如果这笔差额来自别人误转入的资产,对齐动作就把别人的钱变成了池子的储备,从此参与交易的人都能换走它。因此这类动作通常不能由普通用户调用,只在交易执行的末尾顺带触发一次;而一些早期实现甚至在每次交易时无条件对齐,这正是需要理解的历史教训。
第二个动作是把账本外的多余代币取走,交给指定地址。它处理的是那些明确不属于定价储备的部分,例如某些实现里归集后未被领走的手续费。这个动作的价值在于确认资金归属:谁有权调用、取到的资产进谁的地址,都写死在合约里,可在链上直接读。
用户视角的三个判断
第一个判断:你不需要执行这两个动作,但需要知道它们在不在。读一个池子时,把它的合约实现类型确认清楚(不同版本的自动做市合约在这一点上处理不同),比猜测它有没有问题更有效。
第二个判断:当池子报价与行情出现持续的小偏差时,先分清是价格偏差还是储备偏差。价格偏差表现为同一资产在不同池子里报价差异,随套利收敛;储备偏差则表现为交易页面反复提示滑点过高或模拟失败,而报价看起来正常。第二种的排查方向是链上直接读该地址的代币实际余额,与池子报告的数字对比,一次比较就能定性。
第三个判断:任何要求你调用维护动作的网站、群组私信或空投页面,都需要按最高风险对待。这两个函数的执行权限和触发条件都由合约源码固定,不存在一个需要外部用户来触发的合法场景;提示你”点一下就能拿回池子里多余的钱”的页面,几乎必然是在诱导你执行别的操作。
值得一提的是,这两个动作也是审计与安全研究常引用的例子:一个设计良好的协议,会在源码里让账本更新先于外部调用完成,并把可取走资产的归属写清楚,而不是依赖事后维护。读一个陌生协议时,把这两点当作合约成熟度的粗略指标是有效的。
风险提示:使用自动做市池存在价格影响、智能合约漏洞与资金损失风险;合约实现细节随版本不同而不同,请以合约源码与官方文档为准。本文仅作机制说明,不构成投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。