360 Secure SkillHub
360 安全技能中心

Uniswap Pool Analysis

核心功能:针对Uniswap v3/v4池,支持多链查询链上状态(含价格、流动性、tick),分析流动性分布,匹配对应费率层,计算TVL等核心指标。典型场景:用户查询Uniswap池指标、分析链上池状态时使用。输入支持chainId参数,通过viem调用ABI读取链上数据,输出量化指标与分析内容。

wpank
wpank
热度 78.70
最近更新 2026-05-11 16:09:51
分类:数据依赖:代码执行 / 第三方 API / 内部调用大模型应用场景:数据处理 / 财务 / 报告撰写

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add uniswap-pool-analysis
Metadata
name
uniswap-pool-analysis
description
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.

Uniswap Pool Analysis

Overview

This skill covers querying and analyzing Uniswap v3/v4 pool state on-chain using viem.

Key Concepts

  • 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 Tiers (v3)

Fee (bps) Tick Spacing Typical Use
1 (0.01%) 1 Stablecoin pairs
5 (0.05%) 10 Correlated pairs
30 (0.30%) 60 Standard pairs
100 (1.00%) 200 Exotic pairs

Querying Pool State

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",
});

Price Conversion

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;
}

Liquidity Distribution

To analyze liquidity distribution across ticks:

  1. Query tickBitmap to find initialized ticks
  2. For each initialized tick, read ticks(tickIndex) to get liquidityNet
  3. Walk from MIN_TICK to MAX_TICK, accumulating net liquidity changes
  4. Plot cumulative liquidity vs price for the distribution

Multi-chain Support

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)