From 0c275ae4604a470ebf7127073cdd383fae18841f Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 24 Sep 2025 14:07:19 +0300 Subject: [PATCH] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../analytics/StakingAnalyticsEvent.kt | 7 +++++- .../transaction/error/SendTransactionError.kt | 13 ++++++++++ .../api/analytics/CommonSendAnalyticEvents.kt | 3 +++ .../v2/send/confirm/model/SendConfirmModel.kt | 1 + .../confirm/model/NFTSendConfirmModel.kt | 1 + .../impl/presentation/model/StakingModel.kt | 24 +++++++++++++++---- .../state/helpers/StakingTransactionSender.kt | 4 ++-- 8 files changed, 47 insertions(+), 8 deletions(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index ad46a043f9..5cf863d2ad 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit ad46a043f9b98b4f4577f906920532cb370c15d4 +Subproject commit 5cf863d2ad68d89a111520aca3504fe9db234c82 diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/analytics/StakingAnalyticsEvent.kt b/domain/staking/src/main/java/com/tangem/domain/staking/analytics/StakingAnalyticsEvent.kt index f8376e3707..108f8014a5 100644 --- a/domain/staking/src/main/java/com/tangem/domain/staking/analytics/StakingAnalyticsEvent.kt +++ b/domain/staking/src/main/java/com/tangem/domain/staking/analytics/StakingAnalyticsEvent.kt @@ -151,8 +151,13 @@ sealed class StakingAnalyticsEvent( } } - data object TransactionError : StakingAnalyticsEvent( + data class TransactionError( + val errorCode: String, + ) : StakingAnalyticsEvent( event = "Error - Transaction Rejected", + params = mapOf( + AnalyticsParam.ERROR_CODE to errorCode, + ), ) } diff --git a/domain/transaction/models/src/main/kotlin/com/tangem/domain/transaction/error/SendTransactionError.kt b/domain/transaction/models/src/main/kotlin/com/tangem/domain/transaction/error/SendTransactionError.kt index afa825d759..5158c0538d 100644 --- a/domain/transaction/models/src/main/kotlin/com/tangem/domain/transaction/error/SendTransactionError.kt +++ b/domain/transaction/models/src/main/kotlin/com/tangem/domain/transaction/error/SendTransactionError.kt @@ -18,6 +18,19 @@ sealed class SendTransactionError { data class UnknownError(val ex: Exception? = null) : SendTransactionError() + fun getAnalyticsDescription(): String { + return when (this) { + is DemoCardError -> "DemoCardError" + is DataError -> "DataError" + is NetworkError -> "NetworkError: $code" + is BlockchainSdkError -> "BlockchainSdkError: $code" + is UserCancelledError -> "UserCancelledError" + is CreateAccountUnderfunded -> "CreateAccountUnderfunded" + is TangemSdkError -> "TangemSdkError: code $code" + is UnknownError -> "UnknownError" + } + } + companion object { const val USER_CANCELLED_ERROR_CODE = 50002 } diff --git a/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/analytics/CommonSendAnalyticEvents.kt b/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/analytics/CommonSendAnalyticEvents.kt index 7b355b9c83..00230df78d 100644 --- a/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/analytics/CommonSendAnalyticEvents.kt +++ b/features/send-v2/api/src/main/java/com/tangem/features/send/v2/api/analytics/CommonSendAnalyticEvents.kt @@ -2,6 +2,7 @@ package com.tangem.features.send.v2.api.analytics import com.tangem.core.analytics.models.AnalyticsEvent import com.tangem.core.analytics.models.AnalyticsParam.Key.BLOCKCHAIN +import com.tangem.core.analytics.models.AnalyticsParam.Key.ERROR_CODE import com.tangem.core.analytics.models.AnalyticsParam.Key.SOURCE import com.tangem.core.analytics.models.AnalyticsParam.Key.TOKEN_PARAM @@ -49,12 +50,14 @@ sealed class CommonSendAnalyticEvents( val categoryName: String, val token: String, val blockchain: String, + val errorCode: String, ) : CommonSendAnalyticEvents( category = categoryName, event = "Error - Transaction Rejected", params = mapOf( TOKEN_PARAM to token, BLOCKCHAIN to blockchain, + ERROR_CODE to errorCode, ), ) diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt index c67ed750cb..c723972d48 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt @@ -468,6 +468,7 @@ internal class SendConfirmModel @Inject constructor( categoryName = analyticsCategoryName, token = cryptoCurrency.symbol, blockchain = cryptoCurrency.network.name, + errorCode = error.getAnalyticsDescription(), ), ) }, diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/confirm/model/NFTSendConfirmModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/confirm/model/NFTSendConfirmModel.kt index 3d3f4d15fe..6baff318cf 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/confirm/model/NFTSendConfirmModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/confirm/model/NFTSendConfirmModel.kt @@ -363,6 +363,7 @@ internal class NFTSendConfirmModel @Inject constructor( categoryName = analyticsCategoryName, token = cryptoCurrency.symbol, blockchain = cryptoCurrency.network.name, + errorCode = error.getAnalyticsDescription(), ), ) }, diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingModel.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingModel.kt index 31e0e9e58c..de9d3521cd 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingModel.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/model/StakingModel.kt @@ -325,7 +325,11 @@ internal class StakingModel @Inject constructor( updateNotifications(stakingError = stakingFeeError) }, onFeeError = { error -> - analyticsEventHandler.send(StakingAnalyticsEvent.TransactionError) + analyticsEventHandler.send( + StakingAnalyticsEvent.TransactionError( + errorCode = "GetFeeError", + ), + ) stateController.update(AddStakingErrorTransformer) updateNotifications(error) }, @@ -366,7 +370,11 @@ internal class StakingModel @Inject constructor( stateController.update(SetConfirmationStateCompletedTransformer(txUrl, cryptoCurrencyStatus)) }, onSendError = { error -> - analyticsEventHandler.send(StakingAnalyticsEvent.TransactionError) + analyticsEventHandler.send( + StakingAnalyticsEvent.TransactionError( + errorCode = error.getAnalyticsDescription(), + ), + ) stakingEventFactory.createSendTransactionErrorAlert(error) stateController.update(SetConfirmationStateResetAssentTransformer(cryptoCurrencyStatus)) }, @@ -652,7 +660,11 @@ internal class StakingModel @Inject constructor( ).fold( ifLeft = { error -> Timber.e(error.toString()) - analyticsEventHandler.send(StakingAnalyticsEvent.TransactionError) + analyticsEventHandler.send( + StakingAnalyticsEvent.TransactionError( + errorCode = "CreateApprovalTxError", + ), + ) stateController.update( SetConfirmationStateAssentApprovalTransformer( appCurrencyProvider = Provider { appCurrency }, @@ -677,7 +689,11 @@ internal class StakingModel @Inject constructor( ).fold( ifLeft = { error -> Timber.e(error.toString()) - analyticsEventHandler.send(StakingAnalyticsEvent.TransactionError) + analyticsEventHandler.send( + StakingAnalyticsEvent.TransactionError( + errorCode = error.getAnalyticsDescription(), + ), + ) stateController.update( SetConfirmationStateAssentApprovalTransformer( appCurrencyProvider = Provider { appCurrency }, diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingTransactionSender.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingTransactionSender.kt index 8223f07a1d..a3ed7f103f 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingTransactionSender.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/helpers/StakingTransactionSender.kt @@ -67,7 +67,7 @@ internal class StakingTransactionSender @AssistedInject constructor( onConstructSuccess: (List) -> Unit, onConstructError: (StakingError) -> Unit, onSendSuccess: (String) -> Unit, - onSendError: (SendTransactionError?) -> Unit, + onSendError: (SendTransactionError) -> Unit, onFeeIncreased: (Fee, Boolean) -> Unit, ) { val state = stateController.value @@ -218,7 +218,7 @@ internal class StakingTransactionSender @AssistedInject constructor( private suspend fun sendStakingTransaction( fullTransactionsData: List, onSendSuccess: (txUrl: String) -> Unit, - onSendError: (SendTransactionError?) -> Unit, + onSendError: (SendTransactionError) -> Unit, ) { if (fullTransactionsData.isEmpty()) return