diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrencyChecksRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrencyChecksRepository.kt index afa7be79cc..d8a6b44533 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrencyChecksRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrencyChecksRepository.kt @@ -126,16 +126,29 @@ internal class DefaultCurrencyChecksRepository( override suspend fun getRentInfoWarning( userWalletId: UserWalletId, currencyStatus: CryptoCurrencyStatus, - balanceAfterTransaction: BigDecimal?, ): CryptoCurrencyWarning.Rent? { val rentData = walletManagersFacade.getRentInfo(userWalletId, currencyStatus.currency.network) ?: return null val balanceValue = currencyStatus.value as? CryptoCurrencyStatus.Loaded ?: return null val stakingTotalBalance = (balanceValue.yieldBalance as? YieldBalance.Data)?.getTotalStakingBalance() ?: BigDecimal.ZERO - val amount = balanceAfterTransaction ?: balanceValue.amount return when { - amount.isZero() && stakingTotalBalance.isZero() -> null - amount < rentData.exemptionAmount && stakingTotalBalance.isZero() -> { + balanceValue.amount.isZero() && stakingTotalBalance.isZero() -> null + balanceValue.amount < rentData.exemptionAmount && stakingTotalBalance.isZero() -> { + CryptoCurrencyWarning.Rent(rentData.rent, rentData.exemptionAmount) + } + else -> null + } + } + + override suspend fun getRentExemptionError( + userWalletId: UserWalletId, + currencyStatus: CryptoCurrencyStatus, + balanceAfterTransaction: BigDecimal, + ): CryptoCurrencyWarning.Rent? { + val rentData = walletManagersFacade.getRentInfo(userWalletId, currencyStatus.currency.network) ?: return null + return when { + balanceAfterTransaction.isZero() -> null + balanceAfterTransaction < rentData.exemptionAmount -> { CryptoCurrencyWarning.Rent(rentData.rent, rentData.exemptionAmount) } else -> null diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyCheckUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyCheckUseCase.kt index 8de4b3ea7e..91ae684bf8 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyCheckUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyCheckUseCase.kt @@ -27,8 +27,11 @@ class GetCurrencyCheckUseCase( val reserveAmount = currencyChecksRepository.getReserveAmount(userWalletId, network) val minimumSendAmount = currencyChecksRepository.getMinimumSendAmount(userWalletId, network) val existentialDeposit = currencyChecksRepository.getExistentialDeposit(userWalletId, network) - val rentWarning = - currencyChecksRepository.getRentInfoWarning(userWalletId, currencyStatus, balanceAfterTransaction) + val rentWarning = currencyChecksRepository.getRentExemptionError( + userWalletId = userWalletId, + currencyStatus = currencyStatus, + balanceAfterTransaction = balanceAfterTransaction ?: BigDecimal.ZERO, + ) val isAccountFunded = recipientAddress?.let { currencyChecksRepository.checkIfAccountFunded( userWalletId, diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyWarningsUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyWarningsUseCase.kt index b0ffc7aa77..82dbe90b92 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyWarningsUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyWarningsUseCase.kt @@ -58,7 +58,7 @@ class GetCurrencyWarningsUseCase( derivationPath = derivationPath, isSingleWalletWithTokens = isSingleWalletWithTokens, ), - flowOf(currencyChecksRepository.getRentInfoWarning(userWalletId, currencyStatus, null)), + flowOf(currencyChecksRepository.getRentInfoWarning(userWalletId, currencyStatus)), flowOf(currencyChecksRepository.getExistentialDeposit(userWalletId, currency.network)), flowOf(currencyChecksRepository.getFeeResourceAmount(userWalletId, currency.network)), getSwapPromoNotificationWarning( diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/CurrencyChecksRepository.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/CurrencyChecksRepository.kt index 726e942b37..e03d3ed0a7 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/CurrencyChecksRepository.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/CurrencyChecksRepository.kt @@ -44,11 +44,19 @@ interface CurrencyChecksRepository { /** * Checks if need warning for Solana rent - * @param balanceAfterTransaction if non null, checks with balance remains after transaction */ suspend fun getRentInfoWarning( userWalletId: UserWalletId, currencyStatus: CryptoCurrencyStatus, - balanceAfterTransaction: BigDecimal?, + ): CryptoCurrencyWarning.Rent? + + /** + * Checks if need error before Solana tx about rent exemption + * @param balanceAfterTransaction if non null, checks with balance remains after transaction + */ + suspend fun getRentExemptionError( + userWalletId: UserWalletId, + currencyStatus: CryptoCurrencyStatus, + balanceAfterTransaction: BigDecimal, ): CryptoCurrencyWarning.Rent? } \ No newline at end of file