數據分析:Uniswap V3的TVL計算竟然都是錯的?

語言: CN / TW / HK

原文作者:Ivan Vakhmyanin

編譯:PANews

2 x 2 = 5

很明顯,這是錯誤的數學題。當我看到Uniswap V3 用户界面上顯示的流動性和 TVL(鎖定總價值)的數據完全錯誤時,我的感受和看到2 x 2 = 5的感受是一樣的。

Uniswap是以太坊和整個區塊鏈行業最大的去中心化金融(DeFi)項目。因為成千上萬的流動性提供者每天都在使用Uniswap的數字來建立他們的投資策略,這些數字怎麼可能不準確呢?

我試着找出我計算過程中的錯誤,但數小時都無成果,且實際情況比TVL不準確還更糟糕。

發現問題

首先,瞭解什麼是TVL以及如何使用TVL?

TVL是委託給區塊鏈或協議的所有加密貨幣資產的總價值,通常以美元計價。這些資產可能是去中心化交易所、跨連橋、借貸協議的總流動性,或者PoS的總質押資產。

TVL被加密投資者廣泛應用,主要應用於以下場景:

1、判斷協議,熱門的協議一般都會展示它們的TVL,因為更大的TVL意味着更大的用户信任、更低的風險以及更穩定的利潤。

2、篩選協議,加密交易者一般會選擇更高的TVL的DeFi工具,如去中心化交易所或跨鏈橋。

3、監控協議,TVL數據能快速增長的協議,是發展越來越好的信號。

TVL如此重要,但我竟然發現最大的DeFi協議Uniswap v3 TVL的數據存在一些錯誤。不過對於我來説,最大的發現是官方的Uniswap 圖表也存在一些問題,以下是我發現這個問題的全程:

以一個流動性分析項目為例,首先將 Uniswap v3 的官方數據與我使用原始區塊鏈數據的計算進行比較。此步驟對於數據質量標準至關重要,為了提高驗證的準確性,我選擇了一個熱門的流動性池 USDC-WETH(0.3% 的費用水平)。

Uniswap v3 上第三個池子的 TVL 高達 3.33 億美元(基於撰寫本文時的 Uniswap 官方圖表),每日交易量為 6100 萬美元。

但我計算出來的是1.76 億美元,和Uniswap v3 的官方數據並不一致,於是我決定到ETH的區塊瀏覽器上進一步驗證。理論上,每個 Uniswap v3 池子都是一個智能合約。因此,區塊鏈瀏覽器可以顯示池中擁有的代幣餘額,也就是這個池子的 TVL。

我預計區塊瀏覽器池子中的代幣餘額會比Uniswap的官方數據大一點,因為池子還包含流動性及還未領取的費用。但這個餘額幾乎是Uniswap官方數據的一半,最讓人驚訝的是,這和我的計算結果相同!

我再逐個檢驗其他資產的流動性,也出現類似的情況。這個時候,我意識到這個問題和應該不是我計算的問題。

為什麼會發生這個情況?經過研究,我發現 Uniswap 依賴於去中心化的區塊鏈索引服務The Graph。使用此服務,任何開發人員都可以為特定的區塊鏈數據用例添加個人分析代碼(稱為子圖),並通過 API 提供分析。所以Uniswap Labs 為 Uniswap 協議分析創建了自己的子圖,並通過The Graph提供給服務來組建相關數據。比較好的一面是The Graph的代碼是公開的,不好的一面是它的 TVL計算錯誤。

我對其中的代碼進行了簡要的分析,發現它考慮了所有兑換和流動性事件,但沒有考慮費用。Uniswap 礦池對每次交換收取 0.01% 到 1% 的費用。該費用從交易資產中扣除,並計入流動性提供者。反過來,流動性提供者可以隨時收取應計費用。但是,當前的 Uniswap v3 子圖顯示的數字好像從未累積和收取任何費用。因此,Uniswap v3 TVL 數據在每次交換時都偏離了現實。

我第一反應是向The Graph提交工單進行反饋。但我在Github上發現,這個問題在2021年11月已經被核心開發人員提出了。我不知道The Graph為什麼一直沒有解決這個問題,但隨着時間的累積,TVL將會和實際數據相差越來越大。如現在的USDC-ETH這樣的大池子,目前的TVL已經和真實的數據相差幾乎一半了。

驗證問題

不真實的TVL會如何影響我們的投資決策呢?在開始之前,我們來看看這些偏差如何影響 Uniswap v3 的總TVL。在撰寫本文時,Uniswap v3官方顯示是120億美元。

從上圖官方報道的數據可以看到,TVL在2022年3月6日從5億美元穩步增長到45億美元。但發生了一些瘋狂的事情,在2022年3月7日,TVL被報道為2540億美元。這比整個以太坊網絡有史以來最高的TVL還要多2.5倍,且在一天之內發生這樣的變化。顯然,這個數據的錯誤的。在接下來的幾周,官方報道TVL為100-200億美元。

此時,我對Uniswap的分析數據失去了所有的信任,但怎麼才能知道真實的TVL呢?

有以下兩個選擇:

選項 1 — 分叉並修復 Uniswap v3 子圖。這個選項的不好的地方是子圖重新索引需要幾天時間,而且我不喜歡 The Graph 使用的 GraphQL 語言。

選項 2 —— 使用Datamint的高性能分析數據庫,它適用於所有 Uniswap v3 和以太坊數據,可隨時用於複雜的在線查詢。

經過一些實驗,我創建了以下算法來進行準確的 TVL 計算,下面是分步過程。

1.首先按照以下兩個步驟來計算所有現有的Uniswap v3 的TVL。

2.將所有 ERC-20 代幣轉賬添加到礦池合約(包括所有無人認領的費用)並匹配Etherscan的代幣餘額。

3.添加所有流動性事件,傳入和導出,然後添加所有兑換交易以計算費用。

4.比較兩種方法並確保不存在無法解釋的差異。

5.兑換少於 50 次或 0.00000000000001 代幣數量的廢棄池和空池(檢測到 7,863 個池,包括 2,083 對穩定池,我的算法刪除了 112 個空池和廢棄池)。

6. 為每個代幣找到穩定幣的路徑,將池中的 TVL 轉換為美元。

7. 移除美元價值受損的低流動性資金池,因為某些資金池在完全移除流動性後可能顯示價值不足(請查看下圖作為示例)。

8. 將所有剩餘貨幣對的 TVL 轉換為美元並添加。

計算過程很快,我喝咖啡的過程中就完成了,下面是最終的計算結果。

從上圖的計算結果可以看出,這幾乎比報告TVL的118億美元少了近4倍。

免責聲明:我的計算可能存在錯誤,在面向企業客户時我們使用自動測試等其他工具來實現數據的高質量。但對於個人項目,這些工具並不適用。另外,這個研究主要是表現出現存數據的問題,但並非是最終數據。

修復問題

錯誤的數據會導致投資者做出一些錯誤的決策,我們認為實際上修復Uniswap 的TVL並不難。Uniswap Labs可選擇在子圖代碼中修復,或計算器開發人員開始使用其他數據源。但我們對計算器的預測數據的準確性保持懷疑,我做了一些簡短的計算來驗證我的觀點,結果和我的猜測一樣,發現沒有接近的數據。

這是一個非常大膽的猜測,我知道很多流動性提供者都是依靠現有的計算器來做出數萬美元的投資決策。但為了便於您進一步做出自己的判斷,我們復原了以下的計算過程:

首先,讓我們回顧一下 Uniswap v3 協議的一些核心概念。

它的主要創新之一是集中流動性。本質上,使用 Uniswap v3,您可以選擇您希望資金用作流動性提供者的價格範圍。這是一個了不起的概念,可以為協議用户帶來巨大的價值。流動性提供者限制了他們對無常損失的範圍,交易者可以在波動性較低時享受較小的價格滑點。但所有這些潛在的好處都是有代價的,那就是複雜性。

在 Uniswap v3 中,流動性提供者選擇提供流動性的價格範圍。一旦價格在此範圍內,他將獲得兑換費用的分成。流動性提供者希望其流動性頭寸的價格範圍儘可能寬。但是,流動性在此範圍內按比例分配。因此,範圍越廣,每筆交易的兑換費用就越低。

在此示例中,選項 A 顯示流動性提供者選擇了較寬的價格範圍,而選項 B 顯示了相同金額的較窄價格範圍。假設在這兩種情況下,價格都在所選價格範圍內,流動性提供者在選項 B 中獲得 3 倍以上的費用。但是,如果價格波動更大,流動性提供者最終可能在選項 A 中獲得更高的利潤。

因此,實際上,選擇正確的價格範圍應在錯過價格的風險和每筆交易獲得較低迴報之間找到最佳平衡。

此外,還有一個被經常忽視的參數也會影響流動性提供者的利潤。那就是LP利潤計算器,這個參數可以改變一切。如果你想知道LP的具體計算邏輯,可以參考以下示例:

在此示例中,兩個流動性提供者(LP1 和 LP2)擁有頭寸。LP1 的頭寸窄幅為 3 美元。LP2 擁有 5 美元的寬頭寸。在這種情況下,如果價格沒有超出 LP1 的持倉範圍,他將獲得比 LP2 多 3 倍的費用。因為 LP2 在這個範圍內只有 1 美元,而這 1 美元正在與 LP1 的 3 美元競爭。

如果您查看任何 Uniswap v3 池子的流動性分佈,你會發現它並不統一。

門檻越高,競爭越高,流動性提供者需要在選擇有競爭力的範圍和價格下跌概率較低的範圍之間找到平衡。這就是為什麼這種分佈在 LP 利潤預測和戰略制定中發揮重要作用的原因,但我並不確定這個分佈是否計算正確。

流動性資金

流動性提供者就是猜測價格、競爭狀態和交易量,如果 LP 有一個願望,那就是事先了解交易的未來以調整流動性頭寸,這是可以實現的。

在研究過程中,一些不尋常的流動性提供者引起了我的注意。他們每天多次添加和刪除大量流動性頭寸(超過 1000 萬美元)。更令人驚訝的是,他們總是在同一個區塊中添加和移除流動性。

我們可以看下面這個例子:

我們有三筆交易,都在區塊15413416,位置 3-5,以自下而上的順序執行。第一個使用 Execute 方法的交易是一個名為“MEV Bot”的合約,為 USDC-WETH 池增加了 2200 萬美元的流動性。

<em>MEV Bot 增加流動性</em>

第二筆交易是通過 WETH 從 USDC 到 DogeChain 的交換,這是一筆價值約 16,500 美元的普通兑換交易。

<em>標準兑換交易</em>

第三筆交易又是“MEV Bot”,從 USDC-WETH 池中移除了 2200 萬美元的流動性。

<em>MEV Bot 消除流動性</em>

示例中發生的事情稱為“流動性狙擊”,讓我解釋一下這是如何工作的:

1.有人發送了一筆交易,將 USDC 交換到 DogeChain;

2.MEV Bot 在內存池中檢測到此交易,並使用 Flashbots 技術或類似技術激活了與礦池的私有鏈接;

3.MEV Bot 向礦工支付了一筆兑換交易和兩筆按特定順序進行的交易,以允許提取價值;

4.MEV Bot 在一個非常窄的價格範圍內增加了如此多的流動性(2200 萬美元),因此有效地,從特定的 USDC-DogeChain 交易中獲得的所有費用利潤都累計到他的身上;

5.MEV Bot 移除流動性並賺取費用(約 35 美元)。

因此,他扣除GAS費後的毛利潤約為 30 美元。也許這個費用不是很多,但他每分鐘多次執行此策略,所有這些都加起來,就是不小的數量了。你也可以通過區塊瀏覽器,自己檢查這個過程。

作為流動性提供者,這對你意味着什麼呢?這意味着流動性狙擊手可能會大幅削減你的費用利潤。

結論

我相信 Uniswap 是一個具有巨大潛力的偉大項目,我也尊重 Uniswap v3 核心集中流動性的想法。然而,我發現 Uniswap 生態系統的分析部分還遠未成熟,我相信這個情況很快就會改變!最後,總結一下我的研究結果:

1.Uniswap v3 圖表中的 TVL 數據非常不準確,所有依賴官方 Uniswap v3 子圖的分析工具都存在相同的錯誤。
2.Uniswap v3 TVL 總額為31.4b億美元,而官方網站報告的為 118億美元(數據截止至撰寫本文)。
3.Uniswap v3 流動性提供者的計算器對現實生活中的策略幾乎沒有價值,因為它們沒有考慮競爭和流動性狙擊手。
<em>著名的呆伯特系列,經修改後以反應流動性提供者的現實情況</em>

幸運的是,您現在可以更好地瞭解 Uniswap v3 流動性池在現實生活中的運作方式,並可以相應地調整您的研究。

雖然我無法提供投資建議,但我認為只有 2 個選項可以建立一個突出流動性的策略:

  • 簡易版,使用歷史性能數據。嘗試一些小額流動性頭寸,看看哪些選項更有效,但這隻有在市場穩定的假設下才有效。
  • 進階版,進行研究並相應地優化 LP 策略。如上所述,這需要深入瞭解 Uniswap v3 協議、數學和博弈以及實時處理大量數據的強大數據分析工具。

這兩種選擇有一個共同點,那就是你的決定是基於數據的而不是直覺或隨機工具,有時處理數據很困難,但它有回報。