From 62a032e3d1bd02403c466790590d02c0b1002e7d Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 17 Nov 2022 21:46:18 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../features/tokens/redux/TokensMiddleware.kt | 2 +- .../com/tangem/tap/proxy/CardStateHolder.kt | 13 ++++ .../tangem/tap/proxy/DerivationManagerImpl.kt | 35 +++++++-- .../tangem/tap/proxy/UserWalletManagerImpl.kt | 73 ++++++++++++++++--- .../referral/domain/ReferralInteractorImpl.kt | 6 +- .../domain/converter/TokensConverter.kt | 2 +- .../tangem/lib/crypto/DerivationManager.kt | 6 +- .../tangem/lib/crypto/UserWalletManager.kt | 8 +- .../com/tangem/lib/crypto/models/Token.kt | 4 +- 9 files changed, 119 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/proxy/CardStateHolder.kt 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 6ccf1b9b58..7b2322f79d 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 @@ -184,7 +184,7 @@ class TokensMiddleware { } } - private fun deriveMissingBlockchains( + fun deriveMissingBlockchains( scanResponse: ScanResponse, currencyList: List, onSuccess: (ScanResponse) -> Unit, diff --git a/app/src/main/java/com/tangem/tap/proxy/CardStateHolder.kt b/app/src/main/java/com/tangem/tap/proxy/CardStateHolder.kt new file mode 100644 index 0000000000..2729f1fc99 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/proxy/CardStateHolder.kt @@ -0,0 +1,13 @@ +package com.tangem.tap.proxy + +import com.tangem.common.card.Card +import com.tangem.domain.common.ScanResponse + +class CardStateHolder { + + val scanResponse: ScanResponse? = null + + fun getActualCard(): Card? { + return scanResponse?.card + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/proxy/DerivationManagerImpl.kt b/app/src/main/java/com/tangem/tap/proxy/DerivationManagerImpl.kt index a323e29196..e3aca88845 100644 --- a/app/src/main/java/com/tangem/tap/proxy/DerivationManagerImpl.kt +++ b/app/src/main/java/com/tangem/tap/proxy/DerivationManagerImpl.kt @@ -1,14 +1,37 @@ package com.tangem.tap.proxy -import com.tangem.crypto.DerivationManager +import com.tangem.blockchain.common.Blockchain +import com.tangem.domain.common.TapWorkarounds.derivationStyle +import com.tangem.domain.common.extensions.fromNetworkId +import com.tangem.lib.crypto.DerivationManager +import com.tangem.tap.features.tokens.redux.TokensMiddleware -class DerivationManagerImpl : DerivationManager { +class DerivationManagerImpl( + val tokesMiddleware: TokensMiddleware, + val cardStateHolder: CardStateHolder, +) : DerivationManager { - override fun deriveMissingBlockchains(networkId: String?) { - TODO("Not yet implemented") + override suspend fun deriveMissingBlockchains(networkId: String) { + if (cardStateHolder.scanResponse != null) { //todo how to get Currency list from token + tokesMiddleware.deriveMissingBlockchains( + cardStateHolder.scanResponse, emptyList(), + ) { + + } + } } - override fun hasDerivation(): Boolean { - TODO("Not yet implemented") + override fun hasDerivation(networkId: String): Boolean { + val scanResponse = cardStateHolder.scanResponse + val blockchain = Blockchain.fromNetworkId(networkId) + if (scanResponse != null && blockchain != null) { + val derivationPath = blockchain.derivationPath(cardStateHolder.getActualCard()?.derivationStyle)?.rawPath + if (derivationPath.isNullOrEmpty()) return false + return scanResponse.hasDerivation( + blockchain, + derivationPath, + ) + } + return false } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt b/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt index 45843af752..d8e04f93c9 100644 --- a/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt +++ b/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt @@ -1,27 +1,80 @@ package com.tangem.tap.proxy -import com.tangem.crypto.UserWalletManager -import com.tangem.crypto.models.Token +import com.tangem.blockchain.common.Blockchain +import com.tangem.domain.common.extensions.fromNetworkId +import com.tangem.domain.common.extensions.toNetworkId +import com.tangem.lib.crypto.UserWalletManager +import com.tangem.lib.crypto.models.Token +import com.tangem.tap.common.redux.AppState +import com.tangem.tap.domain.extensions.getUserWalletId +import com.tangem.tap.domain.tokens.UserTokensRepository +import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.wallet.redux.WalletAction +import org.rekotlin.Store -class UserWalletManagerImpl : UserWalletManager { +class UserWalletManagerImpl( + private val userTokensRepository: UserTokensRepository, + private val cardStateHolder: CardStateHolder, + private val mainStore: Store, +) : UserWalletManager { - override fun getUserTokens(): List { - TODO("Not yet implemented") + override suspend fun getUserTokens(): List { + val card = cardStateHolder.getActualCard() + if (card != null) { + userTokensRepository.getUserTokens(card) + .filter { it.isToken() } + .map { + Token( + id = it.coinId ?: "", + name = it.currencyName, + symbol = it.currencySymbol, + networkId = it.blockchain.toNetworkId(), + contractAddress = null, + decimalCount = it.decimals, + ) + } + } + return emptyList() } override fun getWalletId(): String { - TODO("Not yet implemented") + return cardStateHolder.getActualCard()?.getUserWalletId() ?: "" } - override fun isTokenAdded(token: Token): Boolean { - TODO("Not yet implemented") + override suspend fun isTokenAdded(token: Token): Boolean { + val card = cardStateHolder.getActualCard() + if (card != null) { + return userTokensRepository.getUserTokens(card) + .any { it.coinId.equals(token.id) } //todo ensure that its the same ids + } + return false } + //todo check is it sync operation override fun addToken(token: Token) { - TODO("Not yet implemented") + val card = cardStateHolder.getActualCard() + val blockchain = Blockchain.fromNetworkId(token.networkId) + if (card != null && blockchain != null) { + val addAction = WalletAction.MultiWallet.AddToken( + token = com.tangem.blockchain.common.Token( + id = token.id, + name = token.name, + symbol = token.symbol, + contractAddress = token.contractAddress + ?: "", //todo clarify where to find that if data from back null + decimals = token.decimalCount ?: 0, //todo clarify where to find that if data from back null + ), + blockchain = BlockchainNetwork( + blockchain, + card, + ), + save = true, + ) + mainStore.dispatch(addAction) + } } override fun getWalletAddress(token: Token): String { - TODO("Not yet implemented") + return "" } } \ No newline at end of file diff --git a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractorImpl.kt b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractorImpl.kt index 3e2dd73ba7..69695dd1b8 100644 --- a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractorImpl.kt +++ b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/ReferralInteractorImpl.kt @@ -1,8 +1,8 @@ package com.tangem.feature.referral.domain -import com.tangem.crypto.DerivationManager -import com.tangem.crypto.UserWalletManager -import com.tangem.crypto.models.Token +import com.tangem.lib.crypto.DerivationManager +import com.tangem.lib.crypto.UserWalletManager +import com.tangem.lib.crypto.models.Token import com.tangem.feature.referral.domain.converter.TokensConverter import com.tangem.feature.referral.domain.models.ReferralData import com.tangem.feature.referral.domain.models.TokenData diff --git a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/converter/TokensConverter.kt b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/converter/TokensConverter.kt index 0a8c565e68..5a98e0f2a0 100644 --- a/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/converter/TokensConverter.kt +++ b/features/referral/domain/src/main/java/com/tangem/feature/referral/domain/converter/TokensConverter.kt @@ -1,6 +1,6 @@ package com.tangem.feature.referral.domain.converter -import com.tangem.crypto.models.Token +import com.tangem.lib.crypto.models.Token import com.tangem.feature.referral.domain.models.TokenData import com.tangem.utils.converter.Converter diff --git a/libs/crypto/src/main/java/com/tangem/lib/crypto/DerivationManager.kt b/libs/crypto/src/main/java/com/tangem/lib/crypto/DerivationManager.kt index 8e77e85480..ed5f1ffe3f 100644 --- a/libs/crypto/src/main/java/com/tangem/lib/crypto/DerivationManager.kt +++ b/libs/crypto/src/main/java/com/tangem/lib/crypto/DerivationManager.kt @@ -1,8 +1,8 @@ -package com.tangem.crypto +package com.tangem.lib.crypto interface DerivationManager { - fun deriveMissingBlockchains(networkId: String?) + suspend fun deriveMissingBlockchains(networkId: String) - fun hasDerivation(): Boolean + fun hasDerivation(networkId: String): Boolean } \ No newline at end of file diff --git a/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt b/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt index 8bb117cd15..0ea6a506d3 100644 --- a/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt +++ b/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt @@ -1,6 +1,6 @@ -package com.tangem.crypto +package com.tangem.lib.crypto -import com.tangem.crypto.models.Token +import com.tangem.lib.crypto.models.Token /** * Provider for user tokens data @@ -10,7 +10,7 @@ interface UserWalletManager { /** * Returns all user tokens (merged from local and backend) */ - fun getUserTokens(): List + suspend fun getUserTokens(): List /** * Returns user walletId @@ -22,7 +22,7 @@ interface UserWalletManager { * * @param token to receive referral payments */ - fun isTokenAdded(token: Token): Boolean + suspend fun isTokenAdded(token: Token): Boolean /** * Adds token to wallet if its not diff --git a/libs/crypto/src/main/java/com/tangem/lib/crypto/models/Token.kt b/libs/crypto/src/main/java/com/tangem/lib/crypto/models/Token.kt index 86c314a573..eb9593843e 100644 --- a/libs/crypto/src/main/java/com/tangem/lib/crypto/models/Token.kt +++ b/libs/crypto/src/main/java/com/tangem/lib/crypto/models/Token.kt @@ -1,10 +1,10 @@ -package com.tangem.crypto.models +package com.tangem.lib.crypto.models data class Token( val id: String, val name: String, val symbol: String, - val networkId: String?, + val networkId: String, val contractAddress: String?, val decimalCount: Int?, ) \ No newline at end of file