本文介绍了一种新型的分布式自动化市场制造商(dAMM),该设计旨在解决二层(L2)解决方案中流动性碎片化的问题。通过在L1上保持资产并跨层分配流动性,dAMM提高了资本效率,为不断扩张的DeFi生态系统提供了有前景的解决方案。文章详细分析了dAMM的原理、实施方式以及相关操作,结合实际示例和图示,突出了dAMM的优势与潜在风险,最后讨论了未来的研究方向。
2023年3月16日 • 作者:Tiago Fernandes • 15分钟阅读
随着DeFi的持续增长,资本效率已成为L2解决方案的主要关注点,因为流动性在L1和多个L2之间被分割。dAMM是一种新型的L2驱动AMM设计,旨在通过将资产保留在L1、在不同层之间分配流动性来解决流动性碎片化的问题。这种在层之间异步交叉的AMM方法增强了资本效率,使其成为DeFi日益扩大的生态系统的良好解决方案,并改善了L2 DeFi解决方案。
自动化市场制造商在DeFi生态系统中发挥着至关重要的作用。AMM设计空间随着时间的推移而演变,从像Curve这样的专门市场到像Balancer这样的通用市场。
然而,随着以太坊的Rollup中心路线图和快速增长的L2扩展方案,AMMs将如何演变?
“流动性碎片化”一词用于描述不同层(L1和L2)之间流动性的分散,从而导致更高的交易费用和价格滑点。
L2 AMM设计要求将整个AMM迁移到L2,包括流动性,这就导致了L1上的流动性不必要的碎片化。
分布式AMM(dAMM)是一种由L2技术驱动的AMM,使流动性可以在L2上桥接,同时在L1上保持不碎片化。
StarkWare和Loopring提出了dAMM的概念:在L2上创建一个模拟交易所,用户可以进行交易。它在将净交易带到L1真实交易所关闭之前模拟和匹配交易请求。在L1上,真实交易所仅与模拟交易所进行交互,这可以被视为保险库和银行,导致价格波动较小和整体资本效率更高。
dAMM有一个链外的操作员,他处理L2的交易批次,并在L1的L2驱动的AMM合约上进行交易。它模拟合约的逻辑,并根据批次开始时和批次中包含的后续L2交易的AMM状态提供交易报价。批次结束时,操作员通过在L2驱动的AMM合约上执行净差额来结算所有交易。
卡罗尔在L1的ETH-DAI池中存入了100 ETH和178,000 DAI。假设操作员像Uniswap一样作为一个恒定产品做市商,Alice可以用180 DAI兑换0.1 ETH。这笔交易和其他所有交易一样,会影响由操作员模拟的虚拟池,导致Bob用0.2 ETH兑换358 DAI。操作员将在预定时间在L1上结算批次内所有交易的净差额。
来源:Starkware - https://medium.com/starkware/caspian-an-l2-powered-amm-f20e93b5421
这个过程类似于Zk-Rollups,其中L1充当结算层以记录L2的状态,只需将状态差异和有效性证明上载到L1。
类似地,dAMMs会整合一系列交易,仅在L1上交换净差额。因此,L1充当AMM状态的检查点,由操作员复制。
来源:三西格玛
在链外,有一个操作员负责聚合批次内的交易,并对L1合约抵消净差额。STARK证明用于结算交易批次。还有交易者和流动性提供者(LPs)。
在链上,有一个L2驱动的AMM智能合约,提供一个标准的AMM接口,并有两个重要的变化。首先,只有操作员可以在L1上与此合约进行交易。其次,提款需遵循AMM冷却期(ACP)。还有StarkEx智能合约,将AMM的逻辑连接到链外的StarkEx扩展引擎。
来源:Starkware - https://medium.com/starkware/caspian-an-l2-powered-amm-f20e93b5421
与dAMMs相关的基本操作有三种:
交易过程涉及几个步骤。首先,交易者向操作员请求并批准报价,然后操作员进行匹配。为避免持有流动性并确保即时交易执行,操作员可以进行批次长的闪电贷,并在批次结束时偿还。每个批次结束时通常会有盈余,一些贷款可能未偿还。操作员随后创建一个L1限价单,并用与该限价单相等的净差额(即批次长的闪电贷)来偿还其贷款。之后,操作员发送批次证明以进行验证并更新状态以反映交易的成功完成。
来源:Starkware - https://medium.com/starkware/caspian-an-l2-powered-amm-f20e93b5421
考虑第一个示例,其中AMM池余额为178,000 DAI和100 ETH。操作员批准180 DAI兑换0.1 ETH的交易,但由于流动性不足,操作员请求一笔0.1 ETH的批次长闪电贷,以在保留180 DAI的同时支付给交易者。随后,Bob请求用0.2 ETH兑换358 DAI,操作员进行178 DAI的闪电贷,并将其添加到已经拥有的180 DAI中。操作员用从交易中获得的0.2 ETH中的0.1 ETH来偿还贷款。批次结束时,操作员有0.1 ETH的盈余和178 DAI的贷款。操作员可以通过从AMM池生成一个L1限价单,换取0.1 ETH和178 DAI来偿还闪电贷。操作员在整个批次过程中始终保持一个代币的盈余和针对另一代币的贷款(假设净差为非零),该情况在批次结束时进行结算。
存入是一项原子操作:LPs在L1上存入资金并获得LP代币。操作员监控链,以将新的存款包含在其报价中。
来源:Starkware - https://medium.com/starkware/caspian-an-l2-powered-amm-f20e93b5421
当LPs想要提款时,必须遵循三步流程。首先,他们锁定其LP代币以启动ACP。在此期间,他们不被允许提款。ACP是一种安全机制,确保池的稳定性并防止价格操纵。
其次,操作员必须通过确保有足够的流动性来满足LP在ACP结束时的提款请求,从而服务于LP的提款请求。最后,如果操作员未能响应请求,LP可以在最新的已知AMM比率下直接从AMM智能合约中提款。这确保了LP可以访问其代币,并有助于避免由于价格波动造成的任何潜在损失。
来源:Starkware - https://medium.com/starkware/caspian-an-l2-powered-amm-f20e93b5421
还记得操作员是如何向Alice提供离线价格报价的吗?根据该报价,如果L1 AMM的流动性增加,价格会改善;反之,如果流动性下降,价格会恶化。因此,存款可以快速进行,但提款在开放批次结束之前不得服务。
LPs仅与L1 AMM的智能合约进行交互,而不是其链外操作。LP存款比例与AMM池的比例匹配。尽管存款是原子操作,但操作员无法在批次中间更改报价,因为在批次结算时可能不批准限价单。例如,如果一个池包含10:10,用户用10 tokenA交换5 tokenB,则操作员的余额变为20:5。假设一个LP贡献了额外的10 tokenA和10 tokenB,则L1的AMM流动性翻倍。类似地,操作员的余额翻倍至40:10。如果用户随后决定兑换10 tokenB换取20 tokenA,则操作员的余额变为20:20,与AMM池相似,但净差额等于10 tokenB的盈余和20 tokenA的贷款。因此,操作员无法在AMM中用10 tokenB兑换20 tokenA,因为L1限价单将被拒绝。因此,操作员的报价仅能在批次结算后更新。然而,如果操作员的余额在批次开始和结束之间发生变化(净差为0),批次结算将改变下一批次首笔交易的现货价格。为了保持现货价格相等,模拟AMM余额在批次中必须不变(净差=0)。
加载中...
"x"x
"y"y
"a" 平方a2
"a" 指数,"b" , 基线ab
77
88
99
除÷
函数
((
))
小于<
大于>
44
55
66
乘×
| "a" ||a|
,,
小于或等于≤
大于或等于≥
11
22
33
负−
ABC
开始根, , 结束根
piπ
00
..
等于=
正+
AMM余额根据变动的批次净差(绿色和暗绿色点之间的距离)进行更新,同时保持存入金额不变(绿色和浅绿色点之间的距离)。其中绿色表示 存入前的AMM曲线,浅绿色表示 存入后的AMM曲线,白色表示 批次结算后的AMM曲线,虚线表示 现货价格。
先前的动画展示了这种行为。在批次开始时,AMM池包含100 tokenA和100 tokenB(1:1比例),由操作员监控,并由绿色AMM曲线表示。随着批次的进行,接收到50 tokenA和50 tokenB的存款(1:1比例),是一个新的AMM曲线(浅绿色),但操作员未进行调整(由于之前提到的原因)。批次结束时,操作员的虚拟AMM状态(深绿色点)表示净差额,用于生成限价单。此限价单更新了L1池的AMM曲线(白色)及其相关余额,这些余额随后在新批次开始时被操作员采用。
当净差额(深绿色点与绿点之间的距离)大于零时,操作员的虚拟AMM状态在批次结束时(深绿色)与新批次开始时(白色)的现货价格(虚线的斜率)显然不同。
此外,存款的原子特性可以视作AMM曲线的不变量始终保持相同或在限价单后增加。因此,从L1 AMM池的特定限价单总是有利。
除此之外,现货价格差异随着存款规模而变化,较大的存款对现货价格差异的影响更大,如下所示。
加载中...
"x"x
"y"y
"a" 平方a2
"a" 指数,"b" , 基线ab
77
88
99
除÷
函数
((
))
小于<
大于>
44
55
66
乘×
| "a" ||a|
,,
小于或等于≤
大于或等于≥
11
22
33
负−
ABC
开始根, , 结束根
piπ
00
..
等于=
正+
AMM余额根据固定批次净差额(绿色和深绿色点之间的距离)进行更新,同时变化存入金额(绿色和浅绿色点之间的距离)。其中绿色表示 存入前的AMM曲线,浅绿色表示 存入后的AMM曲线,白色表示 批次结算后的AMM曲线,虚线表示 现货价格。
LPs的提款比例有三种选择:
因此,最佳实施可能是第一个。
下面的动画展示了为什么提款不是原子操作。如果提款在当前批次的限价单之前更新了AMM曲线,则可能会拒绝限价单,因为白色曲线AMM的不变量低于浅绿色曲线的值。
加载中...
"x"x
"y"y
"a" 平方a2
"a" 指数,"b" , 基线ab
77
88
99
除÷
函数
((
))
小于<
大于>
44
55
66
乘×
| "a" ||a|
,,
小于或等于≤
大于或等于≥
11
22
33
负−
ABC
开始根, , 结束根
piπ
00
..
等于=
正+
AMM余额在固定批次净差额(绿色与深绿点之间的距离)不变时,根据变化的存入/提款金额(绿色与浅绿色点之间的距离)进行更新。在此图中,浅绿色曲线的颜色更为淡化,以展示更新的资金池余额只能在结算后进行。绿色表示 存入前的AMM曲线,浅绿色表示 存入后的AMM曲线,白色表示 批次结算后的AMM曲线,虚线表示 现货价格。
dAMMs可以扩展以支持跨L2的AMM,但在不同L2之间同时交易的并发风险使得安全结算变得更加困难。
一种可行的方法是使AMM在同一流动池上具有多种状态。这就是异步dAMM的功用。异步性指的是L2能够独立处理dAMM交易的能力,而无需与其他使用相同dAMM L1流动池的L2进行通信。在这种设计中,流动池与定价状态分离。只要有足够的流动性来满足报价,合约就可以提供任何由状态报价的价格。
由于资金和状态是解耦的,因此可以在同一流动池上存在多种状态。这意味着一个L2中的事件不会影响其他L2的现货价格。异步跨L2的AMM可以通过为每个L2分配自己独特的dAMM状态来实现。这使得LP能够在多个L2上使用同一个流动池,从而提高交易效率与便利性。
来源:Starkware - https://medium.com/starkware/damm-decentralized-amm-59b329fb4cc3
在多个市场中有一个可用的AMM的好处显而易见,它们产生一个良性循环,使市场参与者和平台本身都受益。
然而,需要注意的是,这种方法存在风险。与普通的Uniswap V2 AMM相比,LPs可能面临更高的非永久性损失(IL)风险,并且在最坏的情况下,可能会遭遇n倍的IL——风险随着LP暴露于的市场数量线性增长。
这源于如果相同的流动性在多个AMM中同时共享,则流动性实际上变成了一个放大池,这导致了放大的IL。
当用户请求报价时,L2操作员通过询问中央协调器是否有足够的流动性来满足交易,来检查其是否符合L2 dAMM的状态和流动性要求。如果是,则交易被接受并更新流动性,否则被拒绝。
在这种实施中,L2与协调器之间是同步通信的,而与彼此之间是异步的。
在比较集中协调器和不使用协调器(例如依赖消息队列)时,需要考虑几个关键差异。
没有协调器时,在资金池越来越不平衡且可能发生延迟的情况下,需要谨慎,可能导致资金池被抽干。
每个L2需要实施一个安全缓冲区,以防止进一步的交易加剧不平衡,当流动性低于某个阈值时。如果L2操作员不小心抽干资金池,将会面临后果。
有了协调器,证明不当行为相对简单,因为有一份交互记录,操作员可以相应地受到惩罚。
没有协调器时,每个L2都有自己的操作记录,并使用公平的排序算法对交易进行排序。因此,存在某种少数“先来先服务”的最终排序,用于识别接受了抽干资金池交易的罪魁祸首并采取适当的措施。可以设立一个惩罚机制来惩罚操作员,削减的流动性将被用于重新平衡资金池。一个主要的问题是被抽干的池子,可能没有LP愿意加入,因为担心遭遇即时的非永久性损失。
如果批次同时结算,实现相对简单。然而,不同的L2可以在不同的时间结算。为了应对LP提款,必须建立一个最大批次间隔。
存款过程与使用自动化市场制造的池子相似,LP将其代币存入与L1池余额相同的比例。
LPs需要在特定时间(ACP)内锁定其代币,然后才能检索。如果批次同时结算,LP必须等待同时结算。相反,如果批次在不同时间结算,LP必须在锁定其代币后等待每个L2至少结算一次,以确保准确更新L2状态。
批次结算后,L2操作员会观察L1池的流动性和提款请求。然后,操作员将更新其状态以最大化L1池的流动性,同时保持其L2现货价格不变。然而,所有虚拟代币的余额均不得超过实际资金池的余额,如下所示。
来源:三西格玛
如上所述,每个L2假设可以访问所有(或几乎所有)L1 AMM流动性。由于使用虚拟余额来增强AMM池的余额,极端的市场波动可能导致显著的IL和被抽干的L1资金池。放大的余额导致限制现货价格区间,随着增强比例的提高而变得更窄,如动画中显现的浅绿色曲线,描述了放大的AMM。
加载中...
"x"x
"y"y
"a" 平方a2
"a" 指数,"b" , 基线ab
77
88
99
除÷
函数
((
))
小于<
大于>
44
55
66
乘×
| "a" ||a|
,,
小于或等于≤
大于或等于≥
11
22
33
负−
ABC
开始根, , 结束根
piπ
00
..
等于=
正+
不同增强因子的放大AMM曲线。这里绿色表示 L1 AMM曲线,浅绿色表示 放大AMM曲线。
如果市场条件将现货价格推向这些界限,L2中的套利可能会抽干池子。为了避免抽干资金池,交易应该直接在L1 AMM池中进行,以便进行能重新平衡AMM的套利。基本上,如果基础代币的价值随着时间的推移而漂移,L2 dAMM状态将因为L2中套利而跟随市场价值,这将使L1 AMM不平衡,因而利用了放大的流动性。这个不平衡可以通过在L1上进行套利来解決。
然而,这引发了另一个问题。由于放大流动性的假设,AMM流动性将会泄漏,如上面的动画所示。
考虑一个L1 AMM池,比例为1000:1000,并且它连接三个L2。如果tokenA相对于tokenB的价格上涨20%,每个L2的dAMM状态将收敛到913:1054的余额。这一变化被放大三次(连接三个L2),这意味着L1 AMM的余额将变成739:1162。套利者将快速稳定L1池,最后的余额为846:1015,因为(20%增加),这是更新后的余额比之前的1000:1000的不变量要低。
在下面的动画中,价格变化后的AMM曲线(白色)具有低于之前的曲线(绿色)的不变量,随着价格波动的增加而降低。在极端情况下,如果在短时间间隔内到达限制现货价格,资金池可能被抽干。
加载中...
"x"x
"y"y
"a" 平方a2
"a" 指数,"b" , 基线ab
77
88
99
除÷
函数
((
))
小于<
大于>
44
55
66
乘×
| "a" ||a|
,,
小于或等于≤
大于或等于≥
11
22
33
负−
ABC
开始根, , 结束根
piπ
00
..
等于=
正+
市场价格变化的更新恒定产品AMM。其中绿色表示 L1 AMM曲线,浅绿色表示 放大AMM曲线,白色表示 市场变化后L1 AMM曲线。
为了避免资金池因这种现象而被慢慢抽干,必须增加形式上的L1套利费用和L2操作员费用。
此外,可以实施动态费用,在市场波动性高时收取更高的费用。这不仅能稳定池子,还能赔偿LP由于非永久性损失所增加的损失。动态费用的计算应保持或增加池的流动性,从而间接支持协议。
为了使操作员向L1 AMM支付费用,L2中的用户交易可能也需要支付动态费用,但其费用将远低于L1支付的费用。
Dove Protocol目前正在实施dAMM,但仍处于初步阶段。
DeFi的初衷是确保金融包容性。为了实现这一目标,需要最小化交易成本并避免流动性的碎片化。dAMM是一项为实现此目标而开发的技术,旨在为L2应用提供流动性,同时保持资本效率。通过提供简化版然后再推广适用于L2互操作性的一般实现,我们加深了对这项新技术功能的理解。此外,通过提出更深入的实施方案,我们希望鼓励对这项技术进行更深入讨论,它可能成为扩展DeFi的基本构件。
StarkExpress项目(由三西格玛创建)可能是实施dAMM的一项令人兴奋的项目,因为使用StarkExpress技术部署的链可以即时获取流动性,而无需引导。尽管很有吸引力,但此建議是未来文章的主题。
本文利用了StarkWare和Loopring所做的研究,以奠定分布式自动化市场制造商的实施基础。特别感谢Three Sigma的合作者:Afonso Oliveira、Catarina Urgueira和Tiago Barbosa,在有关于dAMM可能实施的无数次会议中进行了深入的讨论。
https://medium.com/starkware/caspian-an-l2-powered-amm-f20e93b5421
https://medium.com/starkware/damm-decentralized-amm-59b329fb4cc3
https://ethresear.ch/t/damm-an-l2-powered-amm/10352
https://files.kyber.network/DMM-Feb21.pdf
https://twitter.com/GuthL/status/1420760703103688715
- 原文链接: threesigma.xyz/blog/dist...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!