第3章:恒定乘积做市商模型:x*y=k公式推导、滑点与深度曲线、流动性池的定价逻辑、无常损失的概念引入

3.1 从零推导 x*y=k:一个简单的数学奇迹

各位同学,今天我们来聊聊DeFi世界里最经典的做市模型——恒定乘积做市商。说白了,就是那个让Uniswap一战成名的公式:x * y = k

这个公式看起来简单到令人发指,对吧?我第一次看到它时,心里想的是:「就这?一个初中数学公式能撑起几百亿的流动性?」嗯,后来我被打脸了。越简单的东西,往往越难真正理解透彻。

咱们先来推导一下。假设一个交易对,比如ETH/USDC。池子里有x个ETH,y个USDC。交易的本质是什么?你往池子里塞一种资产,同时从池子里抽出另一种资产。交易前后,乘积保持不变。

核心公式:

交易前:x * y = k

交易后:(x + Δx) * (y - Δy) = k

其中Δx是你存入的ETH数量,Δy是你得到的USDC数量。

举个例子。假设池子里有10个ETH和20,000个USDC。那么k = 10 * 20,000 = 200,000。你想用1个ETH换USDC。交易后,ETH变成11个,那么USDC必须变成200,000 / 11 ≈ 18,181.82个。所以你得到的USDC是20,000 - 18,181.82 = 1,818.18个。

注意,这里有个关键点:你得到的USDC不是简单的2000个。为什么?因为你的交易改变了池子的比例,从而改变了价格。这就是滑点的来源。

3.2 滑点与深度曲线:为什么大额交易总是吃亏

滑点,说白了就是你实际成交的价格和预期价格之间的差距。在x*y=k模型里,滑点是不可避免的,而且交易量越大,滑点越严重。

为什么会这样?我们来看滑点的数学表达。

假设当前池子状态为(x, y),你想买入Δx个ETH。你实际支付的价格是:

价格 = Δy / Δx = (k / (x + Δx) - y) / Δx

这个公式看起来有点复杂,但我们可以简化一下。当Δx很小时,价格约等于y/x,也就是当前市场价格。但当Δx变大时,价格会显著偏离。

我个人习惯用一个指标来衡量滑点:滑点率 = (实际价格 - 当前价格) / 当前价格。这个值越大,说明你的交易越不划算。

避坑指南:我曾经在某个项目里看到有人用1%的滑点容忍度去交易一个流动性很差的代币,结果实际滑点达到了15%。嗯,那笔交易亏得很惨。所以我的建议是:交易前一定要看深度曲线,别只看当前价格。

深度曲线是什么?其实就是把不同交易量对应的滑点画成一条曲线。你想想看,如果池子深度足够大,曲线就会很平缓,大额交易也不会产生太大滑点。反之,如果池子很浅,曲线就会很陡峭,稍微大一点的交易就会造成巨大滑点。

这里我画了一张图,帮你直观理解深度曲线和滑点的关系:

深度曲线与滑点关系示意图 交易量 (Δx) 滑点率 深度大(平缓) 深度小(陡峭) 大额交易 小额交易 浅池 深池

从这张图可以清楚看到:同样的交易量,在浅池里造成的滑点远大于深池。所以做市商的核心工作之一,就是提供足够的深度,让交易者能以合理的价格成交。

3.3 流动性池的定价逻辑:价格是如何被发现的

很多人以为x*y=k模型里的价格是「定」出来的。其实不是。价格是「算」出来的,而且每时每刻都在变化。

定价逻辑其实很简单:价格 = 池子中两种资产的数量比。具体来说,ETH的价格 = USDC数量 / ETH数量。

回到刚才的例子:10个ETH和20,000个USDC,ETH的价格就是20,000 / 10 = 2,000 USDC。当你用1个ETH换走1,818.18个USDC后,池子变成11个ETH和18,181.82个USDC,ETH的价格变成18,181.82 / 11 ≈ 1,652.89 USDC。

你看,价格从2,000跌到了1,652.89,跌了约17.4%。这就是你的交易对价格产生的影响。

关键洞察:在x*y=k模型里,每一次交易都在重新发现价格。池子越浅,价格发现越剧烈。这也是为什么做市商需要提供大量流动性——不是为了赚手续费,而是为了稳定价格。

我记得有一次在开发一个AMM协议时,团队里有人问:「为什么我们不直接用一个固定的价格公式,非要搞这么复杂的动态定价?」我的回答是:固定价格意味着做市商要承担无限风险。x*y=k的好处是,无论市场怎么波动,池子永远不会枯竭——价格会一直调整,直到找到新的平衡点。

3.4 无常损失:做市商最大的敌人

好了,现在我们来聊聊做市商最头疼的问题——无常损失。这个词听起来很学术,但说白了就是:你提供流动性赚的手续费,可能还比不上你直接持有资产赚的多。

为什么会这样?因为x*y=k模型强制你做「高买低卖」。

想象一下:你往池子里存了1个ETH和2,000个USDC,当时ETH价格是2,000 USDC。如果ETH涨到4,000 USDC,套利者会进来把ETH买走,直到池子里的ETH价格重新等于市场价格。最终,你的池子份额会变成0.707个ETH和2,828个USDC(具体数字取决于公式计算)。

你算算看:如果你什么都没做,直接持有1个ETH和2,000个USDC,总价值是1 * 4,000 + 2,000 = 6,000 USDC。但你在池子里的份额价值是0.707 * 4,000 + 2,828 = 5,656 USDC。你亏了344 USDC,这就是无常损失。

注意:无常损失不是真正的「损失」,而是「机会成本」。只要你不撤出流动性,这个损失就是「无常」的——如果价格回到原来的水平,损失就消失了。但如果你在价格偏离时撤出,损失就变成「永久」的了。

我曾经在2021年牛市里看到一个项目,它的流动性池里ETH涨了5倍,结果做市商们亏得哭爹喊娘。嗯,那段时间我收到好多私信问「为什么我提供流动性反而亏钱了?」——这就是无常损失在作祟。

这里我整理了一个表格,帮你直观理解不同价格波动下的无常损失:

价格变化幅度 无常损失比例 举例说明
±10% 约0.5% ETH从2000涨到2200,损失约0.5%
±25% 约2.0% ETH从2000涨到2500,损失约2%
±50% 约5.7% ETH从2000涨到3000,损失约5.7%
±100% 约20.0% ETH从2000涨到4000,损失约20%
±200% 约40.0% ETH从2000涨到6000,损失约40%

看到没?价格波动越大,无常损失越恐怖。所以我的建议是:如果你预期某个资产价格会剧烈波动,就别去提供流动性。老老实实拿着现货,比什么都强。

个人经验:我一般只在稳定币对(比如USDC/DAI)或者波动较小的资产对(比如ETH/stETH)上提供流动性。对于MEME币或者新项目,我宁愿去挖矿也不做市——因为无常损失分分钟吃掉你的手续费收益。

好了,这一章的内容就到这里。x*y=k模型虽然简单,但背后涉及的滑点、深度、定价逻辑和无常损失,每一个都是做市商必须深刻理解的概念。下一章我们会深入探讨如何优化做市策略,减少无常损失的影响。


公众号:蓝海资料掘金营,微信deep3321