From 99f62f79eec6f187ff433b5504a2d7d894f73a29 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 22 May 2025 17:41:04 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../domain/card/MissedDerivationsFinder.kt | 5 ++-- .../domain/WalletConnectInteractor.kt | 5 ++-- .../middlewares/TradeCryptoMiddleware.kt | 4 +-- .../CryptoCurrencyConverter.kt | 3 +- .../CurrencyExchangeManager.kt | 4 +-- .../mercuryo/MercuryoService.kt | 4 +-- .../moonpay/MoonPayService.kt | 4 +-- .../common/currency/CryptoCurrencyFactory.kt | 3 +- .../data/common/currency/NetworkOperations.kt | 8 ----- .../data/common/currency/TokensOperations.kt | 10 +++---- .../currency/UserTokensResponseFactory.kt | 23 +++++++-------- .../data/common/network/NetworkFactory.kt | 4 +-- .../DefaultCustomTokensRepository.kt | 6 ++-- .../DefaultManageTokensRepository.kt | 10 ++++--- .../utils/TokenAddressesConverter.kt | 4 +-- .../onramp/legacy/MercuryoTopUpRepository.kt | 4 +-- data/qr-scanning/build.gradle.kts | 1 + .../DefaultQrScanningEventsRepository.kt | 4 +-- .../DefaultQrScanningEventsRepositoryTest.kt | 6 ++-- .../data/staking/DefaultStakingRepository.kt | 3 +- .../repository/DefaultCurrenciesRepository.kt | 9 +++--- ...ultPolkadotAccountHealthCheckRepository.kt | 3 +- .../data/transaction/DefaultFeeRepository.kt | 6 ++-- .../DefaultTransactionRepository.kt | 23 ++++++++------- .../DefaultWalletAddressServiceRepository.kt | 5 ++-- .../repository/DefaultTxHistoryRepository.kt | 6 ++-- .../network/ethereum/WcEthNetwork.kt | 7 +++-- .../network/ethereum/WcEthTxHelper.kt | 5 ++-- .../network/solana/WcSolanaNetwork.kt | 3 +- .../GetExtendedPublicKeyForCurrencyUseCase.kt | 5 ++-- .../card/NetworkHasDerivationUseCase.kt | 4 +-- .../DefaultWalletManagersFacade.kt | 29 ++++++++++--------- .../feature/swap/domain/SwapInteractorImpl.kt | 5 ++-- libs/blockchain-sdk/build.gradle.kts | 2 ++ .../tangem/blockchainsdk/utils/NetworkExt.kt | 10 +++++++ 35 files changed, 128 insertions(+), 109 deletions(-) delete mode 100644 data/common/src/main/kotlin/com/tangem/data/common/currency/NetworkOperations.kt create mode 100644 libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/NetworkExt.kt diff --git a/app/src/main/java/com/tangem/tap/domain/card/MissedDerivationsFinder.kt b/app/src/main/java/com/tangem/tap/domain/card/MissedDerivationsFinder.kt index d05c693542..9bbb08d575 100644 --- a/app/src/main/java/com/tangem/tap/domain/card/MissedDerivationsFinder.kt +++ b/app/src/main/java/com/tangem/tap/domain/card/MissedDerivationsFinder.kt @@ -2,6 +2,7 @@ package com.tangem.tap.domain.card import com.tangem.blockchain.blockchains.cardano.CardanoUtils import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.common.card.EllipticCurve import com.tangem.common.extensions.ByteArrayKey import com.tangem.common.extensions.toMapKey @@ -49,7 +50,7 @@ internal class MissedDerivationsFinder(private val scanResponse: ScanResponse) { private fun List.mapToNewDerivations(): List { val config = CardConfig.createConfig(scanResponse.card) return mapNotNull { network -> - val blockchain = Blockchain.fromId(id = network.rawId) + val blockchain = network.toBlockchain() val curve = config.primaryCurve(blockchain) ?: return@mapNotNull null findNewDerivations(curve = curve, scanResponse = scanResponse, network = network) @@ -74,7 +75,7 @@ internal class MissedDerivationsFinder(private val scanResponse: ScanResponse) { } private fun Network.getDerivationCandidates(curve: EllipticCurve): List { - val blockchain = Blockchain.fromId(id = rawId) + val blockchain = this.toBlockchain() return buildList { add(blockchain.getDerivationPath(curve = curve)) diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt index a9009dc947..b42a994dd6 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WalletConnectInteractor.kt @@ -1,7 +1,7 @@ package com.tangem.tap.domain.walletconnect2.domain import arrow.core.flatten -import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.blockchainsdk.utils.toNetworkId import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.network.Network @@ -419,7 +419,8 @@ class WalletConnectInteractor( private suspend fun getAccountsForWc(userWallet: UserWallet, networks: List): List { val walletManagers = networks.mapNotNull { - val blockchain = Blockchain.fromId(it.rawId) + val blockchain = it.toBlockchain() + walletManagersFacade.getOrCreateWalletManager( userWalletId = userWallet.walletId, blockchain = blockchain, diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt index a8fec8347f..6496defc91 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt @@ -1,7 +1,7 @@ package com.tangem.tap.features.wallet.redux.middlewares import com.tangem.blockchain.blockchains.ethereum.EthereumWalletManager -import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.common.routing.AppRoute import com.tangem.common.routing.AppRouter import com.tangem.core.analytics.Analytics @@ -79,7 +79,7 @@ object TradeCryptoMiddleware { val status = action.cryptoCurrencyStatus val currency = status.currency - val blockchain = Blockchain.fromId(currency.network.rawId) + val blockchain = currency.network.toBlockchain() val exchangeManager = store.state.globalState.exchangeManager val topUrl = exchangeManager.getUrl( action = CurrencyExchangeManager.Action.Buy, diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/CryptoCurrencyConverter.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/CryptoCurrencyConverter.kt index 58b0438ca7..4082725f10 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/CryptoCurrencyConverter.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/CryptoCurrencyConverter.kt @@ -3,6 +3,7 @@ package com.tangem.tap.network.exchangeServices import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.Token import com.tangem.blockchainsdk.utils.ExcludedBlockchains +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.data.common.currency.CryptoCurrencyFactory import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.tap.common.extensions.inject @@ -44,7 +45,7 @@ internal class CryptoCurrencyConverter( } override fun convertBack(value: CryptoCurrency): Currency { - val blockchain = Blockchain.fromId(value.network.rawId) + val blockchain = value.network.toBlockchain() if (blockchain == Blockchain.Unknown) error("CryptoCurrencyConverter convertBack Unknown blockchain") return when (value) { is CryptoCurrency.Coin -> Currency.Blockchain( diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt index 9b46887dcd..83fee90f6c 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt @@ -4,9 +4,9 @@ import com.tangem.Message import com.tangem.blockchain.blockchains.ethereum.EthereumWalletManager import com.tangem.blockchain.common.Amount import com.tangem.blockchain.common.AmountType -import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.transaction.TransactionFee import com.tangem.blockchain.extensions.Result +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.domain.common.TapWorkarounds.isTangemTwins import com.tangem.domain.core.utils.lceContent import com.tangem.domain.core.utils.lceLoading @@ -68,7 +68,7 @@ class CurrencyExchangeManager( walletAddress: String, isDarkTheme: Boolean, ): String? { - val blockchain = Blockchain.fromId(cryptoCurrency.network.rawId) + val blockchain = cryptoCurrency.network.toBlockchain() if (blockchain.isTestnet()) return blockchain.getTestnetTopUpUrl() val urlBuilder = getExchangeUrlBuilder(action) 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 97bd71f241..16219f4094 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 @@ -1,7 +1,7 @@ package com.tangem.tap.network.exchangeServices.mercuryo import android.net.Uri -import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.common.extensions.calculateSha512 import com.tangem.common.extensions.toHexString import com.tangem.common.services.Result @@ -77,7 +77,7 @@ internal class MercuryoService(private val environment: MercuryoEnvironment) : E ): String { if (action == CurrencyExchangeManager.Action.Sell) throw UnsupportedOperationException() - val blockchain = Blockchain.fromId(cryptoCurrency.network.rawId) + val blockchain = cryptoCurrency.network.toBlockchain() val builder = Uri.Builder() .scheme(ExchangeUrlBuilder.SCHEME) diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt index 7bf0f6d0cf..d57da1a257 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt @@ -2,7 +2,7 @@ package com.tangem.tap.network.exchangeServices.moonpay import android.net.Uri import android.util.Base64 -import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.common.services.Result import com.tangem.common.services.performRequest import com.tangem.datasource.api.common.createRetrofitInstance @@ -133,7 +133,7 @@ class MoonPayService( ): String? { if (action == CurrencyExchangeManager.Action.Buy) throw UnsupportedOperationException() - val blockchain = Blockchain.fromId(cryptoCurrency.network.rawId) + val blockchain = cryptoCurrency.network.toBlockchain() val supportedCurrency = blockchain.moonPaySupportedCurrency ?: return null val moonpayCurrency = status?.availableForSell?.firstOrNull { when (cryptoCurrency) { diff --git a/data/common/src/main/kotlin/com/tangem/data/common/currency/CryptoCurrencyFactory.kt b/data/common/src/main/kotlin/com/tangem/data/common/currency/CryptoCurrencyFactory.kt index a35bb78aed..016833b806 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/currency/CryptoCurrencyFactory.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/currency/CryptoCurrencyFactory.kt @@ -3,6 +3,7 @@ package com.tangem.data.common.currency import com.tangem.blockchain.common.Blockchain import com.tangem.blockchainsdk.utils.ExcludedBlockchains import com.tangem.blockchainsdk.utils.fromNetworkId +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.blockchainsdk.utils.toCoinId import com.tangem.data.common.network.NetworkFactory import com.tangem.domain.models.currency.CryptoCurrency @@ -97,7 +98,7 @@ class CryptoCurrencyFactory( } fun createCoin(network: Network): CryptoCurrency.Coin { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() return CryptoCurrency.Coin( id = getCoinId(network, blockchain.toCoinId()), diff --git a/data/common/src/main/kotlin/com/tangem/data/common/currency/NetworkOperations.kt b/data/common/src/main/kotlin/com/tangem/data/common/currency/NetworkOperations.kt deleted file mode 100644 index 7642844e58..0000000000 --- a/data/common/src/main/kotlin/com/tangem/data/common/currency/NetworkOperations.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.tangem.data.common.currency - -import com.tangem.blockchain.common.Blockchain -import com.tangem.domain.models.network.Network - -fun getBlockchain(networkId: Network.ID): Blockchain { - return Blockchain.fromId(networkId.rawId.value) -} \ No newline at end of file diff --git a/data/common/src/main/kotlin/com/tangem/data/common/currency/TokensOperations.kt b/data/common/src/main/kotlin/com/tangem/data/common/currency/TokensOperations.kt index 0e77a042dd..b98786855f 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/currency/TokensOperations.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/currency/TokensOperations.kt @@ -2,6 +2,7 @@ package com.tangem.data.common.currency import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.IconsUtil +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.blockchainsdk.utils.toCoinId import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.domain.models.currency.CryptoCurrency @@ -68,11 +69,10 @@ fun getCoinIconUrl(blockchain: Blockchain): String? { } fun List.hasCoinForToken(network: Network): Boolean { - return any { - val blockchain = getBlockchain(networkId = network.id) - val tokenDerivation = network.derivationPath.value - it.id == blockchain.toCoinId() && it.derivationPath == tokenDerivation - } + val coinId = network.toBlockchain().toCoinId() + val tokenDerivation = network.derivationPath.value + + return any { it.id == coinId && it.derivationPath == tokenDerivation } } private fun getCurrencyIdBody(network: Network): CurrencyIdBody { diff --git a/data/common/src/main/kotlin/com/tangem/data/common/currency/UserTokensResponseFactory.kt b/data/common/src/main/kotlin/com/tangem/data/common/currency/UserTokensResponseFactory.kt index b1a6c2f175..4c2623149b 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/currency/UserTokensResponseFactory.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/currency/UserTokensResponseFactory.kt @@ -1,6 +1,5 @@ package com.tangem.data.common.currency -import com.tangem.blockchainsdk.utils.toNetworkId import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.domain.models.currency.CryptoCurrency @@ -27,16 +26,16 @@ class UserTokensResponseFactory { } fun createResponseToken(currency: CryptoCurrency): UserTokensResponse.Token { - val blockchain = getBlockchain(currency.network.id) - - return UserTokensResponse.Token( - id = currency.id.rawCurrencyId?.value, - networkId = blockchain.toNetworkId(), - derivationPath = currency.network.derivationPath.value, - name = currency.name, - symbol = currency.symbol, - decimals = currency.decimals, - contractAddress = (currency as? CryptoCurrency.Token)?.contractAddress, - ) + return with(currency) { + UserTokensResponse.Token( + id = id.rawCurrencyId?.value, + networkId = network.backendId, + derivationPath = network.derivationPath.value, + name = name, + symbol = symbol, + decimals = decimals, + contractAddress = (this as? CryptoCurrency.Token)?.contractAddress, + ) + } } } \ No newline at end of file diff --git a/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt b/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt index 5f57691f92..1e099509fc 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/network/NetworkFactory.kt @@ -4,8 +4,8 @@ import androidx.annotation.VisibleForTesting import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.FeePaidCurrency import com.tangem.blockchainsdk.utils.ExcludedBlockchains +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.blockchainsdk.utils.toNetworkId -import com.tangem.data.common.currency.getBlockchain import com.tangem.domain.common.DerivationStyleProvider import com.tangem.domain.common.extensions.canHandleToken import com.tangem.domain.common.util.cardTypesResolver @@ -57,7 +57,7 @@ class NetworkFactory @Inject constructor( * @param scanResponse scan response */ fun create(networkId: Network.ID, derivationPath: Network.DerivationPath, scanResponse: ScanResponse): Network? { - val blockchain = getBlockchain(networkId) + val blockchain = networkId.toBlockchain() return create( blockchain = blockchain, diff --git a/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/DefaultCustomTokensRepository.kt b/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/DefaultCustomTokensRepository.kt index 33ce8e4ec8..d71e1db8a7 100644 --- a/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/DefaultCustomTokensRepository.kt +++ b/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/DefaultCustomTokensRepository.kt @@ -2,12 +2,12 @@ package com.tangem.data.managetokens import com.tangem.blockchain.common.Blockchain import com.tangem.blockchainsdk.utils.ExcludedBlockchains +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.blockchainsdk.utils.toNetworkId import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.data.common.currency.CryptoCurrencyFactory import com.tangem.data.common.currency.UserTokensResponseFactory import com.tangem.data.common.currency.UserTokensSaver -import com.tangem.data.common.currency.getBlockchain import com.tangem.data.common.network.NetworkFactory import com.tangem.data.managetokens.utils.TokenAddressesConverter import com.tangem.datasource.api.common.response.getOrThrow @@ -48,7 +48,7 @@ internal class DefaultCustomTokensRepository( override suspend fun validateContractAddress(contractAddress: String, networkId: Network.ID): Boolean = withContext(dispatchers.io) { - when (val blockchain = Blockchain.fromId(networkId.rawId.value)) { + when (val blockchain = networkId.toBlockchain()) { Blockchain.Unknown, Blockchain.Binance, Blockchain.BinanceTestnet, @@ -76,7 +76,7 @@ internal class DefaultCustomTokensRepository( } storedCurrencies.tokens.none { token -> - getBlockchain(networkId).toNetworkId() == token.networkId && + networkId.toBlockchain().toNetworkId() == token.networkId && derivationPath.value == token.derivationPath && contractAddress.equals(token.contractAddress, ignoreCase = true) } diff --git a/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/DefaultManageTokensRepository.kt b/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/DefaultManageTokensRepository.kt index ab85a04c36..e57c96ffbc 100644 --- a/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/DefaultManageTokensRepository.kt +++ b/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/DefaultManageTokensRepository.kt @@ -4,11 +4,11 @@ import com.tangem.blockchain.common.Blockchain import com.tangem.blockchainsdk.compatibility.l2BlockchainsCoinIds import com.tangem.blockchainsdk.utils.ExcludedBlockchains import com.tangem.blockchainsdk.utils.fromNetworkId +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.blockchainsdk.utils.toNetworkId import com.tangem.data.common.api.safeApiCall import com.tangem.data.common.currency.CardCryptoCurrencyFactory import com.tangem.data.common.currency.UserTokensResponseFactory -import com.tangem.data.common.currency.getBlockchain import com.tangem.data.common.network.NetworkFactory import com.tangem.data.common.utils.retryOnError import com.tangem.data.managetokens.utils.ManageTokensUpdateFetcher @@ -232,10 +232,11 @@ internal class DefaultManageTokensRepository( token.availableNetworks .filter { sourceNetwork -> networks.contains(sourceNetwork.network) } .map { sourceNetwork -> - val blockchain = getBlockchain(sourceNetwork.network.id) + val networkId = sourceNetwork.network.toBlockchain().toNetworkId() + UserTokensResponse.Token( id = token.id.value, - networkId = blockchain.toNetworkId(), + networkId = networkId, derivationPath = sourceNetwork.network.derivationPath.value, name = token.name, symbol = token.symbol, @@ -257,7 +258,8 @@ internal class DefaultManageTokensRepository( sourceNetwork: SourceNetwork, ): CurrencyUnsupportedState? { val userWallet = userWalletsStore.getSyncStrict(key = userWalletId) - val blockchain = getBlockchain(sourceNetwork.id) + val blockchain = sourceNetwork.id.toBlockchain() + return when (sourceNetwork) { is SourceNetwork.Default -> checkTokenUnsupportedState(userWallet = userWallet, blockchain = blockchain) is SourceNetwork.Main -> checkBlockchainUnsupportedState(userWallet = userWallet, blockchain = blockchain) diff --git a/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/utils/TokenAddressesConverter.kt b/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/utils/TokenAddressesConverter.kt index 3de33d2a41..e440bc4809 100644 --- a/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/utils/TokenAddressesConverter.kt +++ b/data/manage-tokens/src/main/kotlin/com/tangem/data/managetokens/utils/TokenAddressesConverter.kt @@ -3,7 +3,7 @@ package com.tangem.data.managetokens.utils import com.tangem.blockchain.blockchains.cardano.CardanoTokenAddressConverter import com.tangem.blockchain.blockchains.hedera.HederaTokenAddressConverter import com.tangem.blockchain.common.Blockchain -import com.tangem.data.common.currency.getBlockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.domain.models.network.Network internal class TokenAddressesConverter { @@ -11,7 +11,7 @@ internal class TokenAddressesConverter { private val cardanoTokenAddressConverter = CardanoTokenAddressConverter() fun convertTokenAddress(networkId: Network.ID, contractAddress: String, symbol: String?): String { - val convertedAddress = when (getBlockchain(networkId)) { + val convertedAddress = when (networkId.toBlockchain()) { Blockchain.Hedera, Blockchain.HederaTestnet, -> hederaTokenAddressConverter.convertToTokenId(contractAddress) diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/legacy/MercuryoTopUpRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/legacy/MercuryoTopUpRepository.kt index 651666ead3..a2b80fec76 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/legacy/MercuryoTopUpRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/legacy/MercuryoTopUpRepository.kt @@ -1,7 +1,7 @@ package com.tangem.data.onramp.legacy import android.net.Uri -import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.common.extensions.calculateSha512 import com.tangem.common.extensions.toHexString import com.tangem.datasource.local.config.environment.EnvironmentConfig @@ -19,7 +19,7 @@ internal class MercuryoTopUpRepository @Inject constructor( override suspend fun getTopUpUrl(cryptoCurrency: CryptoCurrency, walletAddress: String): String = withContext(dispatchersProvider.default) { - val blockchain = Blockchain.fromId(cryptoCurrency.network.rawId) + val blockchain = cryptoCurrency.network.toBlockchain() val environmentConfig = environmentConfigStorage.getConfigSync() val builder = Uri.Builder() diff --git a/data/qr-scanning/build.gradle.kts b/data/qr-scanning/build.gradle.kts index d97bbdf9e6..5928ce931d 100644 --- a/data/qr-scanning/build.gradle.kts +++ b/data/qr-scanning/build.gradle.kts @@ -19,6 +19,7 @@ dependencies { implementation(projects.domain.tokens.models) implementation(projects.core.ui) + implementation(projects.libs.blockchainSdk) /** SdK */ implementation(tangemDeps.blockchain) diff --git a/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt b/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt index c980c5580d..5b68110f08 100644 --- a/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt +++ b/data/qr-scanning/src/main/java/com/tangem/data/qrscanning/repository/DefaultQrScanningEventsRepository.kt @@ -1,6 +1,6 @@ package com.tangem.data.qrscanning.repository -import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.core.ui.utils.parseBigDecimalOrNull import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.qrscanning.models.QrResult @@ -90,7 +90,7 @@ internal class DefaultQrScanningEventsRepository : QrScanningEventsRepository { } private fun stripSchema(raw: String, currency: CryptoCurrency): String { - val qrSchemas = Blockchain.fromId(currency.network.rawId).getShareScheme() + val qrSchemas = currency.network.toBlockchain().getShareScheme() // The most specific (i.e. the most lengthy) prefixes always come first qrSchemas diff --git a/data/qr-scanning/src/test/java/com/tangem/data/qrscanning/DefaultQrScanningEventsRepositoryTest.kt b/data/qr-scanning/src/test/java/com/tangem/data/qrscanning/DefaultQrScanningEventsRepositoryTest.kt index 512b52f1c6..5e58da8cc7 100644 --- a/data/qr-scanning/src/test/java/com/tangem/data/qrscanning/DefaultQrScanningEventsRepositoryTest.kt +++ b/data/qr-scanning/src/test/java/com/tangem/data/qrscanning/DefaultQrScanningEventsRepositoryTest.kt @@ -76,7 +76,7 @@ internal class DefaultQrScanningEventsRepositoryTest { @Test fun testBip021() { - every { network.rawId } returns Blockchain.Bitcoin.id + every { network.id.rawId.value } returns Blockchain.Bitcoin.id positiveCase( "$schema1:$address1", QrResult(address = address1), @@ -126,7 +126,7 @@ internal class DefaultQrScanningEventsRepositoryTest { @Test fun testErc681Coin() { - every { network.rawId } returns Blockchain.Ethereum.id + every { network.id.rawId.value } returns Blockchain.Ethereum.id positiveCase( address2, QrResult(address = address2), @@ -181,7 +181,7 @@ internal class DefaultQrScanningEventsRepositoryTest { @Test fun testErc681Token() { - every { network.rawId } returns Blockchain.Ethereum.id + every { network.id.rawId.value } returns Blockchain.Ethereum.id positiveCase( address2, QrResult(address = address2), diff --git a/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt b/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt index 3515864df1..b19d89c694 100644 --- a/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt +++ b/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt @@ -10,6 +10,7 @@ import com.tangem.blockchain.common.TransactionData import com.tangem.blockchain.common.TransactionStatus import com.tangem.blockchain.common.transaction.Fee import com.tangem.blockchainsdk.utils.fromNetworkId +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.blockchainsdk.utils.toCoinId import com.tangem.blockchainsdk.utils.toMigratedCoinId import com.tangem.common.extensions.hexToBytes @@ -245,7 +246,7 @@ internal class DefaultStakingRepository( } private fun checkFeatureToggleEnabled(networkId: Network.ID): Boolean { - return when (Blockchain.fromId(networkId.rawId.value)) { + return when (networkId.toBlockchain()) { Blockchain.TON -> stakingFeatureToggles.isTonStakingEnabled Blockchain.Cardano -> stakingFeatureToggles.isCardanoStakingEnabled else -> true 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 84a9cf0999..61c55bc67f 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 @@ -127,8 +127,7 @@ internal class DefaultCurrenciesRepository( currenciesToAdd: List, ): List { return currenciesToAdd.filter { currency -> - val blockchain = getBlockchain(networkId = currency.network.id) - val networkId = blockchain.toNetworkId() + val networkId = currency.network.toBlockchain().toNetworkId() val contractAddress = (currency as? CryptoCurrency.Token)?.contractAddress savedCurrencies.none { token -> @@ -357,7 +356,7 @@ internal class DefaultCurrenciesRepository( "Unable to find tokens response for user wallet with provided ID: $userWalletId" }, ) - val blockchain = Blockchain.fromId(networkId.rawId.value) + val blockchain = networkId.toBlockchain() val blockchainNetworkId = blockchain.toNetworkId() val coinId = blockchain.toCoinId() @@ -410,7 +409,7 @@ internal class DefaultCurrenciesRepository( cryptoCurrencyStatus: CryptoCurrencyStatus, coinStatus: CryptoCurrencyStatus?, ): Boolean { - val blockchain = Blockchain.fromId(cryptoCurrencyStatus.currency.network.rawId) + val blockchain = cryptoCurrencyStatus.currency.network.toBlockchain() val isBitcoinBlockchain = blockchain == Blockchain.Bitcoin || blockchain == Blockchain.BitcoinTestnet return when { cryptoCurrencyStatus.currency is CryptoCurrency.Coin && isBitcoinBlockchain -> { @@ -425,7 +424,7 @@ internal class DefaultCurrenciesRepository( override suspend fun getFeePaidCurrency(userWalletId: UserWalletId, network: Network): FeePaidCurrency { return withContext(dispatchers.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() when (val feePaidCurrency = blockchain.feePaidCurrency()) { FeePaidSdkCurrency.Coin -> FeePaidCurrency.Coin FeePaidSdkCurrency.SameCurrency -> FeePaidCurrency.SameCurrency diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultPolkadotAccountHealthCheckRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultPolkadotAccountHealthCheckRepository.kt index 5d668a19b3..dfb9f0d197 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultPolkadotAccountHealthCheckRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultPolkadotAccountHealthCheckRepository.kt @@ -5,6 +5,7 @@ import com.tangem.blockchain.blockchains.polkadot.AccountCheckProvider import com.tangem.blockchain.blockchains.polkadot.network.accounthealthcheck.ExtrinsicListItemResponse import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.BlockchainSdkError +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.PreferencesKeys.POLKADOT_HEALTH_CHECKED_IMMUTABLE_ACCOUNTS_KEY import com.tangem.datasource.local.preferences.PreferencesKeys.POLKADOT_HEALTH_CHECKED_RESET_ACCOUNTS_KEY @@ -39,7 +40,7 @@ internal class DefaultPolkadotAccountHealthCheckRepository( override suspend fun runCheck(userWalletId: UserWalletId, network: Network) { // Run Polkadot account health check - if (Blockchain.fromId(network.rawId) != Blockchain.Polkadot) return + if (network.toBlockchain() != Blockchain.Polkadot) return val walletManager = walletManagersFacade.getOrCreateWalletManager(userWalletId, network) val address = requireNotNull(walletManager?.wallet?.address) { diff --git a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultFeeRepository.kt b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultFeeRepository.kt index 89007cea98..b018bc23c3 100644 --- a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultFeeRepository.kt +++ b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultFeeRepository.kt @@ -1,13 +1,13 @@ package com.tangem.data.transaction import com.tangem.blockchain.common.AmountType -import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.domain.models.network.Network import com.tangem.domain.transaction.FeeRepository internal class DefaultFeeRepository : FeeRepository { + override fun isFeeApproximate(networkId: Network.ID, amountType: AmountType): Boolean { - val blockchain = Blockchain.fromId(networkId.rawId.value) - return blockchain.isFeeApproximate(amountType) + return networkId.toBlockchain().isFeeApproximate(amountType) } } \ No newline at end of file diff --git a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultTransactionRepository.kt b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultTransactionRepository.kt index 25d02aeaf3..d1de414bbc 100644 --- a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultTransactionRepository.kt +++ b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultTransactionRepository.kt @@ -19,6 +19,7 @@ import com.tangem.blockchain.common.smartcontract.SmartContractCallDataProviderF import com.tangem.blockchain.common.transaction.Fee import com.tangem.blockchain.nft.models.NFTAsset import com.tangem.blockchainsdk.utils.fromNetworkId +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.datasource.local.walletmanager.WalletManagersStore import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.network.Network @@ -47,7 +48,7 @@ internal class DefaultTransactionRepository( network: Network, txExtras: TransactionExtras?, ): TransactionData.Uncompiled = withContext(coroutineDispatcherProvider.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = walletManagersFacade.getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -83,7 +84,7 @@ internal class DefaultTransactionRepository( userWalletId: UserWalletId, network: Network, ): TransactionData.Uncompiled = withContext(coroutineDispatcherProvider.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = walletManagersFacade.getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -137,7 +138,7 @@ internal class DefaultTransactionRepository( userWalletId: UserWalletId, network: Network, ): TransactionData.Uncompiled = withContext(coroutineDispatcherProvider.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val extras = createTransactionDataExtras( callData = SmartContractCallDataProviderFactory.getApprovalCallData( @@ -170,7 +171,7 @@ internal class DefaultTransactionRepository( userWalletId: UserWalletId, network: Network, ): TransactionData.Uncompiled = withContext(coroutineDispatcherProvider.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() // For now transfer one nft asset at a time val updatedNFTAsset = nftAsset.copy( @@ -228,7 +229,7 @@ internal class DefaultTransactionRepository( userWalletId: UserWalletId, network: Network, ): Result = withContext(coroutineDispatcherProvider.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = walletManagersStore.getSyncOrNull( userWalletId = userWalletId, blockchain = blockchain, @@ -259,7 +260,7 @@ internal class DefaultTransactionRepository( userWalletId: UserWalletId, network: Network, ) = withContext(coroutineDispatcherProvider.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = walletManagersFacade.getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -273,15 +274,15 @@ internal class DefaultTransactionRepository( signer: TransactionSigner, userWalletId: UserWalletId, network: Network, - mode: TransactionSender.MultipleTransactionSendMode, + sendMode: TransactionSender.MultipleTransactionSendMode, ) = withContext(coroutineDispatcherProvider.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = walletManagersFacade.getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, derivationPath = network.derivationPath.value, ) - (walletManager as TransactionSender).sendMultiple(txsData, signer, mode) + (walletManager as TransactionSender).sendMultiple(txsData, signer, sendMode) } override fun createTransactionDataExtras( @@ -315,7 +316,7 @@ internal class DefaultTransactionRepository( spenderAddress: String, ): BigDecimal { val walletManager = walletManagersFacade.getOrCreateWalletManager(userWalletId, cryptoCurrency.network) - val blockchain = Blockchain.fromId(cryptoCurrency.network.rawId) + val blockchain = cryptoCurrency.network.toBlockchain() val allowanceResult = (walletManager as? Approver)?.getAllowance( spenderAddress, Token( @@ -388,7 +389,7 @@ internal class DefaultTransactionRepository( } private suspend fun getPreparer(network: Network, userWalletId: UserWalletId): TransactionPreparer { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = walletManagersFacade.getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, diff --git a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultWalletAddressServiceRepository.kt b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultWalletAddressServiceRepository.kt index 24cd30def4..a85f05371d 100644 --- a/data/transaction/src/main/java/com/tangem/data/transaction/DefaultWalletAddressServiceRepository.kt +++ b/data/transaction/src/main/java/com/tangem/data/transaction/DefaultWalletAddressServiceRepository.kt @@ -4,6 +4,7 @@ import android.net.Uri import androidx.core.text.isDigitsOnly import com.tangem.blockchain.blockchains.near.NearWalletManager import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.domain.models.network.Network import com.tangem.domain.transaction.WalletAddressServiceRepository import com.tangem.domain.walletmanager.WalletManagersFacade @@ -21,7 +22,7 @@ class DefaultWalletAddressServiceRepository( override suspend fun validateAddress(userWalletId: UserWalletId, network: Network, address: String): Boolean = withContext(dispatchers.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() if (blockchain.isNear()) { val walletManager = walletManagersFacade.getOrCreateWalletManager( @@ -50,7 +51,7 @@ class DefaultWalletAddressServiceRepository( } override suspend fun parseSharedAddress(input: String, network: Network): ParsedQrCode { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val addressSchemeSplit = when (blockchain) { Blockchain.BitcoinCash, Blockchain.Kaspa -> listOf(input) else -> input.split(":") diff --git a/data/txhistory/src/main/kotlin/com/tangem/data/txhistory/repository/DefaultTxHistoryRepository.kt b/data/txhistory/src/main/kotlin/com/tangem/data/txhistory/repository/DefaultTxHistoryRepository.kt index 1a8e156f3f..863c9e88dd 100644 --- a/data/txhistory/src/main/kotlin/com/tangem/data/txhistory/repository/DefaultTxHistoryRepository.kt +++ b/data/txhistory/src/main/kotlin/com/tangem/data/txhistory/repository/DefaultTxHistoryRepository.kt @@ -3,8 +3,8 @@ package com.tangem.data.txhistory.repository import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.PagingData -import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.externallinkprovider.TxExploreState +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.data.common.cache.CacheRegistry import com.tangem.data.txhistory.repository.paging.TxHistoryPagingSource import com.tangem.datasource.local.txhistory.TxHistoryItemsStore @@ -77,7 +77,7 @@ class DefaultTxHistoryRepository( @Deprecated("Replace with getTxExploreUrl [UserWalletId, Network] instead") override fun getTxExploreUrl(txHash: String, networkId: Network.ID): String { - val blockchain = Blockchain.fromId(networkId.rawId.value) + val blockchain = networkId.toBlockchain() return when (val txExploreState = blockchain.getExploreTxUrl(txHash)) { is TxExploreState.Url -> txExploreState.url is TxExploreState.Unsupported -> "" @@ -85,7 +85,7 @@ class DefaultTxHistoryRepository( } override suspend fun getTxExploreUrl(userWalletId: UserWalletId, network: Network): String { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = walletManagersFacade.getOrCreateWalletManager( userWalletId = userWalletId, network = network, diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt index d6f14be62b..c495325ca3 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthNetwork.kt @@ -3,6 +3,7 @@ package com.tangem.data.walletconnect.network.ethereum import com.squareup.moshi.Moshi import com.tangem.blockchain.common.Blockchain import com.tangem.blockchainsdk.utils.ExcludedBlockchains +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.data.walletconnect.model.CAIP2 import com.tangem.data.walletconnect.model.NamespaceKey import com.tangem.data.walletconnect.request.WcRequestToUseCaseConverter @@ -104,8 +105,8 @@ internal class WcEthNetwork( private fun parseTypeData(params: String): WcEthMethod.SignTypedData? { val account = params.substring(params.indexOf("\"") + 1, params.indexOf("\"", startIndex = 2)) val data = params.substring(params.indexOfFirst { it == '{' }, params.indexOfLast { it == '}' } + 1) - val params = moshi.fromJson(data) ?: return null - return WcEthMethod.SignTypedData(params = params, account = account, dataForSign = data) + val parsedParams = moshi.fromJson(data) ?: return null + return WcEthMethod.SignTypedData(params = parsedParams, account = account, dataForSign = data) } internal class NamespaceConverter( @@ -125,7 +126,7 @@ internal class WcEthNetwork( } override fun toCAIP2(network: Network): CAIP2? { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() if (!blockchain.isEvm()) return null val chainId = blockchain.getChainId() ?: return null return CAIP2( diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthTxHelper.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthTxHelper.kt index e1de463810..4090d40647 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthTxHelper.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/ethereum/WcEthTxHelper.kt @@ -8,6 +8,7 @@ import com.tangem.blockchain.common.TransactionData import com.tangem.blockchain.common.smartcontract.CompiledSmartContractCallData import com.tangem.blockchain.common.transaction.Fee import com.tangem.blockchain.extensions.hexToBigDecimal +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.common.extensions.hexToBytes import com.tangem.domain.models.network.Network import com.tangem.domain.walletconnect.model.WcEthTransactionParams @@ -20,7 +21,7 @@ internal object WcEthTxHelper { val gasLimit = txParams.gas?.hexToBigDecimal() ?: return null val gasPrice = txParams.gasPrice?.hexToBigDecimal() ?: return null - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() var feeDecimal = (gasLimit * gasPrice) .movePointLeft(blockchain.decimals()) @@ -38,7 +39,7 @@ internal object WcEthTxHelper { txParams: WcEthTransactionParams, ): TransactionData.Uncompiled? { val destinationAddress = txParams.to ?: return null - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val value = (txParams.value ?: "0") .hexToBigDecimal() .movePointLeft(blockchain.decimals()) diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/solana/WcSolanaNetwork.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/solana/WcSolanaNetwork.kt index b5fe4a8eea..2612c60f22 100644 --- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/solana/WcSolanaNetwork.kt +++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/network/solana/WcSolanaNetwork.kt @@ -4,6 +4,7 @@ import com.squareup.moshi.Moshi import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.extensions.decodeBase58 import com.tangem.blockchainsdk.utils.ExcludedBlockchains +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.common.extensions.toHexString import com.tangem.data.walletconnect.model.CAIP2 import com.tangem.data.walletconnect.model.NamespaceKey @@ -84,7 +85,7 @@ internal class WcSolanaNetwork( } override fun toCAIP2(network: Network): CAIP2? { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val chainId = when (blockchain) { Blockchain.Solana -> MAINNET_CHAIN_ID Blockchain.SolanaTestnet -> TESTNET_CHAIN_ID diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/GetExtendedPublicKeyForCurrencyUseCase.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/GetExtendedPublicKeyForCurrencyUseCase.kt index c07ece0c9a..7e6414e4ed 100644 --- a/domain/card/src/main/kotlin/com/tangem/domain/card/GetExtendedPublicKeyForCurrencyUseCase.kt +++ b/domain/card/src/main/kotlin/com/tangem/domain/card/GetExtendedPublicKeyForCurrencyUseCase.kt @@ -2,6 +2,7 @@ package com.tangem.domain.card import arrow.core.Either import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.common.extensions.ByteArrayKey import com.tangem.common.extensions.calculateRipemd160 import com.tangem.common.extensions.calculateSha256 @@ -26,7 +27,7 @@ class GetExtendedPublicKeyForCurrencyUseCase( val userWallet = walletManagersFacade.getOrCreateWalletManager(userWalletId, network) ?: error("Wallet not found") - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val isSecp256k1Blockchain = Blockchain.secp256k1Blockchains(network.isTestnet).contains(blockchain) val hdKey = if (isSecp256k1Blockchain) { @@ -76,7 +77,7 @@ class GetExtendedPublicKeyForCurrencyUseCase( val userWallet = walletManagersFacade.getOrCreateWalletManager(userWalletId, network) ?: error("Wallet not found") - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val isSecp256k1Blockchain = Blockchain.secp256k1Blockchains(network.isTestnet).contains(blockchain) val isHdKey = userWallet.wallet.publicKey.derivationType?.hdKey diff --git a/domain/card/src/main/kotlin/com/tangem/domain/card/NetworkHasDerivationUseCase.kt b/domain/card/src/main/kotlin/com/tangem/domain/card/NetworkHasDerivationUseCase.kt index 4bfef866dc..aaa5711ded 100644 --- a/domain/card/src/main/kotlin/com/tangem/domain/card/NetworkHasDerivationUseCase.kt +++ b/domain/card/src/main/kotlin/com/tangem/domain/card/NetworkHasDerivationUseCase.kt @@ -1,7 +1,7 @@ package com.tangem.domain.card import arrow.core.Either -import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.domain.common.util.hasDerivation import com.tangem.domain.models.network.Network import com.tangem.domain.models.scan.ScanResponse @@ -9,7 +9,7 @@ import com.tangem.domain.models.scan.ScanResponse class NetworkHasDerivationUseCase { operator fun invoke(scanResponse: ScanResponse, network: Network): Either { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val derivationPath = network.derivationPath.value return Either.catch { derivationPath != null && scanResponse.hasDerivation(blockchain, derivationPath) } } diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt index b175f0d127..8291bd4318 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt @@ -20,6 +20,7 @@ import com.tangem.blockchain.nft.models.NFTAsset import com.tangem.blockchain.nft.models.NFTCollection import com.tangem.blockchain.transactionhistory.models.TransactionHistoryRequest import com.tangem.blockchainsdk.BlockchainSDKFactory +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.crypto.hdWallet.DerivationPath import com.tangem.datasource.asset.loader.AssetLoader import com.tangem.datasource.local.userwallet.UserWalletsStore @@ -78,7 +79,7 @@ class DefaultWalletManagersFacade( extraTokens: Set, ): UpdateWalletManagerResult { val userWallet = getUserWallet(userWalletId) - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val derivationPath = network.derivationPath.value return getAndUpdateWalletManager(userWallet, blockchain, derivationPath, extraTokens) @@ -88,7 +89,7 @@ class DefaultWalletManagersFacade( if (networks.isEmpty()) return val blockchainsToDerivationPaths = networks.map { - Blockchain.fromId(it.rawId) to it.derivationPath.value + it.toBlockchain() to it.derivationPath.value } withContext(dispatchers.io) { @@ -141,7 +142,7 @@ class DefaultWalletManagersFacade( withContext(dispatchers.io) { val walletManager = walletManagersStore.getSyncOrNull( userWalletId = userWalletId, - blockchain = Blockchain.fromId(network.rawId), + blockchain = network.toBlockchain(), derivationPath = network.derivationPath.value, ) ?: return@withContext @@ -158,7 +159,7 @@ class DefaultWalletManagersFacade( network: Network, ): UpdateWalletManagerResult { val userWallet = getUserWallet(userWalletId) - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val derivationPath = network.derivationPath.value if (derivationPath != null && !userWallet.scanResponse.hasDerivation(blockchain, derivationPath)) { @@ -181,7 +182,7 @@ class DefaultWalletManagersFacade( addressType: AddressType, contractAddress: String?, ): String { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = getOrCreateWalletManager( userWalletId = userWalletId, network = network, @@ -385,7 +386,7 @@ class DefaultWalletManagersFacade( @Deprecated("Will be removed in future") override suspend fun getOrCreateWalletManager(userWalletId: UserWalletId, network: Network): WalletManager? { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() return getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -477,7 +478,7 @@ class DefaultWalletManagersFacade( userWalletId: UserWalletId, network: Network, ): Result? = withContext(dispatchers.io) { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -566,7 +567,7 @@ class DefaultWalletManagersFacade( decimals: Int, id: String?, ): BigDecimal { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -637,7 +638,7 @@ class DefaultWalletManagersFacade( } override suspend fun checkUtxoConsolidationAvailability(userWalletId: UserWalletId, network: Network): Boolean { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -648,7 +649,7 @@ class DefaultWalletManagersFacade( } override suspend fun getNFTCollections(userWalletId: UserWalletId, network: Network): List { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -663,7 +664,7 @@ class DefaultWalletManagersFacade( network: Network, collectionIdentifier: NFTCollection.Identifier, ): List { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -679,7 +680,7 @@ class DefaultWalletManagersFacade( collectionIdentifier: NFTCollection.Identifier, assetIdentifier: NFTAsset.Identifier, ): NFTAsset? { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -694,7 +695,7 @@ class DefaultWalletManagersFacade( collectionIdentifier: NFTCollection.Identifier, assetIdentifier: NFTAsset.Identifier, ): NFTAsset.SalePrice? { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() val walletManager = getOrCreateWalletManager( userWalletId = userWalletId, blockchain = blockchain, @@ -704,7 +705,7 @@ class DefaultWalletManagersFacade( } override suspend fun getNFTExploreUrl(network: Network, assetIdentifier: NFTAsset.Identifier): String? { - val blockchain = Blockchain.fromId(network.rawId) + val blockchain = network.toBlockchain() return blockchain.getNFTExploreUrl(assetIdentifier) } diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt index 798e9c8b57..30e26920fe 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt @@ -10,6 +10,7 @@ import com.tangem.blockchain.common.smartcontract.SmartContractCallDataProviderF import com.tangem.blockchain.common.transaction.Fee import com.tangem.blockchain.common.transaction.TransactionFee import com.tangem.blockchainsdk.utils.fromNetworkId +import com.tangem.blockchainsdk.utils.toBlockchain import com.tangem.core.ui.format.bigdecimal.fiat import com.tangem.core.ui.format.bigdecimal.format import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase @@ -466,7 +467,7 @@ internal class SwapInteractorImpl @AssistedInject constructor( is TxFeeState.MultipleFeeState -> feeState.normalFee.feeValue is TxFeeState.SingleFeeState -> feeState.fee.feeValue }, - blockchain = Blockchain.fromId(currency.network.rawId), + blockchain = currency.network.toBlockchain(), ), ) @@ -1387,7 +1388,7 @@ internal class SwapInteractorImpl @AssistedInject constructor( val callData = SmartContractCallDataProviderFactory.getApprovalCallData( spenderAddress = requireNotNull(spenderAddress) { "Spender address is null" }, amount = swapAmount.value.convertToSdkAmount(fromToken), - blockchain = Blockchain.fromId(fromToken.network.rawId), + blockchain = fromToken.network.toBlockchain(), ) val feeData = try { val extras = createTransactionExtrasUseCase( diff --git a/libs/blockchain-sdk/build.gradle.kts b/libs/blockchain-sdk/build.gradle.kts index 5b0077a1d2..42a75d606f 100644 --- a/libs/blockchain-sdk/build.gradle.kts +++ b/libs/blockchain-sdk/build.gradle.kts @@ -22,6 +22,8 @@ dependencies { implementation(projects.core.analytics) // endregion + api(projects.domain.models) + // region AndroidX libraries implementation(deps.androidx.datastore) // endregion diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/NetworkExt.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/NetworkExt.kt new file mode 100644 index 0000000000..61d715f180 --- /dev/null +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/NetworkExt.kt @@ -0,0 +1,10 @@ +package com.tangem.blockchainsdk.utils + +import com.tangem.blockchain.common.Blockchain +import com.tangem.domain.models.network.Network + +/** Converts [Network] to [Blockchain] */ +fun Network.toBlockchain(): Blockchain = id.toBlockchain() + +/** Converts [Network.ID] to [Blockchain] */ +fun Network.ID.toBlockchain(): Blockchain = Blockchain.fromId(id = rawId.value) \ No newline at end of file