UNPKG

bitgesell-bitcoinjs

Version:
102 lines (90 loc) 3.82 kB
// import { BITGESELL_MAINNET } from 'bitgesell-bitcoinjs'; import { BITGESELL_MAINNET } from './../index.js'; import { payments as Payments, address as Address, Psbt, Transaction } from 'bitcoinjs-lib'; // eslint-disable-line n/no-extraneous-import import ECPairFactory from 'ecpair'; import ecc from '@bitcoinerlab/secp256k1'; import { randomBytes } from 'crypto'; import BIP32Factory from 'bip32'; import * as bip39 from 'bip39'; const ECPair = ECPairFactory(ecc); /* START CREATE A RANDOM WALLET */ const rng = (size) => randomBytes(size); const keyPair = ECPair.makeRandom({ network: BITGESELL_MAINNET, rng }); const paymentsRandom = Payments.p2wpkh({ network: BITGESELL_MAINNET, pubkey: Buffer.from(keyPair.publicKey), }); console.info('public address:', paymentsRandom.address); /* END CREATE A RANDOM WALLET */ /* START IMPORT WALLET FROM WIF */ const keyPair2 = ECPair.fromWIF('L2ScZnHCser7xN1FsJtc4eR1icDtmwJfqgK3q2XUwb3nmbMEDYkw', BITGESELL_MAINNET); const paymentFromWif = Payments.p2wpkh({ network: BITGESELL_MAINNET, pubkey: Buffer.from(keyPair2.publicKey), }); console.info('public address from wif:', paymentFromWif.address); // bgl1q8j64v07nhzgs4rwyrv664zd4vx70xk7fe25npf /* START IMPORT WALLET FROM WIF */ /* START CREATE WALLET FROM SEED PHRASE */ const mnemonic = bip39.generateMnemonic(256); console.info('seed:', mnemonic); const seed = bip39.mnemonicToSeedSync(mnemonic); const bip32 = BIP32Factory(ecc); const root = bip32.fromSeed(seed, BITGESELL_MAINNET); const path = 'm/84\'/0\'/0\'/0/0'; const child = root.derivePath(path); const paymentsFromSeed = Payments.p2wpkh({ network: BITGESELL_MAINNET, pubkey: Buffer.from(child.publicKey), }); console.info('public address from seed:', paymentsFromSeed.address); // bgl1q... /* START CREATE WALLET FROM SEED PHRASE */ /* START VALIDATE ADDRESS */ const isValidAddress = (address) => { try { Address.toOutputScript(address, BITGESELL_MAINNET); return true; } catch { return false; } }; isValidAddress(paymentsFromSeed.address) ? console.info('valid address') : console.info('invalid address'); /* END VALIDATE ADDRESS */ /* START SIGN A P2WPKH TRANSACTION */ const psbt = new Psbt({ network: BITGESELL_MAINNET }); const utxoValue = 100000000; psbt.addInput({ hash: '3d2e4113a0a2bb94aed0eef1e7a21a8d6dbda399b048330cb55853befe82a8ed', index: 0, witnessUtxo: { script: paymentFromWif.output, value: utxoValue, }, }); psbt.addOutput({ address: 'bgl1q8j64v07nhzgs4rwyrv664zd4vx70xk7fe25npf', value: utxoValue - 10000, }); psbt.signInput(0, keyPair2); psbt.finalizeAllInputs(); const rawTx = psbt.extractTransaction().toHex(); console.info('signed transaction hex:', rawTx); // 02000000000101eda882febe5358b50c3348b099a3bd6d8d1aa2e7f1eed0ae94bba2a013412e3d0000000000ffffffff01f0b9f505000000001600143cb5563fd3b8910a8dc41b35aa89b561bcf35bc90247304402206234c5da64fa641b4ebbb41b770fbc8241080d02ff44f8d22d1464f3106faf3902206c62c894e7ecd4cbbf6d0948a386a6a5cdf041a478389d2b0b88876036088ab70121027547ee264c57d4caa64084fe7f472158ce6ff3d893f04fcc492fa14674f22ee300000000 /* END SIGN A P2WPKH TRANSACTION */ const tx = Transaction.fromHex(rawTx); console.log('tx:', tx); console.log('TXID:', tx.getId()); console.log('Version:', tx.version); console.log('Locktime:', tx.locktime); tx.ins.forEach((input, i) => { console.log(`Input ${i}:`); console.log('- txid:', Buffer.from(input.hash).reverse().toString('hex')); console.log('- vout:', input.index); console.log('- scriptSig:', input.script.toString('hex')); console.log('- sequence:', input.sequence); console.log(`Witness for input ${i}:`, input.witness.map((w) => w.toString('hex'))); }); tx.outs.forEach((output, i) => { console.log(`Output ${i}:`); console.log('- value (satoshi):', output.value); console.log('- scriptPubKey:', output.script.toString('hex')); });