diff --git a/app/src/main/java/com/tangem/tap/di/domain/WalletManagersFacadeModule.kt b/app/src/main/java/com/tangem/tap/di/domain/WalletManagersFacadeModule.kt
index 1c4bc06044..0de90f000b 100644
--- a/app/src/main/java/com/tangem/tap/di/domain/WalletManagersFacadeModule.kt
+++ b/app/src/main/java/com/tangem/tap/di/domain/WalletManagersFacadeModule.kt
@@ -1,6 +1,9 @@
package com.tangem.tap.di.domain
+import android.content.Context
+import com.squareup.moshi.Moshi
import com.tangem.datasource.config.ConfigManager
+import com.tangem.datasource.di.SdkMoshi
import com.tangem.datasource.local.userwallet.UserWalletsStore
import com.tangem.datasource.local.walletmanager.WalletManagersStore
import com.tangem.domain.walletmanager.DefaultWalletManagersFacade
@@ -8,6 +11,7 @@ import com.tangem.domain.walletmanager.WalletManagersFacade
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
+import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@@ -21,7 +25,15 @@ internal object WalletManagersFacadeModule {
walletManagersStore: WalletManagersStore,
userWalletsStore: UserWalletsStore,
configManager: ConfigManager,
+ @ApplicationContext appContext: Context,
+ @SdkMoshi moshi: Moshi,
): WalletManagersFacade {
- return DefaultWalletManagersFacade(walletManagersStore, userWalletsStore, configManager)
+ return DefaultWalletManagersFacade(
+ walletManagersStore = walletManagersStore,
+ userWalletsStore = userWalletsStore,
+ configManager = configManager,
+ assetManager = appContext.assets,
+ moshi = moshi,
+ )
}
}
\ No newline at end of file
diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml
index d970534eb9..44bf68de60 100644
--- a/core/res/src/main/res/values-ru/strings.xml
+++ b/core/res/src/main/res/values-ru/strings.xml
@@ -453,6 +453,7 @@
Не удалось загрузить историю транзакций.\nНажмите на кнопку перезагрузки, чтобы обновить информацию.
Несколько адресов
История транзакций в настоящее время не поддерживается для этого блокчейна. Но не волнуйтесь, мы работаем над этим! А пока вы можете проверить ее в обозревателе.
+ Операция
от: %s
на: %s
В процессе…
diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml
index d677e0eb3c..7282434764 100644
--- a/core/res/src/main/res/values/strings.xml
+++ b/core/res/src/main/res/values/strings.xml
@@ -469,6 +469,7 @@
Failed to load transaction history.\nClick on reload button to update the information.
Multiple addresses
Transaction history is currently not supported for this blockchain. But don\'t worry, we\'re working on it! In the meantime you can check it in the explorer.
+ Operation
from: %s
to: %s
In progress…
diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/Transaction.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/Transaction.kt
index e1947a8843..0abe2332ca 100644
--- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/Transaction.kt
+++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/Transaction.kt
@@ -29,6 +29,7 @@ import com.tangem.core.ui.components.transactions.state.TransactionState.Content
import com.tangem.core.ui.components.transactions.state.TransactionState.Content.Status
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resolveReference
+import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.res.TangemTheme
import java.util.UUID
@@ -137,22 +138,7 @@ private fun Icon(state: TransactionState, modifier: Modifier = Modifier) {
),
) {
Icon(
- painter = painterResource(
- id = when (state.status) {
- is Status.Failed -> R.drawable.ic_close_24
- else -> when (state) {
- is TransactionState.Transfer -> {
- when (state.direction) {
- Direction.OUTGOING -> R.drawable.ic_arrow_up_24
- Direction.INCOMING -> R.drawable.ic_arrow_down_24
- }
- }
- is TransactionState.Approve -> R.drawable.ic_doc_24
- is TransactionState.Swap -> R.drawable.ic_exchange_vertical_24
- is TransactionState.Custom -> R.drawable.ic_exchange_vertical_24
- }
- },
- ),
+ painter = painterResource(id = state.iconRes),
contentDescription = null,
modifier = Modifier
.size(TangemTheme.dimens.size20)
@@ -189,12 +175,7 @@ private fun Title(state: TransactionState, modifier: Modifier = Modifier) {
is TransactionState.Content -> {
Row(modifier = modifier, horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing6)) {
Text(
- text = when (state) {
- is TransactionState.Approve -> stringResource(R.string.common_approval)
- is TransactionState.Transfer -> stringResource(R.string.common_transfer)
- is TransactionState.Swap -> stringResource(R.string.common_swap)
- is TransactionState.Custom -> state.title.resolveReference()
- },
+ text = state.title.resolveReference(),
color = TangemTheme.colors.text.primary1,
style = TangemTheme.typography.subtitle2,
)
@@ -228,35 +209,7 @@ private fun Subtitle(state: TransactionState, modifier: Modifier = Modifier) {
Text(
text = when (state.status) {
is Status.Failed -> stringResource(id = R.string.common_transaction_failed)
- else -> when (state) {
- is TransactionState.Transfer -> {
- when (state.direction) {
- Direction.OUTGOING -> stringResource(
- id = R.string.transaction_history_transaction_to_address,
- state.address.resolveReference(),
- )
- Direction.INCOMING -> stringResource(
- id = R.string.transaction_history_transaction_from_address,
- state.address.resolveReference(),
- )
- }
- }
- is TransactionState.Approve -> stringResource(
- id = R.string.transaction_history_transaction_from_address,
- state.address.resolveReference(),
- )
- is TransactionState.Swap -> stringResource(
- id = R.string.transaction_history_contract_address,
- state.address.resolveReference(),
- )
- is TransactionState.Custom -> stringResource(
- id = when (state.direction) {
- Direction.OUTGOING -> R.string.transaction_history_transaction_to_address
- Direction.INCOMING -> R.string.transaction_history_transaction_from_address
- },
- state.subtitle.resolveReference(),
- )
- }
+ else -> state.subtitle.resolveReference()
},
modifier = modifier,
textAlign = TextAlign.Start,
@@ -362,78 +315,98 @@ private fun Preview_TransactionItem_DarkTheme(
private class TransactionItemStateProvider : CollectionPreviewParameterProvider(
collection = listOf(
- TransactionState.Transfer(
+ TransactionState.Content(
txHash = UUID.randomUUID().toString(),
address = TextReference.Str("33BddS...ga2B"),
amount = "-0.500913 BTC",
timestamp = "8:41",
status = Status.Confirmed,
direction = Direction.OUTGOING,
+ iconRes = R.drawable.ic_arrow_up_24,
+ title = resourceReference(R.string.common_transfer),
+ subtitle = TextReference.Str("33BddS...ga2B"),
onClick = {},
),
- TransactionState.Transfer(
+ TransactionState.Content(
txHash = UUID.randomUUID().toString(),
address = TextReference.Str("33BddS...ga2B"),
amount = "+0.500913 BTC",
timestamp = "8:41",
status = Status.Unconfirmed,
direction = Direction.INCOMING,
+ iconRes = R.drawable.ic_arrow_down_24,
+ title = resourceReference(R.string.common_transfer),
+ subtitle = TextReference.Str("33BddS...ga2B"),
onClick = {},
),
- TransactionState.Approve(
+ TransactionState.Content(
txHash = UUID.randomUUID().toString(),
address = TextReference.Str("33BddS...ga2B"),
amount = "+0.500913 BTC",
timestamp = "8:41",
status = Status.Unconfirmed,
direction = Direction.OUTGOING,
+ iconRes = R.drawable.ic_doc_24,
+ title = resourceReference(R.string.common_approval),
+ subtitle = TextReference.Str("33BddS...ga2B"),
onClick = {},
),
- TransactionState.Approve(
+ TransactionState.Content(
txHash = UUID.randomUUID().toString(),
address = TextReference.Str("33BddS...ga2B"),
amount = "+0.500913 BTC",
timestamp = "8:41",
status = Status.Failed,
direction = Direction.OUTGOING,
+ iconRes = R.drawable.ic_doc_24,
+ title = resourceReference(R.string.common_approval),
+ subtitle = TextReference.Str("33BddS...ga2B"),
onClick = {},
),
- TransactionState.Approve(
+ TransactionState.Content(
txHash = UUID.randomUUID().toString(),
address = TextReference.Str("33BddS...ga2B"),
amount = "+0.500913 BTC",
timestamp = "8:41",
status = Status.Confirmed,
direction = Direction.OUTGOING,
+ iconRes = R.drawable.ic_doc_24,
+ title = resourceReference(R.string.common_approval),
+ subtitle = TextReference.Str("33BddS...ga2B"),
onClick = {},
),
- TransactionState.Swap(
+ TransactionState.Content(
txHash = UUID.randomUUID().toString(),
address = TextReference.Str("33BddS...ga2B"),
amount = "+0.500913 BTC",
timestamp = "8:41",
status = Status.Unconfirmed,
direction = Direction.INCOMING,
+ iconRes = R.drawable.ic_arrow_down_24,
+ title = resourceReference(R.string.common_swap),
+ subtitle = TextReference.Str("33BddS...ga2B"),
onClick = {},
),
- TransactionState.Custom(
+ TransactionState.Content(
txHash = UUID.randomUUID().toString(),
address = TextReference.Str("33BddS...ga2B"),
amount = "+0.500913 BTC",
timestamp = "8:41",
status = Status.Confirmed,
direction = Direction.INCOMING,
+ iconRes = R.drawable.ic_doc_24,
title = TextReference.Str("Submit"),
subtitle = TextReference.Str("33BddS...ga2B"),
onClick = {},
),
- TransactionState.Custom(
+ TransactionState.Content(
txHash = UUID.randomUUID().toString(),
address = TextReference.Str("33BddS...ga2B"),
amount = "+0.500913 BTC",
timestamp = "8:41",
status = Status.Confirmed,
direction = Direction.OUTGOING,
+ iconRes = R.drawable.ic_arrow_up_24,
title = TextReference.Str("Submit"),
subtitle = TextReference.Str("33BddS...ga2B"),
onClick = {},
diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TransactionState.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TransactionState.kt
index c513c83fba..2f7a5c22b9 100644
--- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TransactionState.kt
+++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/state/TransactionState.kt
@@ -1,5 +1,6 @@
package com.tangem.core.ui.components.transactions.state
+import androidx.annotation.DrawableRes
import com.tangem.core.ui.extensions.TextReference
/**
@@ -22,30 +23,18 @@ sealed interface TransactionState {
* @property direction transaction direction
* @property onClick Lambda be invoked when manage button is clicked
*/
- sealed class Content : TransactionState {
-
- abstract val address: TextReference
- abstract val amount: String
- abstract val timestamp: String
- abstract val status: Status
- abstract val direction: Direction
- abstract val onClick: () -> Unit
-
- fun copySealed(
- txHash: String = this.txHash,
- address: TextReference = this.address,
- amount: String = this.amount,
- timestamp: String = this.timestamp,
- status: Status = this.status,
- direction: Direction = this.direction,
- ): Content {
- return when (this) {
- is Approve -> copy(txHash, address, amount, timestamp, status, direction)
- is Transfer -> copy(txHash, address, amount, timestamp, status, direction)
- is Swap -> copy(txHash, address, amount, timestamp, status, direction)
- is Custom -> copy(txHash, address, amount, timestamp, status, direction)
- }
- }
+ data class Content(
+ override val txHash: String,
+ val address: TextReference,
+ val amount: String,
+ val timestamp: String,
+ val status: Status,
+ val direction: Direction,
+ val onClick: () -> Unit,
+ @DrawableRes val iconRes: Int,
+ val title: TextReference,
+ val subtitle: TextReference,
+ ) : TransactionState {
sealed class Status {
object Failed : Status()
@@ -59,75 +48,6 @@ sealed interface TransactionState {
}
}
- /**
- * Completed sending transaction state
- *
- * @property txHash transaction hash
- * @property address address
- * @property amount amount
- * @property timestamp timestamp
- * @property direction transaction direction
- */
- data class Transfer(
- override val txHash: String,
- override val address: TextReference,
- override val amount: String,
- override val timestamp: String,
- override val status: Status,
- override val direction: Direction,
- override val onClick: () -> Unit,
- ) : Content()
-
- /**
- * Completed approving transaction state
- *
- * @property txHash transaction hash
- * @property address address
- * @property amount amount
- * @property timestamp timestamp
- * @property direction transaction direction
- */
- data class Approve(
- override val txHash: String,
- override val address: TextReference,
- override val amount: String,
- override val timestamp: String,
- override val status: Status,
- override val direction: Direction,
- override val onClick: () -> Unit,
- ) : Content()
-
- /**
- * Completed swapping transaction state
- *
- * @property txHash transaction hash
- * @property address address
- * @property amount amount
- * @property timestamp timestamp
- * @property direction transaction direction
- */
- data class Swap(
- override val txHash: String,
- override val address: TextReference,
- override val amount: String,
- override val timestamp: String,
- override val status: Status,
- override val direction: Direction,
- override val onClick: () -> Unit,
- ) : Content()
-
- data class Custom(
- override val txHash: String,
- override val address: TextReference,
- override val amount: String,
- override val timestamp: String,
- override val status: Status,
- override val direction: Direction,
- override val onClick: () -> Unit,
- val title: TextReference,
- val subtitle: TextReference,
- ) : Content()
-
/**
* Loading state
*
diff --git a/domain/legacy/src/main/assets/contract_methods.json b/domain/legacy/src/main/assets/contract_methods.json
new file mode 100644
index 0000000000..e07b98657c
--- /dev/null
+++ b/domain/legacy/src/main/assets/contract_methods.json
@@ -0,0 +1,125 @@
+{
+ "0xa9059cbb":{
+ "info":"ERC20",
+ "source":"https://eips.ethereum.org/EIPS/eip-20",
+ "name":"transfer"
+ },
+ "0x095ea7b3":{
+ "info":"ERC20",
+ "source":"https://eips.ethereum.org/EIPS/eip-20",
+ "name":"approve"
+ },
+ "0x357a150b":{
+ "info":"ERC721",
+ "source":"https://eips.ethereum.org/EIPS/eip-721",
+ "name":"run"
+ },
+ "0x23b872dd":{
+ "info":"ERC721",
+ "source":"https://eips.ethereum.org/EIPS/eip-721",
+ "name":"transferFrom"
+ },
+ "0x87201b41":{
+ "info":"ERC721",
+ "source":"https://eips.ethereum.org/EIPS/eip-721",
+ "name":"fulfillAvailableAdvancedOrders"
+ },
+ "0xe449f341":{
+ "info":"ERC721",
+ "source":"https://eips.ethereum.org/EIPS/eip-721",
+ "name":"unstake"
+ },
+ "0x84bb1e42":{
+ "info":"ERC721",
+ "source":"https://eips.ethereum.org/EIPS/eip-721",
+ "name":"claim"
+ },
+ "0xd48c03e5":{
+ "info":"ERC1155",
+ "source":"https://eips.ethereum.org/EIPS/eip-1155",
+ "name":"mint"
+ },
+ "0xe3afe0a3":{
+ "info":"Lido",
+ "source":"https://github.com/LedgerHQ/app-plugin-lido#smart-contracts",
+ "name":"withdrawal"
+ },
+ "0xd6681042":{
+ "info":"Lido",
+ "source":"https://github.com/LedgerHQ/app-plugin-lido#smart-contracts",
+ "name":"withdrawal"
+ },
+ "0x19aa6257":{
+ "info":"Lido",
+ "source":"https://github.com/LedgerHQ/app-plugin-lido#smart-contracts",
+ "name":"withdrawal"
+ },
+ "0xacf41e4d":{
+ "info":"Lido",
+ "source":"https://github.com/LedgerHQ/app-plugin-lido#smart-contracts",
+ "name":"withdrawal"
+ },
+ "0x7951b76f":{
+ "info":"Lido",
+ "source":"https://github.com/LedgerHQ/app-plugin-lido#smart-contracts",
+ "name":"withdrawal"
+ },
+ "0xa1903eab":{
+ "info":"Lido",
+ "source":"https://github.com/LedgerHQ/app-plugin-lido#smart-contracts",
+ "name":"submit"
+ },
+ "0x617ba037":{
+ "info":"AAVE",
+ "source":"https://etherscan.io/address/0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2",
+ "name":"supply"
+ },
+ "0x69328dec":{
+ "info":"AAVE",
+ "source":"https://etherscan.io/address/0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2",
+ "name":"withdraw"
+ },
+ "0x3ccfd60b":{
+ "info":"AAVE",
+ "source":"https://etherscan.io/address/0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2",
+ "name":"withdraw"
+ },
+ "0x573ade81":{
+ "info":"AAVE",
+ "source":"https://etherscan.io/address/0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2",
+ "name":"repay"
+ },
+ "0xa415bcad":{
+ "info":"AAVE",
+ "source":"https://etherscan.io/address/0x87870bca3f3fd6335c3f4ce8392d69350b4fa4e2",
+ "name":"borrow"
+ },
+ "0x12aa3caf":{
+ "info":"1inch v5",
+ "source":"https://github.com/LedgerHQ/app-plugin-1inch#functions-implemented",
+ "name":"swap"
+ },
+ "0x7c025200":{
+ "info":"1inch",
+ "source":"https://github.com/LedgerHQ/app-plugin-1inch#functions-implemented",
+ "name":"swap"
+ },
+ "0x2e95b6c8":{
+ "info":"1inch",
+ "source":"https://github.com/LedgerHQ/app-plugin-1inch#functions-implemented",
+ "name":"unoswap"
+ },
+ "0x0502b1c5":{
+ "info":"1inch",
+ "source":"https://github.com/LedgerHQ/app-plugin-1inch#functions-implemented",
+ "name":"unoswap"
+ },
+ "0x3593564c": {
+ "info":"unoswap",
+ "source":"https://etherscan.io/address/0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",
+ "name":"execute"
+ },
+ "0xd0e30db0": {
+ "name":"deposit"
+ }
+}
diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt
index c1fbac9b0a..d74b6a9d58 100644
--- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt
+++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/DefaultWalletManagersFacade.kt
@@ -4,6 +4,8 @@ import arrow.core.Either
import arrow.core.raise.either
import arrow.core.raise.ensureNotNull
import arrow.core.right
+import android.content.res.AssetManager
+import com.squareup.moshi.Moshi
import com.tangem.blockchain.blockchains.polkadot.ExistentialDepositProvider
import com.tangem.blockchain.blockchains.solana.RentProvider
import com.tangem.blockchain.common.*
@@ -41,6 +43,8 @@ class DefaultWalletManagersFacade(
private val walletManagersStore: WalletManagersStore,
private val userWalletsStore: UserWalletsStore,
configManager: ConfigManager,
+ assetManager: AssetManager,
+ moshi: Moshi,
) : WalletManagersFacade {
private val demoConfig by lazy { DemoConfig() }
@@ -48,7 +52,7 @@ class DefaultWalletManagersFacade(
private val walletManagerFactory by lazy { WalletManagerFactory(configManager) }
private val sdkTokenConverter by lazy { SdkTokenConverter() }
private val txHistoryStateConverter by lazy { SdkTransactionHistoryStateConverter() }
- private val txHistoryItemConverter by lazy { SdkTransactionHistoryItemConverter() }
+ private val txHistoryItemConverter by lazy { SdkTransactionHistoryItemConverter(assetManager, moshi) }
override suspend fun update(
userWalletId: UserWalletId,
diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/model/SmartContractMethod.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/model/SmartContractMethod.kt
new file mode 100644
index 0000000000..58996b7fd3
--- /dev/null
+++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/model/SmartContractMethod.kt
@@ -0,0 +1,11 @@
+package com.tangem.domain.walletmanager.model
+
+import com.squareup.moshi.Json
+import com.squareup.moshi.JsonClass
+
+@JsonClass(generateAdapter = true)
+data class SmartContractMethod(
+ @Json(name = "info") val info: String?,
+ @Json(name = "source") val source: String?,
+ @Json(name = "name") val name: String,
+)
\ No newline at end of file
diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionHistoryItemConverter.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionHistoryItemConverter.kt
index d0f0ef7d65..8a25f01e31 100644
--- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionHistoryItemConverter.kt
+++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionHistoryItemConverter.kt
@@ -1,44 +1,93 @@
package com.tangem.domain.walletmanager.utils
+import android.content.res.AssetManager
+import com.squareup.moshi.Moshi
import com.tangem.blockchain.common.txhistory.TransactionHistoryItem
import com.tangem.domain.txhistory.models.TxHistoryItem
import com.tangem.utils.converter.Converter
import com.tangem.blockchain.common.txhistory.TransactionHistoryItem as SdkTransactionHistoryItem
-internal class SdkTransactionHistoryItemConverter : Converter {
+internal class SdkTransactionHistoryItemConverter(
+ assetManager: AssetManager,
+ moshi: Moshi,
+) : Converter {
+
+ private val typeConverter by lazy {
+ SdkTransactionTypeConverter(assetManager, moshi)
+ }
override fun convert(value: SdkTransactionHistoryItem): TxHistoryItem = TxHistoryItem(
txHash = value.txHash,
timestampInMillis = value.timestamp,
- direction = value.direction.toDomain(),
+ isOutgoing = value.isOutgoing,
+ destinationType = value.destinationType.toDomain(),
+ sourceType = value.sourceType.toDomain(),
+ interactionAddressType = value.extractInteractionAddressType(),
status = when (value.status) {
- TransactionHistoryItem.TransactionStatus.Confirmed -> TxHistoryItem.TransactionStatus.Confirmed
- TransactionHistoryItem.TransactionStatus.Failed -> TxHistoryItem.TransactionStatus.Failed
- TransactionHistoryItem.TransactionStatus.Unconfirmed -> TxHistoryItem.TransactionStatus.Unconfirmed
- },
- type = when (val type = value.type) {
- TransactionHistoryItem.TransactionType.Transfer -> TxHistoryItem.TransactionType.Transfer
- TransactionHistoryItem.TransactionType.Approve -> TxHistoryItem.TransactionType.Approve
- is TransactionHistoryItem.TransactionType.Custom -> TxHistoryItem.TransactionType.Custom(type.id)
- TransactionHistoryItem.TransactionType.Deposit -> TxHistoryItem.TransactionType.Deposit
- TransactionHistoryItem.TransactionType.Submit -> TxHistoryItem.TransactionType.Submit
- TransactionHistoryItem.TransactionType.Supply -> TxHistoryItem.TransactionType.Supply
- TransactionHistoryItem.TransactionType.Swap -> TxHistoryItem.TransactionType.Swap
- TransactionHistoryItem.TransactionType.Unoswap -> TxHistoryItem.TransactionType.Unoswap
- TransactionHistoryItem.TransactionType.Withdraw -> TxHistoryItem.TransactionType.Withdraw
+ SdkTransactionHistoryItem.TransactionStatus.Confirmed -> TxHistoryItem.TransactionStatus.Confirmed
+ SdkTransactionHistoryItem.TransactionStatus.Failed -> TxHistoryItem.TransactionStatus.Failed
+ SdkTransactionHistoryItem.TransactionStatus.Unconfirmed -> TxHistoryItem.TransactionStatus.Unconfirmed
},
+ type = typeConverter.convert(value.type),
amount = requireNotNull(value.amount.value) { "Transaction amount value must not be null" },
)
- private fun TransactionHistoryItem.TransactionDirection.toDomain() = when (this) {
- is TransactionHistoryItem.TransactionDirection.Incoming ->
- TxHistoryItem.TransactionDirection.Incoming(address.toDomain())
- is TransactionHistoryItem.TransactionDirection.Outgoing ->
- TxHistoryItem.TransactionDirection.Outgoing(address.toDomain())
+ private fun SdkTransactionHistoryItem.SourceType.toDomain(): TxHistoryItem.SourceType = when (this) {
+ is TransactionHistoryItem.SourceType.Single -> TxHistoryItem.SourceType.Single(address)
+ is TransactionHistoryItem.SourceType.Multiple -> TxHistoryItem.SourceType.Multiple(addresses)
}
- private fun TransactionHistoryItem.Address.toDomain(): TxHistoryItem.Address = when (this) {
- TransactionHistoryItem.Address.Multiple -> TxHistoryItem.Address.Multiple
- is TransactionHistoryItem.Address.Single -> TxHistoryItem.Address.Single(rawAddress = rawAddress)
+ private fun SdkTransactionHistoryItem.DestinationType.toDomain(): TxHistoryItem.DestinationType = when (this) {
+ is SdkTransactionHistoryItem.DestinationType.Single -> TxHistoryItem.DestinationType.Single(
+ addressType.toDomain(),
+ )
+ is SdkTransactionHistoryItem.DestinationType.Multiple -> TxHistoryItem.DestinationType.Multiple(
+ addressTypes.map { it.toDomain() },
+ )
+ }
+
+ private fun SdkTransactionHistoryItem.AddressType.toDomain(): TxHistoryItem.AddressType = when (this) {
+ is SdkTransactionHistoryItem.AddressType.Contract -> TxHistoryItem.AddressType.Contract(address)
+ is SdkTransactionHistoryItem.AddressType.User -> TxHistoryItem.AddressType.User(address)
+ }
+
+ private fun SdkTransactionHistoryItem.extractInteractionAddressType(): TxHistoryItem.InteractionAddressType {
+ return when (type) {
+ SdkTransactionHistoryItem.TransactionType.Transfer -> if (isOutgoing) {
+ mapToInteractionAddressType(destinationType = destinationType)
+ } else {
+ mapToInteractionAddressType(sourceType = sourceType)
+ }
+ is SdkTransactionHistoryItem.TransactionType.ContractMethod -> mapToInteractionAddressType(destinationType)
+ }
+ }
+
+ private fun mapToInteractionAddressType(
+ destinationType: SdkTransactionHistoryItem.DestinationType,
+ ): TxHistoryItem.InteractionAddressType {
+ return when (destinationType) {
+ is TransactionHistoryItem.DestinationType.Multiple -> TxHistoryItem.InteractionAddressType.Multiple(
+ destinationType.addressTypes.map { it.address },
+ )
+ is TransactionHistoryItem.DestinationType.Single -> when (destinationType.addressType) {
+ is TransactionHistoryItem.AddressType.Contract -> TxHistoryItem.InteractionAddressType.Contract(
+ destinationType.addressType.address,
+ )
+ is TransactionHistoryItem.AddressType.User -> TxHistoryItem.InteractionAddressType.User(
+ destinationType.addressType.address,
+ )
+ }
+ }
+ }
+
+ private fun mapToInteractionAddressType(
+ sourceType: SdkTransactionHistoryItem.SourceType,
+ ): TxHistoryItem.InteractionAddressType {
+ return when (sourceType) {
+ is TransactionHistoryItem.SourceType.Multiple -> TxHistoryItem.InteractionAddressType.Multiple(
+ sourceType.addresses,
+ )
+ is TransactionHistoryItem.SourceType.Single -> TxHistoryItem.InteractionAddressType.User(sourceType.address)
+ }
}
}
\ No newline at end of file
diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionTypeConverter.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionTypeConverter.kt
new file mode 100644
index 0000000000..271e9d3209
--- /dev/null
+++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/SdkTransactionTypeConverter.kt
@@ -0,0 +1,50 @@
+package com.tangem.domain.walletmanager.utils
+
+import android.content.res.AssetManager
+import com.squareup.moshi.JsonAdapter
+import com.squareup.moshi.Moshi
+import com.squareup.moshi.Types
+import com.tangem.blockchain.common.txhistory.TransactionHistoryItem
+import com.tangem.domain.txhistory.models.TxHistoryItem
+import com.tangem.domain.walletmanager.model.SmartContractMethod
+import com.tangem.utils.converter.Converter
+import okio.buffer
+import okio.source
+
+class SdkTransactionTypeConverter(
+ private val assetManager: AssetManager,
+ private val moshi: Moshi,
+) : Converter {
+
+ private val adapter: JsonAdapter