@tatumio/tatum-v1
Version:
Tatum API client allows browsers and Node.js clients to interact with Tatum API.
68 lines • 6.19 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.prepareXlmSignedTransaction = exports.signXlmKMSTransaction = exports.sendXlmTransaction = 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");
/**
* Send Stellar 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 sendXlmTransaction = async (testnet, body) => {
return blockchain_1.xlmBroadcast(await exports.prepareXlmSignedTransaction(testnet, body));
};
exports.sendXlmTransaction = sendXlmTransaction;
/**
* 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 signXlmKMSTransaction = 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.signXlmKMSTransaction = signXlmKMSTransaction;
/**
* Sign Stellar 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 prepareXlmSignedTransaction = async (testnet, body) => {
await tatum_1.validateBody(body, model_1.TransferXlm);
const { fromSecret, to, amount, message, initialize, } = body;
const memo = message ? message.length > 28 ? stellar_sdk_1.Memo.hash(message) : stellar_sdk_1.Memo.text(message) : undefined;
const fromAccount = stellar_sdk_1.Keypair.fromSecret(fromSecret).publicKey();
const account = await blockchain_1.xlmGetAccountInfo(fromAccount);
const builder = new stellar_sdk_1.TransactionBuilder(new stellar_sdk_1.Account(fromAccount, account.sequence), {
fee: '100',
networkPassphrase: testnet ? stellar_sdk_1.Networks.TESTNET : stellar_sdk_1.Networks.PUBLIC,
memo,
}).setTimeout(300);
const tx = initialize
? builder.addOperation(stellar_sdk_1.Operation.createAccount({
destination: to.trim(),
startingBalance: amount,
})).build()
: builder.addOperation(stellar_sdk_1.Operation.payment({
destination: to.trim(),
asset: stellar_sdk_1.Asset.native(),
amount,
}))
.build();
tx.sign(stellar_sdk_1.Keypair.fromSecret(fromSecret));
return tx.toEnvelope().toXDR().toString('base64');
};
exports.prepareXlmSignedTransaction = prepareXlmSignedTransaction;
// TODO: add support for TrustLine
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGxtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyYW5zYWN0aW9uL3hsbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBa0c7QUFDbEcsOENBQTZEO0FBQzdELDhDQUFpRDtBQUNqRCxvQ0FBOEQ7QUFFOUQ7Ozs7OztHQU1HO0FBQ0ksTUFBTSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsT0FBZ0IsRUFBRSxJQUFpQixFQUFFLEVBQUU7SUFDNUUsT0FBTyx5QkFBWSxDQUFDLE1BQU0sbUNBQTJCLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDekUsQ0FBQyxDQUFBO0FBRlksUUFBQSxrQkFBa0Isc0JBRTlCO0FBRUQ7Ozs7OztHQU1HO0FBQ0ksTUFBTSxxQkFBcUIsR0FBRyxLQUFLLEVBQUUsRUFBa0IsRUFBRSxNQUFjLEVBQUUsT0FBZ0IsRUFBRSxFQUFFO0lBQ2hHLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxnQkFBUSxDQUFDLEdBQUcsRUFBRTtRQUMzQixNQUFNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0tBQ3BDO0lBQ0QsTUFBTSxXQUFXLEdBQUcsZ0NBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLHNCQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxzQkFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RILFdBQVcsQ0FBQyxJQUFJLENBQUMscUJBQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUM1QyxPQUFPLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDOUQsQ0FBQyxDQUFBO0FBUFksUUFBQSxxQkFBcUIseUJBT2pDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxNQUFNLDJCQUEyQixHQUFHLEtBQUssRUFBRSxPQUFnQixFQUFFLElBQWlCLEVBQUUsRUFBRTtJQUNyRixNQUFNLG9CQUFZLENBQUMsSUFBSSxFQUFFLG1CQUFXLENBQUMsQ0FBQTtJQUNyQyxNQUFNLEVBQ0YsVUFBVSxFQUNWLEVBQUUsRUFDRixNQUFNLEVBQ04sT0FBTyxFQUNQLFVBQVUsR0FDYixHQUFHLElBQUksQ0FBQTtJQUVSLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFBO0lBQ2hHLE1BQU0sV0FBVyxHQUFHLHFCQUFPLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQzlELE1BQU0sT0FBTyxHQUFHLE1BQU0sOEJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxnQ0FBa0IsQ0FBQyxJQUFJLHFCQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUMvRSxHQUFHLEVBQUUsS0FBSztRQUNWLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHNCQUFRLENBQUMsTUFBTTtRQUMvRCxJQUFJO0tBQ1AsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNsQixNQUFNLEVBQUUsR0FBRyxVQUFVO1FBQ2pCLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLHVCQUFTLENBQUMsYUFBYSxDQUFDO1lBQzNDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFO1lBQ3RCLGVBQWUsRUFBRSxNQUFNO1NBQzFCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtRQUNYLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLHVCQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3JDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFO1lBQ3RCLEtBQUssRUFBRSxtQkFBSyxDQUFDLE1BQU0sRUFBRTtZQUNyQixNQUFNO1NBQ1QsQ0FBQyxDQUFDO2FBQ0UsS0FBSyxFQUFFLENBQUE7SUFDaEIsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ3ZDLE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUNyRCxDQUFDLENBQUE7QUEvQlksUUFBQSwyQkFBMkIsK0JBK0J2QztBQUVELGtDQUFrQyJ9