Updated on 2026-08-14
This commit is contained in:
parent
8fd894f5d5
commit
45013d6188
105 changed files with 123 additions and 5898 deletions
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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")!!,
|
||||
)
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue