Il campo liquidity di una pool Uniswap V3 non è né denaro né profondità di swap. Lascia che Claude ti spieghi ogni campo facile da fraintendere.
Chi tocca DeFi prima o poi finisce a guardare i dati di una pool Uniswap V3. E in quella griglia di numeri sulla pagina della pool, c'è almeno un campo che quasi tutti leggono male la prima volta —— una lettura sbagliata abbastanza grande da farti credere che una pool da 100 milioni di dollari abbia 3,2 trilioni di "liquidità" dentro.
Questo articolo legge una pool dall'inizio alla fine in cinque minuti, usando smarts MCP più Claude. Dati veri, la pool USDC/WETH 0.05% sulla mainnet.
Una volta connesso smarts MCP, Claude chiama get_uniswap_v3_pool con lo slug univ3-usdc-weth-eth e si ritrova questo:
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
I dati in sé sono semplici. Il punto è che ogni campo ha la sua trappola. Andiamo uno per uno.
Si presume che in una pool USDC/WETH USDC sia la "valuta principale" e WETH "l'asset prezzato". Sbagliato. Uniswap V3 ordina token0 e token1 strettamente per il valore numerico dei loro indirizzi. L'indirizzo USDC 0xa0b8... è inferiore a quello WETH 0xc02a..., quindi token0 = USDC, token1 = WETH.
Quest'ordine governa ogni calcolo interno: in che direzione punta il prezzo, in che direzione si muovono i tick, in che unità è espressa la liquidità. Cambia pool, ad esempio WETH/DAI, e i ruoli di token0/token1 possono ribaltarsi —— ogni intuizione su "ETH sale o scende" va ricalcolata.
Uno dei vantaggi di lasciare leggere la pool a Claude: ti restituisce il prezzo etichettato in entrambe le direzioni, così non devi capire a mente "che lato del tick è quale token".
I quattro fee tier comuni in Uniswap V3 sono 0.01% / 0.05% / 0.30% / 1.00%.
Che USDC/WETH usi 0.05% invece di 0.30% dice: i market maker scommettono sul volume, non su fee grasse per trade, perché la volatilità è limitata e il flusso enorme.
Sapendo questo, vedendo una nuova pool al 1% di fee puoi indovinare: o è un token appena uscito o nessuno tiene a quella coppia.
Lo stato della pool V3 non ha un campo separato "ultimo prezzo eseguito". Il prezzo corrente è quello che dice slot0.sqrtPriceX96, e il tick è la sua espressione logaritmica. In altre parole: finché nessuno fa trading, il prezzo resta lì, un modello totalmente diverso dall'"ultima esecuzione" di una CEX.
(Per i prezzi storici si usa l'oracle integrato di V3 —— lo stato della pool contiene un array di accumulatori observation che permette di derivare un TWAP. È un meccanismo a parte.)
Il 1 WETH = 2310.34 USDC che abbiamo appena letto è la "quotazione attuale" della pool; il prossimo swap parte da quel prezzo e spinge il prezzo lungo la curva fino a un nuovo tick.
tick: 198868 è il numero che la prima volta confonde tutti. Sembra un qualche tipo di prezzo, ma non sono dollari.
V3 discretizza il prezzo in modo logaritmico: raw_price = 1.0001^tick, dove raw_price è wei di token1 diviso wei di token0 —— non il prezzo di visualizzazione. Per trasformarlo in "1 ETH in USDC" bisogna ancora moltiplicare per 10^(decimals_token0 - decimals_token1). Dopo questo aggiustamento, il tick 198868 corrisponde a circa 1 ETH ≈ 2310 USDC.
Perché tutto questo giro? Perché una volta resa logaritmica la scala dei prezzi, i market maker possono mettere liquidità solo in un determinato range di prezzo —— ad esempio "solo tra 2200 e 2400". I tick discreti sono le etichette di quei range. È l'innovazione caratteristica di V3 rispetto a V2: liquidità concentrata.
In pratica non hai bisogno di calcolare i tick. Devi solo sapere: un tick più grande non significa necessariamente prezzo più alto (dipende da chi è il token0), e un passo di tick è una variazione di prezzo dello 0.01%.
Ecco la grossa trappola: liquidity: 3243712254364037809.
19 cifre, sembra wei. Ma non sono soldi.
È la "liquidità virtuale" L della matematica di Uniswap V3 —— un parametro interno che esprime la pendenza della curva di market making in un range sqrt-price. Le sue unità non sono USD e non è confrontabile con i possedimenti reali della pool.
La risposta dello strumento avvisa esplicitamente con un liquidity_note:
Uniswap V3 sqrt-formula virtual liquidity at the current tick. Not a USD amount and not the depth available to swap.
Perché la seconda parte? Perché un altro errore comune è leggere liquidity come "quanto posso swappare adesso senza slippage". Anche sbagliato. La profondità di swap V3 si calcola a tratti: dentro il range di tick corrente usi questo L con la formula sqrt-price; non appena uno swap spinge il prezzo oltre un confine di tick, passi al range successivo e cambi al suo L. Ogni confine attraversato cambia un L nuovo, finché il trade è chiuso. Quindi "quanto si può swappare senza slippage" dipende da quanto L è posizionato in ogni range lungo il percorso —— un singolo numero da slot0 non te lo dice.
Da ricordare: non confrontare il campo liquidity con USD, e non usarlo per confrontare la "profondità" tra pool —— è fuorviante.
tvl_usd: 100,645,897.62. Questi sì che sono i soldi reali della pool.
Da dove esce il numero? È il saldo USDC effettivo del contratto più il saldo WETH effettivo, ciascuno moltiplicato per il prezzo USD corrente preso da DefiLlama, sommati.
Confrontato con il campo liquidity:
| Campo | Valore | Significato |
|---|---|---|
| liquidity | 3.24 × 10¹⁸ | parametro interno matematica V3, senza unità |
| tvl_usd | $100,645,897 | denaro reale tenuto dalla pool |
Entrambi vengono tradotti come "liquidità" nel parlato, ma sono cose diverse. Per raccontare la storia guarda il TVL, per fare matematica guarda liquidity, mai mescolare.
Ultimo dettaglio: block_number: 24959248.
I dati on-chain arrivano sempre con un numero di blocco. Ogni campo che Claude ha tirato è stato letto allo stesso blocco. Significa due cose:
Per la logica di monitoraggio o arbitraggio è la proprietà decisiva —— un'unica lettura ti dà una visione coerente del mondo, senza dover temere disallineamenti temporali tra campi.
Capito tutto questo, la cassetta degli attrezzi si apre:
Tutto questo prima richiedeva installare web3.py, scrivere uno script, mantenere un ABI e affittare RPC. Ora è tutto a livello conversazionale con Claude + MCP —— tu chiedi, lui legge.
Il modello matematico di V3 ha un suo muro. sqrtPriceX96, tick, L, liquidità concentrata —— questi concetti hanno respinto parecchia gente. Ma in pratica il 90% di ciò che ti serve è "questa pool è in salute, ha soldi, qual è il prezzo?" —— senza formule.
Lascia che Claude faccia da tuo traduttore V3, trasformando liquidità virtuale e codifica dei tick in un semplice "1 ETH = 2310 USDC, la pool ha 100M$ dentro". Le decisioni, da lì in poi, sono tue.