UNPKG

@fireblocks/psbt-sdk

Version:

SDK for signing Partially Signed Bitcoin Transactions (PSBTs) using Fireblocks

89 lines 4.01 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const dotenv_1 = require("dotenv"); (0, dotenv_1.config)(); const bitcoin = __importStar(require("bitcoinjs-lib")); const secp256k1_1 = __importDefault(require("@bitcoinerlab/secp256k1")); bitcoin.initEccLib(secp256k1_1.default); const src_1 = require("./src"); const utils_1 = require("./test/utils"); // UTXO object for example const utxo = { txid: "0f47094cde3fcc168ed97365a7cb3996ad5706fff03e7403e74ffd7a922025d4", // Prev txHash vout: 1, // Output index value: 82477, // UTXO total amount scriptPubKey: "001495f6fbf9976938f6bffc646adf8b54a8f70620eb", address: "bc1qjhm0h7vhdyu0d0luv34dlz654rmsvg8twywk99", // Prev Raw Transaction Hex rawTxHex: "010000000001013d748fd72dcd58e0360a87dbddf199037309fc1710c7dfb446d90ea7c1539d9e0000000000ffffffff0270170000000000001600141260be23854cdf7055ac79ae22394155cbbe85b92d4201000000000016001495f6fbf9976938f6bffc646adf8b54a8f70620eb02473044022015ee83612db1606eaaec5e7a55ffb0eedd656a8499bd8995162bf18c9c62fe7b02201159d354c9f1020fbb9cb8bb1442c9dc4e1a6ca606b4227c1ebb13a2ade0a8ed012103abc06e1d06f7326648a0cf776af544eaedcc243f8a3f5278b78a3e90b617a0e400000000", }; const destinationAddress = "bc1q4g8f6nwu7xqhgt86pj98dmv42np22a747045n4"; const amountToSend = 30000; const fee = 1000; async function createPsbt(utxo, destinationAddress, amountToSend, fee) { // Instantiate Fireblocks PsbtSigner const psbtSigner = await src_1.PsbtSigner.create({ fireblocks: { apiKey: process.env.FIREBLOCKS_API_KEY, secretKey: process.env.FIREBLOCKS_API_SECRET, }, assetId: "BTC", //BTC_TEST for testnet vaultId: "0", // Fireblocks Vault Account ID }); // Mainnet -> for testnet: bitcoin.networks.testnet const network = bitcoin.networks.bitcoin; const psbt = new bitcoin.Psbt({ network }); // Add UTXO to consume psbt.addInput({ hash: utxo.txid, index: utxo.vout, nonWitnessUtxo: Buffer.from(utxo.rawTxHex, "hex"), }); // Add destination output psbt.addOutput({ address: destinationAddress, value: amountToSend, }); // Add change output if relevant const change = utxo.value - amountToSend - fee; if (change > 0) { psbt.addOutput({ address: utxo.address, value: change, }); } // Sign PSBT with Fireblocks await psbtSigner.signPsbt(psbt); // Validate signatures, finalize all inputs and get the Raw Transaction Hex console.log("Validate Signatures:", psbt.validateSignaturesOfAllInputs(utils_1.signatureValidator)); psbt.finalizeAllInputs(); console.log("Final Tx:", psbt.extractTransaction().toHex()); } createPsbt(utxo, destinationAddress, amountToSend, fee); //# sourceMappingURL=example.js.map