本文总共分为中篇阐述自动做市商算法、现状及未来迭代的思考,本文为中篇。下篇请点击
目录
7.? Curve的StableSwap和交易公式
8.? Curve V2 的动态权重、可定制的价格锚定和平滑的价格过渡
9.? Curve V2 在 2 代币池中的做市商函数
10. 与 CPMM 和 StableSwap 相比,Curve V2 的价格函数
11. 价格重锚过程:Xcp 标准、EMA 价格预言机、相对价格变化步长 s
12. Curve V2的动态交易手续费
13. DEX聚合器:Balancer SOR算法的通用解决方案
14. Pivot 算法:解决无常损失问题的一种尝试
15. 单边流动性解决方案
Curve的StableSwap和交易公式:
Curve 将 恒定加和做市商 (CSMM) 和 恒定乘积做市商(CPMM) 合并在一起,以实现更低的价格滑点。我们可以把这个算法看作是向 Uniswap/Balancer 模型添加一个固定价格部分,使最终的做市函数锚定于一个价格。
Curve1? V1,被称为 StableSwap,设计了用于稳定币交易的算法。它将 CSMM 与权重相乘并加上CPMM:
Curve1? V1
StableSwap — efficient mechanism for Stablecoin liquidity
https://curve.fi/files/stableswap-paper.pdf
首先我们考虑一个特殊情况,即流动性池中每种代币的数量是相同的。很容易证明在平衡点处时这个方程成立(χ 是权重,与D??1 相乘以使 CSMM 和 CPMM 具有相同的数量级)。但是,当流动性池失衡时,如果 χ 是一个常数,则该等式将不再成立。因此,我们需要将 χ 变量化。Curve V1 选择了一种 χ 的函数形式,使它在流动性池极端不平衡时变为零,这意味着该方程由 CPMM 主导。在平衡点下,χ 等于 A。A 是一个常数,通过模拟历史数据进行优化。代入 χ 给了我们一个始终成立的方程。
01 Exchange 将引入 ZeroOne 自动做市 ZAMM:6月5日消息,Solana 生态衍生品协议 01 Exchange 将基于 01 Exchange 和 Serum 的永续衍生品市场引入 ZeroOne 自动做市 ZAMM,会根据传统的恒定乘积(x * y = k)自动做市模型,为 01 衍生品订单簿提供带来类似 AMM 的深度被动流动性。
今年 1 月份,01 Exchange 完成 220 万美元种子轮融资,Multicoin Capital 和 Alameda Research 领投,参投方包括 Solana Ventures、Ledger Prime 等。[2022/6/5 4:03:24]
接下来,让我们推导出 StableSwap 如何实际计算交易结果。根据当前池中的代币数量,我们可以计算出 D。例如,如果我们想换出代币 j,我们可以将 x? 分离开来并求解 x? 的方程:
该方程可以简化为二次形式。可悲的是,现在链上Vyper语言里没有可以解二次方程的数学库。因此,StableSwap 使用了牛顿法来求解 x?。迭代公式每次迭代都将其精度加倍。因此,可以在设定的gas上限内计算可接受的 x?。最后,交换前后 x? 之间的差值将是购买的代币 j 的数量。
牛顿法
它是一种在实数域和复数域上近似求解方程的方法
https://en.wikipedia.org/wiki/Newton%27s_method
From StableSwap whitepaper
与 CPMM 相比,StableSwap 做市商受压、 以x + y = 常数方向压平。这确保交易价格接近或等于 1,在平衡点附近有非常小的滑点(当池中的一个代币不接近几乎售罄时)。当池中的一个代币几乎售罄时,价格开始急剧下降。这很容易理解:函数的曲率/滑点被集中/推到别处,以确保在平衡点附近的低滑点。
Stellar在协议升级中推出自动做市商:金色财经报道,在周三早上的协议升级中,代币化汇款协议Stellar推出了一个自动做市商(AMM),它将与其基于订单簿的路由和匹配引擎一起运行。Stellar生态系统负责人Justin Rice表示,在协议级别添加AMM是开发人员和用户之间的一个普遍要求。这种整合将使向协议添加新资产变得更加容易。AMM功能将在美国东部时间上午11点(北京时间23:00)上线。[2021/11/4 6:30:34]
该模型中的 CPMM 和动态权重被用于惩罚提前知道消息的大额订单,防止池中的代币被完全售罄。
优点:通过添加CSMM和CPMM以及动态权重,Curve的StableSwap 实现了非常小的滑点,非常适合稳定币。
缺点:价格始终锚定在1。如果市场价格与流动性池价格显著不同,流动性池将被买空。因此,StableSwap 仅适用于稳定币。
Curve V2 的动态权重、可定制的价格锚定和平滑的价格过渡:
为了确保更平稳的价格过渡和可定制的价格锚定,Curve11 V2 将动态权重 χ 修改为 K,如下所示:
Curve11?V2
Automatic market-making with dynamic peg
https://curve.fi/files/crypto-pools-paper.pdf
K0 在 0(流动性池不平衡)和 1(平衡点)之间变化,χ 和 K(以A 归一化)作为 K0 的函数绘制如下:
我们可以从上图中了解Curve V2 如何使价格转变得平滑。它实际上使动态权重在远离平衡点时迅速下降。γ值越小,下降越快。使动态权重快速下降到零本质上相当于强制函数表现得更像 CPMM,即使流动性池只是有一点不平衡。
DW 在 twitter12 上发布了一条很棒的推文,解释了相同的概念。
BSC链上自动做市商BurgerSwap再遭闪电贷攻击:6月5日凌晨消息,PeckShield派盾预警显示,BSC链上自动做市商BurgerSwap再次遭到闪电贷攻击,致使Dekbox ($DEK) 价格大幅下跌。[2021/6/5 23:14:01]
DW?在?Twitter12的推文
https://twitter.com/dken_w/status/1422623679150649345
价格过渡问题得到了解决。现在我们讨论 Curve V2 如何实现其他不是1的价格锚定。有一个价格锚定(他们在白皮书中称之为价格标度)意味着在做市曲线上存在一个平衡点,在平衡点处按价格标度缩放的代币数量相等:
Curve V2 在 2 代币池中的做市商函数:
缩放后的代币数满足与 StableSwap 类似的等式。以最简单的 2币流动性池为例,做市商函数可以用 A、γ、p、D、x、y 表示。该函数可以简化为关于 x, y 的三次函数(关于 D 的六次函数)。
该函数的典型值图如下所示:
与CPMM和StableSwap相比,Curve V2的价格函数:
也可以绘制代币 x 相对于代币 y 的价格曲线。在平衡点 (1000, 1000) 附近Curve V2 价格函数恒定。与 StableSwap 相比,Curve V2 略微延迟了价格变动,而不是完全延迟。与 CPMM 相比,随着交易量的增加,价格开始以较小的滑点做出反应。总而言之,Curve V2 在平衡点附近实现了非常小的滑点,并且在其他区域比 CPMM 实现了更好的滑点。至于其他非1的价格锚定,我们只需更改上面三次/六次方程中的 p。因此,锚定价格的问题也解决了。
Ergo核心开发者:Ergo让自动做市DEX和基于委托单簿的DEX共享流动性成为可能:据Ergo官方消息,Ergo核心开发者Alexander Chepurnoy近日在EIP-14草案中指出,交换委托单合约支持基于委托单簿的去中心化交易所(DEX),目前,在Ergo公链平台也可以实现当前流行的自动做市去中心化交易所(AMM DEX),这得归功于Ergo采用的扩展UTXO模型(eUTXO)。因为该模型,用于自动做市DEX的流动性池合约可跟用于基于委托单簿的DEX的其他合约进行组合,让Ergo公链平台上不同类型交易所之间共享流动性成为唯一可能。
另据Cointelegraph报道,扩展UTXO不同于以太坊率先采用的账户模型,扩展UTXO能让大多数合约逻辑不在区块链上运行,防止产生由账户模型智能合约积累而成的链膨胀。许多研究员认为,扩展UTXO相当于是计算机系统从8位升级到64位的重大飞跃。[2021/4/19 20:36:19]
我们可以使用类似的在StableSwap中的牛顿法来计算交换结果。首先,我们根据池中当前的代币数量计算 D(这次使用牛顿法,因为方程要复杂得多)。其次,如果我们想换出代币 i,我们再次使用牛顿法来求解 x?。同样,x?的差异(按其价格标度归一化)将是我购买的代币数量(所有 x? 都是按价格标度缩放的代币数量)。
为了确保多项式函数的根可以在设定的gas上限内求解,Curve白皮书讨论了他们选择的起始猜测,以及函数中的参数。他们使用一种称为模糊测试(假设框架)的方法来确定这些最佳值。目前,我们不知道有关此方法的任何详细信息,并且很想了解更多信息。
价格重锚过程:Xcp 标准、EMA 价格预言机、相对价格变化步长 s:
为了确保小滑点(在平衡点附近交易), Curve V2通过改变价格标度不断重锚做市商函数。然而,价格重锚可能导致流动性提供者承受价值损失。Curve V2 引入了一个名为 Xcp 的变量来缓解这个问题:
如果一次重锚后的损失大于累积的 Xcp 的一半(原始 Xcp 增加的价值),则该算法将保持做市商函数不变。有几个问题我们想在未来回答,因为白皮书只简要讨论了 Xcp。查看其源代码可能会有所帮助。
Messari前主管:无法相信自动做市商是一种范式转变:8月17日,Messari前主管、股票及加密货币交易员Qiao Wang发推称,Uniswap很酷,它是我们等待区块链扩展时的绝佳临时解决方案。但是我无法相信人们实际上是在说,像自动做市商(AMM)这样的东西是一种范式转变。[2020/8/17]
Xcp 值是否与用流动性池中当前代币数计算出的价值成正比?
存入或取出流动性是否计入 Xcp?
如果取出流动性计入Xcp,如果Xcp减少幅度过大会阻止取出流动性吗?
对于价格重锚,Curve V2 使用 EMA(注:指数移动平均线)价格预言机来确定预言机价格。新的预言机价格向量由最近一次交易价格向量和前一个预言机价格向量的线性组合确定。新价格标度向量的变化方向与预言机价格相似,但不完全等于新预言机价格。他们通过引入相对价格变化步长 s,将价格标度向量滞后于预言机价格。该方程可以使用欧几里得几何轻松导出。EMA 价格预言机和价格标度延迟是为了减少近期价格波动的影响并更好地代表长期市场价格。
关于相对价格变化步长 s,根据我们“刷新Curve官网”的经验,部分流动性池的 s 变化频率至少为十分钟的量级以上。Curve V2 如何更新 s 是一个有趣的问题,超出了我们当前知识的范围。查看其源代码也会有所帮助。
下面显示了一个演示一次价格重锚过程的图:
假设我们在 x = 1000 开始我们的交易,并在 x = 1400 结束我们的交易。最初,价格锚定于1 。交易后,价格移动到 0.6。为简化起见,仅出于演示目的,我们将新的价格标度设置为与现货价格相等(价格现在锚定于0.6),并求解六次方程以获得 D。现在做市商函数锚定于 0.6,如上所示。
价格重锚本质上相当于找到一个新的做市商函数,该函数穿过当前代币数量位置(在 2 代币池情况下为 (x, y)),在 (x0, y0) 处有一个平衡点,使得 y0/x0 为 等于 (x0, y0) 处导数的绝对值。一个有趣的课题是获取真实的Curve流动性池参数,做一个更好的(可能是动画)价格重锚过程的演示。
Curve V2的动态交易手续费:
由于上面讨论的Curve V2 的做市商特性,将交易费用设为2级交易费用与动态权重的线性组合是合理的,衡量我们离平衡点有多远(当前价格变动是否更像是 StableSwap 或 CPMM)。Curve V2 选择的 fmid 和 fout 值分别为 0.04% 和 0.4%。下图展示了 2 代币池中的费用如何变化(假设没有价格重锚或流动性变化):
优点:做市商函数可以锚定于任何价格,适合所有代币,而不仅仅是稳定币。价格过渡比 StableSwap 更平滑。Curve V2还根据其内部的价格预言机不断更新价格标度,以更好地代表市场价格,确保在平衡点附近交易。动态费用确保在此基础上提供甚至更好的价格。
缺点:由于求解三次方程和六次方程,Gas 费用可能会更高。仅根据其内部价格预言机进行价格重锚可能存在风险。我们想知道在通过 Xcp 标准时,是否存在价格标度与市场价格明显不同的情况。如果是这种情况,与其他预言机交叉检查价格可能会有所帮助。
Curve 的 StableSwap 和动态锚定 V2 是为了使交易滑点尽可能小。StableSwap 始终锚定于 1,而 V2 使锚定价格跟随市场价格。
下面将讨论 AMM 算法的一些最新进展和可能的改进。
DEX聚合器:Balancer SOR算法的通用解决方案:
DEX 聚合器是聚合现有 AMM 协议以实现更好交易结果的协议。如上所述,Balancer 的 SOR 算法也适用于 DEX 聚合器,以确保数学上最优的交换策略。
Balancer 的 SOR 算法的一般解决方案,没有任何价格函数近似,可以表示如下:
因为价格函数可以是任何形式,具体取决于生成它们的 AMM 算法。这意味着满足总代币数量守恒和相等最终价格等条件的方程可能没有解析解。
因此,我们引入了一种在机器学习等领域常用的技术,称为梯度下降。我们将损失函数定义为不同价格函数值的方差。在选择一个起始猜测(一个简单的、不知情的猜测可以是每个池中的交易量相等 N/n)后,我们可以迭代(通过损失函数相对于该变量的偏导数改变每个交换量,乘以学习率 l) 以获得最佳结果,在一定的误差接受范围内。
由于作为最终等价函数的总交易量是单调的,因此该方法应该能够找到全局最小值(方差 = 0)。同样,上面的计算假设没有简单的解决方案(没有价格函数总是大于或小于范围 (0, N) 上的其余价格函数)。
Pivot 算法:解决无常损失问题的一种尝试:
Pivot 算法试图通过使做市商函数经过一个固定点 (x0, y0) 来对其进行枢轴旋转。
(x0, y0) 处的价格将始终是设计的当前市场价格 Pt。这在概念上确保套利总是将流动性池带回到点 (x0, y0)。由于此功能,无常损失将为零。然而,实际上,该算法没有足够的参数来拟合当前储备(x,y)和(x0,y0)。这意味着我们必须等待流动性池回到 (x0, y0),然后更改做市商函数。
从上图中我们可以看出,交易后的点不在新的做市商函数上(蓝色和蓝色虚线)。如果当前市场价格低于当前储备的现货价格,则流动性池也可能没有任何动力回到 (x0, y0)。
我们想知道是否存在这样的函数通过 (x, y) 和 (x0, y0) 以及在 (x0, y0) 处的可调导数来适应市场价格。如果我们假设函数是凸的,那么市场价格不能小于这两个点之间的线性段斜率。因此,如果做市商函数必须是凸函数,则此问题可能没有完整的解决方案。
单边流动性解决方案:
流动性提供者在存入流动性时可能不方便存入所有类型的资产。我想知道是否存在与 Bancor 采取的弹性供应方法不同的其他机制。直觉上,有两种解决方案:1. 首先使用相同的协议交换部分代币 2. 无论如何存入单边流动性,让套利将价格带回市场价格。
例如,我们希望将流动性存入一个等值的 2 代币池中。
我们只有代币 x。不难计算我们需要交换多少,以便交换后每种代币的价值相等。也很容易证明 β 总是在 0 和 1 之间,这意味着一个合理的结果。但是,交易后的价格可能与存入流动性时的价格不同。因此,我想知道协议是否真的将交换和流动性存入作为一项原子操作。进行交易时也存在价格滑点。到目前为止,Balancer 和 Curve 等协议如何处理单边流动性存入仍然是我们的一个问题。如果滑点很小,则进行上述操作是合理的。
Balancer and Curve 白皮书中描述的第二种方法是是直接存入单边流动性。这可能会大大改变价格。由此产生的套利也可能使无常损失变得重大。我们个人在 Balancer 白皮书和文档中没有看到任何惩罚措施。另一方面,Curve 在存入单边流动性时引入了一种称为不平衡费的东西,其范围从 0% 到 0.02%。在现实中,由于套利和无常损失,在第二种方法下存入单边流动性并没有真正的动机。
了解更多与单边流动性相关的其他创新将会很有趣。
由于本论文过长,?AMM 算法的一些最新进展和可能的改进及后续内容将于下篇 公布。
原文链接:https://link.medium.com/ynEydZUihjb ? ? ?
作者: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
标签:CURCurveSWAPSTAcurriculum-vitaePAXCURVEethereumuniswapFireStarter
近一周以来,整个加密货币市场遭受重创,市值最大的加密货币比特币的价格一度跌破 41000 美元.
1900/1/1 0:00:00太多的桥可供选择是否曾经走错了桥,到达了错误的地方,不得不返回原路才能到达最终目的地,但由于gas耗尽而被困住了?随着越来越多的区块链互操作性协议到达主网,如果不小心,这将是一个普遍的问题.
1900/1/1 0:00:00头条▌未具名矿工将返还Bitfinex钱包误操作付出的7626 ETH Gas费9月28日消息,非托管交易所DeversiFi发推表示,以太坊区块13307440的打包矿工已经确认.
1900/1/1 0:00:00为什么流通的质押 ETH 衍生品,尤其是 stETH,在以太坊合并后会以显著高于 ETH 的溢价进行交易?几天前我在一次长途飞行中即兴写了下面这个连环推.
1900/1/1 0:00:00据《华盛顿邮报》报道,自8月份推出MiamiCoin以来,迈阿密与CityCoins协议的合作伙伴关系已为该市创造了700万美元收入。 居民在该协议上持有并交易“MiamiCoin”.
1900/1/1 0:00:00头条▌支付宝发布《我不是胖虎》系列NFT,并将于9月16日推出亚运会数字火炬9月12日,支付宝发布《我不是胖虎》系列NFT,该系列分为4个时段售卖.
1900/1/1 0:00:00