Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Analyze Uniswap pool data including liquidity distribution, fee tiers, tick ranges, and TVL. Use when the user asks about pool metrics, liquidity analysis, or wants to query on-chain pool state.
Analyze Uniswap pool data including liquidity distribution, fee tiers, tick ranges, and TVL. Use when the user asks about pool metrics, liquidity analysis, or wants to query on-chain pool state.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run.
This skill covers querying and analyzing Uniswap v3/v4 pool state on-chain using viem.
sqrtPriceX96: Encoded price format used by Uniswap v3/v4. Convert with price = (sqrtPriceX96 / 2^96)^2 Ticks: Discrete price points defining liquidity ranges. Tick spacing depends on fee tier. Liquidity: The L value representing active liquidity at the current tick.
Fee (bps)Tick SpacingTypical Use1 (0.01%)1Stablecoin pairs5 (0.05%)10Correlated pairs30 (0.30%)60Standard pairs100 (1.00%)200Exotic pairs
Use the Uniswap v3 Pool ABI to read on-chain state: import { createPublicClient, http } from "viem"; import { mainnet } from "viem/chains"; const client = createPublicClient({ chain: mainnet, transport: http(process.env.ETHEREUM_RPC_URL), }); // Read slot0 for current price and tick const [ sqrtPriceX96, tick, observationIndex, observationCardinality, observationCardinalityNext, feeProtocol, unlocked, ] = await client.readContract({ address: poolAddress, abi: poolAbi, functionName: "slot0", }); // Read liquidity const liquidity = await client.readContract({ address: poolAddress, abi: poolAbi, functionName: "liquidity", });
function sqrtPriceX96ToPrice( sqrtPriceX96: bigint, decimals0: number, decimals1: number, ): number { const price = Number(sqrtPriceX96) / 2 ** 96; return (price * price * 10 ** decimals0) / 10 ** decimals1; } function tickToPrice( tick: number, decimals0: number, decimals1: number, ): number { return (1.0001 ** tick * 10 ** decimals0) / 10 ** decimals1; }
To analyze liquidity distribution across ticks: Query tickBitmap to find initialized ticks For each initialized tick, read ticks(tickIndex) to get liquidityNet Walk from MIN_TICK to MAX_TICK, accumulating net liquidity changes Plot cumulative liquidity vs price for the distribution
Always accept a chainId parameter. Use the shared chain config from packages/common/ to resolve: RPC URL Pool factory address Quoter address Subgraph endpoint (if available)
Data access, storage, extraction, analysis, reporting, and insight generation.
Largest current source with strong distribution and engagement signals.