Free

ให้ Claude อ่านพูล Uniswap V3 ใน 5 นาที

ฟิลด์ liquidity ของพูล Uniswap V3 ไม่ใช่ทั้งเงินและความลึกของการ swap ให้ Claude ไล่อธิบายทุกฟิลด์ที่อ่านผิดง่าย


ใครก็ตามที่จับ DeFi ไม่ช้าก็เร็วต้องนั่งเพ่งข้อมูลพูลของ Uniswap V3 และในตารางตัวเลขบนหน้าพูลนั้น มีอย่างน้อยหนึ่งฟิลด์ที่แทบทุกคนอ่านผิดในครั้งแรก —— อ่านผิดใหญ่พอที่จะทำให้คุณเชื่อว่าพูลมูลค่า 100 ล้านดอลลาร์มี "สภาพคล่อง" 3.2 ควินทิลเลียนดอลลาร์อยู่ข้างใน

บทความนี้อ่านพูลหนึ่งจากต้นจนจบในห้านาที โดยใช้ smarts MCP ร่วมกับ Claude ข้อมูลของจริง พูล 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 กำลังขึ้นหรือลง?" ต้องคำนวณใหม่ทั้งหมด

ข้อดีอย่างหนึ่งของการให้ Claude อ่านพูล: มันคืนราคามาพร้อมป้ายกำกับทั้งสองทิศทาง ไม่ต้องคำนวณในหัวว่า "ฝั่งไหนของ tick คือ token ไหน"

fee 0.05% บอกว่านี่คือพูลของ "คู่เสถียร"

ระดับ fee tier ที่พบบ่อยใน Uniswap V3 มีสี่ระดับ: 0.01% / 0.05% / 0.30% / 1.00%

  • 0.01%: stablecoin คู่ stablecoin (USDC/USDT)
  • 0.05%: สินทรัพย์ที่มีความสัมพันธ์สูง (USDC/WETH และคู่ที่คล้ายกัน —— คู่ลึก ความผันผวนจำกัด)
  • 0.30%: คู่ทั่วไป
  • 1.00%: คู่ long-tail ความผันผวนสูง

การที่ USDC/WETH ใช้ 0.05% แทน 0.30% บอกว่า: market maker เดิมพันที่ปริมาณ ไม่ใช่ค่าธรรมเนียมหนาๆ ต่อดีล เพราะความผันผวนถูกจำกัด แต่กระแสมหาศาล

รู้แค่นี้ พอเห็นพูลใหม่ที่ fee 1% ก็เดาได้ทันที: ไม่โทเคนใหม่ ก็คู่ที่ไม่มีใครสนใจ

price มาจาก tick ปัจจุบันโดยตรง —— ไม่มี "ราคาที่เทรดล่าสุด"

สถานะของพูล V3 ไม่มีฟิลด์แยก "ราคาที่เทรดล่าสุด" ราคาปัจจุบันคือสิ่งที่ slot0.sqrtPriceX96 บอก และ tick คือนิพจน์ลอการิทึมของมัน หรือพูดอีกแบบหนึ่ง: ตราบใดที่ไม่มีใครเทรด ราคาก็ค้างอยู่ตรงนั้น เป็นโมเดลที่แตกต่างจาก "การจับคู่คำสั่งล่าสุด" ของ CEX โดยสิ้นเชิง

(สำหรับราคาในอดีตให้ใช้ oracle ในตัวของ V3 —— สถานะของพูลเก็บแอเรย์ของ accumulator แบบ observation ที่ใช้คำนวณย้อน TWAP ได้ นั่นเป็นกลไกแยกต่างหาก)

1 WETH = 2310.34 USDC ที่เพิ่งอ่านมาคือ "ราคาเสนอปัจจุบัน" ของพูล swap ครั้งถัดไปจะเริ่มจากราคานี้และดันราคาตามเส้นโค้งไปยัง tick ใหม่

tick คือพิกัดเชิงไม่ต่อเนื่องของราคาแบบลอการิทึม

tick: 198868 คือตัวเลขที่ทำเอาทุกคนงงในครั้งแรก รู้สึกเหมือนเป็นราคา แต่ไม่ใช่ดอลลาร์

V3 ทำให้ราคาเป็นแบบไม่ต่อเนื่องในเชิงลอการิทึม: raw_price = 1.0001^tick โดย raw_price คือ wei ของ token1 หารด้วย wei ของ token0 —— ไม่ใช่ราคาแสดงผล จะแปลงเป็น "1 ETH เป็น USDC กี่หน่วย" ต้องคูณด้วย 10^(decimals_token0 - decimals_token1) ปรับอีกที หลังการปรับนี้ tick 198868 จะตรงกับ 1 ETH ≈ 2310 USDC พอดี

ทำไมถึงต้องอ้อมขนาดนี้? เพราะเมื่อราคาเป็นลอการิทึมแล้ว market maker สามารถ วางสภาพคล่องเฉพาะในช่วงราคาที่กำหนด —— เช่น "เฉพาะระหว่าง 2200 ถึง 2400 เท่านั้น" tick แบบไม่ต่อเนื่องคือป้ายของช่วงเหล่านี้ นี่คือนวัตกรรมเอกลักษณ์ของ V3 เมื่อเทียบกับ V2: สภาพคล่องแบบกระจุกตัว

ในทางปฏิบัติคุณไม่ต้องคำนวณ tick เอง รู้แค่ว่า: tick ใหญ่ขึ้นไม่ได้แปลว่าราคาสูงขึ้น (ขึ้นกับว่าใครคือ token0) และ tick ขยับหนึ่งช่อง = การเปลี่ยนแปลงราคา 0.01%

ฟิลด์ liquidity: ฟิลด์ที่อ่านผิดง่ายที่สุด

หลุมพรางใหญ่อยู่ตรงนี้: liquidity: 3243712254364037809

19 หลัก หน้าตาเหมือน wei แต่ มันไม่ใช่เงิน

มันคือ "สภาพคล่องเสมือน" L ในคณิตศาสตร์ของ Uniswap V3 —— พารามิเตอร์ภายในที่แสดงความชันของเส้นโค้งทำตลาดในช่วง 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 ว่า "ตอนนี้ฉัน swap ได้กี่บาทโดยไม่ slip" ก็ผิดเช่นกัน ความลึกของ swap ใน V3 คำนวณเป็นช่วงๆ: ในช่วง tick ปัจจุบันใช้ค่า L นี้กับสูตร sqrt-price; ทันทีที่ swap ดันราคาข้ามขอบ tick ก็ข้ามไปยังช่วงถัดไปและเปลี่ยนไปใช้ L ของช่วงนั้น ทุกขอบที่ข้ามจะเปลี่ยน L ใหม่ จนกว่าดีลจะเสร็จ ดังนั้น "swap ได้เท่าไรโดยไม่ slip" ขึ้นอยู่กับว่ามี L วางอยู่เท่าไรในแต่ละช่วงตลอดเส้นทาง —— ตัวเลขเดียวจาก slot0 ไม่ได้บอกอะไรเกี่ยวกับเรื่องนี้

จำให้ขึ้นใจ: อย่าเอาฟิลด์ liquidity ไปเทียบกับ USD และอย่าใช้เปรียบเทียบ "ความลึก" ระหว่างพูล —— เป็นการชี้นำที่ผิด

TVL: ในพูลมีเงินจริงๆ เท่าไร

tvl_usd: 100,645,897.62 นี่ต่างหากเงินจริงในพูล

ตัวเลขนี้มาจากไหน? คือยอดคงเหลือ USDC ที่แท้จริงของคอนแทรคต์ บวกกับยอดคงเหลือ WETH ที่แท้จริง แต่ละตัวคูณด้วยราคา USD ปัจจุบันที่ดึงจาก DefiLlama แล้วบวกกัน

เทียบกับฟิลด์ liquidity:

ฟิลด์ ค่า ความหมาย
liquidity 3.24 × 10¹⁸ พารามิเตอร์คณิตศาสตร์ภายในของ V3 ไม่มีหน่วย
tvl_usd $100,645,897 เงินจริงที่พูลถือครอง

ทั้งคู่ถูกแปลในการพูดคุยทั่วไปว่า "สภาพคล่อง" แต่เป็นคนละเรื่อง เล่าเรื่องดู TVL ทำคณิตศาสตร์ดู liquidity ห้ามปนกันเด็ดขาด

block_number: คุณกำลังดูภาพถ่ายที่บล็อกหนึ่ง

รายละเอียดสุดท้าย: block_number: 24959248

ข้อมูล on-chain มาพร้อมเลขบล็อกเสมอ ทุกฟิลด์ที่ Claude ดึงมาถูกอ่านที่บล็อกเดียวกัน นั่นหมายถึงสองอย่าง:

  1. ราคา สภาพคล่อง และ TVL สอดคล้องกันเอง (ไม่มีความเหลื่อมแบบ "ราคาเมื่อ 5 นาทีก่อน TVL ตอนนี้")
  2. อีกหนึ่งวินาทีอาจต่างไปแล้ว

สำหรับลอจิกการมอนิเตอร์หรือ arbitrage นี่คือคุณสมบัติชี้ขาด —— ดึงครั้งเดียวได้ภาพรวมโลกที่สอดคล้องกัน ไม่ต้องกังวลเรื่องเวลาเหลื่อมระหว่างฟิลด์

เอาไปใช้

พอเข้าใจทั้งหมดนี้ กล่องเครื่องมือก็เปิดออก:

  • เช็คสุขภาพพูล: ดึงยอดคงเหลือจริงของ token0/token1 (ไม่ใช่ฟิลด์ liquidity) แล้วดูว่าตรงกับ TVL ทางคณิตศาสตร์หรือไม่ ยอดเยอะแต่ราคาห่างจากค่ายุติธรรมมาก = อาจมีช่อง arbitrage
  • เปรียบเทียบระหว่าง fee tier: USDC/WETH มีพูลทั้งที่ 0.05% และ 0.30% ราคามักวิ่งใกล้กัน —— ส่วนต่างที่กว้างขึ้นคือสัญญาณ arbitrage
  • เปรียบเทียบข้ามเชน: เปรียบเทียบ USDC/WETH บน Ethereum mainnet กับ USDC/WETH บน Base —— ส่วนต่างบอกถึงต้นทุน bridge และสภาพคล่อง
  • มอนิเตอร์ tick: ติดตามการเคลื่อนของ tick เพื่อจับ "ราคาเพิ่งข้ามขอบ"

เมื่อก่อนทั้งหมดนี้ต้องลง web3.py เขียนสคริปต์ ดูแล ABI เช่า RPC ตอนนี้ทุกอย่างอยู่ในระดับการสนทนากับ Claude + MCP —— ถามแล้วมันอ่านให้

ไม่ต้องเก่งคณิตศาสตร์ก็อ่านพูลได้

โมเดลคณิตศาสตร์ของ V3 มีกำแพงทางเข้าอยู่ sqrtPriceX96, ticks, L, สภาพคล่องแบบกระจุกตัว —— แนวคิดเหล่านี้กั้นคนกลับไปไม่น้อย แต่ในทางปฏิบัติ 90% ของสิ่งที่คุณต้องการคือ "พูลนี้สุขภาพดีไหม มีเงินไหม ราคาเท่าไร" —— ไม่ต้องสูตร

ให้ Claude เป็นล่าม V3 ของคุณ แปลงสภาพคล่องเสมือนและการเข้ารหัส tick ให้กลายเป็นประโยคมนุษย์ง่ายๆ แบบ "1 ETH = 2310 USDC พูลมี 100 ล้านดอลลาร์" ตัดสินใจจากตรงนั้นเป็นเรื่องของคุณเอง