UNPKG

@ledgerhq/coin-stacks

Version:
46 lines 2.31 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.estimateMaxSpendable = void 0; const abandonseed_1 = require("@ledgerhq/cryptoassets/abandonseed"); const transactions_1 = require("@stacks/transactions"); const bignumber_js_1 = __importDefault(require("bignumber.js")); const invariant_1 = __importDefault(require("invariant")); const api_1 = require("../network/api"); const createTransaction_1 = require("./createTransaction"); const account_1 = require("./utils/account"); const misc_1 = require("./utils/misc"); const transactions_2 = require("./utils/transactions"); const estimateMaxSpendable = async ({ account, parentAccount, transaction, }) => { const { mainAccount, subAccount, tokenAccountTxn } = (0, account_1.getAccountInfo)({ account, parentAccount, transaction, }); const { address } = (0, misc_1.getAddress)(account); const { spendableBalance, xpub } = mainAccount; (0, invariant_1.default)(xpub, "xpub is required"); // If it's a token transaction, return the token's spendable balance if (tokenAccountTxn && subAccount) { return subAccount.spendableBalance; } const dummyTx = { ...(0, createTransaction_1.createTransaction)(account), ...transaction, recipient: (0, abandonseed_1.getAbandonSeedAddress)(mainAccount.currency.id), useAllAmount: true, }; // Create transaction using the shared utility function const tx = await (0, transactions_2.createTransaction)(dummyTx, address, xpub, subAccount || undefined); // Get network configuration const network = api_1.StacksNetwork[dummyTx.network] || api_1.StacksNetwork.mainnet; // Estimate fee const [feeEst] = await (0, transactions_1.estimateTransaction)(tx.payload, (0, transactions_1.estimateTransactionByteLength)(tx), network); // Calculate maximum spendable balance by subtracting fee const diff = spendableBalance.minus(new bignumber_js_1.default(feeEst.fee)); return diff.gte(0) ? diff : new bignumber_js_1.default(0); }; exports.estimateMaxSpendable = estimateMaxSpendable; //# sourceMappingURL=estimateMaxSpendable.js.map