Free

Claude に Uniswap V3 プールを 5 分で読み解いてもらう

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 をアドレスの 16 進値の大小で並べる。USDC のアドレス 0xa0b8... は WETH の 0xc02a... より小さい。だから token0 = USDC、token1 = WETH。

この順序があらゆる内部計算を支配する:価格の方向、tick の方向、流動性の単位。別のプール、たとえば WETH/DAI に切り替えたら、token0 と token1 の役割はひっくり返るかもしれず、「ETH が上がってる?下がってる?」という直感は全部組み直す必要が出る。

Claude にプールを読ませる利点の一つは、両方向の価格をラベル付きで返してくれること。「このティックはどっちがどっちを買っている方向か」を脳内計算する苦行が消える。

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.30% ではなく 0.05% を採用しているのは、「ボラティリティは限定的、フローは巨大」という前提だから。マーケットメイカーは厚い手数料ではなく回転で稼いでいる。

これを知っていれば、新しいプールが 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 を補正すると 1 ETH ≈ 2310 USDC にぴったり対応する。

なぜここまで回りくどいか。価格を対数化したからこそ、マーケットメイカーは特定の価格レンジだけに流動性を配置できる。たとえば「2200〜2400 の間だけ作る」みたいに。離散 tick はそのレンジを指すラベル。これが V3 が V2 と違う核心:集中流動性。

実務では tick を計算する必要はない。覚えておくべきは:tick が大きいから価格が高いとは限らない(どちらが token0 かに依存する)し、tick 1 つの差は価格 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.

なぜ「スワップ深度でもない」と強調するのか。もう一つよくある誤解は、liquidity を「いまこのプールでスリッページなしに換金できる金額」と読んでしまうこと。これも違う。V3 のスワップ深度は段階的に計算される:現在の tick レンジ内ではこの L を使って sqrt-price 公式を回し、取引量が tick の境界を越えた瞬間に次のレンジへ移って、そのレンジ独自の L に切り替えて続ける。境界を越えるたびに L が入れ替わる。取引量が消化されるまでこれを繰り返す。だから「いくら換えてもスリッページが出ないか」は経路上の各レンジに L がいくら載っているかに依存する —— slot0 のこの数字一つだけ見ても何もわからない。

一文で覚えておけば十分:liquidity フィールドの数字は USD と比較しない、プール間の「深さ」比較にも使わない。それは誤導

TVL:プールに本当に入っているお金

tvl_usd: 100,645,897.62。こちらがプールに実在する資金。

この数字の出どころは?コントラクトが実際に保有している USDC 量と WETH 量に、それぞれ DefiLlama から取得した現在のドル価格を掛け、合計したもの。

liquidity と並べると違いが明確になる:

フィールド 意味
liquidity 3.24 × 10¹⁸ V3 数式の内部パラメータ、無次元
tvl_usd $100,645,897 プールが実際に保有する資金

どちらも口語では「流動性」と訳されるが、別物。ストーリーを語るときは TVL、計算するときは liquidity、絶対に混同しない。

block_number:見ているのはあるブロックのスナップショット

最後の細部:block_number: 24959248

オンチェーンデータは常にブロック番号付きのスナップショット。Claude が引いてきた全フィールドは同じブロックで同期的に読まれている。これが意味するのは二つ:

  1. 価格、流動性、TVL は互いに整合している(「価格は 5 分前、TVL は今」みたいなドリフトは起きない)
  2. 次の瞬間にはもう変わっているかもしれない

監視やアービトラージのロジックにはこの整合性が決定的 —— 1 回の取得で世界の整合スナップショットが手に入り、フィールド間の時差を気にしなくていい。

これを実戦に活かす

ここまで分かれば道具箱は一気に広がる:

  • プールの健全性チェック:token0 と token1 の実残高を取って(liquidity フィールドではない)、TVL と数学的に整合するか確認。残高は大きいのに価格が公正価値から離れていればアービトラージの余地あり
  • fee tier 横断の比較:USDC/WETH には 0.05% と 0.30% の二つのプールがあり、価格は通常近接している。乖離が大きければアービトラージのシグナル
  • チェーン横断の比較:イーサリアムメインネットの USDC/WETH と Base の USDC/WETH の価格差は、ブリッジコストと流動性の指標
  • tick 監視:tick の動きを追って「価格が境界を越えた」を検知

以前ならこれら全てに web3.py をインストールし、スクリプトを書き、ABI を保守し、RPC を借りる必要があった。今は Claude + MCP との対話レベル。聞けば Claude が読む。

数学を知らなくてもプールは読める

V3 の数学モデルは入り口がやや高い。sqrtPriceX96、tick、L、集中流動性 —— これらの概念で多くの人が引き返してきた。だが実務で必要な 90% は「このプールは今どんな状態か、お金はあるか、価格はいくらか」。公式は要らない。

Claude を V3 の翻訳家にしよう。仮想流動性や tick エンコーディングを「1 ETH = 2310 USDC、プールには 1 億ドル入っている」という人間の言葉に変えてくれる。判断はそこからあなたの仕事。