zoa-wallet 0.3.4 → 0.3.6

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.
Files changed (3) hide show
  1. package/README.md +476 -79
  2. package/dist/index.mjs +1102 -501
  3. package/package.json +4 -3
package/README.md CHANGED
@@ -24,148 +24,545 @@ yarn global add zoa-wallet
24
24
 
25
25
  ```bash
26
26
  # Create a new wallet
27
- zoa init
27
+ zoa wallet create --password mypassword
28
28
 
29
29
  # Check balances across all chains
30
- zoa balance
30
+ zoa balance --password mypassword
31
+
32
+ # Send ETH on Base
33
+ zoa send --chain base --to 0x1234...abcd --amount 0.01 --password mypassword --yes
31
34
 
32
35
  # Show receive addresses with QR codes
33
- zoa receive
36
+ zoa receive --password mypassword
34
37
 
35
38
  # View supported networks
36
39
  zoa chains
37
40
 
38
41
  # Check live token prices
39
42
  zoa prices
43
+
44
+ # Link wallet to Agenteur (or other apps)
45
+ zoa link agenteur --api-key <YOUR_API_KEY>
46
+ ```
47
+
48
+ ## Command Reference
49
+
50
+ ### `wallet` — Manage Wallets
51
+
52
+ ```bash
53
+ # Create a new wallet
54
+ zoa wallet create [--label <name>] [--color <hex>] [--password <pw>] [--word-count 12|24]
55
+
56
+ # Import from recovery phrase
57
+ zoa wallet import [--label <name>] [--mnemonic "phrase ..."] [--password <pw>]
58
+
59
+ # List all wallets
60
+ zoa wallet list [--password <pw>]
61
+
62
+ # Switch active wallet
63
+ zoa wallet switch [id-or-label]
64
+
65
+ # Rename a wallet
66
+ zoa wallet rename <id> <new-label>
67
+
68
+ # Change wallet color
69
+ zoa wallet color <id> <hex>
70
+
71
+ # Remove a wallet
72
+ zoa wallet remove <id> [--yes]
73
+
74
+ # Show active wallet details
75
+ zoa wallet info [--password <pw>]
40
76
  ```
41
77
 
42
- ## Commands
78
+ ### `balance` — Check Balances
79
+
80
+ ```bash
81
+ zoa balance [--password <pw>] [--chain <chain>]
82
+ ```
43
83
 
44
- | Command | Description |
45
- |---------|-------------|
46
- | `zoa init` | Create a new wallet or import from recovery phrase |
47
- | `zoa balance` | Check balances across all supported networks |
48
- | `zoa send` | Send tokens to an address |
49
- | `zoa receive` | Show wallet addresses with QR codes |
50
- | `zoa history` | View transaction history |
51
- | `zoa export` | Export private keys or recovery phrase |
52
- | `zoa chains` | List all supported blockchain networks |
53
- | `zoa prices` | View live token prices |
54
- | `zoa config` | Manage configuration (~/.zoa/config.json) |
55
- | `zoa api` | Manage API keys for programmatic access |
84
+ | Flag | Description |
85
+ |------|-------------|
86
+ | `--password <pw>` | Wallet password (skip prompt) |
87
+ | `--chain <chain>` | Filter to a specific chain (`base`, `ethereum`, `solana`, etc.) |
56
88
 
57
- ## JSON Mode (for Scripts & AI Agents)
89
+ ### `send` Send Tokens
58
90
 
59
- Every command supports `--json` for machine-readable output:
91
+ Interactive:
92
+ ```bash
93
+ zoa send
94
+ ```
60
95
 
96
+ One-liner:
61
97
  ```bash
62
- # Create wallet non-interactively
63
- zoa --json init --mnemonic "your twelve word phrase here ..." --password "securepass"
98
+ zoa send --chain base --to 0x... --amount 0.01 --password pw --yes
99
+ ```
64
100
 
65
- # Get balances as JSON
66
- zoa --json balance --password "securepass"
101
+ | Flag | Description |
102
+ |------|-------------|
103
+ | `--password <pw>` | Wallet password |
104
+ | `--to <address>` | Recipient address |
105
+ | `--amount <amount>` | Amount to send |
106
+ | `--chain <chain>` | Network (`base`, `ethereum`, `arbitrum`, `optimism`, `bsc`, `solana`) |
107
+ | `--token <symbol>` | Token symbol (e.g. `USDT`, `USDC`). Defaults to native currency |
108
+ | `--max` | Send maximum available balance (auto-deducts gas for native transfers) |
109
+ | `--batch <transfers>` | Batch send: comma-separated `address:amount[:token[:chain]]` |
110
+ | `--yes` | Skip confirmation prompt |
67
111
 
68
- # Filter by chain
69
- zoa --json balance --password "securepass" --chain solana
112
+ ### `receive` Show Addresses & QR Codes
70
113
 
71
- # Get supported chains
72
- zoa --json chains
114
+ ```bash
115
+ zoa receive [--password <pw>] [--chain <chain>]
116
+ ```
117
+
118
+ ### `history` — Transaction History
119
+
120
+ ```bash
121
+ zoa history [--password <pw>] [--chain <chain>] [--limit <n>]
122
+ ```
123
+
124
+ ### `export` — Export Keys
125
+
126
+ ```bash
127
+ # Export private key
128
+ zoa export --password pw --type key --chain evm
129
+
130
+ # Export recovery phrase
131
+ zoa export --password pw --type mnemonic
132
+ ```
133
+
134
+ | Flag | Description |
135
+ |------|-------------|
136
+ | `--password <pw>` | Wallet password |
137
+ | `--type <type>` | `key` or `mnemonic` |
138
+ | `--chain <chain>` | `evm` or `solana` (for `--type key`) |
139
+
140
+ ### `chains` — List Supported Networks
141
+
142
+ ```bash
143
+ zoa chains
144
+ ```
145
+
146
+ ### `prices` — Token Prices
147
+
148
+ ```bash
149
+ # Default price table
150
+ zoa prices
151
+
152
+ # Search for a specific token
153
+ zoa prices search bitcoin
154
+
155
+ # Browse popular tokens interactively
156
+ zoa prices browse
157
+
158
+ # Specify tokens
159
+ zoa prices list --tokens "ethereum,solana,bitcoin"
160
+ ```
161
+
162
+ ### `api` — Manage API Keys
163
+
164
+ ```bash
165
+ # Set API key
166
+ zoa api set <key>
167
+
168
+ # Show current key
169
+ zoa api show
170
+
171
+ # Remove key
172
+ zoa api remove
173
+ ```
174
+
175
+ ### `link` — Link Wallet to External Apps
176
+
177
+ Connect your ZOA wallet to external apps like Agenteur using EIP-191 signed proof of ownership.
178
+
179
+ ```bash
180
+ # Link to Agenteur (interactive — prompts for API key and password)
181
+ zoa link agenteur
182
+
183
+ # Non-interactive with all flags
184
+ zoa link agenteur --api-key ak_your_key_here --password mypassword
185
+ ```
186
+
187
+ | Flag | Description |
188
+ |------|-------------|
189
+ | `<app>` | App name to link to (currently: `agenteur`) |
190
+ | `--api-key <key>` | API key from the target app's dashboard |
191
+ | `--password <pw>` | Wallet password (skip prompt) |
192
+
193
+ **How it works:**
194
+ 1. Signs a structured message with your EVM key (EIP-191)
195
+ 2. Sends your wallet addresses + cryptographic proof to the app's API
196
+ 3. The app verifies the signature on-chain — no shared secrets needed
197
+ 4. Stores the link in `~/.zoa/config.json` for future reference
198
+
199
+ **Web flow alternative:**
200
+ You can also link via the ZOA web app at `wallet.zoa.fun/link?app=agenteur` — paste your app's Link Code and approve.
201
+
202
+ ### `config` — Configuration
203
+
204
+ ```bash
205
+ # Show config
206
+ zoa config show
207
+
208
+ # Set a value
209
+ zoa config set <key> <value>
210
+ ```
211
+
212
+ ## One-Liner Reference
213
+
214
+ | Task | Command |
215
+ |------|---------|
216
+ | Send ETH on Base | `zoa send --chain base --to 0x... --amount 0.01 --password pw --yes` |
217
+ | Send USDC on Ethereum | `zoa send --chain ethereum --token USDC --to 0x... --amount 100 --password pw --yes` |
218
+ | Send max ETH | `zoa send --chain base --to 0x... --max --password pw --yes` |
219
+ | Send SOL on Solana | `zoa send --chain solana --to ABC... --amount 1.5 --password pw --yes` |
220
+ | Check balance (Base only) | `zoa balance --chain base --password pw` |
221
+ | Export EVM private key | `zoa export --type key --chain evm --password pw` |
222
+ | Link to Agenteur | `zoa link agenteur --api-key ak_... --password pw` |
223
+ | Get JSON balances | `zoa --json balance --password pw` |
224
+ | Get JSON prices | `zoa --json prices --tokens "ethereum,solana"` |
225
+
226
+ ## Batch Send
227
+
228
+ Send to multiple recipients, tokens, and chains in a single command.
229
+
230
+ **Format:** `address:amount[:token[:chain]]`
231
+ - `token` defaults to the native currency (ETH, SOL, BNB, etc.)
232
+ - `chain` defaults to the `--chain` flag value, or `base` if not specified
233
+
234
+ ### Examples
235
+
236
+ ```bash
237
+ # Same chain, same token, multiple recipients
238
+ zoa send --chain base --batch "0xAAA...111:0.01,0xBBB...222:0.02,0xCCC...333:0.03" --password pw --yes
239
+
240
+ # Multiple tokens on the same chain
241
+ zoa send --chain ethereum --batch "0xAAA...111:100:USDC,0xBBB...222:50:USDT,0xCCC...333:0.1" --password pw --yes
242
+
243
+ # Multiple chains and tokens in one command
244
+ zoa send --batch "0xAAA...111:100:USDC:ethereum,4Jyn...abc:0.5:SOL:solana,0xBBB...222:50:USDT:base" --password pw --yes
245
+ ```
246
+
247
+ ### Batch Output
248
+
249
+ - Each transfer executes sequentially with progress indicators
250
+ - Failed transfers do not stop remaining transfers
251
+ - A summary is shown at the end with success/failure counts
252
+ - JSON mode returns an array of results
253
+
254
+ ## JSON Mode for AI Agents
255
+
256
+ Every command supports `--json` for machine-readable output. Place the flag before the command name.
257
+
258
+ ```bash
259
+ zoa --json <command> [options]
260
+ ```
261
+
262
+ ### Example Outputs
263
+
264
+ **Create wallet:**
265
+ ```bash
266
+ zoa --json wallet create --password "securepass"
267
+ ```
268
+ ```json
269
+ {
270
+ "address": "0x1234...abcd",
271
+ "solanaAddress": "ABC...xyz",
272
+ "label": "Wallet 1"
273
+ }
274
+ ```
275
+
276
+ **Get balances:**
277
+ ```bash
278
+ zoa --json balance --password pw
279
+ ```
280
+ ```json
281
+ {
282
+ "balances": [
283
+ { "chain": "Base", "token": "ETH", "balance": "0.0542", "usd": "170.21" },
284
+ { "chain": "Base", "token": "USDC", "balance": "100.0", "usd": "100.00" }
285
+ ]
286
+ }
287
+ ```
288
+
289
+ **Send tokens:**
290
+ ```bash
291
+ zoa --json send --chain base --to 0x... --amount 0.01 --password pw --yes
292
+ ```
293
+ ```json
294
+ {
295
+ "status": "sent",
296
+ "hash": "0xabc...def",
297
+ "from": "0x1234...abcd",
298
+ "to": "0x5678...efgh",
299
+ "token": "ETH",
300
+ "amount": "0.01",
301
+ "chain": "Base",
302
+ "explorerUrl": "https://basescan.org/tx/0xabc...def"
303
+ }
304
+ ```
73
305
 
74
- # Get prices
75
- zoa --json prices --tokens "ethereum,solana,bitcoin"
306
+ **Batch send:**
307
+ ```bash
308
+ zoa --json send --batch "0xA:0.01,0xB:0.02" --chain base --password pw --yes
309
+ ```
310
+ ```json
311
+ {
312
+ "batch": true,
313
+ "results": [
314
+ { "to": "0xA...", "amount": "0.01", "token": "ETH", "chain": "Base", "status": "sent", "hash": "0x..." },
315
+ { "to": "0xB...", "amount": "0.02", "token": "ETH", "chain": "Base", "status": "sent", "hash": "0x..." }
316
+ ],
317
+ "summary": { "total": 2, "succeeded": 2, "failed": 0 }
318
+ }
76
319
  ```
77
320
 
78
- ### Example JSON Output
321
+ **Link wallet:**
322
+ ```bash
323
+ zoa --json link agenteur --api-key ak_your_key --password pw
324
+ ```
325
+ ```json
326
+ {
327
+ "app": "agenteur",
328
+ "signer": "0x742d...abcd",
329
+ "addresses": {
330
+ "ethereum": "0x742d...abcd",
331
+ "base": "0x742d...abcd",
332
+ "polygon": "0x742d...abcd",
333
+ "arbitrum": "0x742d...abcd",
334
+ "optimism": "0x742d...abcd",
335
+ "avalanche": "0x742d...abcd"
336
+ },
337
+ "linkedAt": 1709472000000
338
+ }
339
+ ```
79
340
 
341
+ **Get chains:**
80
342
  ```bash
81
- $ zoa --json chains
343
+ zoa --json chains
82
344
  ```
83
345
  ```json
84
346
  {
85
347
  "chains": [
86
348
  { "name": "Ethereum", "symbol": "ETH", "chainId": 1 },
87
349
  { "name": "Base", "symbol": "ETH", "chainId": 8453 },
88
- { "name": "Solana", "symbol": "SOL", "chainId": -1 },
89
- ...
350
+ { "name": "Solana", "symbol": "SOL", "chainId": -1 }
351
+ ]
352
+ }
353
+ ```
354
+
355
+ **Get prices:**
356
+ ```bash
357
+ zoa --json prices --tokens "ethereum,solana"
358
+ ```
359
+ ```json
360
+ {
361
+ "prices": [
362
+ { "id": "ethereum", "symbol": "ETH", "price": 3245.67, "change24h": 2.34 },
363
+ { "id": "solana", "symbol": "SOL", "price": 142.89, "change24h": -1.12 }
90
364
  ]
91
365
  }
92
366
  ```
93
367
 
94
- ## Non-Interactive Mode
368
+ ## API Reference
369
+
370
+ The ZOA backend API provides programmatic access. All `/v1` endpoints require an API key in the `Authorization` header.
95
371
 
96
- All commands accept flags for fully non-interactive usage — perfect for CI/CD, scripts, and AI agents:
372
+ ### Authentication
97
373
 
98
374
  ```bash
99
- # Init without prompts
100
- zoa init --mnemonic "..." --password "..." --word-count 24
375
+ # Set your API key
376
+ zoa api set zoa_sk_your_key_here
101
377
 
102
- # Balance without prompts
103
- zoa balance --password "..." --chain base
378
+ # Use with curl
379
+ curl -H "Authorization: Bearer zoa_sk_your_key_here" https://api.zoa.fun/v1/chains
380
+ ```
104
381
 
105
- # Send without prompts
106
- zoa send --password "..." --to 0x... --amount 0.1 --chain base --yes
382
+ ### Endpoints
107
383
 
108
- # Export without prompts
109
- zoa export --password "..." --type key --chain evm
110
- zoa export --password "..." --type mnemonic
384
+ #### `GET /v1/chains`
385
+ List all supported blockchain networks.
386
+ ```bash
387
+ curl -H "Authorization: Bearer $API_KEY" https://api.zoa.fun/v1/chains
388
+ ```
389
+ ```json
390
+ {
391
+ "data": {
392
+ "chains": [
393
+ { "id": 1, "name": "Ethereum", "symbol": "ETH", "type": "evm" },
394
+ { "id": 8453, "name": "Base", "symbol": "ETH", "type": "evm" },
395
+ { "id": 56, "name": "BNB Smart Chain", "symbol": "BNB", "type": "evm" },
396
+ { "id": 42161, "name": "Arbitrum One", "symbol": "ETH", "type": "evm" },
397
+ { "id": 10, "name": "Optimism", "symbol": "ETH", "type": "evm" },
398
+ { "id": 0, "name": "Solana", "symbol": "SOL", "type": "non-evm" }
399
+ ]
400
+ }
401
+ }
111
402
  ```
112
403
 
113
- ## Supported Networks
404
+ #### `POST /v1/wallets`
405
+ Create a managed wallet. Requires `write` permission.
406
+ ```bash
407
+ curl -X POST -H "Authorization: Bearer $API_KEY" \
408
+ -H "Content-Type: application/json" \
409
+ -d '{"label": "Trading Bot"}' \
410
+ https://api.zoa.fun/v1/wallets
411
+ ```
114
412
 
115
- | Network | Symbol | Type |
116
- |---------|--------|------|
117
- | Ethereum | ETH | EVM |
118
- | Base | ETH | EVM |
119
- | BNB Smart Chain | BNB | EVM |
413
+ #### `GET /v1/wallets`
414
+ List all wallets associated with your API key.
415
+ ```bash
416
+ curl -H "Authorization: Bearer $API_KEY" https://api.zoa.fun/v1/wallets
417
+ ```
120
418
 
121
- | Arbitrum One | ETH | EVM |
122
- | Optimism | ETH | EVM |
123
- | Solana | SOL | Non-EVM |
124
- | Hyperliquid | HYPE | Non-EVM |
419
+ #### `GET /v1/wallets/{id}`
420
+ Get a specific wallet by UUID.
421
+ ```bash
422
+ curl -H "Authorization: Bearer $API_KEY" https://api.zoa.fun/v1/wallets/{id}
423
+ ```
125
424
 
126
- ## Configuration
425
+ #### `GET /v1/balances/{address}`
426
+ Get token balances for an address. Optionally filter by chain.
427
+ ```bash
428
+ curl -H "Authorization: Bearer $API_KEY" "https://api.zoa.fun/v1/balances/0x1234...?chain=8453"
429
+ ```
127
430
 
128
- ZOA stores configuration in `~/.zoa/`:
431
+ #### `GET /v1/balances/{address}/all`
432
+ Get balances across all supported chains.
433
+ ```bash
434
+ curl -H "Authorization: Bearer $API_KEY" https://api.zoa.fun/v1/balances/0x1234.../all
435
+ ```
129
436
 
437
+ #### `POST /v1/transfer`
438
+ Create a transfer. Requires `write` permission.
130
439
  ```bash
131
- # View config
132
- zoa config show
440
+ curl -X POST -H "Authorization: Bearer $API_KEY" \
441
+ -H "Content-Type: application/json" \
442
+ -d '{
443
+ "from_wallet_id": "uuid",
444
+ "to_address": "0x...",
445
+ "chain_id": 8453,
446
+ "amount": "0.01",
447
+ "token_address": null,
448
+ "priority": "standard"
449
+ }' \
450
+ https://api.zoa.fun/v1/transfer
451
+ ```
133
452
 
134
- # Set default chain
135
- zoa config set defaultChain base
453
+ #### `GET /v1/transactions/{address}`
454
+ Get transaction history for an address.
455
+ ```bash
456
+ curl -H "Authorization: Bearer $API_KEY" "https://api.zoa.fun/v1/transactions/0x1234...?chain=8453&limit=10&offset=0"
457
+ ```
136
458
 
137
- # Set API key
138
- zoa api set zoa_sk_your_key_here
459
+ #### `GET /v1/transactions/hash/{hash}`
460
+ Get a specific transaction by hash.
461
+ ```bash
462
+ curl -H "Authorization: Bearer $API_KEY" "https://api.zoa.fun/v1/transactions/hash/0xabc...?chain=8453"
463
+ ```
139
464
 
140
- # Set custom API URL
141
- zoa config set apiUrl https://api.zoa.fun
465
+ #### `GET /v1/prices`
466
+ Get cached token prices.
467
+ ```bash
468
+ curl -H "Authorization: Bearer $API_KEY" "https://api.zoa.fun/v1/prices?tokens=ethereum,solana,bitcoin"
142
469
  ```
143
470
 
144
- ## SDK
471
+ #### `GET /v1/prices/{token_id}`
472
+ Get price for a single token.
473
+ ```bash
474
+ curl -H "Authorization: Bearer $API_KEY" https://api.zoa.fun/v1/prices/ethereum
475
+ ```
145
476
 
146
- For programmatic usage in your applications, use the ZOA SDK:
477
+ #### `GET /v1/gas/{chain_id}`
478
+ Get gas estimates (slow/standard/fast) for a chain.
479
+ ```bash
480
+ curl -H "Authorization: Bearer $API_KEY" https://api.zoa.fun/v1/gas/8453
481
+ ```
482
+ ```json
483
+ {
484
+ "data": {
485
+ "chain_id": 8453,
486
+ "slow": { "gwei": "0.001", "estimated_seconds": 30 },
487
+ "standard": { "gwei": "0.002", "estimated_seconds": 15 },
488
+ "fast": { "gwei": "0.005", "estimated_seconds": 5 }
489
+ }
490
+ }
491
+ ```
147
492
 
148
- ```typescript
149
- import { ZoaWallet } from '@zoa/sdk';
493
+ #### Key Management
150
494
 
151
- // Create a new wallet
152
- const wallet = await ZoaWallet.create();
153
- console.log(wallet.evmAddress); // 0x...
154
- console.log(wallet.solanaAddress); // ABC...
495
+ ```bash
496
+ # Create API key (requires admin permission)
497
+ curl -X POST -H "Authorization: Bearer $ADMIN_KEY" \
498
+ -H "Content-Type: application/json" \
499
+ -d '{"name": "My Bot", "permissions": ["read", "write"], "rate_limit_per_min": 60}' \
500
+ https://api.zoa.fun/v1/keys
155
501
 
156
- // Sign data
157
- const sig = await wallet.sign(data, 'evm');
502
+ # List API keys
503
+ curl -H "Authorization: Bearer $ADMIN_KEY" https://api.zoa.fun/v1/keys
158
504
 
159
- // Export keys
160
- const pk = wallet.exportPrivateKey('evm');
505
+ # Revoke an API key
506
+ curl -X DELETE -H "Authorization: Bearer $ADMIN_KEY" https://api.zoa.fun/v1/keys/{id}
161
507
  ```
162
508
 
509
+ ## Supported Networks
510
+
511
+ | Network | Symbol | Chain ID | Type | Explorer |
512
+ |---------|--------|----------|------|----------|
513
+ | Ethereum | ETH | 1 | EVM | etherscan.io |
514
+ | Base | ETH | 8453 | EVM | basescan.org |
515
+ | BNB Smart Chain | BNB | 56 | EVM | bscscan.com |
516
+ | Arbitrum One | ETH | 42161 | EVM | arbiscan.io |
517
+ | Optimism | ETH | 10 | EVM | optimistic.etherscan.io |
518
+ | Solana | SOL | — | Non-EVM | solscan.io |
519
+ | Hyperliquid | HYPE | 999 | Non-EVM | — |
520
+
521
+ ### Known ERC-20 Tokens
522
+
523
+ Automatically detected in balance checks and available in the send token picker:
524
+
525
+ | Token | Ethereum | Base | Arbitrum | Optimism | BSC |
526
+ |-------|----------|------|----------|----------|-----|
527
+ | USDT | Yes | — | Yes | Yes | Yes |
528
+ | USDC | Yes | Yes | Yes | Yes | Yes |
529
+ | DAI | Yes | Yes | Yes | Yes | Yes |
530
+ | WBTC | Yes | — | Yes | Yes | Yes |
531
+ | LINK | Yes | — | — | — | — |
532
+ | UNI | Yes | — | — | — | — |
533
+ | WETH | — | Yes | — | — | — |
534
+
163
535
  ## Security
164
536
 
165
- - Wallet data is encrypted with AES-256-GCM (PBKDF2 600k iterations)
166
- - Private keys are held in memory only during the session
167
- - Vault is stored locally at `~/.zoa/vault.json`
168
- - No data is sent to any server unless you explicitly use API features
537
+ - **Encryption:** Wallet data is encrypted with AES-256-GCM using PBKDF2 (600k iterations) key derivation
538
+ - **Key isolation:** Private keys are held in memory only during the active session
539
+ - **Local storage:** Vault is stored locally at `~/.zoa/vault.json` — no cloud sync
540
+ - **No telemetry:** No data is sent to any server unless you explicitly use API features
541
+ - **API keys:** Scoped permissions (read/write/admin) with optional expiry and rate limits
542
+
543
+ ## Configuration
544
+
545
+ ZOA stores data in `~/.zoa/`:
546
+
547
+ | File | Description |
548
+ |------|-------------|
549
+ | `vault.json` | Encrypted wallet data |
550
+ | `config.json` | User preferences and settings |
551
+ | `wallets.json` | Wallet metadata (labels, colors, active wallet) |
552
+
553
+ ```bash
554
+ # View config
555
+ zoa config show
556
+
557
+ # Set default chain
558
+ zoa config set defaultChain base
559
+
560
+ # Set API URL
561
+ zoa config set apiUrl https://api.zoa.fun
562
+
563
+ # Set API key
564
+ zoa api set zoa_sk_your_key_here
565
+ ```
169
566
 
170
567
  ## License
171
568