Machine Readiness
Stored receipt and evidence
30
100
0
0
0
Samples
No stored offer samples.
Samples
No stored action samples.
Samples
No stored product samples.
Document
User-Agent: * Allow: / Allow: /api/og/* Allow: /sitemap.xml Allow: /sitemap/*.xml Disallow: /admin/ Disallow: /api/ Disallow: /clanker/*/admin Disallow: /clanker/testnet/ Disallow: /creator/export-private-key Disallow: /profile Sitemap: https://www.clanker.world/sitemap.xml
Document
# Clanker
> Clanker deploys ERC-20 tokens with automatic Uniswap V4 liquidity pools on multiple EVM chains. Browse, deploy, and manage tokens at clanker.world.
## Documentation
- [Clanker SDK Skill](https://www.clanker.world/api/docs/clanker-sdk): Complete guide for AI agents to deploy tokens, configure liquidity pools, claim rewards, set up airdrops, presales, vaults, and interact with Clanker contracts using the `clanker-sdk` npm package.
- [Full Documentation](https://www.clanker.world/llms-full.txt): Complete unabridged documentation for LLM consumption.
## Key Capabilities
- Deploy ERC-20 tokens with Uniswap V4 liquidity on Base, Arbitrum, Ethereum, BSC, Unichain, Monad, Abstract
- Configure pool parameters, fee structures (static/dynamic), sniper protection
- Set up token vesting vaults, airdrops via Merkle trees, and presales
- Dev buy in same deployment transaction
- Claim LP fee rewards and manage reward recipients
- Update token metadata and images post-deployment
## Quick Integration
```bash
npm install clanker-sdk viem
```
```typescript
import { Clanker } from 'clanker-sdk/v4';
```
See the full SDK skill at /api/docs/clanker-sdk for complete usage instructions.
Document
# Using the Clanker SDK
## Overview
Clanker SDK (`clanker-sdk`) deploys ERC-20 tokens with automatic Uniswap V4 liquidity pools on multiple EVM chains. It handles token creation, pool setup, fee hooks, vesting vaults, airdrops, presales, and reward distribution in a single transaction.
## Installation
```bash
npm install clanker-sdk viem
```
## Supported Chains
| Chain | ID | Import | Notes |
|-------|-----|--------|-------|
| Base | 8453 | `base` | Primary chain |
| Base Sepolia | 84532 | `baseSepolia` | Testnet |
| Arbitrum | 42161 | `arbitrum` | |
| Ethereum Mainnet | 1 | `mainnet` | |
| BSC | 56 | `bsc` | Uses WBNB, not WETH |
| Unichain | 130 | `unichain` | |
| Monad | custom | `monad` from `clanker-sdk` | Static fees only |
| Abstract | 11124 | `abstract` | |
Import chains from `viem/chains` except Monad (import from `clanker-sdk`).
## Quick Start
```typescript
import { Clanker } from 'clanker-sdk/v4';
import { createPublicClient, createWalletClient, http, type PublicClient } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { base } from 'viem/chains';
const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);
const publicClient = createPublicClient({ chain: base, transport: http() }) as PublicClient;
const wallet = createWalletClient({ account, chain: base, transport: http() });
const clanker = new Clanker({ wallet, publicClient });
const { txHash, waitForTransaction, error } = await clanker.deploy({
name: 'My Token',
symbol: 'TKN',
image: 'ipfs://...',
tokenAdmin: account.address,
chainId: base.id,
vanity: true,
});
if (error) throw error;
const { address } = await waitForTransaction();
```
## Imports
```typescript
// V4 SDK (primary)
import { Clanker } from 'clanker-sdk/v4';
// Constants and helpers
import { FEE_CONFIGS, POOL_POSITIONS, WETH_ADDRESSES } from 'clanker-sdk';
// Extensions
import { createAirdrop, fetchAirdropProofs, registerAirdrop, getClaimAirdropTransaction } from 'clanker-sdk/v4/extensions';
import { startPresale, buyIntoPresale, endPresale, claimTokens } from 'clanker-sdk/v4/extensions';
// Types
import type { ClankerTokenV4 } from 'clanker-sdk';
```
## Token Configuration Reference
### Required Fields
| Field | Type | Description |
|-------|------|-------------|
| `name` | `string` | Token name |
| `symbol` | `string` | Token symbol |
| `tokenAdmin` | `0x${string}` | Admin address (cannot be zero address) |
### Optional Fields with Defaults
| Field | Default | Description |
|-------|---------|-------------|
| `chainId` | `8453` (Base) | Target chain ID |
| `image` | `''` | Token image URL (IPFS or HTTP) |
| `vanity` | `false` | Generate `0x...b07` suffix address |
| `salt` | auto | Custom CREATE2 salt (overrides vanity) |
### Pool Configuration
Defaults to WETH pair with Standard positions if omitted.
```typescript
pool: {
pairedToken: 'WETH', // or a specific token address
tickIfToken0IsClanker: -230400, // starting tick
tickSpacing: 200,
positions: POOL_POSITIONS.Standard,
}
```
Pool position presets (POOL_POSITIONS):
- Standard — single full-range position (simplest)
- Project — 5 positions for better liquidity distribution
- TwentyETH — starts at ~20 ETH market cap
For custom paired tokens (not WETH), pass the token address directly:
```typescript
import { WBNB_ADDRESS, BSC_USDT_ADDRESS } from 'clanker-sdk';
pool: { pairedToken: BSC_USDT_ADDRESS }
```
### Fee Configuration
Use presets from FEE_CONFIGS:
```typescript
fees: FEE_CONFIGS.StaticBasic // 1% flat fee on both tokens
fees: FEE_CONFIGS.DynamicBasic // 1-5% volatility-based
fees: FEE_CONFIGS.Dynamic3 // 1-3% volatility-based
```
Or define custom fees:
```typescript
// Static
fees: { type: 'static', clankerFee: 100, pairedFee: 100 }
// Dynamic
fees: {
type: 'dynamic',
baseFee: 100,
maxFee: 500,
referenceTickFilterPeriod: 30,
resetPeriod: 120,
resetTickFilter: 200,
feeControlNumerator: 500000000,
decayFilterBps: 7500,
}
```
Monad only supports static fees.
### Sniper Fees (MEV Protection)
Default enabled on v4.1+ chains. Units are "uniBps" (bps * 100).
```typescript
sniperFees: {
startingFee: 666_777, // 66.6777%
endingFee: 41_673, // 4.1673%
secondsToDecay: 15,
}
```
### Vault (Token Vesting)
Lock a percentage of supply with optional linear vesting.
```typescript
vault: {
percentage: 10, // 0-90% of supply
lockupDuration: 2592000, // minimum 7 days (in seconds)
vestingDuration: 2592000, // linear vesting after lockup
recipient: account.address, // defaults to tokenAdmin
}
```
### Dev Buy
Buy tokens in the same deployment transaction.
```typescript
devBuy: {
ethAmount: 0.01, // ETH to spend
recipient: account.address, // defaults to tokenAdmin
}
```
### Rewards
Split LP fee rewards among recipients. Must sum to 10000 bps (100%).
```typescript
rewards: {
recipients: [
{ admin: addr1, recipient: addr1, bps: 5000, token: 'Both' },
{ admin: addr2, recipient: addr2, bps: 5000, token: 'Paired' },
],
}
```
Token options: 'Both', 'Paired', 'Clanker'.
If rewards is omitted, 100% goes to tokenAdmin.
### Airdrop
Distribute tokens via Merkle tree with lockup.
```typescript
import { createAirdrop } from 'clanker-sdk/v4/extensions';
const { tree, airdrop } = createAirdrop([
{ account: '0x...', amount: 200_000_000 },
{ account: '0x...', amount: 50_000_000 },
]);
// In deploy config:
airdrop: {
...airdrop,
lockupDuration: 86_400, // minimum 1 day (in seconds)
vestingDuration: 86_400,
}
```
After deploy, register with registerAirdrop(tokenAddress, tree) so users can claim via the Clanker service.
### Presale
```typescript
presale: { bps: 2000 } // 20% of supply allocated to presale
```
Deploy via presale extension functions: startPresale, buyIntoPresale, endPresale, claimTokens.
### Context (Social Provenance)
```typescript
context: {
interface: 'My App',
platform: 'farcaster',
messageId: '0x...',
id: '12345',
}
```
## Post-Deployment Operations
### Claim Rewards
```typescript
const { txHash, error } = await clanker.claimRewards({
token: '0x...',
rewardRecipient: '0x...',
});
```
### Check Available Rewards
```typescript
const rewards = await clanker.availableRewards({
token: '0x...',
rewardRecipient: '0x...',
});
```
### Claim Vaulted Tokens
```typescript
const { txHash, error } = await clanker.claimVaultedTokens({ token: '0x...' });
```
### Update Token Image
```typescript
await clanker.updateImage({ token: '0x...', newImage: 'ipfs://...' });
```
### Update Token Metadata
```typescript
await clanker.updateMetadata({
token: '0x...',
metadata: { description: 'Updated description' },
});
```
### Update Reward Recipient / Admin
```typescript
await clanker.updateRewardRecipient({ token: '0x...', rewardIndex: 0, newRecipient: '0x...' });
await clanker.updateRewardAdmin({ token: '0x...', rewardIndex: 0, newAdmin: '0x...' });
```
## Error Handling Pattern
All SDK methods return { txHash?, error?, waitForTransaction? }. Always check error:
```typescript
const { txHash, waitForTransaction, error } = await clanker.deploy(config);
if (error) {
console.error(error.message);
throw error;
}
const { address, error: txError } = await waitForTransaction();
if (txError) throw txError;
```
## Environment Variables
| Variable | Required | Description |
|----------|----------|-------------|
| `PRIVATE_KEY` | Yes | Wallet private key (0x-prefixed) |
| `RPC_URL` | No | Custom RPC endpoint |
## Additional Resources
- For full examples, see the examples/v4/ directory in the clanker-sdk repo
- For presale lifecycle, see examples/v4/presale/
- For V3 (legacy), import from clanker-sdk/v3