Post
Topic
Board Bahasa Indonesia (Indonesian)
Merits 5 from 1 user
Re: BITCOIN CORE
by
punk.zink
on 12/03/2024, 16:40:06 UTC
⭐ Merited by Husna QA (5)
Buat siapa saja yang barangkali ingin ber-eksperimen dengan Master/Root/Parent Extended Private Key pada sebuah Descriptor Wallet, dan apa saja yang bisa diturunkan dari Extended Private Key, dan tidak perlu melibatkan online tool yang mungkin bisa tanpa sengaja mengekspos kerahasian dari Key tersebut.

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

Code:
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/