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 45f2441c60..213a569e11 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
@@ -552,6 +552,7 @@ class DefaultWalletManagersFacade(
blockchain = blockchain,
derivationPath = derivationPath,
)
+ val feePaidCurrency = blockchain.feePaidCurrency()
if (walletManager == null) {
Timber.e("Unable to get a wallet manager for blockchain: $blockchain")
@@ -560,6 +561,7 @@ class DefaultWalletManagersFacade(
val transactionDataConverter = TransactionDataToTxHistoryItemConverter(
walletAddresses = SdkAddressToAddressConverter.convertList(walletManager.wallet.addresses).toSet(),
+ feePaidCurrency = feePaidCurrency,
)
return walletManager.wallet.recentTransactions.mapNotNull(transactionDataConverter::convert)
diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/TransactionDataToTxHistoryItemConverter.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/TransactionDataToTxHistoryItemConverter.kt
index d686b942ec..381b9cadd3 100644
--- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/TransactionDataToTxHistoryItemConverter.kt
+++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/TransactionDataToTxHistoryItemConverter.kt
@@ -1,8 +1,6 @@
package com.tangem.domain.walletmanager.utils
-import com.tangem.blockchain.common.Amount
-import com.tangem.blockchain.common.TransactionData
-import com.tangem.blockchain.common.TransactionStatus
+import com.tangem.blockchain.common.*
import com.tangem.domain.txhistory.models.TxHistoryItem
import com.tangem.domain.walletmanager.model.Address
import com.tangem.utils.converter.Converter
@@ -18,6 +16,7 @@ import java.math.BigDecimal
*/
internal class TransactionDataToTxHistoryItemConverter(
private val walletAddresses: Set
,
+ private val feePaidCurrency: FeePaidCurrency,
) : Converter {
override fun convert(value: TransactionData): TxHistoryItem? {
@@ -48,12 +47,30 @@ internal class TransactionDataToTxHistoryItemConverter(
private fun getTransactionAmountValue(amount: Amount, feeAmount: Amount?): BigDecimal? {
val feeValue = feeAmount?.value ?: BigDecimal.ZERO
- val value = amount.value?.plus(feeValue)
+ val value = amount.value
if (value == null) {
Timber.w("Transaction amount must not be null: ${amount.currencySymbol}")
}
- return value
+ return when (feePaidCurrency) {
+ FeePaidCurrency.SameCurrency -> value?.plus(feeValue)
+ FeePaidCurrency.Coin -> {
+ if (amount.type is AmountType.Coin) value?.plus(feeValue) else value
+ }
+ is FeePaidCurrency.Token -> {
+ val token = (amount.type as? AmountType.Token)?.token ?: return value
+ if (isSameToken(token, feePaidCurrency.token)) {
+ value?.plus(feeValue)
+ } else {
+ value
+ }
+ }
+ }
+ }
+
+ private fun isSameToken(amountToken: Token, feeToken: Token): Boolean {
+ return amountToken.contractAddress.equals(feeToken.contractAddress, ignoreCase = true) &&
+ amountToken.symbol.equals(feeToken.symbol, ignoreCase = true)
}
}
\ No newline at end of file
diff --git a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt
index 64600a36df..dbcc2c7ff5 100644
--- a/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt
+++ b/domain/legacy/src/main/java/com/tangem/domain/walletmanager/utils/UpdateWalletManagerResultFactory.kt
@@ -15,24 +15,28 @@ internal class UpdateWalletManagerResultFactory {
fun getResult(walletManager: WalletManager): UpdateWalletManagerResult.Verified {
val wallet = walletManager.wallet
val addresses = getAvailableAddresses(wallet.addresses)
+ val feePaidCurrency = wallet.blockchain.feePaidCurrency()
+ val txHistoryItemConverter = TransactionDataToTxHistoryItemConverter(addresses, feePaidCurrency)
return UpdateWalletManagerResult.Verified(
selectedAddress = wallet.address,
addresses = addresses,
currenciesAmounts = getTokensAmounts(wallet.amounts.values.toSet()),
- currentTransactions = getCurrentTransactions(addresses, wallet.recentTransactions.toSet()),
+ currentTransactions = getCurrentTransactions(txHistoryItemConverter, wallet.recentTransactions.toSet()),
)
}
fun getDemoResult(walletManager: WalletManager, demoAmount: Amount): UpdateWalletManagerResult.Verified {
val wallet = walletManager.wallet
val addresses = getAvailableAddresses(wallet.addresses)
+ val feePaidCurrency = wallet.blockchain.feePaidCurrency()
+ val txHistoryItemConverter = TransactionDataToTxHistoryItemConverter(addresses, feePaidCurrency)
return UpdateWalletManagerResult.Verified(
selectedAddress = wallet.address,
addresses = addresses,
currenciesAmounts = getDemoTokensAmounts(demoAmount, walletManager.cardTokens),
- currentTransactions = getCurrentTransactions(addresses, wallet.recentTransactions.toSet()),
+ currentTransactions = getCurrentTransactions(txHistoryItemConverter, wallet.recentTransactions.toSet()),
)
}
@@ -81,14 +85,19 @@ internal class UpdateWalletManagerResultFactory {
}
private fun getCurrentTransactions(
- walletAddresses: Set,
+ txHistoryItemConverter: TransactionDataToTxHistoryItemConverter,
recentTransactions: Set,
): Set {
val unconfirmedTransactions = recentTransactions.filter {
it.status == TransactionStatus.Unconfirmed
}
- return unconfirmedTransactions.mapNotNullTo(hashSetOf()) { createCurrencyTransaction(walletAddresses, it) }
+ return unconfirmedTransactions.mapNotNullTo(hashSetOf()) {
+ createCurrencyTransaction(
+ txHistoryItemConverter = txHistoryItemConverter,
+ data = it,
+ )
+ }
}
private fun createCurrencyAmount(amount: Amount): CryptoCurrencyAmount? {
@@ -106,10 +115,9 @@ internal class UpdateWalletManagerResultFactory {
}
private fun createCurrencyTransaction(
- walletAddresses: Set,
+ txHistoryItemConverter: TransactionDataToTxHistoryItemConverter,
data: TransactionData,
): CryptoCurrencyTransaction? {
- val txHistoryItemConverter = TransactionDataToTxHistoryItemConverter(walletAddresses)
return when (val type = data.amount.type) {
is AmountType.Coin -> {
val txHistoryItem = txHistoryItemConverter.convert(data) ?: return null