关于 clanker
clanker 是用于部署 ERC20 代币及 Uniswap V4 流动性池的 TypeScript SDK,面向代币发行者。它支持配置归属计划、空投和费用奖励,并可在多条链上执行部署后的操作。
主要功能
- 01自定义 ERC20 代币部署
- 02配置 Uniswap V4 池
- 03代币归属与空投
- 04交易费用奖励设置
- 05部署后领取与元数据更新
适用场景
- 01发行并配置流动性池的代币
- 02向多个地址分发代币
- 03按归属计划锁定代币
- 04领取锁定代币或交易奖励
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ bankrbot/ skills --skill clanker安装后在 Claude Code 中输入/clanker确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
catalog.jsonreferences/airdrops.mddeployment.mdpool-config.mdrewards.mdtroubleshooting.mdvesting.md详细介绍
Clanker SDK
使用官方 Clanker TypeScript SDK 部署生产就绪的 ERC20 代币,并内置流动性池。
概述
Clanker 是一种代币部署协议,可通过单笔交易创建带有 Uniswap V4 流动性池的 ERC20 代币。该 SDK 提供 TypeScript 接口,可部署具有归属期、空投和可自定义奖励分配等高级功能的代币。
快速开始
安装
npm install clanker-sdk viem
# or
yarn add clanker-sdk viem
# or
pnpm add clanker-sdk viem
环境设置
创建包含私钥的 .env 文件:
PRIVATE_KEY=0x...your_private_key_here
基本代币部署
import { Clanker } from 'clanker-sdk';
import { createPublicClient, createWalletClient, http, type PublicClient } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { base } from 'viem/chains';
const PRIVATE_KEY = process.env.PRIVATE_KEY as `0x${string}`;
const account = privateKeyToAccount(PRIVATE_KEY);
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://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi',
tokenAdmin: account.address,
metadata: {
description: 'My awesome token',
},
context: {
interface: 'Clanker SDK',
},
vanity: true,
});
if (error) throw error;
const { address: tokenAddress } = await waitForTransaction();
console.log('Token deployed at:', tokenAddress);
核心功能
1. 代币部署
部署可全面自定义的代币,包括元数据、社交链接和池配置。
基本部署:
- 代币名称、符号和图片(IPFS)
- 描述和社交媒体链接
- 个性化地址生成
- 自定义池配置
2. 金库(代币归属)
锁定一定比例的代币,并设置锁定期和归属期:
vault: {
percentage: 10, // 10% of token supply
lockupDuration: 2592000, // 30 days cliff (in seconds)
vestingDuration: 2592000, // 30 days linear vesting
recipient: account.address,
}
3. 空投
使用 Merkle 树证明向多个地址分发代币:
import { createAirdrop, registerAirdrop } from 'clanker-sdk/v4/extensions';
const { tree, airdrop } = createAirdrop([
{ account: '0x...', amount: 200_000_000 },
{ account: '0x...', amount: 50_000_000 },
]);
// Include in deployment
airdrop: {
...airdrop,
lockupDuration: 86_400, // 1 day
vestingDuration: 86_400, // 1 day
}
4. 奖励配置
配置交易手续费分配:
rewards: {
recipients: [
{
recipient: account.address,
admin: account.address,
bps: 5000, // 50% of fees
token: 'Both', // Receive both tokens
},
{
recipient: '0x...',
admin: '0x...',
bps: 5000, // 50% of fees
token: 'Both',
},
],
}
代币类型选项
选择每位接收者从交易手续费中获得的代币:
| 代币类型 | 描述 |
|---|---|
'Clanker' | 仅接收已部署的代币 |
'Paired' | 仅接收配对代币(例如,WETH) |
'Both' | 接收两种代币 |
默认 Bankr 界面手续费
通过 Bankr 部署时,使用此默认奖励配置,界面手续费为 20%:
// Bankr interface fee recipient
const BANKR_INTERFACE_ADDRESS = '0xF60633D02690e2A15A54AB919925F3d038Df163e';
rewards: {
recipients: [
{
recipient: account.address, // Creator
admin: account.address,
bps: 8000, // 80% to creator
token: 'Paired', // Receive paired token (WETH)
},
{
recipient: BANKR_INTERFACE_ADDRESS, // Bankr interface
admin: BANKR_INTERFACE_ADDRESS,
bps: 2000, // 20% to Bankr
token: 'Paired', // Receive paired token (WETH)
},
],
}
5. 开发者买入
在部署中加入初始代币购买:
devBuy: {
ethAmount: 0.1, // Buy with 0.1 ETH
recipient: account.address,
}
6. 自定义市值
设置代币初始价格/市值:
import { getTickFromMarketCap } from 'clanker-sdk';
const customPool = getTickFromMarketCap(5); // 5 ETH market cap
pool: {
...customPool,
positions: [
{
tickLower: customPool.tickIfToken0IsClanker,
tickUpper: -120000,
positionBps: 10_000,
},
],
}
7. 狙击手防护
配置手续费衰减,以防范狙击手:
sniperFees: {
startingFee: 666_777, // 66.6777% starting fee
endingFee: 41_673, // 4.1673% ending fee
secondsToDecay: 15, // 15 seconds decay
}
合约限制与常量
| 参数 | 值 | 备注 |
|---|---|---|
| 代币供应量 | 1000 亿 | 固定为 100,000,000,000,精度为 18 位小数 |
| 最大扩展比例(BPS) | 9000(90%) | 扩展最多可获得的代币数量;流动性池至少获得 10% |
| 最大扩展数量 | 10 | 单次部署的扩展数量上限 |
| 金库最短锁定期 | 7 天 | 归属的最短锁定时长 |
| 空投最短锁定期 | 1 天 | 空投的最短锁定时长 |
| 最大流动性池手续费 | 10% | 普通交易手续费上限 |
| 最大狙击手续费 | 80% | MEV/狙击手防护手续费上限 |
| 狙击手续费衰减 | 最长 2 分钟 | 狙击手续费衰减的最长时间 |
| 最大奖励接收者数量 | 7 | 手续费分配接收者数量上限 |
| 最大流动性仓位数量 | 7 | 流动性仓位数量上限 |
支持的链
| 链 | 链 ID | 原生代币 | 状态 |
|---|---|---|---|
| Base | 8453 | ETH | ✅ 完全支持 |
| Ethereum | 1 | ETH | ✅ 完全支持 |
| Arbitrum | 42161 | ETH | ✅ 完全支持 |
| Unichain | - | ETH | ✅ 完全支持 |
| Monad | - | MON | ✅ 仅支持静态手续费 |
部署后操作
领取已归属代币
const claimable = await clanker.getVaultClaimableAmount({ token: TOKEN_ADDRESS });
if (claimable > 0n) {
const { txHash } = await clanker.claimVaultedTokens({ token: TOKEN_ADDRESS });
}
收取交易奖励
// Check available rewards
const availableFees = await clanker.availableRewards({
token: TOKEN_ADDRESS,
rewardRecipient: FEE_OWNER_ADDRESS,
});
// Claim rewards
const { txHash } = await clanker.claimRewards({
token: TOKEN_ADDRESS,
rewardRecipient: FEE_OWNER_ADDRESS,
});
更新代币元数据
const metadata = JSON.stringify({
description: 'Updated description',
socialMediaUrls: [
{ platform: 'twitter', url: 'https://twitter.com/mytoken' },
{ platform: 'telegram', url: 'https://t.me/mytoken' },
],
});
const { txHash } = await clanker.updateMetadata({
token: TOKEN_ADDRESS,
metadata,
});
更新代币图片
const { txHash } = await clanker.updateImage({
token: TOKEN_ADDRESS,
image: 'ipfs://new_image_hash',
});
常见工作流
简单的 Memecoin 发布
- 准备代币图片(上传到 IPFS)
- 使用基本配置(名称、符号、图片)进行部署
- 启用个性化地址,生成易于记忆的合约地址
- 分享合约地址
带空投的社区代币
- 整理空投接收者名单
- 使用
createAirdrop()创建 Merkle 树 - 部署带空投扩展的代币
- 向 Clanker 服务注册空投
- 分享领取说明
带归属期的创作者代币
- 使用金库配置进行部署
- 设置锁定期(悬崖期)
- 设置归属时长
- 随着代币归属,逐步领取代币
完整部署配置
// Bankr interface fee recipient (20%)
const BANKR_INTERFACE_ADDRESS = '0xF60633D02690e2A15A54AB919925F3d038Df163e';
const tokenConfig = {
chainId: 8453, // Base
name: 'My Token',
symbol: 'TKN',
image: 'ipfs://...',
tokenAdmin: account.address,
metadata: {
description: 'Token description',
socialMediaUrls: [
{ platform: 'twitter', url: '...' },
{ platform: 'telegram', url: '...' },
],
},
context: {
interface: 'Bankr',
platform: 'farcaster',
messageId: '',
id: '',
},
vault: {
percentage: 10,
lockupDuration: 2592000,
vestingDuration: 2592000,
recipient: account.address,
},
devBuy: {
ethAmount: 0,
recipient: account.address,
},
// Default: 80% creator, 20% Bankr interface (all in paired token)
rewards: {
recipients: [
{
recipient: account.address,
admin: account.address,
bps: 8000, // 80% to creator
token: 'Paired', // Receive paired token (WETH)
},
{
recipient: BANKR_INTERFACE_ADDRESS,
admin: BANKR_INTERFACE_ADDRESS,
bps: 2000, // 20% to Bankr
token: 'Paired', // Receive paired token (WETH)
},
],
},
pool: {
pairedToken: '0x4200000000000000000000000000000000000006', // WETH
positions: 'Standard',
},
fees: 'StaticBasic',
vanity: true,
sniperFees: {
startingFee: 666_777,
endingFee: 41_673,
secondsToDecay: 15,
},
};
最佳实践
安全
- 切勿暴露私钥——使用环境变量
- 先在测试网上测试——在主网上部署前验证配置
- 模拟交易——执行前使用
*Simulate方法 - 验证地址——仔细核对所有收款地址
代币设计
- 选择有意义的名称——打造清晰、易记的代币标识
- 使用优质图片——选择高分辨率、合适的 IPFS 图片
- 合理配置归属期——与项目时间线保持一致
Gas 优化
- 使用 Base 或 Arbitrum——降低 Gas 费用
- 批量操作——尽可能合并操作
- 监控 Gas 价格——在低流量时段部署
故障排除
常见问题
- "Missing PRIVATE_KEY"——设置环境变量
- "Insufficient balance"——为钱包充值原生代币
- "Transaction reverted"——检查参数,并先进行模拟
- "Invalid image"——确保 IPFS 哈希可访问
调试步骤
- 检查钱包余额
- 验证链配置
- 使用模拟方法
- 在区块浏览器上检查交易
- 查看错误消息详情
资源
- GitHub:github.com/clanker-devco/clanker-sdk
- NPM:npmjs.com/package/clanker-sdk
- 示例:github.com/clanker-devco/clanker-sdk/tree/main/examples/v4
💡 专业提示:始终使用 vanity: true 选项,以生成易记的合约地址。
⚠️ 安全提示:切勿提交私钥。使用 .env 文件,并将其添加到 .gitignore。
🚀 快速上手:从简单的部署示例开始,然后按需添加归属期和奖励等功能。
评论
支持 Markdown