Updated on 2026-08-14
This commit is contained in:
parent
c1900053f7
commit
72ddf5ae12
5 changed files with 47 additions and 28 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue