From fb5ffe03f8cd6d501b1c8e808cd49aebb49923cb Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 28 Jan 2024 15:02:24 +0300 Subject: [PATCH 1/4] Updated on 2026-08-14 --- .../main/java/com/tangem/domain/common/extensions/Blockchain.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index 1d03f1f1b3..7d235349dc 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -239,4 +239,5 @@ private const val NODL_AMOUNT_TO_CREATE_ACCOUNT = 1.5 private val excludedBlockchains = listOf( Blockchain.Unknown, Blockchain.Ducatus, + Blockchain.Aptos, ) \ No newline at end of file From fda885c071647e5b68c800d480b7890a58fa1f7e Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 29 Jan 2024 12:06:06 +0300 Subject: [PATCH 2/4] Updated on 2026-08-14 --- .../tokens/impl/data/converters/CoinsResponseConverter.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/data/converters/CoinsResponseConverter.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/data/converters/CoinsResponseConverter.kt index 0902f40ec4..e2824e1022 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/data/converters/CoinsResponseConverter.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/data/converters/CoinsResponseConverter.kt @@ -3,7 +3,6 @@ package com.tangem.tap.features.tokens.impl.data.converters import com.tangem.blockchain.common.Blockchain import com.tangem.datasource.api.tangemTech.models.CoinsResponse import com.tangem.domain.common.extensions.fromNetworkId -import com.tangem.domain.common.extensions.toNetworkId import com.tangem.tap.features.tokens.impl.domain.models.Token import com.tangem.utils.converter.Converter @@ -26,7 +25,8 @@ internal object CoinsResponseConverter : Converter> { networks = token.networks.mapNotNull { network -> val blockchain = Blockchain.fromNetworkId(network.networkId) ?: return@mapNotNull null - if (network.networkId != blockchain.toNetworkId() && + // filter tokens, if contractAddress != null, assume that it is a token + if (network.contractAddress != null && !blockchain.canHandleTokens() ) { return@mapNotNull null From d06fc4fb6fdbd4b56e89f0c7833a8367a5a9e2b5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 29 Jan 2024 15:52:50 +0300 Subject: [PATCH 3/4] Updated on 2026-08-14 --- .../exchangeServices/mercuryo/MercuryoApi.kt | 22 ++--- .../mercuryo/MercuryoService.kt | 90 +++++++++---------- 2 files changed, 52 insertions(+), 60 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoApi.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoApi.kt index 5d9fece041..95f2c90b4c 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoApi.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoApi.kt @@ -22,20 +22,16 @@ data class MercuryoCurrenciesResponse( ) data class Config( - val base: Map, - @Json(name = "has_withdrawal_fee") - val hasWithdrawalFee: Map, - @Json(name = "display_options") - val displayOptions: Map, - val icons: Map, + @Json(name = "crypto_currencies") + val cryptoCurrencies: List, ) - data class DisplayOption( - @Json(name = "fullname") - val fullName: String, - @Json(name = "total_digits") - val totalDigits: Int, - @Json(name = "display_digits") - val displayDigits: Int, + data class MercuryoCryptoCurrency( + @Json(name = "currency") + val currencySymbol: String, + @Json(name = "network") + val network: String, + @Json(name = "contract") + val contractAddress: String, ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt index 9446f5c5cf..a19ca0cd84 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt @@ -11,7 +11,6 @@ import com.tangem.tap.domain.model.Currency import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.network.exchangeServices.ExchangeService import com.tangem.tap.network.exchangeServices.ExchangeUrlBuilder -import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.CopyOnWriteArrayList /** @@ -21,8 +20,7 @@ internal class MercuryoService(private val environment: MercuryoEnvironment) : E private val api: MercuryoApi = environment.mercuryoApi - private val blockchainsAvailableToBuy = CopyOnWriteArrayList() - private val tokensAvailableToBuy = ConcurrentHashMap>() + private val availableMercuryoCurrencies = CopyOnWriteArrayList() override fun featureIsSwitchedOn(): Boolean = true @@ -33,29 +31,14 @@ internal class MercuryoService(private val environment: MercuryoEnvironment) : E override fun availableForBuy(currency: Currency): Boolean { if (!isBuyAllowed()) return false - // blockchains which cant be defined by mercuryo service - val unsupportedBlockchains = listOf( - Blockchain.Unknown, - Blockchain.Binance, - Blockchain.Arbitrum, - Blockchain.Optimism, - ) - val blockchain = currency.blockchain - - return when (currency) { - is Currency.Blockchain -> { - when { - blockchain.isTestnet() -> blockchain.getTestnetTopUpUrl() != null - unsupportedBlockchains.contains(blockchain) -> false - else -> blockchainsAvailableToBuy.contains(blockchain) - } - } - - is Currency.Token -> { - val supportedInBlockchains = tokensAvailableToBuy[currency.currencySymbol] ?: return false - supportedInBlockchains.contains(blockchain) - } + val mercuryoNetwork = currency.blockchain.mercuryoNetwork() + val contractAddress = (currency as? Currency.Token)?.token?.contractAddress ?: "" + val availableCurrency = availableMercuryoCurrencies.firstOrNull { + it.currencySymbol == currency.currencySymbol && + it.network == mercuryoNetwork && + it.contractAddress == contractAddress } + return availableCurrency != null } override fun availableForSell(currency: Currency): Boolean = false @@ -67,8 +50,7 @@ internal class MercuryoService(private val environment: MercuryoEnvironment) : E handleSuccessfullyUpdatedData(data = result.data.data) } result is Result.Failure -> { - blockchainsAvailableToBuy.clear() - tokensAvailableToBuy.clear() + availableMercuryoCurrencies.clear() } } } @@ -95,34 +77,48 @@ internal class MercuryoService(private val environment: MercuryoEnvironment) : E .appendQueryParameter("return_url", ExchangeUrlBuilder.SUCCESS_URL) if (isDarkTheme) builder.appendQueryParameter("theme", "1inch") + blockchain.mercuryoNetwork()?.let { + builder.appendQueryParameter("network", it) + } + return builder.build().toString() } override fun getSellCryptoReceiptUrl(action: CurrencyExchangeManager.Action, transactionId: String): String? = null private fun handleSuccessfullyUpdatedData(data: MercuryoCurrenciesResponse.Data) { - data.crypto.forEach { currencyName -> - val blockchain = blockchainFromCurrencyName(currencyName) - if (blockchain == null) { - val specificBlockchain = data.config.base[currencyName]?.let(::blockchainFromCurrencyName) - if (specificBlockchain != null) { - tokensAvailableToBuy.set( - key = currencyName, - value = tokensAvailableToBuy[currencyName].orEmpty() + specificBlockchain, - ) - } - } else { - blockchainsAvailableToBuy.add(blockchain) - } - } + availableMercuryoCurrencies.clear() + availableMercuryoCurrencies.addAll(data.config.cryptoCurrencies) } - private fun blockchainFromCurrencyName(currencyName: String): Blockchain? { - return when (currencyName) { - "BNB" -> Blockchain.BSC - "ETH" -> Blockchain.Ethereum - "ADA" -> Blockchain.Cardano - else -> Blockchain.values().find { it.currency.lowercase() == currencyName.lowercase() } + @Suppress("CyclomaticComplexMethod") + private fun Blockchain.mercuryoNetwork(): String? { + return when (this) { + // Blockchain.Algorand -> "ALGORAND" //TODO: Uncomment with algo support + Blockchain.Arbitrum -> "ARBITRUM" + Blockchain.Avalanche -> "AVALANCHE" + Blockchain.BSC -> "BINANCESMARTCHAIN" + Blockchain.Bitcoin -> "BITCOIN" + Blockchain.BitcoinCash -> "BITCOINCASH" + Blockchain.Cardano -> "CARDANO" + Blockchain.Cosmos -> "COSMOS" + Blockchain.Dash -> "DASH" + Blockchain.Dogecoin -> "DOGECOIN" + Blockchain.Ethereum -> "ETHEREUM" + Blockchain.Fantom -> "FANTOM" + Blockchain.Kusama -> "KUSAMA" + Blockchain.Litecoin -> "LITECOIN" + Blockchain.Near -> "NEAR_PROTOCOL" + Blockchain.TON -> "NEWTON" + Blockchain.Optimism -> "OPTIMISM" + Blockchain.Polkadot -> "POLKADOT" + Blockchain.Polygon -> "POLYGON" + Blockchain.XRP -> "RIPPLE" + Blockchain.Solana -> "SOLANA" + Blockchain.Stellar -> "STELLAR" + Blockchain.Tezos -> "TEZOS" + Blockchain.Tron -> "TRON" + else -> null } } From 3968f4659cd101572b9ce045450e839b5b015805 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 2 Feb 2024 15:48:08 +0300 Subject: [PATCH 4/4] Updated on 2026-08-14 --- gradle/dependencies.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index f6b9405dcf..826d5cf01f 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -85,9 +85,9 @@ spr-client = "3.6.2" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "develop-471" +tangemBlockchainSdk = "release-app_5.6-472" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "develop-324" +tangemCardSdk = "release-app_5.6-325" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ # endregion Tangem