Updated on 2026-08-14

This commit is contained in:
Tangem 2024-10-29 10:48:24 +03:00
commit a30f2fd714
6 changed files with 54 additions and 27 deletions

View file

@ -371,7 +371,10 @@ internal object TokensDomainModule {
@Provides
@Singleton
fun provideGetCurrencyCheckUseCase(currencyChecksRepository: CurrencyChecksRepository): GetCurrencyCheckUseCase {
return GetCurrencyCheckUseCase(currencyChecksRepository)
fun provideGetCurrencyCheckUseCase(
currencyChecksRepository: CurrencyChecksRepository,
dispatchers: CoroutineDispatcherProvider,
): GetCurrencyCheckUseCase {
return GetCurrencyCheckUseCase(currencyChecksRepository, dispatchers)
}
}

View file

@ -66,7 +66,7 @@ object NotificationsFactory {
add(
NotificationUM.Error.ReserveAmount(
BigDecimalFormatter.formatCryptoAmount(
cryptoAmount = sendingAmount,
cryptoAmount = reserveAmount,
cryptoCurrency = cryptoCurrency,
),
),

View file

@ -124,7 +124,7 @@ class YieldConverter(
stakedBalance = validatorDTO.stakedBalance,
votingPower = validatorDTO.votingPower,
preferred = validatorDTO.preferred,
isStrategicPartner = isStrategicPartner(validatorDTO.address),
isStrategicPartner = isStrategicPartner(validatorDTO.address, validatorDTO.name),
)
}
@ -177,11 +177,17 @@ class YieldConverter(
}
}
private fun isStrategicPartner(validatorAddress: String): Boolean = PARTNERS.any { it == validatorAddress }
private fun isStrategicPartner(validatorAddress: String, validatorName: String): Boolean {
return PARTNERS.any { it == validatorAddress } || PARTNERS_NAMES.any { it.equals(validatorName, true) }
}
private companion object {
val PARTNERS = listOf(
"cosmosvaloper1wrx0x9m9ykdhw9sg04v7uljme53wuj03aa5d4f",
"H2tJNyMHnRF6ahCQLQ1sSycM4FGchymuzyYzUqKEuydk",
)
val PARTNERS_NAMES = listOf(
"Meria",
)
}
}

View file

@ -8,4 +8,5 @@ data class CryptoCurrencyCheck(
val reserveAmount: BigDecimal?,
val existentialDeposit: BigDecimal?,
val utxoAmountLimit: UtxoAmountLimit?,
val isAccountFunded: Boolean,
)

View file

@ -4,10 +4,13 @@ import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.tokens.model.warnings.CryptoCurrencyCheck
import com.tangem.domain.tokens.repository.CurrencyChecksRepository
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.withContext
import java.math.BigDecimal
class GetCurrencyCheckUseCase(
private val currencyChecksRepository: CurrencyChecksRepository,
private val dispatchers: CoroutineDispatcherProvider,
) {
suspend operator fun invoke(
@ -15,27 +18,38 @@ class GetCurrencyCheckUseCase(
currencyStatus: CryptoCurrencyStatus,
amount: BigDecimal?,
fee: BigDecimal?,
recipientAddress: String? = null,
): CryptoCurrencyCheck {
val network = currencyStatus.currency.network
val dustValue = currencyChecksRepository.getDustValue(userWalletId, network)
val reserveAmount = currencyChecksRepository.getReserveAmount(userWalletId, network)
val existentialDeposit = currencyChecksRepository.getExistentialDeposit(userWalletId, network)
val utxoAmountLimit = if (amount != null && fee != null) {
currencyChecksRepository.checkUtxoAmountLimit(
userWalletId = userWalletId,
network = network,
amount = amount,
fee = fee,
)
} else {
null
}
return withContext(dispatchers.io) {
val network = currencyStatus.currency.network
val dustValue = currencyChecksRepository.getDustValue(userWalletId, network)
val reserveAmount = currencyChecksRepository.getReserveAmount(userWalletId, network)
val existentialDeposit = currencyChecksRepository.getExistentialDeposit(userWalletId, network)
val isAccountFunded = recipientAddress?.let {
currencyChecksRepository.checkIfAccountFunded(
userWalletId,
network,
recipientAddress,
)
} ?: false
val utxoAmountLimit = if (amount != null && fee != null) {
currencyChecksRepository.checkUtxoAmountLimit(
userWalletId = userWalletId,
network = network,
amount = amount,
fee = fee,
)
} else {
null
}
return CryptoCurrencyCheck(
dustValue = dustValue,
reserveAmount = reserveAmount,
existentialDeposit = existentialDeposit,
utxoAmountLimit = utxoAmountLimit,
)
CryptoCurrencyCheck(
dustValue = dustValue,
reserveAmount = reserveAmount,
existentialDeposit = existentialDeposit,
utxoAmountLimit = utxoAmountLimit,
isAccountFunded = isAccountFunded,
)
}
}
}

View file

@ -45,7 +45,7 @@ import kotlinx.coroutines.flow.map
import java.math.BigDecimal
@Suppress("LongParameterList", "LargeClass")
internal class SendNotificationFactory constructor(
internal class SendNotificationFactory(
private val analyticsEventHandler: AnalyticsEventHandler,
private val validateTransactionUseCase: ValidateTransactionUseCase,
private val getCurrencyCheckUseCase: GetCurrencyCheckUseCase,
@ -90,11 +90,14 @@ internal class SendNotificationFactory constructor(
reduceAmountBy = reduceAmountBy,
)
val feeError = (feeState.feeSelectorState as? FeeSelectorState.Error)?.error
val recipientAddress = state.recipientState?.addressTextField?.value
val currencyCheck = getCurrencyCheckUseCase(
userWalletId = userWalletId,
currencyStatus = cryptoCurrencyStatus,
amount = sendingAmount,
fee = feeValue,
recipientAddress = recipientAddress,
)
buildList {
addErrorNotifications(
@ -187,7 +190,7 @@ internal class SendNotificationFactory constructor(
reserveAmount = currencyCheck.reserveAmount,
sendingAmount = sendingAmount,
cryptoCurrency = currency,
isAccountFunded = false,
isAccountFunded = currencyCheck.isAccountFunded,
)
}