diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt
index 0e9092a1fa..9c0f20075c 100644
--- a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt
+++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt
@@ -43,7 +43,10 @@ class CurrencyExchangeManager(
override suspend fun update() {
_initializationStatus.value = lceLoading()
- buyService.update()
+ if (!store.inject(DaggerGraphState::onrampFeatureToggles).isFeatureEnabled) {
+ buyService.update()
+ }
+
sellService.update()
_initializationStatus.value = lceContent()
diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml
index 1055b86c5d..3cc2368a82 100644
--- a/core/res/src/main/res/values-de/strings.xml
+++ b/core/res/src/main/res/values-de/strings.xml
@@ -258,7 +258,7 @@
Bereitgestellt von
Status
Tangem bietet Token-Swaps über Drittanbieter gemäß den jeweiligen Bedingungen des jeweiligen Anbieters an.
- Anbieter wählen
+ Anbieter
Es ist ein Fehler aufgetreten. Code: %s
Fehler %1$s. Der ausgewählte Anbieter kann die angegebene Transaktion nicht verarbeiten. Bitte runde den Wert auf %2$s auf oder änder diesen.
Der gewählte Anbieter ist im Moment nicht verfügbar. Bitte versuche es später noch einmal. (Code: %s)
@@ -584,6 +584,7 @@
Suche nach Land
Nicht verfügbar
Suche nach Währung
+ Durch die Nutzung der Onramp-Funktionalität stimmst Du den %1$s und %2$s des Anbieters zu.
Der Kaufbetrag sollte nicht höher sein als %s
Der zu kaufende Betrag muss mindestens %s betragen
Keine verfügbaren Anbieter für diese Währung
@@ -665,7 +666,7 @@
Scanne die Karte oder Ring, um ihre Einstellungen zu ändern. Die Änderungen wirken sich nur auf die von dir gescannte Karte oder Ring aus und haben keine Auswirkungen auf andere mit deiner Wallet verknüpften Geräte.
Halte deine Karte oder Ring bereit!
Sicherheitswarnung
- Dein Konto verfügt nicht über genügend Guthaben, um diese Kryptowährung zu verkaufen. Bitte zahle den gewünschten Vermögenswert ein, um fortzufahren.
+ Dein Konto verfügt nicht über ausreichend Guthaben, um Kryptowährungen zu verkaufen. Bitte zahle den gewünschten Vermögenswert ein, um fortzufahren.
Unzureichendes Guthaben
Der Verkauf von Kryptowährung ist in Deiner Region derzeit nicht möglich. Wir arbeiten aktiv daran, Ihnen diese Option bald anzubieten – bleib dran!
Regionale Einschränkung
diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml
index 8ecdd2c7e7..683983950c 100644
--- a/core/res/src/main/res/values-es/strings.xml
+++ b/core/res/src/main/res/values-es/strings.xml
@@ -3,6 +3,9 @@
¿No encuentra el token en su billetera? Consulte los mercados para encontrarlo y añadirlo a la compra
¿No encuentra el token en su billetera? Consulte los mercados para encontrarlo y añadirlo a la venta
Vender
+ Esto puede tardar unos segundos. Inténtelo de nuevo más tarde.
+ Los datos aún no se han cargado.
+ La acción no está disponible actualmente. Inténtalo de nuevo más tarde o actualiza los datos deslizando el dedo hacia abajo en la pantalla.
Elige el token
¿No encuentras el token en tu billetera? Consulte los mercados para encontrarlo y agregarlo al intercambio
No hay tokens disponibles para intercambiar con el token seleccionado. Por favor elige otro.
@@ -308,6 +311,7 @@
Por favor, díganos qué tarjeta tiene
Hola equipo de soporte,
Por favor, cuéntenos más sobre tu problema. Cada pequeño detalle puede ayudar.
+ Billetera previamente activada
Mis recomendaciones
No se puede escanear una tarjeta
Comentarios
@@ -571,6 +575,7 @@
Buscar por país
Indisponible
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
La cantidad a comprar debe ser como mínimo %s
No hay proveedores disponibles para esta moneda
@@ -650,6 +655,7 @@
Escanee su tarjeta
Escanee la tarjeta para cambiar sus ajustes. Los cambios afectarán solo a la tarjeta que has escaneado y no afectarán a otras tarjetas vinculadas a su billetera.
¡Prepare su tarjeta!
+ Alerta de seguridad
No tiene fondos suficientes en su saldo para vender esta criptomoneda. Deposite el activo deseado para continuar.
Saldo insuficiente
La venta de criptomonedas no está disponible en su región en este momento. Estamos trabajando activamente para ofrecerle esta opción pronto. ¡Manténgase conectado!
@@ -694,6 +700,7 @@
Los aranceles aduaneros son altos
Debido a las peculiaridades de la red %1$s, la tarifa por transferir el saldo completo es más alta. Para reducir la comisión, puedes dejar %2$s.
La tarifa es más alta
+ Su saldo no puede ser inferior al monto del alquiler. Mantenga al menos %1$s en su cuenta o retire todos los fondos.
La comisión incluida excede el monto de la transferencia, lo que resulta en un valor negativo
Cantidad no válida
La cantidad mínima de envío es %1$s. Asegúrate de que el saldo restante después del envío no sea menor que %2$s.
@@ -866,6 +873,7 @@
Usted recibe
Elige token
no disponible
+ Esta es mi billetera
Saldos ocultos
Saldos mostrados
Cancelar
@@ -935,6 +943,7 @@
Desbloquear todo con %s
La blockchain está Inaccesible. Inténtelo más tarde
Escanee la tarjeta o el anillo
+ Esta billetera ya ha sido activada anteriormente.\nSi no fue usted quien lo hizo, comuníquese con el servicio de asistencia.\nTangem nunca vende billeteras junto con el código de acceso generado previamente.
Solicitud para firmar un mensaje.\n\n%s
Dapp %1$s, solicitando\nfirmar transacción BNB.\n\n%2$s
Orden de intercambio por %1$s\nPrecio: %2$s\nCantidad a recibir: %3$s\nCantidad a pagar: %4$s
diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml
index 4e3fe4704b..55d428f3d3 100644
--- a/core/res/src/main/res/values-fr/strings.xml
+++ b/core/res/src/main/res/values-fr/strings.xml
@@ -3,10 +3,18 @@
Jeton non trouvé dans votre portefeuille ? Consultez les marchés pour le trouver et l\'ajouter à l\'achat
Jeton non trouvé dans votre portefeuille ? Consultez les marchés pour le trouver et l\'ajouter à la vente
Vendre
+ Cela peut prendre quelques secondes. Veuillez réessayer plus tard.
+ Les données n\'ont pas encore été chargées.
+ Cette action n\'est pas disponible actuellement. Veuillez réessayer plus tard ou actualiser les données en faisant glisser votre doigt vers le bas sur l\'écran.
+ Le bouton n\'est pas disponible
Choisissez le jeton
Jeton non trouvé dans votre portefeuille ? Consultez les marchés pour le trouver et l\'ajouter à l\'échange
Il n\'y a pas de token disponible pour échanger avec le token sélectionné. Veuillez en choisir un autre.
Aucune paire disponible
+ Pour utiliser la fonction d\'échange, votre portefeuille doit contenir au moins 2 jetons.
+ Ajouter des jetons
+ Vous n\'avez qu\'un seul token ajouté à votre portefeuille. Pour utiliser la fonction d\'échange, vous devez ajouter au moins 2 tokens.
+ Ajouter des jetons
Sélectionnez le jeton que vous souhaitez recevoir
Sélectionnez le jeton que vous souhaitez échanger
Choisissez le réseau
@@ -250,7 +258,7 @@
Fourni par
Statut
Tangem propose des échanges de jetons via des fournisseurs tiers selon les conditions de chaque fournisseur
- Choisissez un fournisseur
+ Fournisseur
Une erreur s\'est produite. Code : %s
Erreur %1$s. Le fournisseur sélectionné ne peut pas traiter la transaction spécifiée. Veuillez arrondir la valeur à %2$s ou la modifier
Le fournisseur sélectionné n\'est pas disponible pour le moment. Veuillez réessayer plus tard. (Code : %s)
@@ -263,6 +271,9 @@
Le montant a été remboursé en %1$s (réseau %2$s)
Visitez le site Web du fournisseur pour la vérification
Vérification KYC requise par le fournisseur
+ Acheté
+ Achat
+ En cours d\'achat
Annulé
Confirmé
En attente de confirmation
@@ -308,6 +319,7 @@
Veuillez nous dire quelle carte vous avez
Chère équipe de support,
Veuillez nous en dire plus sur votre problème. Chaque petit détail peut nous aider.
+ Portefeuille précédemment activé
Mes suggestions
Impossible de scanner une carte
Commentaires
@@ -571,6 +583,7 @@
Recherche par pays
Indisponible
Recherche par devise
+ En utilisant la fonctionnalité onramp, vous acceptez %1$s et %2$s du fournisseur
Le montant de l\'achat ne doit pas dépasser %s
Le montant à acheter doit être au moins %s
Aucun fournisseur disponible pour cette devise
@@ -599,6 +612,7 @@
%1$s (%2$s) sur le réseau %3$s
L’envoi de toute autre devise entraînera sa perte irréversible.
Envoyez uniquement %s à cette adresse. L\'envoi de toute autre devise entraînera sa perte irréversible.
+ Envoyez uniquement %1$s sur le réseau %2$s
Transférez des fonds depuis un autre portefeuille ou une autre bourse
Participer
Échec du chargement des informations sur le programme de parrainage. Veuillez réessayer plus tard.
@@ -650,6 +664,7 @@
Scannez votre carte
Scannez la carte pour modifier ses paramètres. Les modifications n\'affecteront que la carte que vous avez scannée et n\'affecteront pas les autres cartes liées à votre portefeuille.
Préparez votre carte !
+ Alerte de sécurité
Vous n\'avez pas assez de fonds sur votre solde pour vendre cette cryptomonnaie. Veuillez déposer l\'actif souhaité pour continuer.
Solde insuffisant
La vente de cryptomonnaies n\'est pas disponible dans votre région pour le moment. Nous travaillons activement pour vous proposer cette option prochainement. Restez connecté !
@@ -694,6 +709,7 @@
Les frais de douane sont élevés
En raison des particularités du réseau %1$s, les frais de transfert de la totalité du solde sont plus élevés. Pour réduire la commission, vous pouvez en laisser %2$s.
Les frais sont plus élevés
+ Le solde de votre compte ne peut pas être inférieur au montant du loyer. Veuillez conserver au moins %1$s sur votre compte ou retirer tous les fonds.
La commission incluse dépasse le montant du transfert, ce qui entraîne une valeur négative
Montant invalide
Le montant minimum d\'envoi est de %1$s. Veuillez vous assurer que le solde restant après l\'envoi ne sera pas inférieur à %2$s.
@@ -866,6 +882,7 @@
Vous recevez
Choisir le jeton
non disponible
+ C\'est mon portefeuille
Soldes masqués
Soldes affichés
Annuler
@@ -935,6 +952,7 @@
Tout déverrouiller avec %s
La blockchain n\'est pas accessible. Réessayez plus tard
Scanner la carte ou la bague
+ Ce portefeuille a déjà été activé auparavant.\nSi cela n\'a pas été fait par vous, veuillez contacter le support.\nTangem ne vend jamais de portefeuilles avec le code d\'accès pré-généré.
Demande de signature d\'un message.\n\n%s
Dapp %1$s, demandant de\nsigner la transaction BNB.\n\n%2$s
Ordre de trade pour %1$s\nPrix : %2$s\nMontant à recevoir : %3$s\nMontant à payer : %4$s
diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml
index 7b931f0406..bd018bcf92 100644
--- a/core/res/src/main/res/values-ja/strings.xml
+++ b/core/res/src/main/res/values-ja/strings.xml
@@ -255,7 +255,7 @@
提供元
ステータス
Tangemは、各プロバイダーの条件に従って、サードパーティプロバイダーを介してトークンスワップを提供します。
- プロバイダーを選択
+ プロバイダー
エラーが発生しました。コード: %s
エラー%1$s 。選択したプロバイダーは指定された取引を処理できません。値を%2$sに切り上げるか、変更してください。
選択したプロバイダーは現在利用できません。しばらくしてからもう一度お試しください。(コード: %s )
@@ -576,6 +576,7 @@
国で検索
利用不可
通貨で検索
+ オンランプ機能を使用することにより、プロバイダの%1$sおよび%2$sに同意するものとします
買付金額は%s以下にしてください
買付金額は少なくとも%sである必要があります
この通貨で利用可能なプロバイダーはありません
diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml
index 5424eee393..92629c43f6 100644
--- a/core/res/src/main/res/values-ru/strings.xml
+++ b/core/res/src/main/res/values-ru/strings.xml
@@ -5,7 +5,7 @@
Продать
Это может занять несколько секунд. Пожалуйста, попробуйте позже.
Данные ещё не загрузились
- Действие в данный момент недоступно, пожалуйста попробуйте позже или обновить данные, сделав свайп экрана вниз.
+ Это действие в данный момент недоступно, пожалуйста попробуйте позже или обновите данные, сделав свайп экрана вниз.
Кнопка недоступна
Выберите токен
Не нашли свой токен? Перейдите в раздел «Рынок» на главной странице и добавьте его в свой портфель для обмена.
@@ -264,7 +264,7 @@
Предоставлено
Статус
Tangem предоставляет доступ к обмену через сторонних поставщиков в соответствии с их правилами
- Выберите провайдера
+ Провайдер
Произошла ошибка. Код: %s
Ошибка %1$s. Выбранный провайдер не может обработать указанную транзакцию. Округлите значение до %2$s или измените его.
Выбранный провайдер недоступен для обмена. Попробуйте позже. (Код: %s)
@@ -325,6 +325,7 @@
Скажите, пожалуйста, какая у вас карта или кольцо?
Привет, команда поддержки,
Пожалуйста, расскажите нам больше о вашей проблеме. Каждая маленькая деталь может помочь.
+ Ранее активированный кошелек
Мои предложения
Не могу отсканировать карту/кольцо
Обращение в поддержку
@@ -597,16 +598,17 @@
Поиск по стране
Недоступно
Поиск по валюте
+ Пользуясь сервисом покупки, вы соглашаетесь с %1$s и %2$s
Сумма покупки не может быть больше, чем %s
Сумма покупки должна составлять минимум %s
Нет доступных провайдеров для выбранной валюты
Оплата с
Доступно до %s
- Доступно с %s
+ Доступно от %s
Вы сможете продолжить транзакцию через сервис стороннего провайдера, %s
Переход к %s...
Наши сервисы недоступны в данной стране
- Ваше местоположение определено как
+ Ваше место жительства определено как
Страна проживания
Пожалуйста, укажите правильную страну, чтобы обеспечить точность доступных способов оплаты и услуг.
Настройки
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 80f21fbd9b..7a2ba44136 100644
--- a/core/res/src/main/res/values-uk-rUA/strings.xml
+++ b/core/res/src/main/res/values-uk-rUA/strings.xml
@@ -2,10 +2,20 @@
Токен не знайдено у вашому портфелі? Перевірте Ринки, щоб знайти та додати його для покупки
Токен не знайдено у вашому портфелі? Перевірте Ринки, щоб знайти та додати його для продажу
+ Продати
+ Це може зайняти кілька секунд. Будь ласка, спробуйте пізніше.
+ Дані ще не завантажилися
+ Наразі ця дія недоступна, будь ласка спробуйте пізніше або оновіть дані, зробивши свайп екрану до низу.
+ Кнопка недоступна
Оберіть токен
Токен не знайдено у вашому портфелі? Перевірте ринки, щоб знайти та додати його для обміну
Немає доступних токенів для обміну з обраним токеном. Будь ласка, оберіть інший.
Немає вільної пари
+ Щоб скористатися функцією обміну, у вашому портфелі має бути щонайменше 2 токени.
+ У вас додано лише 1 токен. Щоб скористатися функцією обміну, потрібно додати мінімум 2 токени.
+ Додайте токени
+ Оберіть токен для отримання
+ Оберіть токен для обміну
Оберіть мережу
Додати токен
Токени
@@ -253,8 +263,9 @@
Послугу надає
Статус
Tangem пропонує обмін токенів через сторонніх провайдерів відповідно до умов кожного провайдера
- Оберіть провайдера
+ Провайдер
Виникла помилка. Код: %s
+ Помилка %1$s. Обраний провайдер не може обробити зазначену транзакцію. Округліть значення до %2$s або змініть його.
Наразі обраний провайдер недоступний для обміну. Спробуй пізніше. (Код: %s)
Наразі обмін неможливий. Спробуй пізніше. (Код: %s)
Курс обміну
@@ -265,6 +276,9 @@
Сума була повернута в %1$s (%2$s мережі)
Відвідайте сайт провайдера для перевірки
Провайдер вимагає проходження KYC верифікації
+ Куплено
+ Купівля
+ Купівля...
Скасовано
Підтверджено
Підтвердження
@@ -579,6 +593,8 @@
Відновлення коду доступу
Ідентичні картки
Код доступу
+ Доступно з %s
+ Tangem забезпечує доступ к покупці через сторонніх провайдерів згідно з їхніми умовами
Пошук за країною
Недоступно
Пошук по валюті
@@ -592,8 +608,10 @@
Перенаправлення на %s...
Наші сервіси недоступні в цій країні
Ваше місце проживання визначено як
+ Країна проживання
Будь ласка, виберіть правильну країну, щоб забезпечити точні способи оплати та послуги.
Параметри
+ Ви можете закрити цей екран і перевірити статус транзакції на екрані деталей токена.
Ви можете перевірити статус транзакції на сторінці токена
Через
Групами
@@ -604,8 +622,11 @@
Налаштування
Ви не надали доступ до своєї камери
Доступ до камери заборонено
+ Memo не вимагається
%1$s (%2$s) у мережі %3$s
+ Використання іншої мережі може призвести до втрати коштів.
Надсилайте лише %s на цю адресу. Надсилання будь-якої іншої валюти призведе до її незворотної втрати.
+ Надсилайте лише %1$s у мережі %2$s
Переказуйте кошти з будь-якого гаманця або біржі
Взяти участь
Не вдалося завантажити інформацію по реферальній програмі. Будь ласка, спробуйте пізніше.
@@ -661,6 +682,11 @@
Сканувати
Відскануйте картку або кільце, щоб змінити її налаштування. Зміни торкнуться лише тої картки або кільця, які ви відсканували, і не вплинуть на інші пристрої, прив\'язані до вашого гаманця.
Підготуйте свій Tangem!
+ Оповіщення безпеки
+ На вашому балансі недостатньо коштів для продажу криптовалюти. Будь ласка, внесіть бажаний актив, щоб продовжити.
+ Недостатній баланс
+ Продаж криптовалюти у вашому регіоні тимчасово недоступний. Ми активно працюємо над тим, щоб додати цю можливість. Слідкуйте за нашими новинами!
+ Регіональні обмеження
Вже включено до введеної адреси
Сума комісії у %s разів перевищує рекомендовану. Переконайтеся, що вказана комісія вірна.
Ви вказали комісію нижче рекомендованої, це може спричинити затримку вашої транзакції. Продовжити?
@@ -701,6 +727,7 @@
Встановлена комісія завелика
Через особливості мережі %1$s комісія за переказ всього балансу вища. Щоб зменшити комісію, Ви можете залишити %2$s.
Підвищена комісія
+ Баланс вашого рахунку не може бути меншим за орендну плату. Будь ласка, залиште на рахунку не менше %1$s або виведіть всі кошти.
Включена комісія перевищує суму переказу, що призводить до від’ємного значення
Недопустима сума
Мінімальна сума переказу - %1$s. Будь ласка, переконайтеся, що залишок після переказу не буде меншим ніж %2$s.
@@ -873,6 +900,7 @@
Ви отримаєте
Оберіть токен
недоступно
+ Це мій гаманець
Баланси приховано
Баланси показано
Скасувати
@@ -902,6 +930,7 @@
Недоступно для покупки
Недоступно для продажу
Недоступно для обміну з %s
+ Недоступно для обміну
контракт: %s
У вас ще немає транзакцій
Не вдалося завантажити історію транзакцій.\nНатисніть кнопку нижче, щоб оновити інформацію
@@ -941,6 +970,7 @@
Розблокувати все з %s
Блокчейн недоступний. Спробуйте пізніше
Відскануйте картку або кільце
+ Цей гаманець вже був активований раніше.\nЯкщо це було зроблено не вами, зверніться до служби підтримки.\nTangem ніколи не продає гаманці разом з попередньо згенерованим кодом доступу.
Запит на підпис повідомлення.\n\n%s
Dapp %1$s, запит на\nпідпис транзакції BNB.\n\n%2$s
Торговий ордер на %1$s\nЦіна: %2$s\nСума до отримання: %3$s\nСума до сплати: %4$s
diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml
index ffccaa511b..12d15e5487 100644
--- a/core/res/src/main/res/values/strings.xml
+++ b/core/res/src/main/res/values/strings.xml
@@ -258,7 +258,7 @@
Provided by
Status
Tangem offers token swaps via 3rd-party providers according to each provider\'s terms
- Choose provider
+ Provider
An error occurred. Code: %s
Error %1$s. The selected provider cannot process the specified transaction. Please round the value up to %2$s or change it
Selected provider is unavailable at the moment. Please try again later. (Code: %s)
diff --git a/features/swap/presentation/src/main/res/drawable/ic_lightning_16.xml b/core/ui/src/main/res/drawable/ic_lightning_16.xml
similarity index 100%
rename from features/swap/presentation/src/main/res/drawable/ic_lightning_16.xml
rename to core/ui/src/main/res/drawable/ic_lightning_16.xml
diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt
index d8222cc618..ca78dbeca6 100644
--- a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt
+++ b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt
@@ -385,6 +385,9 @@ internal class DefaultOnrampRepository(
},
)
}
+
+ if (onrampProviders.isEmpty()) throw OnrampPairsError.PairsNotFound
+
OnrampPair(onrampProviders)
}
pairsStore.store(PAIRS_KEY, onrampPairs)
diff --git a/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt b/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt
index be7dc4d12e..f2f8cf8090 100644
--- a/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt
+++ b/data/staking/src/main/java/com/tangem/data/staking/DefaultStakingRepository.kt
@@ -10,7 +10,7 @@ import com.tangem.blockchain.common.TransactionStatus
import com.tangem.blockchain.common.transaction.Fee
import com.tangem.blockchainsdk.utils.fromNetworkId
import com.tangem.blockchainsdk.utils.toCoinId
-import com.tangem.blockchainsdk.utils.toMigratedCointId
+import com.tangem.blockchainsdk.utils.toMigratedCoinId
import com.tangem.common.extensions.hexToBytes
import com.tangem.common.extensions.toCompressedPublicKey
import com.tangem.data.common.api.safeApiCall
@@ -555,7 +555,7 @@ internal class DefaultStakingRepository(
override fun getStakingApproval(cryptoCurrency: CryptoCurrency): StakingApproval {
return when (getIntegrationKey(cryptoCurrency.id)) {
Blockchain.Ethereum.id + Blockchain.Polygon.toCoinId(),
- Blockchain.Ethereum.id + Blockchain.Polygon.toMigratedCointId(),
+ Blockchain.Ethereum.id + Blockchain.Polygon.toMigratedCoinId(),
-> StakingApproval.Needed(ETHEREUM_POLYGON_APPROVE_SPENDER)
else -> StakingApproval.Empty
}
@@ -644,7 +644,7 @@ internal class DefaultStakingRepository(
Blockchain.Solana.run { id + toCoinId() } to SOLANA_INTEGRATION_ID,
Blockchain.Cosmos.run { id + toCoinId() } to COSMOS_INTEGRATION_ID,
Blockchain.Tron.run { id + toCoinId() } to TRON_INTEGRATION_ID,
- Blockchain.Ethereum.id + Blockchain.Polygon.toMigratedCointId() to ETHEREUM_POLYGON_INTEGRATION_ID,
+ Blockchain.Ethereum.id + Blockchain.Polygon.toMigratedCoinId() to ETHEREUM_POLYGON_INTEGRATION_ID,
// Blockchain.Ethereum.id + Blockchain.Polygon.toCoinId() to ETHEREUM_POLYGON_INTEGRATION_ID,
Blockchain.BSC.run { id + toCoinId() } to BINANCE_INTEGRATION_ID,
// Blockchain.Polkadot.run { id + toCoinId() } to POLKADOT_INTEGRATION_ID,
diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt
index a5d7aa511a..ea747277bc 100644
--- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt
+++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt
@@ -2,10 +2,7 @@ package com.tangem.data.tokens.repository
import com.tangem.blockchain.common.Blockchain
import com.tangem.blockchainsdk.compatibility.getL2CompatibilityTokenComparison
-import com.tangem.blockchainsdk.utils.ExcludedBlockchains
-import com.tangem.blockchainsdk.utils.fromNetworkId
-import com.tangem.blockchainsdk.utils.toCoinId
-import com.tangem.blockchainsdk.utils.toNetworkId
+import com.tangem.blockchainsdk.utils.*
import com.tangem.data.common.api.safeApiCall
import com.tangem.data.common.cache.CacheRegistry
import com.tangem.data.common.currency.*
@@ -360,7 +357,9 @@ internal class DefaultCurrenciesRepository(
val storedCoin = storedTokens.tokens
.find {
- it.networkId == blockchainNetworkId && it.id == coinId && it.derivationPath == derivationPath.value
+ it.networkId == blockchainNetworkId &&
+ compareIdWithMigrations(it, coinId) &&
+ it.derivationPath == derivationPath.value
} ?: error("Coin in this network $networkId not found")
val coin = responseCurrenciesFactory.createCurrency(storedCoin, userWallet.scanResponse)
@@ -548,6 +547,13 @@ internal class DefaultCurrenciesRepository(
)
}
+ private fun compareIdWithMigrations(token: UserTokensResponse.Token, coinId: String): Boolean {
+ return when {
+ token.id == OLD_POLYGON_NAME -> NEW_POLYGON_NAME == coinId
+ else -> token.id == coinId
+ }
+ }
+
private suspend fun fetchTokens(userWallet: UserWallet) {
val userWalletId = userWallet.walletId
diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/Network.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/Network.kt
index e976a7786a..2ab37242b0 100644
--- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/Network.kt
+++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/Network.kt
@@ -82,7 +82,7 @@ data class Network(
data class Custom(override val value: String) : DerivationPath()
/**
- * Represents a lack of derivation path.
+ * Represents a lack of derivation path, which means the wallet does not support the HD wallet feature.
*/
@Serializable
data object None : DerivationPath() {
diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/component/preview/PreviewCustomTokenFormComponent.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/component/preview/PreviewCustomTokenFormComponent.kt
index 5d995e9b1c..237bf10084 100644
--- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/component/preview/PreviewCustomTokenFormComponent.kt
+++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/component/preview/PreviewCustomTokenFormComponent.kt
@@ -18,7 +18,7 @@ import kotlinx.collections.immutable.toPersistentMap
internal class PreviewCustomTokenFormComponent(
networkName: ClickableFieldUM = PreviewCustomTokenFormComponent.networkName,
- derivationPath: ClickableFieldUM = PreviewCustomTokenFormComponent.derivationPath,
+ derivationPath: ClickableFieldUM? = PreviewCustomTokenFormComponent.derivationPath,
canAddToken: Boolean = false,
tokenForm: CustomTokenFormUM.TokenFormUM? = PreviewCustomTokenFormComponent.tokenForm,
notifications: PersistentList = PreviewCustomTokenFormComponent.notifications,
diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/entity/customtoken/CustomTokenFormUM.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/entity/customtoken/CustomTokenFormUM.kt
index cf0f8554a8..6f8206441a 100644
--- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/entity/customtoken/CustomTokenFormUM.kt
+++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/entity/customtoken/CustomTokenFormUM.kt
@@ -10,7 +10,7 @@ import kotlinx.collections.immutable.persistentMapOf
internal data class CustomTokenFormUM(
val networkName: ClickableFieldUM,
- val derivationPath: ClickableFieldUM,
+ val derivationPath: ClickableFieldUM?,
val tokenForm: TokenFormUM?,
val notifications: PersistentList = persistentListOf(),
val canAddToken: Boolean = false,
diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt
index b5f4d3bfc1..1e4f48feec 100644
--- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt
+++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/model/CustomTokenFormModel.kt
@@ -37,7 +37,8 @@ import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject
-@Suppress("LongParameterList")
+// TODO: Divide to sub-components: [REDACTED_JIRA]
+@Suppress("LongParameterList", "LargeClass")
@ComponentScoped
internal class CustomTokenFormModel @Inject constructor(
override val dispatchers: CoroutineDispatcherProvider,
@@ -83,19 +84,26 @@ internal class CustomTokenFormModel @Inject constructor(
} else {
null
},
- derivationPath = ClickableFieldUM(
- label = resourceReference(R.string.custom_token_derivation_path),
- value = if (params.derivationPath == null || params.derivationPath.isDefault) {
- resourceReference(R.string.custom_token_derivation_path_default)
- } else {
- stringReference(params.derivationPath.name)
- },
- onClick = ::selectDerivationPath,
- ),
+ derivationPath = getDerivationPathFormIfSupported(),
saveToken = ::addCurrency,
)
}
+ private fun getDerivationPathFormIfSupported(): ClickableFieldUM? {
+ // If network doesn't support derivation path, return null
+ if (params.network.derivationPath is Network.DerivationPath.None) return null
+
+ return ClickableFieldUM(
+ label = resourceReference(R.string.custom_token_derivation_path),
+ value = if (params.derivationPath == null || params.derivationPath.isDefault) {
+ resourceReference(R.string.custom_token_derivation_path_default)
+ } else {
+ stringReference(params.derivationPath.name)
+ },
+ onClick = ::selectDerivationPath,
+ )
+ }
+
@OptIn(FlowPreview::class)
private fun observeTokenFormUpdates() {
state
diff --git a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/ui/CustomTokenFormContent.kt b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/ui/CustomTokenFormContent.kt
index fca42a82dc..1b01e1e8bf 100644
--- a/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/ui/CustomTokenFormContent.kt
+++ b/features/manage-tokens/impl/src/main/kotlin/com/tangem/features/managetokens/ui/CustomTokenFormContent.kt
@@ -117,12 +117,13 @@ private fun FormContent(model: CustomTokenFormUM, modifier: Modifier = Modifier)
val tokenForm = model.tokenForm
if (tokenForm != null) {
- TokenForm(tokenForm)
+ TokenForm(tokenForm = tokenForm)
}
- ClickableField(
- model = model.derivationPath,
- )
+ val derivationPath = model.derivationPath
+ if (derivationPath != null) {
+ ClickableField(model = derivationPath)
+ }
model.notifications.fastForEach { notification ->
Notification(
@@ -278,6 +279,13 @@ private class PreviewCustomTokenFormComponentProvider :
PreviewCustomTokenFormComponent(
tokenForm = null,
),
+ PreviewCustomTokenFormComponent(
+ derivationPath = null,
+ ),
+ PreviewCustomTokenFormComponent(
+ tokenForm = null,
+ derivationPath = null,
+ ),
)
}
// endregion Preview
\ No newline at end of file
diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/OnrampStateFactory.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/OnrampStateFactory.kt
index 8cd1890fbb..136405af33 100644
--- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/OnrampStateFactory.kt
+++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/OnrampStateFactory.kt
@@ -74,7 +74,7 @@ internal class OnrampStateFactory(
)
}
- private fun getErrorState(errorCode: String? = null): OnrampMainComponentUM {
+ fun getErrorState(errorCode: String? = null): OnrampMainComponentUM {
val state = currentStateProvider()
val endButton = state.topBarConfig.endButtonUM.copy(enabled = true)
@@ -84,6 +84,7 @@ internal class OnrampStateFactory(
buyButtonConfig = state.buyButtonConfig.copy(enabled = false),
amountBlockState = state.amountBlockState.copy(
amountFieldModel = state.amountBlockState.amountFieldModel.copy(isError = true),
+ secondaryFieldModel = OnrampAmountSecondaryFieldUM.Content(TextReference.EMPTY),
),
providerBlockState = OnrampProviderBlockUM.Empty,
errorNotification = NotificationUM.Warning.OnrampErrorNotification(
diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountFieldChangeConverter.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountFieldChangeConverter.kt
index cb2186a058..576bbe719e 100644
--- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountFieldChangeConverter.kt
+++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountFieldChangeConverter.kt
@@ -4,6 +4,7 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import com.tangem.core.ui.extensions.TextReference
+import com.tangem.core.ui.utils.parseBigDecimalOrNull
import com.tangem.features.onramp.main.entity.OnrampAmountSecondaryFieldUM
import com.tangem.features.onramp.main.entity.OnrampMainComponentUM
import com.tangem.features.onramp.main.entity.OnrampProviderBlockUM
@@ -24,7 +25,7 @@ internal class OnrampAmountFieldChangeConverter(
val amountState = state.amountBlockState
val amountTextField = amountState.amountFieldModel
- val fiatDecimal = value.toBigDecimalOrNull() ?: BigDecimal.ZERO
+ val fiatDecimal = value.parseBigDecimalOrNull() ?: BigDecimal.ZERO
val isDoneActionEnabled = !fiatDecimal.isNullOrZero()
val amountFieldModel = amountState.amountFieldModel.copy(
fiatValue = value,
diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt
index cb9d102bc6..5d85cb0561 100644
--- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt
+++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/entity/factory/amount/OnrampAmountStateFactory.kt
@@ -1,6 +1,7 @@
package com.tangem.features.onramp.main.entity.factory.amount
import com.tangem.core.analytics.api.AnalyticsEventHandler
+import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.wrappedList
@@ -144,6 +145,23 @@ internal class OnrampAmountStateFactory(
)
}
+ fun getAmountSecondaryResetState(): OnrampMainComponentUM {
+ val currentState = currentStateProvider()
+ if (currentState !is OnrampMainComponentUM.Content) return currentState
+
+ val amountState = currentState.amountBlockState
+
+ if (amountState.secondaryFieldModel is OnrampAmountSecondaryFieldUM.Content) return currentState
+
+ return currentState.copy(
+ amountBlockState = amountState.copy(
+ secondaryFieldModel = OnrampAmountSecondaryFieldUM.Content(
+ amount = TextReference.EMPTY,
+ ),
+ ),
+ )
+ }
+
private fun OnrampQuote.toProviderBlockState(isBestRate: Boolean): OnrampProviderBlockUM {
return OnrampProviderBlockUM.Content(
paymentMethod = paymentMethod,
diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt
index c85fe513cc..366e4ba313 100644
--- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt
+++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/model/OnrampMainComponentModel.kt
@@ -157,7 +157,11 @@ internal class OnrampMainComponentModel @Inject constructor(
}
private suspend fun updatePairsAndQuotes() {
- fetchPairsUseCase.invoke(params.cryptoCurrency).onLeft(::handleOnrampError)
+ _state.update { amountStateFactory.getAmountSecondaryLoadingState() }
+ fetchPairsUseCase.invoke(params.cryptoCurrency).fold(
+ ifLeft = ::handleOnrampError,
+ ifRight = { _state.update { amountStateFactory.getAmountSecondaryResetState() } },
+ )
startLoadingQuotes()
}
@@ -195,39 +199,7 @@ internal class OnrampMainComponentModel @Inject constructor(
.onEach { maybeQuotes ->
maybeQuotes.fold(
ifLeft = ::handleOnrampError,
- ifRight = { quotes ->
- quotes.filterIsInstance().forEach { errorState ->
- sendOnrampErrorAnalytic(errorState.error)
- }
- val quote = quotes.firstOrNull() ?: return@onEach
-
- val bestProvider = quote as? OnrampQuote.Data
- val isMultipleQuotes = !quotes.isSingleItem()
- val isOtherQuotesHasData = quotes
- .filter { it.paymentMethod == quote.paymentMethod }
- .filterNot { it == bestProvider }
- .any { it is OnrampQuote.Data }
- val hasBestProvider = isMultipleQuotes && isOtherQuotesHasData
-
- val isBestProvider = quote == bestProvider && hasBestProvider
-
- if (quote is OnrampQuote.Data && lastAmount.value != quote.fromAmount.value) {
- lastAmount.value = quote.fromAmount.value
- analyticsEventHandler.send(
- OnrampAnalyticsEvent.ProviderCalculated(
- providerName = quote.provider.info.name,
- tokenSymbol = params.cryptoCurrency.symbol,
- paymentMethod = quote.paymentMethod.name,
- ),
- )
- }
- _state.update {
- amountStateFactory.getAmountSecondaryUpdatedState(
- quote = quote,
- isBestRate = isBestProvider,
- )
- }
- },
+ ifRight = ::handleQuoteResult,
)
}
.launchIn(modelScope)
@@ -296,6 +268,46 @@ internal class OnrampMainComponentModel @Inject constructor(
super.onDestroy()
}
+ private fun handleQuoteResult(quotes: List) {
+ quotes.filterIsInstance().forEach { errorState ->
+ sendOnrampErrorAnalytic(errorState.error)
+ }
+
+ val quote = quotes.firstOrNull()
+
+ if (quote == null) {
+ _state.update { stateFactory.getErrorState() }
+ return
+ }
+
+ val bestProvider = quote as? OnrampQuote.Data
+ val isMultipleQuotes = !quotes.isSingleItem()
+ val isOtherQuotesHasData = quotes
+ .filter { it.paymentMethod == quote.paymentMethod }
+ .filterNot { it == bestProvider }
+ .any { it is OnrampQuote.Data }
+ val hasBestProvider = isMultipleQuotes && isOtherQuotesHasData
+
+ val isBestProvider = quote == bestProvider && hasBestProvider
+
+ if (quote is OnrampQuote.Data && lastAmount.value != quote.fromAmount.value) {
+ lastAmount.value = quote.fromAmount.value
+ analyticsEventHandler.send(
+ OnrampAnalyticsEvent.ProviderCalculated(
+ providerName = quote.provider.info.name,
+ tokenSymbol = params.cryptoCurrency.symbol,
+ paymentMethod = quote.paymentMethod.name,
+ ),
+ )
+ }
+ _state.update {
+ amountStateFactory.getAmountSecondaryUpdatedState(
+ quote = quote,
+ isBestRate = isBestProvider,
+ )
+ }
+ }
+
private fun showDemoWarning() {
val alertUM = AlertDemoModeUM(onConfirmClick = {})
diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/ui/SelectProviderBottomSheet.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/ui/SelectProviderBottomSheet.kt
index b2acbcfbd4..9918d1f05e 100644
--- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/ui/SelectProviderBottomSheet.kt
+++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/providers/ui/SelectProviderBottomSheet.kt
@@ -12,9 +12,12 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
@@ -72,6 +75,7 @@ internal fun SelectProviderBottomSheetContent(state: SelectPaymentAndProviderUM,
state.selectedPaymentMethod.providers.fastForEach { provider ->
key(provider.providerId) { ProviderItem(state = provider) }
}
+ OnrampMoreProviders()
}
}
@@ -251,6 +255,28 @@ private fun UnavailableProviderItem(
}
}
+@Composable
+private fun OnrampMoreProviders() {
+ Icon(
+ painter = rememberVectorPainter(
+ ImageVector.vectorResource(R.drawable.ic_lightning_16),
+ ),
+ contentDescription = null,
+ tint = TangemTheme.colors.icon.informative,
+ modifier = Modifier
+ .padding(top = 16.dp),
+ )
+ Text(
+ text = stringResource(R.string.express_more_providers_soon),
+ style = TangemTheme.typography.caption2,
+ color = TangemTheme.colors.icon.informative,
+ modifier = Modifier
+ .padding(top = 4.dp, bottom = 24.dp)
+ .padding(horizontal = TangemTheme.dimens.spacing56),
+ textAlign = TextAlign.Center,
+ )
+}
+
// region Preview
@Preview(showBackground = true, widthDp = 360)
@Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES)
diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/selecttoken/model/OnrampOperationModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/selecttoken/model/OnrampOperationModel.kt
index 2f64fc2fe7..79bcd5e533 100644
--- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/selecttoken/model/OnrampOperationModel.kt
+++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/selecttoken/model/OnrampOperationModel.kt
@@ -23,6 +23,7 @@ import com.tangem.domain.redux.ReduxStateHolder
import com.tangem.domain.tokens.legacy.TradeCryptoAction
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.wallets.usecase.GetWalletsUseCase
+import com.tangem.features.onramp.OnrampFeatureToggles
import com.tangem.features.onramp.impl.R
import com.tangem.features.onramp.selecttoken.OnrampOperationComponent.Params
import com.tangem.features.onramp.selecttoken.entity.OnrampOperationUM
@@ -44,6 +45,7 @@ internal class OnrampOperationModel @Inject constructor(
private val reduxStateHolder: ReduxStateHolder,
private val isDemoCardUseCase: IsDemoCardUseCase,
private val messageSender: UiMessageSender,
+ private val onrampFeatureToggles: OnrampFeatureToggles,
) : Model() {
val state: StateFlow get() = _state
@@ -72,7 +74,7 @@ internal class OnrampOperationModel @Inject constructor(
},
)
- if (params is Params.Sell) {
+ if (params is Params.Sell || !onrampFeatureToggles.isFeatureEnabled) {
showErrorIfDemoModeOrElse { selectToken(status) }
} else {
selectToken(status)
diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fee/custom/EthereumEIPCustomFeeConverter.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fee/custom/EthereumEIPCustomFeeConverter.kt
index a3d874d526..14a249de6c 100644
--- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fee/custom/EthereumEIPCustomFeeConverter.kt
+++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/state/fee/custom/EthereumEIPCustomFeeConverter.kt
@@ -61,8 +61,14 @@ internal class EthereumEIPCustomFeeConverter(
value: ImmutableList,
): Fee.Ethereum.EIP1559 {
val feeAmount = value[FEE_AMOUNT].value.parseToBigDecimal(value[FEE_AMOUNT].decimals)
- val maxFee = value[MAX_FEE].value.parseToBigDecimal(GAS_DECIMALS).toBigInteger()
- val priorityFee = value[PRIORITY_FEE].value.parseToBigDecimal(GAS_DECIMALS).toBigInteger()
+ val maxFeeDecimals = value[MAX_FEE].decimals
+ val maxFee = value[MAX_FEE].value.parseToBigDecimal(maxFeeDecimals)
+ .movePointRight(maxFeeDecimals)
+ .toBigInteger()
+ val priorityFeeDecimals = value[PRIORITY_FEE].decimals
+ val priorityFee = value[PRIORITY_FEE].value.parseToBigDecimal(priorityFeeDecimals)
+ .movePointRight(priorityFeeDecimals)
+ .toBigInteger()
val gasLimit = value[GAS_LIMIT].value.parseToBigDecimal(GAS_DECIMALS).toBigInteger()
return normalFee.copy(
diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/Blockchain.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/Blockchain.kt
index 024c33e797..952be8affd 100644
--- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/Blockchain.kt
+++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/Blockchain.kt
@@ -303,7 +303,7 @@ fun Blockchain.toCoinId(): String {
Blockchain.EthereumClassic, Blockchain.EthereumClassicTestnet -> "ethereum-classic"
Blockchain.Stellar, Blockchain.StellarTestnet -> "stellar"
Blockchain.Cardano -> "cardano"
- Blockchain.Polygon, Blockchain.PolygonTestnet -> "polygon-ecosystem-token"
+ Blockchain.Polygon, Blockchain.PolygonTestnet -> NEW_POLYGON_NAME
Blockchain.Arbitrum, Blockchain.ArbitrumTestnet -> "arbitrum-one"
Blockchain.Avalanche, Blockchain.AvalancheTestnet -> "avalanche-2"
Blockchain.Solana, Blockchain.SolanaTestnet -> "solana"
@@ -387,8 +387,8 @@ fun Blockchain.toCoinId(): String {
* New CoinId to existing coin "id" field.
* To support both old and new coin id.
*/
-fun Blockchain.toMigratedCointId(): String = when (this) {
- Blockchain.Polygon, Blockchain.PolygonTestnet -> "polygon-ecosystem-token"
+fun Blockchain.toMigratedCoinId(): String = when (this) {
+ Blockchain.Polygon, Blockchain.PolygonTestnet -> NEW_POLYGON_NAME
else -> toCoinId()
}
@@ -422,5 +422,8 @@ fun Blockchain.minimalAmount(): BigDecimal {
return BigDecimal.ONE.movePointLeft(decimals())
}
+const val OLD_POLYGON_NAME = "matic-network"
+const val NEW_POLYGON_NAME = "polygon-ecosystem-token"
+
private const val NODL = "NODL"
private const val NODL_AMOUNT_TO_CREATE_ACCOUNT = 1.5
\ No newline at end of file