From 27ae1ee2a0faae29370cfe974d7f5110bb9c4370 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 12 Sep 2024 10:47:20 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../warningMessage/WarningMessage.kt | 62 ------------------- .../utils/ManagedCryptoCurrencyFactory.kt | 7 ++- .../markets/DefaultMarketsTokenRepository.kt | 4 +- .../repository/DefaultCurrenciesRepository.kt | 5 +- .../converters/LeastTokenInfoConverter.kt | 4 +- .../blockchainsdk/compatibility/L2Networks.kt | 59 ++++++++++++++++++ 6 files changed, 72 insertions(+), 69 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessage.kt create mode 100644 libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/compatibility/L2Networks.kt diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessage.kt b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessage.kt deleted file mode 100644 index 2f8f892e51..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessage.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.tangem.tap.domain.configurable.warningMessage - -import androidx.annotation.StringRes -import com.squareup.moshi.Json -import com.tangem.blockchain.common.Blockchain - -/** -[REDACTED_AUTHOR] - */ -data class WarningMessage( - val title: String, - val message: String, - val type: Type, - val priority: Priority, - val location: List, - private val blockchains: List?, - @StringRes val titleResId: Int? = null, - @StringRes val messageResId: Int? = null, - val origin: Origin = Origin.Remote, - @StringRes val buttonTextId: Int? = null, - val titleFormatArg: String? = null, - val messageFormatArg: String? = null, -) { - val blockchainList: List? by lazy { - blockchains?.map { Blockchain.fromId(it.uppercase()) } - } - - var isHidden = false - - enum class Priority { - @Json(name = "critical") - Critical, - - @Json(name = "warning") - Warning, - - @Json(name = "info") - Info, - } - - enum class Type { - @Json(name = "permanent") - Permanent, // нельзя скрыть - - @Json(name = "temporary") - Temporary, // можно скрыть (кнопка ОК) - - AppRating, - - TestCard, - } - - enum class Location { - - @Json(name = "send") - SendScreen, - } - - enum class Origin { - Remote, - } -} \ No newline at end of file diff --git a/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/utils/ManagedCryptoCurrencyFactory.kt b/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/utils/ManagedCryptoCurrencyFactory.kt index 5089f51294..1832d13c52 100644 --- a/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/utils/ManagedCryptoCurrencyFactory.kt +++ b/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/utils/ManagedCryptoCurrencyFactory.kt @@ -1,6 +1,8 @@ package com.tangem.data.managetokens.utils import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.compatibility.applyL2Compatibility +import com.tangem.blockchainsdk.compatibility.getL2CompatibilityTokenComparison import com.tangem.blockchainsdk.utils.fromNetworkId import com.tangem.blockchainsdk.utils.isSupportedInApp import com.tangem.blockchainsdk.utils.toCoinId @@ -90,12 +92,13 @@ internal class ManagedCryptoCurrencyFactory { ): ManagedCryptoCurrency? { if (coinResponse.networks.isEmpty() || !coinResponse.active) return null + val updatedNetworks = coinResponse.networks.applyL2Compatibility(coinResponse.id) return ManagedCryptoCurrency.Token( id = ManagedCryptoCurrency.ID(coinResponse.id), name = coinResponse.name, symbol = coinResponse.symbol, iconUrl = getIconUrl(coinResponse.id, imageHost), - availableNetworks = coinResponse.networks.mapNotNull { network -> + availableNetworks = updatedNetworks.mapNotNull { network -> createSource(network, derivationStyleProvider) }, addedIn = findAddedInNetworks(coinResponse.id, tokensResponse, derivationStyleProvider), @@ -136,7 +139,7 @@ internal class ManagedCryptoCurrencyFactory { if (tokensResponse == null) return emptySet() return tokensResponse.tokens - .filter { it.id == currencyId } + .filter { getL2CompatibilityTokenComparison(it, currencyId) } .mapNotNullTo(mutableSetOf()) { token -> val blockchain = Blockchain.fromNetworkId(token.networkId) diff --git a/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt b/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt index 8f9fa44f1b..420a16f3e4 100644 --- a/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt +++ b/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt @@ -1,6 +1,7 @@ package com.tangem.data.markets import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.compatibility.applyL2Compatibility import com.tangem.blockchainsdk.utils.fromNetworkId import com.tangem.data.common.currency.CryptoCurrencyFactory import com.tangem.data.common.currency.getNetwork @@ -144,7 +145,8 @@ internal class DefaultMarketsTokenRepository( language = languageCode, ) - return TokenMarketInfoConverter.convert(response.getOrThrow()) + val resultResponse = response.getOrThrow().applyL2Compatibility(tokenId) + return TokenMarketInfoConverter.convert(resultResponse) } override suspend fun getTokenQuotes(fiatCurrencyCode: String, tokenId: String): TokenQuotes { diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt index 238150055c..f76a9353fb 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt @@ -2,6 +2,7 @@ package com.tangem.data.tokens.repository import arrow.core.raise.catch import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.compatibility.getL2CompatibilityTokenComparison import com.tangem.blockchainsdk.utils.toCoinId import com.tangem.blockchainsdk.utils.toNetworkId import com.tangem.data.common.api.safeApiCall @@ -488,7 +489,9 @@ internal class DefaultCurrenciesRepository( .map { userWallet -> if (userWallet.isMultiCurrency) { getSavedUserTokensResponse(userWallet.walletId).map { storedTokens -> - val filterResponse = storedTokens.tokens.filter { it.id == currencyRawId } + val filterResponse = storedTokens.tokens.filter { + getL2CompatibilityTokenComparison(it, currencyRawId) + } responseCurrenciesFactory.createCurrencies( response = storedTokens.copy(tokens = filterResponse), diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/LeastTokenInfoConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/LeastTokenInfoConverter.kt index ad6e5fb457..1fde5f7040 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/LeastTokenInfoConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/LeastTokenInfoConverter.kt @@ -1,7 +1,5 @@ package com.tangem.feature.swap.converters -import com.tangem.blockchain.common.Blockchain -import com.tangem.blockchainsdk.utils.toNetworkId import com.tangem.datasource.api.express.models.request.LeastTokenInfo import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.utils.converter.Converter @@ -11,7 +9,7 @@ class LeastTokenInfoConverter : Converter { override fun convert(value: CryptoCurrency): LeastTokenInfo { return LeastTokenInfo( contractAddress = (value as? CryptoCurrency.Token)?.contractAddress ?: "0", - network = Blockchain.fromId(value.id.rawNetworkId).toNetworkId(), + network = value.network.backendId, ) } } \ No newline at end of file diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/compatibility/L2Networks.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/compatibility/L2Networks.kt new file mode 100644 index 0000000000..b3572820d3 --- /dev/null +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/compatibility/L2Networks.kt @@ -0,0 +1,59 @@ +package com.tangem.blockchainsdk.compatibility + +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toCoinId +import com.tangem.blockchainsdk.utils.toNetworkId +import com.tangem.datasource.api.markets.models.response.TokenMarketInfoResponse +import com.tangem.datasource.api.tangemTech.models.CoinsResponse +import com.tangem.datasource.api.tangemTech.models.UserTokensResponse + +val l2NetworksList = listOf( + Blockchain.Optimism, + Blockchain.Arbitrum, + Blockchain.ZkSyncEra, + Blockchain.Manta, + Blockchain.PolygonZkEVM, + Blockchain.Aurora, + Blockchain.Base, + Blockchain.Blast, + Blockchain.Cyber, +) + +fun getL2CompatibilityTokenComparison(token: UserTokensResponse.Token, currencyId: String): Boolean { + return if (currencyId == ETHEREUM_COIN_ID) { + l2NetworksList.map { it.toCoinId() }.contains(token.id) || currencyId == token.id + } else { + token.id == currencyId + } +} + +fun List.applyL2Compatibility(coinId: String): List { + return if (coinId == ETHEREUM_COIN_ID) { + val l2Networks = l2NetworksList.map { + CoinsResponse.Coin.Network( + networkId = it.toNetworkId(), + ) + } + this + l2Networks + } else { + this + } +} + +fun TokenMarketInfoResponse.applyL2Compatibility(coinId: String): TokenMarketInfoResponse { + val networks = this.networks ?: return this + return if (coinId == ETHEREUM_COIN_ID) { + val l2Networks = l2NetworksList.map { + TokenMarketInfoResponse.Network( + networkId = it.toNetworkId(), + contractAddress = null, + decimalCount = null, + ) + } + this.copy(networks = networks + l2Networks) + } else { + this + } +} + +const val ETHEREUM_COIN_ID = "ethereum" \ No newline at end of file