UNPKG

@tatumio/tatum-v1

Version:

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

77 lines 5.72 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareXrpSignedTransaction = exports.signXrpKMSTransaction = exports.sendXrpTransaction = 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"); /** * Send Xrp transaction to the blockchain. This method broadcasts signed transaction to the blockchain. * This operation is irreversible. * @param body content of the transaction to broadcast * @returns transaction id of the transaction in the blockchain */ const sendXrpTransaction = async (body) => { return blockchain_1.xrpBroadcast(await exports.prepareXrpSignedTransaction(body)); }; exports.sendXrpTransaction = sendXrpTransaction; /** * 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 signXrpKMSTransaction = 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.signXrpKMSTransaction = signXrpKMSTransaction; /** * Sign Xrp transaction with private keys locally. Nothing is broadcast to the blockchain. * @param body content of the transaction to broadcast * @returns transaction data to be broadcast to blockchain. */ const prepareXrpSignedTransaction = async (body) => { await tatum_1.validateBody(body, model_1.TransferXrp); const { fromAccount, fromSecret, to, amount, fee, sourceTag, destinationTag, } = body; const f = fee ? fee : new bignumber_js_1.default((await blockchain_1.xrpGetFee()).drops.base_fee).dividedBy(1000000).toString(); const payment = { source: { address: fromAccount, maxAmount: { currency: 'XRP', value: amount, }, tag: sourceTag, }, destination: { address: to, amount: { currency: 'XRP', value: amount, }, tag: destinationTag, }, }; const accountInfo = await blockchain_1.xrpGetAccountInfo(fromAccount); const sequence = accountInfo.account_data.Sequence; const maxLedgerVersion = (accountInfo.ledger_current_index || accountInfo.ledger_index) + 500; const rippleAPI = new ripple_lib_1.RippleAPI(); const prepared = await rippleAPI.preparePayment(fromAccount, payment, { fee: f, sequence, maxLedgerVersion, }); const signed = await rippleAPI.sign(prepared.txJSON, fromSecret); return signed.signedTransaction; }; exports.prepareXrpSignedTransaction = prepareXrpSignedTransaction; // TODO: add support for ModifyAccount and TrustLine //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHJwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3hycC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxnRUFBb0M7QUFDcEMsMkNBQW9DO0FBRXBDLDhDQUF3RTtBQUN4RSw4Q0FBK0M7QUFDL0Msb0NBQThEO0FBRTlEOzs7OztHQUtHO0FBQ0ksTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsSUFBaUIsRUFBRSxFQUFFO0lBQzFELE9BQU8seUJBQVksQ0FBQyxNQUFNLG1DQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDaEUsQ0FBQyxDQUFBO0FBRlksUUFBQSxrQkFBa0Isc0JBRTlCO0FBRUQ7Ozs7O0dBS0c7QUFDSSxNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxFQUFrQixFQUFFLE1BQWMsRUFBRSxFQUFFO0lBQzlFLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxnQkFBUSxDQUFDLEdBQUcsRUFBRTtRQUMzQixNQUFNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0tBQ3BDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxFQUFFLENBQUE7SUFDakMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQTtBQUM3RSxDQUFDLENBQUE7QUFOWSxRQUFBLHFCQUFxQix5QkFNakM7QUFFRDs7OztHQUlHO0FBQ0ksTUFBTSwyQkFBMkIsR0FBRyxLQUFLLEVBQUUsSUFBaUIsRUFBRSxFQUFFO0lBQ25FLE1BQU0sb0JBQVksQ0FBQyxJQUFJLEVBQUUsbUJBQVcsQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sRUFDRixXQUFXLEVBQ1gsVUFBVSxFQUNWLEVBQUUsRUFDRixNQUFNLEVBQ04sR0FBRyxFQUNILFNBQVMsRUFDVCxjQUFjLEdBQ2pCLEdBQUcsSUFBSSxDQUFBO0lBRVIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksc0JBQVMsQ0FBQyxDQUFDLE1BQU0sc0JBQVMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNyRyxNQUFNLE9BQU8sR0FBWTtRQUNyQixNQUFNLEVBQUU7WUFDSixPQUFPLEVBQUUsV0FBVztZQUNwQixTQUFTLEVBQUU7Z0JBQ1AsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsS0FBSyxFQUFFLE1BQU07YUFDaEI7WUFDRCxHQUFHLEVBQUUsU0FBUztTQUNqQjtRQUNELFdBQVcsRUFBRTtZQUNULE9BQU8sRUFBRSxFQUFFO1lBQ1gsTUFBTSxFQUFFO2dCQUNKLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxNQUFNO2FBQ2hCO1lBQ0QsR0FBRyxFQUFFLGNBQWM7U0FDdEI7S0FDSixDQUFBO0lBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSw4QkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUN4RCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQTtJQUNsRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsV0FBVyxDQUFDLG9CQUFvQixJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUE7SUFDN0YsTUFBTSxTQUFTLEdBQUcsSUFBSSxzQkFBUyxFQUFFLENBQUE7SUFDakMsTUFBTSxRQUFRLEdBQUcsTUFBTSxTQUFTLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7UUFDbEUsR0FBRyxFQUFFLENBQUM7UUFDTixRQUFRO1FBQ1IsZ0JBQWdCO0tBQ25CLENBQUMsQ0FBQTtJQUNGLE1BQU0sTUFBTSxHQUFHLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ2hFLE9BQU8sTUFBTSxDQUFDLGlCQUFpQixDQUFBO0FBQ25DLENBQUMsQ0FBQTtBQTFDWSxRQUFBLDJCQUEyQiwrQkEwQ3ZDO0FBRUQsb0RBQW9EIn0=