@ledgerhq/coin-stacks
Version:
Ledger Stacks Coin integration
46 lines • 2.31 kB
JavaScript
;
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