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
數據本身很簡單,關鍵是每個欄位都有坑。一個一個拆。
很多人以為 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 對應的是誰兌誰」的痛苦。
Uniswap V3 上常見的 fee 檔是 0.01% / 0.05% / 0.30% / 1.00%。
USDC/WETH 用 0.05% 而不是 0.30%,背後假設是「波動有限+量大」,做市商靠走量賺錢不靠手續費厚。
知道這一點,看到一個新池子是 1% fee 你就知道:要麼是新幣要麼是沒人關心的對。
V3 池子的狀態裡沒有「上一筆成交價」這個獨立欄位。當前價格直接由 slot0.sqrtPriceX96 決定,tick 是它的對數表達。換句話說:只要沒人交易,價格就一直掛在那裡,跟 CEX 的「上次成交」完全是兩個模型。
(想看歷史價格得用 V3 內建的 oracle —— 池子狀態裡有一組 observation 累加器可以反推 TWAP,那是另外一套機制。)
這次拉到的 1 WETH = 2310.34 USDC,是池子的「當前定價」,下一筆交易會從這個價位開始把價格沿曲線推到新的 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: 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_usd: 100,645,897.62。這才是池子裡真實持有的錢。
這個數字怎麼來的?池子合約裡實際持有的 USDC 數量 + WETH 數量,分別乘以從 DefiLlama 拿來的當前美元價格,加起來就是 TVL。
跟前面的 liquidity 一對比就清楚了:
| 欄位 | 數值 | 含義 |
|---|---|---|
| liquidity | 3.24 × 10¹⁸ | V3 數學內部參數,無單位 |
| tvl_usd | $100,645,897 | 池子裡真實持有的錢 |
這倆在文獻裡都翻譯成「流動性」,但說的是不同的東西。講故事看 TVL,做數學看 liquidity,永遠不要混。
最後一個細節:block_number: 24959248。
鏈上資料永遠是帶區塊號的快照。Claude 拉過來的所有這些欄位,是同一個區塊裡同步讀出來的。這意味著兩件事:
寫監控、寫套利邏輯這是最關鍵的屬性 —— 你拉一次資料得到的是一致的世界視圖,不需要擔心欄位之間的時差。
知道了上面這些,你能做的事就多了:
這些過去都得裝 web3.py、寫腳本、維護 ABI、租 RPC。現在 Claude + MCP 全是對話級別的操作,問什麼 Claude 就讀什麼。
V3 的數學模型有點門檻,sqrtPriceX96、tick、L、集中流動性這些概念勸退過不少人。但實戰裡你 90% 的需求是「讀懂這個池子現在什麼狀態、有沒有錢、價格是什麼」,不需要會推公式。
讓 Claude 當你的 V3 翻譯器,把那些虛擬流動性、tick 編碼翻成「1 ETH = 2310 USDC,池子裡有 1 億美元」這種人話。剩下的判斷你自己做。