@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
103 lines • 8.45 kB
JavaScript
;
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;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.prepareXlmSignedOffchainTransaction = exports.signXlmOffchainKMSTransaction = exports.sendXlmOffchainTransaction = void 0;
const stellar_sdk_1 = require("stellar-sdk");
const blockchain_1 = require("../blockchain");
const tatum_1 = require("../connector/tatum");
const model_1 = require("../model");
const common_1 = require("./common");
/**
* Send Stellar 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 sendXlmOffchainTransaction = async (testnet, body) => {
await tatum_1.validateBody(body, model_1.TransferXlmOffchain);
const { secret } = body, withdrawal = __rest(body, ["secret"]);
if (!withdrawal.fee) {
withdrawal.fee = '0.00001';
}
const memo = withdrawal.attr ? withdrawal.attr.length > 28 ? stellar_sdk_1.Memo.hash(withdrawal.attr) : stellar_sdk_1.Memo.text(withdrawal.attr) : undefined;
const account = await blockchain_1.xlmGetAccountInfo(stellar_sdk_1.Keypair.fromSecret(secret).publicKey());
const { id } = await common_1.offchainStoreWithdrawal(withdrawal);
const { amount, address, } = withdrawal;
let txData;
try {
txData = await exports.prepareXlmSignedOffchainTransaction(testnet, account, amount, address, secret, memo);
}
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.XLM })), { id });
}
catch (e) {
console.error(e);
try {
await common_1.offchainCancelWithdrawal(id);
}
catch (e1) {
console.log(e);
return { id };
}
throw e;
}
};
exports.sendXlmOffchainTransaction = sendXlmOffchainTransaction;
/**
* Sign Stellar pending transaction from Tatum KMS
* @param tx pending transaction from KMS
* @param secret secret key to sign transaction with.
* @param testnet mainnet or testnet version
* @returns transaction data to be broadcast to blockchain.
*/
const signXlmOffchainKMSTransaction = async (tx, secret, testnet) => {
if (tx.chain !== model_1.Currency.XLM) {
throw Error('Unsupported chain.');
}
const transaction = stellar_sdk_1.TransactionBuilder.fromXDR(tx.serializedTransaction, testnet ? stellar_sdk_1.Networks.TESTNET : stellar_sdk_1.Networks.PUBLIC);
transaction.sign(stellar_sdk_1.Keypair.fromSecret(secret));
return transaction.toEnvelope().toXDR().toString('base64');
};
exports.signXlmOffchainKMSTransaction = signXlmOffchainKMSTransaction;
/**
* Sign Stellar transaction with private keys locally. Nothing is broadcast to the blockchain.
* @param testnet mainnet or testnet version
* @param account Stellar account with information
* @param amount amount to send
* @param address recipient address
* @param secret secret to sign transaction with
* @param memo short memo to include in transaction
* @returns transaction data to be broadcast to blockchain.
*/
const prepareXlmSignedOffchainTransaction = async (testnet, account, amount, address, secret, memo) => {
const builder = new stellar_sdk_1.TransactionBuilder(new stellar_sdk_1.Account(account.account_id, account.sequence), {
fee: '100',
networkPassphrase: testnet ? stellar_sdk_1.Networks.TESTNET : stellar_sdk_1.Networks.PUBLIC,
memo,
}).setTimeout(300);
const tx = builder.addOperation(stellar_sdk_1.Operation.payment({
destination: address,
asset: stellar_sdk_1.Asset.native(),
amount,
})).build();
tx.sign(stellar_sdk_1.Keypair.fromSecret(secret));
return tx.toEnvelope().toXDR().toString('base64');
};
exports.prepareXlmSignedOffchainTransaction = prepareXlmSignedOffchainTransaction;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGxtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL29mZmNoYWluL3hsbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUFrRztBQUNsRyw4Q0FBK0M7QUFDL0MsOENBQWlEO0FBQ2pELG9DQUFzRTtBQUN0RSxxQ0FBNkY7QUFFN0Y7Ozs7OztHQU1HO0FBQ0ksTUFBTSwwQkFBMEIsR0FBRyxLQUFLLEVBQUUsT0FBZ0IsRUFBRSxJQUF5QixFQUFFLEVBQUU7SUFDNUYsTUFBTSxvQkFBWSxDQUFDLElBQUksRUFBRSwyQkFBbUIsQ0FBQyxDQUFBO0lBQzdDLE1BQU0sRUFDRixNQUFNLEtBQ04sSUFBSSxFQURPLFVBQVUsVUFDckIsSUFBSSxFQUZGLFVBRUwsQ0FBTyxDQUFBO0lBQ1IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDakIsVUFBVSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUE7S0FDN0I7SUFDRCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUE7SUFDaEksTUFBTSxPQUFPLEdBQUcsTUFBTSw4QkFBaUIsQ0FBQyxxQkFBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO0lBQy9FLE1BQU0sRUFBQyxFQUFFLEVBQUMsR0FBRyxNQUFNLGdDQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ3RELE1BQU0sRUFDRixNQUFNLEVBQUUsT0FBTyxHQUNsQixHQUFHLFVBQVUsQ0FBQTtJQUVkLElB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