From 222398b9bb7e09491df00f92526822709fa7a7a7 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 6 Oct 2022 11:18:02 +0400 Subject: [PATCH 01/11] Updated on 2026-08-14 --- .../domain/tokens/UserTokensNetworkService.kt | 7 ++--- .../tap/domain/tokens/UserTokensRepository.kt | 27 ++++++++++++++----- .../domain/tokens/UserTokensStorageService.kt | 6 ++--- .../network/api/tangemTech/Responses.kt | 4 +-- 4 files changed, 27 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensNetworkService.kt b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensNetworkService.kt index ad188c6913..c0b7e18155 100644 --- a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensNetworkService.kt +++ b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensNetworkService.kt @@ -5,7 +5,6 @@ import com.tangem.common.services.Result import com.tangem.network.api.tangemTech.TangemTechService import com.tangem.network.api.tangemTech.UserTokensResponse import com.tangem.tap.domain.NoDataError -import com.tangem.tap.features.wallet.models.Currency class UserTokensNetworkService(private val tangemTechService: TangemTechService) { suspend fun getUserTokens(userId: String): Result { @@ -22,9 +21,7 @@ class UserTokensNetworkService(private val tangemTechService: TangemTechService) } } - suspend fun saveUserTokens(userId: String, tokens: List): Result { - val tokensResponse = tokens.map { it.toTokenResponse() } - val data = UserTokensResponse(tokens = tokensResponse) - return tangemTechService.putUserTokens(userId, data) + suspend fun saveUserTokens(userId: String, tokens: UserTokensResponse): Result { + return tangemTechService.putUserTokens(userId, tokens) } } diff --git a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensRepository.kt b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensRepository.kt index e418215ed7..fd1583d9ef 100644 --- a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensRepository.kt @@ -8,6 +8,7 @@ import com.tangem.common.extensions.toHexString import com.tangem.common.services.Result import com.tangem.domain.common.extensions.calculateHmacSha256 import com.tangem.network.api.tangemTech.TangemTechService +import com.tangem.network.api.tangemTech.UserTokensResponse import com.tangem.tap.common.AndroidFileReader import com.tangem.tap.domain.NoDataError import com.tangem.tap.domain.tokens.models.BlockchainNetwork @@ -36,7 +37,7 @@ class UserTokensRepository( return when (val networkResult = networkService.getUserTokens(userId)) { is Result.Success -> { val tokens = networkResult.data.tokens.map { Currency.fromTokenResponse(it) } - storageService.saveUserTokens(card.getUserId(), tokens) + storageService.saveUserTokens(card.getUserId(), tokens.toUserTokensResponse()) tokens } is Result.Failure -> { @@ -46,13 +47,24 @@ class UserTokensRepository( } suspend fun saveUserTokens(card: Card, tokens: List) { - networkService.saveUserTokens(card.getUserId(), tokens) - storageService.saveUserTokens(card.getUserId(), tokens) + val userTokens = tokens.toUserTokensResponse() + networkService.saveUserTokens(card.getUserId(), userTokens) + storageService.saveUserTokens(card.getUserId(), userTokens) } suspend fun removeUserTokens(card: Card) { - networkService.saveUserTokens(card.getUserId(), emptyList()) - storageService.saveUserTokens(card.getUserId(), emptyList()) + val userTokens = emptyList().toUserTokensResponse() + networkService.saveUserTokens(card.getUserId(), userTokens) + storageService.saveUserTokens(card.getUserId(), userTokens) + } + + private fun List.toUserTokensResponse(): UserTokensResponse { + val tokensResponse = this.map { it.toTokenResponse() } + return UserTokensResponse( + tokens = tokensResponse, + group = GROUP_DEFAULT_VALUE, + sort = SORT_DEFAULT_VALUE, + ) } fun loadBlockchainsToDerive(card: Card): List { @@ -77,7 +89,8 @@ class UserTokensRepository( return when (error) { is NoDataError -> { val tokens = storageService.getUserTokens(card) - coroutineScope { launch { networkService.saveUserTokens(userId = userId, tokens = tokens) } } + val userTokens = tokens.toUserTokensResponse() + coroutineScope { launch { networkService.saveUserTokens(userId = userId, tokens = userTokens) } } tokens } else -> { @@ -104,6 +117,8 @@ class UserTokensRepository( companion object { const val MESSAGE = "UserWalletID" + const val SORT_DEFAULT_VALUE = "manual" + const val GROUP_DEFAULT_VALUE = "none" fun init(context: Context, tangemTechService: TangemTechService): UserTokensRepository { val fileReader = AndroidFileReader(context) val oldUserTokensRepository = OldUserTokensRepository( diff --git a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensStorageService.kt b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensStorageService.kt index f2011cbebb..869c49034f 100644 --- a/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensStorageService.kt +++ b/app/src/main/java/com/tangem/tap/domain/tokens/UserTokensStorageService.kt @@ -34,10 +34,8 @@ class UserTokensStorageService( return blockchainNetworks.flatMap { it.toCurrencies() } } - fun saveUserTokens(userId: String, tokens: List) { - val tokensResponse = tokens.map { it.toTokenResponse() } - val data = UserTokensResponse(tokens = tokensResponse) - val json = userTokensAdapter.toJson(data) + fun saveUserTokens(userId: String, tokens: UserTokensResponse) { + val json = userTokensAdapter.toJson(tokens) fileReader.rewriteFile(json, getFileNameForUserTokens(userId)) } diff --git a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt index 4afd9ed2ef..4d9784286e 100644 --- a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt +++ b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt @@ -51,8 +51,8 @@ data class GeoResponse( data class UserTokensResponse( val version: Int = 0, - val group: String = "", - val sort: String = "", + val group: String? = null, + val sort: String? = null, val tokens: List = emptyList(), ) : TangemTechResponse From 960b1306b7299e78147a455ac0c0f1e84fa2a2ab Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 6 Oct 2022 11:19:11 +0400 Subject: [PATCH 02/11] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/features/wallet/models/Currency.kt | 2 +- .../main/java/com/tangem/network/api/tangemTech/Responses.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt index 1500a10a1e..90f905991f 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt @@ -59,7 +59,7 @@ sealed interface Currency { fun isToken(): Boolean = this is Token fun toTokenResponse(): TokenResponse { return TokenResponse( - id = coinId ?: "", + id = coinId, networkId = blockchain.toNetworkId(), derivationPath = derivationPath ?: DERIVATION_PATH_RAW_VALUE, name = currencyName, diff --git a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt index 4d9784286e..291062389d 100644 --- a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt +++ b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt @@ -57,7 +57,7 @@ data class UserTokensResponse( ) : TangemTechResponse data class TokenResponse( - val id: String, + val id: String? = null, val networkId: String, val derivationPath: String, val name: String, From 6a416e3825ea550ec43b51d01012cbc69a1e694a Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 10 Oct 2022 11:38:12 +0400 Subject: [PATCH 03/11] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/features/wallet/models/Currency.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt index 90f905991f..102c872457 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt @@ -70,7 +70,7 @@ sealed interface Currency { } companion object { - private const val DERIVATION_PATH_RAW_VALUE = "m/44/0'/0/0" + private const val DERIVATION_PATH_RAW_VALUE = "m/44'/60'/0'/0/0" fun fromBlockchainNetwork( blockchainNetwork: BlockchainNetwork, token: com.tangem.blockchain.common.Token? = null, From 69a75094c12adf800bee30a7604db9f0522de53c Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 10 Oct 2022 15:45:07 +0400 Subject: [PATCH 04/11] Updated on 2026-08-14 --- .../tangem/tap/features/tokens/redux/TokensMiddleware.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt index 96f742ec97..9817b4db49 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt @@ -278,7 +278,7 @@ class TokensMiddleware { val factory = store.state.globalState.tapWalletManager.walletManagerFactory val derivationStyle = scanResponse.card.derivationStyle - val addActions = currencyList.mapNotNull { currency -> + val addActions = currencyList.mapIndexedNotNull { index, currency -> when (currency) { is Currency.Blockchain -> { val derivationPath = currency.derivationPath?.let { DerivationPath(it) } @@ -293,12 +293,12 @@ class TokensMiddleware { scanResponse = scanResponse, blockchain = currency.blockchain, derivationParams = derivationParams, - ) ?: return@mapNotNull null + ) ?: return@mapIndexedNotNull null val blockchainNetwork = BlockchainNetwork.fromWalletManager(walletManager) WalletAction.MultiWallet.AddBlockchain( blockchain = blockchainNetwork, walletManager = walletManager, - save = true, + save = index == currencyList.lastIndex, ) } is Currency.Token -> { @@ -309,7 +309,7 @@ class TokensMiddleware { WalletAction.MultiWallet.AddToken( token = currency.token, blockchain = blockchainNetwork, - save = true, + save = index == currencyList.lastIndex, ) } } From 9904a6cfcb3b2af9dd3fc4de7f4dc0f923eb42c5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 10 Oct 2022 20:58:22 +0400 Subject: [PATCH 05/11] Updated on 2026-08-14 --- dependencies.gradle | 2 +- .../main/java/com/tangem/domain/common/extensions/Blockchain.kt | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index b23c84e56f..c50297605c 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,7 +2,7 @@ ext.versions = [ kotlin : '1.6.10', build_gradle : '7.1.3', tangem_card_sdk : 'develop-163', - tangem_blockchain_sdk: 'develop-121', + tangem_blockchain_sdk: 'develop-127', // tangem_blockchain_sdk: '0.0.1', ] diff --git a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index 0668389fcd..a6c96bb9da 100644 --- a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -98,6 +98,7 @@ fun Blockchain.toNetworkId(): String { Blockchain.Optimism -> "optimistic-ethereum" Blockchain.OptimismTestnet -> "optimistic-ethereum/test" Blockchain.Dash -> "dash" + Blockchain.SaltPay -> "wxdai" } } @@ -129,6 +130,7 @@ fun Blockchain.toCoinId(): String { Blockchain.Kusama -> "kusama" Blockchain.Optimism, Blockchain.OptimismTestnet -> "ethereum" Blockchain.Dash -> "dash" + Blockchain.SaltPay -> "wxdai" Blockchain.Unknown -> "unknown" } } \ No newline at end of file From eb73cafbd004b79ac00df27157f540ce3282329e Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 11 Oct 2022 21:25:37 +0400 Subject: [PATCH 06/11] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 2ea48fb328..1b10998845 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -132,7 +132,6 @@ class TapWalletManager { } dispatchOnMain(WalletAction.LoadWallet()) - dispatchOnMain(WalletAction.LoadFiatRate()) } private suspend fun loadMultiWalletData( @@ -202,6 +201,7 @@ class TapWalletManager { ) } checkIfDerivationsAreMissing(blockchainNetworks, scanResponse) + store.dispatch(WalletAction.LoadFiatRate(coinsList = userTokens)) } } @@ -218,7 +218,6 @@ class TapWalletManager { } store.dispatch(WalletAction.LoadWallet()) - store.dispatch(WalletAction.LoadFiatRate()) } } From 7efc129909e8928408c1187226d3e7501b88f232 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 12 Oct 2022 11:46:55 +0400 Subject: [PATCH 07/11] Updated on 2026-08-14 --- dependencies.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.gradle b/dependencies.gradle index c50297605c..1a2357315a 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,7 +2,7 @@ ext.versions = [ kotlin : '1.6.10', build_gradle : '7.1.3', tangem_card_sdk : 'develop-163', - tangem_blockchain_sdk: 'develop-127', + tangem_blockchain_sdk: 'develop-128', // tangem_blockchain_sdk: '0.0.1', ] From ed47aefb33aa6316617ca4db546128200d4f5dc0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 12 Oct 2022 12:17:19 +0400 Subject: [PATCH 08/11] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../tangem/tap/features/wallet/models/Currency.kt | 12 +++--------- .../com/tangem/network/api/tangemTech/Responses.kt | 2 +- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index f33f020823..8a36217ba8 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit f33f020823031f1c532cf5a9d5cf3fbecadcf050 +Subproject commit 8a36217ba816e1cc7cbc7290ffb948282ec15f6b diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt index 102c872457..7597156ab9 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt @@ -61,7 +61,7 @@ sealed interface Currency { return TokenResponse( id = coinId, networkId = blockchain.toNetworkId(), - derivationPath = derivationPath ?: DERIVATION_PATH_RAW_VALUE, + derivationPath = derivationPath, name = currencyName, symbol = currencySymbol, decimals = decimals, @@ -70,7 +70,6 @@ sealed interface Currency { } companion object { - private const val DERIVATION_PATH_RAW_VALUE = "m/44'/60'/0'/0/0" fun fromBlockchainNetwork( blockchainNetwork: BlockchainNetwork, token: com.tangem.blockchain.common.Token? = null, @@ -112,11 +111,6 @@ sealed interface Currency { } fun fromTokenResponse(tokenResponse: TokenResponse): Currency { - val derivationPath = if (tokenResponse.derivationPath == DERIVATION_PATH_RAW_VALUE) { - null - } else { - tokenResponse.derivationPath - } return when { tokenResponse.contractAddress != null -> Token( com.tangem.blockchain.common.Token( @@ -127,11 +121,11 @@ sealed interface Currency { id = tokenResponse.id, ), blockchain = com.tangem.blockchain.common.Blockchain.fromNetworkId(tokenResponse.networkId)!!, - derivationPath = derivationPath, + derivationPath = tokenResponse.derivationPath, ) else -> Blockchain( blockchain = com.tangem.blockchain.common.Blockchain.fromNetworkId(tokenResponse.networkId)!!, - derivationPath = derivationPath, + derivationPath = tokenResponse.derivationPath, ) } } diff --git a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt index 291062389d..4f88fca3b7 100644 --- a/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt +++ b/network/src/main/java/com/tangem/network/api/tangemTech/Responses.kt @@ -59,7 +59,7 @@ data class UserTokensResponse( data class TokenResponse( val id: String? = null, val networkId: String, - val derivationPath: String, + val derivationPath: String? = null, val name: String, val symbol: String, val decimals: Int, From c0cc99984c34add49826a155a5a500b110bba625 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 12 Oct 2022 13:49:48 +0400 Subject: [PATCH 09/11] Updated on 2026-08-14 --- .../java/com/tangem/domain/common/extensions/Blockchain.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index a6c96bb9da..dad3b53860 100644 --- a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -47,6 +47,7 @@ fun Blockchain.Companion.fromNetworkId(networkId: String): Blockchain? { "optimistic-ethereum" -> Blockchain.Optimism "optimistic-ethereum/test" -> Blockchain.OptimismTestnet "dash" -> Blockchain.Dash + "wxdai" -> Blockchain.SaltPay else -> null } } @@ -55,7 +56,7 @@ fun Blockchain.toNetworkId(): String { return when (this) { Blockchain.Unknown -> "unknown" Blockchain.Arbitrum -> "arbitrum-one" - Blockchain.ArbitrumTestnet -> "arbitrum/test" + Blockchain.ArbitrumTestnet -> "arbitrum-one/test" Blockchain.Avalanche -> "avalanche" Blockchain.AvalancheTestnet -> "avalanche/test" Blockchain.Binance -> "binancecoin" From 06c61b9764fcb14d569eff9390ce3d69e3e69c7c Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 17 Oct 2022 19:23:06 +0400 Subject: [PATCH 10/11] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 1b10998845..37a48f65a1 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -173,6 +173,7 @@ class TapWalletManager { walletManagers = listOf(primaryWalletManager), save = false, ), + WalletAction.LoadFiatRate(), ) } } From 2c2d0eaf96965b2d12b02ec4b6048f1fbc08cb86 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 17 Oct 2022 20:32:34 +0400 Subject: [PATCH 11/11] Updated on 2026-08-14 --- .../java/com/tangem/domain/common/extensions/Blockchain.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index dad3b53860..f5e3273391 100644 --- a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -44,7 +44,8 @@ fun Blockchain.Companion.fromNetworkId(networkId: String): Blockchain? { "polkadot" -> Blockchain.Polkadot "polkadot/test" -> Blockchain.PolkadotTestnet "kusama" -> Blockchain.Kusama - "optimistic-ethereum" -> Blockchain.Optimism + // "optimistic-ethereum" -> Blockchain.Optimism + "optimistic-ethereum" -> null //TODO: Optimism is disabled until next release "optimistic-ethereum/test" -> Blockchain.OptimismTestnet "dash" -> Blockchain.Dash "wxdai" -> Blockchain.SaltPay