Updated on 2026-08-14

This commit is contained in:
Tangem 2024-06-11 15:39:15 +04:00
parent c1900053f7
commit 72ddf5ae12
5 changed files with 47 additions and 28 deletions

View file

@ -1,7 +1,7 @@
plugins {
alias(deps.plugins.android.library)
alias(deps.plugins.kotlin.android)
id("kotlin-parcelize")
alias(deps.plugins.kotlin.serialization)
id("configuration")
}
@ -10,6 +10,7 @@ android {
}
dependencies {
implementation(deps.kotlin.serialization)
implementation(projects.domain.txhistory.models)
implementation(projects.core.analytics.models)
implementation(deps.tangem.blockchain) {

View file

@ -1,7 +1,6 @@
package com.tangem.domain.tokens.model
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable
/**
* Represents a generic cryptocurrency.
@ -14,8 +13,8 @@ import kotlinx.parcelize.Parcelize
* @property iconUrl Optional URL of the cryptocurrency icon. `null` if not found.
* @property isCustom Indicates whether the currency is a custom user-added currency or not.
*/
@Parcelize
sealed class CryptoCurrency : Parcelable {
@Serializable
sealed class CryptoCurrency {
abstract val id: ID
abstract val network: Network
@ -28,6 +27,7 @@ sealed class CryptoCurrency : Parcelable {
/**
* Represents a native coin in the blockchain network.
*/
@Serializable
data class Coin(
override val id: ID,
override val network: Network,
@ -48,6 +48,7 @@ sealed class CryptoCurrency : Parcelable {
*
* @property contractAddress Address of the contract managing the token.
*/
@Serializable
data class Token(
override val id: ID,
override val network: Network,
@ -75,12 +76,12 @@ sealed class CryptoCurrency : Parcelable {
* @property rawCurrencyId Represents not unique currency ID from the blockchain network. `null` if
* its ID of the custom token.
*/
@Parcelize
@Serializable
data class ID(
private val prefix: Prefix,
private val body: Body,
private val suffix: Suffix,
) : Parcelable {
) {
val value: String
get() = buildString {
@ -121,12 +122,13 @@ sealed class CryptoCurrency : Parcelable {
*
* The body can be either a raw network ID or a raw network ID with a network derivation path.
*/
@Parcelize
sealed class Body : Parcelable {
@Serializable
sealed class Body {
/** The value of the body. */
abstract val value: String
@Serializable
/** Represents a raw network ID. */
data class NetworkId(val rawId: String) : Body() {
override val value: String get() = rawId
@ -137,6 +139,7 @@ sealed class CryptoCurrency : Parcelable {
*
* Should be used for a cryptocurrencies with custom derivation path.
* */
@Serializable
data class NetworkIdWithDerivationPath(
val rawId: String,
val derivationPath: String,
@ -155,13 +158,14 @@ sealed class CryptoCurrency : Parcelable {
*
* The suffix can either be a raw ID or a contract address.
*/
@Parcelize
sealed class Suffix : Parcelable {
@Serializable
sealed class Suffix {
/** The value of the suffix, which could be either a raw ID or a contract address. */
abstract val value: String
/** Represents a raw ID suffix. */
@Serializable
data class RawID(val rawId: String, val contractAddress: String? = null) : Suffix() {
override val value: String
get() = buildString {
@ -174,6 +178,7 @@ sealed class CryptoCurrency : Parcelable {
}
/** Represents a contract address suffix. */
@Serializable
data class ContractAddress(val contractAddress: String) : Suffix() {
override val value: String get() = contractAddress
}

View file

@ -1,7 +1,6 @@
package com.tangem.domain.tokens.model
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable
/**
* Represents a blockchain network, identified by a unique ID, a human-readable name, and its standard type.
@ -20,7 +19,7 @@ import kotlinx.parcelize.Parcelize
* that cannot be represented in a fiat currency.
* (For those blockchains that have FeeResource instead of a standard type of fee)
*/
@Parcelize
@Serializable
data class Network(
val id: ID,
val backendId: String,
@ -30,7 +29,7 @@ data class Network(
val isTestnet: Boolean,
val standardType: StandardType,
val hasFiatFeeRate: Boolean,
) : Parcelable {
) {
init {
require(name.isNotBlank()) { "Network name must not be blank" }
@ -42,8 +41,8 @@ data class Network(
* @property value The string representation of the network ID.
*/
@JvmInline
@Parcelize
value class ID(val value: String) : Parcelable {
@Serializable
value class ID(val value: String) {
init {
require(value.isNotBlank()) { "Network ID must not be blank" }
@ -56,8 +55,8 @@ data class Network(
* This class represents such paths in a generic manner, allowing for predefined card-based paths,
* custom paths, or even no derivation path at all.
*/
@Parcelize
sealed class DerivationPath : Parcelable {
@Serializable
sealed class DerivationPath {
/** The actual derivation path value, if any. */
abstract val value: String?
@ -67,6 +66,7 @@ data class Network(
*
* @property value The derivation path string.
*/
@Serializable
data class Card(override val value: String) : DerivationPath()
/**
@ -74,12 +74,14 @@ data class Network(
*
* @property value The derivation path string.
*/
@Serializable
data class Custom(override val value: String) : DerivationPath()
/**
* Represents a lack of derivation path.
*/
object None : DerivationPath() {
@Serializable
data object None : DerivationPath() {
override val value: String? get() = null
}
}
@ -93,31 +95,36 @@ data class Network(
*
* @property name The human-readable name of the standard type.
*/
@Parcelize
sealed class StandardType : Parcelable {
@Serializable
sealed class StandardType {
abstract val name: String
/** Represents the ERC20 token standard, common on the Ethereum network. */
object ERC20 : StandardType() {
@Serializable
data object ERC20 : StandardType() {
override val name: String get() = "ERC20"
}
/** Represents the TRC20 token standard, common on the TRON network. */
object TRC20 : StandardType() {
@Serializable
data object TRC20 : StandardType() {
override val name: String get() = "TRC20"
}
/** Represents the BEP20 token standard, common on the Binance Smart Chain network. */
object BEP20 : StandardType() {
@Serializable
data object BEP20 : StandardType() {
override val name: String get() = "BEP20"
}
/** Represents the BEP2 token standard, common on the Binance Chain network. */
object BEP2 : StandardType() {
@Serializable
data object BEP2 : StandardType() {
override val name: String get() = "BEP2"
}
/** Represents a network that does not adhere to a predefined standard type. */
@Serializable
data class Unspecified(override val name: String) : StandardType()
}
}

View file

@ -1,5 +1,6 @@
plugins {
alias(deps.plugins.kotlin.jvm)
alias(deps.plugins.kotlin.serialization)
id("configuration")
}
@ -11,4 +12,8 @@ dependencies {
// region Domain modules
implementation(project(":domain:models"))
// endregion
// region Other libraries
implementation(deps.kotlin.serialization)
// endregion
}

View file

@ -2,9 +2,10 @@ package com.tangem.domain.wallets.models
import com.tangem.common.extensions.hexToBytes
import com.tangem.common.extensions.toHexString
import java.io.Serializable
import kotlinx.serialization.Serializable
data class UserWalletId(val stringValue: String) : Serializable {
@Serializable
data class UserWalletId(val stringValue: String) {
val value = stringValue.hexToBytes()