@fireblocks/psbt-sdk
Version:
SDK for signing Partially Signed Bitcoin Transactions (PSBTs) using Fireblocks
89 lines • 4.01 kB
JavaScript
;
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