Updated on 2026-08-14

This commit is contained in:
Tangem 2025-01-17 11:48:39 +03:00
parent 9dab118963
commit e31885a1eb
2 changed files with 338 additions and 19 deletions

View file

@ -4,7 +4,7 @@ import com.tangem.blockchain.common.Blockchain
import com.tangem.common.card.EllipticCurve
import timber.log.Timber
object Wallet2CardConfig : CardConfig {
data object Wallet2CardConfig : CardConfig {
override val mandatoryCurves: List<EllipticCurve>
get() = listOf(
EllipticCurve.Secp256k1,
@ -20,24 +20,180 @@ object Wallet2CardConfig : CardConfig {
*/
override fun primaryCurve(blockchain: Blockchain): EllipticCurve? {
// order is important, new curve is preferred for wallet 2
return when {
blockchain.getSupportedCurves().contains(EllipticCurve.Ed25519Slip0010) -> {
EllipticCurve.Ed25519Slip0010
// TODO Comment old logic without direct mapping until tests and release
// return when {
// blockchain.getSupportedCurves().contains(EllipticCurve.Ed25519Slip0010) -> {
// EllipticCurve.Ed25519Slip0010
// }
// blockchain.getSupportedCurves().contains(EllipticCurve.Secp256k1) -> {
// EllipticCurve.Secp256k1
// }
// blockchain.getSupportedCurves().contains(EllipticCurve.Bls12381G2Aug) -> {
// EllipticCurve.Bls12381G2Aug
// }
// // only for support cardano on Wallet2
// blockchain.getSupportedCurves().contains(EllipticCurve.Ed25519) -> {
// EllipticCurve.Ed25519
// }
// else -> {
// Timber.e("Unsupported blockchain, curve not found")
// null
// }
// }
val curve = getPrimaryCurveForBlockchain(blockchain)
// check curve supports
if (!blockchain.getSupportedCurves().contains(curve)) {
Timber.e("Unsupported curve $curve for blockchain $blockchain")
return null
}
blockchain.getSupportedCurves().contains(EllipticCurve.Secp256k1) -> {
EllipticCurve.Secp256k1
}
blockchain.getSupportedCurves().contains(EllipticCurve.Bls12381G2Aug) -> {
EllipticCurve.Bls12381G2Aug
}
// only for support cardano on Wallet2
blockchain.getSupportedCurves().contains(EllipticCurve.Ed25519) -> {
EllipticCurve.Ed25519
}
else -> {
Timber.e("Unsupported blockchain, curve not found")
null
return curve
}
@Suppress("LongMethod", "CyclomaticComplexMethod")
private fun getPrimaryCurveForBlockchain(blockchain: Blockchain): EllipticCurve? {
return when (blockchain) {
Blockchain.Unknown -> null
Blockchain.Arbitrum -> EllipticCurve.Secp256k1
Blockchain.ArbitrumTestnet -> EllipticCurve.Secp256k1
Blockchain.Avalanche -> EllipticCurve.Secp256k1
Blockchain.AvalancheTestnet -> EllipticCurve.Secp256k1
Blockchain.Binance -> EllipticCurve.Secp256k1
Blockchain.BinanceTestnet -> EllipticCurve.Secp256k1
Blockchain.BSC -> EllipticCurve.Secp256k1
Blockchain.BSCTestnet -> EllipticCurve.Secp256k1
Blockchain.Bitcoin -> EllipticCurve.Secp256k1
Blockchain.BitcoinTestnet -> EllipticCurve.Secp256k1
Blockchain.BitcoinCash -> EllipticCurve.Secp256k1
Blockchain.BitcoinCashTestnet -> EllipticCurve.Secp256k1
Blockchain.Cardano -> EllipticCurve.Ed25519
Blockchain.Cosmos -> EllipticCurve.Secp256k1
Blockchain.CosmosTestnet -> EllipticCurve.Secp256k1
Blockchain.Dogecoin -> EllipticCurve.Secp256k1
Blockchain.Ducatus -> EllipticCurve.Secp256k1
Blockchain.Ethereum -> EllipticCurve.Secp256k1
Blockchain.EthereumTestnet -> EllipticCurve.Secp256k1
Blockchain.EthereumClassic -> EllipticCurve.Secp256k1
Blockchain.EthereumClassicTestnet -> EllipticCurve.Secp256k1
Blockchain.Fantom -> EllipticCurve.Secp256k1
Blockchain.FantomTestnet -> EllipticCurve.Secp256k1
Blockchain.Litecoin -> EllipticCurve.Secp256k1
Blockchain.Near -> EllipticCurve.Ed25519Slip0010
Blockchain.NearTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.Polkadot -> EllipticCurve.Ed25519Slip0010
Blockchain.PolkadotTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.Kava -> EllipticCurve.Secp256k1
Blockchain.KavaTestnet -> EllipticCurve.Secp256k1
Blockchain.Kusama -> EllipticCurve.Ed25519Slip0010
Blockchain.Polygon -> EllipticCurve.Secp256k1
Blockchain.PolygonTestnet -> EllipticCurve.Secp256k1
Blockchain.RSK -> EllipticCurve.Secp256k1
Blockchain.Sei -> EllipticCurve.Secp256k1
Blockchain.SeiTestnet -> EllipticCurve.Secp256k1
Blockchain.Stellar -> EllipticCurve.Ed25519Slip0010
Blockchain.StellarTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.Solana -> EllipticCurve.Ed25519Slip0010
Blockchain.SolanaTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.Tezos -> EllipticCurve.Ed25519Slip0010
Blockchain.Tron -> EllipticCurve.Secp256k1
Blockchain.TronTestnet -> EllipticCurve.Secp256k1
Blockchain.XRP -> EllipticCurve.Secp256k1
Blockchain.Gnosis -> EllipticCurve.Secp256k1
Blockchain.Dash -> EllipticCurve.Secp256k1
Blockchain.Optimism -> EllipticCurve.Secp256k1
Blockchain.OptimismTestnet -> EllipticCurve.Secp256k1
Blockchain.Dischain -> EllipticCurve.Secp256k1
Blockchain.EthereumPow -> EllipticCurve.Secp256k1
Blockchain.EthereumPowTestnet -> EllipticCurve.Secp256k1
Blockchain.Kaspa -> EllipticCurve.Secp256k1
Blockchain.Telos -> EllipticCurve.Secp256k1
Blockchain.TelosTestnet -> EllipticCurve.Secp256k1
Blockchain.TON -> EllipticCurve.Ed25519Slip0010
Blockchain.TONTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.Ravencoin -> EllipticCurve.Secp256k1
Blockchain.RavencoinTestnet -> EllipticCurve.Secp256k1
Blockchain.TerraV1 -> EllipticCurve.Secp256k1
Blockchain.TerraV2 -> EllipticCurve.Secp256k1
Blockchain.Cronos -> EllipticCurve.Secp256k1
Blockchain.AlephZero -> EllipticCurve.Ed25519Slip0010
Blockchain.AlephZeroTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.OctaSpace -> EllipticCurve.Secp256k1
Blockchain.OctaSpaceTestnet -> EllipticCurve.Secp256k1
Blockchain.Chia -> EllipticCurve.Bls12381G2Aug
Blockchain.ChiaTestnet -> EllipticCurve.Bls12381G2Aug
Blockchain.Decimal -> EllipticCurve.Secp256k1
Blockchain.DecimalTestnet -> EllipticCurve.Secp256k1
Blockchain.XDC -> EllipticCurve.Secp256k1
Blockchain.XDCTestnet -> EllipticCurve.Secp256k1
Blockchain.VeChain -> EllipticCurve.Secp256k1
Blockchain.VeChainTestnet -> EllipticCurve.Secp256k1
Blockchain.Aptos -> EllipticCurve.Ed25519Slip0010
Blockchain.AptosTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.Playa3ull -> EllipticCurve.Secp256k1
Blockchain.Shibarium -> EllipticCurve.Secp256k1
Blockchain.ShibariumTestnet -> EllipticCurve.Secp256k1
Blockchain.Algorand -> EllipticCurve.Ed25519Slip0010
Blockchain.AlgorandTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.Hedera -> EllipticCurve.Ed25519Slip0010
Blockchain.HederaTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.Aurora -> EllipticCurve.Secp256k1
Blockchain.AuroraTestnet -> EllipticCurve.Secp256k1
Blockchain.Areon -> EllipticCurve.Secp256k1
Blockchain.AreonTestnet -> EllipticCurve.Secp256k1
Blockchain.PulseChain -> EllipticCurve.Secp256k1
Blockchain.PulseChainTestnet -> EllipticCurve.Secp256k1
Blockchain.ZkSyncEra -> EllipticCurve.Secp256k1
Blockchain.ZkSyncEraTestnet -> EllipticCurve.Secp256k1
Blockchain.Nexa -> EllipticCurve.Secp256k1
Blockchain.NexaTestnet -> EllipticCurve.Secp256k1
Blockchain.Moonbeam -> EllipticCurve.Secp256k1
Blockchain.MoonbeamTestnet -> EllipticCurve.Secp256k1
Blockchain.Manta -> EllipticCurve.Secp256k1
Blockchain.MantaTestnet -> EllipticCurve.Secp256k1
Blockchain.PolygonZkEVM -> EllipticCurve.Secp256k1
Blockchain.PolygonZkEVMTestnet -> EllipticCurve.Secp256k1
Blockchain.Radiant -> EllipticCurve.Secp256k1
Blockchain.Base -> EllipticCurve.Secp256k1
Blockchain.BaseTestnet -> EllipticCurve.Secp256k1
Blockchain.Moonriver -> EllipticCurve.Secp256k1
Blockchain.MoonriverTestnet -> EllipticCurve.Secp256k1
Blockchain.Mantle -> EllipticCurve.Secp256k1
Blockchain.MantleTestnet -> EllipticCurve.Secp256k1
Blockchain.Fact0rn -> EllipticCurve.Secp256k1
Blockchain.Flare -> EllipticCurve.Secp256k1
Blockchain.FlareTestnet -> EllipticCurve.Secp256k1
Blockchain.Taraxa -> EllipticCurve.Secp256k1
Blockchain.TaraxaTestnet -> EllipticCurve.Secp256k1
Blockchain.Koinos -> EllipticCurve.Secp256k1
Blockchain.KoinosTestnet -> EllipticCurve.Secp256k1
Blockchain.Joystream -> EllipticCurve.Ed25519Slip0010
Blockchain.Bittensor -> EllipticCurve.Ed25519Slip0010
Blockchain.Filecoin -> EllipticCurve.Secp256k1
Blockchain.Blast -> EllipticCurve.Secp256k1
Blockchain.BlastTestnet -> EllipticCurve.Secp256k1
Blockchain.Cyber -> EllipticCurve.Secp256k1
Blockchain.CyberTestnet -> EllipticCurve.Secp256k1
Blockchain.InternetComputer -> EllipticCurve.Secp256k1
Blockchain.Sui -> EllipticCurve.Ed25519Slip0010
Blockchain.SuiTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.EnergyWebChain -> EllipticCurve.Secp256k1
Blockchain.EnergyWebChainTestnet -> EllipticCurve.Secp256k1
Blockchain.EnergyWebX -> EllipticCurve.Ed25519Slip0010
Blockchain.EnergyWebXTestnet -> EllipticCurve.Ed25519Slip0010
Blockchain.Casper -> EllipticCurve.Secp256k1
Blockchain.CasperTestnet -> EllipticCurve.Secp256k1
Blockchain.Core -> EllipticCurve.Secp256k1
Blockchain.CoreTestnet -> EllipticCurve.Secp256k1
Blockchain.Xodex -> EllipticCurve.Secp256k1
Blockchain.Canxium -> EllipticCurve.Secp256k1
Blockchain.Chiliz -> EllipticCurve.Secp256k1
Blockchain.ChilizTestnet -> EllipticCurve.Secp256k1
Blockchain.Clore -> EllipticCurve.Secp256k1
Blockchain.VanarChain -> EllipticCurve.Secp256k1
Blockchain.VanarChainTestnet -> EllipticCurve.Secp256k1
Blockchain.OdysseyChain -> EllipticCurve.Secp256k1
Blockchain.OdysseyChainTestnet -> EllipticCurve.Secp256k1
Blockchain.Bitrock -> EllipticCurve.Secp256k1
Blockchain.BitrockTestnet -> EllipticCurve.Secp256k1
}
}
}

View file

@ -0,0 +1,163 @@
package com.tangem.domain.common.configs
import com.tangem.blockchain.common.Blockchain
import com.tangem.common.card.EllipticCurve
import junit.framework.TestCase.assertEquals
import org.junit.Test
class Wallet2CardConfigTest {
private val wallet2CardConfig = Wallet2CardConfig
private val expectedMapping = mapOf(
Blockchain.Unknown to null,
Blockchain.Arbitrum to EllipticCurve.Secp256k1,
Blockchain.ArbitrumTestnet to EllipticCurve.Secp256k1,
Blockchain.Avalanche to EllipticCurve.Secp256k1,
Blockchain.AvalancheTestnet to EllipticCurve.Secp256k1,
Blockchain.Binance to EllipticCurve.Secp256k1,
Blockchain.BinanceTestnet to EllipticCurve.Secp256k1,
Blockchain.BSC to EllipticCurve.Secp256k1,
Blockchain.BSCTestnet to EllipticCurve.Secp256k1,
Blockchain.Bitcoin to EllipticCurve.Secp256k1,
Blockchain.BitcoinTestnet to EllipticCurve.Secp256k1,
Blockchain.BitcoinCash to EllipticCurve.Secp256k1,
Blockchain.BitcoinCashTestnet to EllipticCurve.Secp256k1,
Blockchain.Cardano to EllipticCurve.Ed25519,
Blockchain.Cosmos to EllipticCurve.Secp256k1,
Blockchain.CosmosTestnet to EllipticCurve.Secp256k1,
Blockchain.Dogecoin to EllipticCurve.Secp256k1,
Blockchain.Ducatus to EllipticCurve.Secp256k1,
Blockchain.Ethereum to EllipticCurve.Secp256k1,
Blockchain.EthereumTestnet to EllipticCurve.Secp256k1,
Blockchain.EthereumClassic to EllipticCurve.Secp256k1,
Blockchain.EthereumClassicTestnet to EllipticCurve.Secp256k1,
Blockchain.Fantom to EllipticCurve.Secp256k1,
Blockchain.FantomTestnet to EllipticCurve.Secp256k1,
Blockchain.Litecoin to EllipticCurve.Secp256k1,
Blockchain.Near to EllipticCurve.Ed25519Slip0010,
Blockchain.NearTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.Polkadot to EllipticCurve.Ed25519Slip0010,
Blockchain.PolkadotTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.Kava to EllipticCurve.Secp256k1,
Blockchain.KavaTestnet to EllipticCurve.Secp256k1,
Blockchain.Kusama to EllipticCurve.Ed25519Slip0010,
Blockchain.Polygon to EllipticCurve.Secp256k1,
Blockchain.PolygonTestnet to EllipticCurve.Secp256k1,
Blockchain.RSK to EllipticCurve.Secp256k1,
Blockchain.Sei to EllipticCurve.Secp256k1,
Blockchain.SeiTestnet to EllipticCurve.Secp256k1,
Blockchain.Stellar to EllipticCurve.Ed25519Slip0010,
Blockchain.StellarTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.Solana to EllipticCurve.Ed25519Slip0010,
Blockchain.SolanaTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.Tezos to EllipticCurve.Ed25519Slip0010,
Blockchain.Tron to EllipticCurve.Secp256k1,
Blockchain.TronTestnet to EllipticCurve.Secp256k1,
Blockchain.XRP to EllipticCurve.Secp256k1,
Blockchain.Gnosis to EllipticCurve.Secp256k1,
Blockchain.Dash to EllipticCurve.Secp256k1,
Blockchain.Optimism to EllipticCurve.Secp256k1,
Blockchain.OptimismTestnet to EllipticCurve.Secp256k1,
Blockchain.Dischain to EllipticCurve.Secp256k1,
Blockchain.EthereumPow to EllipticCurve.Secp256k1,
Blockchain.EthereumPowTestnet to EllipticCurve.Secp256k1,
Blockchain.Kaspa to EllipticCurve.Secp256k1,
Blockchain.Telos to EllipticCurve.Secp256k1,
Blockchain.TelosTestnet to EllipticCurve.Secp256k1,
Blockchain.TON to EllipticCurve.Ed25519Slip0010,
Blockchain.TONTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.Ravencoin to EllipticCurve.Secp256k1,
Blockchain.RavencoinTestnet to EllipticCurve.Secp256k1,
Blockchain.TerraV1 to EllipticCurve.Secp256k1,
Blockchain.TerraV2 to EllipticCurve.Secp256k1,
Blockchain.Cronos to EllipticCurve.Secp256k1,
Blockchain.AlephZero to EllipticCurve.Ed25519Slip0010,
Blockchain.AlephZeroTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.OctaSpace to EllipticCurve.Secp256k1,
Blockchain.OctaSpaceTestnet to EllipticCurve.Secp256k1,
Blockchain.Chia to EllipticCurve.Bls12381G2Aug,
Blockchain.ChiaTestnet to EllipticCurve.Bls12381G2Aug,
Blockchain.Decimal to EllipticCurve.Secp256k1,
Blockchain.DecimalTestnet to EllipticCurve.Secp256k1,
Blockchain.XDC to EllipticCurve.Secp256k1,
Blockchain.XDCTestnet to EllipticCurve.Secp256k1,
Blockchain.VeChain to EllipticCurve.Secp256k1,
Blockchain.VeChainTestnet to EllipticCurve.Secp256k1,
Blockchain.Aptos to EllipticCurve.Ed25519Slip0010,
Blockchain.AptosTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.Playa3ull to EllipticCurve.Secp256k1,
Blockchain.Shibarium to EllipticCurve.Secp256k1,
Blockchain.ShibariumTestnet to EllipticCurve.Secp256k1,
Blockchain.Algorand to EllipticCurve.Ed25519Slip0010,
Blockchain.AlgorandTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.Hedera to EllipticCurve.Ed25519Slip0010,
Blockchain.HederaTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.Aurora to EllipticCurve.Secp256k1,
Blockchain.AuroraTestnet to EllipticCurve.Secp256k1,
Blockchain.Areon to EllipticCurve.Secp256k1,
Blockchain.AreonTestnet to EllipticCurve.Secp256k1,
Blockchain.PulseChain to EllipticCurve.Secp256k1,
Blockchain.PulseChainTestnet to EllipticCurve.Secp256k1,
Blockchain.ZkSyncEra to EllipticCurve.Secp256k1,
Blockchain.ZkSyncEraTestnet to EllipticCurve.Secp256k1,
Blockchain.Nexa to EllipticCurve.Secp256k1,
Blockchain.NexaTestnet to EllipticCurve.Secp256k1,
Blockchain.Moonbeam to EllipticCurve.Secp256k1,
Blockchain.MoonbeamTestnet to EllipticCurve.Secp256k1,
Blockchain.Manta to EllipticCurve.Secp256k1,
Blockchain.MantaTestnet to EllipticCurve.Secp256k1,
Blockchain.PolygonZkEVM to EllipticCurve.Secp256k1,
Blockchain.PolygonZkEVMTestnet to EllipticCurve.Secp256k1,
Blockchain.Radiant to EllipticCurve.Secp256k1,
Blockchain.Base to EllipticCurve.Secp256k1,
Blockchain.BaseTestnet to EllipticCurve.Secp256k1,
Blockchain.Moonriver to EllipticCurve.Secp256k1,
Blockchain.MoonriverTestnet to EllipticCurve.Secp256k1,
Blockchain.Mantle to EllipticCurve.Secp256k1,
Blockchain.MantleTestnet to EllipticCurve.Secp256k1,
Blockchain.Fact0rn to EllipticCurve.Secp256k1,
Blockchain.Flare to EllipticCurve.Secp256k1,
Blockchain.FlareTestnet to EllipticCurve.Secp256k1,
Blockchain.Taraxa to EllipticCurve.Secp256k1,
Blockchain.TaraxaTestnet to EllipticCurve.Secp256k1,
Blockchain.Koinos to EllipticCurve.Secp256k1,
Blockchain.KoinosTestnet to EllipticCurve.Secp256k1,
Blockchain.Joystream to EllipticCurve.Ed25519Slip0010,
Blockchain.Bittensor to EllipticCurve.Ed25519Slip0010,
Blockchain.Filecoin to EllipticCurve.Secp256k1,
Blockchain.Blast to EllipticCurve.Secp256k1,
Blockchain.BlastTestnet to EllipticCurve.Secp256k1,
Blockchain.Cyber to EllipticCurve.Secp256k1,
Blockchain.CyberTestnet to EllipticCurve.Secp256k1,
Blockchain.InternetComputer to EllipticCurve.Secp256k1,
Blockchain.Sui to EllipticCurve.Ed25519Slip0010,
Blockchain.SuiTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.EnergyWebChain to EllipticCurve.Secp256k1,
Blockchain.EnergyWebChainTestnet to EllipticCurve.Secp256k1,
Blockchain.EnergyWebX to EllipticCurve.Ed25519Slip0010,
Blockchain.EnergyWebXTestnet to EllipticCurve.Ed25519Slip0010,
Blockchain.Casper to EllipticCurve.Secp256k1,
Blockchain.CasperTestnet to EllipticCurve.Secp256k1,
Blockchain.Core to EllipticCurve.Secp256k1,
Blockchain.CoreTestnet to EllipticCurve.Secp256k1,
Blockchain.Xodex to EllipticCurve.Secp256k1,
Blockchain.Canxium to EllipticCurve.Secp256k1,
Blockchain.Chiliz to EllipticCurve.Secp256k1,
Blockchain.ChilizTestnet to EllipticCurve.Secp256k1,
Blockchain.Clore to EllipticCurve.Secp256k1,
Blockchain.VanarChain to EllipticCurve.Secp256k1,
Blockchain.VanarChainTestnet to EllipticCurve.Secp256k1,
Blockchain.OdysseyChain to EllipticCurve.Secp256k1,
Blockchain.OdysseyChainTestnet to EllipticCurve.Secp256k1,
Blockchain.Bitrock to EllipticCurve.Secp256k1,
Blockchain.BitrockTestnet to EllipticCurve.Secp256k1,
)
@Test
fun blockchainCurveMappingTest() {
Blockchain.entries.forEach {
val resultCurve = wallet2CardConfig.primaryCurve(it)
assertEquals(expectedMapping[it], resultCurve)
}
}
}