/** * This script generates addresses given an account extended public key * Usage: edit these fields below and run it like `node generate-address.js` */ const assert = require('node:assert/strict'); const HDPublicKey = require('hsd/lib/hd/public'); const Address = require('hsd/lib/primitives/address'); const minimist = require('minimist'); const args = minimist(process.argv.slice(2)); const NETWORK = 'main'; const ACCOUNT_XPUB = args.xpub || 'xpub6BvF6DnLZRV6my62FuQ8nw5TRebL8qr9Wa7u2tE1aEedHWBt4XAfSaNTmP1SM2nXErGWSzxRAHVwqstPzRrsXtA2vn1a4KzLwAVEgLNmfca'; const START = parseInt(args.start || '0'); const NUMBER = parseInt(args.number || '1000'); const END = START + NUMBER - 1; // Toggle to display change addresses const DISPLAY_CHANGE = args.change || false; (() => { const account = HDPublicKey.fromBase58(ACCOUNT_XPUB, NETWORK); console.log('[*] Using account public key:', account.xpubkey(NETWORK)); console.log('[*] Generating addresses', START, 'to', END); assert(END >= START); if (DISPLAY_CHANGE) { for (let i = START; i <= END; i++) { /** @type {Buffer[]} */ const keys = [ account.derive(0).derive(i).publicKey, // receive account.derive(1).derive(i).publicKey, // change ]; for (const [branch, key] of keys.entries()) { const addr = Address.fromPubkey(key); console.log(addr.toString()); } } } else { for (let i = START; i <= END; i++) { /** @type {Buffer[]} */ const keys = [ account.derive(0).derive(i).publicKey, // receive ]; for (const [branch, key] of keys.entries()) { const addr = Address.fromPubkey(key); console.log(addr.toString()); } } } })();