用於DEX 路由器構建和分析的構建區塊

概述

用一種資產交換另一種資產是金融市場的一個基本概念。在加密貨幣市場中,這種情況通常發生在代幣或貨幣與他人交換或交易的地方。 Uniswap是一種自動流動性協議,有助於這種類型的交換。它使用成對或池(以下稱為對),兩種資產的池儲備,允許用戶將一種資產交換為另一種資產。

圖1.0:Uniswap代幣A和B池,以及流動性提供者(LP)和交易者的互換和存款交互示例。 LP接收池代幣以提供流動性。

如果有人想要的資產與他們想要交易的資產不成對,會發生什麼?在這種情況下,在多個對之間進行一系列互換以獲得所需的資產——用於促進這種交易的對被稱為路由。

圖2.0:一條涉及多對交易DAI 以換取USDC 的路由。

路由是從一個資產到另一個資產的路由,由零或多個對之間的段組成。如果交易的數量足夠大,或者如果一對的流動性足夠低,可以從多個路由中形成一條路由,通過吸收更多來自其他對的流動性來減少滑點。

圖3.0:由Paraswap路由器說明的多路徑路由

圖4.0:多路由

滑點是指一個人預期為資產支付的價格與實際支付的金額之間的差額,這是由一些因素造成的,比如訂單進入市場和交易執行之間的價格變動,或者成交量和流動性低。

另一個需要考慮的是路由中的段數。這將以在以太坊區塊鏈上操作的gas費用的形式增加交易成本。一條路由上的段數越多,所產生的gas費用就越高。類似地,如果有多種途徑,如上圖3和圖4所示,gas費用也會更高。

路由器必須考慮這些因素,以產生適合交易數量的路由。此外,由於市場狀況經常變化,影響gas費用和池的流動性,生成的路由也將是動態的,現在是一條很好的路由,不一定在一小時後或第二天表現良好。

本文的其餘部分將討論可用於構建和分析Uniswap V2協議及更高版本構建和分析路由器的構建區塊。

數據建模

注意:這裡提到的Graph協議不同於下一節討論的Graph數據類型。圖協議是一個或多個智能合約的區塊鏈交易的索引,而圖數據類型是指使用數學圖論的數據表示。

正如使用地圖在點之間導航一樣,可以使用圖數據類型來導航可用的流動性對,以生成可以評估以提高回報的路由。在對Uniswap 對進行建模時,一開始就需要做出一些實現選擇:

  • 作為頂點或邊的對、符號或資產標識符 ?

  • 有向還是無向?

  • 簡單還是多圖?

為了做出上述實現選擇,理解Uniswap對的屬性是很重要的:

  • 每一對都有一個唯一的ID。

  • 每對包含以下數據對2 個代幣:符號、名稱、ID。

  • 代幣符號不是唯一的——例如,符號BOND表示許多不同的資產或不同的ID。

  • 代幣名稱也不一定是唯一的。

  • 代幣ID是唯一的,並且是代幣的ERC-20合約地址。

Uniswap對的這些屬性建議使用代幣ID作為圖數據類型中的頂點。由此可見,圖的邊代表唯一的一對ID。在這種形式下,圖可以是無向的,也可以是有向的,每條邊代表一對ID、代幣價格和儲備。然而,不斷更新代幣價格和保留信息的需求表明,將該數據存儲在具有適當的實時設置的緩存結構中可能更有效和可擴展,特別是對於實時交易的應用程序,而不是靜態分析。

今後,在Uniswap V2和V3協議對之間路由是可取的。在這個場景中,可能存在多個對相同的代幣ID。雖然可以在一對ID之間添加額外的邊,但另一種解決方案是在同一條邊上分組不同的對ID,從而避免遍歷多重圖的性能成本。下面是分組對ID無向簡單圖結構的部分示例,其中符號ID 替換了符號名稱:

圖5.0:在一個無向簡單圖中對Uniswap V2和V3協議對進行建模(注意,實際結構使用代幣ID而不是代幣符號,所以在這裡會很麻煩)。

最初,深度優先搜索(DFS)已經證明可以遍歷圖,一般情況下深度限制為4。該深度的一個例外是從WETH開始的路由,其中連接節點的數量超過30000。當一條路由從WETH出發時,DFS被限制為2,以減少遍歷時間。

有許多用於處理圖形數據類型的工具,包括圖形數據庫Neo4J和RedisGraph。這些討論超出了本文的範圍,目前的項目需求可以通過Javascript庫Graphlib來滿足。然而,如果路由問題的規模達到了LinkedIn或其他大型網絡的規模,那麼上述圖表數據庫的規模就會滿足這些需求,從而權衡成本和開發複雜性。

約束

當在圖數據結構中計算路由時,約束是有用的。例如,它們有助於確定只遍歷有限數量對的路由,或者可以用來忽略包含某些資產的對的路由。

現有的Uniswap V2 路由主要是通過六項資產的路由,這些資產可以比作機場樞紐。這六項資產是:

  • 威斯

  • DAI

  • USDC

  • USDT

  • 補償

  • MKR

這六種資產是有用的,因為它們是常用的,當它們與其他資產成對組合時,不會施加流動性限制(即它們不是稀缺的,並且不會與新的、未經證實的加密資產構成相同的風險)。然而,它們的使用可能會造成效率問題,在這裡說明:

“Uniswap沒有以去中心化的方式路由交換。”

使用約束,比如忽略上面提到的6個“樞紐”資產,可以探索比當前Uniswap V2界面提供給用戶的更有效的潛在路由。約束也可以擴展到其他標準,例如:

  • 通過具有X 美元流動性或Y% 美元交易的池路由。

  • 通過具有特定定價的特定池路由。 (適用於Uniswap V3協議)。

同樣值得注意的是約束是可組合的,也就是說,它們可以組合在一起,這樣路由就可以限制為最多2 個池,每個池的流動性超過X。當前的數據模型在圖數據類型和查找表之間拆分數據,這意味著在圖遍歷期間和之後發現對數據時都可以修剪路由。

擴展

擴展主要考慮向路由器公開一個公共API,以便基於當前市場數據計算路由。性能是一個函數:

  • 計算路由的時間

  • 如果需要,獲取更新對數據的時間(代幣價格和儲備)

  • 計算路由請求的影響所需的時間

下圖說明了一個初始的系統架構,其中包含用於最常請求路由的緩存和用於計算路由請求影響的緩存對數據。這種架構非常靈活,可以以多種方式進行水平擴展。例如,完全複製圖數據結構和路由緩存以及請求聚合器和對緩存,或者簡單地複制緩存並在緩存之間分配路由請求。

圖6.0:具有可擴展組件、緩存和定期更新的路由服務架構。

另一個潛在的可擴展性修改可能是考慮路由請求和數量的完整路由解決方案緩存;如果數量在一定的公差內,最近計算的結果可以重用。根據用戶體驗和應用程序的需要,最近計算的結果也可以用作臨時結果,而為用戶計算更精確的結果。

路由緩存

路由緩存由最常請求的路由的結果組成,其生存時間(TTL) 與數據源的定期更新頻率相關。例如,如果之前請求過WETH和DAI之間的一條路由,則可以在路由緩存中以可能路由數組的形式找到圖遍歷的結果:[WETH -> USDC -> DAI, WETH -> WBTC -> DAI,…]。與代幣價格和儲備等對數據不同,路由可能性——特別是配對的存在——變化較少,因此該緩存的TTL預期要比對數據緩存大得多。此外,該組件還可以擴展為包含對死路由(即過期或已被取代的令牌地址或非流動對)的試探法。

配對數據緩存

配對數據緩存包含特定對的代幣價格和保留數據,便於計算使用指定數量路由請求的影響。該數據比可用路由選項的變化更頻繁,並且將具有大約一個以太坊區塊(約15 秒)的TTL。

當請求的數據不在緩存中時,這些請求將被捆綁在一起,並從數據源中獲取,目前是Graph協議中的Uniswap子圖(見下面的數據源部分),最多可包含1000 對數據查詢。發送捆綁的對數據請求之前的等待時間將根據流量進行調整——在低流量的場景中,讓用戶等待直到發出額外請求是沒有意義的。

此外,為了改進用戶體驗,在獲取和計算更新數據時,可能會呈現基於舊數據的預結果。

靜態分析

路由性能將通過將生成的路由與現有Uniswap V2路由器的路由進行比較來評估。具體來說,是通過計算給定數量的源代幣的收益。例如,在從DAI到COMP的交易中,路由器的性能將通過計算從100萬個DAI代幣接收到多少COMP,並檢查從Uniswap V2路由器建議的路由獲得的相同結果來進行比較。性能將根據各種不同的輸入進行測量,例如,不同的初始數量,對搜索深度的不同限制等。

在執行靜態分析時,不需要圖6.0中所示的對數據緩存和捆綁請求。靜態分析是在區塊鏈的特定區塊時間內對交易的計算。它有助於結果的一致性和重複性,以便進行比較。為Uniswap V2設計新路由器的初始工作範圍由靜態分析提供幫助,在靜態分析中,可以在一個區塊時間評估一組交易,並與現有的路由算法或變體進行比較。如果潛在的配對數據發生變化,則不清楚交易結果的改善或下降是由於算法變化還是配對流動性和定價。

數據源

隨著區塊鏈技術的成熟,出現了大量提供區塊鏈當前和歷史數據的服務。數據源的選擇涉及下列考慮事項:

  • 預算

  • 開發工作和成本

  • 延遲

  • 數據的準確性

開發工作和成本可以通過使用預先消化或索引的數據來減少,就像在Graph Protocol的眾多子圖中發現的那樣。

對於初始交換路由器的設計和實現,將使用Graph Protocol中的Uniswap子圖。該數據源提供了極好的易用性,能夠分析過去的合約數據,否則將需要更昂貴的存檔以太坊節點,並且能夠在不執行靜態分析時在單個HTTP請求中更新1000對數據。 Graph Protocol中的數據延遲比前面提到的解決方案低得多,只有通過直接運行以太坊節點或對內存池建模(或者使用Blocknative之類的服務)才能勝出。 Graph Protocol的延遲明顯在1區塊左右,在某些索引場景下可以動態改變。值得注意的是,當索引和映射區塊被證明無效時,數據也可以更改。

一旦對交換路由器設計進行了評估,這個數據源將被證明不適合生成路由,因為實時數據需要具有競爭力。在這樣的場景中,需要直接來自區塊鏈當前狀態的數據,例如來自Alchemy、Infura或其他來源的以太坊節點。

未來

上面概述的系統提供了靈活性和可擴展性,以分析現有Uniswap系統的性能,以及在協議之上構建新的系統,包括一個成熟的交易解決方案。類似於Coinbase vs Coinbase Pro或Synthetix vs Kwenta,也有一些對專業交易者至關重要的高級功能,我們在下面列出了一些。

交易生成器

通過使用避免上述6個樞紐代幣的約束,本文描述的系統可以用來檢查某些代幣之間的替代路由及其效率。這可以定期完成以構建一個基於啟發式的列表,現有系統/交易者可以使用該列表來改進對這些對的推薦路由,或允許他們進行其他更改。

跨協議路由

通過增加圖形或交替地使圖形數據結構成為多圖並添加額外的數據源,可以擴展該系統,為用戶提供跨Uniswap V2和V3協議的資產之間的路由。根據目標的不同,這可以減少交易中的滑點,也可以對分散的流動性進行管理。

跨層路由

類似於跨協議,路由器可以擴展到生成跨層路由。降低gas費用和改進交易帶寬的承諾表明,layer2解決方案將有助於定義以太坊未來的很大一部分。在L2和L1資產之間交叉提出了一個新的路由挑戰,其複雜性超過了協議交叉。然而,相同的基本構建區塊可以生成允許跨層交易的解決方案,利用即將到來的協議來實現這一目的,例如Hop Protocol、Nova等。

電動汽車

通過將路由解決方案與防止MEV的技術相結合,如Flashbots,該路由系統可用於保護大額交易免受攻擊。試探法或其他輸入可以確定一筆交易的價值是否足以表示這種風險,然後保護性解決方案可以自動合併由確定的最佳路由提出的交易解決方案中。

低延遲數據源和預測路由

Graph Protocol數據源雖然方便和快速,但通常至少有1區塊延遲。對於某些交易應用來說,這可能還不夠。在這方面,可以替代其他性能更好的數據源,要么直接綁定到一個以太坊節點,要么過濾已完成的感興趣的交易,以更新路由系統的數據結構。更進一步,還可以構造內存池的有限描述,並應用類似的交易過濾,以提供未執行的已知交易狀態下的預測路由結果。

來源:https://medium.com/@ValveFinance/building-blocks-for-dex-router-construction-analysis-acc03b9f15d8

Total
0
Shares
Related Posts