DEV Community

ptcbink
ptcbink

Posted on

Generate Taproot address using mnemonic code

const ecc = require('tiny-secp256k1')
const { BIP32Factory } = require('bip32')
const bip32 = BIP32Factory(ecc)
const bip39 = require('bip39')
const bitcoin = require('bitcoinjs-lib')

const path = m/86'/0'/0'/0/0; // Path to first child of receiving wallet on first account
bitcoin.initEccLib(ecc);

let mnemonic = bip39.generateMnemonic()
const seed = bip39.mnemonicToSeedSync(mnemonic)
let rootKey = bip32.fromSeed(seed)

const childNode = rootKey.derivePath(path);
let node = childNode.derive(0).derive(0);

const toXOnly = pubKey => (pubKey.length === 32 ? pubKey : pubKey.slice(1, 33));

const childNodeXOnlyPubkey = toXOnly(childNode.publicKey);

const internalPubkey = childNodeXOnlyPubkey;

const { address, output } = bitcoin.payments.p2tr({
internalPubkey
});

console.log(`
Wallet generated:

  • Taproot Address: ${address},
  • Key: ${node.toWIF()},
  • Mnemonic: ${mnemonic} `)

Top comments (0)