diff --git a/data/common/src/main/kotlin/com/tangem/data/common/currency/NetworkOperations.kt b/data/common/src/main/kotlin/com/tangem/data/common/currency/NetworkOperations.kt index 9d2fd810d9..c01216de24 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/currency/NetworkOperations.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/currency/NetworkOperations.kt @@ -41,6 +41,7 @@ fun getNetwork( standardType = getNetworkStandardType(blockchain), hasFiatFeeRate = blockchain.feePaidCurrency() !is FeePaidCurrency.FeeResource, canHandleTokens = canHandleTokens, + transactionExtras = blockchain.getSupportedTransactionExtras(), ) } @@ -69,6 +70,7 @@ fun getNetwork( scanResponse.cardTypesResolver, excludedBlockchains, ), + transactionExtras = blockchain.getSupportedTransactionExtras(), ) } @@ -145,4 +147,148 @@ private fun getDefaultDerivationPath( derivationStyleProvider: DerivationStyleProvider, ): String? { return blockchain.derivationPath(derivationStyleProvider.getDerivationStyle())?.rawPath +} + +@Suppress("LongMethod") +private fun Blockchain.getSupportedTransactionExtras(): Network.TransactionExtras { + return when (this) { + Blockchain.XRP -> Network.TransactionExtras.DESTINATION_TAG + Blockchain.Binance, + Blockchain.TON, + Blockchain.Cosmos, + Blockchain.TerraV1, + Blockchain.TerraV2, + Blockchain.Stellar, + Blockchain.Hedera, + Blockchain.Algorand, + Blockchain.Sei, + Blockchain.InternetComputer, + Blockchain.Casper, + -> Network.TransactionExtras.MEMO + // region Other blockchains + Blockchain.Unknown, + Blockchain.Arbitrum, + Blockchain.ArbitrumTestnet, + Blockchain.Avalanche, + Blockchain.AvalancheTestnet, + Blockchain.BinanceTestnet, + Blockchain.BSC, + Blockchain.BSCTestnet, + Blockchain.Bitcoin, + Blockchain.BitcoinTestnet, + Blockchain.BitcoinCash, + Blockchain.BitcoinCashTestnet, + Blockchain.Cardano, + Blockchain.CosmosTestnet, + Blockchain.Dogecoin, + Blockchain.Ducatus, + Blockchain.Ethereum, + Blockchain.EthereumTestnet, + Blockchain.EthereumClassic, + Blockchain.EthereumClassicTestnet, + Blockchain.Fantom, + Blockchain.FantomTestnet, + Blockchain.Litecoin, + Blockchain.Near, + Blockchain.NearTestnet, + Blockchain.Polkadot, + Blockchain.PolkadotTestnet, + Blockchain.Kava, + Blockchain.KavaTestnet, + Blockchain.Kusama, + Blockchain.Polygon, + Blockchain.PolygonTestnet, + Blockchain.RSK, + Blockchain.SeiTestnet, + Blockchain.StellarTestnet, + Blockchain.Solana, + Blockchain.SolanaTestnet, + Blockchain.Tezos, + Blockchain.Tron, + Blockchain.TronTestnet, + Blockchain.Gnosis, + Blockchain.Dash, + Blockchain.Optimism, + Blockchain.OptimismTestnet, + Blockchain.Dischain, + Blockchain.EthereumPow, + Blockchain.EthereumPowTestnet, + Blockchain.Kaspa, + Blockchain.Telos, + Blockchain.TelosTestnet, + Blockchain.TONTestnet, + Blockchain.Ravencoin, + Blockchain.RavencoinTestnet, + Blockchain.Cronos, + Blockchain.AlephZero, + Blockchain.AlephZeroTestnet, + Blockchain.OctaSpace, + Blockchain.OctaSpaceTestnet, + Blockchain.Chia, + Blockchain.ChiaTestnet, + Blockchain.Decimal, + Blockchain.DecimalTestnet, + Blockchain.XDC, + Blockchain.XDCTestnet, + Blockchain.VeChain, + Blockchain.VeChainTestnet, + Blockchain.Aptos, + Blockchain.AptosTestnet, + Blockchain.Playa3ull, + Blockchain.Shibarium, + Blockchain.ShibariumTestnet, + Blockchain.AlgorandTestnet, + Blockchain.HederaTestnet, + Blockchain.Aurora, + Blockchain.AuroraTestnet, + Blockchain.Areon, + Blockchain.AreonTestnet, + Blockchain.PulseChain, + Blockchain.PulseChainTestnet, + Blockchain.ZkSyncEra, + Blockchain.ZkSyncEraTestnet, + Blockchain.Nexa, + Blockchain.NexaTestnet, + Blockchain.Moonbeam, + Blockchain.MoonbeamTestnet, + Blockchain.Manta, + Blockchain.MantaTestnet, + Blockchain.PolygonZkEVM, + Blockchain.PolygonZkEVMTestnet, + Blockchain.Radiant, + Blockchain.Base, + Blockchain.BaseTestnet, + Blockchain.Moonriver, + Blockchain.MoonriverTestnet, + Blockchain.Mantle, + Blockchain.MantleTestnet, + Blockchain.Flare, + Blockchain.FlareTestnet, + Blockchain.Taraxa, + Blockchain.TaraxaTestnet, + Blockchain.Koinos, + Blockchain.KoinosTestnet, + Blockchain.Joystream, + Blockchain.Bittensor, + Blockchain.Filecoin, + Blockchain.Blast, + Blockchain.BlastTestnet, + Blockchain.Cyber, + Blockchain.CyberTestnet, + Blockchain.Sui, + Blockchain.SuiTestnet, + Blockchain.EnergyWebChain, + Blockchain.EnergyWebChainTestnet, + Blockchain.EnergyWebX, + Blockchain.EnergyWebXTestnet, + Blockchain.CasperTestnet, + Blockchain.Core, + Blockchain.CoreTestnet, + Blockchain.Xodex, + Blockchain.Canxium, + Blockchain.Chiliz, + Blockchain.ChilizTestnet, + -> Network.TransactionExtras.NONE + // endregion + } } \ No newline at end of file diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/Network.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/Network.kt index 3543b7094b..5c9f8277bb 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/Network.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/Network.kt @@ -18,6 +18,8 @@ import kotlinx.serialization.Serializable * @property hasFiatFeeRate Indicates whether there is a fee in the network * that cannot be represented in a fiat currency. * (For those blockchains that have FeeResource instead of a standard type of fee) + * @property canHandleTokens Indicates whether the network can handle tokens. + * @property transactionExtras The type of extras supported for sending a transaction. */ @Serializable data class Network( @@ -30,6 +32,7 @@ data class Network( val standardType: StandardType, val hasFiatFeeRate: Boolean, val canHandleTokens: Boolean, + val transactionExtras: TransactionExtras, ) { init { @@ -128,4 +131,19 @@ data class Network( @Serializable data class Unspecified(override val name: String) : StandardType() } + + /** + * Represents the supported type of extras for sending a transaction. + * */ + enum class TransactionExtras { + + /** No transaction extras supported */ + NONE, + + /** Memo supported */ + MEMO, + + /** Destination tag supported */ + DESTINATION_TAG, + } } \ No newline at end of file