Updated on 2026-08-14

This commit is contained in:
Tangem 2026-05-20 12:30:46 +04:00
parent 29f55aae33
commit 9678c49b37
17 changed files with 151 additions and 57 deletions

View file

@ -25,6 +25,7 @@ import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.wallet.isHotWallet
import com.tangem.domain.transaction.usecase.CreateApprovalTransactionUseCase
import com.tangem.domain.transaction.error.SendTransactionError
import com.tangem.domain.transaction.usecase.GetFeeUseCase
import com.tangem.domain.transaction.usecase.SendTransactionUseCase
import com.tangem.domain.yield.supply.usecase.YieldSupplyGetContractAddressUseCase
@ -141,59 +142,69 @@ internal class YieldSupplyApproveModel @Inject constructor(
userWallet = userWallet,
network = cryptoCurrency.network,
).fold(
ifLeft = { error ->
TangemLogger.e(error.toString())
uiState.update(YieldSupplyTransactionReadyTransformer)
analyticsEventHandler.send(
YieldSupplyAnalytics.EarnErrors(
action = YieldSupplyAnalytics.Action.Approve,
errorDescription = error.getAnalyticsDescription(),
),
)
yieldSupplyAlertFactory.getSendTransactionErrorState(
error = error,
popBack = params.callback::onDismissClick,
onFailedTxEmailClick = { errorMessage ->
modelScope.launch(dispatchers.default) {
yieldSupplyAlertFactory.onFailedTxEmailClick(
userWallet = userWallet,
cryptoCurrency = cryptoCurrency,
errorMessage = errorMessage,
)
}
},
)
params.callback.onTransactionProgress(false)
},
ifRight = { txHash ->
yieldSupplyPendingTracker.addPending(
userWalletId = userWallet.walletId,
cryptoCurrency = cryptoCurrency,
txIds = listOf(txHash),
)
val event = AnalyticsParam.TxSentFrom.Earning(
blockchain = cryptoCurrency.network.name,
token = cryptoCurrency.symbol,
feeType = AnalyticsParam.FeeType.Normal,
feeToken = feeCryptoCurrencyStatus.currency.symbol,
)
analyticsEventHandler.send(
Basic.TransactionSent(
sentFrom = event,
memoType = Basic.TransactionSent.MemoType.Null,
),
)
analyticsEventHandler.send(YieldSupplyAnalytics.ApprovalAction(
token = cryptoCurrency.symbol,
blockchain = cryptoCurrency.network.name,
action = YieldSupplyAnalytics.Action.Approve,
))
params.callback.onTransactionSent()
},
ifLeft = ::onTransactionError,
ifRight = { onTransactionSuccess(it) },
)
}
}
private fun onTransactionError(error: SendTransactionError) {
TangemLogger.e(error.toString())
uiState.update(YieldSupplyTransactionReadyTransformer)
analyticsEventHandler.send(
YieldSupplyAnalytics.EarnErrors(
action = YieldSupplyAnalytics.Action.Approve,
errorDescription = error.getAnalyticsDescription(),
),
)
yieldSupplyAlertFactory.getSendTransactionErrorState(
error = error,
popBack = params.callback::onDismissClick,
onFailedTxEmailClick = { errorMessage ->
modelScope.launch(dispatchers.default) {
yieldSupplyAlertFactory.onFailedTxEmailClick(
userWallet = userWallet,
cryptoCurrency = cryptoCurrency,
errorMessage = errorMessage,
)
}
},
)
params.callback.onTransactionProgress(false)
}
private suspend fun onTransactionSuccess(txHash: String) {
yieldSupplyPendingTracker.addPending(
userWalletId = userWallet.walletId,
cryptoCurrency = cryptoCurrency,
txIds = listOf(txHash),
)
val feeAssetType = if (feeCryptoCurrencyStatus.currency is CryptoCurrency.Coin) {
AnalyticsParam.FeeAssetType.Coin
} else {
AnalyticsParam.FeeAssetType.Token
}
val event = AnalyticsParam.TxSentFrom.Earning(
blockchain = cryptoCurrency.network.name,
token = cryptoCurrency.symbol,
feeType = AnalyticsParam.FeeType.Normal,
feeToken = feeCryptoCurrencyStatus.currency.symbol,
feeAssetType = feeAssetType,
)
analyticsEventHandler.send(
Basic.TransactionSent(
sentFrom = event,
memoType = Basic.TransactionSent.MemoType.Null,
),
)
analyticsEventHandler.send(YieldSupplyAnalytics.ApprovalAction(
token = cryptoCurrency.symbol,
blockchain = cryptoCurrency.network.name,
action = YieldSupplyAnalytics.Action.Approve,
))
params.callback.onTransactionSent()
}
private fun subscribeOnCurrencyStatusUpdates() {
modelScope.launch {
feeCryptoCurrencyStatusFlow.update {

View file

@ -17,6 +17,7 @@ import com.tangem.domain.account.status.usecase.GetFeePaidCryptoCurrencyStatusSy
import com.tangem.domain.account.status.utils.CryptoCurrencyStatusOperations.getCryptoCurrencyStatus
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.models.wallet.isHotWallet
@ -267,11 +268,18 @@ internal class YieldSupplyStartEarningModel @Inject constructor(
cryptoCurrency = cryptoCurrency,
yieldSupplyPendingStatus = YieldSupplyPendingStatus.Enter(txsData),
)
val feeCurrency = feeCryptoCurrencyStatusFlow.value.currency
val feeAssetType = if (feeCurrency is CryptoCurrency.Coin) {
AnalyticsParam.FeeAssetType.Coin
} else {
AnalyticsParam.FeeAssetType.Token
}
val event = AnalyticsParam.TxSentFrom.Earning(
blockchain = cryptoCurrency.network.name,
token = cryptoCurrency.symbol,
feeType = AnalyticsParam.FeeType.Normal,
feeToken = feeCryptoCurrencyStatusFlow.value.currency.symbol,
feeToken = feeCurrency.symbol,
feeAssetType = feeAssetType,
)
analytics.send(
YieldSupplyAnalytics.FundsEarned(

View file

@ -195,11 +195,17 @@ internal class YieldSupplyStopEarningModel @Inject constructor(
referralId = appsFlyerStore.get()?.refcode,
),
)
val feeAssetType = if (feeCryptoCurrencyStatus.currency is CryptoCurrency.Coin) {
AnalyticsParam.FeeAssetType.Coin
} else {
AnalyticsParam.FeeAssetType.Token
}
val event = AnalyticsParam.TxSentFrom.Earning(
blockchain = cryptoCurrency.network.name,
token = cryptoCurrency.symbol,
feeType = AnalyticsParam.FeeType.Normal,
feeToken = feeCryptoCurrencyStatus.currency.symbol,
feeAssetType = feeAssetType,
)
analytics.send(
Basic.TransactionSent(