免費

讓 Claude 5 分鐘讀懂一個 Uniswap V3 池子

Uniswap V3 池子的 liquidity 欄位不是錢也不是深度,讓 Claude 幫你把每個欄位讀懂。


每個玩 DeFi 的人都會看 Uniswap V3 池子。但池子頁面上那一堆數字裡,至少有一個欄位幾乎所有人第一次都會看錯 —— 而且這個錯夠大,能讓你以為一個 1 億美元的池子有 32 億億的「流動性」。

這篇用 smarts MCP 配上 Claude,5 分鐘把一個池子從頭到尾讀一遍。用真實數據,主網 USDC/WETH 0.05% 這個池子。

一句話拉出整池子狀態

接好 smarts MCP 之後,Claude 直接呼叫 get_uniswap_v3_pool,slug 寫 univ3-usdc-weth-eth,回傳這堆東西:

protocol: Uniswap V3
pair: USDC/WETH
fee: 0.05%
price:
  1 WETH in USDC: 2310.3381
  1 USDC in WETH: 0.00043283
tick: 198868
liquidity: 3243712254364037809
liquidity_note: Uniswap V3 sqrt-formula virtual liquidity
                at the current tick. Not a USD amount and
                not the depth available to swap.
tvl_usd: 100,645,897.62
tokens:
  token0: USDC (decimals 6)
  token1: WETH (decimals 18)
block_number: 24959248

數據本身很簡單,關鍵是每個欄位都有坑。一個一個拆。

token0、token1 不是按業務習慣排的

很多人以為 USDC/WETH 池子裡 USDC 是「主貨幣」,WETH 是「被定價的資產」。錯。Uniswap V3 用合約裡 token0、token1 的順序完全是按地址十六進位大小排的。USDC 地址 0xa0b8... 比 WETH 的 0xc02a... 小,所以 token0 = USDC,token1 = WETH。

這個排序決定了所有內部數學:價格的方向、tick 的方向、流動性怎麼計。一旦你換了池子,比如 WETH/DAI,token0、token1 的角色可能顛倒過來,所有「是 ETH 在漲還是 ETH 在跌」的判斷都得重做。

讓 Claude 讀這個池子的好處之一:它直接給你兩個方向都標好的價格,省掉自己腦算「這個 tick 對應的是誰兌誰」的痛苦。

fee 0.05% 意味著這是個「穩定對」池

Uniswap V3 上常見的 fee 檔是 0.01% / 0.05% / 0.30% / 1.00%。

  • 0.01%:穩定幣對穩定幣(USDC/USDT)
  • 0.05%:高度相關的資產(USDC/WETH 這種深度大、波動可控的對)
  • 0.30%:一般幣對
  • 1.00%:長尾、波動大的幣對

USDC/WETH 用 0.05% 而不是 0.30%,背後假設是「波動有限+量大」,做市商靠走量賺錢不靠手續費厚。

知道這一點,看到一個新池子是 1% fee 你就知道:要麼是新幣要麼是沒人關心的對。

price 是當前 tick 直接換算出來的,不是「上一筆成交價」

V3 池子的狀態裡沒有「上一筆成交價」這個獨立欄位。當前價格直接由 slot0.sqrtPriceX96 決定,tick 是它的對數表達。換句話說:只要沒人交易,價格就一直掛在那裡,跟 CEX 的「上次成交」完全是兩個模型。

(想看歷史價格得用 V3 內建的 oracle —— 池子狀態裡有一組 observation 累加器可以反推 TWAP,那是另外一套機制。)

這次拉到的 1 WETH = 2310.34 USDC,是池子的「當前定價」,下一筆交易會從這個價位開始把價格沿曲線推到新的 tick。

tick 是對數價格的離散座標

tick: 198868 這個數字第一次看會迷。直覺上你覺得它是某種價格,但它本身不是美元。

V3 把價格做了對數離散化:raw_price = 1.0001^tick,這裡的 raw_price 是 token1 的 wei 數 / token0 的 wei 數(不是顯示價格)。要變成「1 ETH 多少 USDC」還得乘 10^(decimals_token0 - decimals_token1) 校正。198868 這個 tick 校正完正好對應 1 ETH ≈ 2310 USDC。

為什麼搞得這麼繞?因為對數化之後,做市商可以只在某個價格區間掛流動性,比如「只在 2200~2400 之間做市」,離散 tick 就是用來標這個區間的。這是 V3 區別於 V2 的核心創新 —— 集中流動性。

實戰裡你不需要會算 tick,但你要知道:tick 越大不代表價格越高(取決於誰是 token0),tick 跳一格的價格變化是 0.01%。

liquidity 欄位:最容易看錯的就是它

最大的坑:liquidity: 3243712254364037809

這個數字 19 位,看起來像 wei 量級。但它不是錢

它是 Uniswap V3 數學裡的「虛擬流動性」L —— 一個用來表達 sqrt-price 區間內做市曲線斜率的內部參數。它單位都不是 USD,跟池子真實持有的錢沒有可比關係。

工具回傳裡專門加了 liquidity_note 提醒:

Uniswap V3 sqrt-formula virtual liquidity at the current tick. Not a USD amount and not the depth available to swap.

為什麼強調「也不是 swap 深度」?因為另一個常見誤解是把 liquidity 當成「我現在能在這個池子裡換多少錢不滑點」。也不對。V3 的 swap 深度是分段算的:在當前 tick range 內用現在這個 L 走 sqrt-price 公式;一旦交易量把價格推到 tick 邊界,就跨進下一個 range,換上那個 range 自己的 L 接著算。每跨一格邊界就換一次 L,直到交易量用完。所以「能換多少錢不滑點」取決於路徑上每個 range 各自掛了多少 L —— 單看 slot0 這個數字一無所知。

記住一句話就夠了:liquidity 欄位的數字別用來跟 USD 比、別用來比池子之間的「深度」,那是誤導

TVL:池子裡真實有多少錢

tvl_usd: 100,645,897.62。這才是池子裡真實持有的錢。

這個數字怎麼來的?池子合約裡實際持有的 USDC 數量 + WETH 數量,分別乘以從 DefiLlama 拿來的當前美元價格,加起來就是 TVL。

跟前面的 liquidity 一對比就清楚了:

欄位 數值 含義
liquidity 3.24 × 10¹⁸ V3 數學內部參數,無單位
tvl_usd $100,645,897 池子裡真實持有的錢

這倆在文獻裡都翻譯成「流動性」,但說的是不同的東西。講故事看 TVL,做數學看 liquidity,永遠不要混。

block_number:你看的是某個區塊的快照

最後一個細節:block_number: 24959248

鏈上資料永遠是帶區塊號的快照。Claude 拉過來的所有這些欄位,是同一個區塊裡同步讀出來的。這意味著兩件事:

  1. 價格、流動性、TVL 之間是一致的(不會出現「價格是 5 分鐘前的,TVL 是現在的」這種漂移)
  2. 你下一秒看可能就變了

寫監控、寫套利邏輯這是最關鍵的屬性 —— 你拉一次資料得到的是一致的世界視圖,不需要擔心欄位之間的時差。

把這些用起來

知道了上面這些,你能做的事就多了:

  • 檢查池子健康:拉 token0、token1 的真實餘額(不是 liquidity 欄位),看跟 TVL 數學是否對得上。如果餘額很大但價格離公允價遠,可能有套利空間
  • 跨 fee tier 比價:USDC/WETH 在 0.05% 和 0.30% 兩個 fee 檔都有池子,價格通常貼得很近,差太多也是套利信號
  • 跨鏈對比:以太坊主網 USDC/WETH 跟 Base 上的 USDC/WETH 價格能差多少,反映了橋的成本和流動性
  • 掛單監控:追蹤 tick 變動,知道「價格越過了某個邊界」

這些過去都得裝 web3.py、寫腳本、維護 ABI、租 RPC。現在 Claude + MCP 全是對話級別的操作,問什麼 Claude 就讀什麼。

不會數學也能看懂池子

V3 的數學模型有點門檻,sqrtPriceX96、tick、L、集中流動性這些概念勸退過不少人。但實戰裡你 90% 的需求是「讀懂這個池子現在什麼狀態、有沒有錢、價格是什麼」,不需要會推公式。

讓 Claude 當你的 V3 翻譯器,把那些虛擬流動性、tick 編碼翻成「1 ETH = 2310 USDC,池子裡有 1 億美元」這種人話。剩下的判斷你自己做。