UNPKG

@blockchain-api/bitcoin-js

Version:
122 lines 5.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.signTxOffline = exports.isValidAddress = exports.generateAddressFromXPub = exports.generatePrivateKeyFromMnemonic = exports.generateAddressFromPrivatekey = exports.generateAddressFromMnemonic = exports.generateWallet = void 0; const tslib_1 = require("tslib"); const bip39_1 = require("bip39"); const bip32_1 = require("bip32"); const bitcoinjs_lib_1 = require("bitcoinjs-lib"); const bitcore_lib_1 = require("bitcore-lib"); /** * Generate Bitcoin wallet * @param testnet testnet or mainnet version of address * @param mnemonic mnemonic seed to use * @returns wallet */ const generateWallet = (mnemonic, path, network) => (0, tslib_1.__awaiter)(void 0, void 0, void 0, function* () { const seedBuffer = yield (0, bip39_1.mnemonicToSeed)(mnemonic); const hdwallet = (0, bip32_1.fromSeed)(seedBuffer, network); const bip32Interface = hdwallet.derivePath(path); return { mnemonic: mnemonic, accountExtPubkey: bip32Interface.neutered().toBase58(), accountExtPrivatekey: bip32Interface.toBase58(), bip32ExtPubkey: bip32Interface.derive(0).neutered().toBase58(), bip32ExtPrivatekey: bip32Interface.derive(0).toBase58(), }; }); exports.generateWallet = generateWallet; /** * Generate Bitcoin address from mnemonic * @param testnet testnet or mainnet version of address * @param mnemonic mnemonic seed to use * @param i derivation index of address to generate. Up to 2^31 addresses can be generated. * @returns blockchain address */ const generateAddressFromMnemonic = (path, mnemonic, i, network) => (0, tslib_1.__awaiter)(void 0, void 0, void 0, function* () { const wallet = yield (0, exports.generateWallet)(mnemonic, path, network); const w = (0, bip32_1.fromBase58)(wallet.bip32ExtPubkey, network).derivePath(String(i)); return bitcoinjs_lib_1.payments.p2pkh({ pubkey: w.publicKey, network }).address; }); exports.generateAddressFromMnemonic = generateAddressFromMnemonic; /** * Convert Bitcoin Private Key to Address * @param testnet testnet or mainnet version of address * @param privkey private key to use * @returns blockchain address */ const generateAddressFromPrivatekey = (privkey, network) => { const keyPair = bitcoinjs_lib_1.ECPair.fromWIF(privkey, network); return bitcoinjs_lib_1.payments.p2pkh({ pubkey: keyPair.publicKey, network }).address; }; exports.generateAddressFromPrivatekey = generateAddressFromPrivatekey; /** * Generate Bitcoin private key from mnemonic seed * @param testnet testnet or mainnet version of address * @param mnemonic mnemonic to generate private key from * @param i derivation index of private key to generate. * @returns blockchain private key to the address */ const generatePrivateKeyFromMnemonic = (mnemonic, path, i, network) => (0, tslib_1.__awaiter)(void 0, void 0, void 0, function* () { return (0, bip32_1.fromSeed)(yield (0, bip39_1.mnemonicToSeed)(mnemonic), network) .derivePath(path) .derive(i) .toWIF(); }); exports.generatePrivateKeyFromMnemonic = generatePrivateKeyFromMnemonic; /** * Generate address from xpub * @param currency type of blockchain * @param testnet testnet or mainnet version of address * @param xpub extended public key to generate address from * @param i derivation index of address to generate. Up to 2^31 addresses can be generated. * @returns blockchain address */ const generateAddressFromXPub = (xpub, i, network) => { const w = (0, bip32_1.fromBase58)(xpub, network).derivePath(String(i)); return bitcoinjs_lib_1.payments.p2pkh({ pubkey: w.publicKey, network }).address; }; exports.generateAddressFromXPub = generateAddressFromXPub; /** * Check bitcoin address is valid * @param testnet testnet or mainnet version of address * @param address bitcoin address * @returns true || false */ const isValidAddress = (address, network) => { try { bitcoinjs_lib_1.address.toOutputScript(address, network); return true; } catch (error) { return false; } }; exports.isValidAddress = isValidAddress; /** * Sign bitcoin tx offline * @param testnet testnet or mainnet version of address * @param outputs transaction outputs * @param privateKey sender private key * @param toAddress receiver * @param valueInBtc valut in btc * @returns rawTx */ const signTxOffline = (outputs, privateKey, toAddress, value, network, changeAddress) => { const utxos = outputs.map(x => { return new bitcore_lib_1.Transaction.UnspentOutput({ txId: x.txHash, outputIndex: x.index, script: x.script, satoshis: x.value }); }); const tx = new bitcore_lib_1.Transaction() .from(utxos) .to(toAddress, value) .change(changeAddress || (0, exports.generateAddressFromPrivatekey)(privateKey, network)) .sign(privateKey); tx.verify(); return tx.serialize(); }; exports.signTxOffline = signTxOffline; //# sourceMappingURL=index.js.map