diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt
index 8c42687aa8..b9b4460255 100644
--- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt
+++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/QuotesResponse.kt
@@ -20,5 +20,16 @@ data class QuotesResponse(
val priceChange1w: BigDecimal?,
@Json(name = "priceChange30d")
val priceChange30d: BigDecimal?,
- )
+ ) {
+
+ companion object {
+
+ val EMPTY = Quote(
+ price = null,
+ priceChange24h = null,
+ priceChange1w = null,
+ priceChange30d = null,
+ )
+ }
+ }
}
\ No newline at end of file
diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml
index a9bc17a583..e0539d9751 100644
--- a/core/res/src/main/res/values-de/strings.xml
+++ b/core/res/src/main/res/values-de/strings.xml
@@ -1025,9 +1025,7 @@
Jüngste
Empfänger
Keine gültige Adresse
- Stelle sicher, dass sich die empfangende Wallet-Adresse im ** %s -Netzwerk** befindet, um den Verlust Deiner Token zu vermeiden.
- senden an %s
- Stelle sicher, dass Du %s Netzwerkadresse hast, da Fehler zu verlorenen Übertragungen führen können
+ Stelle sicher, dass sich die empfangende Wallet-Adresse im **%s -Netzwerk** befindet, um den Verlust Deiner Token zu vermeiden.
Senden an
Ein Memo/Destination Tag ist eine eindeutige ID zur Unterscheidung von Transaktionen, die an denselben Empfänger im selben Netzwerk gesendet werden. Vorsicht! Das Weglassen eines Vermerks kann dazu führen, dass Gelder für immer verloren sind!
Memo / Destination Tag ist ein Code, der Transaktionen an einen gemeinsamen Empfänger im Kryptonetzwerk voneinander trennt.
diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml
index 31e91c7d59..327988e301 100644
--- a/core/res/src/main/res/values-es/strings.xml
+++ b/core/res/src/main/res/values-es/strings.xml
@@ -17,7 +17,7 @@
No hay par disponible
Para utilizar la función de intercambio, su billetera debe contener al menos 2 tokens
Añada tokens
- Sólo tienes 1 token añadido a tu portafolio. Para utilizar la función de intercambio, necesita añadir al menos 2 tokens
+ Solo tiene 1 token añadido a su portafolio. Para utilizar la función de intercambio, necesita añadir al menos 2 tokens
Añada tokens
Seleccione el token que desea recibir
Seleccione el token que desea intercambiar
@@ -34,7 +34,7 @@
Razón: %s
No se puede completar una transacción
El seleccionado no admite la red %1$s
- Para activar el %1$s cifrado criptográfico de la blockchain, necesitarás reiniciar la billetera a los ajustes de fábrica. Por favor, retire sus fondos antes de hacerlo para asegurarse no perderlos, y luego complete el proceso de reinicio. El acceso a la billetera actual no será posible después del reinicio.
+ Para activar el cifrado criptográfico de la blockchain %1$s, tendrá que restablecer la configuración de fábrica de la billetera. Por favor, retire tus fondos antes de hacerlo para asegurarse de que no los pierda, y luego complete el proceso de restablecimiento. El acceso a la billetera actual no será posible tras el restablecimiento.
Esta tarjeta no admite tokens en la red %1$s debido a una limitación del firmware.
¿Tiene dificultades para escanear su tarjeta/anillo?
Esta tarjeta no está diseñada para funcionar con Tangem
@@ -114,7 +114,7 @@
Resetear a configuración de fábrica
Modo de seguridad
Ajustes del dispositivo
- Además de la tarifa de red, la red Cardano cobra %1$s ADA al realizar transacciones con el %2$s token
+ Además de la tarifa de red, la red Cardano cobra %1$s ADA al realizar transacciones con el token %2$s
Requisitos de transacción de Cardano
Para realizar una %1$s transacción, deba depositar algo de ADA para cubrir la tarifa de red y el valor mínimo de ADA (se recomiendan 5 ADA)
ADA insuficiente para la transferencia de tokens
@@ -185,7 +185,7 @@
Intercambiar
Explore
Explore historial de transacciones
- Explorador(a)
+ Explorador
No se pudo obtener la tarifa
Las tarifas de red son cargos que los usuarios pagan para procesar y confirmar transacciones. El importe de la tarifa puede verse afectado por la congestión de la red, el tamaño de la transacción y la prioridad de ejecución. %s
Rápido
@@ -234,7 +234,7 @@
Guardar cambios
Buscar
Buscar tokens
- sec
+ seg
Ver todo
Seed phrase
Seleccione una acción
@@ -255,7 +255,7 @@
Con éxito
Soporte
Redes soportadas
- Swap
+ Intercambiar
términos y condiciones
Condiciones de uso
Hoy
@@ -276,23 +276,23 @@
semana
con
Sí
- Dirección del contract copiada
+ Dirección de contrato copiada
Redes disponibles
- Dirección del contract
- La dirección del contract no es válida
+ Dirección de contrato
+ La dirección de contrato es incorrecta
Por favor, seleccione la red
Este token ya ha sido agregado a la lista
Este token ya existe
Los decimales deben ser un número entero válido, hasta %d
Derivación personalizada
Por ejemplo m/00\'/0000\'/0\'/0/0
- Introduzque una derivación personalizada
+ Introduzca una derivación personalizada
Decimales
Ruta de derivación
Por defecto
- Coin de tipo BIP44
+ Tipo de moneda BIP44
La ruta de derivación que ha ingresado no es válida
- Por ejemplo USD coin
+ Por ejemplo moneda USD
Nombre
No elegida
Red
@@ -335,18 +335,18 @@
%s dirección
Enviar activos a otras redes resultará en una pérdida permanente.
Red de %s
- Envíe fondos utilizando solo la
+ Envíe fondos utilizando solo
Hola equipo de soporte, he encontrado un error con el código: %s
Error de WalletConnect
Ha usado una tarjeta de otra billetera. Toque la tarjeta asociada con esta billetera
No hay fondos suficientes para la transacción. Por favor, recargue su cuenta.
Mis tokens
- Aún no ha añadido ningún token. Agregue tokens a través de Market para hacer swap
+ Aún no ha añadido ningún token. Agregue tokens a través de Mercados para hacer intercambios
No se puede intercambiar por %s
Proporcionado por
Estado
Elegir proveedor
- Tangem ofrece swaps de tokens a través de proveedores externos
+ Tangem ofrece intercambios de tokens a través de proveedores externos
Elija proveedor
Ha ocurrido un error. Código: %s
Error %1$s. El proveedor seleccionado no puede procesar la transacción especificada. Por favor, redondee el valor a %2$s o cámbielo
@@ -358,7 +358,7 @@
Operación fallida por el proveedor
Su intercambio está tardando más de lo esperado. Por favor, consulte al soporte del proveedor para obtener ayuda.
Tiempo de transacción prolongado
- El monto de la transacción fue reembolsado en %1$s a su billetera debido a OKX o reglas puente. %2$s
+ La cantidad de la transacción fue reembolsada en %1$s a su billetera debido a OKX o reglas puente. %2$s
El monto fue reembolsado en %1$s (red %2$s)
Visite el sitio web del proveedor para la verificación
Verificación KYC requerida por el proveedor
@@ -389,7 +389,7 @@
Lista de todos los tokens agregados a su billetera
Buscar tarifas actuales...
Tasa flotante
- Al utilizar la función de intercambio, acepta el %s
+ Al utilizar la función de intercambio, acepta los %s
Al utilizar la función de intercambio, aceptas las condiciones de %1$s y %2$s del proveedor.
Pronto habrá más proveedores disponibles
Proveedor
@@ -434,7 +434,7 @@
Montante %s
La función Aprobar es necesaria para otorgar permiso a otra dirección para usar una cantidad específica de sus tokens. Por diseño, los contratos inteligentes no pueden acceder a sus tokens sin su aprobación. Al \"desbloquear\" sus tokens, autoriza al contrato inteligente de StakeKit a usarlos. Los mineros de la red reciben una tarifa de gas (pagada por usted) por registrar esta acción en la cadena de bloques. Puede apostar su token después de dar su aprobación.
Para continuar, debe autorizar el contrato inteligente de Polygon para utilizar su %s
- Para continuar, de autorización a los smart contracts de %1s para usar su %2s
+ Para continuar, conceda a los contratos inteligentes de %1s permiso para utilizar su %2s
Dar autorización
Ilimitado
Agregar Billetera Existente
@@ -464,19 +464,19 @@
Límite de Mana
La red Koinos requiere Mana para las tarifas de red. Tienes %1$s/%2$s Mana
Nivel de Mana
- Para comenzar a seguir tus activos crypto y transacciones, agregue tokens
+ Para hacer un seguimiento de sus criptomonedas y transacciones, agregue tokens
Gestionar tokens
Para acceder a todas las redes necesita escanear la tarjeta
Escanee su tarjeta o anillo
- Benefíciese de %1$s tarifa de servicio en intercambios a través de Changelly del %2$s al %3$s de febrero
- Intercambio con Changelly, %s tarifa
+ Disfrute de %1$s comisiones de servicio en los swaps a través de Changelly a partir de febrero %2$s-%3$s
+ Intercambie con Changelly, %s comisiones
Tokens
Agregar
Editar
Capitalización de mercado de la moneda
Blockchain en la que se creó inicialmente la criptomoneda
Red nativa
- El uso de redes no nativas para tokens permite la interoperabilidad entre blockchains, permitiendo que los activos se utilicen en diversas aplicaciones descentralizadas y smart contracts en diferentes plataformas. Sin embargo, esto a menudo implica un custodio o smart contract para mantener el activo original de forma segura, introduciendo centralización y riesgo de contraparte.
+ El uso de redes no nativas para tokens permite la interoperabilidad entre cadenas de bloques, lo que permite el uso de activos en diversas aplicaciones descentralizadas y contratos inteligentes en distintas plataformas. Sin embargo, esto suele implicar un custodio o un contrato inteligente que mantenga el activo original de forma segura, lo que introduce centralización y riesgo de contraparte.
No es la blockchain original o primaria donde se aloja el token
Redes no nativas
Elegir redes
@@ -507,7 +507,7 @@
Acciones rápidas
Busque en el mercado
Resultado
- Ver tokens con una capitalización de mercado inferior a 100,000$
+ Ver tokens con marketcap inferior a 100.000$
Mostrar tokens
Sin resultado
Seleccione una red
@@ -555,7 +555,7 @@
Valoración totalmente diluida
El valor teórico total de una criptomoneda si todas las monedas que podrían existir estuvieran en circulación, incluidas las que actualmente no circulan.
Valoración totalmente diluida
- Dato de Genesis
+ Fecha de génesis
Alto
Titulares
El cambio en el número de poseedores de tokens dentro de un período de tiempo específico
@@ -650,11 +650,11 @@
Únase ahora
Comparta su código y gane 5 USDT por venta. Su amigo obtiene un 10% de descuento.
¡Obtenga RECOMPENSAS por cada amigo!
- Deba configurar un único código de acceso para proteger todss sus dispositivos.
+ Configure un código de acceso único para proteger todos sus dispositivos.
Proteger
Puede configurar un código de acceso individual en cada tarjeta más adelante
Personalizar
- El código de acceso se puede recuperar con una tarjeta o un anillo vinculada(o). No guarde todos los dispositivos en el mismo lugar.
+ El código de acceso puede restaurarse con una tarjeta o un anillo vinculados. No guarde todos sus dispositivos en el mismo lugar.
Restaurar
Elige cualquier palabra, frase o número que quieras como su código de acceso
Crear un código de acceso
@@ -704,19 +704,19 @@
- %d palabras
- Para importar su billetera, ingrese su seed phrase en el campo de abajo
+ Para importar su billetera, introduzca su seed phrase en el campo a continuación
Generar seed phrase
Importe una billetera
- Una seed phrase es una serie de palabras que se permite recuperar su billetera. A diferencia de las claves generadas por la tarjeta, las seed phrases no están protegidas y pueden ser copiadas y robadas. Use esta opción bajo su propia responsabilidad.
+ Una seed phrase (o frase semilla) es una serie de palabras que permite recuperar su billetera. A diferencia de las claves generadas por la tarjeta, las seed phrases no están protegidas y pueden ser copiadas y robadas. Use esta opción bajo su propia responsabilidad.
Usar seed phrase
- Seed phrase no válida. Por favor, comprueba el orden de las palabras.
- Seed phrase no válida. Por favor, comprueba tu ortografía.
+ Seed phrase incorrecta. Por favor, comprueba el orden de las palabras.
+ Seed phrase incorrecta. Por favor, compruebe la ortografía.
Legado
- Para comprobar si has escrito correctamente su seed phrase, por favor introduce las palabras 2ª, 7ª y 11ª
+ Para comprobar si ha escrito correctamente su seed phrase, por favor introduzca las palabras 2ª, 7ª y 11ª
Bien, vamos a comprobar
Para iniciar el proceso de backup, agregue hasta dos tarjetas/anillos de backup.
Puede agregar una tarjeta/anillo más o finalizar el proceso de backup
- Prepare su tarjeta de backup con el no.%s
+ Prepare su tarjeta de backup con el número %s
Escanee la tarjeta principal o el anillo para iniciar el proceso de backup.
Prepare la tarjeta principal con el número %s
Prepare el anillo y presione el botón de escaneo a continuación
@@ -752,7 +752,7 @@
Buscar por país
Indisponible
Otras monedas
- Monedas Fiats Populares
+ Monedas fiduciarias populares
Buscar por moneda
Al utilizar la funcionalidad onramp, acepta %1$s y %2$s del proveedor.
El monto de la compra no debe ser mayor a %s
@@ -805,7 +805,7 @@
- para %d billetera
- para %d billeteras
- Obtendrá ^^%1$s^^ por cada wallet comprada por su amigo en su dirección %3$s de la red %2$s ^^30 días después^^
+ Obtendrá ^^%1$s^^ por cada wallet comprada por sus amigos en su dirección %3$s de la red %2$s ^^30 días después^^ de la compra
Usted
Obtendrá un
al comprar una billetera en tangem.com
@@ -816,7 +816,7 @@
¡Compra Tangem Wallet con descuento!\n%s
Recomiende Tangem a sus amigos
Ha aceptado
- Al tocar este botón, ud. acepta
+ Al pulsar este botón acepta
del programa de referidos
- %d billetera
@@ -827,7 +827,7 @@
Entiendo que no puedo usar esta tarjeta para recuperar mi código de acceso en las otras tarjetas de la wallet actual
El restablecimiento de fábrica eliminará completamente la billetera de la tarjeta seleccionada. No podrá restaurar la billetera actual ni usar la tarjeta para recuperar el código de acceso.
El reseteo a valores de fábrica eliminará completamente la billetera de la tarjeta/anillo seleccionado y lo eliminará de la app. No podrá restaurar la billetera actual.
- Si tienes un Anillo Tangem, ¡3 swaps sin comisión en Changelly hasta el 15/11!
+ Si tiene un Anillo Tangem, ¡3 swaps sin comisión en Changelly hasta el 15/11!
¡Intercambia con 0% de comisión!
Inicie sesión en la app y comprueba su saldo sin escanear la tarjeta o el anillo
Acceder a la app
@@ -857,7 +857,7 @@
Convertir a otro token
Montante
Se enviará al destinatario
- Puede establecer tu tarifa de transacción ajustando el valor en el campo\nSatoshi por vByte.
+ Puede establecer su tarifa de transacción ajustando el valor en el campo Satoshi por vByte.
La tarifa que se cobrará por tu transacción. Puedes establecer tu propio valor.
Tarifa máxima
Este es el coste que está dispuesto(a) a pagar por cada unidad de gas. Cuanto más alto sea el precio del gas, más rápido se procesará su transacción. (Tarifa prioritaria incluida)
@@ -914,22 +914,20 @@
Reducir a %s
Tenga en cuenta que su transacción puede experimentar retrasos bajo configuraciones específicas de tarifas
Es posible que haya retrasos en las transacciones
- Debido a las limitaciones de %1$s, solo %2$s UTXO pueden caber en una sola transacción. Esto significa que solo puedes enviar %3$s o menos. Necesitas reducir la cantidad.
+ Debido a las limitaciones de %1$s solo %2$s UTXO pueden usarse en una sola transacción. Esto significa que solo puede enviar %3$s o menos. Debe reducir la cantidad.
Limitación de transacciones
Opcional
Por favor, alinee su código QR con el cuadrado para escanearlo. Asegúrese de escanear la dirección de la red %s.
Reciente
Destinatario
No es una dirección válida
- Asegúrese de que la dirección de la billetera receptora esté en la red %s para evitar perder sus tokens
- enviar a %s
- Asegúrese de que %s dirección de red, ya que los errores pueden resultar en transferencias perdidas
+ Asegúrese de que la dirección de la billetera receptora esté en **la red %s** para evitar perder sus tokens
Destinatario
Un Memo/ID de destino es un ID único para diferenciar transacciones enviadas al mismo destinatario en la misma red. Precaución: Omitir un memo puede llevar a la pérdida de fondos
Memo / Destination Tag es un código que separa las transacciones dirigidas a un destinatario compartido en una red de criptomonedas.
Atención: La omisión del campo Memo puede provocar la pérdida de fondos.
Mis billeteras
- Una forma de medir las tarifas de transacción de Bitcoin. Indique el número de la unidad más pequeña de Bitcoin (Satoshi) por cada byte virtual en una transacción. Cuanto más alto sea el número, más rápido procesarán los mineros la transacción.
+ Una forma de medir las comisiones por transacción de Bitcoin. Indica la cantidad de la unidad de Bitcoin más pequeña (Satoshi) por cada byte virtual en una transacción. Cuanto mayor sea la cantidad, más rápido procesarán la transacción los mineros.
Satoshi / vByte
Enviando...
Toque cualquier campo para editarlo
@@ -952,7 +950,7 @@
¿Está seguro que desea cambiar el token a recibir? Esto restablecerá los datos introducidos previamente.
Cambio de token
Intercambiar y enviar
- ¿Continuar con la conversión? Esto borrará sus datos anteriores.
+ ¿Continuar con la conversión? Sus datos anteriores se borrarán.
Confirmar Conversión
El envío de cualquier otra moneda supondrá su pérdida irreversible.
Seleccione la red de destino correcta
@@ -972,14 +970,14 @@
Haga que su token trabaje para Ud.
La cantidad del staking debe ser al menos %s
La cantidad de staking se redondeará a %1$s TRX debido a las reglas de la red.
- El monto de cancelación del staking se redondeará a %1$s TRX debido a las reglas de la red.
+ La cantidad de unstaking se redondeará a %1$s TRX debido a las reglas de la red.
Reclamar lo que no está en staking
Tarifa de staking de la cuenta
Una cuenta de staking es una cuenta especial donde se almacenan los tokens SOL de staking. Se crea cuando delegas sus tokens a un validador para participar en la validación de transacciones y ganar recompensas. Se cobra una pequeña tarifa por crear la cuenta de staking, que se devuelve una vez que se completa el staking.
Porcentaje de rendimiento anual
El porcentaje de rendimiento anual que podrá ganar como participante en el staking.
APR
- Las recompensas se acumulan automáticamente en su saldo de apustaking esta cada día.
+ Las recompensas se acumulan automáticamente en su saldo de staking diariamente.
Disponible
Tasa de recompensa promedio
¿Cómo funciona el staking?
@@ -1005,7 +1003,7 @@
Al utilizar la función de staking, usted acepta %1$s y %2$s del proveedor
Bloqueado
Migrar
- Native staking
+ Staking nativo
No hay validadores activos disponibles para hacer staking en este momento. Por favor, inténtalo de nuevo más tarde.
Al hacer staking en la red Cardano, se utiliza todo su saldo. Se reservarán 2 ADA adicionales y se devolverán después del staking. Su ADA permanece desbloqueado mientras hace staking.
Detalles del staking de ADA
@@ -1032,7 +1030,7 @@
El staking en la red %1$s con un nuevo validador transferirá automáticamente todos los fondos previamente en staking a este validador.
Reinvierta las recompensas obtenidas en el monto apostado, aumentando las ganancias potenciales.
La opción de volver a staking le permite mover sus fondos de un validador a otro sin necesidad de retirarlos.
- Está a punto de hacer staking con todo su saldo. Recomendamos dejar una cantidad para cubrir las tarifas de la red por unstaking o reclamo de recompensas.
+ Está a punto de hacer staking con todo su saldo. Recomendamos dejar una pequeña cantidad para cubrir las tarifas de red para hacer unstaking o reclamar recompensas.
Para empezar a hacer staking en TON, realice primero una transacción de salida de cualquier importe - esto activará su billetera.
Es posible que se requieran hasta 0.2 TON además de la tarifa de red para completar la transacción. Cualquier cantidad no utilizada será reembolsada.
Se requieren 0.2 TON para realizar esta operación, además de la tarifa de red. Por favor, recargue su saldo.
@@ -1069,21 +1067,21 @@
Hacer más staking
Al hacer staking de %1$s, se realiza sobre todo su saldo de %2$s. Cualquier %2$s adicional que deposite en su billetera Tangem también se pondrá en staking automáticamente.
Monto del staking
- Ud hace el staking de %1$s y recibirá %2$s
+ Hará staking de %1$s y recibirá recompensas %2$s
Toque para desbloquear
Pulse para desbloquear o votar
Toque para retirar
Stake %s
- El unstaking de %s
+ Unstaking de %s
¡La transacción se está procesando! La validación está en curso en la cadena de bloques. Esto puede tardar unos minutos.
Desunión
Desbloquear
Desbloqueando
- La cantidad para el unstaking debe ser al menos %s
+ La cantidad para hacer unstaking debe ser al menos %s
El monto excede el saldo apostado
Sin staking
Deshacer el staking
- Detenando el staking de activos %s
+ Haciendo unstaking de %s
Validador
Validadores
Socio estratégico
@@ -1105,7 +1103,7 @@
Se requiere una transacción entrante de al menos %1$s para proceder
Fondos insuficientes
Tasa Fija
- La red cobrará una tarifa de aprobación de token para verificar que está autorizando el uso de su token para el swap.
+ La red cobrará una tasa de aprobación del token para verificar que usted autoriza el uso de su token para el intercambio.
Intercambie más tokens a mejores tasas directamente en su billetera.
¡Nuevo proveedor de intercambio disponible!
Siéntase seguro con una asistencia permanente que le ayudará con cualquier problema
@@ -1120,15 +1118,15 @@
Simplemente cómodo
Intercambio a través del proveedor
La cantidad incluye:\n• Tarifas del proveedor de servicios\n• Tarifas de red por enviar %s desde el intercambio a la dirección del usuario.
- El monto incluye:\n• tarifas del proveedor de servicios\n• tarifas de red por enviar %1$s desde el intercambio a la dirección del usuario. \n\nEl slippage del proveedor puede alcanzar el %2$s
+ El importe incluye:\n- comisión del proveedor de servicios\n- comisión de red por el envío de %1$s desde el exchange de vuelta a la dirección del usuario. \n\nEl deslizamiento (slippage) del proveedor es de hasta %2$s
El importe incluye los honorarios del proveedor de servicios.
- El importe incluye las tarifas del proveedor de servicios. \n\nEl slippage del proveedor puede alcanzar el %s
+ El importe incluye las tarifas del proveedor de servicios. \n\nEl deslizamiento (slippage) del proveedor puede llegar a %s
Información
- Todos los exchanges descentralizados requieren aprobaciones para evitar que los smart contracts accedan a su billetera sin su permiso. Por diseño, los smart contracts no pueden acceder a tus tokens a menos que lo apruebes. Al \"desbloquear\" sus tokens, autoriza al smart contract de 1-inch a gastarlos. Los mineros de la red reciben una tarifa de gas (pagada por voz) para registrar esta acción en la blockchain. Puede intercambiar su token después de dar la aprobación.
+ Todos los intercambios descentralizados requieren aprobaciones para evitar que los contratos inteligentes accedan a su billetera sin su permiso. Por diseño, los contratos inteligentes no pueden acceder a sus tokens a menos que lo apruebe. Al \"desbloquear\" sus tokens, autoriza al contrato inteligente de 1-inch a gastarlos. Los mineros de la red reciben una tarifa de gas (pagada por usted) para registrar esta acción en la blockchain. Puede intercambiar su token después de dar su aprobación.
Aprobar
Error en la estimación de la tarifa. Envíe sus comentarios al servicio de asistencia.
Usted intercambia
- Hacer swap de esta cantidad de tokens seleccionados causará un impacto significativo en el precio y reducirá su resultado.
+ Hacer un intercambio de esta cantidad del token seleccionado causará un impacto significativo en el precio y reducirá su resultado.
Fondos insuficientes
Dar autorización
Intercambiar
@@ -1147,8 +1145,8 @@
Los datos aún no se han cargado. Esto puede tardar unos segundos. Por favor, inténtelo de nuevo más tarde.
El servicio de intercambio %s no está compatible con los proveedores actuales pero estamos trabajando para agregar más opciones.
Es posible que el saldo mostrado esté desactualizado debido al almacenamiento en caché.
- La venta de fondos estará disponible una vez que la(s) transacción(es) pendiente(s) en la red %s se complete
- El envío de fondos estará disponible una vez que se completen las transacciones pendientes en la red %s.
+ La venta de fondos estará disponible una vez que la(s) transacción(es) pendiente(s) en la red %s se completen
+ El envío de fondos estará disponible una vez que se complete(n) la(s) transacción(es) pendiente(s) en la red %s
Vender %s no es compatible con los proveedores actuales, pero estamos trabajando para agregar más opciones.
El staking de %s no es compatible con los proveedores actuales, pero estamos trabajando para agregar más opciones.
Generar XPUB
@@ -1159,11 +1157,11 @@
El staking le permite ganar %1$s y obtener recompensas cada %2$s días
Servicio de Staking
Token de %1$s en la red %%image%% %2$s
- Token en la %%image%% red %1$s
+ Token en la red %%image%% %1$s
El token %1$s (%2$s) es la moneda principal en la red %3$s y no se puede ocultar mientras tengas otros tokens de esta red en la lista
No se puede ocultar %s
Cambie este token por otro por una tarifa de servicio de %1$s del %2$s al %3$s de febrero.
- Intercambio con Changelly, %s tarifa
+ Intercambie con Changelly, %s comisiones
Intercambie ahora
Criptomonedas populares 🔥
No disponible para compra
@@ -1260,8 +1258,8 @@
La dirección se copió correctamente
Sin conexión a internet
Consíguelo ahora con un 10 % de descuento
- Accede a más de 13 000 criptomonedas. Compra, vende, intercambia y realiza staking con un solo toque.\nVincula hasta tres tarjetas para hacer copias de seguridad.
- Descubre Tangem Wallet
+ Acceda a más de 13.000 criptomonedas. Compre, venda, intercambie y realice staking con un solo toque.\nVincule hasta tres tarjetas para hacer copias de seguridad.
+ Descubra Tangem Wallet
Cambiar código de acceso
Manténgase informado sobre las transacciones entrantes de la billetera y las actualizaciones de Tangem.
Notificaciones de transacciones
@@ -1308,11 +1306,11 @@
Esta tarjeta podría ser una muestra de producción o una falsificación
La verificación de autenticidad falló
Asociar
- Este token debe estar asociado a tu cuenta de Hedera antes de que pueda recibirlo. Tarifa de asociación ~%1$s %2$s
+ Este token debe estar asociado a su cuenta de Hedera antes de que pueda recibirlo. Tarifa de asociación ~%1$s %2$s
Este token debe estar asociado con su cuenta de Hedera antes de poder recibirlo.
Asocie su token
No hay suficiente %s. Recargue su cuenta de Hedera para asociar este token
- ¿Está seguro(a) de que desea cancelar la transacción? No podrá volver a intentar realizarla.
+ ¿Está seguro de que desea cancelar la transacción? No podrá volver a reintentarlo.
Su transacción con un importe de %1$s %2$s no se ha completado. Puede volver a intentarlo para completarla.
Tiene una transacción sin terminar
Última actualización hace %s
@@ -1353,7 +1351,7 @@
Algunas redes no están disponibles
No se han podido actualizar los saldos de algunos tokens
No hay suficiente %s. Recargue su cuenta XLM para abrir trustline
- Esta es una tarjeta de Testnet. No puede procesar transacciones y solo deba usarse para pruebas y desarrollo.
+ Esta es una tarjeta de Testnet. No puede procesar transacciones y solo debe usarse para fines de prueba y desarrollo.
Solo para fines de prueba
El saldo podría estar desactualizado. Actualice la página.
No hay suficiente %1$s. Recargue su cuenta %2$s para asociar este token
@@ -1373,7 +1371,7 @@
Verifique su conexión de red
Tiempo de espera agotado
Vuelva a su navegador y vuelva a conectarse a través de WalletConnect.
- La sesión de Wallet Connect se desconectó
+ La sesión de Wallet Connect fue desconectada
Firmar de todos modos
Código de error: %s. Si el problema persiste - no dude en ponerse en contacto con nuestro soporte.
Si el problema persiste, no dude en contactar con nuestro soporte.
diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml
index 2b20ddae59..22c254f30d 100644
--- a/core/res/src/main/res/values-fr/strings.xml
+++ b/core/res/src/main/res/values-fr/strings.xml
@@ -895,9 +895,7 @@
Récent
Destinataire
Adresse non valide
- Assurez-vous que l\'adresse du portefeuille de réception est sur le réseau %s pour éviter de perdre vos jetons
- envoyer à %s
- Assurez-vous de %s une adresse réseau, car des erreurs peuvent entraîner des transferts perdus
+ Assurez-vous que l\'adresse du portefeuille de réception est sur **le réseau %s** pour éviter de perdre vos jetons
Envoyer à
Un Memo/Destination Tag est un identifiant unique permettant de différencier les transactions envoyées au même destinataire sur le même réseau. Attention : L\'omission d\'un mémo peut entraîner des fonds mal placés
Le Memo / Destination Tag est un code qui distingue les transactions envoyées à un destinataire partagé sur un réseau crypto.
diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml
index 5205787420..0ec41dbaeb 100644
--- a/core/res/src/main/res/values-ja/strings.xml
+++ b/core/res/src/main/res/values-ja/strings.xml
@@ -1034,9 +1034,7 @@
最近の取引
受取人
有効なアドレスではありません
- トークンの損失を避けるために、受信ウォレットアドレスが** %sネットワーク**上にあることを確認してください
- %s に送信
- %sネットワーク上のアドレスに送信していることを確認してください。エラーが発生すると資金が失われる可能性があります。
+ トークンの損失を避けるために、受信ウォレットアドレスが**%sネットワーク**上にあることを確認してください
送金先
メモ/宛先タグは、同じネットワーク上の同じ受信者に送信された取引を区別するためのユニークなIDです。注意:メモを省略すると、資金の行き違いにつながる可能性があります。
メモ / 宛先タグは、暗号資産ネットワーク内の共有受信者への取引を分離するコードです。
diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml
index 58186b2510..60ebb679d5 100644
--- a/core/res/src/main/res/values-ru/strings.xml
+++ b/core/res/src/main/res/values-ru/strings.xml
@@ -945,8 +945,7 @@
Последние
Получатель
Неверный адрес
- Убедитесь, что вы отправляете средства на адрес кошелька %s. Ошибки могут привести к потере ваших токенов.
- Убедитесь, что отправляете на адрес в сети %s, ошибки могут привести к потере средств.
+ Убедитесь, что адрес получателя находится **в сети %s**, чтобы избежать потери отправляемых средств
Отправить
Мемо/ Код назначения - это код, разделяющий транзакции к общему получателю в сети криптовалют. Внимание: отсутствие мемо может привести к потере средств.
Memo / Destination Tag — это код, разделяющий транзакции, отправляемые одному и тому же получателю в криптовалютной сети.
diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml
index 8ef3fe2fc2..0e1658114b 100644
--- a/core/res/src/main/res/values-uk-rUA/strings.xml
+++ b/core/res/src/main/res/values-uk-rUA/strings.xml
@@ -902,8 +902,7 @@
Останні
Одержувач
Недійсна адреса
- Переконайтеся, що адреса гаманця одержувача знаходиться в мережі %s, щоб уникнути втрати ваших токенів
- Переконайтеся, що ви надсилаєте на адресу в мережі %s. Помилка може призвести до втрати коштів.
+ Переконайтеся, що адреса отримувача знаходиться **в мережі %s**, щоб уникнути втрати ваших коштів.
Надіслати до
Memo/ Тег призначення — це унікальний ідентифікатор для розрізнення транзакцій, надісланих тому самому одержувачу в тій самій мережі. Застереження: відсутність тегу може призвести до втрати коштів.
Мемо / Destination Tag — це код, що розділяє транзакції до спільного одержувача в криптовалютній мережі.
diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml
index 1faf5263e0..d35ab1c6cf 100644
--- a/core/res/src/main/res/values/strings.xml
+++ b/core/res/src/main/res/values/strings.xml
@@ -1012,7 +1012,6 @@
Check your network connection
Network fee info unreachable
You send
- From
From %s
Gas limit
This is the maximum amount of gas that will be spent to complete a transaction or contract. A gas limit prevents unexpected or unlimited charges when executing a transaction.
@@ -1054,9 +1053,7 @@
Recent
Recipient
Not a valid address
- Ensure the receiving wallet address is on **the %s network** to avoid losing your tokens
- send to %s
- Make sure you are sending to an address on the %s network. An error may result in the loss of funds.
+ Ensure the recipient\'s address is on **the %s network** to avoid losing your funds
Send to
A Memo/Destination Tag is a unique ID for differentiating transactions sent to the same recipient on the same network. Caution: Omitting a memo may lead to misplaced funds
Memo / Destination Tag is a code separating transactions to a shared recipient in a crypto network.
diff --git a/data/quotes/src/main/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcher.kt b/data/quotes/src/main/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcher.kt
index 618f75178d..4eac6b1927 100644
--- a/data/quotes/src/main/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcher.kt
+++ b/data/quotes/src/main/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcher.kt
@@ -8,6 +8,7 @@ import com.tangem.data.quotes.store.QuotesStatusesStore
import com.tangem.data.quotes.store.setSourceAsCache
import com.tangem.data.quotes.store.setSourceAsOnlyCache
import com.tangem.data.quotes.utils.QuotesUnsupportedCurrenciesIdAdapter
+import com.tangem.datasource.api.tangemTech.models.QuotesResponse
import com.tangem.datasource.appcurrency.AppCurrencyResponseStore
import com.tangem.domain.core.utils.catchOn
import com.tangem.domain.models.currency.CryptoCurrency
@@ -58,6 +59,7 @@ internal class DefaultMultiQuoteStatusFetcher @Inject constructor(
fields = setOf(Field.PRICE, Field.PRICE_CHANGE_24H),
)
.getOrElse { error("Cause: $it") }
+ .addSkippedIfHas(ids = replacementIdsResult.idsForRequest)
val updatedResponse = QuotesUnsupportedCurrenciesIdAdapter.getResponseWithUnsupportedCurrencies(
response = response,
@@ -84,4 +86,16 @@ internal class DefaultMultiQuoteStatusFetcher @Inject constructor(
return appCurrencyId
}
+
+ private fun QuotesResponse.addSkippedIfHas(ids: Set): QuotesResponse {
+ val skippedIds = ids.filterNot(quotes.keys::contains).ifEmpty {
+ return this
+ }
+
+ Timber.d("Some quotes are missing from the server response: $skippedIds")
+
+ val emptyQuotes = skippedIds.associateWith { QuotesResponse.Quote.EMPTY }
+
+ return copy(quotes = quotes + emptyQuotes)
+ }
}
\ No newline at end of file
diff --git a/data/quotes/src/test/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcherTest.kt b/data/quotes/src/test/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcherTest.kt
index d522ca5ba9..16d16ee6b0 100644
--- a/data/quotes/src/test/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcherTest.kt
+++ b/data/quotes/src/test/java/com/tangem/data/quotes/multi/DefaultMultiQuoteStatusFetcherTest.kt
@@ -215,6 +215,50 @@ internal class DefaultMultiQuoteStatusFetcherTest {
}
}
+ @Test
+ fun `fetch successfully if not all quotes are fetched`() = runTest {
+ // Arrange
+ val params = MultiQuoteStatusFetcher.Params(currenciesIds = currenciesIds, appCurrencyId = null)
+
+ coEvery { appCurrencyResponseStore.getSyncOrNull() } returns usdAppCurrency
+
+ val currenciesIds = setOf("BTC", "ETH")
+ val response = QuotesResponse(
+ quotes = mapOf(
+ "BTC" to MockQuoteResponseFactory.createSinglePrice(value = BigDecimal.ONE),
+ ),
+ )
+
+ coEvery {
+ quotesFetcher.fetch(fiatCurrencyId = "usd", currenciesIds = currenciesIds, fields = fields)
+ } returns response.right()
+
+ // Act
+ val actual = fetcher(params)
+
+ // Assert
+ val expected = Unit.right()
+ Truth.assertThat(actual).isEqualTo(expected)
+
+ val storedQuotes = QuotesResponse(
+ quotes = mapOf(
+ "BTC" to MockQuoteResponseFactory.createSinglePrice(value = BigDecimal.ONE),
+ "ETH" to QuotesResponse.Quote.EMPTY,
+ ),
+ )
+
+ coVerifyOrder {
+ quotesStore.setSourceAsCache(currenciesIds = params.currenciesIds)
+ appCurrencyResponseStore.getSyncOrNull()
+ quotesFetcher.fetch(fiatCurrencyId = "usd", currenciesIds = currenciesIds, fields = fields)
+ quotesStore.store(values = storedQuotes.quotes)
+ }
+
+ coVerify(inverse = true) {
+ quotesStore.setSourceAsOnlyCache(currenciesIds = any())
+ }
+ }
+
private companion object {
val currenciesIds = setOf(
diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt
index 522abbb6e0..3db26641c5 100644
--- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt
+++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/pair/DefaultWcPairUseCase.kt
@@ -51,7 +51,12 @@ internal class DefaultWcPairUseCase @AssistedInject constructor(
val pairResult = sdkDelegate.pair(uri)
.onLeft {
Timber.tag(WC_TAG).e(it, "Failed to call pair $pairRequest")
- analytics.send(WcAnalyticEvents.PairFailed(it.code))
+ analytics.send(
+ WcAnalyticEvents.PairFailed(
+ errorCode = it.code,
+ errorMessage = it.message,
+ ),
+ )
emit(WcPairState.Error(it))
}
.getOrNull() ?: return@flow
@@ -73,7 +78,12 @@ internal class DefaultWcPairUseCase @AssistedInject constructor(
val proposalState = buildProposalState(sdkSessionProposal, sdkVerifyContext)
.onLeft {
- analytics.send(WcAnalyticEvents.PairFailed(it.code))
+ analytics.send(
+ WcAnalyticEvents.PairFailed(
+ errorCode = it.code,
+ errorMessage = it.message,
+ ),
+ )
emit(WcPairState.Error(it))
}
.getOrNull() ?: return@flow
@@ -121,7 +131,12 @@ internal class DefaultWcPairUseCase @AssistedInject constructor(
)
newSession
}.onLeft {
- analytics.send(WcAnalyticEvents.DAppConnectionFailed(it.code))
+ analytics.send(
+ WcAnalyticEvents.DAppConnectionFailed(
+ errorCode = it.code,
+ errorMessage = it.message,
+ ),
+ )
sdkDelegate.rejectSession(sdkSessionProposal.proposerPublicKey)
Timber.tag(WC_TAG).e(it, "Failed to approve session ${sdkSessionProposal.name}")
}
@@ -188,8 +203,10 @@ internal class DefaultWcPairUseCase @AssistedInject constructor(
.values.map { it.available.plus(it.required) }.flatten().toSet()
analytics.send(
WcAnalyticEvents.PairRequested(
+ dAppName = sessionProposal.name,
+ dAppUrl = sessionProposal.url,
network = requestedNetworks,
- verificationInfo,
+ domainVerification = verificationInfo,
),
)
val appMetaData = WcAppMetaData(
diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt
index 31791fd91c..9745a0f84f 100644
--- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt
+++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/request/DefaultWcRequestUseCaseFactory.kt
@@ -50,6 +50,7 @@ internal class DefaultWcRequestUseCaseFactory @Inject constructor(
rawRequest = request,
errorCode = error.code().orEmpty(),
blockchain = blockchainName,
+ errorMessage = error.message,
)
analytics.send(event)
}
diff --git a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt
index 814e12788d..b2ea1d5c4a 100644
--- a/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt
+++ b/data/wallet-connect/src/main/kotlin/com/tangem/data/walletconnect/sign/WcSignUseCaseDelegate.kt
@@ -8,6 +8,7 @@ import com.tangem.data.walletconnect.sign.SignStateConverter.toSigning
import com.tangem.domain.walletconnect.WcAnalyticEvents
import com.tangem.domain.walletconnect.model.WcRequestError
import com.tangem.domain.walletconnect.model.WcRequestError.Companion.code
+import com.tangem.domain.walletconnect.model.WcRequestError.Companion.message
import com.tangem.domain.walletconnect.usecase.method.WcSignState
import com.tangem.domain.walletconnect.usecase.method.WcSignStep
import kotlinx.coroutines.Job
@@ -63,23 +64,16 @@ internal class WcSignUseCaseDelegate(
}
.onEach { state ->
val step = state.domainStep as? WcSignStep.Result ?: return@onEach
- val event = step.result.fold(
- ifLeft = { error ->
- WcAnalyticEvents.SignatureRequestFailed(
- rawRequest = context.rawSdkRequest,
- network = context.network,
- errorCode = error.code() ?: error::class.simpleName.orEmpty(),
- )
- },
- ifRight = {
- WcAnalyticEvents.SignatureRequestHandled(
- rawRequest = context.rawSdkRequest,
- network = context.network,
- securityStatus = context.session.securityStatus,
- )
- },
- )
- analytics.send(event)
+ step.result.leftOrNull()?.let { error ->
+ val errorMessage = error.message() ?: ""
+ val event = WcAnalyticEvents.SignatureRequestFailed(
+ rawRequest = context.rawSdkRequest,
+ network = context.network,
+ errorCode = error.code() ?: error::class.simpleName.orEmpty(),
+ errorMessage = errorMessage,
+ )
+ analytics.send(event)
+ }
}
var signJob: Job? = null
diff --git a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcRequestError.kt b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcRequestError.kt
index e0ad853f77..7376048de1 100644
--- a/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcRequestError.kt
+++ b/domain/wallet-connect/models/src/main/java/com/tangem/domain/walletconnect/model/WcRequestError.kt
@@ -49,8 +49,8 @@ sealed class WcRequestError {
is SendTransactionError.NetworkError -> message
is SendTransactionError.DataError -> message
is SendTransactionError.UnknownError -> ex?.message
- is SendTransactionError.TangemSdkError,
- SendTransactionError.DemoCardError,
+ is SendTransactionError.TangemSdkError -> "TangemSdkError code: ${this.code}"
+ SendTransactionError.DemoCardError -> "DemoCardError"
SendTransactionError.UserCancelledError,
is SendTransactionError.CreateAccountUnderfunded,
-> null
diff --git a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt
index 064f349412..b7228f2980 100644
--- a/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt
+++ b/domain/wallet-connect/src/main/kotlin/com/tangem/domain/walletconnect/WcAnalyticEvents.kt
@@ -37,11 +37,15 @@ sealed class WcAnalyticEvents(
)
class PairRequested(
+ dAppName: String,
+ dAppUrl: String,
network: Set,
domainVerification: CheckDAppResult,
) : WcAnalyticEvents(
event = "dApp Connection Requested",
params = mapOf(
+ AnalyticsParam.DAPP_NAME to dAppName,
+ AnalyticsParam.DAPP_URL to dAppUrl,
NETWORKS to network.joinToString(",") { it.name },
DOMAIN_VERIFICATION to domainVerification.toAnalyticVerificationStatus(),
),
@@ -49,10 +53,12 @@ sealed class WcAnalyticEvents(
class PairFailed(
errorCode: String,
+ errorMessage: String,
) : WcAnalyticEvents(
event = "Session Failed",
params = mapOf(
AnalyticsParam.Key.ERROR_CODE to errorCode,
+ AnalyticsParam.Key.ERROR_DESCRIPTION to errorMessage,
),
)
@@ -72,10 +78,12 @@ sealed class WcAnalyticEvents(
class DAppConnectionFailed(
errorCode: String,
+ errorMessage: String,
) : WcAnalyticEvents(
event = "dApp Connection Failed",
params = mapOf(
AnalyticsParam.Key.ERROR_CODE to errorCode,
+ AnalyticsParam.Key.ERROR_DESCRIPTION to errorMessage,
),
)
@@ -104,7 +112,7 @@ sealed class WcAnalyticEvents(
rawRequest: WcSdkSessionRequest,
network: Network,
emulationStatus: EmulationStatus?,
- securityStatus: CheckDAppResult?,
+ securityStatus: CheckDAppResult,
) : WcAnalyticEvents(
event = "Signature Request Received",
params = mapOf(
@@ -113,7 +121,7 @@ sealed class WcAnalyticEvents(
AnalyticsParam.Key.METHOD_NAME to rawRequest.request.method,
AnalyticsParam.Key.BLOCKCHAIN to network.name,
AnalyticsParam.Key.EMULATION_STATUS to emulationStatus?.status,
- AnalyticsParam.Key.TYPE to securityStatus?.toAnalyticVerificationStatus(),
+ AnalyticsParam.Key.TYPE to securityStatus.toAnalyticVerificationStatus(),
).mapNotNullValues { it.value },
) {
enum class EmulationStatus(val status: String) {
@@ -142,6 +150,7 @@ sealed class WcAnalyticEvents(
rawRequest: WcSdkSessionRequest,
network: Network,
errorCode: String,
+ errorMessage: String,
) : WcAnalyticEvents(
event = "Signature Request Failed",
params = mapOf(
@@ -150,6 +159,7 @@ sealed class WcAnalyticEvents(
AnalyticsParam.Key.METHOD_NAME to rawRequest.request.method,
AnalyticsParam.Key.BLOCKCHAIN to network.name,
AnalyticsParam.Key.ERROR_CODE to errorCode,
+ AnalyticsParam.Key.ERROR_DESCRIPTION to errorMessage,
),
)
@@ -157,6 +167,7 @@ sealed class WcAnalyticEvents(
rawRequest: WcSdkSessionRequest,
blockchain: String,
errorCode: String,
+ errorMessage: String,
) : WcAnalyticEvents(
event = "Signature Request Received with Failed",
params = mapOf(
@@ -165,6 +176,7 @@ sealed class WcAnalyticEvents(
AnalyticsParam.Key.METHOD_NAME to rawRequest.request.method,
AnalyticsParam.Key.BLOCKCHAIN to blockchain,
AnalyticsParam.Key.ERROR_CODE to errorCode,
+ AnalyticsParam.Key.ERROR_DESCRIPTION to errorMessage,
),
)
diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt
index 092e847893..313506dfb3 100644
--- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt
+++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/DefaultOnboardingNoteComponent.kt
@@ -9,7 +9,6 @@ import com.arkivanov.decompose.extensions.compose.stack.animation.stackAnimation
import com.arkivanov.decompose.extensions.compose.subscribeAsState
import com.arkivanov.decompose.router.stack.ChildStack
import com.arkivanov.decompose.router.stack.childStack
-import com.arkivanov.decompose.router.stack.push
import com.arkivanov.decompose.value.Value
import com.arkivanov.decompose.value.subscribe
import com.arkivanov.essenty.instancekeeper.getOrCreateSimple
@@ -59,7 +58,7 @@ internal class DefaultOnboardingNoteComponent @AssistedInject constructor(
key = "innerStack",
source = model.stackNavigation,
serializer = null,
- initialConfiguration = model.initialRoute,
+ initialConfiguration = OnboardingNoteRoute.CreateWallet,
handleBackButton = true,
childFactory = { configuration, factoryContext ->
createChild(
@@ -99,17 +98,10 @@ internal class DefaultOnboardingNoteComponent @AssistedInject constructor(
childParams = childParams,
onWalletCreated = { userWallet ->
model.onWalletCreated(userWallet)
- model.stackNavigation.push(OnboardingNoteRoute.Done)
+ params.onDone()
},
),
)
- OnboardingNoteRoute.Done -> onboardingDoneComponentFactory.create(
- context = factoryContext,
- params = OnboardingDoneComponent.Params(
- mode = OnboardingDoneComponent.Mode.WalletCreated,
- onDone = { params.onDone() },
- ),
- )
}
}
diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/model/OnboardingNoteModel.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/model/OnboardingNoteModel.kt
index ae47a8ab9d..ddfd182953 100644
--- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/model/OnboardingNoteModel.kt
+++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/model/OnboardingNoteModel.kt
@@ -35,10 +35,8 @@ internal class OnboardingNoteModel @Inject constructor(
@Suppress("UnusedPrivateMember")
private val params = paramsContainer.require()
- val initialRoute = initializeRoute()
-
private val _innerNavigationState =
- MutableStateFlow(OnboardingNoteInnerNavigationState(stackSize = initialRoute.stepNum()))
+ MutableStateFlow(OnboardingNoteInnerNavigationState(stackSize = OnboardingNoteRoute.CreateWallet.stepNum()))
val innerNavigationState = _innerNavigationState.asStateFlow()
@@ -79,15 +77,6 @@ internal class OnboardingNoteModel @Inject constructor(
}
}
- private fun initializeRoute(): OnboardingNoteRoute {
- val card = params.scanResponse.card
- return if (card.wallets.isEmpty()) {
- OnboardingNoteRoute.CreateWallet
- } else {
- OnboardingNoteRoute.Done
- }
- }
-
private fun loadArtwork() {
modelScope.launch {
val cardInfo = params.scanResponse.card
diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/OnboardingNoteRoute.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/OnboardingNoteRoute.kt
index cc8101af19..adfafad870 100644
--- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/OnboardingNoteRoute.kt
+++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/OnboardingNoteRoute.kt
@@ -7,9 +7,6 @@ internal sealed class OnboardingNoteRoute {
@Serializable
data object CreateWallet : OnboardingNoteRoute()
-
- @Serializable
- data object Done : OnboardingNoteRoute()
}
-internal const val ONBOARDING_NOTE_STEPS_COUNT = 2
\ No newline at end of file
+internal const val ONBOARDING_NOTE_STEPS_COUNT = 1
\ No newline at end of file
diff --git a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/Step.kt b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/Step.kt
index 83b41e6d8f..9d6c137388 100644
--- a/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/Step.kt
+++ b/features/onboarding-v2/impl/src/main/kotlin/com/tangem/features/onboarding/v2/note/impl/route/Step.kt
@@ -2,5 +2,4 @@ package com.tangem.features.onboarding.v2.note.impl.route
internal fun OnboardingNoteRoute.stepNum() = when (this) {
OnboardingNoteRoute.CreateWallet -> 1
- OnboardingNoteRoute.Done -> 2
}
\ No newline at end of file
diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/success/ui/SendConfirmSuccessContent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/success/ui/SendConfirmSuccessContent.kt
index 1d679a3e59..179b28552f 100644
--- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/success/ui/SendConfirmSuccessContent.kt
+++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/success/ui/SendConfirmSuccessContent.kt
@@ -2,10 +2,9 @@ package com.tangem.features.send.v2.send.success.ui
import androidx.compose.animation.*
import androidx.compose.foundation.background
-import androidx.compose.foundation.gestures.Orientation
-import androidx.compose.foundation.gestures.scrollable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -54,10 +53,7 @@ internal fun SendConfirmSuccessContent(sendUM: SendUM, destinationBlockComponent
Column(
modifier = Modifier
.padding(horizontal = TangemTheme.dimens.spacing16)
- .scrollable(
- state = rememberScrollState(),
- orientation = Orientation.Vertical,
- ),
+ .verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(12.dp),
) {
if (sendUM.confirmUM is ConfirmUM.Success) {
@@ -81,7 +77,7 @@ internal fun SendConfirmSuccessContent(sendUM: SendUM, destinationBlockComponent
)
destinationBlockComponent.Content(modifier = Modifier)
FeeBlock(feeSelectorUM = sendUM.feeSelectorUM)
- Spacer(Modifier.height(60.dp))
+ Spacer(Modifier.height(128.dp))
}
BottomFade(Modifier.align(Alignment.BottomCenter), TangemTheme.colors.background.tertiary)
NavigationButtonsBlockV2(
diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/ui/NFTSendSuccessContent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/ui/NFTSendSuccessContent.kt
index 10fa100bc9..5efe65012c 100644
--- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/ui/NFTSendSuccessContent.kt
+++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/sendnft/success/ui/NFTSendSuccessContent.kt
@@ -82,7 +82,7 @@ internal fun NFTSendSuccessContent(
nftDetailsBlockComponent.Content(modifier = Modifier)
destinationBlockComponent.Content(modifier = Modifier)
FeeBlock(feeSelectorUM = nftSendUM.feeSelectorUM)
- Spacer(Modifier.height(60.dp))
+ Spacer(Modifier.height(128.dp))
}
BottomFade(Modifier.align(Alignment.BottomCenter), TangemTheme.colors.background.tertiary)
NavigationButtonsBlockV2(
diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt
index 6f655f90bf..841793e7a6 100644
--- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt
+++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/SendDestinationContent.kt
@@ -121,11 +121,7 @@ private fun LazyListScope.addressItem(
) {
item(key = ADDRESS_FIELD_KEY) {
FooterContainer(
- footer = if (isRedesignEnabled) {
- buildHighlightedFooterText(networkName)
- } else {
- resourceReference(R.string.send_recipient_address_footer, wrappedList(networkName))
- },
+ footer = resourceReference(R.string.send_recipient_address_footer, wrappedList(networkName)),
) {
InputRowRecipient(
value = address.value,
@@ -150,33 +146,6 @@ private fun LazyListScope.addressItem(
}
}
-@Composable
-private fun buildHighlightedFooterText(networkName: String): TextReference {
- return annotatedReference(
- buildAnnotatedString {
- val styledText = stringResourceSafe(
- R.string.send_recipient_address_footer_highlighted_part,
- networkName,
- )
- val styledColor = TangemTheme.colors.text.secondary
- appendWithStyledPlaceholder(
- template = stringResourceSafe(
- R.string.send_recipient_address_footer_v2,
- networkName,
- ),
- placeholder = networkName,
- ) {
- withStyle(SpanStyle(fontWeight = FontWeight.Medium)) {
- appendColored(
- text = styledText,
- color = styledColor,
- )
- }
- }
- },
- )
-}
-
private fun LazyListScope.memoField(
memoField: DestinationTextFieldUM.RecipientMemo?,
onMemoChange: (String, Boolean) -> Unit,
diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/converter/SwapAmountFieldConverter.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/converter/SwapAmountFieldConverter.kt
index 832a1c2a7d..a2a62e6b95 100644
--- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/converter/SwapAmountFieldConverter.kt
+++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/converter/SwapAmountFieldConverter.kt
@@ -57,11 +57,7 @@ internal class SwapAmountFieldConverter(
title = if (isSingleWallet) {
resourceReference(R.string.send_from_title)
} else {
- combinedReference(
- resourceReference(R.string.send_from_wallet_android),
- stringReference(" "),
- stringReference(userWallet.name),
- )
+ resourceReference(R.string.send_from_wallet_name, wrappedList(userWallet.name))
},
value = "",
),
diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt
index 45659420c7..0acbedc911 100644
--- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt
+++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/choosetoken/fromSupported/model/SwapChooseTokenNetworkModel.kt
@@ -21,6 +21,7 @@ import com.tangem.features.swap.v2.impl.choosetoken.fromSupported.model.SwapChoo
import com.tangem.features.swap.v2.impl.choosetoken.fromSupported.model.transformers.SwapChooseContentStateTransformer
import com.tangem.features.swap.v2.impl.choosetoken.fromSupported.model.transformers.SwapChooseErrorStateTransformer
import com.tangem.features.swap.v2.impl.common.SwapUtils.SEND_WITH_SWAP_PROVIDER_TYPES
+import com.tangem.features.swap.v2.impl.sendviaswap.analytics.SendWithSwapAnalyticEvents
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.transformer.update
import kotlinx.coroutines.delay
@@ -97,6 +98,14 @@ internal class SwapChooseTokenNetworkModel @Inject constructor(
return@launch
}
delay(MINIMUM_LOADING_TIME)
+ if (pairs.fromGroup.available.isEmpty()) {
+ analyticsEventHandler.send(
+ SendWithSwapAnalyticEvents.NoticeCanNotSwapToken(
+ fromToken = params.initialCurrency,
+ toTokenSymbol = params.token.symbol,
+ ),
+ )
+ }
uiState.update(
SwapChooseContentStateTransformer(
pairs = pairs,
diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/analytics/SendWithSwapAnalyticEvents.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/analytics/SendWithSwapAnalyticEvents.kt
index 6daa91c3d8..ab38425164 100644
--- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/analytics/SendWithSwapAnalyticEvents.kt
+++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/analytics/SendWithSwapAnalyticEvents.kt
@@ -32,4 +32,16 @@ internal sealed class SendWithSwapAnalyticEvents(
RECEIVE_BLOCKCHAIN to toToken.network.name,
),
)
+
+ data class NoticeCanNotSwapToken(
+ val fromToken: CryptoCurrency,
+ val toTokenSymbol: String,
+ ) : SendWithSwapAnalyticEvents(
+ event = "Notice - Can`t Swap This Token",
+ params = mapOf(
+ SEND_TOKEN to fromToken.symbol,
+ RECEIVE_TOKEN to toTokenSymbol,
+ SEND_BLOCKCHAIN to fromToken.network.name,
+ ),
+ )
}
\ No newline at end of file
diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/success/ui/SendWithSwapSuccessContent.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/success/ui/SendWithSwapSuccessContent.kt
index 252e841b90..a3dc753213 100644
--- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/success/ui/SendWithSwapSuccessContent.kt
+++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/sendviaswap/success/ui/SendWithSwapSuccessContent.kt
@@ -101,7 +101,7 @@ internal fun SendWithSwapSuccessContent(sendWithSwapUM: SendWithSwapUM) {
)
DestinationBlock(destinationUM.addressTextField)
FeeBlock(feeSelectorUM = feeSelectorUM)
- Spacer(Modifier.height(60.dp))
+ Spacer(Modifier.height(128.dp))
}
BottomFade(Modifier.align(Alignment.BottomCenter), TangemTheme.colors.background.tertiary)
NavigationButtonsBlockV2(
diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt
index dbc00d0659..3e626329c4 100644
--- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt
+++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/model/TokenDetailsModel.kt
@@ -55,13 +55,9 @@ import com.tangem.domain.tokens.*
import com.tangem.domain.tokens.legacy.TradeCryptoAction
import com.tangem.domain.tokens.model.ScenarioUnavailabilityReason
import com.tangem.domain.tokens.model.TokenActionsState
-import com.tangem.domain.tokens.model.analytics.TokenReceiveAnalyticsEvent
-import com.tangem.domain.tokens.model.analytics.TokenReceiveCopyActionSource
-import com.tangem.domain.tokens.model.analytics.TokenReceiveNewAnalyticsEvent
-import com.tangem.domain.tokens.model.analytics.TokenScreenAnalyticsEvent
+import com.tangem.domain.tokens.model.analytics.*
import com.tangem.domain.tokens.model.analytics.TokenScreenAnalyticsEvent.Companion.toReasonAnalyticsText
import com.tangem.domain.tokens.model.analytics.TokenScreenAnalyticsEvent.DetailsScreenOpened.TokenBalance
-import com.tangem.domain.tokens.model.analytics.TokenSwapPromoAnalyticsEvent
import com.tangem.domain.transaction.error.AssociateAssetError
import com.tangem.domain.transaction.error.IncompleteTransactionError
import com.tangem.domain.transaction.error.OpenTrustlineError
@@ -1098,9 +1094,8 @@ internal class TokenDetailsModel @Inject constructor(
return
}
}
- is CryptoCurrencyStatus.NoAccount,
- is CryptoCurrencyStatus.MissedDerivation,
- -> TokenBalance.NoAddress
+ is CryptoCurrencyStatus.NoAccount -> TokenBalance.Empty
+ is CryptoCurrencyStatus.MissedDerivation -> TokenBalance.NoAddress
is CryptoCurrencyStatus.NoAmount,
is CryptoCurrencyStatus.Unreachable,
diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt
index e15ce42f95..af17a13db3 100644
--- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt
+++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcAddNetworkModel.kt
@@ -3,6 +3,7 @@ package com.tangem.features.walletconnect.transaction.model
import androidx.compose.runtime.Stable
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.pushNew
+import com.domain.blockaid.models.dapp.CheckDAppResult
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
@@ -132,7 +133,7 @@ internal class WcAddNetworkModel @Inject constructor(
rawRequest = useCase.rawSdkRequest,
network = useCase.network,
emulationStatus = null,
- securityStatus = null,
+ securityStatus = CheckDAppResult.FAILED_TO_VERIFY,
),
)
diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSendTransactionModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSendTransactionModel.kt
index ebda2cb59a..8b5afff900 100644
--- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSendTransactionModel.kt
+++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSendTransactionModel.kt
@@ -5,6 +5,7 @@ import arrow.core.Either
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.router.stack.pushNew
+import com.domain.blockaid.models.dapp.CheckDAppResult
import com.domain.blockaid.models.transaction.SimulationResult
import com.domain.blockaid.models.transaction.ValidationResult
import com.tangem.blockchain.common.TransactionData
@@ -94,6 +95,8 @@ internal class WcSendTransactionModel @Inject constructor(
private var sign: () -> Unit = {}
private val feeReloadState = MutableStateFlow(false)
private val signatureReceivedAnalyticsSendState = MutableStateFlow(false)
+ private val securityStatusState =
+ MutableStateFlow>(Lce.Loading(partialContent = null))
init {
@Suppress("UnusedPrivateMember")
@@ -130,6 +133,7 @@ internal class WcSendTransactionModel @Inject constructor(
.collectLatest { (signState, securityCheck) ->
if (signingIsDone(signState, useCase)) return@collectLatest
+ securityStatusState.value = securityCheck
sendSignatureReceivedAnalytics(useCase, securityCheck)
this@WcSendTransactionModel.signState = signState
@@ -372,6 +376,12 @@ internal class WcSendTransactionModel @Inject constructor(
false
}
is Either.Right -> {
+ val event = WcAnalyticEvents.SignatureRequestHandled(
+ rawRequest = useCase.rawSdkRequest,
+ network = useCase.network,
+ securityStatus = securityStatusState.value.toCheckDAppResult(),
+ )
+ analytics.send(event)
showSuccessSignMessage()
router.pop()
true
@@ -408,10 +418,22 @@ internal class WcSendTransactionModel @Inject constructor(
rawRequest = useCase.rawSdkRequest,
network = useCase.network,
emulationStatus = emulationStatus,
- securityStatus = useCase.session.securityStatus,
+ securityStatus = securityCheck.toCheckDAppResult(),
),
)
signatureReceivedAnalyticsSendState.value = true
}
+
+ private fun Lce.toCheckDAppResult(): CheckDAppResult {
+ return when (this) {
+ is Lce.Content -> when (this.content.result.validation) {
+ ValidationResult.SAFE -> CheckDAppResult.SAFE
+ ValidationResult.UNSAFE, ValidationResult.WARNING -> CheckDAppResult.UNSAFE
+ ValidationResult.FAILED_TO_VALIDATE -> CheckDAppResult.FAILED_TO_VERIFY
+ }
+ is Lce.Error -> CheckDAppResult.FAILED_TO_VERIFY
+ is Lce.Loading -> CheckDAppResult.FAILED_TO_VERIFY
+ }
+ }
}
\ No newline at end of file
diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt
index 28b294640d..3d41876dbb 100644
--- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt
+++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/transaction/model/WcSignTransactionModel.kt
@@ -4,6 +4,7 @@ import androidx.compose.runtime.Stable
import com.arkivanov.decompose.router.stack.StackNavigation
import com.arkivanov.decompose.router.stack.pop
import com.arkivanov.decompose.router.stack.pushNew
+import com.domain.blockaid.models.dapp.CheckDAppResult
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
@@ -133,6 +134,12 @@ internal class WcSignTransactionModel @Inject constructor(
private fun signingIsDone(signState: WcSignState<*>): Boolean {
(signState.domainStep as? WcSignStep.Result)?.result?.let { result ->
if (result.isRight()) {
+ val event = WcAnalyticEvents.SignatureRequestHandled(
+ rawRequest = useCase.rawSdkRequest,
+ network = useCase.network,
+ securityStatus = CheckDAppResult.FAILED_TO_VERIFY,
+ )
+ analytics.send(event)
showSuccessSignMessage()
}
router.pop()
@@ -158,7 +165,7 @@ internal class WcSignTransactionModel @Inject constructor(
rawRequest = useCase.rawSdkRequest,
network = useCase.network,
emulationStatus = null,
- securityStatus = null,
+ securityStatus = CheckDAppResult.FAILED_TO_VERIFY,
),
)