UNPKG

@ledgerhq/coin-tezos

Version:
79 lines 3.37 kB
"use strict"; // SPDX-FileCopyrightText: © 2026 LEDGER SAS // SPDX-License-Identifier: Apache-2.0 Object.defineProperty(exports, "__esModule", { value: true }); exports.getBalance = getBalance; const logs_1 = require("@ledgerhq/logs"); const types_1 = require("../network/types"); const tzkt_1 = require("../network/tzkt"); const utils_1 = require("../utils"); const getStakes_1 = require("./getStakes"); /** Returns `[native, ...stakes, ...tokens]` per the Paris upgrade. */ async function getBalance(context, address) { const config = await context.config(); const api = (0, tzkt_1.createTzktApi)(config); const [apiAccountResult, tokensBalancesResult] = await Promise.allSettled([ api.getAccountByAddress(address), api.getTokensBalances(address), ]); if (apiAccountResult.status !== 'fulfilled') { throw apiAccountResult.reason; } const apiAccount = apiAccountResult.value; const tokensBalancesRaw = tokensBalancesResult.status === 'fulfilled' ? tokensBalancesResult.value : []; const tokensBalance = tokensBalancesRaw.map(({ balance, token }) => { const magnitude = Number.parseInt(token.metadata?.decimals || '0', 10); const name = token.metadata?.name ?? token.contract.alias ?? ''; const symbol = token.metadata?.symbol ?? token.contract.alias ?? ''; const unit = Number.isFinite(magnitude) && name && symbol ? { magnitude, name, code: symbol, } : undefined; return { value: BigInt(balance), asset: { type: token.standard, assetReference: `${token.contract.address}:${token.tokenId ?? '0'}`, assetOwner: address, name: token.contract.alias, ...(unit && { unit }), }, }; }); // We don't compute native/stake balances for non-manager account types (empty / contract / // ghost / rollup). KT1 contracts can hold XTZ, but they aren't user-facing wallet accounts // here, so we report a 0 native balance alongside any token balances. if (!(0, types_1.hasManagerKey)(apiAccount)) { return [{ value: 0n, asset: { type: 'native' } }, ...tokensBalance]; } const normalized = BigInt(apiAccount.balance); const unstakeRequests = await (0, getStakes_1.fetchUnstakeRequests)(config, address, apiAccount).catch((error) => { (0, logs_1.log)('coin:tezos', 'getBalance: fetchUnstakeRequests failed; degrading stakes to []', { error, address, }); return []; }); const stakes = (0, getStakes_1.buildStakesForAccount)(address, apiAccount, unstakeRequests); const stakedBalance = BigInt(apiAccount.stakedBalance ?? 0); const unstakedBalance = BigInt(apiAccount.unstakedBalance ?? 0); const { locked } = (0, utils_1.partitionNativeBalance)(normalized, stakedBalance, unstakedBalance); const stakeBalances = stakes.map((stake) => ({ value: stake.amount, asset: { type: 'native' }, stake, })); return [ { value: normalized, asset: { type: 'native' }, ...(locked > 0n && { locked }), }, ...stakeBalances, ...tokensBalance, ]; } //# sourceMappingURL=getBalance.js.map