作者:Leo Liu, Guangwu Xie

翻译:Vanessa Cao

校对:Leo Liu, Guangwu Xie

排版:Jane Hu

感谢:Fangyuan Zhao, Showen Peng, DW, Lianxuan Li, Dave White, Dan Robinson, Vanessa Cao, Jane Hu

本文总共分为中篇阐述自动做市商算法、现状及未来迭代的思考,本文为下篇。

目录

16. 为 Curve V2 设计更好的动态权重

17. 当价格函数为非解析时应用价格范围

18. Clipper:针对小额交易优化的 AMM 算法

19. TWAMM:针对大额长期订单优化的 AMM 算法

20. TWAMM 在恒定乘积做市商 (CPMM) 和对数市场评分规则 (LMSR) 上的应用

21. TWAMM 在 YieldSpace 等与时间相关的 AMM 上的应用

22. 结论和未来工作

为 Curve V2 设计更好的动态权重:

γ值

Curve V2 中,有一个常数称为

γ

如果我们也让它动态化,会发生什么?

例如,我们可以使它成为

K0

的函数。

最简单的情况是使其等于

K0

这里的动机是让函数在接近平衡点时表现得更像 StableSwap,当函数远离平衡点时,使其更像 CPMM。

紫色虚线曲线位于 StableSwap 和小 γ 值曲线之间,应该为我们提供 StableSwap 和Curve V2 之间的做市商函数。然而,当我们绘制做市商函数时,它的图像跟 StableSwap 很相似:

‍‍

这个问题有两种解决方案:1. 使A 更小 2. 选择K0 的较高幂数来表示γ。两者似乎都是可行的, 然而 1. 破坏了 A 作为一个大数的目的:使做市商函数与价格锚定。我们进行的进一步测试似乎表明,更改 A 不会对函数行为产生影响(更改 A 后做市商函数仍然看起来像 StableSwap)。

第二种解决方案会使gas费用更高。K0 的更高次幂数对应于我们需要求解的更高阶多项式方程。事实上,Curve V2 选择动态权重 K 的特定形式的原因是为了模拟大指数K0 的函数行为,同时不使多项式的阶数更高。

有趣的问题是:我们能否找到一个更好的动态权重来简化我们需要求解的方程,同时保持与 Curve V2 相同或更好的功能?在设计这样的动态权重时,我们还必须记住,我们需要在小滑点和做市商函数对预知市场未来的大订单做出反应的能力之间保持平衡。显然,只有价格锚定的 StableSwap 在这方面是行不通的,因为如果锚定价格与市场价格不同,几乎所有的代币都会被买断。只有在保持这种平衡的情况下,价格重锚才可行。

当价格函数为非解析时应用价格范围:

我们可以将价格范围概念应用于Curve V2。由于没有关于池中代币数量的价格解析表达式,我们需要拟合价格和代币数量之间的关系。应用于做市商函数的偏移量由价格范围决定。编写这样的程序可以使资本效率更高。

Clipper:针对小额交易优化的 AMM 算法:

Clipper¹³

使用最适合小额交易需求的 AMM 算法。它将恒定乘积做市商 (CPMM) 和恒定总和做市商 (CSMM) 概括为两个极端情况(k = 1 和 k = 0)。

Clipper¹³:New Invariants for Automated Market Makinghttps://github.com/shipyard-software/market-making-whitepaper/blob/main/paper.pdf

当只有两种类型的代币(X 和 Y)时,不变量可以简化为更简单的形式,其中 x0 和 y0 是初始流动性提供者设置的代币数量。以下是流动性池在不同 k 值下的行为。x 和 y 轴由 x0 和 y0 归一化。

较小的 k 值对应于 (1, 1) 附近的较低滑点(函数不太凸)。当 k 介于 0 和 1 之间时,不变函数可以与 x 和 y 轴相交。这意味着池中的代币可能会售罄。该交叉点的价格为零,这意味着该价格在转折点之前优于 CPMM 价格。过了转折点后,CPMM的价格比较好。这可以在下图中说明:

再次对 x 轴进行归一化。随着我们远离初始点 (1, 1),X 代币相对于 Y 的价格下降。我们可以精确计算交点发生的位置:

优点:

通过引入 k,Clipper 在交易量较小时实现了更低的滑点(更好的价格)。Clipper 白皮书中的以下图表进一步证明了这一点。

From Clipper whitepaper

缺点:

当交易量超过一定门槛时,价格会明显低于CPMM。

为了保证更好的价格,算法必须不断地价格重锚(改变 x0 和 y0)以保持当前池储备接近 (1, 1) 点。它可以使用与 Curve 相同的机制。该算法通过遵循其跟踪市场价格的内部价格预言机进行价格重锚。本质上,这等价于求解下面的公式,但这次 x, y 是已知的。P 由价格预言机给出。最后求解 x0 的这个方程给了我们新的平衡点。

这确保我们始终以较小的滑点接近市场价格进行交易。目前我们还没有调查 Clipper 是否实现了这一点,因为这在 Clipper 白皮书中没有解释。需要进一步查看其源代码。

价格范围概念也可以应用于 Clipper:

TWAMM:针对大额长期订单优化的 AMM 算法:

在上面讨论的所有 AMM 中,我们一次只能在一个方向上进行交易。如果我告诉您最近出现了一种允许同时进行双向交易的算法呢?

TWAMM¹⁴

(注:时间加权自动做市商,发音为“tee-wham”)算法将一段时间内的长期订单转换为无限小的虚拟订单的积分。订单可以两边同时进行。此外,在同一时间范围内、同一交易方向执行的订单会汇集在一起以简化计算。因此,一段时间内的长期订单以等于该时期时间加权市场价格的价格执行。

TWAMM¹⁴https://www.paradigm.xyz/2021/07/twamm/

截至目前,只对于两种类型的 AMM,CPMM 和 LMSR(注:对数市场评分规则)存在解析形式的 TWAMM 解。

让我们考虑一般情况,在一段时间内,代币 X 的总销售额为 xin,Y 的总销售额为 yin。X 的卖出率为 f(t),Y 的卖出率为

g(t)

。从时间

t

t

+

dt

代币 X 数量的净变化可以计算为代币 X 的销售数量减去在此期间购买的代币 X 数量,汇率为

dy/dx

。由于在此期间代币 Y 的销售量无限小,因此可以使用现货价格作为实际汇率。

因此,我们得到一个非线性一阶微分方程。取决于 dy/dx、

f(t)

g(t)

的形式,方程可能有也可能没有解析解。

TWAMM 在恒定乘积做市商 (CPMM) 和对数市场评分规则 (LMSR) 上的应用:

当应用于 CPMM 时,方程可以被积分,如果 f(t)/g(t) 是一个常数,这意味着代币 X 和 Y 的销售策略是相同的。我们可以进一步简化表达式:

存在这个积分的解析表达式。利用双曲函数的性质,我们可以得到一个漂亮的最终解(交易后池中的代币X数),它只取决于池的原始位置(x0,y0)和

xin,yin

。由于 CPMM 的做市商函数关于

x

y

完全对称,因此也可以通过在 xend 的最终表达式中交换

xin

yin、x0

y0

的位置来表示最终的代币 Y 数。代币X数和代币Y数的乘积正如预期的那样等于k。

这种源自CPMM的微分方程形式,实际上有一个数学名称叫做“Riccati方程”。Riccati 方程的一般形式如下:

Riccati 方程没有一般的解析解。但是,存在可以求解 Riccati 方程的特殊情况。有一篇

论文¹⁵

讨论了这些案例。如果 Riccati 方程的系数满足这个条件:

论文¹⁵:Analytical solutions of the Riccati equation with coefficients satisfying integral or differential conditions with arbitrary functionshttps://arxiv.org/abs/1311.1150

则 Riccati 方程可以转化为 Bernoulli 型方程。Bernoulli型方程可以很容易地求解。这应该给我们与以前相同的结果。从上面我们可以看出,满足这个条件与保持 f(t)/g(t) 恒定相同,这是我们在第一种求解微分方程的方法中假设的。

f(t)/g(t)

不是常数时,我们可以选择什么形式的 f(t) 和

g(t)

使微分方程具有解析解仍然是一个悬而未决的问题。找到这样的解决方案会给我们更多的选择(代币 X 和 Y 的销售策略不必相同)。

现在让我们将 TWAMM 应用到 LMSR:

同样,我们假设销售策略是相同的。然后可以对微分方程进行积分。我们可以进一步简化最终的代币X 和 Y 数量表达式为:

同样,当销售策略不同时,也不能保证微分方程具有解析解。

一旦我们获得了 xend 和

yend

,我们就可以计算出每方将收到多少代币 X 和代币 Y:

由于在此期间,同一交易方向的所有订单都汇集在一起。每个个体交易者将根据他对 xin 和

yin

的贡献比例获得他应得的代币份额。

优点:

TWAMM 通过允许交易对手同时对这些大订单进行交易,从而使大订单的价格滑点更小。在最理想的情况下(

xin/yin

=

x0/y0

),可以实现零滑点交易。在这种情况下,

xend

=

x0

yend

=

y0

,TWAMM 可以理解为充当了订单簿,在不提供流动性的情况下在双方之间交换代币。长期订单被分解成无限小的订单,这些订单在区块之间虚拟执行。由于这种性质,它不太容易受到三明治攻击,因为攻击者必须在块的末尾放置一个命令,并在下一个块的开头放置另一个命令。

缺点:

如果我们允许订单在任何时候到期,gas 费用可能会非常高。这是因为我们必须多次计算积分结果(在论文中他们称之为“懒惰计算”)。在最坏的情况下,我们必须计算每个块的结果。

因此,在实践中我们必须让订单在某些区块到期以简化计算。

此外,TWAMM 使用的流动性池必须与现有的流动性池不同,

因为没有虚拟订单和懒惰计算的概念。普通交易者在与 TWAMM 交互时不想支付懒惰计算产生的额外 gas 费用(只要有人与之交互,流动性池就会更新)。

TWAMM 在 YieldSpace 等与时间相关的 AMM 上的应用:

我们还可以将 TWAMM 应用于与时间相关的 AMM,例如

YieldSpace¹⁶:

YieldSpace¹⁶:An Automated Liquidity Provider for Fixed Yield Tokenshttps://yield.is/YieldSpace.pdf

做市商函数有两种形式,这两种形式都会导出目前我们不知道如何求解的微分方程。在第二种形式的情况下,微分方程可以简化为单个微分方程。

结论和未来工作:

我们希望这篇综合性的、介绍性的、学习笔记风格的论文能够为对 AMM 算法一无所知的人和有更多经验的人提供一些见解。

总而言之,AMM 算法的核心基本上是关于做市商函数的设计及其曲率分布的操纵。显然,我们需要阅读另一篇

Guillermo Angeris 和 Tarun Chitra 写的论文¹⁷

,其中详细讨论了这一点。除此之外,还有高效的价格解决方案(如 DEX 聚合器)和高效的流动性提供解决方案(如价格范围)。最近的 TWAMM 算法阐明了我们如何使用 AMM 算法来实现中心化交易中常见的订单簿类型的撮合。我们相信 AMM 算法的未来将更接近订单簿风格。

Guillermo Angeris 和 Tarun Chitra 写的论文¹⁷:Improved Price Oracles: Constant Function Market Makershttps://arxiv.org/abs/2003.10001

至于未来的工作,我们计划对本文中提到的一些问题进行更深入的挖掘。这包括阅读论文 [4]、[5]、[7]、[16]、[17],推导其他 AMM 的无常损失公式,推导其他 AMM 的流动性分布,了解模糊测试的工作原理,回答我们提出的关于 Xcp 的3个问题,更多地了解如何选择最有效的价格预言机和 s 值,制作 Curve 价格重锚过程的动画,了解更多关于单边流动性的创新,尝试设计更好的动态权重 K,将价格范围应用于 其他 AMM,将 TWAMM 应用到其他 AMM 并找到更多解析解。

作者感谢Fangyuan Zhao、Showen Peng、DW 对本文研究课题提出十分有用的意见。作者还要感谢火币研究院的 Lianxuan Li。作者特别感谢 Paradigm 的 Dave White 和 Dan Robinson 邀请加入 TWAMM 讨论组以及他们富有洞察力的讨论。同时也要感谢BTX Capital的 Vanessa Cao 和 Jane Hu 对本文的翻译和排版。

原文链接:https://link.medium.com/ynEydZUihjb