@ledgerhq/coin-stellar
Version:
Ledger Stellar Coin integration
75 lines • 2.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.isAddressValid = exports.isAccountMultiSign = exports.isMemoValid = exports.getAssetCodeIssuer = exports.getAmountValue = exports.STELLAR_BURN_ADDRESS = void 0;
const bignumber_js_1 = require("bignumber.js");
const stellar_sdk_1 = require("@stellar/stellar-sdk");
const helpers_1 = require("@ledgerhq/coin-framework/account/helpers");
const network_1 = require("../network");
exports.STELLAR_BURN_ADDRESS = "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF";
function getAmountValue(account, transaction, fees) {
// Asset
if (transaction.subAccountId) {
const asset = (0, helpers_1.findSubAccountById)(account, transaction.subAccountId);
return transaction.useAllAmount ? new bignumber_js_1.BigNumber(asset.spendableBalance) : transaction.amount;
}
// Native
return transaction.useAllAmount && transaction.networkInfo
? bignumber_js_1.BigNumber.max(account.spendableBalance.minus(fees), 0)
: transaction.amount;
}
exports.getAmountValue = getAmountValue;
function getAssetCodeIssuer(tr) {
if (tr.subAccountId) {
const assetString = tr.subAccountId.split("+")[1];
return assetString.split(":");
}
return [tr.assetCode || "", tr.assetIssuer || ""];
}
exports.getAssetCodeIssuer = getAssetCodeIssuer;
function isMemoValid(memoType, memoValue) {
switch (memoType) {
case "MEMO_TEXT":
if (memoValue.length > 28) {
return false;
}
break;
case "MEMO_ID":
if (new bignumber_js_1.BigNumber(memoValue.toString()).isNaN()) {
return false;
}
break;
case "MEMO_HASH":
case "MEMO_RETURN":
if (!memoValue.length || memoValue.length !== 64) {
return false;
}
break;
}
return true;
}
exports.isMemoValid = isMemoValid;
async function isAccountMultiSign(account) {
const signers = await (0, network_1.fetchSigners)(account);
return signers.length > 1;
}
exports.isAccountMultiSign = isAccountMultiSign;
/**
* Returns true if address is valid, false if it's invalid (can't parse or wrong checksum)
*
* @param {*} address
*/
function isAddressValid(address) {
if (!address)
return false;
// FIXME Workaround for burn address, see https://ledgerhq.atlassian.net/browse/LIVE-4014
if (address === exports.STELLAR_BURN_ADDRESS)
return false;
try {
return stellar_sdk_1.StrKey.isValidEd25519PublicKey(address) || stellar_sdk_1.StrKey.isValidMed25519PublicKey(address);
}
catch (err) {
return false;
}
}
exports.isAddressValid = isAddressValid;
//# sourceMappingURL=logic.js.map