Updated on 2026-08-14

This commit is contained in:
Tangem 2022-11-17 21:46:18 +03:00
parent d7d7b3f301
commit 62a032e3d1
9 changed files with 119 additions and 30 deletions

View file

@ -184,7 +184,7 @@ class TokensMiddleware {
}
}
private fun deriveMissingBlockchains(
fun deriveMissingBlockchains(
scanResponse: ScanResponse,
currencyList: List<Currency>,
onSuccess: (ScanResponse) -> Unit,

View file

@ -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
}
}

View file

@ -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
}
}

View file

@ -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<AppState>,
) : UserWalletManager {
override fun getUserTokens(): List<Token> {
TODO("Not yet implemented")
override suspend fun getUserTokens(): List<Token> {
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 ""
}
}

View file

@ -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

View file

@ -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

View file

@ -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
}

View file

@ -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<Token>
suspend fun getUserTokens(): List<Token>
/**
* 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

View file

@ -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?,
)