本文結合實際體驗和官方文檔,對這個新功能做一次較為全面的解析。

作者: Cobo 安全團隊,Cobo Global

封面: Photo by  Shubham Dhage  on  Unsplash

前段時間,著名的鏈上聚合器 1inch 發布了最新功能 Fusion Swap,該功能旨在讓客戶在交易過程中免除手續費,零滑點並減少用戶被 MEV 的風險。根據描述,該功能似乎是 Limit order 和 Private Tx 的結合體。從這方面來看,該功能大大增強了用戶體驗。為了探究其中的原理與研究其中是否存在一些文檔中沒提到的用戶交互過程中需要注意的地方,本文結合實際體驗和官方文檔,對這個新功能做一次較為全面的解析。

原理分析

根據 1inch 官方文檔對 Fusion 功能的介紹,Fusion 功能實現上是基於 1inch V5 聚合器合約。不同的是這次 1inch 在此基礎上引入了新的概念,名為 resolver。我們首先來看看官方對 resolver 的定義:

從描述上看,不難發現 resolver 是專門用於處理 Fusion Swap 訂單的,也就是說針對 Fusion Swap 類型的訂單,只有註冊的 resolver 才可以處理。為此,1inch 也提供了一份關於如何成為 resolver 的流程:

從指引上來看,成為 resolver 的條件是抵押 1inch 代幣,不過這裡最關鍵的信息在第一條:成為 resolver 的條件是需要抵押額在所有抵押中的前 5 才能獲得處理 Fusion Swap 訂單的資格,並且這個訂單只能由 resolver 來處理。

除了 resolver 之外,描述中同時也提到了另外一個名詞—— Dutch Auction,從描述上來看,就是一個兌換率會隨著時間不斷減少的限價訂單。這裡似乎有點矛盾。為什麼已經是限價訂單了,還可以兌換率不斷變化?為了弄清楚這個問題,Cobo 安全團隊專門去體驗了一下。找到了一些關鍵的信息:

以上是 Cobo 安全團隊其中的一筆兌換交易的細節。從調用的函數中來看,Fusion Swap 功能其實就是調用了最新的 V5 Aggreation 合約的 fillOrderTo 函數,該函數確實是一個只用於處理限價單的函數,通過 makingAmount / takingAmount 來確定對應的兌換比率,並在函數邏輯中把交易最後返回的 amount 和 takingAmount 進行對比,檢查是否滿足限價條件(相應邏輯這裡不展開,有興趣可自行探討),交易中的兌換率是需要用戶簽名的,無法更改。所以這裡無論怎麼看都是純純的限價訂單。那動態的兌換率又是如何實現的呢?我們一起來看看 1inch 官方針對 Dutch Auction 的描述,如下:

Cobo 安全團隊從中摘取了一些關鍵信息:1、這個限價訂單是存在等待時間的。2、限價訂單最開始的兌換比率是用用戶理想情況能兌換出的代幣數量來計算得出的。3、隨著訂單等待時間的推移,兌換比率會逐漸下降,也就是說用戶能得到的代幣數量會越來越少。

明白了這些信息後,結合實際體驗過程中的所調用的函數和 resolver 的作用,不難推斷出其實 Fusion Swap 功能就是利用限價訂單的模式,把兌換率設置為用戶可以獲得的最低數量的代幣反向計算出來的兌換率,然後剩餘的浮動部分,也就是用戶額外能得到的交給 resolver 來決定。隨著時間的推移,用戶能得到的部分會越來越少,但是這個 “少” 僅僅是 resolver 決定的少,而並不體現在鏈上,畢竟用戶簽名的訂單信息,已經設置了最低的兌換率。

在 1inch 的文檔中,有對這部分做了一個詳細的圖表,我們拿其中一個來進行分析:

通過這個圖,其實不難發現,在等待的過程中,訂單發布給 resolver 後,兌換率是隨著區塊推移分成 3 段不同的斜率下降的,並不是一個勻速的過程。在這個過程中,等待 10 個區塊後的斜率最大,最後跌到用戶設置的最低兌換率中。整個過程中,用戶最大損失為 0.1% 左右。按目前以太坊 12 秒一個區塊來看,15 個區塊就是 3 分鐘的的時間,也就是說如果用戶的訂單發布了 3 分鐘之後如果沒有任何 resolver 願意成交,那麼作為用戶,就需要承擔 0.1% 左右的損失。而這個圖只是其中一個例子。根據不同的兌換交易對和市場情況,曲線可能會存在不同的形態,即用戶最低代幣返回數量也會有所不同。

通過上面的簡單分析,其實我們已經可以對 Fusion Swap 這個功能下一些簡單的定義,方便我們後續的一些分析:1、用戶簽名一筆限價訂單,兌換率設置為當前價格的 99.9%。2、交易本身只會由 resolver 進行處理,類似進了交易隱私池,別人無法搶跑用戶的交易。3、resolver 有權選擇是否處理這筆訂單,並調整用戶設置的最低代幣返回數量部分以外的數量,這個浮動部分最低可以是 0。4、訂單最長的等待時間為 3 分鐘。

產品優缺點分析

通過上面的分析同時結合 Cobo 安全團隊的體驗來看,Fusion Swap 這個功能的優缺點如下:

優點——手續費

Fusion Swap 本身的訂單直接交給 resolver 進行處理,用戶本身只需要負責簽名,該過程特別適合一些剛好就沒了手續費或者以太坊網絡突然繁忙導致預留手續費不夠的情況,特別是網絡繁忙的時候——一般都是市場出現下跌的情況,這種場景下可以零手續費快速交易的場景顯然是非常重要的。

優點——MEV Protect

延續 resolver 的話題,由於 resolver 本身來處理交易,在交易超大額 (100 萬美金以上),用戶可以不考慮可能的被搶跑的風險,相當於交易放進了一個隱私池中,會有 resolver 專門去處理你的交易。

缺點——時間成本

一筆完成的交易需要最長等待 3 分鐘的時間來完成,在市場瞬間下跌或者波動比較大的情況,由於 resolver 無法找到合適的兌換率導致用戶無法快速成交訂單。最終在 10 個區塊之後承擔大斜率的兌換率下降,嚴重影響收益。如果同樣的兌換場景下, Gas fee 多給一點,只需 12s 就成交了。

缺點——隱含的滑點損耗

通過上面的分析,我們知道 Fusion Swap 這個功能並不是描述所說的零滑點,而是兌換的過程的滑點,即等待的過程中滑點已經產生了。以上面 1inch 給出的圖為例,這個滑點最大是 0.1%,50,000 USDC 最差的情況下會損失 50 USDC 左右。但是結合 Cobo 安全團隊的多次體驗,這個滑點的部分並不能由用戶來簽名在進行前端交互時決定,用戶在簽名交易訂單的過程中,只能簽名設置交易返回的最小值。所以理論上,resolver 可以無視市場真實價格,直接按照用戶簽名的最低返回數量來撮合用戶的交易訂單。由於算法本身並不透明,用戶無法預估真實的返回額,導致用戶需要自行承擔這部分的風險。相比之下,使用 1inch 傳統的兌換,在網絡繁忙的時候交易費也僅為 40 美元,遠低於用戶需要承受的損失 50 美元。

為了真實還原,Cobo 安全團隊也做了適當的模擬,如下:

通過真實的交易過程,可以發現用戶實際的兌換滑點在 0.6% 左右,而簽名中的 takingAmount 也是只指定了最低返回數量。

總結

結合使用體驗上,1inch 的 Fusion Swap 功能,除了官方提到的優點之外,用戶還需結合自身的場景和使用情況來使用這個功能。在行情波動較大的時候,由於無法預知兌換率的斜率,可能會導致等待時間中用戶需要承擔較大的損失。從分析來看,等待時間是 Fusion Swap 最大的不可控因素。但是總體來看,該功能適合價格波動較小的時候進行兌換或者進行穩定幣之間的兌換,這種情況下就不需要擔心因為時間流逝而導致兌換率下降。在市場行情波動較大的情況下,嘗試使用 1inch 的傳統兌換會是一個較好的選擇。

免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。