import { payments, initEccLib } from 'bitcoinjs-lib'; import * as ecc from '@bitcoinerlab/secp256k1'; import { digibyte, digibyteLegacyP2SH } from './network.js'; // Required for Taproot address derivation (P2TR). initEccLib(ecc); export function p2pkhAddress(node, network = digibyte) { const { address } = payments.p2pkh({ pubkey: Buffer.from(node.publicKey), network, }); if (!address) throw new Error('p2pkh derivation returned no address'); return address; } export function p2shP2wpkhAddress(node, network = digibyte) { const redeem = payments.p2wpkh({ pubkey: Buffer.from(node.publicKey), network, }); const { address } = payments.p2sh({ redeem, network }); if (!address) throw new Error('p2sh-p2wpkh derivation returned no address'); return address; } // Derive the "S..." (current DGB, scriptHash 0x3f) AND "3..." (legacy // Bitcoin-compatible, scriptHash 0x05) BIP49 addresses for the same // key. Ian Coleman's BIP39 tool and several older wallets generate the // legacy "3..." variant, so any seed-recovery scan must check both. export function p2shP2wpkhAddressesBoth(node) { return { modern: p2shP2wpkhAddress(node, digibyte), legacy: p2shP2wpkhAddress(node, digibyteLegacyP2SH), }; } export function p2wpkhAddress(node, network = digibyte) { const { address } = payments.p2wpkh({ pubkey: Buffer.from(node.publicKey), network, }); if (!address) throw new Error('p2wpkh derivation returned no address'); return address; } // BIP86 Taproot address using the x-only pubkey with no script tree, // which applies the standard BIP86 tweak internally in bitcoinjs-lib. export function p2trAddress(node, network = digibyte) { const internalPubkey = Buffer.from(node.publicKey.subarray(1, 33)); const { address } = payments.p2tr({ internalPubkey, network }); if (!address) throw new Error('p2tr derivation returned no address'); return address; } //# sourceMappingURL=address.js.map