引介 | DEX 聚合器性能全面分析
摘要:
报价优不代表整体成本低,就像买机票一样
太长不看
-
在 70% 的情况下,0x API 所提供的调整后价格优于 1inch、Dex Ag、Paraswap 和 Uniswap。所谓的调整后价格,就是支付完交易费后的价格。
-
0x API 1.0 在 gas 效率上处于市场领先地位。0x API 提供一个经过高度优化的自定义架构。因此,用户通过该 API 访问 Uniswap 流动性的成本与直接访问 Uniswap 一样低,甚至更低。
-
聚合器通过承诺让用户获得整个生态的最佳报价,来消除用户在选择交易平台时的心理障碍。然而,并非所有聚合器都相同:它们在定价、报价准确性、gas 使用量、回滚率(revert rate)和响应时间方面有不同程度的区别。
-
最佳报价并不一定是最佳调整后价格。就像买机票一样,可能还有一堆后续费用/成本。虽然基础票价可能很便宜,但是当你把所有附加费用(行李费、优先登机费、指定座位费等)算进来后,实际费用可能会很高。
-
0x API 和 Matcha(后台使用了 0x API)是 0x Labs 推出的两款产品,可以让 DeFi 开发者和交易者轻而易举地以所有 DEX 流动性来源中的最佳价格买卖资产。
DEX 流动性之战和聚合器的崛起
过去几周涌现出了大量新的流动性来源。有超过 40 亿美元的资金分布在 15 个来源上,而且每周还会有新的来源出现。因此,DEX 流动性变得比以往更加分散,让 DeFi 用户更难为特定交易找到最佳价格。
这就推动了聚合器的崛起。过去 12 个月以来,聚合器取得了巨大发展,其交易量在第三季度占总交易量的 9.6% 左右。但是,人们对聚合器有点误解。例如,虽然报价通常被当作是比较聚合器性能的唯一指标,但是人们时常会遇到一些聚合器报价 100 美元却以 90 美元结算的情况。报价并非实际的结算价格。这就引出了一个问题:究竟什么才是衡量聚合器性能的正确指标?
本文旨在揭示聚合器行业的现状以及如何客观衡量并比较聚合器的性能。
调整后价格——比较聚合器的黄金指标
我们认为要构建一个高性能的专业级聚合器,必须遵循以下原则:
-
准确性:聚合器应该具备准确性,即,结算价格应等于报价。轻微的差异是可以接受的,因为交易提交的时间与交易在链上确认的时间之间往往存在市场波动。然而,在其它所有条件不变的情况下,报价越准确的聚合器越好。所见即所得。
-
低成本:链上执行的操作越多,gas 使用量即越多,进而导致 gas 成本越高。聚合器的目标应该是尽可能降低成本,以确保用户获得最佳成交价格。聚合器应该适应当前 gas 价格市场,并相应调整路径。在 gas 上花的每一分钱都应该为用户带来更多价值。
-
低回滚率:为了保护用户,聚合器必须将任意大小交易的回滚率控制在较低范围内。如果遇上交易失败的情况,用户会感到非常沮丧,因为 gas 费已经付过了。
最后,我们将上述原则总结成一个黄金指标:调整后价格。
虽然我们单独分析了上述指标,但是本文主要聚焦于调整后价格。调整后价格指的是当交易在链上完成时,用户支付完交易成本(gas 费和手续费)后的价格。其计算公式如下所示:
调整后价格 = 已卖出资产的美元价值/(已买入资产的美元价值 - 交易成本的美元价值)
我相信,这个指标更适合用来比较聚合器,因为这是用户最终影响用户收益的价格。让我们来看一个例子:
某用户想要花 100 DAI 来买入 USDC。聚合器 1 的报价是 100 USDC,交易成本为 5 美元。根据上述公式,我们可以得出调整后价格 = 100/(100 - 5)= 1.05 美元。
再看另一个聚合器。同样的 100 DAI,聚合器 2 的报价是 104 USDC,但是交易成本为 10 美元。在这种情况下,调整后价格 = 100/(104 - 10)= 1.06 美元。
在上述例子中,聚合器 1 找出了一个更便宜的价格。虽然聚合器 2 的报价更高,但是我们可以看出交易成本对调整后价格的影响。总而言之,多花 5 美元买入 4 USDC 显然略贵一些。
我们模拟了 59,975 个交易,并计算了不同交易所的调整后价格,得出了以下结论:
- 0x API、1inch、Dex Ag、Paraswap 和 Uniswap 的调整后价格胜率。0x API 提供的调整后价格在 72% 的情况下优于其它聚合 -
平均来看,0x API 在 70% 的情况下表现优于其它交易所。也就是说,使用 0x API 聚合器(如 Matcha)的交易者获得所有 DEX 最佳价格的概率是 70%。
就调整后价格而言,我们发现随着交易额增加,交易所的获胜率会发生变化。就小型交易而言,Uniswap 的表现较好,因为其交易成本相比大多数聚合器更低。随着交易额增加,聚合器将履行其职能,开始将交易拆分给不同的来源。就任意大小的交易而言,0x API 都表现良好。随着交易额增加,聚合器开始显露竞争力。例如,就大型交易而言,1inch 相比 0x API 更具竞争力,因为它的来源更多。
方法论
这一节中分享的数据来自我们 0x Labs 构建的模拟工具。面对不同的代币对、交易额和确认延迟,我们都可以通过该工具持续进行报价并执行交易。如果你懂技术,我一说你们就懂了:这种模拟是在 Geth 节点上执行 eth_call
调用,并使用状态覆写来为交易提供资金并对其进行追踪,包括买卖数量和 gas 使用量等指标。
我们追踪的交易所包括 0x API、1inch、Dex Ag、Paraswap 和 Uniswap。在这次研究中,我们选择了这些 DEX 上最常见的 20 个交易对,并通过公开 API 平均每个交易所取 11,995 个交易作为样本。交易额范围在 100 美元至 100 万美元之间,结算延迟在 0 至 180 秒之间(模拟交易池中的等待时间)。这次模拟持续大约 78 小时,gas 价格在 47 至 194 gwei 之间波动,这样可以保证我们的研究反映市场情况。
在本报告内的图表中,绿色条形和 Matcha 代表的都是 0x API。只有调整后价格超出其它交易所 0.005% 的交易所才会被视为最终赢家。如果差距在 0.005% 以内,则视为平局。“包括 Metcha 在内的平局”指的是,0x API 和另外一家或多家交易所打平。“不包括 Metcha 在内的平局”指的是,除了 0x API 以外的两家或多家交易所打平。所有图表采用的颜色都是统一的。
准确性、gas 使用量、回滚率和响应时间
在本研究中,我们分析了三个不同的价格。因此,我们给出以下定义:
-
报价:针对特定交易的初始广告价格 —— 用户在 UI 中看到的标价。
-
实际价格:延迟后的实际结算价格。从交易提交到链上确认之间通常需要 0 至 180 秒。
-
调整后价格:当一笔交易完成时,用户支付完交易成本(gas 费和手续费)后的价格。换言之,就是实际价格减去成本。
- 0x API、1inch、Dex Ag、Paraswap 和 Uniswap 的报价和实际价格胜率。许多聚合器似乎针对报价进行了优化,但是最佳报价并不一定意味着最佳调整后价格 -
在上图中,我们可以看出,Uniswap 的整体表现并不突出。上图与调整后价格胜率图表形成鲜明对比。换言之,虽然 Uniswap 无法提供最佳报价,但是就 5000 美元以下的交易而言,它有时能提供最佳的调整后价格,因为交易费低。正如上文所述,随着交易额增加,Uniswap 的胜率会大幅降低,因为聚合器能够将交易拆分给不同的来源,从而找到最佳价格。
从这些图表中,我们还可以看出,0x API 在报价和实际价格上的胜率远远低于它在调整后价格上的胜率 —— 相差幅度平均为 19%,如果考虑到平局情况,报价和实际价格的胜率分别为 57% 和 63%。0x API 在调整后价格的平均胜率约为 72%。0x API 在报价和实际价格上的胜率之所以如此低,是因为我们在设计智能合约路由逻辑时作了明确的权衡,在计算订单的交易路径时考虑了 gas 成本。通过在 0x API 的智能订单路由中考虑 gas 成本,我们可保证价格优势超过从不同来源获取流动性的成本。
遗憾的是,许多聚合器似乎仅为在报价竞争中胜利做了优化,因为这能为他们吸引更多用户。然而,正如上文的聚合器 2 例子所示,不考虑交易成本的聚合器能提供更好的报价,因为他们愿意支付更多钱,但是这实际上对用户来说不是最优惠的方案。因此,最佳报价并不一定会带来最佳调整后价格。
一个很贴切的比喻是订机票。你有没有因为某个航空公司的航班看似比其它公司的航班便宜而订它的机票,最后却发现需要为选座位支付额外的费用,行李托运的收费也贵一点?虽然基础票价可能更便宜,但是加上杂七杂八的费用后反而支付了更多的钱。某些聚合器也是同样的道理:看似报价比其它聚合器高,但是一旦交易完成,实际到手的钱却低于预期。
以 1inch 为例,因为它在报价和实际价格上的胜率最高。从报价到实际价格再到调整后价格,1inch 的胜率呈阶梯式下降,从 22% 降至 19% 再降至 14%。这意味着,1inch 看似有 20% 的可能达成最佳交易。然而,一旦交易完成后扣除成本,事实往往并非如此。
通常来说,报价和实际价格之间产生差异的原因是,报价不准确,或者在报价到链上结算这段时间内市场价格发生变化,从而导致报价失效。实际价格和调整后价格之间的差异就是使用聚合器而产生的额外成本。
我们来看看所有交易所的准确性。交易所按照报价结算的概率是多少?
准确性很重要,因为它可以建立用户信任,并反映聚合器的报价是否与终端用户实际支付的价格相符。如果有足够多的时间和样本,差异会趋于 0。
正如上图所示,0x API 和 Uniswap 始终存在正偏差(即,大于零),也就是说交易的报价至链上结算之间的价格波动对用户有利。也就是所谓的正向滑点。一旦发生这种情况,0x API 总是会将正偏差传导给用户。
有趣的是,1inch 的偏差始终小于零,也就是说无论市场价格如何波动,用户都得不到更有利的价格。偏差小于零也表明,聚合器正在使用过时信息报价,或者响应速度不够快。这些问题可能会导致交易回滚概率变高。如果发生交易回滚,虽然没有发生代币买卖,但是用户依然需要支付交易费。后文会给出详细解释。
现在,我们再说回成本,在以太坊上是以 gas 使用量衡量的。在下图中,我们可以看出这些交易所的 gas 使用量之间存在很大差异。
就聚合器而言,正应了那句老话“少即是美(less is more)”。如果聚合器能给用户带来更多价值,那么成本高一点也无妨,但是正如我们之前在调整后价格胜率图中所显示的那样,大多数聚合器都无法做到这点。优化代码来降低 gas 使用量会提高聚合器将交易分割给更多来源以获取更多价值的可能性。
Uniswap 是 gas 使用量最低的交易所之一,因此这是所有聚合商都应该追求的目标,尤其是对于那些小型交易来说。一笔价值 100 美元的交易根本不可能分割到多个交易所上,即使 gas 价格只有 1 gwei 也是如此。
通常情况下,0x API 的成本比 Uniswap 高。但是,正如调整后价格胜率图所示,虽然 0x API 在 gas 使用量上略高一些,但是它有 70% 的概率让用户获得最佳调整后价格。其它所有聚合器的成本至少是 0x API 的两倍,也就是说,为用户带来了双倍的成本,但是几乎没有创造额外价值。1inch 和 Paraswap 是gas 使用量最高的交易所,从它们在调整后价格上的低胜率也可看出这点。
为便于客观比较,以下是所有价值 500 至 1000 美元的模拟交易的平均成本:
-
-
-
-
-
Uniswap — $3.93 (我们后面会说回这个数据)
过去 8 个月来,减少 gas 使用量一直是我们团队的重点。我们最初的目标是将交易成本降低 50%。然而,在 0x API 1.0 中,我们成功将平均交易成本降低了 76% 左右。就一笔 5 万美元的交易而言,0x API 1.0 的 gas 使用量约为 46 万 gwei,0x API 0.0 的 gas 使用量约为 150 万 gwei。这些优化已经将 0x API 变成了最高效的聚合器,无论交易大小如何。
事实上,gas 价格在上个月已经远高于 100 gwei。我们想向你展示 0x API 在这种情况下的调整后价格胜率。我们进行了第二次模拟,手动抬高了 gas 价格,结果发现在 gas 价格较高的情况下,0x API 的表现依然优于其它竞争者 —— 在 gas 价格高于 400 gwei 的情况下,提供最优调整后价格的概率为 80%。
现在,再回到 0x API 和 Uniswap 的 gas 使用量上。通常情况下,0x API 在 gas 使用量上高于 Uniswap。然而,在 70% 的情况下,0x API 提供比 Uniswap 更高的调整后价格。0x API 是如何做到这点的?我们的 0x Labs 团队构建了一个高度优化的合约,可以让 0x API 通过比默认 Uniswap 合约更节省 gas 的方式获得 100% 来自 Uniswap 的流动性。这对于路由至单个来源的小型交易(小于 5000 美元)来说尤为有利。
图左是直接路由至 Uniswap 的 ETH<>UNI 交易。图右是通过 0x API 100% 路由至 Uniswap 的 ETH<>UNI 交易。正如图中的“交易的 gas 使用量”字段所示,Uniswap 的交易成本约为 11.4 万 gwei,0x API 的交易成本约为 11 万 gwei,后者比前者低了 3.7%。某些链上状态和条件可能会改变结果(例如,如果用户需要设定新的限额),但是通常来说,通过 0x API 将交易路由至 Uniswap 的成本只会比直接在 Uniswap 上交易更低。
至此,我们已经讨论过了准确性和 gas 使用量,接下来该谈谈交易回滚了。当用户在这些交易所上交易时,交易失败的可能性有多大?
聚合器应该尽可能将回滚率维持在较低水平,因为在交易失败后还要支付 gas 对用户来说体验感很差。导致交易回滚的常见原因有:报价至链上结算这段时间内市场出现波动,以及报价不准确(尤其是在使用过时信息提供报价的情况下)。
我们的模拟工具始终在完美条件下执行交易,即,资金充足、不限量 gas 和无抢跑交易(即,消息没有泄漏到黑暗森林中)。我们排除了由这些原因以及现实生活中用户行为导致的交易回滚。因此,对于所有交易所来说,模拟回滚率都低于实际回滚率。尽管如此,模拟回滚率可以很好地反映交易所的表现。
在上图中,0 至 10 秒的延迟是最有趣的。延迟低于 10 秒则意味着交易立即执行,或交易刚提交后就被打包进了下一个区块。因此,在该延迟时段内,高回滚率意味着报价不准确。
一般而言,我们发现 Paraswap 的回滚率相比其它交易所是最高的,之后是 Dex Ag 和 1inch。在人类行为不会导致交易回滚的模拟环境中,发生回滚的可能原因之一是报价过时(如高延迟时段所示)或报价不准确(如低延迟时段所示)。如果你还记得,Dex Ag 和 Paraswap 的准确率最低。
接着来看回滚率对终端用户的影响。如果用户在每个交易所上进行 100 笔价值 500 至 1000 美元的交易,交易失败所造成的平均损失为:
在现实世界中,我们看到 Uniswap 的日回滚率高达 30%,然而在我们的模拟环境下,较长延迟情况下的最高回滚率为 1.3% 左右。实际回滚率和模拟回滚率之间的差异意味着所有 DEX 的用户体验都有很大的改进空间,不过这是另一个话题了。
模拟实验的结果是,我们的 0x API 的模拟回滚率在不同延迟情况下都是最低的。0x API 的模拟回滚率范围在 0.6%(较短延迟)至 1.8%(较长延迟)之间。在现实世界中, 我们发现 Matcha 等集成 0x API 的应用的周均回滚率范围在 3% 至 4% 之间。
现在,还有一个我们尚未提及的重要指标:响应时间。Matcha 等应用的终端用户可能对这一指标没有很深的感受。然而,当你在第三方基础设施上构建产品时,必须尽可能保证该产品是可靠且快速的。速度更快的聚合器可以让用户更快完成交易,减低滑点率和回滚率,并改善用户体验。
由于我们的 0x API 要从超过 13 个来源(包括由专业做市商提供流动性的系统 RFQ)取样,保持较低的响应时间是一项技术挑战。然而,我们的目标是让 0x API 成为最专业的流动性聚合 API。目前,0x API 的响应时间约为 1.5 秒,对此我们深感自豪。
在本研究涉及的所有交易所中,1inch 的响应时间是最长的,比 0x API 的响应时间高了 2.7 倍。1inch 的响应时间为 4 秒,大约是挖出一个新区块所需时间的 1/3,可能会导致时效性强的交易发生回滚,例如,在市场情况不断变化的高波动时期。
鉴于上述所有信息,如何选择最佳聚合器?我们可以计算各种交易场景下进行转移的平均收益或损失,从而得出从一个交易所转向另一个交易所产生的预期收益值。这就是用户的预期收益。
对于那些从其他聚合器转向 Matcha 之类集成 0x API 的应用的用户来说,低于 1 万美元的交易的平均预期收益为:
总的来说,如果在 1inch 上交易的用户转向 Matcha 之类整合 0x API 的应用,平均每笔交易预期可获得 7.17 美元的收益。如果他们是从 Uniswap 转向 0x API 的,则平均每笔交易预期可获得 17.14 美元的收益。
总结
我们的目标是分享我们在构建 0x API 方面的收获,并阐明聚合器之间并不明显的关键差异。正如我们在上文提到的那样,我们想要让这个行业变得更加透明,并引起关于如何客观衡量和比较不同聚合器的性能的讨论,让 DeFi 开发者和交易者可以做出明智的决定。
通过公开我们的数据,我们希望推进 DEX 聚合器行业,并继续为 DeFi 开发者和用户构建最佳应用。
如果你是 DeFi 开发者,可以阅读我们的 0x API 1.0 公告和 0x API 文档。如果你已经将 0x API 0.0 整合进了你的项目中,转向 1.0 的迁移过程非常简单。为以防万一,我们写了这份指南。
如有媒体咨询,请发送电子邮件至 clay@0xproject.com。
非常感谢 Ben、Jacob、Kroeger、Lawrence 和 Michael 对本文的贡献和反馈。
(完)
(文内有许多超链接,可点击左下 ”阅读原文“ 从 EthFans 网站上获取)
原文链接:
https://blog.0xproject.com/a-comprehensive-analysis-on-dex-liquidity-aggregators-performance-dfb9654b0723
作者: Fulvia
作者:以太坊爱好者;来自链得得内容开放平台“得得号”,本文仅代表作者观点,不代表链得得官方立场凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责得得号平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请发送至邮箱:linggeqi@chaindd.com
链得得仅提供相关信息展示,不构成任何投资建议
更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App
3069576
得得号
|
+
-
3158466
最新
|
+
-
3406538
DEX
|
+
-
评论(0)
Oh! no
您是否确认要删除该条评论吗?