长按上方二维码3秒识别二维码

去中心化交易DEX未来演进:拓展新设计空间

去中心化交易DEX未来演进:拓展新设计空间

本文旨在提高区块链生态系统对以太坊中去中心化交易所(DEX)未来可能演变方式的认识。它专注于展示一些新的应用设计理念。为了尽可能具体,我们引入了一个名为“Dealer 3”的演示智能合约,其中包含几个方便的功能,可能在随后的社区讨论中被考虑。我们用示例说明了这些功能。最后,我们讨论了可能在将用户操作与链上执行连接路径中扮演重要角色的SUAVE 3应用。非常感谢Sarah Allen对本文的有价值的评论和想法。还要感谢Christoph Schlegel和Fred Hjalmarsson对本文的热情评论。导
2023-09-01 10:28:00 1.37K

本文旨在提高区块链生态系统对以太坊中去中心化交易所(DEX)未来可能演变方式的认识。它专注于展示一些新的应用设计理念。为了尽可能具体,我们引入了一个名为“Dealer 3”的演示智能合约,其中包含几个方便的功能,可能在随后的社区讨论中被考虑。我们用示例说明了这些功能。最后,我们讨论了可能在将用户操作与链上执行连接路径中扮演重要角色的SUAVE 3应用。

非常感谢Sarah Allen对本文的有价值的评论和想法。还要感谢Christoph Schlegel和Fred Hjalmarsson对本文的热情评论。

导论

直到今天,以太坊上的去中心化交易活动主要由自动做市商(AMM)主导。自从它们被引入以来,它们已经证明是流动性提供者和交易者的有力工具。由于它们被广泛采用,我们看到了最大经济价值(MEV)的崛起,这现在已经是一个众所周知的现象。在过去的几年里,Flashbots为防止MEV和民主化访问MEV提供了许多有趣的产品。其他团队专注于开发基于智能合约的新型DEX应用,这些应用也提供MEV保护。其中一些应用包括CoWswap 2、1inch Fusion 1和UniswapX 1。为了运行这些应用,最终用户必须签署非区块链交易但遵循预定格式的消息,这些消息在稍后由应用的智能合约执行,当它们被其他称为“求解器”或“填充器”的参与者发送的交易中包含时。我们希望在以下部分说明这种机制的优势。我们参考UniswapX白皮书2和CowSwap介绍1以获得同一总体情况的其他角度。

UniswapX最近引入的独特特性是使填充器角色无需许可。本文强烈支持这种方法,因为它将实现更高程度的去中心化和效率。

可以说,这种类型的系统值得命名。我们将其称为“综合型DEX应用”(IDEX)。这个名字来自于它们能够将任意用户的订单与AMM交换和链上同一链上的任何其他流动性来源批量处理在一个交易中。这与仅在AMM进行交换的情况相对应。在这种情况下,我们有更大的燃气成本,每次交换都有池费用,并且结果在很大程度上取决于执行顺序,导致前沿攻击和结果不确定性。我们希望推动IDEX系列的发展,因为我们理解可能会从可能的改进和采用中获得很多好处。在以下部分,我们希望说明可以做的许多事情。

交易智能合约

为了以最具体的方式展示几个重要用例,我们介绍了一个名为“Dealer 7”的IDEX智能合约,并附带其相应的测试用例1。该智能合约尚未经过审计。目前它仅用于研究和传播思想。该原型已经对下面每个示例的燃气成本有所帮助。此外,我们鼓励技术读者探索代码。其直接的风格使其易于阅读,因此可以帮助一些读者理解IDEX应用的一般工作方式。

该智能合约的主要指导原则是灵活性和效率。在这里,灵活性意味着它应该支持一类非常普遍的交易操作。正如我们将要看到的,很多情况下,IDEX智能合约预计将与离链或不同链上的其他系统结合使用。因此,灵活性与通过多个途径的采用有关。效率意味着优化燃气成本。操作成本将决定最低可行交易量,从而影响生态系统的可扩展性。因此,我们理解,每笔交易节省低至10K气体单位的成本是显著的且是优先考虑的。

我们首先介绍智能合约设计,然后强调一些预期的用例。虽然也可以首先阅读用例,但我们选择了这个逻辑顺序。

一个“订单”是由用户生成的数据片段(有时称为“消息”),在合约的主要功能执行时将被执行。

订单结构

allowedTokens:用户允许合约在执行订单时从用户那里转移的ERC20代币列表。

不等式:这是一组有限的线性不等式,用户代币余额必须满足这些不等式。变量是订单执行开始和结束时的代币余额。这使得用户能够对交易的价格和金额施加条件。

条件:这个字段允许用户表达任何其他自定义条件。条件采用任何合同函数的形式,因为它们可以执行任意的验证,并在不满足条件时回滚。

到期区块:订单到期的区块号。

主要功能流程

主要功能被称为fillOrders。填充器是调用此功能的代理。输入包括一组由用户生成但由填充器选择的订单、它们的签名、一组从用户转移的代币,一组从填充器转移的代币(均由填充器指定)以及一组在转移后要调用的其他函数,这些函数可能包括向用户或填充器退还的转移。

去中心化

“fillOrders”的流程可以总结如下。

  1. 验证签名并获取用户地址。
  2. 记录执行前的余额。
  3. 执行来自用户和填充器的转移。
  4. 调用由填充器指定的智能合约函数。这些是任何外部或内部函数,但不包括名称为“transferFrom”和“burnFrom”的函数。
  5. 检查由订单指定的余额不等式、到期时间和其他任意条件。

代码中的每个步骤都用注释表示。让我们强调一些从这个设计中出现的显著特点。

  • 订单不指定转移金额或收件人。这种灵活性属性允许部分执行和资金的任意路由。
  • 同一订单可能会被执行多次,直到过期时间。为了节省燃气,合约不会存储任何关于订单的数据。
  • 用户余额的线性不等式还允许指定最小执行量。因此,订单可以禁止其自身的部分填充。
  • 用户或填充器可以直接从这个智能合约调用其他合同函数。这可能包括AMM交换和向用户或填充器退还的转移。

值得注意的用例

在这里,我们展示了几个重要的用例,涵盖了不同程度的复杂性。

(1)最小情况:市商-接盘交易

用户想要交换5000单位的代币A以换取10000单位的代币B。更准确地说,用户签署了一个订单,以至少1:2的汇率将代币A兑换成代币B,以获取最多10000单位的代币B。第二个用户喜欢这个价格并接受了这个订单。因此,第二个用户是填充器。Dealer合约在这两个用户之间执行了两次转移。这个操作只消耗了105K气体单位(使用OpenZeppelin实现的ERC20)。用户从没有区块链之外的任何中介获益。如果存在对A/B操作的AMM,其即期价格是1:2,那么没有一个用户可以通过在AMM进行交换来获得更好的交易。对于他们来说,这会更糟糕,因为燃气成本更高,池费用更高,并且价格影响不为零。

我们强调,在这种情况下,填充器不是中介。

(1')部分填充

在许多情况下,填充器用户可能只想部分填充订单。通过这种方式,完整的订单可以在一段时间后由不同的填充器处理。能够部分填充订单非常重要,因为通常会有不同数量级的金额的参与者。

(2)瓦尔拉斯拍卖

让我们将注意力集中在一个高流动性的单个交易对A/B上。在这种情况下,参与瓦尔拉斯拍卖的代理向拍卖师提交他们在每个价格(即作为价格函数的价格)下的供/需金额。在理想的瓦尔拉斯拍卖中,拍卖师找到平衡价格,并以此价格清算每个订单。接下来,我们描述一个近似理想拍卖的系统设计,可以在IDEX之上构建。

考虑以下合理的情景。有一个可用的常数乘积类型的AMM,使用0.3%的池费操作A/B。有一个名为拍卖师的公共实体,它私下接收订单并生成公平市场执行。假设在某个时间点,AMM上有1000万单位的代币A和2000万单位的代币B。填充器实体(拍卖师)已收到五个订单:

(a)以至少1.99的价格出售80K单位的代币A。

(b)以至少1.985的价格出售5K单位的代币A。

(c)以至少1.984的价格出售1K单位的代币A。

(d)以最多2的价格购买55K单位的代币A。

(e)以最多1.993的价格购买21K单位的代币A。

在这种情况下,考虑到订单和AMM,拍卖师的任务是找到一个基于统一价格的公平执行,如下所示。对于每个订单,它将收取燃气成本,假设为2单位的B(在当前的测试中,此成本是ERC20转移成本的两倍),然后应用0.05%的小费。为了获得方便的AMM交换,它考虑了3个单位的B的燃气成本,并且也应用了0.05%的费用(即填充器以这种方式解释AMM交换来解决这个系统)。在这些前提下,填充器找到了解决价格1.9908和以下执行:

(a)80,000---> 159,182

(b)5,000---> 9,947

(c)1,000---> 1,987

(d)55,500<--- 110,542

(e)21,000<--- 41,825

(AMM)9,500 <--- 18,925(AMM收到9,500单位的A,返还18,925单位的B)。

(F)拍卖师保留了176单位的代币B的盈余。

左列表示代币A的数量,右列表示代币B的数量。每行表示相应用户、AMM或填充器的交换。从左到右的箭头乘以1.9898并减去2单位。从右到左的箭头减去2单位(除了AMM情况,减去3单位),然后除以1.9918。

此交易的总成本为456K气体单位。对于这个测试,我们使用了OpenZeppelin ERC20和Uniswap V2池。请注意,用户收到的执行价格优于他们签署的限价。这与发送到公共内存池的订单可能会以最差的价格执行的事实形成对比。因此,这种“瓦尔拉斯拍卖求解器”对用户的优势在于,通过签署次优价格,他们不仅获得了很好的执行概率,还获得了公平的价格。

(3)临时AMM

任何用户都可以通过签署一对订单来构建一个简单的AMM。想象一下,一个用户从600K单位的代币B开始。用户签署了:

(a)以最多1.98 B/A的价格购买任意数量的代币A。

(b)以至少2 B/A的价格出售任意数量的代币A。

假设价格开始为1.99。如果稍后这个价格降低到1.98以下,订单(a)将在某个时候被一个或多个参与者执行,一旦利用它对任何其他订单或流动性来源进行套利变得有利,或者可能在这之前发生。如果稍后价格上升到2以上,在完全执行订单(b)之后,用户将获得6062单位的代币B的利润。相同的订单可以一遍又一遍地执行,直到到期时间。通过将不等式替换为指向另一个函数的条件,可以设置由任意曲线定义的AMM。对于临时流动性提供者来说,这可能是实际的,因为这样他们可以避免加入和退出池的成本。

(4)多代币清算

一批涉及两个以上代币的订单可以在同一交易中清算。据我们所知,这在传统交易所中是不可能的。最简单的情况是一个三角形,其执行可能如下所示:

用户1 ---1000A---> 用户2

用户2 ---2000B---> 用户3

用户3 ---3000C---> 用户1

用户3 ----30C---> 填充器

其中每个用户签署了涉及一个交易对的一个订单。在这种情况下,能够部分执行订单再次至关重要,因为几乎所有情况下金额都不会完全匹配。

(5)用不同的代币支付交换费用

当用户想要交换两种罕见的代币时,填充器可能不支持这些代币来支付燃气成本。在这种情况下,用户可能会为此指定第三种代币。为此,他们必须在allowedTokens中包含这第三种代币,并添加一个不等式,根据执行金额限制费用金额。

线性不等式的局限性

正如我们所见,线性不等式作为标准条件格式允许最常需要的订单类型。与此同时,它们的验证是简单而高效的。然而,仅使用线性不等式和到期时间作为订单条件可能不足以满足非技术用户的需求。原因是如果用户在订单的到期时间之前进行转移,代币余额可能会发生变化,导致不需要的重放。有不同的方法可以减轻这种情况,而不添加其他条件,但是可能由于一些难以预测的未来趋势,它们可能无法完全解决问题。目前我们更倾向于限制这样的说法:对于专业用户来说,似乎有必要仅将其订单表达为线性不等式和到期时间。

私有与公共订单流程

在例(2)中,我们看到用户可能会从将订单发送给私人实体中受益。这些实体可以提供不同类型的保护,包括价格或到期时间方面的保护。这包括价格的小偏差,以及在错误情况下的大偏差。它们有能力延迟或取消订单。然而,并不总是更好地使用私人渠道。公开订单的执行概率更高,因为它们对任何人都是可见的。因此,我们可以期望也会有许多公共订单,并且这些公共信息将对其他人有价值。

在IDEX智能合约之上的应用

每个区块链智能合约可以从不同的界面进行操作。这是分散系统的一个强大特征。与IDEX智能合约互动的应用类别之一是用户界面(UI)。它们不仅会编码要签署的订单,还会在决策中协助用户,例如价格和到期日期,提供建议和警告。它们还可以为订单提供不同的目标,无论是私人的还是公开的。此外,UI可以显示用户可以直接填充或用作参考的待处理订单。

另一个有趣的应用类别是位于UI和结算智能合约之间的中间层。在某些情况下,这类应用程序需要以预定的方式处理订单,有时管理其隐私状态。我们设想SUAVE 3作为托管这类程序的MEVM智能合约的自然平台。一个例子是上述用例(2)中的拍卖师。可能可以将其推广到许多代币,而不仅仅是一个交易对。另一个示例是针对保护用户免受签署订单错误的应用程序。这主要由在订单上执行安全验证的智能合约组成,保护其隐私性,必要时可能会将其推向前方,如果它们是正确的话。我们预计这类应用程序在未来几年将成为一个研究和发展的活跃领域。

文章来源:互联网

相关阅读