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.
- package/README.md +476 -79
- package/dist/index.mjs +1102 -501
- 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
|
|
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
|
-
|
|
78
|
+
### `balance` — Check Balances
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
zoa balance [--password <pw>] [--chain <chain>]
|
|
82
|
+
```
|
|
43
83
|
|
|
44
|
-
|
|
|
45
|
-
|
|
46
|
-
|
|
|
47
|
-
|
|
|
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
|
-
|
|
89
|
+
### `send` — Send Tokens
|
|
58
90
|
|
|
59
|
-
|
|
91
|
+
Interactive:
|
|
92
|
+
```bash
|
|
93
|
+
zoa send
|
|
94
|
+
```
|
|
60
95
|
|
|
96
|
+
One-liner:
|
|
61
97
|
```bash
|
|
62
|
-
|
|
63
|
-
|
|
98
|
+
zoa send --chain base --to 0x... --amount 0.01 --password pw --yes
|
|
99
|
+
```
|
|
64
100
|
|
|
65
|
-
|
|
66
|
-
|
|
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
|
-
|
|
69
|
-
zoa --json balance --password "securepass" --chain solana
|
|
112
|
+
### `receive` — Show Addresses & QR Codes
|
|
70
113
|
|
|
71
|
-
|
|
72
|
-
zoa --
|
|
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
|
-
|
|
75
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
372
|
+
### Authentication
|
|
97
373
|
|
|
98
374
|
```bash
|
|
99
|
-
#
|
|
100
|
-
zoa
|
|
375
|
+
# Set your API key
|
|
376
|
+
zoa api set zoa_sk_your_key_here
|
|
101
377
|
|
|
102
|
-
#
|
|
103
|
-
|
|
378
|
+
# Use with curl
|
|
379
|
+
curl -H "Authorization: Bearer zoa_sk_your_key_here" https://api.zoa.fun/v1/chains
|
|
380
|
+
```
|
|
104
381
|
|
|
105
|
-
|
|
106
|
-
zoa send --password "..." --to 0x... --amount 0.1 --chain base --yes
|
|
382
|
+
### Endpoints
|
|
107
383
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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
|
-
|
|
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
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
132
|
-
|
|
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
|
-
|
|
135
|
-
|
|
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
|
-
|
|
138
|
-
|
|
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
|
-
|
|
141
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
149
|
-
import { ZoaWallet } from '@zoa/sdk';
|
|
493
|
+
#### Key Management
|
|
150
494
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
157
|
-
|
|
502
|
+
# List API keys
|
|
503
|
+
curl -H "Authorization: Bearer $ADMIN_KEY" https://api.zoa.fun/v1/keys
|
|
158
504
|
|
|
159
|
-
|
|
160
|
-
|
|
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
|
|
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
|
|