feat: BIP-39 master seed for unified key derivation

Replace fragmented random key generation with a single 24-word BIP-39
mnemonic that deterministically derives all node keys: Ed25519 (DID),
secp256k1 (Nostr/Bitcoin), BIP-84 xprv (Bitcoin Core), and LND aezeed
entropy. New onboarding flow: seed generate → word verification → identity
naming. Restore path enabled via 24-word entry. Includes seed RPC handlers,
mock backend support, LND/Bitcoin Core wallet-from-seed integration, and
UI polish across settings and discover views.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-31 01:41:24 +01:00
parent 5da9e217e6
commit 19dcfd4f31
50 changed files with 2200 additions and 258 deletions

View File

@@ -917,6 +917,31 @@ app.post('/rpc/v1', (req, res) => {
return res.json({ result: { valid: true } })
}
// BIP-39 seed management (mock for dev mode)
case 'seed.generate': {
const mockWords = [
'abandon', 'ability', 'able', 'about', 'above', 'absent',
'absorb', 'abstract', 'absurd', 'abuse', 'access', 'accident',
'account', 'accuse', 'achieve', 'acid', 'acoustic', 'acquire',
'across', 'act', 'action', 'actor', 'actress', 'actual'
]
return res.json({ result: { words: mockWords } })
}
case 'seed.verify': {
const mockDid = 'did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH'
return res.json({ result: { verified: true, did: mockDid, nostr_npub: 'npub1mock...' } })
}
case 'seed.restore': {
const mockDid = 'did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH'
return res.json({ result: { did: mockDid, nostr_npub: 'npub1mock...', restored: true } })
}
case 'seed.save-encrypted': {
return res.json({ result: { saved: true } })
}
case 'seed.status': {
return res.json({ result: { has_seed: true, is_legacy: false, identity_count: 1, next_index: 1 } })
}
case 'node.createBackup': {
const { passphrase } = params || {}
if (!passphrase) {