Updated on 2026-08-14

This commit is contained in:
Tangem 2023-06-09 17:11:34 +05:00
parent 8fd894f5d5
commit 45013d6188
105 changed files with 123 additions and 5898 deletions

View file

@ -7,9 +7,6 @@ interface CardTypesResolver {
fun isTangemNote(): Boolean
fun isTangemWallet(): Boolean
fun isWallet2(): Boolean
fun isSaltPay(): Boolean
fun isSaltPayVisa(): Boolean
fun isSaltPayWallet(): Boolean
fun isTangemTwins(): Boolean
fun isStart2Coin(): Boolean

View file

@ -1,84 +0,0 @@
package com.tangem.domain.common
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.Token
import com.tangem.common.CardIdRange
import com.tangem.common.contains
object SaltPayWorkaround {
@Suppress("MagicNumber")
val visaBatches = listOf(
"AE02",
"AE03",
) + attachTestVisaBatches()
val walletCardIds = listOf(
"AC01000000033503",
"AC01000000033594",
"AC01000000033586",
"AC01000000034477",
"AC01000000032760",
"AC01000000033867",
"AC01000000032653",
"AC01000000032752",
"AC01000000034485",
"AC01000000033644",
"AC01000000037454",
"AC01000000037462",
"AC03000000076070",
"AC03000000076088",
"AC03000000076096",
"AC03000000076104",
"AC03000000076112",
"AC03000000076120",
"AC03000000076138",
"AC03000000076146",
"AC03000000076153",
"AC03000000076161",
"AC03000000076179",
"AC03000000076187",
"AC03000000076195",
"AC03000000076203",
"AC03000000076211",
"AC03000000076229",
) + attachTestWalletCardIds()
val walletCardIdRanges = listOf(
CardIdRange("AC05000000000003", "AC05000000015993")!!,
) + attachTestWalletCardIdRanges()
fun tokenFrom(blockchain: Blockchain): Token {
return when (blockchain) {
Blockchain.SaltPay -> Token(
name = "WXDAI",
symbol = "wxDAI",
contractAddress = "0x4200000000000000000000000000000000000006",
decimals = 18,
id = "wrapped-xdai",
)
else -> error("It is not SaltPay")
}
}
@Suppress("MagicNumber")
fun isSaltPayCardId(cardId: String): Boolean = isVisaBatchId(cardId.take(4)) || isWalletCardId(cardId)
fun isVisaBatchId(batchId: String): Boolean = visaBatches.contains(batchId)
fun isWalletCardId(cardId: String): Boolean {
return if (walletCardIds.contains(cardId)) true else walletCardIdRanges.contains(cardId)
}
private fun attachTestVisaBatches(): List<String> = listOf(
"FF03",
)
private fun attachTestWalletCardIds(): List<String> = listOf(
"FF04000000000232",
)
private fun attachTestWalletCardIdRanges(): List<CardIdRange> = listOf(
CardIdRange("FF04000000000000", "FF04999999999999")!!,
)
}

View file

@ -6,9 +6,6 @@ import com.tangem.common.card.EllipticCurve
import com.tangem.common.card.FirmwareVersion
import com.tangem.common.card.WalletData
import com.tangem.domain.common.TapWorkarounds.getTangemNoteBlockchain
import com.tangem.domain.common.TapWorkarounds.isSaltPay
import com.tangem.domain.common.TapWorkarounds.isSaltPayVisa
import com.tangem.domain.common.TapWorkarounds.isSaltPayWallet
import com.tangem.domain.common.TapWorkarounds.isStart2Coin
import com.tangem.domain.common.TapWorkarounds.isTestCard
import com.tangem.domain.models.scan.CardDTO
@ -23,29 +20,24 @@ class TangemCardTypesResolver(
override fun isTangemNote(): Boolean = productType == ProductType.Note
override fun isTangemWallet(): Boolean = card.settings.isBackupAllowed &&
card.settings.isHDWalletAllowed &&
card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable &&
!card.isSaltPay
card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable
override fun isWallet2(): Boolean =
card.firmwareVersion >= FirmwareVersion.KeysImportAvailable && card.settings.isKeysImportAllowed
override fun isSaltPay(): Boolean = productType == ProductType.SaltPay
override fun isSaltPayVisa(): Boolean = card.isSaltPayVisa
override fun isSaltPayWallet(): Boolean = card.isSaltPayWallet
override fun isTangemTwins(): Boolean = productType == ProductType.Twins
override fun isStart2Coin(): Boolean = card.isStart2Coin
override fun isMultiwalletAllowed(): Boolean =
!isTangemTwins() && !card.isStart2Coin && !isTangemNote() && !isSaltPay() &&
(
card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable ||
card.wallets.firstOrNull()?.curve == EllipticCurve.Secp256k1
)
override fun isMultiwalletAllowed(): Boolean = !isTangemTwins() &&
!card.isStart2Coin &&
!isTangemNote() &&
(multiWalletAvailable() || card.wallets.firstOrNull()?.curve == EllipticCurve.Secp256k1)
private fun multiWalletAvailable() = card.firmwareVersion >= FirmwareVersion.MultiWalletAvailable
override fun getBlockchain(): Blockchain {
return when (productType) {
ProductType.Start2Coin -> if (card.isTestCard) Blockchain.BitcoinTestnet else Blockchain.Bitcoin
ProductType.SaltPay -> Blockchain.SaltPay
else -> {
val blockchainName: String = walletData?.blockchain
?: if (productType == ProductType.Note) {
@ -59,8 +51,6 @@ class TangemCardTypesResolver(
}
override fun getPrimaryToken(): Token? {
if (isSaltPay()) return SaltPayWorkaround.tokenFrom(getBlockchain())
val cardToken = walletData?.token ?: return null
return Token(
cardToken.name,

View file

@ -20,15 +20,6 @@ object TapWorkarounds {
val CardDTO.isStart2Coin: Boolean
get() = isStart2CoinIssuer(issuer.name)
val CardDTO.isSaltPay: Boolean
get() = isSaltPayVisa || isSaltPayWallet
val CardDTO.isSaltPayVisa: Boolean
get() = SaltPayWorkaround.isVisaBatchId(batchId)
val CardDTO.isSaltPayWallet: Boolean
get() = SaltPayWorkaround.isWalletCardId(cardId)
val CardDTO.isTestCard: Boolean
get() = batchId == TEST_CARD_BATCH && cardId.startsWith(TEST_CARD_ID_STARTS_WITH)

View file

@ -48,7 +48,6 @@ fun Blockchain.Companion.fromNetworkId(networkId: String): Blockchain? {
"optimistic-ethereum" -> Blockchain.Optimism
"optimistic-ethereum/test" -> Blockchain.OptimismTestnet
"dash" -> Blockchain.Dash
"sxdai" -> Blockchain.SaltPay
"kaspa" -> Blockchain.Kaspa
"the-open-network" -> Blockchain.TON
"the-open-network/test" -> Blockchain.TONTestnet
@ -113,7 +112,6 @@ fun Blockchain.toNetworkId(): String {
Blockchain.Optimism -> "optimistic-ethereum"
Blockchain.OptimismTestnet -> "optimistic-ethereum/test"
Blockchain.Dash -> "dash"
Blockchain.SaltPay -> "sxdai"
Blockchain.Kaspa -> "kaspa"
Blockchain.TON -> "the-open-network"
Blockchain.TONTestnet -> "the-open-network/test"
@ -158,7 +156,6 @@ fun Blockchain.toCoinId(): String {
Blockchain.Kusama -> "kusama"
Blockchain.Optimism, Blockchain.OptimismTestnet -> "ethereum"
Blockchain.Dash -> "dash"
Blockchain.SaltPay -> "xdai"
Blockchain.Kaspa -> "kaspa"
Blockchain.TON, Blockchain.TONTestnet -> "the-open-network"
Blockchain.Unknown -> "unknown"
@ -176,6 +173,5 @@ fun Blockchain.isSupportedInApp(): Boolean {
}
private val excludedBlockchains = listOf(
Blockchain.SaltPay,
Blockchain.Unknown,
)