dgb-wallet/packages/core/scripts/derive-from-seed.ts
Digibyte.X d50286a9a5 DigiByte.X Wallet — recovery-first web wallet monorepo
Packages: core (BIP39/32/44/49/84/86 derivation, WIF), keystore (PBKDF2 +
AES-GCM), psbt, p2p (BIP157/158 SPV daemon, Dandelion++ broadcast with
relay-echo verification), blockbook, rpc, electrum, net, bns, web-ui
(React/Vite), mobile (Expo). ops/ holds the nginx vhost, systemd unit and
push.sh deploy script for digibyte.x/web.
2026-09-20 20:16:52 +02:00

49 lines
1.4 KiB
TypeScript

import {
generateSeedPhrase,
seedFromPhrase,
rootFromSeed,
accountNode,
addressNode,
p2pkhAddress,
p2shP2wpkhAddress,
p2wpkhAddress,
p2trAddress,
accountXpub,
PURPOSE_LABEL,
type Purpose,
} from '../src/index.js';
const args = process.argv.slice(2);
const phrase = args.length > 0 ? args.join(' ').trim() : generateSeedPhrase(128);
console.log('\n=== DigiByte HD Derivation Demo ===\n');
console.log(`Seed phrase (${phrase.split(/\s+/).length} words):`);
console.log(` ${phrase}\n`);
const seed = await seedFromPhrase(phrase);
const root = rootFromSeed(seed);
const specs: Array<{
purpose: Purpose;
deriver: (n: ReturnType<typeof addressNode>) => string;
}> = [
{ purpose: 44, deriver: p2pkhAddress },
{ purpose: 49, deriver: p2shP2wpkhAddress },
{ purpose: 84, deriver: p2wpkhAddress },
{ purpose: 86, deriver: p2trAddress },
];
for (const spec of specs) {
const acct = accountNode(root, spec.purpose, 0);
console.log(`── ${PURPOSE_LABEL[spec.purpose]}`);
console.log(` account xpub: ${accountXpub(acct)}`);
console.log(` first 3 receive addresses (m/${spec.purpose}'/20'/0'/0/*):`);
for (let i = 0; i < 3; i++) {
const key = addressNode(acct, 0, i);
console.log(` [${i}] ${spec.deriver(key)}`);
}
console.log();
}
console.log('Done. Cross-check any of these addresses against Ian Coleman');
console.log('iancoleman.io/bip39 with coin = "DGB - Digibyte" — they should match.\n');