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.
49 lines
1.4 KiB
TypeScript
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');
|