Updated on 2026-08-14

This commit is contained in:
Tangem 2023-02-07 14:59:17 +03:00
parent 91c52c039c
commit ae758bc308
8 changed files with 87 additions and 51 deletions

View file

@ -4,6 +4,7 @@ import com.tangem.blockchain.common.AmountType
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.DerivationParams
import com.tangem.blockchain.common.DerivationStyle
import com.tangem.blockchain.common.Token
import com.tangem.blockchain.common.WalletManager
import com.tangem.blockchain.common.WalletManagerFactory
import com.tangem.domain.common.CardDTO
@ -124,10 +125,29 @@ class UserWalletManagerImpl(
return walletManager?.wallet?.recentTransactions?.lastOrNull()?.hash?.let { HEX_PREFIX + it }
}
override fun getCurrentWalletTokensBalance(networkId: String): Map<String, ProxyAmount> {
override suspend fun getCurrentWalletTokensBalance(
networkId: String,
extraTokens: List<Currency>,
): Map<String, ProxyAmount> {
val blockchain = requireNotNull(Blockchain.fromNetworkId(networkId)) { "blockchain not found" }
val walletManager = getActualWalletManager(blockchain)
return walletManager.wallet.amounts.map { entry ->
// workaround for get balance for tokens that doesn't exist in wallet
val extraTokensToLoadBalance = extraTokens
.filterIsInstance<NonNativeToken>()
.map {
Token(
symbol = it.symbol,
contractAddress = it.contractAddress,
decimals = it.decimalCount,
)
}
.filter {
!walletManager.cardTokens.contains(it)
}
walletManager.addTokens(extraTokensToLoadBalance)
walletManager.update()
val balances = walletManager.wallet.amounts.map { entry ->
val amount = entry.value
amount.currencySymbol to ProxyAmount(
amount.currencySymbol,
@ -135,6 +155,8 @@ class UserWalletManagerImpl(
amount.decimals,
)
}.toMap()
extraTokensToLoadBalance.forEach { walletManager.removeToken(it) }
return balances
}
override fun getNativeTokenBalance(networkId: String): ProxyAmount? {
@ -185,7 +207,7 @@ class UserWalletManagerImpl(
private fun addNonNativeTokenToWalletAction(token: NonNativeToken, card: CardDTO, blockchain: Blockchain): Action {
return WalletAction.MultiWallet.AddToken(
token = com.tangem.blockchain.common.Token(
token = Token(
id = token.id,
name = token.name,
symbol = token.symbol,