Swap tokens and read pool state on Uniswap V4 (Base, Ethereum). Use when the agent needs to: (1) swap ERC20 tokens or ETH via Uniswap V4, (2) get pool info (price, tick, liquidity, fees), (3) find the best pool for a token pair, (4) quote expected swap output via the on-chain V4Quoter, (5) set up Permit2 approvals for the Universal Router, or (6) execute exact-input swaps with proper slippage protection. Supports Base and Ethereum mainnet, plus Base Sepolia testnet. TypeScript with strict types. Write operations need a private key via env var.
数据来源:ClawHub。 在 ClawSkills 查看
选择你使用的 Agent
方法一:命令行安装(推荐)
推荐(无需提前安装 clawhub)
npx clawhub@latest --dir ~/.claude/skills install uniswap-v4或使用 clawhub CLI(需提前安装)
clawhub --dir ~/.claude/skills install uniswap-v4⚠️ 需要 Node.js 18+,没有 Node?请使用下方方法二直接下载 ZIP。 安装 Node.js →
方法二:手动下载安装(无需 Node)
下载 ZIP,解压后将文件夹放到以下路径,重启 Agent 即可:
安装路径
~/.claude/skills/uniswap-v4/💡解压后将文件夹放到上方路径,重启 Agent 即可生效
--- name: uniswap-v4 description: > Swap tokens and read pool state on Uniswap V4 (Base, Ethereum). Use when the agent needs to: (1) swap ERC20 tokens or ETH via Uniswap V4, (2) get pool info (price, tick, liquidity, fees), (3) find the best pool for a token pair, (4) quote expected swap output via the on-chain V4Quoter, (5) set up Permit2 approvals for the Universal Router, or (6) execute exact-input swaps with proper slippage protection. Supports Base and Ethereum mainnet, plus Base Sepolia testnet. TypeScript with strict types. Write operations need a private key via env var. ---
Swap tokens and read pool state on Uniswap V4 via the Universal Router.
Chains: Base (8453), Ethereum (1), Base Sepolia (84532)
| Contract | Base | Ethereum | |------------------|----------------------------------------------|----------------------------------------------| | PoolManager | 0x498581fF718922c3f8e6A244956aF099B2652b2b | 0x000000000004444c5dc75cB358380D2e3dE08A90 | | UniversalRouter | 0x6ff5693b99212da76ad316178a184ab56d299b43 | 0x66a9893cC07D91D95644AEDD05D03f95e1dBA8Af | | Permit2 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 | 0x000000000022D473030F116dDEE9F6B43aC78BA3 | | StateView | 0xa3c0c9b65bad0b08107aa264b0f3db444b867a71 | 0x7ffe42c4a5deea5b0fec41c94c136cf115597227 | | V4Quoter | 0x0d5e0f971ed27fbff6c2837bf31316121532048d | 0x52f0e24d1c21c8a0cb1e5a5dd6198556bd9e1203 |
> Addresses from docs.uniswap.org/contracts/v4/deployments, verified 2026-02-08.
src/pool-info.ts (free, no gas, no key)src/quote.ts (free, uses on-chain V4Quoter)src/approve.ts (write, ~100K gas, needs PRIVATE_KEY)src/swap.ts (write, ~300-350K gas, needs PRIVATE_KEY)--auto-approve on swapAll scripts in src/. Run with npx tsx. Pass --help for usage.
Returns pool ID, sqrtPriceX96, tick, liquidity, fees, token symbols/decimals. Auto-detects the best pool by liquidity (or specify --fee/--tick-spacing).
npx tsx src/pool-info.ts --token0 ETH --token1 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 --chain base --rpc $BASE_RPC_URL
Env: BASE_RPC_URL or ETH_RPC_URL (or pass --rpc)
Quotes exact input amounts via the on-chain V4Quoter contract (simulation, no tx). Returns expected output amount and gas estimate.
npx tsx src/quote.ts \
--token-in ETH \
--token-out 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
--amount 10000000000000000 \
--chain base \
--rpc $BASE_RPC_URL
Env: BASE_RPC_URL or ETH_RPC_URL
Two-step Permit2 flow: ERC20 → Permit2, then Permit2 → Universal Router. Skips if already approved. Only needed for ERC20 tokens (not ETH).
PRIVATE_KEY=0x... npx tsx src/approve.ts \
--token 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
--chain base \
--rpc $BASE_RPC_URL \
--json
Env: PRIVATE_KEY (required), BASE_RPC_URL
Exact-input swap via Universal Router. Quotes expected output first, applies slippage, then sends the transaction.
PRIVATE_KEY=0x... npx tsx src/swap.ts \
--token-in ETH \
--token-out 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
--amount 10000000000000000 \
--slippage 50 \
--chain base \
--rpc $BASE_RPC_URL \
--json
With auto-approval (sets up Permit2 if needed):
PRIVATE_KEY=0x... npx tsx src/swap.ts \
--token-in 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \
--token-out ETH \
--amount 25000000 \
--slippage 100 \
--auto-approve \
--chain base \
--rpc $BASE_RPC_URL
Options: --slippage (default 50 = 0.5%), --recipient , --auto-approve, --json Env: PRIVATE_KEY (required), BASE_RPC_URL
ETH or eth → native ETH (address(0) in V4)0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, WETH 0x4200000000000000000000000000000000000006| Variable | Used By | Required | Description | |-----------------------|----------------|----------|---------------------------------| | PRIVATE_KEY | approve, swap | Yes* | Wallet private key (never CLI!) | | BASE_RPC_URL | all (Base) | No | Base mainnet RPC URL | | ETH_RPC_URL | all (Ethereum) | No | Ethereum mainnet RPC URL | | BASE_SEPOLIA_RPC_URL| all (testnet) | No | Base Sepolia RPC URL |
\* Only required for write operations. Read operations (pool-info, quote) don't need a key.
keccak256(abi.encode(currency0, currency1, fee, tickSpacing, hooks))currency0 < currency1 by numeric value. ETH = address(0)references/v4-encoding.md for full encoding reference| Error | Cause | Fix | |------------------------------|--------------------------------------------|------------------------------------| | No V4 pool found | Pair not listed on V4 for this chain | Check token addresses | | Quote failed | Pool exists but can't simulate swap | Check amount, pool may lack liq | | PRIVATE_KEY required | Missing env var for write operation | export PRIVATE_KEY=0x... | | No RPC URL | Missing RPC config | Pass --rpc or set env var | | Tx reverts | Insufficient balance, expired, slippage | Check balance, increase slippage | | uint128 max | Amount too large for V4 | Use smaller amount |
PRIVATE_KEY must be provided via an environment variable or secret manager only.PRIVATE_KEY in chat.PRIVATE_KEY (or .env files) to git.PRIVATE_KEY value is never printed.PRIVATE_KEY env var onlyeval(), no exec(), no shell commands — pure TypeScriptnpm run test:unit # Unit tests (no network)
npm run test:fork # Fork tests (needs: anvil --fork-url https://mainnet.base.org)
npm run test:testnet # Testnet reads (Base Sepolia)
npm run test:mainnet # Mainnet smoke tests (read-only)
npm run security # Security scan
references/v4-encoding.mdreferences/addresses.mdreferences/v4-architecture.md安装 Uniswap V4 后,可以对 AI 说这些话来触发它
Help me get started with Uniswap V4
Explains what Uniswap V4 does, walks through the setup, and runs a quick demo based on your current project
Use Uniswap V4 to swap tokens and read pool state on Uniswap V4 (Base, Ethereum)
Invokes Uniswap V4 with the right parameters and returns the result directly in the conversation
What can I do with Uniswap V4 in my documents & notes workflow?
Lists the top use cases for Uniswap V4, with example commands for each scenario
将技能文件夹放到 ~/.claude/skills/uniswap-v4/ 目录(个人级,所有项目可用),或 .claude/skills/uniswap-v4/(项目级)。重启 AI 客户端后,用 /uniswap-v4 主动调用,或让 AI 根据上下文自动发现并使用。
Uniswap V4 支持 Claude、Cursor、OpenClaw,可与这些 AI 平台无缝集成,扩展其能力。
Uniswap V4 可免费安装使用。请查阅仓库了解许可证信息。
Swap tokens and read pool state on Uniswap V4 (Base, Ethereum). Use when the agent needs to: (1) swap ERC20 tokens or ETH via Uniswap V4, (2) get pool info (price, tick, liquidity, fees), (3) find the best pool for a token pair, (4) quote expected swap output via the on-chain V4Quoter, (5) set up Permit2 approvals for the Universal Router, or (6) execute exact-input swaps with proper slippage protection. Supports Base and Ethereum mainnet, plus Base Sepolia testnet. TypeScript with strict types. Write operations need a private key via env var.
Automate my documents & notes tasks using Uniswap V4
Identifies repetitive steps in your workflow and sets up Uniswap V4 to handle them automatically
Uniswap V4 属于「Documents & Notes」分类,该分类的技能帮助 AI 智能体在此领域执行专业任务。