mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-17 05:41:29 +02:00
v6.0.2 Release candidate (#3080)
* v6.0.2 Release candidate * v6.0.2 Release candidate * move btc ln up in the currency picker * disable bsc for swapsxyz * minor [skip ci] * hide dex/rate selection on swap screen * temp fix for evm tokens swaps icons until hive migration is done * minor [skip ci] * disable force dex providers for existing users and let them pick it from settings preference * Show bitcoin address types in swap picker (#3096) * Show bitcoin address types in swap picker * remove wrong conversion to bolt11 [skip ci] * feat: add Lightning invoice resolution and address normalization * automatically select contact wallet address based on the selected swap currency (whether it's bitcoin or lightning) * minor [skip ci] * default to bolt11 invoice for lightning swaps --------- Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com> --------- Co-authored-by: Konstantin Ullrich <konstantinullrich12@gmail.com>
This commit is contained in:
co-authored by
Konstantin Ullrich
parent
82982ae5af
commit
db00a0214a
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"مظهر جديد","description":"أعيد تصميمها من الألف إلى الياء"},{"icon":"nav","title":"سهولة التنقل","description":"تحسين شريط التنقل والتخطيطات والتدفقات"},{"icon":"cards","title":"تحسين إدارة الحساب","description":"أسهل من أي وقت مضى"},{"icon":"pallete","title":"تخصيص بطاقة الرصيد","description":"اجعلها لك!"},{"icon":"trans","title":"عرض المعاملات السريعة","description":""}]
|
||||
[{"title":"تحسينات الأداء","description":"تحسين أداء التطبيق وسرعته"},{"title":"إصلاحات الشوائب","description":"سحق المزيد من الأخطاء، لجعل تجربتك سلسة"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Нов облик","description":"Преработен от нулата"},{"icon":"nav","title":"По-лесна навигация","description":"Подобрена навигационна лента, оформления и потоци"},{"icon":"cards","title":"Подобрено управление на акаунта","description":"По-лесно от всякога"},{"icon":"pallete","title":"Персонализиране на балансова карта","description":"Направи го твой!"},{"icon":"trans","title":"Изглед на бързи транзакции","description":""}]
|
||||
[{"title":"Подобрения в производителността","description":"Подобрете производителността и скоростта на приложението"},{"title":"Поправки на грешки","description":"Скуош повече грешки, за да направи вашето изживяване гладко"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Nový vzhled","description":"Od základu předělaný"},{"icon":"nav","title":"Jednodušší navigace","description":"Vylepšený navigační panel, rozvržení a toky"},{"icon":"cards","title":"Vylepšená správa účtu","description":"Snazší než kdy jindy"},{"icon":"pallete","title":"Přizpůsobení karty zůstatku","description":"Udělejte to po svém!"},{"icon":"trans","title":"Rychlé zobrazení transakcí","description":""}]
|
||||
[{"title":"Vylepšení výkonu","description":"Zlepšete výkon a rychlost aplikace"},{"title":"Opravy chyb","description":"Squash více chyb, aby vaše zkušenosti hladké"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Neuer Look","description":"Von Grund auf neu gestaltet"},{"icon":"nav","title":"Einfachere Navigation","description":"Verbesserte Navigationsleiste, Layouts und Abläufe"},{"icon":"cards","title":"Verbesserte Kontoverwaltung","description":"Einfacher als je zuvor"},{"icon":"pallete","title":"Anpassung der Guthabenkarte","description":"Machen Sie es zu Ihrem!"},{"icon":"trans","title":"Schnelle Transaktionsansicht","description":""}]
|
||||
[{"title":"Leistungsverbesserungen","description":"Verbessern Sie die Leistung und Geschwindigkeit der App"},{"title":"Fehlerbehebungen","description":"Beseitigen Sie mehr Fehler, um Ihr Erlebnis reibungslos zu gestalten"}]
|
||||
@@ -1,27 +1,10 @@
|
||||
[
|
||||
{
|
||||
"icon": "star",
|
||||
"title": "New look",
|
||||
"description": "Redesigned from the ground up"
|
||||
"title": "Performance enhancements",
|
||||
"description": "Improve app performance and speed"
|
||||
},
|
||||
{
|
||||
"icon": "nav",
|
||||
"title": "Easier navigation",
|
||||
"description": "Improved navbar, layouts and flows"
|
||||
},
|
||||
{
|
||||
"icon": "cards",
|
||||
"title": "Improved account management",
|
||||
"description": "Easier than ever"
|
||||
},
|
||||
{
|
||||
"icon": "pallete",
|
||||
"title": "Balance card customization",
|
||||
"description": "Make it yours!"
|
||||
},
|
||||
{
|
||||
"icon": "trans",
|
||||
"title": "Quick transactions view",
|
||||
"description": ""
|
||||
"title": "Bug fixes",
|
||||
"description": "Squash more bugs, to make your experience smooth"
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Nueva apariencia","description":"Rediseñado desde cero"},{"icon":"nav","title":"Navegación más fácil","description":"Barra de navegación, diseños y flujos mejorados."},{"icon":"cards","title":"Gestión de cuentas mejorada","description":"Más fácil que nunca"},{"icon":"pallete","title":"Personalización de la tarjeta de saldo","description":"¡Hazlo tuyo!"},{"icon":"trans","title":"Vista rápida de transacciones","description":""}]
|
||||
[{"title":"Mejoras de rendimiento","description":"Mejorar el rendimiento y la velocidad de la aplicación"},{"title":"Corrección de errores","description":"Elimina más errores para que tu experiencia sea fluida"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"ظاهر جدید","description":"بازطراحی شده از پایه"},{"icon":"nav","title":"ناوبری آسان تر","description":"نوار ناوبری، طرحبندیها و جریانها بهبود یافته است"},{"icon":"cards","title":"بهبود مدیریت حساب","description":"راحت تر از همیشه"},{"icon":"pallete","title":"سفارشی سازی کارت موجودی","description":"آن را مال خودت کن!"},{"icon":"trans","title":"نمای معاملات سریع","description":""}]
|
||||
[{"title":"بهبود عملکرد","description":"بهبود عملکرد و سرعت برنامه"},{"title":"رفع اشکال","description":"اشکالات بیشتری را حل کنید تا تجربه خود را صاف کنید"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Nouveau look","description":"Repensé de fond en comble"},{"icon":"nav","title":"Navigation plus facile","description":"Barre de navigation, mises en page et flux améliorés"},{"icon":"cards","title":"Gestion de compte améliorée","description":"Plus facile que jamais"},{"icon":"pallete","title":"Personnalisation de la carte de solde","description":"Faites-en le vôtre !"},{"icon":"trans","title":"Vue des transactions rapides","description":""}]
|
||||
[{"title":"Améliorations des performances","description":"Améliorer les performances et la vitesse des applications"},{"title":"Corrections de bugs","description":"Éliminez plus de bugs pour rendre votre expérience fluide"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Ojehecha pyahu","description":"Ojejapo jey yvýguio"},{"icon":"nav","title":"Navegación ndahasýiva","description":"Oñemoporãve navbar, diseño ha flujo"},{"icon":"cards","title":"Oñemoporãve cuenta gestión rehegua","description":"Ndahasýive yma guarégui"},{"icon":"pallete","title":"Tarjeta de saldo personalización rehegua","description":"¡Ejapo chugui nde mba'e!"},{"icon":"trans","title":"Umi transacción pya’e jehechauka","description":""}]
|
||||
[{"title":"Ñemboguata ñembotuichave rehegua","description":"Emoporãve app rembiapo ha pya’e"},{"title":"Umi mba’e’oka ñemyatyrõ","description":"Embopupu hetave mba’e’oka, ikatu hag̃uáicha nde experiencia osẽ porã"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Sabon kallo","description":"An sake tsara shi daga ƙasa zuwa sama"},{"icon":"nav","title":"Sauƙin kewayawa","description":"Ingantattun navbar, shimfidu da gudana"},{"icon":"cards","title":"Inganta sarrafa asusun","description":"Sauki fiye da kowane lokaci"},{"icon":"pallete","title":"Daidaiton katin ma'auni","description":"Maida shi naku!"},{"icon":"trans","title":"Duban ma'amaloli da sauri","description":""}]
|
||||
[{"title":"Ayyukan haɓakawa","description":"Inganta aikin app da sauri"},{"title":"Gyaran kwaro","description":"Squash ƙarin kwari, don sanya kwarewarku ta santsi"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"नया रूप","description":"ज़मीन से ऊपर तक पुनः डिज़ाइन किया गया"},{"icon":"nav","title":"आसान नेविगेशन","description":"बेहतर नेवबार, लेआउट और प्रवाह"},{"icon":"cards","title":"बेहतर खाता प्रबंधन","description":"पहले से कहीं ज्यादा आसान"},{"icon":"pallete","title":"बैलेंस कार्ड अनुकूलन","description":"इसे अपना बनाएं!"},{"icon":"trans","title":"त्वरित लेनदेन दृश्य","description":""}]
|
||||
[{"title":"प्रदर्शन संवर्द्धन","description":"ऐप के प्रदर्शन और गति में सुधार करें"},{"title":"कंप्यूटर प्रोग्राम या प्रणाली में बग को दूर करना","description":"अपने अनुभव को सहज बनाने के लिए अधिक बग्स को नष्ट करें"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Novi izgled","description":"Redizajniran iz temelja"},{"icon":"nav","title":"Lakša navigacija","description":"Poboljšana navigacijska traka, izgledi i tokovi"},{"icon":"cards","title":"Poboljšano upravljanje računom","description":"Lakše nego ikada"},{"icon":"pallete","title":"Prilagodba kartice stanja","description":"Učinite ga svojim!"},{"icon":"trans","title":"Pregled brzih transakcija","description":""}]
|
||||
[{"title":"Poboljšanja performansi","description":"Poboljšajte performanse i brzinu aplikacije"},{"title":"Ispravci grešaka","description":"Uklonite više grešaka kako bi vaše iskustvo bilo glatko"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Նոր տեսք","description":"Վերանախագծված է ի սկզբանե"},{"icon":"nav","title":"Ավելի հեշտ նավարկություն","description":"Բարելավված navbar, դասավորություններ և հոսքեր"},{"icon":"cards","title":"Բարելավված հաշվի կառավարում","description":"Ավելի հեշտ, քան երբևէ"},{"icon":"pallete","title":"Հաշվեկշռային քարտի հարմարեցում","description":"Դարձրե՛ք այն ձերը:"},{"icon":"trans","title":"Արագ գործարքների դիտում","description":""}]
|
||||
[{"title":"Կատարման բարելավումներ","description":"Բարելավել հավելվածի կատարումը և արագությունը"},{"title":"Սխալների շտկում","description":"Դարձրեք ավելի շատ սխալներ, որպեսզի ձեր փորձը հարթ լինի"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Tampilan baru","description":"Didesain ulang dari awal"},{"icon":"nav","title":"Navigasi yang lebih mudah","description":"Peningkatan bilah navigasi, tata letak, dan alur"},{"icon":"cards","title":"Peningkatan manajemen akun","description":"Lebih mudah dari sebelumnya"},{"icon":"pallete","title":"Kustomisasi kartu saldo","description":"Jadikan itu milikmu!"},{"icon":"trans","title":"Tampilan transaksi cepat","description":""}]
|
||||
[{"title":"Peningkatan kinerja","description":"Tingkatkan kinerja dan kecepatan aplikasi"},{"title":"Perbaikan bug","description":"Hancurkan lebih banyak bug, untuk membuat pengalaman Anda lancar"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Nuovo aspetto","description":"Riprogettato da zero"},{"icon":"nav","title":"Navigazione più semplice","description":"Barra di navigazione, layout e flussi migliorati"},{"icon":"cards","title":"Gestione dell'account migliorata","description":"Più facile che mai"},{"icon":"pallete","title":"Personalizzazione della carta saldo","description":"Rendilo tuo!"},{"icon":"trans","title":"Visualizzazione rapida delle transazioni","description":""}]
|
||||
[{"title":"Miglioramenti delle prestazioni","description":"Migliora le prestazioni e la velocità dell'app"},{"title":"Correzioni di bug","description":"Elimina più bug per rendere la tua esperienza fluida"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"新しい外観","description":"根本から再設計"},{"icon":"nav","title":"より簡単なナビゲーション","description":"ナビゲーションバー、レイアウト、フローの改善"},{"icon":"cards","title":"アカウント管理の改善","description":"これまでよりも簡単に"},{"icon":"pallete","title":"バランスカードのカスタマイズ","description":"それをあなたのものにしてください!"},{"icon":"trans","title":"クイックトランザクションビュー","description":""}]
|
||||
[{"title":"パフォーマンスの強化","description":"アプリのパフォーマンスと速度を向上させる"},{"title":"バグ修正","description":"エクスペリエンスをスムーズにするために、より多くのバグを潰してください"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"새로운 모습","description":"처음부터 새롭게 디자인되었습니다."},{"icon":"nav","title":"더욱 쉬워진 탐색","description":"향상된 탐색 모음, 레이아웃 및 흐름"},{"icon":"cards","title":"향상된 계정 관리","description":"그 어느 때보다 쉬워졌습니다."},{"icon":"pallete","title":"잔액 카드 사용자 정의","description":"당신의 것으로 만들어보세요!"},{"icon":"trans","title":"빠른 거래 보기","description":""}]
|
||||
[{"title":"성능 향상","description":"앱 성능 및 속도 향상"},{"title":"버그 수정","description":"더 많은 버그를 제거하여 원활한 경험을 만드세요"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"အမြင်သစ်","description":"မြေပြင်မှ ပြန်လည်ဒီဇိုင်းထုတ်ထားသည်။"},{"icon":"nav","title":"ပိုမိုလွယ်ကူသောလမ်းကြောင်း","description":"navbar၊ အပြင်အဆင်များနှင့် စီးဆင်းမှုများကို မြှင့်တင်ထားသည်။"},{"icon":"cards","title":"ပိုမိုကောင်းမွန်သော အကောင့်စီမံခန့်ခွဲမှု","description":"အရင်ကထက် ပိုလွယ်တယ်။"},{"icon":"pallete","title":"လက်ကျန်ကတ် စိတ်ကြိုက်ပြုလုပ်ခြင်း။","description":"အဲဒါကို မင်းအတွက် လုပ်ပါ။"},{"icon":"trans","title":"လျင်မြန်သော ငွေပေးငွေယူ မြင်ကွင်း","description":""}]
|
||||
[{"title":"စွမ်းဆောင်ရည်မြှင့်တင်မှုများ","description":"အက်ပ်စွမ်းဆောင်ရည်နှင့် မြန်နှုန်းကို မြှင့်တင်ပါ။"},{"title":"ချွတ်ယွင်းချက်ပြင်ဆင်မှုများ","description":"သင့်အတွေ့အကြုံကို ချောမွေ့စေရန်အတွက် နောက်ထပ် bug များကို နှိမ်နင်းပါ။"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Nieuwe look","description":"Opnieuw ontworpen vanaf de grond af"},{"icon":"nav","title":"Gemakkelijkere navigatie","description":"Verbeterde navigatiebalk, lay-outs en stromen"},{"icon":"cards","title":"Verbeterd accountbeheer","description":"Makkelijker dan ooit"},{"icon":"pallete","title":"Aanpassing van de saldokaart","description":"Maak het de jouwe!"},{"icon":"trans","title":"Snelle transactieweergave","description":""}]
|
||||
[{"title":"Prestatieverbeteringen","description":"Verbeter de app-prestaties en snelheid"},{"title":"Bugfixes","description":"Vernietig meer bugs om uw ervaring soepel te laten verlopen"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Nowy wygląd","description":"Przeprojektowany od podstaw"},{"icon":"nav","title":"Łatwiejsza nawigacja","description":"Ulepszony pasek nawigacyjny, układy i przepływy"},{"icon":"cards","title":"Ulepszone zarządzanie kontem","description":"Łatwiejsze niż kiedykolwiek"},{"icon":"pallete","title":"Dostosowanie karty salda","description":"Zrób to swoje!"},{"icon":"trans","title":"Szybki podgląd transakcji","description":""}]
|
||||
[{"title":"Ulepszenia wydajności","description":"Popraw wydajność i szybkość aplikacji"},{"title":"Poprawki błędów","description":"Zmiażdż więcej błędów, aby zapewnić płynność działania"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Novo visual","description":"Redesenhado do zero"},{"icon":"nav","title":"Navegação mais fácil","description":"Barra de navegação, layouts e fluxos aprimorados"},{"icon":"cards","title":"Gerenciamento de conta aprimorado","description":"Mais fácil do que nunca"},{"icon":"pallete","title":"Personalização do cartão de saldo","description":"Faça o seu!"},{"icon":"trans","title":"Visualização rápida de transações","description":""}]
|
||||
[{"title":"Melhorias de desempenho","description":"Melhore o desempenho e a velocidade do aplicativo"},{"title":"Correções de bugs","description":"Elimine mais bugs para tornar sua experiência mais tranquila"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Новый облик","description":"Переработан с нуля"},{"icon":"nav","title":"Упрощенная навигация","description":"Улучшенная панель навигации, макеты и потоки."},{"icon":"cards","title":"Улучшенное управление аккаунтом","description":"Легче, чем когда-либо"},{"icon":"pallete","title":"Настройка балансовой карты","description":"Сделайте это своим!"},{"icon":"trans","title":"Быстрый просмотр транзакций","description":""}]
|
||||
[{"title":"Улучшения производительности","description":"Улучшите производительность и скорость приложения"},{"title":"Исправления ошибок","description":"Устраняйте больше ошибок, чтобы сделать вашу работу более комфортной."}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"รูปลักษณ์ใหม่","description":"ออกแบบใหม่ตั้งแต่ต้นจนจบ"},{"icon":"nav","title":"การนำทางที่ง่ายขึ้น","description":"ปรับปรุงแถบนำทาง เค้าโครง และโฟลว์"},{"icon":"cards","title":"ปรับปรุงการจัดการบัญชี","description":"ง่ายกว่าที่เคย"},{"icon":"pallete","title":"การปรับแต่งการ์ดบาลานซ์","description":"ทำให้มันเป็นของคุณ!"},{"icon":"trans","title":"มุมมองธุรกรรมด่วน","description":""}]
|
||||
[{"title":"การปรับปรุงประสิทธิภาพ","description":"ปรับปรุงประสิทธิภาพและความเร็วของแอป"},{"title":"แก้ไขข้อบกพร่อง","description":"กำจัดแมลงให้มากขึ้นเพื่อทำให้ประสบการณ์ของคุณราบรื่น"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Bagong hitsura","description":"Muling idinisenyo mula sa simula"},{"icon":"nav","title":"Mas madaling nabigasyon","description":"Pinahusay na navbar, mga layout at daloy"},{"icon":"cards","title":"Pinahusay na pamamahala ng account","description":"Mas madali kaysa dati"},{"icon":"pallete","title":"Pag-customize ng balanse ng card","description":"Gawin ito sa iyo!"},{"icon":"trans","title":"Mabilis na pagtingin sa mga transaksyon","description":""}]
|
||||
[{"title":"Mga pagpapahusay sa pagganap","description":"Pagbutihin ang pagganap at bilis ng app"},{"title":"Mga pag-aayos ng bug","description":"Mag-squash ng higit pang mga bug, para maging maayos ang iyong karanasan"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Yeni görünüm","description":"Baştan sona yeniden tasarlandı"},{"icon":"nav","title":"Daha kolay gezinme","description":"Geliştirilmiş gezinme çubuğu, düzenler ve akışlar"},{"icon":"cards","title":"Geliştirilmiş hesap yönetimi","description":"Her zamankinden daha kolay"},{"icon":"pallete","title":"Bakiye kartı özelleştirme","description":"Senin olsun!"},{"icon":"trans","title":"Hızlı işlemler görünümü","description":""}]
|
||||
[{"title":"Performans iyileştirmeleri","description":"Uygulama performansını ve hızını artırın"},{"title":"Hata düzeltmeleri","description":"Deneyiminizi sorunsuz hale getirmek için daha fazla hatayı giderin"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Новий вигляд","description":"Перероблено з нуля"},{"icon":"nav","title":"Простіша навігація","description":"Покращено панель навігації, макети та потоки"},{"icon":"cards","title":"Покращене керування обліковим записом","description":"Легше, ніж будь-коли"},{"icon":"pallete","title":"Налаштування картки балансу","description":"Зробіть це своїм!"},{"icon":"trans","title":"Швидкий перегляд транзакцій","description":""}]
|
||||
[{"title":"Підвищення продуктивності","description":"Покращте продуктивність і швидкість програми"},{"title":"Виправлення помилок","description":"Усуньте більше помилок, щоб ваш досвід був плавним"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"نئی شکل","description":"زمین سے دوبارہ ڈیزائن کیا گیا۔"},{"icon":"nav","title":"آسان نیویگیشن","description":"بہتر نوبار، ترتیب اور بہاؤ"},{"icon":"cards","title":"بہتر اکاؤنٹ مینیجمنٹ","description":"پہلے سے کہیں زیادہ آسان"},{"icon":"pallete","title":"بیلنس کارڈ حسب ضرورت","description":"اسے اپنا بنائیں!"},{"icon":"trans","title":"فوری لین دین کا نظارہ","description":""}]
|
||||
[{"title":"کارکردگی میں اضافہ","description":"ایپ کی کارکردگی اور رفتار کو بہتر بنائیں"},{"title":"بگ کی اصلاحات","description":"اپنے تجربے کو ہموار بنانے کے لیے مزید کیڑے نکالیں۔"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Giao diện mới","description":"Được thiết kế lại từ đầu"},{"icon":"nav","title":"Điều hướng dễ dàng hơn","description":"Thanh điều hướng, bố cục và luồng được cải thiện"},{"icon":"cards","title":"Cải thiện quản lý tài khoản","description":"Dễ dàng hơn bao giờ hết"},{"icon":"pallete","title":"Tùy chỉnh thẻ số dư","description":"Hãy biến nó thành của bạn!"},{"icon":"trans","title":"Xem giao dịch nhanh","description":""}]
|
||||
[{"title":"Cải tiến hiệu suất","description":"Cải thiện hiệu suất và tốc độ ứng dụng"},{"title":"Sửa lỗi","description":"Diệt nhiều lỗi hơn để giúp trải nghiệm của bạn mượt mà hơn"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"Iwo tuntun","description":"Atunse lati ilẹ soke"},{"icon":"nav","title":"Rọrun lilọ","description":"Ilọsiwaju navbar, ipalemo ati awọn sisan"},{"icon":"cards","title":"Imudara iṣakoso akọọlẹ","description":"Rọrun ju lailai"},{"icon":"pallete","title":"Iwontunwonsi kaadi isọdi","description":"Ṣe tirẹ!"},{"icon":"trans","title":"Wiwo awọn iṣowo yarayara","description":""}]
|
||||
[{"title":"Awọn ilọsiwaju iṣẹ","description":"Ṣe ilọsiwaju iṣẹ ṣiṣe ati iyara app"},{"title":"Awọn atunṣe kokoro","description":"Squash diẹ sii awọn idun, lati jẹ ki iriri rẹ dan"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"新面貌","description":"从头开始重新设计"},{"icon":"nav","title":"更轻松的导航","description":"改进的导航栏、布局和流程"},{"icon":"cards","title":"改进账户管理","description":"比以往更容易"},{"icon":"pallete","title":"余额卡定制","description":"让它成为你的!"},{"icon":"trans","title":"快速交易视图","description":""}]
|
||||
[{"title":"性能增强","description":"提高应用程序性能和速度"},{"title":"错误修复","description":"修复更多bug,让您的体验更加流畅"}]
|
||||
@@ -1 +1 @@
|
||||
[{"icon":"star","title":"新面貌","description":"從頭開始重新設計"},{"icon":"nav","title":"更輕鬆的導航","description":"改進的導覽列、佈局和流程"},{"icon":"cards","title":"改進帳戶管理","description":"比以往更容易"},{"icon":"pallete","title":"餘額卡定制","description":"讓它成為你的!"},{"icon":"trans","title":"快速交易視圖","description":""}]
|
||||
[{"title":"效能增強","description":"提高應用程式效能和速度"},{"title":"錯誤修復","description":"修復更多bug,讓您的體驗更加流暢"}]
|
||||
@@ -151,6 +151,7 @@ abstract class BitcoinWalletBase extends ElectrumWallet with Store {
|
||||
seedBytes: seedBytes,
|
||||
apiKey: secrets.breezApiKey,
|
||||
lnurlDomain: "cake.cash",
|
||||
cachedAddress: cachedLightningAddress,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -81,6 +81,7 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
||||
mwebAddresses =
|
||||
ObservableList<BitcoinAddressRecord>.of((initialMwebAddresses ?? []).toSet()),
|
||||
lockedReceiveAddressByType = ObservableMap<BitcoinAddressType, String>(),
|
||||
lightningAddress = lightningWallet?.cachedAddress,
|
||||
super(walletInfo) {
|
||||
if (masterHd != null) {
|
||||
silentAddress = SilentPaymentOwner.fromPrivateKeys(
|
||||
@@ -490,6 +491,14 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
||||
addressesMap[address] = 'Active - Silent Payments';
|
||||
}
|
||||
}
|
||||
|
||||
if (lightningAddress != null) {
|
||||
if (lightningAddress != address) {
|
||||
addressesMap[lightningAddress!] = 'LN';
|
||||
} else {
|
||||
addressesMap[address] = 'Active - LN';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void addLitecoinAddressTypes() {
|
||||
@@ -767,34 +776,40 @@ abstract class ElectrumWalletAddressesBase extends WalletAddresses with Store {
|
||||
Future<void> setLightningAddress(String walletName, {String newAddress = ""}) async {
|
||||
if (lightningWallet == null) return;
|
||||
|
||||
final path = await pathForWalletDir(name: walletName, type: WalletType.bitcoin);
|
||||
final initialized = await lightningWallet!.init(path);
|
||||
try {
|
||||
final path = await pathForWalletDir(name: walletName, type: WalletType.bitcoin);
|
||||
final initialized = await lightningWallet!.init(path);
|
||||
|
||||
if (!initialized) {
|
||||
printV("Failed to initialize the lightning wallet");
|
||||
return;
|
||||
}
|
||||
if (!initialized) {
|
||||
printV("Failed to initialize the lightning wallet");
|
||||
return;
|
||||
}
|
||||
|
||||
lightningAddress = await lightningWallet!.getAddress();
|
||||
lightningAddress = await lightningWallet!.getAddress();
|
||||
|
||||
late final String username;
|
||||
late final String username;
|
||||
|
||||
if (newAddress.isEmpty) {
|
||||
if (lightningAddress != null) return;
|
||||
if (newAddress.isEmpty) {
|
||||
if (lightningAddress != null) return;
|
||||
|
||||
final randomNumber = Random.secure().nextInt(9999);
|
||||
final randomName = await generateName();
|
||||
username = "${randomName.replaceAll(" ", "")}$randomNumber".toLowerCase();
|
||||
} else {
|
||||
username = newAddress;
|
||||
}
|
||||
} else {
|
||||
username = newAddress;
|
||||
}
|
||||
|
||||
try {
|
||||
printV(username);
|
||||
lightningAddress = await lightningWallet!.registerAddress(username);
|
||||
try {
|
||||
printV(username);
|
||||
lightningAddress = await lightningWallet!.registerAddress(username);
|
||||
} catch (e) {
|
||||
printV(e);
|
||||
printV(username);
|
||||
rethrow;
|
||||
}
|
||||
} catch (e) {
|
||||
printV(e);
|
||||
printV(username);
|
||||
// make sure lightningAddress gets initialized anyway
|
||||
lightningAddress ??= lightningWallet!.cachedAddress;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,8 +77,6 @@ class LightningWallet {
|
||||
_eventStream ??= sdk.addEventListener().asBroadcastStream();
|
||||
_logStream ??= initLogging().asBroadcastStream();
|
||||
|
||||
await sdk.syncWallet(request: SyncWalletRequest());
|
||||
|
||||
try {
|
||||
final logFile = File("$appPath/lightning.log")
|
||||
..createSync();
|
||||
@@ -87,6 +85,8 @@ class LightningWallet {
|
||||
printV(e);
|
||||
}
|
||||
|
||||
await sdk.syncWallet(request: SyncWalletRequest());
|
||||
|
||||
return true;
|
||||
} catch (e) {
|
||||
printV(e);
|
||||
|
||||
@@ -35,6 +35,7 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
|
||||
static const all = [
|
||||
CryptoCurrency.xmr,
|
||||
CryptoCurrency.btc,
|
||||
CryptoCurrency.btcln,
|
||||
CryptoCurrency.eth,
|
||||
CryptoCurrency.ltc,
|
||||
CryptoCurrency.doge,
|
||||
@@ -83,7 +84,6 @@ class CryptoCurrency extends EnumerableItem<int> with Serializable<int> implemen
|
||||
CryptoCurrency.scrt,
|
||||
CryptoCurrency.uni,
|
||||
CryptoCurrency.stx,
|
||||
CryptoCurrency.btcln,
|
||||
CryptoCurrency.shib,
|
||||
CryptoCurrency.aave,
|
||||
CryptoCurrency.arb,
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:cw_core/utils/proxy_wrapper.dart';
|
||||
|
||||
Future<String?> getBolt11FromLightingAddress(String lightningAddress, {int amount = 0}) async {
|
||||
try {
|
||||
final uri = getURlOfLightningAddress(lightningAddress);
|
||||
|
||||
var response = await ProxyWrapper().get(clearnetUri: uri);
|
||||
final responseBody =
|
||||
_LNURLPResponseDTO.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
|
||||
|
||||
response =
|
||||
await ProxyWrapper().get(clearnetUri: Uri.parse("${responseBody.callback}?amount=$amount"));
|
||||
|
||||
final callbackResponseBody =
|
||||
_LNURLPCallbackResponseDTO.fromJson(jsonDecode(response.body) as Map<String, dynamic>);
|
||||
|
||||
return callbackResponseBody.pr;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
Uri getURlOfLightningAddress(String lightningAddress) {
|
||||
final parts = lightningAddress.split("@");
|
||||
|
||||
final name = parts.first;
|
||||
final domain = parts.last;
|
||||
return Uri.parse("https://$domain/.well-known/lnurlp/$name");
|
||||
}
|
||||
|
||||
class _LNURLPResponseDTO {
|
||||
final String callback;
|
||||
final int maxSendable;
|
||||
final int minSendable;
|
||||
final String tag;
|
||||
final String metadata;
|
||||
|
||||
const _LNURLPResponseDTO(
|
||||
this.callback, this.maxSendable, this.minSendable, this.tag, this.metadata);
|
||||
|
||||
static _LNURLPResponseDTO fromJson(Map<String, dynamic> map) => _LNURLPResponseDTO(
|
||||
map["callback"] as String,
|
||||
map["maxSendable"] as int,
|
||||
map["minSendable"] as int,
|
||||
map["tag"] as String,
|
||||
map["metadata"] as String);
|
||||
}
|
||||
|
||||
class _LNURLPCallbackResponseDTO {
|
||||
final String pr;
|
||||
|
||||
const _LNURLPCallbackResponseDTO(this.pr);
|
||||
|
||||
static _LNURLPCallbackResponseDTO fromJson(Map<String, dynamic> map) =>
|
||||
_LNURLPCallbackResponseDTO(map["pr"] as String);
|
||||
}
|
||||
@@ -595,6 +595,9 @@ Future<void> defaultSettingsMigration(
|
||||
case 60: // BalanceCardStyleSettings.cardOrder no-op (handled in sqlite.dart)
|
||||
// Do not migrate SQLite here, do that in sqlite.dart in order to prevent runtime
|
||||
// errors, missing row and missing tables.
|
||||
case 61:
|
||||
// reset force dex option only 1 time and let users pick it from the swap settings preference
|
||||
await sharedPreferences.setBool(PreferencesKey.forceDecentralizedExchanges, false);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:cake_wallet/.secrets.g.dart' as secrets;
|
||||
import 'package:cake_wallet/core/lightning_invoice_service.dart';
|
||||
import 'package:cake_wallet/exchange/exchange_provider_description.dart';
|
||||
import 'package:cake_wallet/exchange/limits.dart';
|
||||
import 'package:cake_wallet/exchange/provider/exchange_provider.dart';
|
||||
@@ -196,8 +197,8 @@ class ExolixExchangeProvider extends ExchangeProvider {
|
||||
'coinTo': _normalizeCurrency(_overrideToCryptoCurrency(request.toCurrency, request.toAddress)),
|
||||
'networkFrom': _networkFor(request.fromCurrency),
|
||||
'networkTo': _networkFor(request.toCurrency),
|
||||
'withdrawalAddress': _normalizeAddress(request.toAddress),
|
||||
'refundAddress': _normalizeAddress(request.refundAddress),
|
||||
'withdrawalAddress': await _normalizeAddress(request.toAddress),
|
||||
'refundAddress': await _normalizeAddress(request.refundAddress),
|
||||
'rateType': _getRateType(isFixedRateMode),
|
||||
'apiToken': apiKey,
|
||||
};
|
||||
@@ -213,7 +214,6 @@ class ExolixExchangeProvider extends ExchangeProvider {
|
||||
headers: headers,
|
||||
body: json.encode(body),
|
||||
);
|
||||
|
||||
|
||||
if (response.statusCode == 400) {
|
||||
final responseJSON = json.decode(response.body) as Map<String, dynamic>;
|
||||
@@ -446,8 +446,17 @@ class ExolixExchangeProvider extends ExchangeProvider {
|
||||
}
|
||||
}
|
||||
|
||||
String _normalizeAddress(String address) =>
|
||||
address.startsWith('bitcoincash:') ? address.replaceFirst('bitcoincash:', '') : address;
|
||||
Future<String> _normalizeAddress(String address) async {
|
||||
if (address.startsWith('bitcoincash:'))
|
||||
return address.replaceFirst('bitcoincash:', '');
|
||||
|
||||
// Lightning addresses
|
||||
if(address.contains("@"))
|
||||
return await getBolt11FromLightingAddress(address) ?? address;
|
||||
|
||||
return address;
|
||||
}
|
||||
|
||||
|
||||
static double? _toDouble(dynamic value) {
|
||||
if (value is int) {
|
||||
|
||||
@@ -8,7 +8,6 @@ import 'package:cake_wallet/exchange/trade.dart';
|
||||
import 'package:cake_wallet/exchange/trade_not_created_exception.dart';
|
||||
import 'package:cake_wallet/exchange/trade_request.dart';
|
||||
import 'package:cake_wallet/exchange/trade_state.dart';
|
||||
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
|
||||
import 'package:cw_core/amount_converter.dart';
|
||||
import 'package:cw_core/utils/print_verbose.dart';
|
||||
import 'package:cw_core/utils/proxy_wrapper.dart';
|
||||
@@ -20,7 +19,7 @@ class SwapsXyzExchangeProvider extends ExchangeProvider {
|
||||
static final List<CryptoCurrency> _notSupportedAsSourceToken = [
|
||||
CryptoCurrency.sol,
|
||||
...CryptoCurrency.all.where(
|
||||
(c) => (c.tag ?? '').toUpperCase() == 'SOL',
|
||||
(c) => (c.tag ?? '').toUpperCase() == 'SOL' || c.tag == CryptoCurrency.bnb.tag,
|
||||
),
|
||||
];
|
||||
|
||||
@@ -209,7 +208,7 @@ class SwapsXyzExchangeProvider extends ExchangeProvider {
|
||||
required bool isReceiveAmount}) async {
|
||||
try {
|
||||
|
||||
if(_notSupportedAsSourceToken.contains(from)) {
|
||||
if(_notSupportedAsSourceToken.contains(from) || _notSupportedAsSourceToken.contains(to)) {
|
||||
printV(
|
||||
'fetchRate: source token ${from.title} is not supported as source token');
|
||||
return 0.0;
|
||||
|
||||
@@ -7,7 +7,6 @@ import 'package:cake_wallet/exchange/provider/exchange_provider.dart';
|
||||
import 'package:cake_wallet/exchange/trade.dart';
|
||||
import 'package:cake_wallet/exchange/trade_request.dart';
|
||||
import 'package:cake_wallet/exchange/trade_state.dart';
|
||||
import 'package:cake_wallet/exchange/utils/currency_pairs_utils.dart';
|
||||
import 'package:cake_wallet/wallet_type_utils.dart';
|
||||
import 'package:cw_core/utils/proxy_wrapper.dart';
|
||||
import 'package:cw_core/crypto_currency.dart';
|
||||
|
||||
+1
-1
@@ -324,7 +324,7 @@ Future<void> initializeAppConfigs({bool loadWallet = true}) async {
|
||||
payjoinSessionSource: payjoinSessionSource,
|
||||
anonpayInvoiceInfo: anonpayInvoiceInfo,
|
||||
havenSeedStore: havenSeedStore,
|
||||
initialMigrationVersion: 60,
|
||||
initialMigrationVersion: 61,
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import 'package:cake_wallet/new-ui/widgets/swap_page/swap_address_selection_moda
|
||||
import 'package:cake_wallet/new-ui/widgets/swap_page/swap_confirm_sheet.dart';
|
||||
import 'package:cake_wallet/new-ui/widgets/swap_page/swap_limit_popup.dart';
|
||||
import 'package:cake_wallet/new-ui/widgets/swap_page/swap_options_page.dart';
|
||||
import 'package:cake_wallet/new-ui/widgets/swap_page/swap_provider_initial_preference_modal.dart';
|
||||
import 'package:cake_wallet/src/screens/exchange/widgets/currency_picker.dart';
|
||||
import 'package:cake_wallet/src/screens/exchange/widgets/present_provider_picker.dart';
|
||||
import 'package:cake_wallet/src/screens/send/widgets/extract_address_from_parsed.dart';
|
||||
@@ -45,7 +44,6 @@ import 'package:cw_core/wallet_type.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:mobx/mobx.dart';
|
||||
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
||||
|
||||
@@ -98,20 +96,20 @@ class _NewSwapPageState extends State<NewSwapPage> {
|
||||
}
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (!widget.exchangeViewModel.decentralizedExchangesPromptDismissed) {
|
||||
showMaterialModalBottomSheet(
|
||||
context: context,
|
||||
backgroundColor: Colors.transparent,
|
||||
isDismissible: false,
|
||||
builder: (context) {
|
||||
return SwapProviderInitialPreferenceModal();
|
||||
}).then((val) {
|
||||
widget.exchangeViewModel.dismissDecentralizedExchangesPrompt();
|
||||
if (val is bool && val == true && !widget.exchangeViewModel.forceDecentralizedExchanges) {
|
||||
widget.exchangeViewModel.toggleForceDecentralizedExchanges();
|
||||
}
|
||||
});
|
||||
}
|
||||
// if (!widget.exchangeViewModel.decentralizedExchangesPromptDismissed) {
|
||||
// showMaterialModalBottomSheet(
|
||||
// context: context,
|
||||
// backgroundColor: Colors.transparent,
|
||||
// isDismissible: false,
|
||||
// builder: (context) {
|
||||
// return SwapProviderInitialPreferenceModal();
|
||||
// }).then((val) {
|
||||
// widget.exchangeViewModel.dismissDecentralizedExchangesPrompt();
|
||||
// if (val is bool && val == true && !widget.exchangeViewModel.forceDecentralizedExchanges) {
|
||||
// widget.exchangeViewModel.toggleForceDecentralizedExchanges();
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
|
||||
final depositAddressController = depositKey.currentState!.addressController;
|
||||
final depositAmountController = depositKey.currentState!.amountController;
|
||||
@@ -1182,13 +1180,14 @@ class SwapAmountBoxState extends State<SwapAmountBox> {
|
||||
});
|
||||
if (res != null && res is SwapAddressSelectionResult) {
|
||||
if (widget.isReceiverCard) {
|
||||
widget.exchangeViewModel.selectedAddressBookWallet = res.walletInfo;
|
||||
widget.exchangeViewModel.receiveAddress = res.address!;
|
||||
if (res.walletName != null) {
|
||||
if (res.walletInfo?.name != null) {
|
||||
if (res.accountName != null) {
|
||||
widget.exchangeViewModel.receiveAddressDisplayName =
|
||||
"${res.walletName} → ${res.accountName}";
|
||||
"${res.walletInfo!.name} → ${res.accountName}";
|
||||
} else {
|
||||
widget.exchangeViewModel.receiveAddressDisplayName = res.walletName!;
|
||||
widget.exchangeViewModel.receiveAddressDisplayName = res.walletInfo!.name;
|
||||
}
|
||||
}
|
||||
} else if (res.address == null || res.address!.isEmpty) {
|
||||
@@ -1196,7 +1195,7 @@ class SwapAmountBoxState extends State<SwapAmountBox> {
|
||||
askForRefundAddress();
|
||||
} else {
|
||||
widget.exchangeViewModel.isSendFromExternal = false;
|
||||
switchToDepositWallet(res.walletName!);
|
||||
switchToDepositWallet(res.walletInfo!.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import 'package:cake_wallet/utils/show_pop_up.dart';
|
||||
import 'package:cake_wallet/src/widgets/cake_image_widget.dart';
|
||||
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
|
||||
class AssetsTopBar extends StatelessWidget {
|
||||
const AssetsTopBar({
|
||||
@@ -98,5 +97,6 @@ class AssetsTopBar extends StatelessWidget {
|
||||
if (tabs[selectedTab] == S.current.history) {
|
||||
return S.current.filters;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -70,23 +70,25 @@ class HistoryTradeTile extends StatelessWidget {
|
||||
}
|
||||
|
||||
String _getIconPath(CryptoCurrency currency) {
|
||||
if (currency.iconPath != null) {
|
||||
return currency.iconPath!;
|
||||
}
|
||||
|
||||
if (currency.name.isNotEmpty) {
|
||||
final currencyFromName = CryptoCurrency.fromString(currency.name);
|
||||
if (currencyFromName.iconPath != null) {
|
||||
return currencyFromName.iconPath!;
|
||||
try { // temporarily until we migrate from hive to sqlite and store the full currency object
|
||||
if (currency.iconPath != null) {
|
||||
return currency.iconPath!;
|
||||
}
|
||||
}
|
||||
|
||||
if (currency.title.isNotEmpty) {
|
||||
final currencyFromTitle = CryptoCurrency.fromString(currency.title);
|
||||
if (currencyFromTitle.iconPath != null) {
|
||||
return currencyFromTitle.iconPath!;
|
||||
if (currency.name.isNotEmpty) {
|
||||
final currencyFromName = CryptoCurrency.fromString(currency.name);
|
||||
if (currencyFromName.iconPath != null) {
|
||||
return currencyFromName.iconPath!;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (currency.title.isNotEmpty) {
|
||||
final currencyFromTitle = CryptoCurrency.fromString(currency.title);
|
||||
if (currencyFromTitle.iconPath != null) {
|
||||
return currencyFromTitle.iconPath!;
|
||||
}
|
||||
}
|
||||
} catch (_) {}
|
||||
|
||||
//TODO approporiate fallback
|
||||
return "";
|
||||
|
||||
@@ -6,16 +6,16 @@ import 'package:cake_wallet/src/widgets/new_list_row/new_simple_checkbox.dart';
|
||||
import 'package:cake_wallet/view_model/exchange/exchange_view_model.dart';
|
||||
import 'package:cw_core/currency_for_wallet_type.dart';
|
||||
import 'package:cw_core/wallet_info.dart';
|
||||
import 'package:cw_core/wallet_type.dart' show WalletType;
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:modal_bottom_sheet/modal_bottom_sheet.dart';
|
||||
|
||||
class SwapAddressSelectionResult {
|
||||
String? address;
|
||||
String? walletName;
|
||||
WalletInfo? walletInfo;
|
||||
String? accountName;
|
||||
|
||||
SwapAddressSelectionResult({this.address, this.walletName, this.accountName});
|
||||
SwapAddressSelectionResult({this.address, this.walletInfo, this.accountName});
|
||||
}
|
||||
|
||||
class SwapAddressSelectionModal extends StatefulWidget {
|
||||
@@ -52,8 +52,8 @@ class _SwapAddressSelectionModalState extends State<SwapAddressSelectionModal> {
|
||||
? await widget.exchangeViewModel.receiveWallets
|
||||
: await widget.exchangeViewModel.depositWallets;
|
||||
for (final item in items) {
|
||||
if (item.type.toString() == "WalletType.monero") {
|
||||
accounts[item.id] = await widget.exchangeViewModel.addressesForWallet(item);
|
||||
if (item.type == WalletType.monero) {
|
||||
accounts[item.id] = await widget.exchangeViewModel.addressesForAccountsWallet(item);
|
||||
}
|
||||
}
|
||||
setState(() {
|
||||
@@ -107,10 +107,10 @@ class _SwapAddressSelectionModalState extends State<SwapAddressSelectionModal> {
|
||||
|
||||
final String currencyIconPath = walletTypeToCryptoCurrency(item.type).iconPath ?? "";
|
||||
|
||||
final bool hasAccounts =
|
||||
item.type.toString() == "WalletType.monero" && widget.isSelectingReceiver;
|
||||
final bool hasAccounts =
|
||||
item.type == WalletType.monero && widget.isSelectingReceiver;
|
||||
|
||||
List<WalletInfoAddressInfo>? accounts =
|
||||
List<WalletInfoAddressInfo>? accounts =
|
||||
hasAccounts ? this.accounts[item.id] : null;
|
||||
|
||||
return Padding(
|
||||
@@ -123,7 +123,7 @@ class _SwapAddressSelectionModalState extends State<SwapAddressSelectionModal> {
|
||||
onAddressChosen: (address, accountName) {
|
||||
Navigator.of(context).pop(SwapAddressSelectionResult(
|
||||
address: address,
|
||||
walletName: item.name,
|
||||
walletInfo: item,
|
||||
accountName: accountName));
|
||||
},
|
||||
),
|
||||
|
||||
@@ -716,7 +716,7 @@ abstract class SettingsStoreBase with Store {
|
||||
|
||||
reaction(
|
||||
(_) => decentralizedExchangesPromptDismissed,
|
||||
(bool forceDecentralizedExchanges) => _sharedPreferences.setBool(
|
||||
(bool decentralizedExchangesPromptDismissed) => _sharedPreferences.setBool(
|
||||
PreferencesKey.decentralizedExchangesPromptDismissed,
|
||||
decentralizedExchangesPromptDismissed));
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@ import 'package:cake_wallet/bitcoin/bitcoin.dart';
|
||||
import 'package:cake_wallet/core/amount_parsing_proxy.dart';
|
||||
import 'package:cake_wallet/core/create_trade_result.dart';
|
||||
import 'package:cake_wallet/core/fiat_conversion_service.dart';
|
||||
import 'package:cake_wallet/core/lightning_invoice_service.dart';
|
||||
import 'package:cake_wallet/core/utilities.dart';
|
||||
import 'package:cake_wallet/core/wallet_change_listener_view_model.dart';
|
||||
import 'package:cake_wallet/entities/calculate_fiat_amount.dart';
|
||||
import 'package:cake_wallet/entities/exchange_api_mode.dart';
|
||||
@@ -420,7 +422,7 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
|
||||
return await WalletInfo.selectList("type = ?", [type!.index]);
|
||||
}
|
||||
|
||||
Future<List<WalletInfoAddressInfo>> addressesForWallet(WalletInfo wallet) async {
|
||||
Future<List<WalletInfoAddressInfo>> addressesForAccountsWallet(WalletInfo wallet) async {
|
||||
final List<WalletInfoAddressInfo> ret = [];
|
||||
final addresses = await wallet.getAddressInfos();
|
||||
for (var list in addresses.values) {
|
||||
@@ -554,6 +556,8 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
|
||||
calculateForcedProviderRate();
|
||||
}
|
||||
|
||||
WalletInfo? selectedAddressBookWallet;
|
||||
|
||||
@observable
|
||||
double forcedProviderRate = 0.0;
|
||||
|
||||
@@ -964,22 +968,6 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
|
||||
}
|
||||
}
|
||||
|
||||
if (depositCurrency == CryptoCurrency.btcln &&
|
||||
depositAddress == wallet.walletAddresses.addressForExchange) {
|
||||
final invoice = await bitcoin!.getLightningInvoice(wallet, BigInt.zero);
|
||||
if (invoice != null) {
|
||||
depositAddress = invoice;
|
||||
}
|
||||
}
|
||||
|
||||
if (receiveCurrency == CryptoCurrency.btcln &&
|
||||
receiveAddress == wallet.walletAddresses.addressForExchange) {
|
||||
final invoice = await bitcoin!.getLightningInvoice(wallet, BigInt.zero);
|
||||
if (invoice != null) {
|
||||
receiveAddress = invoice;
|
||||
}
|
||||
}
|
||||
|
||||
late final Map<double, ExchangeProvider> providers;
|
||||
if (forcedProvider != null) {
|
||||
providers = {forcedProviderRate: forcedProvider!};
|
||||
@@ -1000,6 +988,32 @@ abstract class ExchangeViewModelBase extends WalletChangeListenerViewModel with
|
||||
}
|
||||
|
||||
try {
|
||||
if (selectedAddressBookWallet?.type == WalletType.bitcoin) {
|
||||
final _walletAddresses = await selectedAddressBookWallet!.getAddresses();
|
||||
|
||||
// if receive currency is lightning pick the lightning address
|
||||
// if normal bitcoin, then pick the segwit address
|
||||
if (receiveCurrency == CryptoCurrency.btcln) {
|
||||
final lightningAddressOfWallet =
|
||||
_walletAddresses.entries.firstWhereOrNull((e) => e.value.contains("LN"))?.key;
|
||||
if (lightningAddressOfWallet != null) {
|
||||
receiveAddress = lightningAddressOfWallet;
|
||||
}
|
||||
}
|
||||
if (receiveCurrency == CryptoCurrency.btc) {
|
||||
final segwitAddressOfWallet =
|
||||
_walletAddresses.entries.firstWhereOrNull((e) => e.value.contains("P2WPKH"))?.key;
|
||||
if (segwitAddressOfWallet != null) {
|
||||
receiveAddress = segwitAddressOfWallet;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// parse Lightning address to bolt11 invoice
|
||||
if (receiveAddress.contains("@")) {
|
||||
receiveAddress = await getBolt11FromLightingAddress(receiveAddress) ?? receiveAddress;
|
||||
}
|
||||
|
||||
// snapshot of providers to avoid concurrent modification issues
|
||||
final providersSnapshot = providers.values.toList();
|
||||
final ratesSnapshot = providers.keys.toList();
|
||||
|
||||
@@ -109,7 +109,7 @@ abstract class OutputBase with Store {
|
||||
if (fiatAmount.split(".").last.length <= digits) {
|
||||
return fiatAmount;
|
||||
}
|
||||
return double.parse(fiatAmount.replaceAll(",", "")).toStringAsPrecision(digits);
|
||||
return double.tryParse(fiatAmount.replaceAll(",", ""))?.toStringAsPrecision(digits) ?? '0.0';
|
||||
}
|
||||
|
||||
@observable
|
||||
|
||||
@@ -14,15 +14,15 @@ TYPES=($MONERO_COM $CAKEWALLET)
|
||||
APP_ANDROID_TYPE=$1
|
||||
|
||||
MONERO_COM_NAME="Monero.com"
|
||||
MONERO_COM_VERSION="6.0.1"
|
||||
MONERO_COM_BUILD_NUMBER=4154
|
||||
MONERO_COM_VERSION="6.0.2"
|
||||
MONERO_COM_BUILD_NUMBER=4155
|
||||
MONERO_COM_BUNDLE_ID="com.monero.app"
|
||||
MONERO_COM_PACKAGE="com.monero.app"
|
||||
MONERO_COM_SCHEME="monero.com"
|
||||
|
||||
CAKEWALLET_NAME="Cake Wallet"
|
||||
CAKEWALLET_VERSION="6.0.1"
|
||||
CAKEWALLET_BUILD_NUMBER=4405
|
||||
CAKEWALLET_VERSION="6.0.2"
|
||||
CAKEWALLET_BUILD_NUMBER=4406
|
||||
CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
|
||||
CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"
|
||||
CAKEWALLET_SCHEME="cakewallet"
|
||||
|
||||
@@ -12,13 +12,13 @@ TYPES=($MONERO_COM $CAKEWALLET)
|
||||
APP_IOS_TYPE=$1
|
||||
|
||||
MONERO_COM_NAME="Monero.com"
|
||||
MONERO_COM_VERSION="6.0.1"
|
||||
MONERO_COM_BUILD_NUMBER=159
|
||||
MONERO_COM_VERSION="6.0.2"
|
||||
MONERO_COM_BUILD_NUMBER=160
|
||||
MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
|
||||
|
||||
CAKEWALLET_NAME="Cake Wallet"
|
||||
CAKEWALLET_VERSION="6.0.1"
|
||||
CAKEWALLET_BUILD_NUMBER=407
|
||||
CAKEWALLET_VERSION="6.0.2"
|
||||
CAKEWALLET_BUILD_NUMBER=408
|
||||
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import "package:cake_wallet/core/lightning_invoice_service.dart";
|
||||
import "package:cw_core/lnurl.dart";
|
||||
import "package:cw_core/utils/proxy_wrapper.dart";
|
||||
import "package:cw_core/utils/tor/abstract.dart";
|
||||
import "package:flutter_test/flutter_test.dart";
|
||||
|
||||
Future<void> main() async {
|
||||
CakeTor.instance = await CakeTorInstance.getInstance();
|
||||
|
||||
group("lightning_invoice_service", () {
|
||||
test("Should resolve an empty Bolt11 invoice konsti@cake.cash", () async {
|
||||
final invoice = await getBolt11FromLightingAddress("konsti@cake.cash");
|
||||
|
||||
expect(invoice, isNotNull);
|
||||
expect(isBolt11ZeroInvoice(invoice!), isTrue);
|
||||
});
|
||||
|
||||
test("Should not resolve an empty Bolt11 invoice viksharma@cluborange.org", () async {
|
||||
final invoice = await getBolt11FromLightingAddress("viksharma@cluborange.org");
|
||||
|
||||
expect(invoice, isNull);
|
||||
});
|
||||
|
||||
test("Should resolve an Bolt11 invoice viksharma@cluborange.org", () async {
|
||||
final invoice =
|
||||
await getBolt11FromLightingAddress("viksharma@cluborange.org", amount: 1000000000);
|
||||
|
||||
expect(invoice, isNotNull);
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -40,9 +40,9 @@ void main() async {
|
||||
}
|
||||
|
||||
out.add({
|
||||
"icon": itemMap["icon"]! as String,
|
||||
"title": newTitle,
|
||||
"description": newDescription,
|
||||
if (itemMap["icon"] != null) "icon": itemMap["icon"] as String,
|
||||
if (itemMap["title"] != null) "title": newTitle,
|
||||
if (itemMap["description"] != null) "description": newDescription,
|
||||
});
|
||||
|
||||
currentItem++;
|
||||
|
||||
Reference in New Issue
Block a user