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