Updated on 2026-08-14

This commit is contained in:
Tangem 2025-05-30 14:08:42 +03:00
parent e33bd4d849
commit b98b0f659c
138 changed files with 686 additions and 346 deletions

View file

@ -27,6 +27,7 @@ import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.network.Network
import com.tangem.domain.walletmanager.WalletManagersFacade
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.domain.wallets.models.requireColdWallet
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.withContext
@ -96,7 +97,7 @@ internal class DefaultCustomTokensRepository(
networkFactory.create(
networkId = networkId,
derivationPath = derivationPath,
scanResponse = userWallet.scanResponse,
scanResponse = userWallet.requireColdWallet().scanResponse, // TODO [REDACTED_TASK_KEY]
),
) {
"Network [$networkId] not found while finding token"
@ -152,7 +153,7 @@ internal class DefaultCustomTokensRepository(
networkFactory.create(
networkId = networkId,
derivationPath = derivationPath,
scanResponse = userWallet.scanResponse,
scanResponse = userWallet.requireColdWallet().scanResponse, // TODO [REDACTED_TASK_KEY]
),
) {
"Network [$networkId] not found while creating coin"
@ -189,7 +190,7 @@ internal class DefaultCustomTokensRepository(
networkFactory.create(
networkId = networkId,
derivationPath = derivationPath,
scanResponse = userWallet.scanResponse,
scanResponse = userWallet.requireColdWallet().scanResponse, // TODO [REDACTED_TASK_KEY]
),
) {
"Network [$networkId] not found while creating custom token"
@ -249,7 +250,7 @@ internal class DefaultCustomTokensRepository(
val userWallet = requireNotNull(userWalletsStore.getSyncOrNull(userWalletId)) {
"User wallet [$userWalletId] not found while getting supported networks"
}
val scanResponse = userWallet.scanResponse
val scanResponse = userWallet.requireColdWallet().scanResponse // TODO [REDACTED_TASK_KEY]
Blockchain.entries
.mapNotNull { blockchain ->

View file

@ -33,6 +33,7 @@ import com.tangem.domain.managetokens.repository.ManageTokensRepository
import com.tangem.domain.models.network.Network
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.domain.wallets.models.requireColdWallet
import com.tangem.pagination.BatchFetchResult
import com.tangem.pagination.BatchListSource
import com.tangem.pagination.fetcher.LimitOffsetBatchFetcher
@ -80,7 +81,7 @@ internal class DefaultManageTokensRepository(
subFetcher = { request, _, isFirstBatchFetching ->
val userWallet = request.params.userWalletId?.let(userWalletsStore::getSyncStrict)
if (userWallet?.scanResponse?.card?.isTestCard == true) {
if (userWallet is UserWallet.Cold && userWallet.scanResponse.card.isTestCard) {
fetchTestnetCurrencies(userWallet, request)
} else {
fetchCurrencies(
@ -143,13 +144,13 @@ internal class DefaultManageTokensRepository(
managedCryptoCurrencyFactory.createWithCustomTokens(
coinsResponse = updatedCoinsResponse,
tokensResponse = tokensResponse,
scanResponse = userWallet.scanResponse,
scanResponse = userWallet.requireColdWallet().scanResponse, // TODO [REDACTED_TASK_KEY]
)
} else {
managedCryptoCurrencyFactory.create(
coinsResponse = updatedCoinsResponse,
tokensResponse = tokensResponse,
scanResponse = userWallet?.scanResponse,
scanResponse = userWallet?.requireColdWallet()?.scanResponse, // TODO [REDACTED_TASK_KEY]
)
}
@ -179,7 +180,7 @@ internal class DefaultManageTokensRepository(
testnetTokensConfig
},
tokensResponse = getSavedUserTokensResponseSync(userWallet.walletId),
scanResponse = userWallet.scanResponse,
scanResponse = userWallet.requireColdWallet().scanResponse, // TODO [REDACTED_TASK_KEY]
)
return BatchFetchResult.Success(
@ -191,14 +192,16 @@ internal class DefaultManageTokensRepository(
private fun createDefaultUserTokensResponse(userWallet: UserWallet) =
userTokensResponseFactory.createUserTokensResponse(
currencies = cardCryptoCurrencyFactory.createDefaultCoinsForMultiCurrencyCard(userWallet.scanResponse),
currencies = cardCryptoCurrencyFactory.createDefaultCoinsForMultiCurrencyCard(
userWallet.requireColdWallet().scanResponse, // TODO [REDACTED_TASK_KEY]
),
isGroupedByNetwork = false,
isSortedByBalance = false,
)
private fun getSupportedBlockchains(userWallet: UserWallet?): List<Blockchain> {
return userWallet?.scanResponse?.let {
it.card.supportedBlockchains(it.cardTypesResolver, excludedBlockchains)
return (userWallet as? UserWallet.Cold)?.scanResponse?.let {
it.card.supportedBlockchains(it.cardTypesResolver, excludedBlockchains) // TODO [REDACTED_TASK_KEY]
} ?: Blockchain.entries.filter {
!it.isTestnet() && it !in excludedBlockchains
}
@ -285,6 +288,10 @@ internal class DefaultManageTokensRepository(
userWallet: UserWallet,
blockchain: Blockchain,
): CurrencyUnsupportedState? {
if (userWallet !is UserWallet.Cold) {
return null
}
val canHandleBlockchain = userWallet.scanResponse.card.canHandleBlockchain(
blockchain = blockchain,
cardTypesResolver = userWallet.cardTypesResolver,
@ -302,6 +309,10 @@ internal class DefaultManageTokensRepository(
userWallet: UserWallet,
blockchain: Blockchain,
): CurrencyUnsupportedState.Token? {
if (userWallet !is UserWallet.Cold) {
return null
}
val cardTypesResolver = userWallet.scanResponse.cardTypesResolver
val supportedTokens = userWallet.scanResponse.card.supportedTokens(
cardTypesResolver,