井上  康弘

井上 康弘

1657784586

揭示 DODO 研究聚合器的秘密

“如何為用戶找到最優的出價”是去中心化金融(DeFi)的重要組成部分。目前市面上的 DeFi 協議比較多。不同的協議具有獨特的算法。由於 DeFi 的流動性來源相對獨立,不同的礦池對同一種幣種會有不同的報價。去中心化交易所(DEX)設計了它的算法來吸引流動性提供者(LP)以獲得更好的報價。另一方面,1inch、0x等聚合器選擇了另一種方式:通過搜索不同礦池形成的路徑,在gas的控制下找到用戶的最優出價。

隨著市場的發展,1inch、0x等聚合商也將擁有其獨特的報價來源。Balancer 和 Uniswap V3 等 DEX 也會將用戶的一筆交易拆分成多條路徑。不同的是,DEX 的聚合算法依賴於其報價池,而聚合器則充分利用了 DeFi 的可組合性。聚合器可以為用戶提供最優報價,因為它可以訪問自己的礦池和其他 DEX 的礦池,增加了整個鏈的流動性來源。

DODO致力於為用戶提供最佳的交易體驗。DODO除了開發PMM池外,還自主開發了聚合算法。DODO 的聚合算法不是 Uniswap 等 DEX 的拆分路由算法,而是類似於 1inch 和 0x 的聚合算法。DODO 不僅會插入其池,還會插入其他 DEX 池,以更好地利用流動性。

本文由兩部分組成。第一部分將介紹聚合問題的建模。第二部分將介紹DODO的聚合器算法,分析聚合器工程設計的難點。

1. 建模介紹及解決方案分析

正確的建模是解決問題的良好開端。讓我們從最直接的問題開始:線性路由。

1.1 線性路由

線性路由是尋找為目標代幣提供的最佳交易路徑的過程,其中交易對僅通過池。例如,如果用戶需要將 ETH 交易到 USDC,A 線性路由找到的最優路徑是將 ETH 交易到 USDT,那麼它去 USDC,而不是 [ACB] 或 [ADB](即資產 A 是不分成兩部分並選擇不同的路徑)。選擇的路徑只經過兩個池。這兩個池可能來自不同的協議。例如,ETH 到 USDT 的交易協議來自 Uniswap V3 礦池,USDT-USDC 協議來自 Curve V1 礦池。Uniswap V2 和 PancakeSwap 等 DEX 也使用這種路由模型。但是,他們的流動性來源是他們的交易所。Uniswap V2 路由僅通過 Uniswap V2 池,而 PancakeSwap 路由僅通過 PancakeSwap 池。

【圖2:圖中紅框內的內容為路由路徑】

假設用戶需要出售的代幣:fromToken,想要購買的代幣:toToken。對於任何礦池,baseToken被定義為賣出代幣, quoteToken被定義為買入代幣。第一個礦池的 baseToken 必須是fromToken ,最後一個礦池的 quoteToken 必須是toToken,如下圖所示。

可以直接概括為一個最大值問題:有n種不同的資產,還有k種其他不同的池子,每個池子中兌換的代幣數量可以用一組函數來表示

由於雙代幣池可以代表所有三代幣或多代幣池,所以函數可以進一步簡寫為:

其中,αi 表示 iᵗʰ 資產的數量,αi 表示 jᵗʰ 資產的數量,k表示池數。假設用戶的fromToken數量為αᶠ,最後可以得到toToken的數量αᵗ 過程中兌換的代幣集如下:

在這個過程中有 m-1 個池,我們將其表示為 theta:

然後,

如果我們能找到上述問題的解決方案,我們就可以得到最優路徑。

這個建模還是太抽象了,我們可以用圖論來構建另一個模型。從ijbaseToken表示邊 ρⁱʲᵏ,從ji的邊是 ρʲⁱᵏ 邊權重設置為 α₀ 除以池αⱼ交換的 quoteToken 數量。α₀/αⱼ可以構建如下多邊多環有向圖,如下圖:

那麼問題可以概括為:從原點F,即從fromToken中找到一條權重最小的路徑到toToken

乍一看,這似乎是一個關於最短路徑的直截了當的問題,並且有很多成熟的算法可供參考。但與普通最短路徑問題不同的是,在尋找下一條邊的過程中,一條邊的權重下與節點序列前面的路徑相關聯。因此,在節點加入隊列的最優路徑中,每個節點都有一個需要實時維護的狀態。它使記錄路徑長度的後續序列節點與前面序列節點的狀態相匹配。而在這個問題中,最終的“最小權重”不是通過對路徑上所有邊的權重求和來計算的,而是通過僅計算toToken節點的入口權重來計算的。這一特點使得傳統的最短路徑算法不能完全適用。

當節點較少時,直接用深度優先搜索(DFS)算法搜索更為直觀,即遍歷每條路徑,得到最終toToken價格,選擇最優路徑供用戶兌換。Uniswap V2 路由使用這種方法來尋找最優路徑。Uniswap V3 路由的第一個版本也使用這種方法。但是,與 V2 不同的是,V2 的價格可以直接通過鏈計算。然後multi-call調用quoter合約,直接得到結果。

【圖5:Uniswap v2路由算法源碼】

上述模型不適用於 BFS 算法。假設按照邊進行BFS算法(即按照池進行BFS算法)。這種情況下,該狀態下未被選中的池需要同步維護。下一步只能在未選中的池中進行擴展,這與DFS算法的複雜度沒有區別,但會大大增加記錄的空間成本。但是,如果按照 BFS 算法擴展節點,就會出現一個致命的問題:節點可以重複遍歷。因此,它不滿足 BFS 算法條件。

同樣,由於後效應的存在,暫時沒有考慮DFS算法中的剪枝方法。下一個最好的方法是在進入 DFS 算法之前預先對池大小進行排序並刪除一些池,但是刪除池存在一定的風險,可能會影響最優性。

DFS算法的應用可以保證當前圖的fromTokentoToken的最優路徑。時間複雜度與層數有關。好在為了保證gas的合理性,遞歸層數不會超過4,所以時間複雜度為O(l^3),l為總邊數。

1.2 拆分路由

在考慮複雜問題時,選擇最優報價路徑也稱為拆分路由。在尋找交易路徑的過程中,一個交易對可能會經過不同的池子,用戶的資金以最優的比例分配到不同的池子中進行兌換,從而使目標代幣的報價最優。同樣,以 ETH-USDC 為例。交易路徑仍然是通過 ETH 到 USDT 再到 USDC。ETH 和 USDT 可能會經過兩個池子。30% 的 ETH 通過 Uniswap V3 轉換為 USDT,70% 通過 DODO V2 轉換為 USDT。下次交易將USDT兌換為USDC時,初始USDT為以上兩部分USDT之和,找到USDT與USDC的最優拆分。

在最優出價路徑中,完整的fromAmount可以根據路徑金額的比例分成不同的路徑或池子進行交易。可以在原始圖中定義流網絡,具體取決於用於分區的最小比例單位。如果fromAmount可以分為n部分,則可以建立超級源。從超級源到fromToken節點的流量上限為n,其餘邊的流量上限為正無窮大。α₀除以池αⱼ交換的quoteToken數量, α₀ /αⱼ作為邊cⁱʲᵏ的成本,使用上述簡化方法,池k僅包含ij標記,可以簡化為 cʲᵏ。那麼問題就是在圖中找到成本最小的最大流量。

特別是,費用是動態的。具體來說,為了確保符合節點的度數界限,我們可以假設流量在通過節點時不會增加或減少(原始數量的x %),只會影響成本。由於邊的成本與baseToken的數量有關,而數量與路徑有關,所以每條邊的成本w可以定義為:

其中 cⁱʲᵏ 是路徑成本,baseTokeniquoteTokenj,池數是k。它是 wⁱᵏ 的函數,它是池的報價函數。𝔲 是從0I的路徑,wⁱᵏ 定義為節點i上經過路徑k的流量。有:

wⁱ 是節點I的流量。因為影響quoteToken數量的唯一因素是baseToken數量,所以 cⁱʲᵏ 可以進一步簡化為:

其中 cᵢₗ 是節點i的輸入成本,ι∈ ∑ [1,…,q] 是輸入邊的數量。解決分割比的問題,一個常見的思路是把可能的流分成n份,然後把Pⁱʲᵏ邊分成n份。流量被分成 n 個相等的部分,表示為 wⁱᵏ=1,2…n。在哪裡

其對應的邊 P'ⁱʲᵏ,0<o<n+1,則 cⁱʲᵏ 定義為:

由同一組邊分隔的子路徑不應重複選擇。

同樣,最終解決的最小成本僅由toToken的輸入成本定義。

由於代價依賴於過去的路徑,通常用於求解最小代價最大流量的增廣路徑算法並不適用。另一個問題是,這種方法限制同一個池只能取其中一個拆分的子路徑,因此無法計算子路徑之間的總和,增廣後的路徑也不能簡單地反向流動。

這個問題需要另一種解決方案。因為這個問題是一個優化問題,在計算力和時間足夠的情況下,可以考慮隨機的模擬參數。MCMC估計參數可以直接計算使用。實際行業中的人們更關心時間和可靠性,而不是問題的最佳解決方案。在以下部分中,我將嘗試分析業內其他聚合器的解決方案,以說明該問題的兩種簡化解決方案。

1.3 聚合器分析

0x

0x通過0x源碼分析和API返回結果,將問題簡化為兩個獨立的模型,分別給出最優報價,然後選擇最優解返回給用戶。

簡化問題 1:線性路由,由 API 返回的多跳產生。

簡化問題 2:單跳拆分路由。僅保留fromTokentoToken池。

對於單跳拆分路由,每條路徑可以根據離散係數N拆分為N條子路徑,當流量為i時,每條子路徑的成本為quoteToken,也是toToken的單價,然後解決了。

特別是 0x 在構建 SushiSwap 或 Uniswap 相關路徑時會調用路由合約,因此路徑中可能存在多個中間躍點,本質上將這些躍點計算為整個池。

1英寸/ParaSwap

對於 1inch,1inch v2 中的最佳氣路是線性路線。

1inch v2的分割路由更新了Pathfinder算法,其結構如下:

同樣,Parswap 使用與 1inch 相同的型號:

前端不顯示單跳中的分割路徑,但API可以觀察分割結果

【API中的bestRoute字段記錄了路由路徑的詳細信息。如圖所示,在交易對USDT(0xdAC17F958D2ee523a2206206994597C13D831ec7)轉ETH交易對中,ParaSwap選擇ParaSwapPool7和Uniswap V3交易對,佔比分別為38.46%和61.54%]

該模型可以直接表示為:

其中 Af 表示基礎代幣的總量,分為n條路徑進行交易。設最終得到的toToken個數為At,也就是n條路徑之和:

每條路徑可能會經歷不同數量的池/交易所,並在中間交換不同的代幣。使用上述模型,ati 可以直接表示為:

這個解可以理解為在問題中找到三個不重複的最小代價路徑,比0x算法更接近最優解。但它也是一個簡化版本,考慮了兩條不同路徑匯聚到同一個節點的隱蔽情況。

1inch Pathfinder雖然在子通證路徑的設計中沒有排除重複節點(即通過同一種貨幣的不同路徑),但通過將不同的子路徑分配給不同的報價源,避免了重複使用相同報價源的問題,在某些情況下,它的解決方案仍將達不到最佳狀態。可以測試影響的具體大小的敏感性。

但是,如分析所示,該模型最接近原始模型。如果能給出問題的最優解,則解更接近原問題並給出最優解(模型擾動可測)。唯一的作用就是觀察1inch的API參數和結果。可以推斷,1inch已經離散化了指定的份數,這可能會導致一些離散化錯誤。當你看 ParaSwap 的分光比時,它似乎比 1inch 更精細。在某些情況下,ParaSwap 可以獲得比 1inch 更好的結果,這可能會有所貢獻。

渡渡鳥

DODO的自建路由算法也通過參考1inch和0x的設計來簡化問題。考慮到gas消耗和交易成功率,我們將路由v1版本簡化為以下模型:

令牌路徑是唯一的,但池路徑不是。

在 V2 版本的路由中,DODO 會參考 1inch 的模型設計和 ParaSwap 來優化多代幣路徑和多池子路徑的拆分路由。

本文分享了幾種可能的聚合器問題建模方法。在下一部分,我們將提出基於DODO自建路由算法的一種可能的工程設計思路。

免責聲明

本研究報告中的信息來源於公開披露的信息,此處表達的觀點僅用於研究目的,不代表任何投資建議。本報告所表達的意見和預測是對出具日的分析判斷,不具有永久有效性。

Link: https://blog.dodoex.io/dodo-research-reveal-the-secrets-of-the-aggregator-problem-analysis-and-model-building-ba0ead85948c

#blockchain #defi #dex #dodo

What is GEEK

Buddha Community

揭示 DODO 研究聚合器的秘密
井上  康弘

井上 康弘

1657784586

揭示 DODO 研究聚合器的秘密

“如何為用戶找到最優的出價”是去中心化金融(DeFi)的重要組成部分。目前市面上的 DeFi 協議比較多。不同的協議具有獨特的算法。由於 DeFi 的流動性來源相對獨立,不同的礦池對同一種幣種會有不同的報價。去中心化交易所(DEX)設計了它的算法來吸引流動性提供者(LP)以獲得更好的報價。另一方面,1inch、0x等聚合器選擇了另一種方式:通過搜索不同礦池形成的路徑,在gas的控制下找到用戶的最優出價。

隨著市場的發展,1inch、0x等聚合商也將擁有其獨特的報價來源。Balancer 和 Uniswap V3 等 DEX 也會將用戶的一筆交易拆分成多條路徑。不同的是,DEX 的聚合算法依賴於其報價池,而聚合器則充分利用了 DeFi 的可組合性。聚合器可以為用戶提供最優報價,因為它可以訪問自己的礦池和其他 DEX 的礦池,增加了整個鏈的流動性來源。

DODO致力於為用戶提供最佳的交易體驗。DODO除了開發PMM池外,還自主開發了聚合算法。DODO 的聚合算法不是 Uniswap 等 DEX 的拆分路由算法,而是類似於 1inch 和 0x 的聚合算法。DODO 不僅會插入其池,還會插入其他 DEX 池,以更好地利用流動性。

本文由兩部分組成。第一部分將介紹聚合問題的建模。第二部分將介紹DODO的聚合器算法,分析聚合器工程設計的難點。

1. 建模介紹及解決方案分析

正確的建模是解決問題的良好開端。讓我們從最直接的問題開始:線性路由。

1.1 線性路由

線性路由是尋找為目標代幣提供的最佳交易路徑的過程,其中交易對僅通過池。例如,如果用戶需要將 ETH 交易到 USDC,A 線性路由找到的最優路徑是將 ETH 交易到 USDT,那麼它去 USDC,而不是 [ACB] 或 [ADB](即資產 A 是不分成兩部分並選擇不同的路徑)。選擇的路徑只經過兩個池。這兩個池可能來自不同的協議。例如,ETH 到 USDT 的交易協議來自 Uniswap V3 礦池,USDT-USDC 協議來自 Curve V1 礦池。Uniswap V2 和 PancakeSwap 等 DEX 也使用這種路由模型。但是,他們的流動性來源是他們的交易所。Uniswap V2 路由僅通過 Uniswap V2 池,而 PancakeSwap 路由僅通過 PancakeSwap 池。

【圖2:圖中紅框內的內容為路由路徑】

假設用戶需要出售的代幣:fromToken,想要購買的代幣:toToken。對於任何礦池,baseToken被定義為賣出代幣, quoteToken被定義為買入代幣。第一個礦池的 baseToken 必須是fromToken ,最後一個礦池的 quoteToken 必須是toToken,如下圖所示。

可以直接概括為一個最大值問題:有n種不同的資產,還有k種其他不同的池子,每個池子中兌換的代幣數量可以用一組函數來表示

由於雙代幣池可以代表所有三代幣或多代幣池,所以函數可以進一步簡寫為:

其中,αi 表示 iᵗʰ 資產的數量,αi 表示 jᵗʰ 資產的數量,k表示池數。假設用戶的fromToken數量為αᶠ,最後可以得到toToken的數量αᵗ 過程中兌換的代幣集如下:

在這個過程中有 m-1 個池,我們將其表示為 theta:

然後,

如果我們能找到上述問題的解決方案,我們就可以得到最優路徑。

這個建模還是太抽象了,我們可以用圖論來構建另一個模型。從ijbaseToken表示邊 ρⁱʲᵏ,從ji的邊是 ρʲⁱᵏ 邊權重設置為 α₀ 除以池αⱼ交換的 quoteToken 數量。α₀/αⱼ可以構建如下多邊多環有向圖,如下圖:

那麼問題可以概括為:從原點F,即從fromToken中找到一條權重最小的路徑到toToken

乍一看,這似乎是一個關於最短路徑的直截了當的問題,並且有很多成熟的算法可供參考。但與普通最短路徑問題不同的是,在尋找下一條邊的過程中,一條邊的權重下與節點序列前面的路徑相關聯。因此,在節點加入隊列的最優路徑中,每個節點都有一個需要實時維護的狀態。它使記錄路徑長度的後續序列節點與前面序列節點的狀態相匹配。而在這個問題中,最終的“最小權重”不是通過對路徑上所有邊的權重求和來計算的,而是通過僅計算toToken節點的入口權重來計算的。這一特點使得傳統的最短路徑算法不能完全適用。

當節點較少時,直接用深度優先搜索(DFS)算法搜索更為直觀,即遍歷每條路徑,得到最終toToken價格,選擇最優路徑供用戶兌換。Uniswap V2 路由使用這種方法來尋找最優路徑。Uniswap V3 路由的第一個版本也使用這種方法。但是,與 V2 不同的是,V2 的價格可以直接通過鏈計算。然後multi-call調用quoter合約,直接得到結果。

【圖5:Uniswap v2路由算法源碼】

上述模型不適用於 BFS 算法。假設按照邊進行BFS算法(即按照池進行BFS算法)。這種情況下,該狀態下未被選中的池需要同步維護。下一步只能在未選中的池中進行擴展,這與DFS算法的複雜度沒有區別,但會大大增加記錄的空間成本。但是,如果按照 BFS 算法擴展節點,就會出現一個致命的問題:節點可以重複遍歷。因此,它不滿足 BFS 算法條件。

同樣,由於後效應的存在,暫時沒有考慮DFS算法中的剪枝方法。下一個最好的方法是在進入 DFS 算法之前預先對池大小進行排序並刪除一些池,但是刪除池存在一定的風險,可能會影響最優性。

DFS算法的應用可以保證當前圖的fromTokentoToken的最優路徑。時間複雜度與層數有關。好在為了保證gas的合理性,遞歸層數不會超過4,所以時間複雜度為O(l^3),l為總邊數。

1.2 拆分路由

在考慮複雜問題時,選擇最優報價路徑也稱為拆分路由。在尋找交易路徑的過程中,一個交易對可能會經過不同的池子,用戶的資金以最優的比例分配到不同的池子中進行兌換,從而使目標代幣的報價最優。同樣,以 ETH-USDC 為例。交易路徑仍然是通過 ETH 到 USDT 再到 USDC。ETH 和 USDT 可能會經過兩個池子。30% 的 ETH 通過 Uniswap V3 轉換為 USDT,70% 通過 DODO V2 轉換為 USDT。下次交易將USDT兌換為USDC時,初始USDT為以上兩部分USDT之和,找到USDT與USDC的最優拆分。

在最優出價路徑中,完整的fromAmount可以根據路徑金額的比例分成不同的路徑或池子進行交易。可以在原始圖中定義流網絡,具體取決於用於分區的最小比例單位。如果fromAmount可以分為n部分,則可以建立超級源。從超級源到fromToken節點的流量上限為n,其餘邊的流量上限為正無窮大。α₀除以池αⱼ交換的quoteToken數量, α₀ /αⱼ作為邊cⁱʲᵏ的成本,使用上述簡化方法,池k僅包含ij標記,可以簡化為 cʲᵏ。那麼問題就是在圖中找到成本最小的最大流量。

特別是,費用是動態的。具體來說,為了確保符合節點的度數界限,我們可以假設流量在通過節點時不會增加或減少(原始數量的x %),只會影響成本。由於邊的成本與baseToken的數量有關,而數量與路徑有關,所以每條邊的成本w可以定義為:

其中 cⁱʲᵏ 是路徑成本,baseTokeniquoteTokenj,池數是k。它是 wⁱᵏ 的函數,它是池的報價函數。𝔲 是從0I的路徑,wⁱᵏ 定義為節點i上經過路徑k的流量。有:

wⁱ 是節點I的流量。因為影響quoteToken數量的唯一因素是baseToken數量,所以 cⁱʲᵏ 可以進一步簡化為:

其中 cᵢₗ 是節點i的輸入成本,ι∈ ∑ [1,…,q] 是輸入邊的數量。解決分割比的問題,一個常見的思路是把可能的流分成n份,然後把Pⁱʲᵏ邊分成n份。流量被分成 n 個相等的部分,表示為 wⁱᵏ=1,2…n。在哪裡

其對應的邊 P'ⁱʲᵏ,0<o<n+1,則 cⁱʲᵏ 定義為:

由同一組邊分隔的子路徑不應重複選擇。

同樣,最終解決的最小成本僅由toToken的輸入成本定義。

由於代價依賴於過去的路徑,通常用於求解最小代價最大流量的增廣路徑算法並不適用。另一個問題是,這種方法限制同一個池只能取其中一個拆分的子路徑,因此無法計算子路徑之間的總和,增廣後的路徑也不能簡單地反向流動。

這個問題需要另一種解決方案。因為這個問題是一個優化問題,在計算力和時間足夠的情況下,可以考慮隨機的模擬參數。MCMC估計參數可以直接計算使用。實際行業中的人們更關心時間和可靠性,而不是問題的最佳解決方案。在以下部分中,我將嘗試分析業內其他聚合器的解決方案,以說明該問題的兩種簡化解決方案。

1.3 聚合器分析

0x

0x通過0x源碼分析和API返回結果,將問題簡化為兩個獨立的模型,分別給出最優報價,然後選擇最優解返回給用戶。

簡化問題 1:線性路由,由 API 返回的多跳產生。

簡化問題 2:單跳拆分路由。僅保留fromTokentoToken池。

對於單跳拆分路由,每條路徑可以根據離散係數N拆分為N條子路徑,當流量為i時,每條子路徑的成本為quoteToken,也是toToken的單價,然後解決了。

特別是 0x 在構建 SushiSwap 或 Uniswap 相關路徑時會調用路由合約,因此路徑中可能存在多個中間躍點,本質上將這些躍點計算為整個池。

1英寸/ParaSwap

對於 1inch,1inch v2 中的最佳氣路是線性路線。

1inch v2的分割路由更新了Pathfinder算法,其結構如下:

同樣,Parswap 使用與 1inch 相同的型號:

前端不顯示單跳中的分割路徑,但API可以觀察分割結果

【API中的bestRoute字段記錄了路由路徑的詳細信息。如圖所示,在交易對USDT(0xdAC17F958D2ee523a2206206994597C13D831ec7)轉ETH交易對中,ParaSwap選擇ParaSwapPool7和Uniswap V3交易對,佔比分別為38.46%和61.54%]

該模型可以直接表示為:

其中 Af 表示基礎代幣的總量,分為n條路徑進行交易。設最終得到的toToken個數為At,也就是n條路徑之和:

每條路徑可能會經歷不同數量的池/交易所,並在中間交換不同的代幣。使用上述模型,ati 可以直接表示為:

這個解可以理解為在問題中找到三個不重複的最小代價路徑,比0x算法更接近最優解。但它也是一個簡化版本,考慮了兩條不同路徑匯聚到同一個節點的隱蔽情況。

1inch Pathfinder雖然在子通證路徑的設計中沒有排除重複節點(即通過同一種貨幣的不同路徑),但通過將不同的子路徑分配給不同的報價源,避免了重複使用相同報價源的問題,在某些情況下,它的解決方案仍將達不到最佳狀態。可以測試影響的具體大小的敏感性。

但是,如分析所示,該模型最接近原始模型。如果能給出問題的最優解,則解更接近原問題並給出最優解(模型擾動可測)。唯一的作用就是觀察1inch的API參數和結果。可以推斷,1inch已經離散化了指定的份數,這可能會導致一些離散化錯誤。當你看 ParaSwap 的分光比時,它似乎比 1inch 更精細。在某些情況下,ParaSwap 可以獲得比 1inch 更好的結果,這可能會有所貢獻。

渡渡鳥

DODO的自建路由算法也通過參考1inch和0x的設計來簡化問題。考慮到gas消耗和交易成功率,我們將路由v1版本簡化為以下模型:

令牌路徑是唯一的,但池路徑不是。

在 V2 版本的路由中,DODO 會參考 1inch 的模型設計和 ParaSwap 來優化多代幣路徑和多池子路徑的拆分路由。

本文分享了幾種可能的聚合器問題建模方法。在下一部分,我們將提出基於DODO自建路由算法的一種可能的工程設計思路。

免責聲明

本研究報告中的信息來源於公開披露的信息,此處表達的觀點僅用於研究目的,不代表任何投資建議。本報告所表達的意見和預測是對出具日的分析判斷,不具有永久有效性。

Link: https://blog.dodoex.io/dodo-research-reveal-the-secrets-of-the-aggregator-problem-analysis-and-model-building-ba0ead85948c

#blockchain #defi #dex #dodo

What is DODO token | How to invest in the DODO IEO on Binance

What Is DODO?

DODO is a Chinese  decentralized finance (DeFi) protocol and on-chain liquidity provider whose unique proactive market maker (PMM) algorithm aims to offer better liquidity and price stability than  automated market makers (AMM).

The PMM pricing mechanism, which mimics human trading, utilizes  oracles to gather highly accurate market prices for assets. It then provides enough liquidity close to these prices in order to stabilize the portfolios of  liquidity providers (LP), lower price slippage and negate  impermanent loss by allowing arbitrage trading as reward.

DODO also caters for new crypto projects with a free  ICO listing through its Initial DODO Offering (IDO) which requires issuers to only deposit their own tokens.

DODO’s smart contract operates as an  ERC20 token on the  Ethereum network.

Who Are the Founders of DODO?

Dodo was officially  launched in August 2020, founded by  Diane Dai,  Radar Bear and an anonymous development team. It initially attracted a $600,000 seed round led by Framework Ventures.

The team announced in September 2020 that it had successfully completed an additional $5 million private sale funding round, led by Pantera Capital, Binance Labs and Three Arrows Capital.

The private sale round also attracted investment from several other prominent venture capital firms, cryptocurrency exchanges and trading firms that include Coinbase Ventures, Galaxy Digital, CMS Holdings and Alameda Research.

What Makes DODO Unique?

DODO positions itself as one of the most competitive liquidity providers that offers very low transaction fees and price slippage through its PMM algorithm, first conceived in April 2020.

The team claims their PMM algorithm provides superior pricing over that of AMM competitor  Uniswap due to a flatter price curve.

The PMM collects funds near market prices to establish enough liquidity, which drops quickly the further the price moves from the market price. DODO automatically adjusts market prices in order to attract arbitrage that will help keep liquidity provider portfolios stable.

This ensures more favorable pricing, higher fund utilization and decreased price slippage, single risk exposure and no impermanent loss

For traders, DODO offers sufficient liquidity comparable to that of centralized exchanges (CEX), which can be natively used by smart contracts for on-chain transactions such as liquidation and auctions. Arbitrageurs can also take advantage of price differences between DODO and other exchanges.

Liquidity providers are not required to make a minimum deposit and are not restricted on the type of asset they provide. LPs can create their own trading pairs, deposit their own tokens to negate price risk and also collect a portion of DODO transaction fees as rewards.

DODO also attracts new crypto projects with a free listing as an Initial DODO Offering (IDO). Unlike AMM protocols, DODO does not require quote tokens, and IDO projects only need to deposit their own tokens to the liquidity pool, after which the PMM creates its own ask-side depth. To start an IDO, a project needs to only set the oracle price to a constant. Liquidity is improved by depositing more quote tokens.

How Many DODO (DODO) Coins Are There in Circulation?

The total supply of the DODO token is 1 billion (1,000,000,000). There are currently 12 million coins in circulation.

DODO’s total supply will be distributed as follows:

  • 15% to the core team/future hires/advisors
  • 16% to investors
  • 1% to initial liquidity provision (IDO)
  • 8% to operations/marketing/partnerships
  • 60% to community incentives

How Is the DODO Network Secured?

DODO is a decentralized protocol and therefore resistant to centralized network attacks relying on a single point of failure. DODO’s smart contracts were audited by  PeckShield, a blockchain security company, on July 10 2020. Its audit report on DODO can be accessed here.

Please be aware that DeFi protocols are innovative and high-risk projects and therefore vulnerable to coding bugs and security issues that could be exploited by hackers and result in the loss of funds.

Introducing DODO (DODO) on Binance Launchpool! Farm DODO By Staking BNB, BETH & BUSD Tokens

Binance is excited to announce the 17th project on Binance Launchpool - DODO (DODO) , an open, accessible, capital-efficient decentralized exchange platform.

Users will be able to stake their BNB, BETH and BUSD into separate pools to farm DODO tokens over  14  days, with farming starting from 2021-02-19 00:00 AM (UTC).

Binance will then list DODO into the innovation zone at 2021-02-19 10:00 AM (UTC) and open trading with DODO/BTC, DODO/BUSD and DODO/USDT trading pairs.

DODO Launchpool Details:

  • Token Name: DODO (DODO)
  • Total Token Supply: 1,000,000,000 DODO
  • Launchpool token rewards: 1,069,518 DODO
  • Current Circulating Supply: 140,000,000 DODO
  • Smart Contract Address:  DODO (ERC-20)
  • Staking Terms: No upper limit. No KYC required

Supported Pools:

  • Stake BNB : 641,710.8 DODO in rewards (60%)
  • Stake BETH : 320,855.4 DODO in rewards (30%)
  • Stake BUSD : 106,951.8 DODO in rewards (10%)
  • Farming Period: 2021-02-19 00:00 AM (UTC) to 2021-03-04 23:59 (UTC).

How to invest in the DODO IEO on Binance?

Binance introduced the new IEO -  DODO on Binance Launchpool. The project will be conducting the platform’s seventeenth IEO on their staking platform. The project is offering DODO tokens through the Binance launchpool’s new staking program by selling 1,069,518 of its DODO tokens (0.10% of the total DODO supply). Users can stake  BNB,  BETH or  BUSD Tokens.

DODO is a governance token developed by the DODO Exchange team to be used on their DODO ecosystem. Users will be able to hold and stake DODO Tokens which will grant them the right to get involved in governance discussions and decisions.

1. Create an account on Binance

The first step for participating in the token sale is to create an account on Binance.

Sign up to Binance

After you successfully register, go to the Launchpad section of the navigation menu. Now, you can see all the completed and upcoming IEOs on Binance.

2. Select DODO IEO

After you’re verified, select the DODO IEO from the list of upcoming and completed Binance Launchpad token sales. You’ll need to select which token will you stake (BNB, BETH, or BUSD).

The Sandbox

3. DODO IEO Calculation and Distribution Rules

For the DODO token sale, users will be able to obtain DODO tokens only by staking BNB, BETH, or BUSD. Users will need to complete a flexible savings transfer after February 18, 2021, at 0:00 AM (UTC) so that their balance is included in the Launchpool calculations.

After you’ve completed your flexible savings transfer, your stakes token balances will be recorded each hour for 30 days after the staking period begins to calculate a daily average token balance. The rewards allocated to each pool will be split evenly every day, over the 30 day period.

Flexible savings tooltip:

Note that Flexible Savings product subscriptions are closed during 23:50-00:10 (UTC) daily. That means that no interest is acumulated on products purchased on the day of subscription. Interest is calculated the next day

Interest calculation tooltip:

The interest amount is calculated and distributed daily based on your available flexible savings assets. The interest amount is rounded down to 8 decimal places.

You can stake multiple times if you want. You can buy and trade BNB or USDT and add them later on during the staking period.

After you confirm the transfer you’ll receive a “Subscription success” pop-up message.

You can check your staking Pools at any time if you go to the Launchpool tab and click Launchpool Farming on the left side of the screen.

Note that the pictures below are from old IEO Launcpool Farmings.

4. Staking Period

Users will be able to stake their assets from February 19, 2021, at 00:00 (UTC) to March 4, 2021, at 00:00 (UTC) after successfully completing their flexible savings after February 18, 2020, at 00:00 (UTC). For additional details, head over to the  Binance support page.

5. Redeem Funds

The staking platform allows users to redeem their funds before the staking period ends. You can redeem your funds by choosing one of the two methods allowed:

  • Fast redemption
  • The redeemed quantity is returned to you the same day, but you don’t receive interest from that day
  • Standard redemption
  • The redeemed quantity is returned to you the next day and you still receive interest from that day.

To redeem your funds go to your Savings and chose Redeem.

You’ll then need to select one of the two available methods to redeem your funds.

How and Where to Buy DODO token ?

DODO token has been listed on a number of crypto exchanges, unlike other main cryptocurrencies, it cannot be directly purchased with fiats money. However, You can still easily buy this coin by first buying Bitcoin, ETH, USDT, BNB from any large exchanges and then transfer to the exchange that offers to trade this coin, in this guide article we will walk you through in detail the steps to buy DODO

You will have to first buy one of the major cryptocurrencies, usually either Bitcoin (BTC), Ethereum (ETH), Tether (USDT), Binance (BNB)…

We will use Binance Exchange here as it is one of the largest crypto exchanges that accept fiat deposits.

Binance is a popular cryptocurrency exchange which was started in China but then moved their headquarters to the crypto-friendly Island of Malta in the EU. Binance is popular for its crypto to crypto exchange services. Binance exploded onto the scene in the mania of 2017 and has since gone on to become the top crypto exchange in the world.

Once you finished the KYC process. You will be asked to add a payment method. Here you can either choose to provide a credit/debit card or use a bank transfer, and buy one of the major cryptocurrencies, usually either Bitcoin (BTC), Ethereum (ETH), Tether (USDT), Binance (BNB)…

SIGN UP ON BINANCE

Step by Step Guide : What is Binance | How to Create an account on Binance (Updated 2021)

After the deposit is confirmed you may then purchase DODO from the exchange.

The top exchange for trading in DODO token is currently Binance, VCC Exchange, BitZ, MXC.COM, and AOFEX

Find more information DODO

WebsiteExplorerSocial ChannelSocial Channel 2Social Channel 3Message BoardMessage Board 2DocumentationCoinmarketcap

Top exchanges for token-coin trading. Follow instructions and make unlimited money

BinanceBittrexPoloniexBitfinexHuobiMXCProBITGate.ioCoinbase

🔺DISCLAIMER: The Information in the post isn’t financial advice, is intended FOR GENERAL INFORMATION PURPOSES ONLY. Trading Cryptocurrency is VERY risky. Make sure you understand these risks and that you are responsible for what you do with your money.

🔥 If you’re a beginner. I believe the article below will be useful to you ☞ What You Should Know Before Investing in Cryptocurrency - For Beginner

⭐ ⭐ ⭐The project is of interest to the community. Join to Get free ‘GEEK coin’ (GEEKCASH coin)!

☞ **-----https://geekcash.org-----**⭐ ⭐ ⭐

I hope this post will help you. Don't forget to leave a like, comment and sharing it with others. Thank you!

#bitcoin #cryptocurrency #dodo 

Angelina roda

Angelina roda

1622145600

DODO Token Launching And Farming on Binance Launchpool - Stake BNB to Farm DODO

In this video I talk about DODO Farming rewards on binance launch pool and as a bonus, I show the DODO mining rewards.
To participate on the Binance Launchpool you will need to stake BNB , BUSD or BETH
DODO Token Launching And Farming on Binance Launchpool - Stake BNB to Farm DODO
📺 The video in this post was made by Crypto Therapy
The origin of the article: https://www.youtube.com/watch?v=7s85XOfhAKk
🔺 DISCLAIMER: The article is for information sharing. The content of this video is solely the opinions of the speaker who is not a licensed financial advisor or registered investment advisor. Not investment advice or legal advice.
Cryptocurrency trading is VERY risky. Make sure you understand these risks and that you are responsible for what you do with your money
🔥 If you’re a beginner. I believe the article below will be useful to you ☞ What You Should Know Before Investing in Cryptocurrency - For Beginner
⭐ ⭐ ⭐The project is of interest to the community. Join to Get free ‘GEEK coin’ (GEEKCASH coin)!
☞ **-----CLICK HERE-----**⭐ ⭐ ⭐
(There is no limit to the amount of credit you can earn through referrals)
Thanks for visiting and watching! Please don’t forget to leave a like, comment and share!

#bitcoin #blockchain #binance #dodo #bnb

August  Larson

August Larson

1657903380

Revealing The Secrets Of The DODO Research Aggregator

“How to find the optimal bidding for users” is an essential part of Decentralized Finance (DeFi). At present, there are many protocols of DeFi in the market. Different protocols have unique algorithms. Due to the relatively independent liquidity sources of DeFi, different pools will have various quotations for the same currency. Decentralized exchanges (DEX) designed its algorithm to attract Liquidity Providers (LP) to get a better offer. On the other hand, aggregators such as 1inch and 0x chose another way: By searching the paths formed by different pools, we can find the optimal bidding for users under the control of gas.

With the development of the market, aggregators such as 1inch and 0x will also have their unique quotation sources. DEX such as Balancer and Uniswap V3 will also split a transaction of the user into multiple paths. The difference is that the aggregation algorithm of DEX relies on its quotation pool, whereas aggregators make full use of the composability of DeFi. An aggregator can provide users with the best quotation because it can access its pool and the pools of other DEX, increasing the liquidity source of the whole chain.

DODO is committed to providing users with the best trading experience. In addition to developing its PMM pool, DODO has independently developed its aggregation algorithm. DODO’s aggregation algorithm is not the split routing algorithm of DEX such as Uniswap, but the aggregation algorithm similar to that of 1inch and 0x. DODO will plugin not only its pools but also other pools of DEX to better use liquidity.

This article consists of two parts. The first part will introduce the modeling of aggregation problems. The second part will introduce DODO’s aggregator algorithm and analyze the difficulties in aggregator engineering design.

1. Modeling introduction and solution analysis

Proper modeling is an excellent start to solving a problem. Let’s start with the most straightforward problem: linear routing.

1.1 Linear routing

Linear routing is the process of looking for an optimal trading path offered for the target token where a trading pair only passes through a pool. For example, if a user needs to trade ETH to USDC, the optimal path found by A linear routing is to trade ETH to USDT, then it goes to USDC, not [A-C-B] or [A-D-B] (that is, the asset A is not split into two parts and selects different paths). The chosen path only goes through two pools. These two pools may come from different protocols. For example, the protocol to trade ETH to USDT is from the Uniswap V3 pool, and the USDT-USDC protocol is from the Curve V1 pool. DEX such as Uniswap V2 and PancakeSwap also use this routing model. However, their liquidity source is their exchange. Uniswap V2 routes only pass through Uniswap V2 pools, while PancakeSwap routes only pass through PancakeSwap pools.

[Figure 2: The content in the red box marked in the figure is the routing path]

Suppose the token users need to sell: fromToken, and the token they want to buy: toToken. For any pool, baseToken is defined as the selling token and quoteToken as the buying token. The baseToken of the first pool must be fromToken, and the quoteToken of the last pool must be toToken, as shown in the figure below.

It can be directly summarized as a maximum value problem: there are n different assets, there are k other different pools, and the number of tokens exchanged in each pool can be expressed by a set of functions

Since dual token pools can represent all 3-token or multi-token pools, the function can be further abbreviated as:

where represents αi the number of the iᵗʰ asset, αirepresents the number of the jᵗʰ asset, and k represents the pool number. Suppose the number of fromToken of the user is αᶠ and finally, the number of toToken αᵗ can be obtained. The token set exchanged during the process is as follows:

There are m-1 pools in this process, and we’re going to represent that as theta:

Then,

If we can find the solution to the above problems, we can obtain the optimal path.

This modeling is still too abstract, and we can use graph theory to build another model. The baseToken from i to j represents the edge ρⁱʲᵏ and the edge from j to i is ρʲⁱᵏ The edge weight is set to α₀ divided by the number of quoteTokens exchanged by the pool αⱼ. α₀/αⱼ can build the following directed graph with multiple edges and rings, as shown below:

Then, the problem can be summarized as: from the origin F, i.e., Find a path from fromToken that minimizes the weight to toToken.

At first glance, it seems to be a straightforward problem about the shortest path, and there are many mature algorithms for reference. But unlike the ordinary shortest path problems, in the process of looking for the next edge, under the weight of an edge is associated with the path in front of the sequence of the node. Therefore, in the optimum path of nodes joining the queue, each node has a state that needs to be maintained in real-time. It makes the subsequent sequence nodes of recorded path length match the state of the preceding sequence nodes. And in this problem, the final “minimum weight” is calculated not by summing the weights of all edges on the path but by calculating only the entry weight of the toToken node. This characteristic makes the traditional shortest path algorithm not wholly applicable.

When there are few nodes, it is more intuitive to search with the Depth First Search (DFS) algorithm directly, that is, to traverse every path and get the final toToken price, to select the optimal path for users to exchange. The Uniswap V2 route uses this method to find the optimal path. The first version of the Uniswap V3 route uses this method as well. However, unlike V2, the price of V2 can be calculated directly through the chain. And then multi-call calls the quoter contract and gets the result directly.

[Figure 5:Uniswap v2 route algorithm source code]

The model mentioned above is not suitable for the BFS algorithm. Suppose the BFS algorithm is carried out according to the edge (that is, the BFS algorithm is carried out according to the pool). In that case, the pool not selected in this state needs to be maintained synchronously. The next step can only be expanded in the pool not selected, which has no difference with the complexity of the DFS algorithm but dramatically increases the space cost for recording. However, a fatal problem will occur if the nodes are extended according to the BFS algorithm: the node can be traversed repeatedly. Therefore, it does not satisfy the BFS algorithm condition.

Similarly, due to the existence of aftereffect, the pruning method in the DFS algorithm has not been considered for the time being. The next best method is to pre-sort the pool size and delete some pools before entering the DFS algorithm, but there are certain risks in deleting pools, which may affect the optimality.

The application of the DFS algorithm can ensure the optimal path from fromToken to toToken of the current graph. The time complexity is related to the number of layers. Fortunately, to ensure the rationality of gas, the number of recursive layers will not exceed 4, so the time complexity is O(l ^3), and l is the total number of edges.

1.2 Split routing

When considering complex problems, choosing the optimal quotation path is also called split routing. In the process of looking for a trading path, a trading pair may pass through different pools, and the user’s funds are allocated to different pools for exchange in an optimal proportion to make the target token offer optimal. Similarly, take ETH-USDC as an example. The transaction path still passes through ETH to USDT and then to USDC. ETH and USDT may go through two pools. 30% of ETH is converted to USDT through the Uniswap V3 and 70% to USDT through DODO V2. When the USDT is exchanged to USDC in the next transaction, the initial USDT is the sum of the above two parts of USDT, the optimal split of USDT to USDC is found.

In the optimal bidding path, the complete fromAmount can be divided into different paths or pools to trade according to the proportion of the path amount. A flow network can be defined in the original diagram, depending on the smallest scale unit used for partitioning. A super-source can be established if the fromAmount can be divided into n parts. The upper limit of the flow from the super-source to the fromToken node is n, and the upper limit of the flow from the remaining edges is positive infinity. α₀ divided by the number of quoteTokens exchanged by the pool αⱼ, α₀/αⱼ as the cost of the edge cⁱʲᵏ, using the simplification method described above, pool k contains only i and j tokens, which can be simplified as cʲᵏ. Then the problem is to find the maximum flow with the minimum cost in the graph.

In particular, fees are dynamic. Specifically, to ensure compliance with the degree bound of nodes, we can assume that the flow does not increase or decrease (by x% of the original amount) as it passes through the node, only affecting the cost. Since the cost of the edge is related to the amount of the baseToken and the amount is related to the path, the cost of each edge w can be defined as:

Where cⁱʲᵏ is the path cost, baseToken is i, quoteToken is j, and pool number is k. It is a function of wⁱᵏ, which is the quote function of the pool. 𝔲 is the path from 0 to I, wⁱᵏ is defined as the traffic on node i that goes through path k. There are:

wⁱ is the traffic of node I. Because the only factor that affects the quoteToken quantity is baseToken quantity, cⁱʲᵏ can be further simplified as:

Where cᵢₗ is the input cost of node i, ι∈ ∑ [1,…,q] is the number of input edges. To solve the problem of partition ratio, a common idea is to split the possible flow into n parts and then split the Pⁱʲᵏ edge into n parts. The flow was divided into n equal parts, denoted as wⁱᵏ=1,2…n. where

its corresponding edge P’ⁱʲᵏ, 0<o<n+1, then cⁱʲᵏ is defined as :

The sub-paths separated by the same group of edges should not be selected repeatedly.

Similarly, the minimum cost solved in the end is only defined by the input cost of toToken.

Because the cost is dependent on the past path, the usually augmented path algorithm to solve the minimum cost maximum flow is not applicable. Another problem is that this method limits the same pool only to take one of the split sub-paths, so the sum between sub-paths cannot be calculated, and the augmented path cannot simply reverse flow.

The problem calls for another solution. Because this problem is an optimization problem when the calculation force and time are enough, the random simulation parameters can be considered. The MCMC estimation parameters can be used by directly calculating. People in the actual industry care more about time and reliability than the optimal solution to the problem. In the following sections, I attempt to analyze the solutions of other aggregators in the industry to illustrate two simplified solutions to the problem.

1.3 Aggregator analysis

0x

Through the 0x source code analysis and the API returned results, the 0x simplifies the questions into two independent models, which give the optimal quotation respectively, and then select the optimal solution to return to users.

Simplify question 1: Linear routing, which results from multi-hops returned by the API.

Simplify question 2: Single-hop split routing. Only fromToken to toToken pools are retained.

For the single-hop split routing, each path can be split into N sub-paths according to the dispersion coefficient N, and the cost of each sub-path is quoteToken when the traffic is i, which is also the unit price of toToken, and then solved.

In particular, 0x calls the route contract when constructing SushiSwap or Uniswap related paths, so there may be multiple intermediate hops in the path, essentially counting the hops as an entire pool.

1inch/ParaSwap

For 1inch, the optimal gas path in the 1inch v2 is a linear route.

The split routing of the 1inch v2 updates the Pathfinder algorithm, which has the following structure:

Similarly, the Paraswap uses the same model as the 1inch:

The front-end does not show the split path in the single hop, but the API can observe the divided result

[The bestRoute field in API records the details of the routing path. As shown in the figure, the ParaSwap chose ParaSwapPool7 and the Uniswap V3 for trading pairs in trade pair USDT(0xdAC17F958D2ee523a2206206994597C13D831ec7)to ETH, accounting for 38.46% and 61.54% respectively]

This model can be directly expressed as:

Where Af represents the total amount of base token and is divided into n paths for the transaction. Let the final number of toToken obtained be At, which is also the sum of n paths:

Each path may experience a different number of pools/exchanges and exchange different tokens in the middle. Using the above model, ati can be directly expressed as:

This solution can be interpreted as finding three non-repeating minimum cost paths in the problem, which is closer to the optimal solution than the 0x algorithm. But it is also a simplified version that considers the covert case where two different paths converge to the same node.

Although the 1inch Pathfinder does not exclude duplicate nodes (that is, different paths through the same currency) in its design of the subtoken paths, it avoids the problem of using the same quote source twice by assigning different sub-paths to different quote sources, in some cases its solution will still fall short of optimal. The specific size of the impact can be tested for sensitivity.

However, as the analysis shows, this model is closest to the original model. If the optimal solution to the problem can be given, the solution is closer to the original problem and gives the optimal solution (model disturbance can be measured). The only effect is to observe the API parameters and results of 1inch. It can be inferred that 1inch has discretized the number of specified copies, which may cause some discretization errors. When you look at ParaSwap’s splitting ratio, it seems to be finer than 1inch. In some cases, ParaSwap can get better results than 1inch, which may contribute.

DODO

The DODO’s self-built routing algorithm also simplifies the problem by referring to the 1inch and 0x designs. Considering the gas consumption and transaction success rate, we simplified the routing v1 version into the following model:

The token path is unique, but the pool path is not.

In the routing of the V2 version, DODO will refer to the model design of 1inch and the ParaSwap to optimize the split routing of the multi-token path and multi-pool sub-paths.

This article has shared several possible modeling approaches to aggregator problems. In the next part, we will present a possible engineering design idea based on DODO’s self-built routing algorithm.

Disclaimers

The information in this research report is derived from publicly disclosed information and the opinions expressed herein are for research purposes only and do not represent any investment advice. The opinions and forecasts expressed in this report are the analysis and judgment of the date of issuance and do not have permanent validity.

#blockchain #defi #dex #dodo

Thierry  Perret

Thierry Perret

1657817305

Révéler Les Secrets De L'agrégateur De Recherche DODO

"Comment trouver l'enchère optimale pour les utilisateurs" est un élément essentiel de la finance décentralisée (DeFi). À l'heure actuelle, il existe de nombreux protocoles de DeFi sur le marché. Différents protocoles ont des algorithmes uniques. En raison des sources de liquidité relativement indépendantes de DeFi, différents pools auront différentes cotations pour la même devise. Les échanges décentralisés (DEX) ont conçu leur algorithme pour attirer les fournisseurs de liquidité (LP) afin d'obtenir une meilleure offre. D'autre part, les agrégateurs tels que 1inch et 0x ont choisi une autre voie : en recherchant les chemins formés par différents pools, nous pouvons trouver l'enchère optimale pour les utilisateurs sous contrôle du gaz.

Avec le développement du marché, les agrégateurs tels que 1inch et 0x auront également leurs sources de cotation uniques. DEX tels que Balancer et Uniswap V3 diviseront également une transaction de l'utilisateur en plusieurs chemins. La différence est que l'algorithme d'agrégation de DEX repose sur son pool de cotations, tandis que les agrégateurs utilisent pleinement la composabilité de DeFi. Un agrégateur peut fournir aux utilisateurs la meilleure cotation car il peut accéder à son pool et aux pools d'autres DEX, augmentant ainsi la source de liquidité de toute la chaîne.

DODO s'engage à fournir aux utilisateurs la meilleure expérience de trading. En plus de développer son pool PMM , DODO a développé indépendamment son algorithme d'agrégation. L'algorithme d'agrégation de DODO n'est pas l'algorithme de routage fractionné de DEX tel qu'Uniswap, mais l'algorithme d'agrégation similaire à celui de 1 pouce et 0x. DODO connectera non seulement ses pools mais également d'autres pools de DEX pour mieux utiliser les liquidités.

Cet article se compose de deux parties. La première partie introduira la modélisation des problèmes d'agrégation. La deuxième partie présentera l'algorithme d'agrégation de DODO et analysera les difficultés de conception de l'ingénierie d'agrégation.

1. Introduction à la modélisation et analyse de la solution

Une modélisation appropriée est un excellent début pour résoudre un problème. Commençons par le problème le plus simple : le routage linéaire.

1.1 Routage linéaire

Le routage linéaire est le processus de recherche d'un chemin de trading optimal offert pour le jeton cible où une paire de trading ne passe que par un pool. Par exemple, si un utilisateur a besoin d'échanger de l'ETH vers l'USDC, le chemin optimal trouvé par un routage linéaire est d'échanger de l'ETH vers l'USDT, puis il va à l'USDC, et non à [ACB] ou [ADB] (c'est-à-dire que l'actif A est pas divisé en deux parties et sélectionne des chemins différents). Le chemin choisi ne traverse que deux bassins. Ces deux pools peuvent provenir de protocoles différents. Par exemple, le protocole pour échanger ETH vers USDT provient du pool Uniswap V3, et le protocole USDT-USDC provient du pool Curve V1. DEX comme Uniswap V2 et PancakeSwap utilisent également ce modèle de routage. Cependant, leur source de liquidité est leur échange. Les routes Uniswap V2 ne passent que par les pools Uniswap V2, tandis que les routes PancakeSwap ne passent que par les pools PancakeSwap.

[Figure 2 : Le contenu dans la case rouge marquée dans la figure est le chemin de routage]

Supposons que les utilisateurs du jeton doivent vendre : fromToken , et le jeton qu'ils veulent acheter : toToken . Pour tout pool, baseToken est défini comme le jeton de vente et quoteToken comme le jeton d'achat. Le baseToken du premier pool doit être fromToken et le quoteToken du dernier pool doit être toToken , comme illustré dans la figure ci-dessous.

Il peut être directement résumé comme un problème de valeur maximale : il y a n actifs différents, il y a k autres pools différents, et le nombre de jetons échangés dans chaque pool peut être exprimé par un ensemble de fonctions

Étant donné que les pools de jetons doubles peuvent représenter tous les pools de 3 jetons ou multi-jetons, la fonction peut être encore abrégée comme suit :

où représente αi le numéro de l'actif iᵗʰ, αirereprésente le numéro de l'actif jᵗʰ et k représente le numéro du pool. Supposons que le nombre de fromToken de l'utilisateur soit αᶠ et enfin, le nombre de toToken αᵗ peut être obtenu. L'ensemble de jetons échangés au cours du processus est le suivant :

Il y a m-1 pools dans ce processus, et nous allons représenter cela comme thêta :

Alors,

Si nous pouvons trouver la solution aux problèmes ci-dessus, nous pouvons obtenir le chemin optimal.

Cette modélisation est encore trop abstraite, et on peut utiliser la théorie des graphes pour construire un autre modèle. Le baseToken de i à j représente le bord ρⁱʲᵏ et le bord de j à i est ρʲⁱᵏ Le poids du bord est défini sur α₀ divisé par le nombre de quoteTokens échangés par le pool αⱼ. α₀/αⱼ peut construire le graphe orienté suivant avec plusieurs arêtes et anneaux, comme indiqué ci-dessous :

Ensuite, le problème peut être résumé comme suit : à partir de l'origine F , c'est-à-dire, trouver un chemin depuis fromToken qui minimise le poids vers toToken .

À première vue, cela semble être un problème simple concernant le chemin le plus court, et il existe de nombreux algorithmes matures à titre de référence. Mais contrairement aux problèmes de chemin le plus court ordinaires, dans le processus de recherche du bord suivant, sous le poids d'un bord est associé au chemin devant la séquence du nœud. Par conséquent, dans le chemin optimal des nœuds rejoignant la file d'attente, chaque nœud a un état qui doit être maintenu en temps réel. Il fait correspondre les nœuds de séquence suivants de la longueur de chemin enregistrée à l'état des nœuds de séquence précédents. Et dans ce problème, le « poids minimum » final est calculé non pas en additionnant les poids de tous les bords sur le chemin, mais en calculant uniquement le poids d'entrée du nœud toToken . Cette caractéristique rend l'algorithme traditionnel du plus court chemin non entièrement applicable.

Lorsqu'il y a peu de nœuds, il est plus intuitif de rechercher directement avec l'algorithme Depth First Search (DFS), c'est-à-dire de parcourir chaque chemin et d'obtenir le prix final du toToken , afin de sélectionner le chemin optimal à échanger par les utilisateurs. L'itinéraire Uniswap V2 utilise cette méthode pour trouver le chemin optimal. La première version de la route Uniswap V3 utilise également cette méthode. Cependant, contrairement à V2, le prix de V2 peut être calculé directement via la chaîne. Et puis le multi-appel appelle le contrat du devis et obtient directement le résultat.

[Figure 5 : Code source de l'algorithme de routage Uniswap v2]

Le modèle mentionné ci-dessus n'est pas adapté à l'algorithme BFS. Supposons que l'algorithme BFS est exécuté en fonction de l'arête (c'est-à-dire que l'algorithme BFS est exécuté en fonction du pool). Dans ce cas, le pool non sélectionné dans cet état doit être maintenu de manière synchrone. L'étape suivante ne peut être étendue que dans le pool non sélectionné, ce qui n'a aucune différence avec la complexité de l'algorithme DFS mais augmente considérablement le coût de l'espace pour l'enregistrement. Cependant, un problème fatal surviendra si les nœuds sont étendus selon l'algorithme BFS : le nœud peut être traversé à plusieurs reprises. Par conséquent, il ne satisfait pas la condition de l'algorithme BFS.

De même, en raison de l'existence d'effet secondaire, la méthode d'élagage dans l'algorithme DFS n'a pas été envisagée pour le moment. La meilleure méthode suivante consiste à pré-trier la taille du pool et à supprimer certains pools avant d'entrer dans l'algorithme DFS, mais il existe certains risques liés à la suppression de pools, qui peuvent affecter l'optimalité.

L'application de l'algorithme DFS peut assurer le chemin optimal de fromToken à toToken du graphe courant. La complexité temporelle est liée au nombre de couches. Heureusement, pour assurer la rationalité du gaz, le nombre de couches récursives ne dépassera pas 4, donc la complexité temporelle est O(l ^3), et l est le nombre total d'arêtes.

1.2 Routage fractionné

Lors de l'examen de problèmes complexes, le choix du chemin de cotation optimal est également appelé routage fractionné. Dans le processus de recherche d'un chemin de négociation, une paire de négociation peut passer par différents pools, et les fonds de l'utilisateur sont alloués à différents pools pour être échangés dans une proportion optimale pour rendre l'offre de jetons cible optimale. De même, prenez ETH-USDC comme exemple. Le chemin de transaction passe toujours par ETH vers USDT puis vers USDC. ETH et USDT peuvent passer par deux pools. 30% des ETH sont convertis en USDT via Uniswap V3 et 70% en USDT via DODO V2. Lorsque l'USDT est échangé contre l'USDC lors de la prochaine transaction, l'USDT initial est la somme des deux parties ci-dessus de l'USDT, la répartition optimale de l'USDT vers l'USDC est trouvée.

Dans le chemin d'enchères optimal, le fromAmount complet peut être divisé en différents chemins ou pools à échanger en fonction de la proportion du montant du chemin. Un réseau de flux peut être défini dans le schéma d'origine, en fonction de la plus petite unité d'échelle utilisée pour le partitionnement. Une super-source peut être établie si le fromAmount peut être divisé en n parties. La limite supérieure du flux de la super-source au nœud fromToken est n , et la limite supérieure du flux des arêtes restantes est l'infini positif. α₀ divisé par le nombre de quoteTokens échangés par le pool αⱼ, α₀/αⱼ comme le coût du bord cⁱʲᵏ, en utilisant la méthode de simplification décrite ci-dessus, pool kne contient que des jetons i et j , qui peuvent être simplifiés en cʲᵏ. Ensuite, le problème est de trouver le débit maximum avec le coût minimum dans le graphique.

En particulier, les frais sont dynamiques. Plus précisément, pour assurer le respect de la limite de degré des nœuds, nous pouvons supposer que le flux n'augmente ou ne diminue pas (de x % du montant initial) lorsqu'il traverse le nœud, ce qui n'affecte que le coût. Étant donné que le coût de l'arête est lié à la quantité de baseToken et que la quantité est liée au chemin, le coût de chaque arête w peut être défini comme :

Où cⁱʲᵏ est le coût du chemin, baseToken est i , quoteToken est j et le numéro de pool est k . C'est une fonction de wⁱᵏ, qui est la fonction de citation du pool. 𝔲 est le chemin de 0 à I , wⁱᵏ est défini comme le trafic sur le nœud i qui passe par le chemin k . Il y a:

wⁱ est le trafic du nœud I . Étant donné que le seul facteur qui affecte la quantité de quoteToken est la quantité de baseToken , cⁱʲᵏ peut être encore simplifié comme suit :

Où cᵢₗ est le coût d'entrée du nœud i , ι∈ ∑ [1,…,q] est le nombre d'arêtes d'entrée. Pour résoudre le problème du rapport de partition, une idée courante est de diviser le flux possible en n parties puis de diviser l'arête Pⁱʲᵏ en n parties. Le flux a été divisé en n parties égales, notées wⁱᵏ=1,2…n. où

son arête correspondante P'ⁱʲᵏ, 0<o<n+1, alors cⁱʲᵏ est définie par :

Les sous-chemins séparés par le même groupe d'arêtes ne doivent pas être sélectionnés à plusieurs reprises.

De même, le coût minimum résolu au final n'est défini que par le coût d'entrée de toToken .

Étant donné que le coût dépend du chemin passé, l'algorithme de chemin généralement augmenté pour résoudre le flux maximum de coût minimum n'est pas applicable. Un autre problème est que cette méthode limite le même pool uniquement pour prendre l'un des sous-chemins divisés, de sorte que la somme entre les sous-chemins ne peut pas être calculée et que le chemin augmenté ne peut pas simplement inverser le flux.

Le problème appelle une autre solution. Comme ce problème est un problème d'optimisation lorsque la force et le temps de calcul sont suffisants, les paramètres de simulation aléatoires peuvent être considérés. Les paramètres d'estimation MCMC peuvent être utilisés par calcul direct. Les gens de l'industrie actuelle se soucient plus du temps et de la fiabilité que de la solution optimale au problème. Dans les sections suivantes, j'essaie d'analyser les solutions d'autres agrégateurs de l'industrie pour illustrer deux solutions simplifiées au problème.

1.3 Analyse d'agrégation

0x

Grâce à l'analyse du code source 0x et aux résultats renvoyés par l'API, 0x simplifie les questions en deux modèles indépendants, qui donnent respectivement la citation optimale, puis sélectionne la solution optimale à renvoyer aux utilisateurs.

Simplifiez la question 1 : le routage linéaire, qui résulte des sauts multiples renvoyés par l'API.

Simplifier la question 2 : Routage fractionné à saut unique. Seuls les pools fromToken toToken sont conservés.

Pour le routage fractionné à saut unique, chaque chemin peut être divisé en N sous-chemins en fonction du coefficient de dispersion N , et le coût de chaque sous-chemin est quoteToken lorsque le trafic est i , qui est également le prix unitaire de toToken , puis résolu.

En particulier, 0x appelle le contrat de route lors de la construction de chemins liés à SushiSwap ou Uniswap, il peut donc y avoir plusieurs sauts intermédiaires dans le chemin, comptant essentiellement les sauts comme un pool entier.

1 pouce/ParaSwap

Pour 1 pouce, le chemin de gaz optimal dans le 1 pouce v2 est un itinéraire linéaire.

Le routage fractionné du 1 pouce v2 met à jour l'algorithme Pathfinder, qui a la structure suivante :

De même, le Paraswap reprend le même modèle que le 1 pouce :

Le frontal n'affiche pas le chemin divisé dans le saut unique, mais l'API peut observer le résultat divisé

[Le champ bestRoute dans l'API enregistre les détails du chemin de routage. Comme le montre la figure, le ParaSwap a choisi ParaSwapPool7 et l'Uniswap V3 pour échanger des paires dans la paire d'échange USDT (0xdAC17F958D2ee523a2206206994597C13D831ec7) à ETH, représentant respectivement 38,46 % et 61,54 %]

Ce modèle peut être directement exprimé par :

Où Af représente le montant total du jeton de base et est divisé en n chemins pour la transaction. Soit At le nombre final de toToken obtenu, qui est aussi la somme de n chemins :

Chaque chemin peut rencontrer un nombre différent de pools/échanges et échanger différents jetons au milieu. En utilisant le modèle ci-dessus, ati peut être directement exprimé comme suit :

Cette solution peut être interprétée comme la recherche de trois chemins de coût minimum non répétitifs dans le problème, ce qui est plus proche de la solution optimale que l'algorithme 0x. Mais c'est aussi une version simplifiée qui considère le cas caché où deux chemins différents convergent vers le même nœud.

Bien que le Pathfinder 1 pouce n'exclue pas les nœuds en double (c'est-à-dire des chemins différents à travers la même devise) dans sa conception des chemins de sous-jetons, il évite le problème d'utiliser deux fois la même source de citation en attribuant différents sous-chemins à différentes sources de citation, dans certains cas, sa solution ne sera toujours pas optimale. La taille spécifique de l'impact peut être testée pour la sensibilité.

Cependant, comme le montre l'analyse, ce modèle est le plus proche du modèle original. Si la solution optimale au problème peut être donnée, la solution est plus proche du problème d'origine et donne la solution optimale (la perturbation du modèle peut être mesurée). Le seul effet est d'observer les paramètres de l'API et les résultats de 1 pouce. On peut en déduire que 1 pouce a discrétisé le nombre de copies spécifié, ce qui peut entraîner des erreurs de discrétisation. Lorsque vous regardez le rapport de division de ParaSwap, il semble être plus fin que 1 pouce. Dans certains cas, ParaSwap peut obtenir de meilleurs résultats que 1 pouce, ce qui peut y contribuer.

DODO

L'algorithme de routage auto-construit du DODO simplifie également le problème en se référant aux conceptions 1 pouce et 0x. Compte tenu de la consommation de gaz et du taux de réussite des transactions, nous avons simplifié la version v1 du routage dans le modèle suivant :

Le chemin du jeton est unique, mais pas le chemin du pool.

Dans le routage de la version V2, DODO fera référence à la conception du modèle de 1 pouce et au ParaSwap pour optimiser le routage fractionné du chemin multi-token et des sous-chemins multi-pool.

Cet article a partagé plusieurs approches de modélisation possibles pour les problèmes d'agrégation. Dans la partie suivante, nous présenterons une idée de conception technique possible basée sur l'algorithme de routage auto-construit de DODO.

Avis de non-responsabilité

Les informations contenues dans ce rapport de recherche sont dérivées d'informations rendues publiques et les opinions exprimées ici sont uniquement à des fins de recherche et ne représentent aucun conseil en investissement. Les opinions et prévisions exprimées dans ce rapport sont l'analyse et le jugement de la date d'émission et n'ont pas de validité permanente.

Link: https://blog.dodoex.io/dodo-research-reveal-the-secrets-of-the-aggregator-problem-analysis-and-model-building-ba0ead85948c

#blockchain #defi #dex #dodo