@nostrbox/cli 1.5.1 ā 1.6.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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @nostrbox/cli
|
|
2
2
|
|
|
3
|
-
CLI tools for NIP-05 operations
|
|
3
|
+
CLI tools for NIP-05 operations, BIP39 zodiac seed phrase management, and multi-chain key derivation.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -15,11 +15,12 @@ npm install -g @nostrbox/cli
|
|
|
15
15
|
After installation, enable tab completion for any command:
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
# Install completion for
|
|
18
|
+
# Install completion for any command
|
|
19
19
|
bip39zodiac install
|
|
20
|
+
bip39keys install
|
|
20
21
|
|
|
21
22
|
# Restart your shell or source your profile
|
|
22
|
-
# Tab completion will now work
|
|
23
|
+
# Tab completion will now work for all commands
|
|
23
24
|
```
|
|
24
25
|
|
|
25
26
|
### From source (development)
|
|
@@ -42,6 +43,7 @@ The commands will then be available globally:
|
|
|
42
43
|
- `nip05lookup`
|
|
43
44
|
- `nip05check`
|
|
44
45
|
- `bip39zodiac`
|
|
46
|
+
- `bip39keys`
|
|
45
47
|
|
|
46
48
|
## Commands
|
|
47
49
|
|
|
@@ -92,8 +94,80 @@ nip05check <domain>
|
|
|
92
94
|
nip05check domain.com
|
|
93
95
|
```
|
|
94
96
|
|
|
97
|
+
### bip39keys
|
|
98
|
+
|
|
99
|
+
**Purpose**: Derive cryptocurrency addresses from BIP39 mnemonic phrases for multiple blockchains.
|
|
100
|
+
|
|
101
|
+
**Usage**:
|
|
102
|
+
```bash
|
|
103
|
+
bip39keys --mnemonic "word1 word2 ..." --chain <chain> [OPTIONS]
|
|
104
|
+
bip39keys --load <file> --chain <chain> [OPTIONS]
|
|
105
|
+
bip39keys <install|uninstall>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Input Methods** (choose one):
|
|
109
|
+
- `--mnemonic "content"` - BIP39 mnemonic phrase (12-24 words in quotes)
|
|
110
|
+
- `--load <file>` - Load mnemonic from file
|
|
111
|
+
|
|
112
|
+
**Required Options**:
|
|
113
|
+
- `--chain <chain>` - Blockchain to derive keys for
|
|
114
|
+
- Choices: `bitcoin`, `nostr`
|
|
115
|
+
|
|
116
|
+
**Format Options**:
|
|
117
|
+
- `--format <formats>` - Output format(s), comma-separated for multiple
|
|
118
|
+
- Bitcoin: `hex`, `native`, `segwit`, `bech32`, `taproot`
|
|
119
|
+
- Nostr: `hex`, `bech32`
|
|
120
|
+
- Default: `bech32` (bitcoin), `hex` (nostr)
|
|
121
|
+
|
|
122
|
+
**Derivation Options**:
|
|
123
|
+
- `--account <index>` - Account index (default: 0)
|
|
124
|
+
- `--change <index>` - Change index (default: 0)
|
|
125
|
+
- `--address <index>` - Address index (default: 0)
|
|
126
|
+
- `--passphrase <text>` - Optional BIP39 passphrase
|
|
127
|
+
|
|
128
|
+
**Output Options**:
|
|
129
|
+
- `--save <file>` - Save results to file
|
|
130
|
+
|
|
131
|
+
**Commands**:
|
|
132
|
+
- `install` - Install shell completion
|
|
133
|
+
- `uninstall` - Uninstall shell completion
|
|
134
|
+
|
|
135
|
+
**Examples**:
|
|
136
|
+
```bash
|
|
137
|
+
# Basic Bitcoin address
|
|
138
|
+
bip39keys --mnemonic "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" --chain bitcoin
|
|
139
|
+
|
|
140
|
+
# Multiple Bitcoin formats
|
|
141
|
+
bip39keys --mnemonic "abandon abandon..." --chain bitcoin --format native,bech32,taproot
|
|
142
|
+
|
|
143
|
+
# Load from file with custom derivation path
|
|
144
|
+
bip39keys --load seed.txt --chain bitcoin --format bech32 --account 1 --address 5
|
|
145
|
+
|
|
146
|
+
# Nostr keys
|
|
147
|
+
bip39keys --mnemonic "abandon abandon..." --chain nostr --format hex,bech32
|
|
148
|
+
|
|
149
|
+
# With passphrase and save to file
|
|
150
|
+
bip39keys --mnemonic "abandon abandon..." --chain bitcoin --passphrase "secret" --save keys.txt
|
|
151
|
+
|
|
152
|
+
# Install shell completion
|
|
153
|
+
bip39keys install
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**File Formats**:
|
|
157
|
+
Input files can contain mnemonic phrases in two formats:
|
|
158
|
+
1. Space-separated on single line: `word1 word2 word3 ...`
|
|
159
|
+
2. One word per line
|
|
160
|
+
|
|
161
|
+
**Derivation Paths**:
|
|
162
|
+
- Bitcoin: `m/44'/0'/account'/change/address`
|
|
163
|
+
- Nostr: `m/44'/1237'/account'/change/address`
|
|
164
|
+
|
|
165
|
+
**Supported Mnemonic Lengths**: 12, 15, 18, 21, 24 words (BIP39 standard)
|
|
166
|
+
|
|
95
167
|
### bip39zodiac
|
|
96
168
|
|
|
169
|
+
**Purpose**: Transform BIP39 seed phrases into secret codes using zodiac-based shuffling for enhanced security.
|
|
170
|
+
|
|
97
171
|
**Usage**:
|
|
98
172
|
```bash
|
|
99
173
|
bip39zodiac [INPUT_METHOD] [OPTIONS] [CONVERSION_FLAGS]
|
|
@@ -142,6 +216,27 @@ bip39zodiac install
|
|
|
142
216
|
|
|
143
217
|
## How It Works
|
|
144
218
|
|
|
219
|
+
### BIP39 Keys
|
|
220
|
+
|
|
221
|
+
The BIP39 Keys system derives cryptocurrency addresses from mnemonic phrases:
|
|
222
|
+
|
|
223
|
+
1. **Validation**: Verifies BIP39 mnemonic checksum and word count (12-24 words)
|
|
224
|
+
2. **Seed Generation**: Converts mnemonic + optional passphrase to 512-bit seed using PBKDF2
|
|
225
|
+
3. **HD Derivation**: Uses BIP32/BIP44 hierarchical deterministic derivation
|
|
226
|
+
4. **Address Generation**: Creates addresses in various formats per blockchain
|
|
227
|
+
|
|
228
|
+
**Supported Chains**:
|
|
229
|
+
- **Bitcoin**: Legacy (P2PKH), SegWit (P2SH-P2WPKH, P2WPKH), Taproot (P2TR)
|
|
230
|
+
- **Nostr**: x-only public keys in hex and bech32 (npub) formats
|
|
231
|
+
|
|
232
|
+
**Security Features**:
|
|
233
|
+
- Uses audited cryptographic libraries (`@scure/bip39`, `@noble/secp256k1`)
|
|
234
|
+
- Standard BIP32/BIP44 derivation paths
|
|
235
|
+
- Support for BIP39 passphrases
|
|
236
|
+
- Deterministic and reproducible results
|
|
237
|
+
|
|
238
|
+
### BIP39 Zodiac
|
|
239
|
+
|
|
145
240
|
The BIP39 Zodiac system transforms seed phrases through a 3-step process:
|
|
146
241
|
|
|
147
242
|
1. **Convert**: Words ā BIP39 indices (0-2047)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* BIP39 Keys CLI - Multi-chain key derivation from BIP39 mnemonic phrases
|
|
4
|
+
*
|
|
5
|
+
* Supports Bitcoin, Nostr, Ethereum, Solana, and TRON key derivation
|
|
6
|
+
* with multiple output formats and file I/O capabilities.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=bip39keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bip39keys.d.ts","sourceRoot":"","sources":["../../../src/commands/bip39keys/bip39keys.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
|
|
@@ -0,0 +1,570 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* BIP39 Keys CLI - Multi-chain key derivation from BIP39 mnemonic phrases
|
|
5
|
+
*
|
|
6
|
+
* Supports Bitcoin, Nostr, Ethereum, Solana, and TRON key derivation
|
|
7
|
+
* with multiple output formats and file I/O capabilities.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
const core_1 = require("@nostrbox/core");
|
|
44
|
+
const argParser_js_1 = require("../../utils/argParser.js");
|
|
45
|
+
const tabtab = __importStar(require("tabtab"));
|
|
46
|
+
// Valid chains and their formats
|
|
47
|
+
const VALID_CHAINS = ['bitcoin', 'ethereum', 'solana', 'tron', 'nostr'];
|
|
48
|
+
const CHAIN_FORMATS = {
|
|
49
|
+
bitcoin: ['legacy', 'nested', 'native', 'taproot'],
|
|
50
|
+
ethereum: ['native'],
|
|
51
|
+
solana: ['native'],
|
|
52
|
+
tron: ['native'],
|
|
53
|
+
nostr: ['hex', 'bech32']
|
|
54
|
+
};
|
|
55
|
+
function createParser() {
|
|
56
|
+
return new argParser_js_1.ArgumentParser({
|
|
57
|
+
positional: {
|
|
58
|
+
name: 'command',
|
|
59
|
+
description: 'Command to execute (install, uninstall)',
|
|
60
|
+
required: false
|
|
61
|
+
},
|
|
62
|
+
options: [
|
|
63
|
+
// Input methods
|
|
64
|
+
{
|
|
65
|
+
name: 'mnemonic',
|
|
66
|
+
type: 'string',
|
|
67
|
+
description: 'BIP39 mnemonic phrase (12 or 24 words in quotes)'
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: 'load',
|
|
71
|
+
type: 'string',
|
|
72
|
+
description: 'Load mnemonic from file (space-separated or one word per line)'
|
|
73
|
+
},
|
|
74
|
+
// Chain selection (required)
|
|
75
|
+
{
|
|
76
|
+
name: 'chain',
|
|
77
|
+
alias: 'c',
|
|
78
|
+
type: 'string',
|
|
79
|
+
description: 'Blockchain to derive keys for (required)',
|
|
80
|
+
choices: [...VALID_CHAINS]
|
|
81
|
+
},
|
|
82
|
+
// Format options
|
|
83
|
+
{
|
|
84
|
+
name: 'format',
|
|
85
|
+
alias: 'f',
|
|
86
|
+
type: 'string',
|
|
87
|
+
description: 'Output format(s) - comma-separated for multiple (bitcoin: legacy,nested,native,taproot; ethereum/solana/tron: native; nostr: hex,bech32)'
|
|
88
|
+
},
|
|
89
|
+
// Derivation indices
|
|
90
|
+
{
|
|
91
|
+
name: 'account',
|
|
92
|
+
type: 'string',
|
|
93
|
+
description: 'Account index for HD derivation (default: 0)'
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: 'change',
|
|
97
|
+
type: 'string',
|
|
98
|
+
description: 'Change index for HD derivation (default: 0)'
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'address',
|
|
102
|
+
type: 'string',
|
|
103
|
+
description: 'Address index for HD derivation (default: 0)'
|
|
104
|
+
},
|
|
105
|
+
// Optional BIP39 passphrase
|
|
106
|
+
{
|
|
107
|
+
name: 'passphrase',
|
|
108
|
+
alias: 'p',
|
|
109
|
+
type: 'string',
|
|
110
|
+
description: 'Optional BIP39 passphrase (empty string if omitted)'
|
|
111
|
+
},
|
|
112
|
+
// Output options
|
|
113
|
+
{
|
|
114
|
+
name: 'save',
|
|
115
|
+
type: 'string',
|
|
116
|
+
description: 'Save results to specified file'
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
async function setupCompletion(env) {
|
|
122
|
+
const flagCompletions = [
|
|
123
|
+
'--mnemonic',
|
|
124
|
+
'--load',
|
|
125
|
+
'--chain',
|
|
126
|
+
'--format',
|
|
127
|
+
'--account',
|
|
128
|
+
'--change',
|
|
129
|
+
'--address',
|
|
130
|
+
'--passphrase',
|
|
131
|
+
'--save'
|
|
132
|
+
];
|
|
133
|
+
const commandCompletions = ['install', 'uninstall'];
|
|
134
|
+
// Get the current word being completed
|
|
135
|
+
const current = env.last || '';
|
|
136
|
+
const words = (env.line || '').split(/\s+/);
|
|
137
|
+
// If we're completing the first argument and it doesn't start with --, complete commands
|
|
138
|
+
if (words.length <= 2 && !current.startsWith('--')) {
|
|
139
|
+
const matches = commandCompletions.filter((cmd) => cmd.startsWith(current));
|
|
140
|
+
if (matches.length > 0) {
|
|
141
|
+
return tabtab.log(matches);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Special case for chain values
|
|
145
|
+
if (env.line && env.line.includes('--chain=')) {
|
|
146
|
+
const chainPart = current.replace('--chain=', '');
|
|
147
|
+
const matches = VALID_CHAINS.filter((chain) => chain.startsWith(chainPart));
|
|
148
|
+
return tabtab.log(matches);
|
|
149
|
+
}
|
|
150
|
+
// Special case for format values based on chain
|
|
151
|
+
if (env.line && env.line.includes('--format=')) {
|
|
152
|
+
const formatPart = current.replace('--format=', '');
|
|
153
|
+
const line = env.line || '';
|
|
154
|
+
// Try to determine the chain from the command line
|
|
155
|
+
let chain = null;
|
|
156
|
+
if (line.includes('--chain=bitcoin') || line.includes('--chain bitcoin')) {
|
|
157
|
+
chain = 'bitcoin';
|
|
158
|
+
}
|
|
159
|
+
else if (line.includes('--chain=ethereum') ||
|
|
160
|
+
line.includes('--chain ethereum')) {
|
|
161
|
+
chain = 'ethereum';
|
|
162
|
+
}
|
|
163
|
+
else if (line.includes('--chain=solana') ||
|
|
164
|
+
line.includes('--chain solana')) {
|
|
165
|
+
chain = 'solana';
|
|
166
|
+
}
|
|
167
|
+
else if (line.includes('--chain=tron') || line.includes('--chain tron')) {
|
|
168
|
+
chain = 'tron';
|
|
169
|
+
}
|
|
170
|
+
else if (line.includes('--chain=nostr') ||
|
|
171
|
+
line.includes('--chain nostr')) {
|
|
172
|
+
chain = 'nostr';
|
|
173
|
+
}
|
|
174
|
+
if (chain) {
|
|
175
|
+
const formats = CHAIN_FORMATS[chain];
|
|
176
|
+
const matches = formats.filter((format) => format.startsWith(formatPart));
|
|
177
|
+
return tabtab.log(matches);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
// Filter flag names based on current input
|
|
181
|
+
const matches = flagCompletions.filter((comp) => comp.startsWith(current));
|
|
182
|
+
return tabtab.log(matches);
|
|
183
|
+
}
|
|
184
|
+
async function installCompletion() {
|
|
185
|
+
try {
|
|
186
|
+
await tabtab.install({
|
|
187
|
+
name: 'bip39keys',
|
|
188
|
+
completer: 'bip39keys'
|
|
189
|
+
});
|
|
190
|
+
console.log('ā
Shell completion installed successfully!');
|
|
191
|
+
console.log('š You may need to restart your shell or run: source ~/.bashrc (or equivalent)');
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
console.error('ā Failed to install completion:', error instanceof Error ? error.message : String(error));
|
|
195
|
+
process.exit(1);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async function uninstallCompletion() {
|
|
199
|
+
try {
|
|
200
|
+
await tabtab.uninstall({
|
|
201
|
+
name: 'bip39keys'
|
|
202
|
+
});
|
|
203
|
+
console.log('ā
Shell completion uninstalled successfully!');
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
console.error('ā Failed to uninstall completion:', error instanceof Error ? error.message : String(error));
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
function showHelp() {
|
|
211
|
+
console.log(`
|
|
212
|
+
š BIP39 Keys CLI - Multi-Chain Key Derivation
|
|
213
|
+
|
|
214
|
+
USAGE:
|
|
215
|
+
bip39keys --mnemonic "word1 word2 ..." --chain <chain> [OPTIONS]
|
|
216
|
+
bip39keys --load <file> --chain <chain> [OPTIONS]
|
|
217
|
+
bip39keys <install|uninstall>
|
|
218
|
+
|
|
219
|
+
INPUT METHODS (choose one):
|
|
220
|
+
--mnemonic "content" BIP39 mnemonic phrase (12 or 24 words in quotes)
|
|
221
|
+
--load <file> Load mnemonic from file
|
|
222
|
+
|
|
223
|
+
REQUIRED OPTIONS:
|
|
224
|
+
--chain <chain>, -c Blockchain to derive keys for
|
|
225
|
+
Choices: bitcoin, ethereum, solana, tron, nostr
|
|
226
|
+
|
|
227
|
+
FORMAT OPTIONS:
|
|
228
|
+
--format <formats>, -f Output format(s), comma-separated for multiple
|
|
229
|
+
Bitcoin: legacy, nested, native, taproot
|
|
230
|
+
Ethereum/Solana/TRON: native
|
|
231
|
+
Nostr: hex, bech32
|
|
232
|
+
Default: native (bitcoin/ethereum/solana/tron), hex (nostr)
|
|
233
|
+
|
|
234
|
+
DERIVATION OPTIONS:
|
|
235
|
+
--account <index> Account index (default: 0)
|
|
236
|
+
--change <index> Change index (default: 0)
|
|
237
|
+
--address <index> Address index (default: 0)
|
|
238
|
+
--passphrase <text>, -p Optional BIP39 passphrase
|
|
239
|
+
|
|
240
|
+
OUTPUT OPTIONS:
|
|
241
|
+
--save <file> Save results to file
|
|
242
|
+
|
|
243
|
+
COMMANDS:
|
|
244
|
+
install Install shell completion
|
|
245
|
+
uninstall Uninstall shell completion
|
|
246
|
+
|
|
247
|
+
EXAMPLES:
|
|
248
|
+
# Basic Bitcoin key derivation
|
|
249
|
+
bip39keys --mnemonic "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" --chain bitcoin
|
|
250
|
+
|
|
251
|
+
# Multiple Bitcoin address formats
|
|
252
|
+
bip39keys --mnemonic "abandon abandon..." --chain bitcoin --format legacy,native,taproot
|
|
253
|
+
|
|
254
|
+
# Load from file with custom derivation path
|
|
255
|
+
bip39keys --load seed.txt --chain bitcoin --format native --account 1 --address 5
|
|
256
|
+
|
|
257
|
+
# Ethereum key derivation
|
|
258
|
+
bip39keys --mnemonic "abandon abandon..." --chain ethereum
|
|
259
|
+
|
|
260
|
+
# Solana key derivation
|
|
261
|
+
bip39keys --mnemonic "abandon abandon..." --chain solana
|
|
262
|
+
|
|
263
|
+
# TRON key derivation
|
|
264
|
+
bip39keys --mnemonic "abandon abandon..." --chain tron
|
|
265
|
+
|
|
266
|
+
# Nostr keys with both formats
|
|
267
|
+
bip39keys --mnemonic "abandon abandon..." --chain nostr --format hex,bech32
|
|
268
|
+
|
|
269
|
+
# With passphrase and save to file
|
|
270
|
+
bip39keys --mnemonic "abandon abandon..." --chain bitcoin --passphrase "secret" --save keys.txt
|
|
271
|
+
|
|
272
|
+
FILE FORMATS:
|
|
273
|
+
Input files can contain mnemonic phrases in two formats:
|
|
274
|
+
1. Space-separated on single line: "word1 word2 word3 ..."
|
|
275
|
+
2. One word per line:
|
|
276
|
+
word1
|
|
277
|
+
word2
|
|
278
|
+
word3
|
|
279
|
+
...
|
|
280
|
+
|
|
281
|
+
DERIVATION PATHS:
|
|
282
|
+
Bitcoin: m/44'/0'/account'/change/address (legacy) | m/49'/0'/account'/change/address (nested)
|
|
283
|
+
m/84'/0'/account'/change/address (native) | m/86'/0'/account'/change/address (taproot)
|
|
284
|
+
Ethereum: m/44'/60'/account'/change/address
|
|
285
|
+
Solana: m/44'/501'/account'/change/address
|
|
286
|
+
TRON: m/44'/195'/account'/change/address
|
|
287
|
+
Nostr: m/44'/1237'/account'/change/address
|
|
288
|
+
|
|
289
|
+
SUPPORTED MNEMONIC LENGTHS:
|
|
290
|
+
12, 24 words (BIP39 standard)
|
|
291
|
+
`);
|
|
292
|
+
}
|
|
293
|
+
function isValidChain(chain) {
|
|
294
|
+
return Object.keys(CHAIN_FORMATS).includes(chain);
|
|
295
|
+
}
|
|
296
|
+
function isValidFormat(format, chain) {
|
|
297
|
+
const validFormats = CHAIN_FORMATS[chain];
|
|
298
|
+
return validFormats.includes(format);
|
|
299
|
+
}
|
|
300
|
+
function validateArguments(args) {
|
|
301
|
+
// Check for required input method
|
|
302
|
+
if (!args.mnemonic && !args.load) {
|
|
303
|
+
throw new Error('Input required: --mnemonic or --load must be specified');
|
|
304
|
+
}
|
|
305
|
+
if (args.mnemonic && args.load) {
|
|
306
|
+
throw new Error('Input conflict: only one of --mnemonic or --load can be used');
|
|
307
|
+
}
|
|
308
|
+
// Check for required chain
|
|
309
|
+
if (!args.chain) {
|
|
310
|
+
throw new Error('Chain required: --chain must be specified');
|
|
311
|
+
}
|
|
312
|
+
// Validate chain
|
|
313
|
+
if (!isValidChain(args.chain)) {
|
|
314
|
+
throw new Error(`Invalid chain: ${args.chain}. Valid choices: ${VALID_CHAINS.join(', ')}`);
|
|
315
|
+
}
|
|
316
|
+
// Validate format if specified
|
|
317
|
+
if (args.format) {
|
|
318
|
+
const formats = args.format.split(',').map((f) => f.trim());
|
|
319
|
+
for (const format of formats) {
|
|
320
|
+
if (!isValidFormat(format, args.chain)) {
|
|
321
|
+
const validFormats = CHAIN_FORMATS[args.chain];
|
|
322
|
+
throw new Error(`Invalid format for ${args.chain}: ${format}. Valid choices: ${validFormats.join(', ')}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Validate indices if specified
|
|
327
|
+
if (args.account !== undefined) {
|
|
328
|
+
const account = parseInt(String(args.account));
|
|
329
|
+
if (isNaN(account) || account < 0) {
|
|
330
|
+
throw new Error('Account index must be a non-negative integer');
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
if (args.change !== undefined) {
|
|
334
|
+
const change = parseInt(String(args.change));
|
|
335
|
+
if (isNaN(change) || change < 0) {
|
|
336
|
+
throw new Error('Change index must be a non-negative integer');
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
if (args.address !== undefined) {
|
|
340
|
+
const address = parseInt(String(args.address));
|
|
341
|
+
if (isNaN(address) || address < 0) {
|
|
342
|
+
throw new Error('Address index must be a non-negative integer');
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
function loadMnemonic(args) {
|
|
347
|
+
if (args.mnemonic) {
|
|
348
|
+
const words = args.mnemonic
|
|
349
|
+
.trim()
|
|
350
|
+
.split(/\s+/)
|
|
351
|
+
.filter((word) => word.length > 0);
|
|
352
|
+
if (words.length !== 12 && words.length !== 24) {
|
|
353
|
+
throw new Error(`Invalid mnemonic length: ${words.length} words. Must be 12 or 24 words.`);
|
|
354
|
+
}
|
|
355
|
+
return words.join(' ');
|
|
356
|
+
}
|
|
357
|
+
if (args.load) {
|
|
358
|
+
console.log(`š Loading mnemonic from file: ${args.load}`);
|
|
359
|
+
try {
|
|
360
|
+
const fileContent = (0, core_1.loadArrayFromFile)(args.load);
|
|
361
|
+
// Handle both formats: space-separated or one word per line
|
|
362
|
+
const allWords = fileContent
|
|
363
|
+
.join(' ')
|
|
364
|
+
.split(/\s+/)
|
|
365
|
+
.filter((word) => word.length > 0);
|
|
366
|
+
if (allWords.length !== 12 && allWords.length !== 24) {
|
|
367
|
+
throw new Error(`Invalid mnemonic length in file: ${allWords.length} words. Must be 12 or 24 words.`);
|
|
368
|
+
}
|
|
369
|
+
const mnemonic = allWords.join(' ');
|
|
370
|
+
console.log(`š„ Loaded ${allWords.length}-word mnemonic from file`);
|
|
371
|
+
return mnemonic;
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
throw new Error(`Failed to load file '${args.load}': ${error instanceof Error ? error.message : String(error)}`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
throw new Error('No mnemonic provided');
|
|
378
|
+
}
|
|
379
|
+
function getDerivationIndices(args) {
|
|
380
|
+
const account = args.account !== undefined ? parseInt(String(args.account)) : 0;
|
|
381
|
+
const change = args.change !== undefined ? parseInt(String(args.change)) : 0;
|
|
382
|
+
const address = args.address !== undefined ? parseInt(String(args.address)) : 0;
|
|
383
|
+
return { account, change, address };
|
|
384
|
+
}
|
|
385
|
+
function getFormats(args) {
|
|
386
|
+
if (args.format) {
|
|
387
|
+
return args.format.split(',').map((f) => f.trim());
|
|
388
|
+
}
|
|
389
|
+
// Default formats
|
|
390
|
+
switch (args.chain) {
|
|
391
|
+
case 'bitcoin':
|
|
392
|
+
return ['native'];
|
|
393
|
+
case 'ethereum':
|
|
394
|
+
case 'solana':
|
|
395
|
+
case 'tron':
|
|
396
|
+
return ['native'];
|
|
397
|
+
case 'nostr':
|
|
398
|
+
return ['hex'];
|
|
399
|
+
default:
|
|
400
|
+
return ['native'];
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
async function main() {
|
|
404
|
+
try {
|
|
405
|
+
const parser = createParser();
|
|
406
|
+
const args = parser.parse(process.argv.slice(2));
|
|
407
|
+
// Handle tab completion
|
|
408
|
+
const env = tabtab.parseEnv(process.env);
|
|
409
|
+
if (env.complete) {
|
|
410
|
+
return await setupCompletion(env);
|
|
411
|
+
}
|
|
412
|
+
// Handle install/uninstall commands
|
|
413
|
+
const command = args._positional;
|
|
414
|
+
if (command === 'install') {
|
|
415
|
+
return await installCompletion();
|
|
416
|
+
}
|
|
417
|
+
if (command === 'uninstall') {
|
|
418
|
+
return await uninstallCompletion();
|
|
419
|
+
}
|
|
420
|
+
// Show help if no arguments provided
|
|
421
|
+
if (process.argv.length <= 2) {
|
|
422
|
+
showHelp();
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
// Validate arguments
|
|
426
|
+
validateArguments(args);
|
|
427
|
+
// Load and validate mnemonic
|
|
428
|
+
const mnemonic = loadMnemonic(args);
|
|
429
|
+
console.log('š Validating mnemonic phrase...');
|
|
430
|
+
if (!(0, core_1.validateMnemonic)(mnemonic)) {
|
|
431
|
+
throw new Error('Invalid BIP39 mnemonic phrase');
|
|
432
|
+
}
|
|
433
|
+
console.log('ā
Valid BIP39 mnemonic');
|
|
434
|
+
// Get derivation parameters
|
|
435
|
+
const { account, change, address } = getDerivationIndices(args);
|
|
436
|
+
const formats = getFormats(args);
|
|
437
|
+
const passphrase = args.passphrase || '';
|
|
438
|
+
console.log(`\nš DERIVING ${args.chain.toUpperCase()} KEYS`);
|
|
439
|
+
console.log('='.repeat(50));
|
|
440
|
+
const coinTypes = {
|
|
441
|
+
bitcoin: 0,
|
|
442
|
+
ethereum: 60,
|
|
443
|
+
solana: 501,
|
|
444
|
+
tron: 195,
|
|
445
|
+
nostr: 1237
|
|
446
|
+
};
|
|
447
|
+
const coinType = coinTypes[args.chain] || 0;
|
|
448
|
+
console.log(`š Derivation path: m/44'/${coinType}'/${account}'/${change}/${address}`);
|
|
449
|
+
console.log(`šÆ Format(s): ${formats.join(', ')}`);
|
|
450
|
+
if (passphrase) {
|
|
451
|
+
console.log(`š Using passphrase: [${passphrase.length} characters]`);
|
|
452
|
+
}
|
|
453
|
+
const results = [];
|
|
454
|
+
// Derive keys for each format
|
|
455
|
+
for (const format of formats) {
|
|
456
|
+
try {
|
|
457
|
+
let result;
|
|
458
|
+
switch (args.chain) {
|
|
459
|
+
case 'bitcoin':
|
|
460
|
+
result = (0, core_1.deriveKeyFromMnemonic)({
|
|
461
|
+
mnemonic,
|
|
462
|
+
chain: 'bitcoin',
|
|
463
|
+
format: format,
|
|
464
|
+
passphrase,
|
|
465
|
+
accountIndex: account,
|
|
466
|
+
changeIndex: change,
|
|
467
|
+
addressIndex: address
|
|
468
|
+
});
|
|
469
|
+
break;
|
|
470
|
+
case 'ethereum':
|
|
471
|
+
result = (0, core_1.deriveKeyFromMnemonic)({
|
|
472
|
+
mnemonic,
|
|
473
|
+
chain: 'ethereum',
|
|
474
|
+
format: format,
|
|
475
|
+
passphrase,
|
|
476
|
+
accountIndex: account,
|
|
477
|
+
changeIndex: change,
|
|
478
|
+
addressIndex: address
|
|
479
|
+
});
|
|
480
|
+
break;
|
|
481
|
+
case 'solana':
|
|
482
|
+
result = (0, core_1.deriveKeyFromMnemonic)({
|
|
483
|
+
mnemonic,
|
|
484
|
+
chain: 'solana',
|
|
485
|
+
format: format,
|
|
486
|
+
passphrase,
|
|
487
|
+
accountIndex: account,
|
|
488
|
+
changeIndex: change,
|
|
489
|
+
addressIndex: address
|
|
490
|
+
});
|
|
491
|
+
break;
|
|
492
|
+
case 'tron':
|
|
493
|
+
result = (0, core_1.deriveKeyFromMnemonic)({
|
|
494
|
+
mnemonic,
|
|
495
|
+
chain: 'tron',
|
|
496
|
+
format: format,
|
|
497
|
+
passphrase,
|
|
498
|
+
accountIndex: account,
|
|
499
|
+
changeIndex: change,
|
|
500
|
+
addressIndex: address
|
|
501
|
+
});
|
|
502
|
+
break;
|
|
503
|
+
case 'nostr':
|
|
504
|
+
result = (0, core_1.deriveKeyFromMnemonic)({
|
|
505
|
+
mnemonic,
|
|
506
|
+
chain: 'nostr',
|
|
507
|
+
format: format,
|
|
508
|
+
passphrase,
|
|
509
|
+
accountIndex: account,
|
|
510
|
+
changeIndex: change,
|
|
511
|
+
addressIndex: address
|
|
512
|
+
});
|
|
513
|
+
break;
|
|
514
|
+
default:
|
|
515
|
+
throw new Error(`Unsupported chain: ${args.chain}`);
|
|
516
|
+
}
|
|
517
|
+
if (result) {
|
|
518
|
+
results.push(result);
|
|
519
|
+
console.log(`\nš ${format.toUpperCase()} Format:`);
|
|
520
|
+
if (result.address) {
|
|
521
|
+
console.log(` Address: ${result.address}`);
|
|
522
|
+
}
|
|
523
|
+
else {
|
|
524
|
+
// For Nostr, show the public key as the "address"
|
|
525
|
+
console.log(` Public Key: ${result.publicKey}`);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
catch (error) {
|
|
530
|
+
console.error(`ā Failed to derive ${format} keys: ${error instanceof Error ? error.message : String(error)}`);
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
console.log(`\nā
Successfully derived keys for ${results.length} format(s)`);
|
|
534
|
+
// Save to file if requested
|
|
535
|
+
if (args.save) {
|
|
536
|
+
try {
|
|
537
|
+
const output = [];
|
|
538
|
+
output.push(`BIP39 Keys - ${args.chain.toUpperCase()}`);
|
|
539
|
+
output.push(`Derivation Path: m/44'/${coinType}'/${account}'/${change}/${address}`);
|
|
540
|
+
output.push(`Generated: ${new Date().toISOString()}`);
|
|
541
|
+
output.push('');
|
|
542
|
+
for (const result of results) {
|
|
543
|
+
output.push(`=== ${result.format.toUpperCase()} Format ===`);
|
|
544
|
+
if (result.address) {
|
|
545
|
+
output.push(`Address: ${result.address}`);
|
|
546
|
+
}
|
|
547
|
+
else {
|
|
548
|
+
// For Nostr, show the public key as the "address"
|
|
549
|
+
output.push(`Public Key: ${result.publicKey}`);
|
|
550
|
+
}
|
|
551
|
+
output.push('');
|
|
552
|
+
}
|
|
553
|
+
(0, core_1.saveArrayToFile)(output, args.save);
|
|
554
|
+
console.log(`š¾ Results saved to: ${args.save}`);
|
|
555
|
+
}
|
|
556
|
+
catch (error) {
|
|
557
|
+
console.error(`ā ļø Failed to save to file '${args.save}': ${error instanceof Error ? error.message : String(error)}`);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
catch (error) {
|
|
562
|
+
console.error('ā Error:', error instanceof Error ? error.message : String(error));
|
|
563
|
+
process.exit(1);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
// Run if called directly
|
|
567
|
+
if (require.main === module) {
|
|
568
|
+
main().catch(console.error);
|
|
569
|
+
}
|
|
570
|
+
//# sourceMappingURL=bip39keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bip39keys.js","sourceRoot":"","sources":["../../../src/commands/bip39keys/bip39keys.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nostrbox/cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "CLI tool for NIP-05 operations and BIP39 zodiac seed phrase management using NostrBox core",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"publishConfig": {
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"bin": {
|
|
10
10
|
"nip05lookup": "./dist/commands/nip05/nip05lookup.js",
|
|
11
11
|
"nip05check": "./dist/commands/nip05/nip05check.js",
|
|
12
|
-
"bip39zodiac": "./dist/commands/bip39zodiac/bip39zodiac.js"
|
|
12
|
+
"bip39zodiac": "./dist/commands/bip39zodiac/bip39zodiac.js",
|
|
13
|
+
"bip39keys": "./dist/commands/bip39keys/bip39keys.js"
|
|
13
14
|
},
|
|
14
15
|
"files": [
|
|
15
16
|
"dist",
|
|
@@ -38,7 +39,7 @@
|
|
|
38
39
|
"author": "",
|
|
39
40
|
"license": "MIT",
|
|
40
41
|
"dependencies": {
|
|
41
|
-
"@nostrbox/core": "1.
|
|
42
|
+
"@nostrbox/core": "1.10.0",
|
|
42
43
|
"ora": "^8.2.0",
|
|
43
44
|
"tabtab": "^3.0.2"
|
|
44
45
|
},
|