clanker について
clanker は、Uniswap V4 の流動性プールとともに ERC20 トークンをデプロイする TypeScript SDK です。ベスティング、エアドロップ、報酬設定に対応し、複数チェーンでデプロイ後の操作も行えます。
主な機能
- 01ERC20 トークンのデプロイ設定
- 02Uniswap 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)
- 説明とソーシャルメディアのリンク
- バニティアドレスの生成
- カスタムプール設定
リファレンス: references/deployment.md
2. Vault(トークンのベスティング)
ロックアップ期間とベスティング期間を設定して、トークンの一定割合をロックします。
vault: {
percentage: 10, // 10% of token supply
lockupDuration: 2592000, // 30 days cliff (in seconds)
vestingDuration: 2592000, // 30 days linear vesting
recipient: account.address,
}
リファレンス: references/vesting.md
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
}
リファレンス: references/airdrops.md
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)
},
],
}
リファレンス: references/rewards.md
5. Dev Buy
デプロイ時に初回のトークン購入を含めます。
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,
},
],
}
リファレンス: references/pool-config.md
7. スナイパー対策
手数料の減衰を設定して、スナイパーから保護します。
sniperFees: {
startingFee: 666_777, // 66.6777% starting fee
endingFee: 41_673, // 4.1673% ending fee
secondsToDecay: 15, // 15 seconds decay
}
コントラクトの上限と定数
| パラメーター | 値 | 備考 |
|---|---|---|
| トークン供給量 | 100 billion | 18 桁で 100,000,000,000 に固定 |
| 最大拡張 BPS | 9000(90%) | 拡張機能に割り当てられるトークンの最大割合。LP には最低 10% |
| 最大拡張数 | 10 | 1 回のデプロイあたりの拡張機能の最大数 |
| Vault の最小ロックアップ期間 | 7 days | ベスティングに必要な最小ロックアップ期間 |
| エアドロップの最小ロックアップ期間 | 1 day | エアドロップに必要な最小ロックアップ期間 |
| 最大 LP 手数料 | 10% | 通常の取引手数料の上限 |
| 最大スナイパー手数料 | 80% | MEV/スナイパー対策手数料の上限 |
| スナイパー手数料の減衰 | 最大 2 minutes | スナイパー手数料の減衰にかかる最長時間 |
| 最大報酬受取人数 | 7 | 手数料分配の受取人の最大数 |
| 最大 LP ポジション数 | 7 | 流動性ポジションの最大数 |
対応チェーン
| チェーン | チェーン ID | ネイティブトークン | ステータス |
|---|---|---|---|
| Base | 8453 | ETH | ✅ 完全対応 |
| Ethereum | 1 | ETH | ✅ 完全対応 |
| Arbitrum | 42161 | ETH | ✅ 完全対応 |
| Unichain | - | ETH | ✅ 完全対応 |
| Monad | - | MON | ✅ 固定手数料のみ |
デプロイ後の操作
Vault にロックされたトークンを請求する
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',
});
一般的なワークフロー
シンプルなミームコインのローンチ
- トークン画像を準備します(IPFS にアップロード)
- 基本設定(名前、シンボル、画像)でデプロイします
- 覚えやすいコントラクトにするため、バニティアドレスを有効にします
- コントラクトアドレスを共有します
エアドロップ付きコミュニティトークン
- エアドロップの受取人リストを作成します
createAirdrop()で Merkle ツリーを作成します- エアドロップ拡張機能を付けてトークンをデプロイします
- Clanker サービスにエアドロップを登録します
- 請求方法を共有します
ベスティング付きクリエイタートークン
- Vault 設定を指定してデプロイします
- ロックアップ期間(クリフ)を設定します
- ベスティング期間を設定します
- ベスティングに従ってトークンを請求します
完全なデプロイ設定
// 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 画像を使用します
- ベスティングを適切に設定してください - プロジェクトのスケジュールに合わせます
ガスの最適化
- Base または Arbitrum を使用してください - ガス代を抑えられます
- 操作をまとめてください - 可能な場合は組み合わせます
- ガス価格を監視してください - トラフィックの少ない時間帯にデプロイします
トラブルシューティング
よくある問題
- "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 に追加してください。
🚀 すぐにできること: シンプルなデプロイの例から始め、必要に応じてベスティングや報酬などの機能を追加してください。