深入解析AMM交易轨道:从恒定乘积到加权乘积的数学原理与应用 1. 从流动性池到交易轨道一个被忽视的数学视角如果你在DeFi领域待过一段时间肯定对AMM自动做市商不陌生。Uniswap V2的恒定乘积公式x * y k 几乎成了这个领域的“Hello World”。我们习惯了在DEX上点击“兑换”看着滑点预估然后完成交易。但你是否想过当你点击“兑换”按钮用1个ETH换取一定数量的USDC时这个价格到底是怎么算出来的更深入一步这个兑换过程在数学上描绘出了一条怎样的“路径”这条路径的性质又决定了我们最终能拿到多少代币以及池子会承受多大的瞬时价格冲击这就是“交易轨道”要回答的问题。大多数文章和文档会直接告诉你公式比如Δy (k / (x Δx)) - y。这没错但它更像是一个“黑箱”输出。作为一个在量化设计和协议分析中踩过无数坑的从业者我越来越意识到理解交易背后的连续数学过程——也就是“轨道”——至关重要。它不仅是学术上的优雅更是实战中优化交易策略、设计新AMM曲线、甚至进行套利和风险管理的基石。今天我们就抛开表面的公式深入AMM的数学腹地一起推导从最经典的对数价格轨道到更具一般性的加权乘积不变量所定义的轨道。你会发现Uniswap V2/V3、Curve的StableSwap甚至是那些新兴的AMM变体都能在这个统一的框架下找到自己的位置。2. 交易轨道的核心思想价格如何连续移动在开始数学推导前我们得先统一思想到底什么是“交易轨道”想象一下你有一个流动性池里面有x个ETH和y个USDC。池子遵循x * y k的不变式。现在你想用Δx个ETH买入USDC。一个常见的误解是池子瞬间从状态(x, y)跳到了新状态(x Δx, y - Δy)。在离散的、一次性的交易视角下这没错。但如果我们把交易想象成一个连续的过程呢比如你有一大笔钱要换为了减少滑点你把它拆分成无数个无限小的订单。那么你的这笔大交易实际上就是让池子状态沿着某条数学曲线从起点(x, y)连续地“滑动”到终点(x Δx, y - Δy)。这条曲线就是交易轨道。轨道的形状由AMM的不变式决定。对于x * y k 这条轨道就是一条双曲线。但轨道更深刻的含义在于它定义了瞬时价格如何变化。在任意一个池子状态点(x, y)上ETH相对于USDC的瞬时价格P定义为dy/dx的负值因为你要减少y来增加x即P - dy/dx。对于恒定乘积池对x*yk两边微分得到y*dx x*dy 0 所以-dy/dx y/x。看瞬时价格就是储备量比率y/x 这和我们直觉一致。所以交易轨道的数学任务就是给定一个起点(x0, y0)和一个不变式如x*yk 当我们注入dx的资产X时资产Y会减少dy 并且(x0dx, y0dy)仍然满足不变式。这个dy是多少这就是微分方程要解决的问题。而积分这个微分方程我们就得到了轨道曲线。注意这里dy是负值因为我们是在用X换取YY在减少。但在数学推导中我们通常将其视为一个微小的变化量最后通过积分确定总的Δy是负的。3. 对数价格轨道恒定乘积模型的本质让我们从最经典的恒定乘积模型x * y k开始推导它的交易轨道。这是理解所有更复杂模型的基础。我们设起点为(x0, y0) 满足x0 * y0 k。 当我们进行一个无限小的交易用dx的X换取dy的Y时新状态(x0dx, y0dy)也必须满足(x0dx)*(y0dy) k。 将左边展开(x0dx)*(y0dy) x0*y0 x0*dy y0*dx dx*dy k由于x0*y0 k 且dx*dy是二阶无穷小可以忽略我们得到x0*dy y0*dx ≈ 0这就是我们之前提到的微分关系。由此得到瞬时价格P(x) -dy/dx y0/x0在起点处 但更一般地在轨道上任意点(x, y) 有P(x) y/x。现在我们想找到y关于x的函数形式即轨道曲线。由x*y k 显然y k / x。 但这还没体现出“轨道”的动态过程。我们通过积分来展示它。从微分方程x*dy y*dx 0出发可以改写为dy/y - dx/x两边从起点(x0, y0)到终点(x1, y1)积分∫_{y0}^{y1} (1/y) dy - ∫_{x0}^{x1} (1/x) dx计算积分ln(y1) - ln(y0) - [ln(x1) - ln(x0)]ln(y1/y0) ln(x0/x1)y1/y0 x0/x1这等价于x0*y0 x1*y1 k。 这个积分过程告诉我们在交易中资产数量的对数变化量是互为相反数的。这才是关键我们定义对数价格p ln(P) ln(y/x)。 那么p ln(y) - ln(x)在交易过程中从(x0, y0)到(x1, y1) 对数价格的变化是Δp p1 - p0 [ln(y1) - ln(x1)] - [ln(y0) - ln(x0)] [ln(y1)-ln(y0)] - [ln(x1)-ln(x0)]根据上面的积分结果ln(y1)-ln(y0) -[ln(x1)-ln(x0)] 代入得Δp -[ln(x1)-ln(x0)] - [ln(x1)-ln(x0)] -2 * [ln(x1) - ln(x0)]这个式子不那么直观。我们换一个更常用的视角考虑用X换取Y的过程x增加y减少。我们关心的是当x从x0增加到x1时对数价格p移动了多少。由p ln(y/x)和y k/x 得p ln(k/x^2) ln(k) - 2ln(x)。 所以Δp p1 - p0 -2ln(x1) 2ln(x0) 2 ln(x0/x1)由于x1 x0我们买入X卖出Yx0/x1 1ln(x0/x1) 0 所以Δp 0。 这意味着用X换取Y的过程会导致对数价格p下降即X相对于Y的价格下降因为p ln(P) P是X的价格这完全符合市场规律你卖出X其价格应该下跌。实操心得理解对数价格轨道对于计算“价格冲击”非常有用。滑点通常定义为(执行价格 - 标记价格)/标记价格。而标记价格就是起点瞬时价格P0 y0/x0。执行价格是平均价格Δy/Δx注意符号Δy为负。通过对数轨道我们可以更精确地估算大额交易对价格的影响这对于做市商和大型交易者设计交易路径比如通过多个池子路由至关重要。许多专业的交易分析工具背后都在进行类似的计算。4. 迈向一般化加权乘积不变式及其微分方程恒定乘积模型虽然优美但滑点太大尤其不适合稳定币这类价格锚定资产。于是人们开始思考更一般的形式。加权乘积不变式Weighted Product Invariant就是一个强大的推广它也是许多高级AMM如Balancer V1的数学核心。加权乘积不变式的一般形式为x^w_x * y^w_y k其中w_x和w_y是大于0的权重k是常数。当w_x w_y 1时它就退化为了标准的恒定乘积公式。这个不变式如何影响价格和轨道呢我们同样从微分入手。对等式两边取自然对数线性化处理w_x * ln(x) w_y * ln(y) ln(k)现在对两边进行微分k是常数微分为0w_x * (dx/x) w_y * (dy/y) 0这个微分方程描述了在任意无限小交易下两种资产数量变化率必须满足的关系。由此我们可以解出瞬时价格P。 回顾P -dy/dx用X换Y。 由上面的微分方程w_y * (dy/y) -w_x * (dx/x)dy - (w_x / w_y) * (y/x) * dx因此瞬时价格为P(x, y) -dy/dx (w_x / w_y) * (y/x)看这与恒定乘积模型的价格公式y/x相比多了一个系数(w_x / w_y)。 这个系数就是权重比。它意味着你可以通过调整权重来改变资产在池子中的“价值占比”或“定价影响力”。例如如果设置w_x 2w_y 1 那么即使y/x 1 价格P也会是2。 这相当于放大了资产X的价值权重。为什么这样设计这给了流动性提供者LP巨大的灵活性。在Balancer池中你可以创建一个包含多种资产、且每种资产目标权重不同的投资组合。池子会自动通过这个定价公式进行再平衡。当某资产价格上涨导致其在池内价值占比超过目标权重时它的相对价格相对于其他资产在池内就会变低激励交易者买入该资产使其数量减少价值占比回归目标。这是一个内置的自动再平衡机制。5. 加权乘积模型下的交易轨道推导有了微分方程我们就可以推导加权乘积模型的交易轨道了。我们想找到从起点(x0, y0)开始当x变化到x1时y会变化到多少y1 并且整个路径满足x^w_x * y^w_y k。我们从对数形式的微分方程出发w_x * (dx/x) w_y * (dy/y) 0这可以方便地分离变量w_y * (dy/y) -w_x * (dx/x)两边同时积分从起点(x0, y0)积到轨道上任意点(x, y)∫_{y0}^{y} w_y * (1/y) dy - ∫_{x0}^{x} w_x * (1/x) dxw_y * [ln(y) - ln(y0)] -w_x * [ln(x) - ln(x0)]ln((y/y0)^{w_y}) ln((x0/x)^{w_x})因此我们得到轨道方程(y / y0)^{w_y} (x0 / x)^{w_x}或者写成更对称的形式x^{w_x} * y^{w_y} x0^{w_x} * y0^{w_y} k这个轨道方程描述了状态(x, y)必须满足的关系。为了更清楚看到y如何随x变化我们可以解出yy y0 * (x0 / x)^{w_x / w_y}让我们对比一下恒定乘积轨道y k / x y0 * (x0 / x)。 加权乘积轨道多了一个指数w_x / w_y。 这个指数决定了轨道的“弯曲程度”。如果w_x / w_y 1即X权重更高那么(x0/x)的指数大于1。当x增加时(x0/x)变小因为x x0 一个大于1的指数会让这个值变得更小从而导致y下降得比恒定乘积情况更快。这意味着用权重高的资产X去换取权重低的资产YY的数量会急剧减少滑点很大。这符合直觉你想从池子里拿走更多价值权重低的资产就需要付出更多价值权重高的资产。如果w_x / w_y 1即Y权重更高结论相反用X换Y会更“划算”滑点较小。如果w_x / w_y 1 就回到了恒定乘积模型。实操中的坑在为一个多资产加权池设置权重时必须非常小心。权重不仅代表了资产的目标价值比例更直接定义了交易轨道和滑点曲线。如果你错误地将一个低流动性、高波动性的资产设置了过高的权重那么当有人试图用该资产兑换其他资产时轨道会非常陡峭滑点极大可能导致交易失败或付出极高成本。相反如果权重设得过低该资产很容易被“买光”。通常权重需要根据资产的波动性、流动性和期望的池子平衡状态来综合设定。6. 从轨道到执行价格计算实际兑换率理解了轨道我们最终要落地到交易者最关心的问题我投入Δx 到底能拿到多少Δy对于加权乘积模型x^{w_x} * y^{w_y} k 已知起点(x0, y0) 投入Δx后x1 x0 Δx。 我们需要找到y1 使得(x1)^{w_x} * (y1)^{w_y} k。由轨道方程(y1 / y0)^{w_y} (x0 / x1)^{w_x} 可得y1 y0 * (x0 / x1)^{w_x / w_y}那么我们能得到的Δy为Δy y1 - y0 y0 * [ (x0 / x1)^{w_x / w_y} - 1 ]注意Δy是负值因为我们得到了Y池子里的Y减少了|Δy|。交易者得到的Y数量是-Δy。执行价格平均价格就是总产出除以总投入(-Δy) / Δx。 这个价格一定比交易前的瞬时价格P0 (w_x/w_y)*(y0/x0)要差除非交易量无限小差额就是滑点。让我们用一个具体例子来感受一下权重的影响。假设一个ETH/USDC池初始状态x0 100 ETHy0 200,000 USDC初始价格1 ETH 2000 USDC。场景A恒定乘积权重1:1w_x 1w_y 1。 瞬时价格P0 (1/1)*(200000/100) 2000。 用户投入Δx 10 ETH。x1 110。y1 200000 * (100/110)^{1} ≈ 181,818.18 USDCΔy ≈ 181818.18 - 200000 -18181.82 USDC用户得到约18181.82 USDC 执行均价18181.82 / 10 ≈ 1818.18 USDC/ETH。 滑点约为(2000-1818.18)/2000 ≈ 9.09%。场景B加权乘积权重2:1w_x 2w_y 1ETH权重高。 瞬时价格P0 (2/1)*(200000/100) 4000 USDC/ETH。 注意由于ETH权重加倍其在池内的“定价”被抬高了。 用户同样投入Δx 10 ETH。x1 110。y1 200000 * (100/110)^{2/1} 200000 * (100/110)^2 ≈ 165,289.26 USDCΔy ≈ 165289.26 - 200000 -34710.74 USDC用户得到约34710.74 USDC 执行均价34710.74 / 10 ≈ 3471.07 USDC/ETH。 滑点相对于瞬时价格4000为(4000-3471.07)/4000 ≈ 13.22%。对比发现在投入相同ETH的情况下权重高的池子给出了更高的执行价格3471 vs 1818但滑点也更大13.22% vs 9.09%。这是因为高权重放大了价格影响。对于交易者而言如果你想卖出高权重的资产你会获得一个更“好”的价格因为池子认为它更值钱但大额交易时价格恶化得也更快。提示在实际的Balancer池中权重通常归一化使得所有权重之和为1。例如一个80%/20%的ETH/USDC池w_x0.8w_y0.2。 价格公式变为P (0.8/0.2)*(y/x) 4*(y/x)。 推导过程完全一致只需将w_xw_y替换为归一化后的权重即可。7. 超越加权乘积广义不变式与轨道形态的探索加权乘积模型x^w_x * y^w_y k虽然比恒定乘积更通用但它仍然属于“乘积”类不变式。它的轨道方程y C * x^{-w_x/w_y}C为常数是一个幂函数。在数学上这描述了一条等弹性Constant Elasticity曲线。这里的“弹性”指的是价格变化率相对于数量变化率的敏感度。对于加权乘积模型这个弹性是常数等于权重比的倒数w_y/w_x。但AMM的世界不止于此。为了在稳定币交易极低滑点和波动性资产交易需要足够的流动性深度之间取得平衡人们发明了更复杂的不变式。最著名的就是Curve的StableSwap它本质上是恒定乘积和恒定加和的混合。其不变式可以简化为A * (x y) (x * y) D * (A 1)其中A是一个放大系数D是储备量之和的某种度量。当A→0时它退化为恒定乘积x*y D^2/4当A→∞时它趋近于恒定加和xy D。恒定加和轨道是一条直线滑点为0在池子耗光前但这只在价格严格1:1时可行。StableSwap的轨道介于直线和双曲线之间。在价格锚定区如0.999-1.001它的曲线非常平坦近似直线提供极低滑点当资产价格偏离锚定区越来越远时曲线越来越像双曲线以应对巨大的套利压力并防止池子枯竭。这种轨道的数学推导更为复杂通常需要求解一个关于x和y的二次或高次方程。设计心得设计一个AMM不变式本质上就是在设计其交易轨道的形状。你需要问自己目标资产对的价格关系是什么是锚定的还是自由浮动的你希望流动性集中在哪个价格区间像Uniswap V3那样通过区间集中流动性本质上就是改变了轨道的有效部分。你希望滑点曲线是怎样的是希望小交易量时滑点极低大交易量时滑点急剧上升还是希望滑点变化更平缓例如Uniswap V3的“浓缩流动性”可以看作是在一个全局的恒定乘积轨道上只取其中一段[Pa, Pb]作为有效轨道。当价格移动到这个区间外时其中一种资产会完全耗尽轨道失效。这实际上是通过外部参数价格区间对基础轨道进行了裁剪。8. 轨道分析的实际应用策略与风险管理理解了交易轨道的数学我们能做什么以下是几个直接的实战应用1. 最优拆单路由计算当你有一笔大额交易时直接在一个池子里完成可能滑点巨大。你可以选择拆分成多笔小交易或者通过多个不同的池子可能具有不同的权重或曲线进行路由。如何找到最优路径这需要你计算每条可能路径每个池子对应一段轨道的最终产出。这通常转化为一个优化问题在满足各个池子不变式约束的条件下最大化最终产出资产。许多DEX聚合器如1inch、ParaSwap的核心算法就在干这件事它们需要快速计算不同路径沿不同轨道的积分结果。2. 流动性提供LP的“无常损失”量化无常损失本质上就是由于外部市场价格变动导致LP资产在池内与单纯持有所产生的价值差异。从轨道视角看当市场价格从P0变为P1时套利者会通过交易将池子价格推到P1。这个套利过程就是池子状态沿轨道从旧平衡点(x0, y0)移动到新平衡点(x1, y1)的过程。新点满足y1/x1 P1且仍在轨道x*yk或更一般的曲线上。通过联立这两个方程可以解出x1y1 进而计算LP资产价值与持有价值的比值。对于加权乘积池无常损失公式是权重和价格比的函数其推导完全依赖于轨道方程。3. 自定义AMM曲线设计如果你想为一个特定场景如期权交易、预测市场设计一个AMM你需要首先定义你希望的价格-数量关系。例如你可能希望某个资产的价格在某个数量区间内几乎不变像阶梯函数这对应着一段近乎垂直/水平的轨道。然后你需要反向推导出能满足这种轨道形状的不变式。这通常涉及求解一个微分方程给定价格函数P(x) -dy/dx 以及一个初始条件求x和y的关系F(x, y)k。 这是一个反问题但轨道思维为你提供了明确的设计起点。4. 仿真与压力测试在部署一个新的流动性池或调整参数如Balancer的权重之前可以通过轨道方程进行大量的仿真测试。模拟在各种市场情景大额买入/卖出、价格剧烈波动下池子储备的变化、滑点的变化、以及LP的无常损失情况。这比盲目上线要稳妥得多。我自己的经验是至少要用历史数据或极端假设跑通上千次模拟观察池子是否会经常出现一种资产接近耗尽的情况或者滑点是否在可接受范围内。最后我想强调的是交易轨道这个数学结构是将AMM从“魔法黑箱”变为“可计算引擎”的关键。它不仅仅属于研究人员每一个认真的DeFi参与者——无论是交易员、流动性提供者还是协议开发者——都应该对其有直观的理解。下次当你进行交易时不妨在脑海中想象一下那个代表池子状态的点正沿着一条美丽的数学曲线滑行而你付出的滑点就是为这条曲线的曲率所支付的“通行费”。理解这条曲线的形状你就能更好地预测费用并找到更优的通行路线。