diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/configs/Wallet2CardConfig.kt b/domain/legacy/src/main/java/com/tangem/domain/common/configs/Wallet2CardConfig.kt index 0e02f053df..baeb91fbed 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/configs/Wallet2CardConfig.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/configs/Wallet2CardConfig.kt @@ -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 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 - } - 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 - } + // 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 + } + 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 } } } \ No newline at end of file diff --git a/domain/legacy/src/test/java/com/tangem/domain/common/configs/Wallet2CardConfigTest.kt b/domain/legacy/src/test/java/com/tangem/domain/common/configs/Wallet2CardConfigTest.kt new file mode 100644 index 0000000000..5ab98a3e72 --- /dev/null +++ b/domain/legacy/src/test/java/com/tangem/domain/common/configs/Wallet2CardConfigTest.kt @@ -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) + } + } +} \ No newline at end of file