前段时间,著名的链上聚合器1inch发布了最新功能FusionSwap,该功能旨在让客户在交易过程中免除手续费,零滑点并减少用户被MEV的风险。根据描述,该功能似乎是Limitorder和PrivateTx的结合体。从这方面来看,该功能大大增强了用户体验。为了探究其中的原理与研究其中是否存在一些文档中没提到的用户交互过程中需要注意的地方,本文结合实际体验和官方文档,对这个新功能做一次较为全面的解析。原理分析
根据1inch官方文档对Fusion功能的介绍,Fusion功能实现上是基于1inchV5聚合器合约。不同的是这次1inch在此基础上引入了新的概念,名为resolver。我们首先来看看官方对resolver的定义:
从描述上看,不难发现resolver是专门用于处理FusionSwap订单的,也就是说针对FusionSwap类型的订单,只有注册的resolver才可以处理。为此,1inch也提供了一份关于如何成为resolver的流程:
从指引上来看,成为resolver的条件是抵押1inch代币,不过这里最关键的信息在第一条:成为resolver的条件是需要抵押额在所有抵押中的前5才能获得处理FusionSwap订单的资格,并且这个订单只能由resolver来处理。
除了resolver之外,描述中同时也提到了另外一个名词——DutchAuction,从描述上来看,就是一个兑换率会随着时间不断减少的限价订单。这里似乎有点矛盾。为什么已经是限价订单了,还可以兑换率不断变化?为了弄清楚这个问题,Cobo安全团队专门去体验了一下。找到了一些关键的信息:
以上是Cobo安全团队其中的一笔兑换交易的细节。从调用的函数中来看,FusionSwap功能其实就是调用了最新的V5Aggreation合约的fillOrderTo函数,该函数确实是一个只用于处理限价单的函数,通过makingAmount/takingAmount来确定对应的兑换比率,并在函数逻辑中把交易最后返回的amount和takingAmount进行对比,检查是否满足限价条件,交易中的兑换率是需要用户签名的,无法更改。所以这里无论怎么看都是纯纯的限价订单。那动态的兑换率又是如何实现的呢?我们一起来看看1inch官方针对DutchAuction的描述,如下:
Cobo安全团队从中摘取了一些关键信息:
1、这个限价订单是存在等待时间的。2、限价订单最开始的兑换比率是用用户理想情况能兑换出的代币数量来计算得出的。3、随着订单等待时间的推移,兑换比率会逐渐下降,也就是说用户能得到的代币数量会越来越少。
明白了这些信息后,结合实际体验过程中的所调用的函数和resolver的作用,不难推断出其实FusionSwap功能就是利用限价订单的模式,把兑换率设置为用户可以获得的最低数量的代币反向计算出来的兑换率,然后剩余的浮动部分,也就是用户额外能得到的交给resolver来决定。随着时间的推移,用户能得到的部分会越来越少,但是这个“少”仅仅是resolver决定的少,而并不体现在链上,毕竟用户签名的订单信息,已经设置了最低的兑换率。
在1inch的文档中,有对这部分做了一个详细的图表,我们拿其中一个来进行分析:
通过这个图,其实不难发现,在等待的过程中,订单发布给resolver后,兑换率是随着区块推移分成3段不同的斜率下降的,并不是一个匀速的过程。在这个过程中,等待10个区块后的斜率最大,最后跌到用户设置的最低兑换率中。整个过程中,用户最大损失为0.1%左右。按目前以太坊12秒一个区块来看,15个区块就是3分钟的的时间,也就是说如果用户的订单发布了3分钟之后如果没有任何resolver愿意成交,那么作为用户,就需要承担0.1%左右的损失。而这个图只是其中一个例子。根据不同的兑换交易对和市场情况,曲线可能会存在不同的形态,即用户最低代币返回数量也会有所不同。通过上面的简单分析,其实我们已经可以对FusionSwap这个功能下一些简单的定义,方便我们后续的一些分析:
1、用户签名一笔限价订单,兑换率设置为当前价格的99.9%。2、交易本身只会由resolver进行处理,类似进了交易隐私池,别人无法抢跑用户的交易。3、resolver有权选择是否处理这笔订单,并调整用户设置的最低代币返回数量部分以外的数量,这个浮动部分最低可以是0。4、订单最长的等待时间为3分钟。
产品优缺点分析
通过上面的分析同时结合Cobo安全团队的体验来看,FusionSwap这个功能的优缺点如下:
优点——手续费
FusionSwap本身的订单直接交给resolver进行处理,用户本身只需要负责签名,该过程特别适合一些刚好就没了手续费或者以太坊网络突然繁忙导致预留手续费不够的情况,特别是网络繁忙的时候——一般都是市场出现下跌的情况,这种场景下可以零手续费快速交易的场景显然是非常重要的。
优点——MEVProtect
延续resolver的话题,由于resolver本身来处理交易,在交易超大额(100万美金以上),用户可以不考虑可能的被抢跑的风险,相当于交易放进了一个隐私池中,会有resolver专门去处理你的交易。
缺点——时间成本
一笔完成的交易需要最长等待3分钟的时间来完成,在市场瞬间下跌或者波动比较大的情况,由于resolver无法找到合适的兑换率导致用户无法快速成交订单。最终在10个区块之后承担大斜率的兑换率下降,严重影响收益。如果同样的兑换场景下,Gasfee多给一点,只需12s就成交了。
缺点——隐含的滑点损耗
通过上面的分析,我们知道FusionSwap这个功能并不是描述所说的零滑点,而是兑换的过程的滑点,即等待的过程中滑点已经产生了。以上面1inch给出的图为例,这个滑点最大是0.1%,50,000USDC最差的情况下会损失50USDC左右。但是结合Cobo安全团队的多次体验,这个滑点的部分并不能由用户来签名在进行前端交互时决定,用户在签名交易订单的过程中,只能签名设置交易返回的最小值。所以理论上,resolver可以无视市场真实价格,直接按照用户签名的最低返回数量来撮合用户的交易订单。由于算法本身并不透明,用户无法预估真实的返回额,导致用户需要自行承担这部分的风险。相比之下,使用1inch传统的兑换,在网络繁忙的时候交易费也仅为40美元,远低于用户需要承受的损失50美元。
为了真实还原,Cobo安全团队也做了适当的模拟,如下:
通过真实的交易过程,可以发现用户实际的兑换滑点在0.6%左右,而签名中的takingAmount也是只指定了最低返回数量。
总结
结合使用体验上,1inch的FusionSwap功能,除了官方提到的优点之外,用户还需结合自身的场景和使用情况来使用这个功能。在行情波动较大的时候,由于无法预知兑换率的斜率,可能会导致等待时间中用户需要承担较大的损失。从分析来看,等待时间是FusionSwap最大的不可控因素。但是总体来看,该功能适合价格波动较小的时候进行兑换或者进行稳定币之间的兑换,这种情况下就不需要担心因为时间流逝而导致兑换率下降。在市场行情波动较大的情况下,尝试使用1inch的传统兑换会是一个较好的选择。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。