clawncher 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,302 @@
1
+ # clawnch
2
+
3
+ Command-line interface for [Clawnch](https://clawn.ch) - deploy tokens on Base with Uniswap V4 pools.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g clawnch
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```bash
14
+ # Configure your private key
15
+ clawnch config --private-key YOUR_PRIVATE_KEY
16
+
17
+ # Deploy a new token
18
+ clawnch deploy --name "My Token" --symbol MYTKN
19
+
20
+ # Show contract addresses
21
+ clawnch addresses
22
+
23
+ # Get token info from chain
24
+ clawnch info 0xTokenAddress
25
+ ```
26
+
27
+ ## Commands
28
+
29
+ ### Deploy
30
+
31
+ Deploy a new token on Base with Uniswap V4 pool:
32
+
33
+ ```bash
34
+ # Basic deployment
35
+ clawnch deploy --name "My Token" --symbol MYTKN
36
+
37
+ # With image and description
38
+ clawnch deploy \
39
+ --name "My Token" \
40
+ --symbol MYTKN \
41
+ --image "https://example.com/logo.png" \
42
+ --description "A great token"
43
+
44
+ # Custom fee recipient
45
+ clawnch deploy --name "My Token" --symbol MYTKN --recipient 0x1234...
46
+
47
+ # 1% LP fee: 80% to deployer (in token by default), 20% protocol
48
+ # Change fee preference to receive in WETH instead:
49
+ clawnch deploy --name "My Token" --symbol MYTKN --fee-preference Paired
50
+
51
+ # With vault allocation
52
+ clawnch deploy \
53
+ --name "My Token" \
54
+ --symbol MYTKN \
55
+ --vault-percent 10 \
56
+ --vault-lockup 30 \
57
+ --vault-recipient 0x1234...
58
+
59
+ # With dev buy (instant purchase at launch)
60
+ clawnch deploy \
61
+ --name "My Token" \
62
+ --symbol MYTKN \
63
+ --dev-buy 0.1 \
64
+ --dev-buy-recipient 0x1234...
65
+
66
+ # With vested dev buy (purchase with lockup + vesting)
67
+ clawnch deploy \
68
+ --name "My Token" \
69
+ --symbol MYTKN \
70
+ --vested-dev-buy 0.5 \
71
+ --vested-dev-buy-recipient 0x1234... \
72
+ --vested-dev-buy-lockup 14 \
73
+ --vested-dev-buy-vesting 90
74
+
75
+ # Deploy to mainnet
76
+ clawnch deploy --name "My Token" --symbol MYTKN --network mainnet
77
+
78
+ # Use custom RPC
79
+ clawnch deploy --name "My Token" --symbol MYTKN --rpc https://my-rpc.com
80
+
81
+ # JSON output
82
+ clawnch deploy --name "My Token" --symbol MYTKN --json
83
+ ```
84
+
85
+ ### Info
86
+
87
+ Get token info directly from the blockchain:
88
+
89
+ ```bash
90
+ # Get token info
91
+ clawnch info 0xTokenAddress
92
+
93
+ # Specify network
94
+ clawnch info 0xTokenAddress --network mainnet
95
+
96
+ # JSON output
97
+ clawnch info 0xTokenAddress --json
98
+ ```
99
+
100
+ ### Fees
101
+
102
+ Check and manage trading fees:
103
+
104
+ ```bash
105
+ # Check claimable fees (on-chain)
106
+ clawnch fees check 0xWalletAddress --tokens 0xToken1,0xToken2
107
+
108
+ # Check available fees (via API)
109
+ clawnch fees available 0xWalletAddress
110
+
111
+ # Check specific tokens via API
112
+ clawnch fees available 0xWalletAddress --tokens 0xToken1,0xToken2
113
+ ```
114
+
115
+ ### Config
116
+
117
+ Manage CLI configuration:
118
+
119
+ ```bash
120
+ # Show current configuration
121
+ clawnch config --show
122
+
123
+ # Set default network
124
+ clawnch config --network sepolia # or mainnet
125
+
126
+ # Set private key
127
+ clawnch config --private-key 0x...
128
+
129
+ # Set custom RPC URLs
130
+ clawnch config --rpc-sepolia https://my-sepolia-rpc.com
131
+ clawnch config --rpc-mainnet https://my-mainnet-rpc.com
132
+
133
+ # Clear all configuration
134
+ clawnch config --clear
135
+ ```
136
+
137
+ Configuration is stored in `~/.clawnch/config.json`.
138
+
139
+ ### Addresses
140
+
141
+ Show contract addresses for a network:
142
+
143
+ ```bash
144
+ # Show sepolia addresses (default)
145
+ clawnch addresses
146
+
147
+ # Show mainnet addresses
148
+ clawnch addresses --network mainnet
149
+
150
+ # JSON output
151
+ clawnch addresses --json
152
+ ```
153
+
154
+ ### API Commands
155
+
156
+ These commands fetch data from the Clawnch API:
157
+
158
+ ```bash
159
+ # List all tokens
160
+ clawnch tokens
161
+ clawnch tokens --symbol DOG --limit 10
162
+
163
+ # View launch history
164
+ clawnch launches
165
+ clawnch launches --agent "MyAgent" --source moltbook
166
+
167
+ # Get market statistics
168
+ clawnch stats
169
+ ```
170
+
171
+ ### About
172
+
173
+ Show Clawnch information and links:
174
+
175
+ ```bash
176
+ clawnch about
177
+ ```
178
+
179
+ ## Deploy Options Reference
180
+
181
+ | Option | Description | Example |
182
+ |--------|-------------|---------|
183
+ | `--name` | Token name (required) | `--name "My Token"` |
184
+ | `--symbol` | Token symbol (required) | `--symbol MYTKN` |
185
+ | `--image` | Token image URL | `--image "https://..."` |
186
+ | `--description` | Token description | `--description "A great token"` |
187
+ | `--recipient` | Fee recipient address | `--recipient 0x1234...` |
188
+ | `--fee-preference` | Fee token: Clawnch (default), Paired, Both | `--fee-preference Paired` |
189
+ | `--vault-percent` | Vault allocation (1-90%) | `--vault-percent 10` |
190
+ | `--vault-lockup` | Vault lockup in days | `--vault-lockup 30` |
191
+ | `--vault-vesting` | Vault vesting in days | `--vault-vesting 60` |
192
+ | `--vault-recipient` | Vault recipient address | `--vault-recipient 0x...` |
193
+ | `--dev-buy` | ETH amount for instant dev buy | `--dev-buy 0.1` |
194
+ | `--dev-buy-recipient` | Dev buy recipient address | `--dev-buy-recipient 0x...` |
195
+ | `--vested-dev-buy` | ETH amount for vested dev buy | `--vested-dev-buy 0.5` |
196
+ | `--vested-dev-buy-recipient` | Vested dev buy recipient | `--vested-dev-buy-recipient 0x...` |
197
+ | `--vested-dev-buy-lockup` | Lockup period in days (min 7) | `--vested-dev-buy-lockup 14` |
198
+ | `--vested-dev-buy-vesting` | Vesting period in days (30-365) | `--vested-dev-buy-vesting 90` |
199
+ | `--no-vanity` | Disable vanity address mining | `--no-vanity` |
200
+ | `--vanity-prefix` | Custom vanity prefix (default: ccc) | `--vanity-prefix dead` |
201
+ | `--network` | Network (sepolia/mainnet) | `--network mainnet` |
202
+ | `--rpc` | Custom RPC URL | `--rpc https://...` |
203
+ | `--json` | Output as JSON | `--json` |
204
+
205
+ ### Vanity Addresses
206
+
207
+ By default, all tokens are deployed with a **vanity address** starting with `0xccc`. This makes Clawnch tokens easily identifiable on block explorers.
208
+
209
+ ```bash
210
+ # Default: mine for 0xccc... address
211
+ clawnch deploy --name "My Token" --symbol MTK
212
+
213
+ # Custom prefix (e.g., 0xdead...)
214
+ clawnch deploy --name "My Token" --symbol MTK --vanity-prefix dead
215
+
216
+ # Disable vanity mining for faster deployment
217
+ clawnch deploy --name "My Token" --symbol MTK --no-vanity
218
+ ```
219
+
220
+ Mining time depends on prefix length:
221
+ - `ccc` (3 chars): ~1 second average
222
+ - `cccc` (4 chars): ~5-10 seconds average
223
+ - `ccccc` (5 chars): ~1-2 minutes average
224
+
225
+ ### Dev Buy vs Vested Dev Buy
226
+
227
+ **Dev Buy** (`--dev-buy`): Instantly purchases tokens at launch using ETH. Tokens are sent directly to the recipient with no lockup.
228
+
229
+ **Vested Dev Buy** (`--vested-dev-buy`): Purchases tokens at launch but holds them in a vesting contract:
230
+ - **Lockup period**: Tokens are fully locked (minimum 7 days)
231
+ - **Vesting period**: After lockup, tokens vest linearly over time (30-365 days)
232
+ - Recipient can claim vested tokens as they become available
233
+
234
+ ## Configuration
235
+
236
+ ### Private Key
237
+
238
+ You can provide your private key in three ways (in order of precedence):
239
+
240
+ 1. **Command line flag:** `--private-key 0x...`
241
+ 2. **Environment variable:** `CLAWNCH_PRIVATE_KEY=0x...`
242
+ 3. **Config file:** `clawnch config --private-key 0x...`
243
+
244
+ ### Network
245
+
246
+ Default network is `sepolia`. Change with:
247
+
248
+ ```bash
249
+ clawnch config --network mainnet
250
+ ```
251
+
252
+ Or per-command:
253
+
254
+ ```bash
255
+ clawnch deploy --network mainnet ...
256
+ ```
257
+
258
+ ### RPC URLs
259
+
260
+ Default RPCs are used if not configured:
261
+ - Sepolia: `https://sepolia.base.org`
262
+ - Mainnet: `https://mainnet.base.org`
263
+
264
+ Configure custom RPCs:
265
+
266
+ ```bash
267
+ clawnch config --rpc-sepolia https://my-rpc.com
268
+ clawnch config --rpc-mainnet https://my-rpc.com
269
+ ```
270
+
271
+ Or per-command:
272
+
273
+ ```bash
274
+ clawnch deploy --rpc https://my-rpc.com ...
275
+ ```
276
+
277
+ ## Environment Variables
278
+
279
+ - `CLAWNCH_PRIVATE_KEY` - Private key for deployments
280
+ - `CLAWNCH_API_URL` - Override the default API URL (default: https://clawn.ch)
281
+ - `MOLTBOOK_KEY` - Moltbook API key for authenticated API operations
282
+
283
+ ## JSON Output
284
+
285
+ All commands support `--json` flag for machine-readable output:
286
+
287
+ ```bash
288
+ clawnch deploy --name "Test" --symbol TEST --json | jq '.tokenAddress'
289
+ clawnch info 0x... --json | jq '.symbol'
290
+ ```
291
+
292
+ ## Related
293
+
294
+ - [Clawnch Website](https://clawn.ch)
295
+ - [Agent Skill Documentation](https://clawn.ch/skill)
296
+ - [Technical Documentation](https://clawn.ch/docs)
297
+ - [OpenAPI Specification](https://clawn.ch/api/openapi)
298
+ - [@clawnch/sdk](https://npmjs.com/package/@clawnch/sdk) - TypeScript SDK
299
+
300
+ ## License
301
+
302
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Clawncher CLI v2
4
+ *
5
+ * Command-line interface for deploying tokens on Base with Uniswap V4 pools.
6
+ * Uses ClawnchDeployer from SDK v2 for direct contract deployment.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
package/dist/cli.js ADDED
@@ -0,0 +1,862 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Clawncher CLI v2
4
+ *
5
+ * Command-line interface for deploying tokens on Base with Uniswap V4 pools.
6
+ * Uses ClawnchDeployer from SDK v2 for direct contract deployment.
7
+ */
8
+ import { Command } from 'commander';
9
+ import chalk from 'chalk';
10
+ import ora from 'ora';
11
+ import Table from 'cli-table3';
12
+ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
13
+ import { join } from 'path';
14
+ import { homedir } from 'os';
15
+ import { createWalletClient, createPublicClient, http, formatEther, parseEther, } from 'viem';
16
+ import { privateKeyToAccount } from 'viem/accounts';
17
+ import { base, baseSepolia } from 'viem/chains';
18
+ import { ClawnchDeployer, ClawnchReader, ClawnchClient, getAddresses, ClawnchFeeLockerABI, } from '@clawnch/clawncher-sdk';
19
+ const VERSION = '2.0.0';
20
+ const CONFIG_DIR = join(homedir(), '.clawncher');
21
+ const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
22
+ function loadConfig() {
23
+ try {
24
+ if (existsSync(CONFIG_FILE)) {
25
+ return JSON.parse(readFileSync(CONFIG_FILE, 'utf-8'));
26
+ }
27
+ }
28
+ catch {
29
+ // Ignore errors, return empty config
30
+ }
31
+ return {};
32
+ }
33
+ function saveConfig(config) {
34
+ if (!existsSync(CONFIG_DIR)) {
35
+ mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });
36
+ }
37
+ writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
38
+ }
39
+ // ============================================================================
40
+ // Helpers
41
+ // ============================================================================
42
+ function isValidAddress(address) {
43
+ return /^0x[0-9a-fA-F]{40}$/.test(address);
44
+ }
45
+ function validateAddress(address, label) {
46
+ if (!isValidAddress(address)) {
47
+ console.error(chalk.red(`Invalid ${label} address: ${address}`));
48
+ console.error(chalk.red('Expected a 42-character hex string starting with 0x'));
49
+ process.exit(1);
50
+ }
51
+ return address;
52
+ }
53
+ function safeParseInt(value, label) {
54
+ const n = parseInt(value, 10);
55
+ if (isNaN(n)) {
56
+ console.error(chalk.red(`Invalid ${label}: "${value}" is not a number`));
57
+ process.exit(1);
58
+ }
59
+ return n;
60
+ }
61
+ function handleError(err) {
62
+ if (err && typeof err === 'object' && 'message' in err) {
63
+ const error = err;
64
+ console.error(chalk.red(`Error: ${error.message}`));
65
+ if (error.errors?.length) {
66
+ error.errors.forEach((e) => console.error(chalk.red(` - ${e}`)));
67
+ }
68
+ }
69
+ else {
70
+ console.error(chalk.red('An unknown error occurred'));
71
+ }
72
+ process.exit(1);
73
+ }
74
+ function truncateAddress(address) {
75
+ return `${address.slice(0, 6)}...${address.slice(-4)}`;
76
+ }
77
+ function getPrivateKey(opts) {
78
+ const key = opts.privateKey || process.env.CLAWNCHER_PRIVATE_KEY || loadConfig().privateKey;
79
+ if (!key) {
80
+ console.error(chalk.red('Private key required. Use --private-key, CLAWNCHER_PRIVATE_KEY env var, or `clawncher config --private-key`'));
81
+ process.exit(1);
82
+ }
83
+ return key.startsWith('0x') ? key : `0x${key}`;
84
+ }
85
+ function getNetwork(opts) {
86
+ const network = opts.network || loadConfig().network || 'sepolia';
87
+ if (network !== 'sepolia' && network !== 'mainnet') {
88
+ console.error(chalk.red('Invalid network. Use "sepolia" or "mainnet"'));
89
+ process.exit(1);
90
+ }
91
+ return network;
92
+ }
93
+ function getRpcUrl(network, opts) {
94
+ const config = loadConfig();
95
+ if (opts.rpc)
96
+ return opts.rpc;
97
+ if (network === 'sepolia' && config.rpc?.sepolia)
98
+ return config.rpc.sepolia;
99
+ if (network === 'mainnet' && config.rpc?.mainnet)
100
+ return config.rpc.mainnet;
101
+ // Default public RPCs
102
+ return network === 'mainnet'
103
+ ? 'https://mainnet.base.org'
104
+ : 'https://sepolia.base.org';
105
+ }
106
+ function getChain(network) {
107
+ return network === 'mainnet' ? base : baseSepolia;
108
+ }
109
+ function createClients(network, privateKey, rpcUrl) {
110
+ const chain = getChain(network);
111
+ const account = privateKeyToAccount(privateKey);
112
+ const wallet = createWalletClient({
113
+ account,
114
+ chain,
115
+ transport: http(rpcUrl),
116
+ });
117
+ const publicClient = createPublicClient({
118
+ chain,
119
+ transport: http(rpcUrl),
120
+ });
121
+ // Cast to any to avoid viem version mismatch between CLI and SDK
122
+ return { wallet: wallet, publicClient: publicClient, account };
123
+ }
124
+ function getClient(options = {}) {
125
+ return new ClawnchClient({
126
+ baseUrl: options.apiUrl || process.env.CLAWNCHER_API_URL || 'https://clawn.ch',
127
+ moltbookKey: options.moltbookKey || process.env.MOLTBOOK_KEY,
128
+ });
129
+ }
130
+ // ============================================================================
131
+ // Main Program
132
+ // ============================================================================
133
+ const program = new Command();
134
+ program
135
+ .name('clawncher')
136
+ .description('CLI for Clawncher - deploy tokens on Base with Uniswap V4 pools')
137
+ .version(VERSION)
138
+ .option('--api-url <url>', 'API base URL', 'https://clawn.ch')
139
+ .option('--moltbook-key <key>', 'Moltbook API key for authenticated operations');
140
+ // ============================================================================
141
+ // Deploy Command
142
+ // ============================================================================
143
+ program
144
+ .command('deploy')
145
+ .description('Deploy a new token on Base with Uniswap V4 pool')
146
+ .requiredOption('--name <name>', 'Token name')
147
+ .requiredOption('--symbol <symbol>', 'Token symbol')
148
+ .option('--image <url>', 'Token image URL')
149
+ .option('--description <text>', 'Token description')
150
+ .option('--recipient <address>', 'Fee recipient address (defaults to deployer)')
151
+ .option('--fee-preference <pref>', 'Fee preference: Clawnch (token), Paired (WETH), or Both', 'Clawnch')
152
+ .option('--vault-percent <n>', 'Vault allocation percentage (1-90)')
153
+ .option('--vault-lockup <days>', 'Vault lockup duration in days', '7')
154
+ .option('--vault-vesting <days>', 'Vault vesting duration in days after lockup (0 = instant)', '0')
155
+ .option('--vault-recipient <address>', 'Vault recipient (defaults to deployer)')
156
+ .option('--dev-buy <eth>', 'Dev buy: ETH amount to spend (instant transfer)')
157
+ .option('--dev-buy-recipient <address>', 'Dev buy recipient (defaults to deployer)')
158
+ .option('--vested-dev-buy <eth>', 'Vested dev buy: ETH amount to spend (with lockup+vesting)')
159
+ .option('--vested-dev-buy-recipient <address>', 'Vested dev buy recipient (defaults to deployer)')
160
+ .option('--vested-dev-buy-lockup <days>', 'Vested dev buy lockup in days (min 7)', '7')
161
+ .option('--vested-dev-buy-vesting <days>', 'Vested dev buy vesting in days (min 30, max 365)', '90')
162
+ .option('--no-vanity', 'Disable vanity address mining (default: enabled for 0xccc prefix)')
163
+ .option('--vanity-prefix <prefix>', 'Custom vanity prefix (default: ccc)', 'ccc')
164
+ .option('--network <network>', 'Network: sepolia or mainnet', 'sepolia')
165
+ .option('--rpc <url>', 'Custom RPC URL')
166
+ .option('--private-key <key>', 'Private key (or use CLAWNCHER_PRIVATE_KEY env)')
167
+ .option('--json', 'Output as JSON')
168
+ .action(async (opts) => {
169
+ const spinner = ora('Preparing deployment...').start();
170
+ try {
171
+ const privateKey = getPrivateKey(opts);
172
+ const network = getNetwork(opts);
173
+ const rpcUrl = getRpcUrl(network, opts);
174
+ const { wallet, publicClient, account } = createClients(network, privateKey, rpcUrl);
175
+ spinner.text = `Deploying ${opts.symbol} on ${network}...`;
176
+ const deployer = new ClawnchDeployer({
177
+ wallet,
178
+ publicClient,
179
+ network,
180
+ });
181
+ if (!deployer.isConfigured()) {
182
+ spinner.stop();
183
+ console.error(chalk.red(`Contracts not deployed on ${network}`));
184
+ process.exit(1);
185
+ }
186
+ // Parse fee preference (default: Clawnch = receive fees in the token)
187
+ let feePreference = 'Clawnch';
188
+ if (opts.feePreference) {
189
+ const pref = opts.feePreference.toLowerCase();
190
+ if (pref === 'paired')
191
+ feePreference = 'Paired';
192
+ else if (pref === 'both')
193
+ feePreference = 'Both';
194
+ else
195
+ feePreference = 'Clawnch';
196
+ }
197
+ // Build deploy options
198
+ const recipient = opts.recipient ? validateAddress(opts.recipient, 'recipient') : account.address;
199
+ const deployOpts = {
200
+ name: opts.name,
201
+ symbol: opts.symbol,
202
+ tokenAdmin: account.address,
203
+ image: opts.image,
204
+ metadata: opts.description ? { description: opts.description } : undefined,
205
+ rewards: {
206
+ recipients: [{
207
+ recipient,
208
+ admin: recipient,
209
+ bps: 10000, // 100%
210
+ feePreference,
211
+ }],
212
+ },
213
+ };
214
+ // Add vault if specified
215
+ if (opts.vaultPercent) {
216
+ const vaultPercent = safeParseInt(opts.vaultPercent, 'vault percent');
217
+ if (vaultPercent < 1 || vaultPercent > 90) {
218
+ spinner.stop();
219
+ console.error(chalk.red('Vault percent must be between 1 and 90'));
220
+ process.exit(1);
221
+ }
222
+ const lockupDays = safeParseInt(opts.vaultLockup || '7', 'vault lockup days');
223
+ const lockupSeconds = lockupDays * 24 * 60 * 60;
224
+ const vestingDays = safeParseInt(opts.vaultVesting || '0', 'vault vesting days');
225
+ const vestingSeconds = vestingDays * 24 * 60 * 60;
226
+ const vaultRecipient = opts.vaultRecipient ? validateAddress(opts.vaultRecipient, 'vault recipient') : account.address;
227
+ deployOpts.vault = {
228
+ percentage: vaultPercent,
229
+ lockupDuration: lockupSeconds,
230
+ vestingDuration: vestingSeconds,
231
+ recipient: vaultRecipient,
232
+ };
233
+ }
234
+ // Add instant dev buy if specified
235
+ if (opts.devBuy) {
236
+ const ethAmount = parseEther(opts.devBuy);
237
+ if (ethAmount <= 0n) {
238
+ spinner.stop();
239
+ console.error(chalk.red('Dev buy ETH amount must be greater than 0'));
240
+ process.exit(1);
241
+ }
242
+ const devBuyRecipient = opts.devBuyRecipient ? validateAddress(opts.devBuyRecipient, 'dev buy recipient') : account.address;
243
+ deployOpts.devBuy = {
244
+ ethAmount,
245
+ recipient: devBuyRecipient,
246
+ };
247
+ }
248
+ // Add vested dev buy if specified
249
+ if (opts.vestedDevBuy) {
250
+ const ethAmount = parseEther(opts.vestedDevBuy);
251
+ if (ethAmount <= 0n) {
252
+ spinner.stop();
253
+ console.error(chalk.red('Vested dev buy ETH amount must be greater than 0'));
254
+ process.exit(1);
255
+ }
256
+ const lockupDays = safeParseInt(opts.vestedDevBuyLockup || '7', 'vested dev buy lockup days');
257
+ const vestingDays = safeParseInt(opts.vestedDevBuyVesting || '90', 'vested dev buy vesting days');
258
+ if (lockupDays < 7) {
259
+ spinner.stop();
260
+ console.error(chalk.red('Vested dev buy lockup must be at least 7 days'));
261
+ process.exit(1);
262
+ }
263
+ if (vestingDays < 30 || vestingDays > 365) {
264
+ spinner.stop();
265
+ console.error(chalk.red('Vested dev buy vesting must be between 30 and 365 days'));
266
+ process.exit(1);
267
+ }
268
+ const vestedRecipient = opts.vestedDevBuyRecipient ? validateAddress(opts.vestedDevBuyRecipient, 'vested dev buy recipient') : account.address;
269
+ deployOpts.vestedDevBuy = {
270
+ ethAmount,
271
+ recipient: vestedRecipient,
272
+ lockupDuration: lockupDays * 24 * 60 * 60,
273
+ vestingDuration: vestingDays * 24 * 60 * 60,
274
+ };
275
+ }
276
+ // Configure vanity mining (default: enabled with 'ccc' prefix)
277
+ const vanityEnabled = opts.vanity !== false; // --no-vanity sets this to false
278
+ if (vanityEnabled) {
279
+ spinner.text = `Mining vanity address (0x${opts.vanityPrefix}...)...`;
280
+ deployOpts.vanity = {
281
+ enabled: true,
282
+ prefix: opts.vanityPrefix || 'ccc',
283
+ onProgress: (attempts, rate) => {
284
+ spinner.text = `Mining vanity address (0x${opts.vanityPrefix}...) - ${attempts.toLocaleString()} attempts, ${rate.toLocaleString()}/sec`;
285
+ },
286
+ };
287
+ }
288
+ else {
289
+ deployOpts.vanity = { enabled: false };
290
+ }
291
+ const result = await deployer.deploy(deployOpts);
292
+ if (result.error) {
293
+ spinner.stop();
294
+ handleError(result.error);
295
+ }
296
+ spinner.text = 'Waiting for transaction confirmation...';
297
+ const { address } = await result.waitForTransaction();
298
+ spinner.stop();
299
+ if (opts.json) {
300
+ console.log(JSON.stringify({
301
+ success: true,
302
+ txHash: result.txHash,
303
+ tokenAddress: address,
304
+ network,
305
+ name: opts.name,
306
+ symbol: opts.symbol,
307
+ deployer: account.address,
308
+ vanity: result.vanityResult ? {
309
+ attempts: result.vanityResult.attempts,
310
+ timeMs: result.vanityResult.timeMs,
311
+ } : null,
312
+ }, null, 2));
313
+ return;
314
+ }
315
+ console.log(chalk.green.bold('\n Token deployed successfully!\n'));
316
+ console.log(` ${chalk.cyan('Transaction:')} ${result.txHash}`);
317
+ console.log(` ${chalk.cyan('Token:')} ${address || 'Pending...'}`);
318
+ console.log(` ${chalk.cyan('Network:')} ${network}`);
319
+ console.log(` ${chalk.cyan('Name:')} ${opts.name}`);
320
+ console.log(` ${chalk.cyan('Symbol:')} ${opts.symbol}`);
321
+ console.log(` ${chalk.cyan('Deployer:')} ${account.address}`);
322
+ console.log(` ${chalk.cyan('Fee Recipient:')} ${recipient}`);
323
+ if (result.vanityResult) {
324
+ console.log(` ${chalk.cyan('Vanity:')} Found in ${result.vanityResult.attempts.toLocaleString()} attempts (${result.vanityResult.timeMs}ms)`);
325
+ }
326
+ if (opts.vaultPercent) {
327
+ console.log(` ${chalk.cyan('Vault:')} ${opts.vaultPercent}% locked for ${opts.vaultLockup || 7} days`);
328
+ }
329
+ const chain = getChain(network);
330
+ const explorerUrl = network === 'mainnet'
331
+ ? `https://basescan.org/tx/${result.txHash}`
332
+ : `https://sepolia.basescan.org/tx/${result.txHash}`;
333
+ console.log();
334
+ console.log(` ${chalk.gray('Explorer:')} ${explorerUrl}`);
335
+ console.log();
336
+ }
337
+ catch (err) {
338
+ spinner.stop();
339
+ handleError(err);
340
+ }
341
+ });
342
+ // ============================================================================
343
+ // Info Command (Read from chain)
344
+ // ============================================================================
345
+ program
346
+ .command('info')
347
+ .description('Get full token details from chain (deployment, vault, MEV, rewards)')
348
+ .argument('<address>', 'Token contract address')
349
+ .option('--network <network>', 'Network: sepolia or mainnet', 'sepolia')
350
+ .option('--rpc <url>', 'Custom RPC URL')
351
+ .option('--json', 'Output as JSON')
352
+ .action(async (address, opts) => {
353
+ const spinner = ora('Fetching token details...').start();
354
+ try {
355
+ const tokenAddress = validateAddress(address, 'token');
356
+ const network = getNetwork(opts);
357
+ const rpcUrl = getRpcUrl(network, opts);
358
+ const chain = getChain(network);
359
+ const publicClient = createPublicClient({
360
+ chain,
361
+ transport: http(rpcUrl),
362
+ });
363
+ const reader = new ClawnchReader({
364
+ publicClient,
365
+ network,
366
+ });
367
+ const details = await reader.getTokenDetails(tokenAddress);
368
+ spinner.stop();
369
+ if (!details) {
370
+ // Fall back to basic ERC20 info if not a Clawncher token
371
+ const info = await reader.getTokenInfo(tokenAddress);
372
+ console.log(chalk.yellow(`\n ${info.symbol} is not a Clawncher token (no deployment info found)\n`));
373
+ console.log(` ${chalk.cyan('Address:')} ${address}`);
374
+ console.log(` ${chalk.cyan('Name:')} ${info.name}`);
375
+ console.log(` ${chalk.cyan('Symbol:')} ${info.symbol}`);
376
+ console.log(` ${chalk.cyan('Total Supply:')} ${formatEther(info.totalSupply)}`);
377
+ console.log(` ${chalk.cyan('Network:')} ${network}`);
378
+ console.log();
379
+ return;
380
+ }
381
+ if (opts.json) {
382
+ // Serialize bigints for JSON output
383
+ const serializable = JSON.parse(JSON.stringify(details, (_, v) => typeof v === 'bigint' ? v.toString() : v));
384
+ console.log(JSON.stringify(serializable, null, 2));
385
+ return;
386
+ }
387
+ console.log(chalk.bold.green(`\n ${details.symbol} Token Info\n`));
388
+ console.log(` ${chalk.cyan('Address:')} ${details.address}`);
389
+ console.log(` ${chalk.cyan('Name:')} ${details.name}`);
390
+ console.log(` ${chalk.cyan('Symbol:')} ${details.symbol}`);
391
+ console.log(` ${chalk.cyan('Total Supply:')} ${formatEther(details.totalSupply)}`);
392
+ console.log(` ${chalk.cyan('Admin:')} ${details.tokenAdmin}`);
393
+ console.log(` ${chalk.cyan('Network:')} ${network}`);
394
+ if (details.image) {
395
+ console.log(` ${chalk.cyan('Image:')} ${details.image}`);
396
+ }
397
+ // Deployment
398
+ console.log();
399
+ console.log(chalk.cyan(' Deployment:'));
400
+ console.log(` Hook: ${truncateAddress(details.deployment.hook)}`);
401
+ console.log(` Locker: ${truncateAddress(details.deployment.locker)}`);
402
+ if (details.deployment.extensions.length > 0) {
403
+ console.log(` Extensions: ${details.deployment.extensions.map(truncateAddress).join(', ')}`);
404
+ }
405
+ // Rewards
406
+ if (details.rewards) {
407
+ console.log();
408
+ console.log(chalk.cyan(' Fee Recipients:'));
409
+ for (let i = 0; i < details.rewards.rewardRecipients.length; i++) {
410
+ const bps = details.rewards.rewardBps[i];
411
+ const pct = (bps / 100).toFixed(1);
412
+ console.log(` ${truncateAddress(details.rewards.rewardRecipients[i])} - ${pct}%`);
413
+ }
414
+ }
415
+ // Vault
416
+ if (details.vault) {
417
+ console.log();
418
+ console.log(chalk.cyan(' Vault:'));
419
+ console.log(` Total: ${formatEther(details.vault.amountTotal)} tokens`);
420
+ console.log(` Claimed: ${formatEther(details.vault.amountClaimed)} tokens`);
421
+ console.log(` Available: ${formatEther(details.vault.amountAvailable)} tokens`);
422
+ console.log(` Unlocked: ${details.vault.isUnlocked ? chalk.green('Yes') : chalk.yellow('No')}`);
423
+ console.log(` Vested: ${details.vault.percentVested}%`);
424
+ console.log(` Admin: ${truncateAddress(details.vault.admin)}`);
425
+ }
426
+ // Vested Dev Buy
427
+ if (details.vestedDevBuy) {
428
+ console.log();
429
+ console.log(chalk.cyan(' Vested Dev Buy:'));
430
+ console.log(` Total: ${formatEther(details.vestedDevBuy.amountTotal)} tokens`);
431
+ console.log(` Claimed: ${formatEther(details.vestedDevBuy.amountClaimed)} tokens`);
432
+ console.log(` Available: ${formatEther(details.vestedDevBuy.amountAvailable)} tokens`);
433
+ console.log(` Unlocked: ${details.vestedDevBuy.isUnlocked ? chalk.green('Yes') : chalk.yellow('No')}`);
434
+ console.log(` Vested: ${details.vestedDevBuy.percentVested}%`);
435
+ }
436
+ // MEV
437
+ if (details.mev) {
438
+ console.log();
439
+ console.log(chalk.cyan(' MEV Protection:'));
440
+ console.log(` Starting Fee: ${(details.mev.startingFee / 10000 * 100).toFixed(2)}%`);
441
+ console.log(` Ending Fee: ${(details.mev.endingFee / 10000 * 100).toFixed(2)}%`);
442
+ console.log(` Current Fee: ${(details.mev.currentFee / 10000 * 100).toFixed(2)}%`);
443
+ console.log(` Decay Done: ${details.mev.isDecayComplete ? chalk.green('Yes') : chalk.yellow('No')}`);
444
+ }
445
+ // Explorer link
446
+ const explorerUrl = network === 'mainnet'
447
+ ? `https://basescan.org/address/${address}`
448
+ : `https://sepolia.basescan.org/address/${address}`;
449
+ console.log();
450
+ console.log(` ${chalk.gray('Explorer:')} ${explorerUrl}`);
451
+ console.log();
452
+ }
453
+ catch (err) {
454
+ spinner.stop();
455
+ handleError(err);
456
+ }
457
+ });
458
+ // ============================================================================
459
+ // Fees Commands
460
+ // ============================================================================
461
+ const fees = program.command('fees').description('Manage trading fees');
462
+ fees
463
+ .command('check')
464
+ .description('Check claimable fees for a wallet')
465
+ .argument('<wallet>', 'Wallet address')
466
+ .option('-t, --tokens <addresses>', 'Comma-separated token addresses to check')
467
+ .option('--network <network>', 'Network: sepolia or mainnet', 'sepolia')
468
+ .option('--rpc <url>', 'Custom RPC URL')
469
+ .option('--json', 'Output as JSON')
470
+ .action(async (wallet, opts) => {
471
+ const walletAddr = validateAddress(wallet, 'wallet');
472
+ const spinner = ora('Checking fees...').start();
473
+ try {
474
+ const network = getNetwork(opts);
475
+ const rpcUrl = getRpcUrl(network, opts);
476
+ const chain = getChain(network);
477
+ const publicClient = createPublicClient({
478
+ chain,
479
+ transport: http(rpcUrl),
480
+ });
481
+ const addresses = getAddresses(network);
482
+ // If specific tokens provided, validate and check those
483
+ const tokenAddresses = opts.tokens
484
+ ? opts.tokens.split(',').map((t) => validateAddress(t.trim(), 'token'))
485
+ : [];
486
+ const results = [];
487
+ // Check fees for each token in FeeLocker
488
+ for (const tokenAddr of tokenAddresses) {
489
+ try {
490
+ const available = await publicClient.readContract({
491
+ address: addresses.clawnch.feeLocker,
492
+ abi: ClawnchFeeLockerABI,
493
+ functionName: 'availableFees',
494
+ args: [walletAddr, tokenAddr],
495
+ });
496
+ results.push({
497
+ token: tokenAddr,
498
+ wethAvailable: available,
499
+ });
500
+ }
501
+ catch {
502
+ // Token may not have fees
503
+ }
504
+ }
505
+ spinner.stop();
506
+ if (opts.json) {
507
+ console.log(JSON.stringify({
508
+ wallet,
509
+ network,
510
+ tokens: results.map(r => ({
511
+ token: r.token,
512
+ wethAvailable: r.wethAvailable.toString(),
513
+ wethFormatted: formatEther(r.wethAvailable),
514
+ })),
515
+ }, null, 2));
516
+ return;
517
+ }
518
+ console.log(chalk.bold.green('\n Claimable Fees\n'));
519
+ console.log(` ${chalk.cyan('Wallet:')} ${wallet}`);
520
+ console.log(` ${chalk.cyan('Network:')} ${network}`);
521
+ console.log();
522
+ if (results.length === 0) {
523
+ if (tokenAddresses.length === 0) {
524
+ console.log(chalk.yellow(' Provide token addresses with --tokens to check fees'));
525
+ }
526
+ else {
527
+ console.log(chalk.yellow(' No claimable fees found'));
528
+ }
529
+ console.log();
530
+ return;
531
+ }
532
+ const table = new Table({
533
+ head: [
534
+ chalk.cyan('Token'),
535
+ chalk.cyan('WETH Available'),
536
+ ],
537
+ });
538
+ for (const r of results) {
539
+ table.push([
540
+ truncateAddress(r.token),
541
+ formatEther(r.wethAvailable),
542
+ ]);
543
+ }
544
+ console.log(table.toString());
545
+ console.log();
546
+ }
547
+ catch (err) {
548
+ spinner.stop();
549
+ handleError(err);
550
+ }
551
+ });
552
+ fees
553
+ .command('available')
554
+ .description('Check available fees for a wallet (via API)')
555
+ .argument('<wallet>', 'Wallet address')
556
+ .option('-t, --tokens <addresses>', 'Comma-separated token addresses to check')
557
+ .option('--json', 'Output as JSON')
558
+ .action(async (wallet, opts) => {
559
+ const spinner = ora('Checking fees...').start();
560
+ try {
561
+ const client = getClient(program.opts());
562
+ const result = await client.getAvailableFees(wallet, opts.tokens);
563
+ spinner.stop();
564
+ if (opts.json) {
565
+ console.log(JSON.stringify(result, null, 2));
566
+ return;
567
+ }
568
+ console.log(chalk.bold.green('\n Available Fees\n'));
569
+ console.log(` ${chalk.cyan('Wallet:')} ${wallet}`);
570
+ const totalWeth = result.total_weth || result.weth?.available || '0';
571
+ console.log(` ${chalk.cyan('Total WETH:')} ${result.weth?.formatted || formatEther(BigInt(totalWeth))} WETH`);
572
+ console.log();
573
+ if (!result.tokens?.length) {
574
+ console.log(chalk.yellow(' No tokens with claimable fees'));
575
+ return;
576
+ }
577
+ const table = new Table({
578
+ head: [
579
+ chalk.cyan('Symbol'),
580
+ chalk.cyan('Address'),
581
+ chalk.cyan('Available'),
582
+ ],
583
+ });
584
+ result.tokens.forEach((t) => {
585
+ table.push([
586
+ chalk.bold(t.symbol),
587
+ truncateAddress(t.address),
588
+ t.formatted || formatEther(BigInt(t.available || '0')),
589
+ ]);
590
+ });
591
+ console.log(table.toString());
592
+ console.log();
593
+ }
594
+ catch (err) {
595
+ spinner.stop();
596
+ handleError(err);
597
+ }
598
+ });
599
+ // ============================================================================
600
+ // Config Command
601
+ // ============================================================================
602
+ program
603
+ .command('config')
604
+ .description('Show or set CLI configuration')
605
+ .option('--show', 'Show current configuration')
606
+ .option('--network <network>', 'Set default network (sepolia or mainnet)')
607
+ .option('--private-key <key>', 'Set private key')
608
+ .option('--rpc-sepolia <url>', 'Set Sepolia RPC URL')
609
+ .option('--rpc-mainnet <url>', 'Set Mainnet RPC URL')
610
+ .option('--clear', 'Clear all configuration')
611
+ .action((opts) => {
612
+ const config = loadConfig();
613
+ if (opts.clear) {
614
+ saveConfig({});
615
+ console.log(chalk.green('Configuration cleared'));
616
+ return;
617
+ }
618
+ if (opts.network) {
619
+ if (opts.network !== 'sepolia' && opts.network !== 'mainnet') {
620
+ console.error(chalk.red('Invalid network. Use "sepolia" or "mainnet"'));
621
+ process.exit(1);
622
+ }
623
+ config.network = opts.network;
624
+ }
625
+ if (opts.privateKey) {
626
+ config.privateKey = opts.privateKey.startsWith('0x')
627
+ ? opts.privateKey
628
+ : `0x${opts.privateKey}`;
629
+ }
630
+ if (opts.rpcSepolia) {
631
+ config.rpc = config.rpc || {};
632
+ config.rpc.sepolia = opts.rpcSepolia;
633
+ }
634
+ if (opts.rpcMainnet) {
635
+ config.rpc = config.rpc || {};
636
+ config.rpc.mainnet = opts.rpcMainnet;
637
+ }
638
+ // If any option was set, save config
639
+ if (opts.network || opts.privateKey || opts.rpcSepolia || opts.rpcMainnet) {
640
+ saveConfig(config);
641
+ console.log(chalk.green('Configuration saved'));
642
+ }
643
+ // Show config (always, or if --show)
644
+ if (opts.show || (!opts.network && !opts.privateKey && !opts.rpcSepolia && !opts.rpcMainnet && !opts.clear)) {
645
+ console.log(chalk.bold.green('\n Clawncher Configuration\n'));
646
+ console.log(` ${chalk.cyan('Config file:')} ${CONFIG_FILE}`);
647
+ console.log(` ${chalk.cyan('Network:')} ${config.network || 'sepolia (default)'}`);
648
+ console.log(` ${chalk.cyan('Private key:')} ${config.privateKey ? '********' + config.privateKey.slice(-4) : 'Not set'}`);
649
+ console.log(` ${chalk.cyan('RPC Sepolia:')} ${config.rpc?.sepolia || 'Default (https://sepolia.base.org)'}`);
650
+ console.log(` ${chalk.cyan('RPC Mainnet:')} ${config.rpc?.mainnet || 'Default (https://mainnet.base.org)'}`);
651
+ console.log();
652
+ console.log(chalk.gray(' Environment variables:'));
653
+ console.log(` CLAWNCHER_PRIVATE_KEY: ${process.env.CLAWNCHER_PRIVATE_KEY ? 'Set' : 'Not set'}`);
654
+ console.log();
655
+ }
656
+ });
657
+ // ============================================================================
658
+ // Tokens Command (API)
659
+ // ============================================================================
660
+ program
661
+ .command('tokens')
662
+ .description('List all tokens launched via Clawncher (API)')
663
+ .option('-s, --symbol <symbol>', 'Filter by symbol')
664
+ .option('-l, --limit <n>', 'Limit results', '20')
665
+ .option('--json', 'Output as JSON')
666
+ .action(async (opts) => {
667
+ const spinner = ora('Fetching tokens...').start();
668
+ try {
669
+ const client = getClient(program.opts());
670
+ const tokens = await client.getTokens();
671
+ spinner.stop();
672
+ let filtered = tokens;
673
+ if (opts.symbol) {
674
+ filtered = tokens.filter((t) => t.symbol.toLowerCase().includes(opts.symbol.toLowerCase()));
675
+ }
676
+ const limited = filtered.slice(0, safeParseInt(opts.limit, 'limit'));
677
+ if (opts.json) {
678
+ console.log(JSON.stringify(limited, null, 2));
679
+ return;
680
+ }
681
+ if (limited.length === 0) {
682
+ console.log(chalk.yellow('No tokens found'));
683
+ return;
684
+ }
685
+ const table = new Table({
686
+ head: [
687
+ chalk.cyan('Symbol'),
688
+ chalk.cyan('Name'),
689
+ chalk.cyan('Address'),
690
+ chalk.cyan('Agent'),
691
+ ],
692
+ });
693
+ limited.forEach((token) => {
694
+ table.push([
695
+ chalk.bold(token.symbol),
696
+ token.name,
697
+ truncateAddress(token.address),
698
+ token.agent || '-',
699
+ ]);
700
+ });
701
+ console.log(table.toString());
702
+ console.log(chalk.gray(`\nShowing ${limited.length} of ${filtered.length} tokens`));
703
+ }
704
+ catch (err) {
705
+ spinner.stop();
706
+ handleError(err);
707
+ }
708
+ });
709
+ // ============================================================================
710
+ // Launches Command (API)
711
+ // ============================================================================
712
+ program
713
+ .command('launches')
714
+ .description('View launch history (API)')
715
+ .option('-a, --agent <name>', 'Filter by agent name')
716
+ .option('-s, --source <source>', 'Filter by source (moltbook, 4claw, moltx)')
717
+ .option('-l, --limit <n>', 'Limit results', '20')
718
+ .option('-o, --offset <n>', 'Offset for pagination', '0')
719
+ .option('--json', 'Output as JSON')
720
+ .action(async (opts) => {
721
+ const spinner = ora('Fetching launches...').start();
722
+ try {
723
+ const client = getClient(program.opts());
724
+ const response = await client.getLaunches({
725
+ agent: opts.agent,
726
+ source: opts.source,
727
+ limit: safeParseInt(opts.limit, 'limit'),
728
+ offset: safeParseInt(opts.offset, 'offset'),
729
+ });
730
+ spinner.stop();
731
+ if (opts.json) {
732
+ console.log(JSON.stringify(response, null, 2));
733
+ return;
734
+ }
735
+ if (response.launches.length === 0) {
736
+ console.log(chalk.yellow('No launches found'));
737
+ return;
738
+ }
739
+ const table = new Table({
740
+ head: [
741
+ chalk.cyan('Symbol'),
742
+ chalk.cyan('Agent'),
743
+ chalk.cyan('Source'),
744
+ chalk.cyan('Address'),
745
+ chalk.cyan('Date'),
746
+ ],
747
+ });
748
+ response.launches.forEach((launch) => {
749
+ const agent = launch.agent || launch.agentName || '-';
750
+ const address = launch.address || launch.contractAddress || '';
751
+ const date = launch.created_at || launch.launchedAt || '';
752
+ table.push([
753
+ chalk.bold(launch.symbol),
754
+ agent,
755
+ launch.source,
756
+ address ? truncateAddress(address) : '-',
757
+ date ? new Date(date).toLocaleDateString() : '-',
758
+ ]);
759
+ });
760
+ console.log(table.toString());
761
+ const total = response.total || response.pagination?.total || response.launches.length;
762
+ console.log(chalk.gray(`\nShowing ${response.launches.length} of ${total} launches`));
763
+ }
764
+ catch (err) {
765
+ spinner.stop();
766
+ handleError(err);
767
+ }
768
+ });
769
+ // ============================================================================
770
+ // Stats Command (API)
771
+ // ============================================================================
772
+ program
773
+ .command('stats')
774
+ .description('Get Clawncher market statistics (API)')
775
+ .option('--json', 'Output as JSON')
776
+ .action(async (opts) => {
777
+ const spinner = ora('Fetching stats...').start();
778
+ try {
779
+ const client = getClient(program.opts());
780
+ const stats = await client.getStats();
781
+ spinner.stop();
782
+ if (opts.json) {
783
+ console.log(JSON.stringify(stats, null, 2));
784
+ return;
785
+ }
786
+ console.log(chalk.bold.green('\n Clawncher Statistics\n'));
787
+ console.log(` ${chalk.cyan('Total Tokens:')} ${(stats.totalTokens || stats.total_tokens || 0).toLocaleString()}`);
788
+ console.log(` ${chalk.cyan('Total Volume:')} ${stats.totalVolume || stats.total_volume || '-'}`);
789
+ console.log(` ${chalk.cyan('$CLAWNCH Price:')} ${stats.clawnchPrice || stats.clawncherPrice || '-'}`);
790
+ console.log(` ${chalk.cyan('Market Cap:')} ${stats.clawnchMarketCap || '-'}`);
791
+ console.log();
792
+ }
793
+ catch (err) {
794
+ spinner.stop();
795
+ handleError(err);
796
+ }
797
+ });
798
+ // ============================================================================
799
+ // Addresses Command
800
+ // ============================================================================
801
+ program
802
+ .command('addresses')
803
+ .description('Show contract addresses for a network')
804
+ .option('--network <network>', 'Network: sepolia or mainnet', 'sepolia')
805
+ .option('--json', 'Output as JSON')
806
+ .action((opts) => {
807
+ const network = getNetwork(opts);
808
+ const addresses = getAddresses(network);
809
+ if (opts.json) {
810
+ console.log(JSON.stringify(addresses, null, 2));
811
+ return;
812
+ }
813
+ console.log(chalk.bold.green(`\n Clawncher Addresses (${network})\n`));
814
+ console.log(chalk.cyan(' Clawncher Contracts:'));
815
+ console.log(` Factory: ${addresses.clawnch.factory}`);
816
+ console.log(` Hook: ${addresses.clawnch.hook}`);
817
+ console.log(` Locker: ${addresses.clawnch.locker}`);
818
+ console.log(` FeeLocker: ${addresses.clawnch.feeLocker}`);
819
+ console.log(` MevModule: ${addresses.clawnch.mevModule}`);
820
+ console.log(` Vault: ${addresses.clawnch.vault}`);
821
+ console.log(` AirdropV2: ${addresses.clawnch.airdropV2}`);
822
+ console.log(` DevBuy: ${addresses.clawnch.devBuy}`);
823
+ console.log();
824
+ console.log(chalk.cyan(' Infrastructure:'));
825
+ console.log(` PoolManager: ${addresses.infrastructure.poolManager}`);
826
+ console.log(` PositionManager: ${addresses.infrastructure.positionManager}`);
827
+ console.log(` UniversalRouter: ${addresses.infrastructure.universalRouter}`);
828
+ console.log(` WETH: ${addresses.infrastructure.weth}`);
829
+ console.log(` Permit2: ${addresses.infrastructure.permit2}`);
830
+ console.log();
831
+ });
832
+ // ============================================================================
833
+ // Help/Info Command
834
+ // ============================================================================
835
+ program
836
+ .command('about')
837
+ .description('Show Clawncher information and links')
838
+ .action(() => {
839
+ console.log(chalk.bold.green(`
840
+ ██████╗██╗ █████╗ ██╗ ██╗███╗ ██╗ ██████╗██╗ ██╗███████╗██████╗
841
+ ██╔════╝██║ ██╔══██╗██║ ██║████╗ ██║ ██╔════╝██║ ██║██╔════╝██╔══██╗
842
+ ██║ ██║ ███████║██║ █╗ ██║██╔██╗ ██║ ██║ ███████║█████╗ ██████╔╝
843
+ ██║ ██║ ██╔══██║██║███╗██║██║╚██╗██║ ██║ ██╔══██║██╔══╝ ██╔══██╗
844
+ ╚██████╗███████╗ ██║ ██║╚███╔███╔╝██║ ╚████║ ╚██████╗██║ ██║███████╗██║ ██║
845
+ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝ ╚═╝ ╚═══╝ ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝
846
+ `));
847
+ console.log(' Token launcher on Base with Uniswap V4 pools.\n');
848
+ console.log(` ${chalk.cyan('Website:')} https://clawn.ch`);
849
+ console.log(` ${chalk.cyan('Agent Skill:')} https://clawn.ch/skill`);
850
+ console.log(` ${chalk.cyan('Tech Docs:')} https://clawn.ch/docs`);
851
+ console.log(` ${chalk.cyan('OpenAPI:')} https://clawn.ch/api/openapi`);
852
+ console.log(` ${chalk.cyan('SDK:')} npm install @clawnch/clawncher-sdk`);
853
+ console.log(` ${chalk.cyan('CLI:')} npm install -g clawncher`);
854
+ console.log();
855
+ console.log(chalk.gray(' Quick start:'));
856
+ console.log(chalk.gray(' clawncher config --private-key <your-key>'));
857
+ console.log(chalk.gray(' clawncher deploy --name "My Token" --symbol MYTKN'));
858
+ console.log();
859
+ });
860
+ // Parse and run
861
+ program.parse();
862
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,54 @@
1
+ {
2
+ "name": "clawncher",
3
+ "version": "2.0.0",
4
+ "description": "CLI for Clawncher - deploy tokens on Base with Uniswap V4 pools",
5
+ "type": "module",
6
+ "bin": {
7
+ "clawncher": "./dist/cli.js"
8
+ },
9
+ "main": "dist/cli.js",
10
+ "files": [
11
+ "dist",
12
+ "README.md"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "clean": "rm -rf dist",
18
+ "prepublishOnly": "npm run build"
19
+ },
20
+ "keywords": [
21
+ "clawncher",
22
+ "clawnch",
23
+ "base",
24
+ "memecoin",
25
+ "clanker",
26
+ "ai-agent",
27
+ "crypto",
28
+ "cli",
29
+ "uniswap",
30
+ "v4"
31
+ ],
32
+ "author": "Clawncher",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/clawnch/clawncher"
37
+ },
38
+ "homepage": "https://clawn.ch",
39
+ "engines": {
40
+ "node": ">=18"
41
+ },
42
+ "dependencies": {
43
+ "@clawnch/clawncher-sdk": "^2.0.0",
44
+ "commander": "^12.1.0",
45
+ "chalk": "^5.3.0",
46
+ "ora": "^8.1.0",
47
+ "cli-table3": "^0.6.5",
48
+ "viem": "^2.21.0"
49
+ },
50
+ "devDependencies": {
51
+ "@types/node": "^22.10.0",
52
+ "typescript": "^5.7.2"
53
+ }
54
+ }