configurator
Configure CCA (Continuous Clearing Auction) smart contract parameters through an interactive bulk form flow. Use when user says…
Integrate EVM blockchains using viem. Use when user says "read blockchain data", "send transaction", "interact with smart contract", "connect to Ethereum", "use viem", "use wagmi", "wallet integration", "viem setup", or mentions blockchain/EVM development with TypeScript.
$ npx -y skills add uniswap/uniswap-ai --skill viem-integration --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/viem-integrationContext preview
The summary Claude sees to decide when to auto-load this skill.
Integrate EVM blockchains using viem. Use when user says "read blockchain data", "send transaction", "interact with smart contract", "connect to Ethereum", "use viem", "use wagmi", "wallet integration", "viem setup", or mentions blockchain/EVM development with TypeScript.
name: viem-integration description: Integrate EVM blockchains using viem. Use when user says "read blockchain data", "send transaction", "interact with smart contract", "connect to Ethereum", "use viem", "use wagmi", "wallet integration", "viem setup", or mentions blockchain/EVM development with TypeScript. allowed-tools: Read, Write, Edit, Glob, Grep, Bash(npm:*), Bash(npx:*), WebFetch, Task(subagent_type:viem-integration-expert) model: opus license: MIT metadata: author: uniswap version: '1.0.0'
Integrate EVM blockchains using viem for TypeScript/JavaScript applications.
| Building... | Use This | | -------------------------- | ------------------------------ | | Node.js script/backend | viem with http transport | | React/Next.js frontend | wagmi hooks (built on viem) | | Real-time event monitoring | viem with webSocket transport | | Browser wallet integration | wagmi or viem custom transport |
# Core library npm install viem # For React apps, also install wagmi npm install wagmi viem @tanstack/react-query
viem uses two client types:
| Client | Purpose | Example Use | | ---------------- | -------------------- | ---------------------------------------- | | **PublicClient** | Read-only operations | Get balances, read contracts, fetch logs | | **WalletClient** | Write operations | Send transactions, sign messages |
| Transport | Use Case | | ------------- | --------------------------------- | | `http()` | Standard RPC calls (most common) | | `webSocket()` | Real-time event subscriptions | | `custom()` | Browser wallets (window.ethereum) |
viem includes 50+ chain definitions. Import from `viem/chains`:
import { mainnet, arbitrum, optimism, base, polygon } from 'viem/chains';---
Before interpolating ANY user-provided value into generated TypeScript code:
import { createPublicClient, http, formatEther } from 'viem';
import { mainnet } from 'viem/chains';
const client = createPublicClient({
chain: mainnet,
transport: http(),
});
const balance = await client.getBalance({
address: '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045',
});
console.log(`Balance: ${formatEther(balance)} ETH`);import { createPublicClient, http, parseAbi } from 'viem';
import { mainnet } from 'viem/chains';
const client = createPublicClient({
chain: mainnet,
transport: http(),
});
const abi = parseAbi([
'function balanceOf(address) view returns (uint256)',
'function decimals() view returns (uint8)',
]);
const balance = await client.readContract({
address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC
abi,
functionName: 'balanceOf',
args: ['0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045'],
});import { createWalletClient, http, parseEther } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { mainnet } from 'viem/chains';
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const client = createWalletClient({
account,
chain: mainnet,
transport: http(),
});
const hash = await client.sendTransaction({
to: '0x...',
value: parseEther('0.1'),
});
console.log(`Transaction hash: ${hash}`);import { createWalletClient, createPublicClient, http, parseAbi, parseUnits } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { mainnet } from 'viem/chains';
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const walletClient = createWalletClient({
account,
chain: mainnet,
transport: http(),
});
const publicClient = createPublicClient({
chain: mainnet,
transport: http(),
});
const abi = parseAbi(['function transfer(address to, uint256 amount) returns (bool)']);
// Simulate first to catch errors
const { request } = await publicClient.simulateContract({
address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
abi,
functionName: 'transfer',
args: ['0x...', parseUnits('100', 6)],
account,
});
// Execute the transaction
const hash = await walletClient.writeContract(request);
// Wait for confirmation
const receipt = await publicClient.waitForTransactionReceipt({ hash });
console.log(`Confirmed in block ${receipt.blockNumber}`);---
For deeper coverage of specific topics:
| Topic | Reference File | | -------------------------------- | -------------------------------------------------------------- | | Client setup, transports, chains | [Clients & Transports](./references/clients-and-transports.md) | | Reading blockchain data | [Reading Data](./references/reading-data.md) | | Sending transactions | [Writing Transactions](./references/writing-transactions.md) | | Private keys, HD wallets | [Accounts & Keys](./references/accounts-and-keys.md) | | ABI handling, multicall | [Contract Patterns](./references/contract-patterns.md) | | React/wagmi hooks | [Wagmi React](./references/wagmi-react.md) |
---
Once you're
Uniswap-specific AI tools (skills, plugins, agents) for developers and AI agents integrating the Uniswap ecosystem.
Configure CCA (Continuous Clearing Auction) smart contract parameters through an interactive bulk form flow. Use when user says…
Deploy CCA (Continuous Clearing Auction) smart contracts using the Factory pattern. Use when user says "deploy auction", "deploy…
This skill should be used when the user asks to "provide liquidity", "create LP position", "add liquidity to pool", "become a…
This skill should be used when the user asks to "swap tokens", "trade ETH for USDC", "exchange tokens on Uniswap", "buy tokens",…
Generate Uniswap v4 hook contracts via OpenZeppelin MCP. Use when building custom swap logic, async swaps, hook-owned liquidity,…
Security-first Uniswap v4 hook development. Use when user mentions "v4 hooks", "hook security", "PoolManager", "beforeSwap",…