Uniswap V3 havuzunun liquidity alanı ne paradır ne de swap derinliği. Yanlış okunmaya en yatkın alanları Claude'a açıklatın.
DeFi ile uğraşan herkes er ya da geç bir Uniswap V3 havuzunun verilerine bakar. Ve havuz sayfasındaki o sayı yığınında, hemen herkesin ilk seferde yanlış okuduğu en az bir alan vardır —— öyle ki, 100 milyon dolarlık bir havuzda 3,2 katrilyon dolarlık "likidite" olduğunu sanmanıza yetecek kadar büyük bir yanlış okuma.
Bu yazıda smarts MCP ile Claude'u birleştirerek bir havuzu beş dakika içinde baştan sona okuyoruz. Gerçek veri, mainnet'teki USDC/WETH 0.05% havuzu.
smarts MCP bağlandıktan sonra Claude get_uniswap_v3_pool çağrısını univ3-usdc-weth-eth slug'ıyla yapar ve şunu alır:
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
Verinin kendisi basit. Mesele her alanın bir tuzağı olması. Tek tek açalım.
Çoğu kişi USDC/WETH havuzunda USDC'nin "ana para birimi", WETH'nin "fiyatlanan varlık" olduğunu sanır. Yanlış. Uniswap V3, token0 ve token1'i tamamen adreslerin sayısal değerine göre sıralar. USDC adresi 0xa0b8..., WETH'nin 0xc02a... adresinden küçük olduğu için token0 = USDC, token1 = WETH olur.
Bu sıralama tüm iç hesaplamaları yönetir: fiyatın yönü, tick'in yönü, likiditenin birimi. Başka bir havuza geçin, mesela WETH/DAI, ve token0/token1 rolleri ters dönebilir —— "ETH yükseliyor mu düşüyor mu?" sezgisinin tamamı yeniden hesaplanmak zorundadır.
Claude'a havuzu okutmanın artılarından biri: fiyatı her iki yönde etiketlenmiş olarak getirir, "bu tick hangi tarafın hangi token'ı satın aldığı yöndür" diye kafanızda hesap yapma derdinden kurtarır.
Uniswap V3'te yaygın dört fee dilimi: 0.01% / 0.05% / 0.30% / 1.00%.
USDC/WETH'in 0.30% yerine 0.05% kullanması şunu söyler: market maker'lar hacme oynuyor, işlem başına şişkin ücretlere değil; çünkü volatilite sınırlı, akış ise dev.
Bunu bilince yeni bir havuzu 1% fee ile gördüğünüz an tahmin edebilirsiniz: ya yeni çıkmış bir token ya da kimsenin umursamadığı bir çift.
V3 havuz state'inde ayrı bir "son işlem fiyatı" alanı yoktur. Mevcut fiyat, slot0.sqrtPriceX96 ne diyorsa odur, tick ise onun logaritmik ifadesidir. Başka bir deyişle: kimse trade yapmadığı sürece fiyat orada kıpırdamadan durur, CEX'in "son emir gerçekleşmesi" modeliyle tamamen farklı.
(Tarihsel fiyatlar için V3'ün dahili oracle'ı kullanılır —— havuz state'inde TWAP türetmeye yarayan observation akümülatörlerinden oluşan bir dizi vardır. O ayrı bir mekanizmadır.)
Az önce okuduğumuz 1 WETH = 2310.34 USDC, havuzun "şu anki kotasyonu"; sonraki swap bu fiyattan başlar ve eğri boyunca fiyatı yeni bir tick'e iter.
tick: 198868 ilk seferde herkesi çakar. Sanki bir tür fiyatmış gibi gelir, ama dolar değildir.
V3 fiyatı logaritmik olarak ayrıklaştırır: raw_price = 1.0001^tick. Buradaki raw_price, token1'in wei değerinin token0'ın wei değerine bölümüdür —— gösterim fiyatı değil. "1 ETH kaç USDC" haline getirmek için ayrıca 10^(decimals_token0 - decimals_token1) ile çarpıp düzeltmek gerekir. Bu düzeltmeden sonra 198868 tick'i tam olarak 1 ETH ≈ 2310 USDC'ye karşılık gelir.
Neden bu kadar dolambaçlı? Çünkü fiyat logaritmik hâle gelince market maker'lar likiditeyi yalnızca belirli bir fiyat aralığına yerleştirebilir —— mesela "sadece 2200–2400 arasında". Ayrık tick'ler bu aralıkların etiketleridir. V3'ün V2'ye karşı imza yeniliği: konsantre likidite.
Pratikte tick hesaplamak zorunda değilsiniz. Bilinmesi gereken: daha büyük bir tick mutlaka daha yüksek bir fiyat anlamına gelmez (token0'ın kim olduğuna bağlıdır), bir tick adımı %0.01'lik fiyat değişimidir.
İşte büyük tuzak: liquidity: 3243712254364037809.
19 hane, wei gibi görünüyor. Ama bu para değil.
Uniswap V3 matematiğinin "sanal likiditesi" L'sidir —— sqrt-price aralığındaki market making eğrisinin eğimini ifade eden iç bir parametre. Birimi USD değildir ve havuzun gerçek varlıklarıyla kıyaslanamaz.
Tool yanıtı liquidity_note ile zaten uyarıyor:
Uniswap V3 sqrt-formula virtual liquidity at the current tick. Not a USD amount and not the depth available to swap.
Neden ikinci kısım? Çünkü bir başka yaygın hata, liquidity'i "şu anda bu havuzda kayıpsız ne kadar swap yapabilirim" diye okumaktır. Bu da yanlış. V3 swap derinliği parça parça hesaplanır: mevcut tick aralığı içinde bu L'yi sqrt-price formülüyle kullanırsın; bir swap fiyatı tick sınırının ötesine ittiğinde sonraki aralığa geçer ve oranın L'sine atlarsın. Geçilen her sınır yeni bir L getirir, işlem bitene dek. Yani "kayıpsız ne kadar swap yapılabilir" sorusunun yanıtı, yol üzerindeki her aralığa ne kadar L yatırıldığına bağlıdır —— slot0'dan tek bir sayı bunu söylemez.
Sonuç: liquidity alanını USD ile karşılaştırmayın, havuzlar arasındaki "derinlik" karşılaştırmasında kullanmayın —— yanıltıcıdır.
tvl_usd: 100,645,897.62. İşte havuzdaki gerçek para.
Bu sayı nereden çıkar? Kontratın gerçek USDC bakiyesi artı gerçek WETH bakiyesi, her biri DefiLlama'dan alınan güncel USD fiyatıyla çarpılıp toplanır.
liquidity alanına karşı:
| Alan | Değer | Anlam |
|---|---|---|
| liquidity | 3.24 × 10¹⁸ | V3 iç matematik parametresi, birimsiz |
| tvl_usd | $100,645,897 | havuzun fiilen tuttuğu para |
İkisi de gündelik dilde "likidite" diye çevrilir, ama farklı şeylerdir. Hikâye anlatırken TVL'ye bakın, matematik yaparken liquidity'e bakın, asla karıştırmayın.
Son detay: block_number: 24959248.
On-chain veri her zaman blok numarasıyla gelir. Claude'un çektiği her alan aynı blokta okunmuştur. İki anlamı vardır:
İzleme veya arbitraj mantığı için en kritik özellik budur —— bir kerelik bir okuma size dünyanın tutarlı bir görünümünü sunar, alanlar arasında zaman kaymasından endişelenmenize gerek kalmaz.
Bunları anlayınca alet kutusu açılır:
Bunların hepsi eskiden web3.py kurmayı, script yazmayı, ABI tutmayı, RPC kiralamayı gerektirirdi. Şimdi her şey Claude + MCP ile sohbet düzeyinde —— sorarsınız, o okur.
V3'ün matematik modeli giriş engeli olan bir duvar. sqrtPriceX96, tick'ler, L, konsantre likidite —— bu kavramlar pek çok kişiyi geri çevirdi. Ama pratikte ihtiyacınız olanın %90'ı "bu havuz sağlıklı mı, parası var mı, fiyatı kaç" —— formül gerekmez.
Bırakın Claude sizin V3 tercümanınız olsun, sanal likiditeyi ve tick kodlamasını "1 ETH = 2310 USDC, havuzda 100 milyon dolar var" gibi sade bir cümleye çevirsin. Kararlar oradan sonra size kalmış.