UNPKG

@tatumio/tatum-v1

Version:

Tatum API client allows browsers and Node.js clients to interact with Tatum API.

117 lines 10.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.sendLitecoinTransaction = exports.prepareLitecoinSignedTransaction = exports.signLitecoinKMSTransaction = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); // @ts-ignore const bitcore_lib_ltc_1 = require("bitcore-lib-ltc"); const blockchain_1 = require("../blockchain"); const tatum_1 = require("../connector/tatum"); const model_1 = require("../model"); const TransferBtcLtcBlockchain_1 = require("../model/request/TransferBtcLtcBlockchain"); /** * Prepare a signed Ltc transaction with the private key locally. Nothing is broadcasted to the blockchain. * @returns raw transaction data in hex, to be broadcasted to blockchain. */ const prepareSignedTransaction = async (body) => { var _a, _b; await tatum_1.validateBody(body, TransferBtcLtcBlockchain_1.TransferBtcLtcBlockchain); const { fromUTXO, fromAddress, to } = body; const tx = new bitcore_lib_ltc_1.Transaction(); const privateKeysToSign = []; if (fromAddress) { for (const item of fromAddress) { const txs = await blockchain_1.ltcGetTxForAccount(item.address); for (const t of txs) { for (const [i, o] of t.outputs.entries()) { if (o.address !== item.address) { continue; } try { await blockchain_1.ltcGetUTXO(t.hash, i); tx.from({ txId: t.hash, outputIndex: i, script: bitcore_lib_ltc_1.Script.fromAddress(item.address).toString(), satoshis: Number(new bignumber_js_1.default(o.value).multipliedBy(100000000).toFixed(8, bignumber_js_1.default.ROUND_FLOOR)), }); privateKeysToSign.push(item.signatureId || item.privateKey); } catch (e) { console.error(e.toString()); } } } } } else if (fromUTXO) { for (const item of fromUTXO) { const t = await blockchain_1.ltcGetTransaction(item.txHash); const address = t.outputs ? t.outputs[item.index].address : (_a = t.vout) === null || _a === void 0 ? void 0 : _a[item.index].scriptPubKey.addresses[0]; const value = t.outputs ? t.outputs[item.index].value : ((_b = t.vout) === null || _b === void 0 ? void 0 : _b[item.index].value) || 0; tx.from({ txId: item.txHash, outputIndex: item.index, script: bitcore_lib_ltc_1.Script.fromAddress(address).toString(), satoshis: Number(new bignumber_js_1.default(value).multipliedBy(100000000).toFixed(8, bignumber_js_1.default.ROUND_FLOOR)), }); privateKeysToSign.push(item.signatureId || item.privateKey); } } for (const item of to) { tx.to(item.address, Number(new bignumber_js_1.default(item.value).multipliedBy(100000000).toFixed(8, bignumber_js_1.default.ROUND_FLOOR))); } if (body.changeAddress && body.fee) { tx.change(body.changeAddress); tx.fee(Number(new bignumber_js_1.default(body.fee).multipliedBy(100000000).toFixed(8, bignumber_js_1.default.ROUND_FLOOR))); } if ((fromAddress && fromAddress[0].signatureId) || (fromUTXO && fromUTXO[0].signatureId)) { return JSON.stringify({ txData: JSON.stringify(tx), privateKeysToSign }); } for (const item of privateKeysToSign) { tx.sign(bitcore_lib_ltc_1.PrivateKey.fromWIF(item)); } return tx.serialize(true); }; /** * Sign Litecoin pending transaction from Tatum KMS * @param tx pending transaction from KMS * @param privateKeys private keys to sign transaction with. * @param testnet mainnet or testnet version * @returns transaction data to be broadcast to blockchain. */ const signLitecoinKMSTransaction = async (tx, privateKeys, testnet) => { if (tx.chain !== model_1.Currency.LTC) { throw Error('Unsupported chain.'); } const builder = new bitcore_lib_ltc_1.Transaction(JSON.parse(tx.serializedTransaction)); for (const privateKey of privateKeys) { builder.sign(bitcore_lib_ltc_1.PrivateKey.fromWIF(privateKey)); } return builder.serialize(true); }; exports.signLitecoinKMSTransaction = signLitecoinKMSTransaction; /** * Sign Litcoin transaction with private keys locally. Nothing is broadcast to the blockchain. * @param testnet mainnet or testnet version * @param body content of the transaction to broadcast * @returns transaction data to be broadcast to blockchain. */ const prepareLitecoinSignedTransaction = async (testnet, body) => { return prepareSignedTransaction(body); }; exports.prepareLitecoinSignedTransaction = prepareLitecoinSignedTransaction; /** * Send Litecoin transaction to the blockchain. This method broadcasts signed transaction to the blockchain. * This operation is irreversible. * @param testnet mainnet or testnet version * @param body content of the transaction to broadcast * @returns transaction id of the transaction in the blockchain */ const sendLitecoinTransaction = async (testnet, body) => { return blockchain_1.ltcBroadcast(await exports.prepareLitecoinSignedTransaction(testnet, body)); }; exports.sendLitecoinTransaction = sendLitecoinTransaction; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGl0ZWNvaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHJhbnNhY3Rpb24vbGl0ZWNvaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0VBQW9DO0FBQ3BDLGFBQWE7QUFDYixxREFBaUU7QUFDakUsOENBQStGO0FBQy9GLDhDQUFpRDtBQUNqRCxvQ0FBaUU7QUFDakUsd0ZBQXFGO0FBRXJGOzs7R0FHRztBQUNILE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUFFLElBQThCLEVBQUUsRUFBRTs7SUFDeEUsTUFBTSxvQkFBWSxDQUFDLElBQUksRUFBRSxtREFBd0IsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQTtJQUMxQyxNQUFNLEVBQUUsR0FBRyxJQUFJLDZCQUFXLEVBQUUsQ0FBQTtJQUU1QixNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQTtJQUM1QixJQUFJLFdBQVcsRUFBRTtRQUNmLEtBQUssTUFBTSxJQUFJLElBQUksV0FBVyxFQUFFO1lBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sK0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1lBQ2xELEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFO2dCQUNuQixLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUssQ0FBQyxDQUFDLE9BQTBCLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQzVELElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUM5QixTQUFRO3FCQUNUO29CQUNELElBQUk7d0JBQ0YsTUFBTSx1QkFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7d0JBQzNCLEVBQUUsQ0FBQyxJQUFJLENBQUM7NEJBQ04sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJOzRC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