Bahan
- Node JS
- bitcoinjs-lib (npm install bitcoinjs-lib)
- BIP32 Library (npm install bip32)
- tiny-secp256k1 Library (npm install tiny-secp256k1)
Contoh: Diketahui
- Master (Parent) Extended PrivKey xprv9s21ZrQH143K3bSA5miskqop4mNKY86YEpasxCaEwuxyFdJPr5UaqJo3hLBhz91wAQaXZ6hpLE6 eEL9qJW7obcWCgpNurQjtqKhqo8TurVA
- hdkeypath dari address 12SSJ6zg8LdosJ3J6YuyRa1b36Q5V5dEgF adalah m/44h/0h/0h/0/7
Informasi yang dicari:
1. Account Extended PrivKey (BIP44)
2. External Extended PrivKey (BIP44)
3. WIF dari address 12SSJ6zg8LdosJ3J6YuyRa1b36Q5V5dEgF
4. Bech32 Address pada Index 0
5. WIF dari Bech32 Address pada Index 0
Implementasi
- Tuliskan script dibawah pada notepad (notepad++) lalu save sebagai file javascript (contoh : btc.js)
- Buka CMD dan arahkan ke directory dimana file btc.js tersimpan
- Untuk eksekusi ketikan perintah: node btc.js
const bitcoin = require('bitcoinjs-lib');
const ecc = require('tiny-secp256k1');
const { BIP32Factory } = require('bip32');
const bip32 = BIP32Factory(ecc);
const ParentXPriv = 'xprv9s21ZrQH143K3bSA5miskqop4mNKY86YEpasxCaEwuxyFdJPr5UaqJo3hLBhz91wAQaXZ6hpLE6eEL9qJW7obcWCgpNurQjtqKhqo8TurVA';
const RootKey = bip32.fromBase58(ParentXPriv);
const AccPath = "m/44'/0'/0'";
const AccChild = RootKey.derivePath(AccPath);
const AccXPriv = AccChild.toBase58();
const BIP32Path = "m/44'/0'/0'/0";
const BIP32Child = RootKey.derivePath(BIP32Path);
const BIP32XPriv = BIP32Child.toBase58();
const path44index7 = "m/44'/0'/0'/0/7";
const child44index7 = RootKey.derivePath(path44index7);
const Wif44index7 = child44index7.toWIF();
const path84index0 = "m/84'/0'/0'/0/0";
const child84index0 = RootKey.derivePath(path84index0);
const Wif84index0 = child84index0.toWIF();
const { address } = bitcoin.payments.p2wpkh({ pubkey: child84index0.publicKey });
console.log('Account Xpriv: ' + AccXPriv);
console.log('BIP32 Xpriv: ' + BIP32XPriv);
console.log('WIF-P2PKH (index 7): ' + Wif44index7);
console.log('Bech32 (index 0): ' + address);
console.log('WIF-Bech32 (index 0): ' + Wif84index0);
Hasil
1. Account Xpriv: xprv9yqe8W1KziZ2BEFMfL45x5eiHpj84E1Yce5RGoiL54hSEfwAaFjX3AP9TYPH35F3ynJ53cd3PcR S5JdGHvt7ieJNPB7NzZQCYJRPm1XCoJF
2. BIP32 Xpriv: xprv9zcbkKJTo7aLJuqZpjuASWgSHLU1QsYdksW9TbnpQ8X1XdvSihkpzczH3ehvRJeif2ZciXfwr4d DbnK6TUJyBEjYdBneAuF6CvrGVY5yKKK
3. WIF-P2PKH (index 7): Kx1GJD4GtvPe75Lc6ab46PaKkPdbGqMHvftsMNozc2mZ6BtM7TV3
4. Bech32 (index 0): bc1qykxygnu6xpes9jaedukqk7npxshq70hhy4t948
5. WIF-Bech32 (index 0): L2YoRF9rJ6JbFsFio3SStQtpdhAuXwf9h9CDejKYNJRbmHPbWpCG
Untuk komparasi, hasilnya bisa dibandingkan dengan https://iancoleman.io/bip39/