UNPKG

@ledgerhq/coin-algorand

Version:
64 lines 2.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.encodeToBroadcast = exports.encodeToSign = exports.buildTransactionPayload = void 0; const algosdk_1 = require("algosdk"); const network_1 = require("./network"); const tokens_1 = require("./tokens"); const buildTransactionPayload = async (account, transaction) => { const { amount, recipient, mode, memo, assetId, subAccountId } = transaction; const subAccount = subAccountId ? account.subAccounts && account.subAccounts.find(t => t.id === subAccountId) : null; const note = memo ? new TextEncoder().encode(memo) : undefined; const params = await (0, network_1.getTransactionParams)(); const suggestedParams = { ...params, firstValid: params.lastRound, lastValid: params.lastRound + 1000, genesisHash: (0, algosdk_1.base64ToBytes)(params.genesisHash), }; if (subAccount || (assetId && mode === "optIn")) { const targetAssetId = subAccount && subAccount.type === "TokenAccount" ? (0, tokens_1.extractTokenId)(subAccount.token.id) : assetId ? (0, tokens_1.extractTokenId)(assetId) : ""; if (!targetAssetId) { throw new Error("Token Asset Id not found"); } return (0, algosdk_1.makeAssetTransferTxnWithSuggestedParamsFromObject)({ sender: account.freshAddress, receiver: recipient, amount: amount.toNumber(), assetIndex: Number(targetAssetId), suggestedParams, ...(note ? { note } : {}), }); } return (0, algosdk_1.makePaymentTxnWithSuggestedParamsFromObject)({ sender: account.freshAddress, receiver: recipient, amount: amount.toNumber(), suggestedParams, ...(note ? { note } : {}), }); }; exports.buildTransactionPayload = buildTransactionPayload; const encodeToSign = (payload) => { const msgPackEncoded = (0, algosdk_1.encodeMsgpack)(payload); return Buffer.from(msgPackEncoded).toString("hex"); }; exports.encodeToSign = encodeToSign; const encodeToBroadcast = (payload, signature) => { // App Algorand returns 66 bytes signatures, including the status word // ED25519 signature length is exactly 64 bytes const ED25519_SIGNATURE_LENGTH = 64; const signedPayload = new algosdk_1.SignedTransaction({ sig: signature.subarray(0, ED25519_SIGNATURE_LENGTH), txn: payload, }); const msgPackEncoded = (0, algosdk_1.encodeMsgpack)(signedPayload); return Buffer.from(msgPackEncoded); }; exports.encodeToBroadcast = encodeToBroadcast; //# sourceMappingURL=buildTransaction.js.map