Updated on 2026-08-14

This commit is contained in:
Tangem 2024-06-19 20:52:51 +08:00
parent 2135c31e7b
commit 9a02d97e96
4 changed files with 49 additions and 32 deletions

View file

@ -4,6 +4,7 @@ import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchain.common.network.providers.ProviderType
import com.tangem.blockchainsdk.BlockchainProviderTypes
import com.tangem.blockchainsdk.BlockchainProvidersResponse
import com.tangem.blockchainsdk.utils.createPrivateProviderType
import com.tangem.blockchainsdk.utils.fromNetworkId
import com.tangem.datasource.config.models.ProviderModel
import com.tangem.utils.converter.Converter
@ -24,7 +25,7 @@ internal object BlockchainProviderTypesConverter :
val providerTypes = blockchainProviders.mapNotNull { provider ->
when (provider) {
is ProviderModel.Public -> ProviderType.Public(url = provider.url)
is ProviderModel.Private -> createPrivateProviderType(blockchain = blockchain, name = provider.name)
is ProviderModel.Private -> createPrivateProviderType(name = provider.name)
ProviderModel.UnsupportedType -> {
Timber.e("$blockchain provider type is not supported")
null
@ -36,31 +37,4 @@ internal object BlockchainProviderTypesConverter :
}
.toMap()
}
@Suppress("CyclomaticComplexMethod")
private fun createPrivateProviderType(blockchain: Blockchain, name: String): ProviderType? {
return when (name) {
"blockchair" -> ProviderType.BitcoinLike.Blockchair
"blockcypher" -> ProviderType.BitcoinLike.Blockcypher
"adalite" -> ProviderType.Cardano.Adalite
"tangemRosetta" -> ProviderType.Cardano.Rosetta
"fireAcademy" -> ProviderType.Chia.FireAcademy
"tangemChia" -> ProviderType.Chia.Tangem
"infura" -> ProviderType.EthereumLike.Infura
"getblock" -> ProviderType.GetBlock
"arkhiaHedera" -> ProviderType.Hedera.Arkhia
"kaspa" -> ProviderType.Kaspa.SecondaryAPI
"nownodes" -> ProviderType.NowNodes
"quicknode" -> ProviderType.QuickNode
"solana" -> ProviderType.Solana.Official
"ton" -> ProviderType.Ton.TonCentral
"tron" -> ProviderType.Tron.TronGrid
"dwellirBittensor" -> ProviderType.Bittensor.Dwellir
"onfinalityBittensor" -> ProviderType.Bittensor.Onfinality
else -> {
Timber.e("$blockchain private provider ($name) is not supported")
null
}
}
}
}

View file

@ -3,6 +3,7 @@ package com.tangem.blockchainsdk.loader
import androidx.core.util.PatternsCompat
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.blockchainsdk.BlockchainProvidersResponse
import com.tangem.blockchainsdk.utils.createPrivateProviderType
import com.tangem.datasource.api.tangemTech.TangemTechServiceApi
import com.tangem.datasource.asset.loader.AssetLoader
import com.tangem.datasource.config.models.ProviderModel
@ -82,7 +83,17 @@ internal class BlockchainProvidersResponseLoader @Inject constructor(
return result.guaranteeUrlsEndWithSlash()
}
private fun List<ProviderModel>.filterUnsupportedProviders() = filter { it !is ProviderModel.UnsupportedType }
private fun List<ProviderModel>.filterUnsupportedProviders() = filter {
val isSupportedType = it !is ProviderModel.UnsupportedType
val isSupportedPrivateType = if (it is ProviderModel.Private) {
createPrivateProviderType(it.name) != null
} else {
true
}
isSupportedType && isSupportedPrivateType
}
private fun List<ProviderModel>.filterInvalidProviders() = mapNotNull { provider ->
if (provider is ProviderModel.Public) {

View file

@ -0,0 +1,32 @@
package com.tangem.blockchainsdk.utils
import com.tangem.blockchain.common.network.providers.ProviderType
import timber.log.Timber
/** Create private provider by [name] or return null */
@Suppress("CyclomaticComplexMethod")
fun createPrivateProviderType(name: String): ProviderType? {
return when (name) {
"blockchair" -> ProviderType.BitcoinLike.Blockchair
"blockcypher" -> ProviderType.BitcoinLike.Blockcypher
"adalite" -> ProviderType.Cardano.Adalite
"tangemRosetta" -> ProviderType.Cardano.Rosetta
"fireAcademy" -> ProviderType.Chia.FireAcademy
"tangemChia" -> ProviderType.Chia.Tangem
"infura" -> ProviderType.EthereumLike.Infura
"getblock" -> ProviderType.GetBlock
"arkhiaHedera" -> ProviderType.Hedera.Arkhia
"kaspa" -> ProviderType.Kaspa.SecondaryAPI
"nownodes" -> ProviderType.NowNodes
"quicknode" -> ProviderType.QuickNode
"solana" -> ProviderType.Solana.Official
"ton" -> ProviderType.Ton.TonCentral
"tron" -> ProviderType.Tron.TronGrid
"dwellirBittensor" -> ProviderType.Bittensor.Dwellir
"onfinalityBittensor" -> ProviderType.Bittensor.Onfinality
else -> {
Timber.e("Private provider with name $name is not supported")
null
}
}
}

View file

@ -279,15 +279,15 @@ internal class BlockchainProvidersResponseLoaderTest {
const val LOCAL_PROVIDERS_JSON = "doesn't matter"
val localProviders: BlockchainProvidersResponse = mapOf(
"aptos" to listOf(ProviderModel.Private(name = "private_apt")),
"aptos" to listOf(ProviderModel.Private(name = "nownodes")),
"algorand" to listOf(
ProviderModel.Private(name = "private_alg"),
ProviderModel.Private(name = "nownodes"),
ProviderModel.Public(url = "https://public_alg.com/"),
),
)
val remoteProviders: BlockchainProvidersResponse = localProviders + mapOf(
"bitcoin" to listOf(ProviderModel.Private(name = "private_btc")),
"bitcoin" to listOf(ProviderModel.Private(name = "blockchair")),
)
}
}