UNPKG

@tatumio/tatum-v1

Version:

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

122 lines 8.69 kB
"use strict"; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareXrpSignedOffchainTransaction = exports.signXrpOffchainKMSTransaction = exports.sendXrpOffchainTransaction = void 0; const bignumber_js_1 = __importDefault(require("bignumber.js")); const ripple_lib_1 = require("ripple-lib"); const blockchain_1 = require("../blockchain"); const tatum_1 = require("../connector/tatum"); const model_1 = require("../model"); const common_1 = require("./common"); /** * Send Xrp transaction from Tatum Ledger account 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 or id of the withdrawal, if it was not cancelled automatically */ const sendXrpOffchainTransaction = async (testnet, body) => { await tatum_1.validateBody(body, model_1.TransferXrpOffchain); const { account, secret } = body, withdrawal = __rest(body, ["account", "secret"]); if (!withdrawal.fee) { withdrawal.fee = new bignumber_js_1.default((await blockchain_1.xrpGetFee()).drops.base_fee).dividedBy(1000000).toString(); } const acc = await blockchain_1.xrpGetAccountInfo(account); const { id } = await common_1.offchainStoreWithdrawal(withdrawal); const { amount, fee, address, } = withdrawal; let txData; try { txData = await exports.prepareXrpSignedOffchainTransaction(testnet, amount, address, secret, acc, fee, withdrawal.sourceTag, withdrawal.attr); } catch (e) { console.error(e); await common_1.offchainCancelWithdrawal(id); throw e; } try { return Object.assign(Object.assign({}, await common_1.offchainBroadcast({ txData, withdrawalId: id, currency: model_1.Currency.XRP })), { id }); } catch (e) { console.error(e); try { await common_1.offchainCancelWithdrawal(id); } catch (e1) { console.log(e); return { id }; } throw e; } }; exports.sendXrpOffchainTransaction = sendXrpOffchainTransaction; /** * Sign Xrp pending transaction from Tatum KMS * @param tx pending transaction from KMS * @param secret secret key to sign transaction with. * @returns transaction data to be broadcast to blockchain. */ const signXrpOffchainKMSTransaction = async (tx, secret) => { if (tx.chain !== model_1.Currency.XRP) { throw Error('Unsupported chain.'); } const rippleAPI = new ripple_lib_1.RippleAPI(); return rippleAPI.sign(tx.serializedTransaction, secret).signedTransaction; }; exports.signXrpOffchainKMSTransaction = signXrpOffchainKMSTransaction; /** * Sign Xrp transaction with private keys locally. Nothing is broadcast to the blockchain. * @param testnet mainnet or testnet version * @param amount amount to send * @param address recipient address * @param secret secret to sign transaction with * @param account Xrp source account * @param fee fee to pay * @param sourceTag source tag to include in transaction * @param destinationTag * @returns transaction data to be broadcast to blockchain. */ const prepareXrpSignedOffchainTransaction = async (testnet, amount, address, secret, account, fee, sourceTag, destinationTag) => { const currency = 'XRP'; const payment = { source: { address: account.account_data.Account, maxAmount: { currency, value: amount, }, tag: sourceTag, }, destination: { address, amount: { currency, value: amount, }, }, }; if (destinationTag) { payment.destination.tag = parseInt(destinationTag); } const rippleAPI = new ripple_lib_1.RippleAPI(); const prepared = await rippleAPI.preparePayment(account.account_data.Account, payment, { fee: `${fee}`, sequence: account.account_data.Sequence, maxLedgerVersion: (account.ledger_current_index || account.ledger_index) + 500, }); return (await rippleAPI.sign(prepared.txJSON, secret)).signedTransaction; }; exports.prepareXrpSignedOffchainTransaction = prepareXrpSignedOffchainTransaction; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29mZmNoYWluL3hycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGdFQUFvQztBQUNwQywyQ0FBb0M7QUFDcEMsOENBQTBEO0FBQzFELDhDQUErQztBQUMvQyxvQ0FBc0U7QUFDdEUscUNBQTZGO0FBRTdGOzs7Ozs7R0FNRztBQUNJLE1BQU0sMEJBQTBCLEdBQUcsS0FBSyxFQUFFLE9BQWdCLEVBQUUsSUFBeUIsRUFBRSxFQUFFO0lBQzVGLE1BQU0sb0JBQVksQ0FBQyxJQUFJLEVBQUUsMkJBQW1CLENBQUMsQ0FBQTtJQUM3QyxNQUFNLEVBQ0YsT0FBTyxFQUFFLE1BQU0sS0FDZixJQUFJLEVBRGdCLFVBQVUsVUFDOUIsSUFBSSxFQUZGLHFCQUVMLENBQU8sQ0FBQTtJQUNSLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2pCLFVBQVUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxzQkFBUyxDQUFDLENBQUMsTUFBTSxzQkFBUyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFBO0tBQ25HO0lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSw4QkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM1QyxNQUFNLEVBQUMsRUFBRSxFQUFDLEdBQUcsTUFBTSxnQ0FBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN0RCxNQUFNLEVBQ0YsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEdBQ3ZCLEdBQUcsVUFBVSxDQUFBO0lBRWQsSUFBSSxNQUFNLENBQUE7SUFDVixJQUFJO1FBQ0EsTUFBTSxHQUFHLE1BQU0sMkNBQW1DLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFD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