CW-974: Add support for automatic node switching. (#2361)

* feat: Add support for automatic node switching.

This change:
- Adds isTrustedNodeForSwitching property to Node class.
- Adds UI Checkbox to mark a node as trusted for automatic switching in Node create or edit form.
- Implements checkNodeHealth method in wallet classes to verify node connectivity.
- Adds NodeSwitchingService for managing automatic node switching based on health checks.
- Adds setting option for user to enable/disable automated node switching

* fix(automatic-node-switch): Set node health check interval to 5 minutes in NodeSwitchingService

* refactor: Update handler method

* feat: Automatic Node Switching Improvements

This change:
- Moves enable automatic node switch to the Manage Nodes Page
- Adds check to verify node health before attempting to sync in EVM, Sol and Tron Wallets.
- Modifies trusted ndoes list for monero
- Adds trigger for Node Health Check when app resumes from background

* fix: Increase default request timeout for Tron and update health check interval for node switch

* feat: Enhance Node health check functionality.

This change adds additional checks for token balance in EVM, Solana and Tron Wallets in checkNodeHealth.

* fix: Update health check interval to 30 seconds in NodeSwitchingService

* Update bitcoin_electrum_server_list.yml

* fix: Electru wallet not connecting to new node after switching

* fix: Automated Node Switch not working on Decred Wallet

* fix: Add more nodes for AutoSwitching

This change:
- Enables more nodes across wallet types for auto switching
- Modifies CTA for checkbox
- Renames flags to fit

* fix: Add migration function for setting up default nodes for autoswitching

* fix: Review and testing fixes

* chore: Adjust balance and history fetch timer
This commit is contained in:
David Adegoke
2025-07-25 16:42:59 +03:00
committed by GitHub
parent 8f4eed4d9b
commit 4b2af63fa5
73 changed files with 639 additions and 68 deletions
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "نقوم بإنشاء عناوين جديدة في كل مرة تستخدم فيها عنوانًا ، لكن العناوين السابقة تستمر في العمل",
"email_address": "عنوان البريد الالكترونى",
"enable": "يُمكَِن",
"enable_auto_node_switching": "تمكين تبديل العقدة التلقائية",
"enable_builtin_tor": "تمكين بنيت في تور",
"enable_for_auto_switching": "تمكين للتبديل التلقائي",
"enable_mempool_api": "MEMPOOL API للحصول على رسوم وتواريخ دقيقة",
"enable_replace_by_fee": "تمكين الاستبدال",
"enable_silent_payments_scanning": "ابدأ في مسح المدفوعات الصامتة ، حتى يتم الوصول إلى الطرف",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Нови адреси се генерират всеки път, когато използвате този, но и предишните продължават да работят",
"email_address": "Имейл адрес",
"enable": "Активиране",
"enable_auto_node_switching": "Активиране на автоматично превключване на възли",
"enable_builtin_tor": "Активирайте вграден Tor",
"enable_for_auto_switching": "Активирайте за автоматично превключване",
"enable_mempool_api": "Mempool API за точни такси и дати",
"enable_replace_by_fee": "Активиране на замяна по забрана",
"enable_silent_payments_scanning": "Започнете да сканирате безшумните плащания, докато се достигне съветът",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Po každém použití je generována nová adresa, ale předchozí adresy také stále fungují",
"email_address": "E-mailová adresa",
"enable": "Umožnit",
"enable_auto_node_switching": "Povolit automatické přepínání uzlů",
"enable_builtin_tor": "Povolte vestavěné tor",
"enable_for_auto_switching": "Povolit automatické přepínání",
"enable_mempool_api": "Mempool API pro přesné poplatky a data",
"enable_replace_by_fee": "Povolit výměnu podle poplatku",
"enable_silent_payments_scanning": "Začněte skenovat tiché platby, dokud není dosaženo špičky",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Wir generieren jedes Mal neue Adressen, wenn Sie eine verwenden, aber vorherige Adressen funktionieren weiterhin",
"email_address": "E-Mail-Adresse",
"enable": "Aktivieren",
"enable_auto_node_switching": "Aktivieren Sie die automatische Knotenschaltung",
"enable_builtin_tor": "Aktivieren Sie den bau-in tor",
"enable_for_auto_switching": "Aktivieren Sie die automatische Schaltung",
"enable_mempool_api": "Mempool-API für genaue Gebühren und Daten",
"enable_replace_by_fee": "Aktivieren Sie Ersatz für Fee",
"enable_silent_payments_scanning": "Scannen Sie nach Silent Payments ihrer Adresse",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "We generate new addresses each time you use one, but previous addresses continue to work",
"email_address": "Email Address",
"enable": "Enable",
"enable_auto_node_switching": "Enable Automatic Node Switching",
"enable_builtin_tor": "Enable built-in Tor",
"enable_for_auto_switching": "Enable for Auto-Switching",
"enable_mempool_api": "Mempool API for accurate fees and dates",
"enable_replace_by_fee": "Enable Replace-By-Fee",
"enable_silent_payments_scanning": "Start scanning for transactions sent to your Silent Payment address.",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Generamos nuevas direcciones cada vez que usa una, pero las direcciones anteriores siguen funcionando",
"email_address": "Dirección de correo electrónico",
"enable": "Permitir",
"enable_auto_node_switching": "Habilitar la conmutación de nodo automático",
"enable_builtin_tor": "Habilitar Tor incorporado",
"enable_for_auto_switching": "Habilitar para el cambio automático",
"enable_mempool_api": "API de Mempool para tarifas y fechas precisas",
"enable_replace_by_fee": "Habilitar reemplazar por tarea",
"enable_silent_payments_scanning": "Comienza a escanear pagos silenciosos, hasta que se alcance la altura actual",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Nous générons de nouvelles adresses à chaque fois que vous en utilisez une, mais les adresses précédentes continuent à fonctionner",
"email_address": "Adresse e-mail",
"enable": "Activer",
"enable_auto_node_switching": "Activer la commutation automatique du nœud",
"enable_builtin_tor": "Activer le Tor construit",
"enable_for_auto_switching": "Activer pour le commutation automatique",
"enable_mempool_api": "API Mempool pour les frais et dates précis",
"enable_replace_by_fee": "Activer Remplace-by-Fee",
"enable_silent_payments_scanning": "Commencez à analyser les transactions envoyées à votre adresse de paiement silencieux.",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Muna samar da sababbin adireshi duk lokacin da kuka yi amfani da ɗaya, amma adiresoshin da suka gabata suna ci gaba da aiki",
"email_address": "Adireshin i-mel",
"enable": "Ba dama",
"enable_auto_node_switching": "Yana ba da damar kunna kumburi ta atomatik",
"enable_builtin_tor": "Sanya riguna-inf",
"enable_for_auto_switching": "Kunna don sauyawa na atomatik",
"enable_mempool_api": "Mampool API don ingantattun kudade da kwanakin",
"enable_replace_by_fee": "Ba da damar maye gurbin-by-kudin",
"enable_silent_payments_scanning": "Fara bincika biya na shiru, har sai tip ɗin ya kai",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "हर बार जब आप एक का उपयोग करते हैं तो हम नए पते उत्पन्न करते हैं, लेकिन पिछले पते काम करना जारी रखते हैं",
"email_address": "ईमेल पता",
"enable": "सक्षम",
"enable_auto_node_switching": "स्वचालित नोड स्विचिंग सक्षम करें",
"enable_builtin_tor": "बिल्ट-इन टोर को सक्षम करें",
"enable_for_auto_switching": "ऑटो-स्विचिंग के लिए सक्षम करें",
"enable_mempool_api": "सटीक शुल्क और तिथियों के लिए मेमपूल एपीआई",
"enable_replace_by_fee": "प्रतिस्थापित-दर-शुल्क सक्षम करें",
"enable_silent_payments_scanning": "मूक भुगतान स्कैनिंग सक्षम करें",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Minden egyes alkalommal új címeket generálunk, de a korábbi címek továbbra is működnek",
"email_address": "Adresa e-pošte",
"enable": "Omogućiti",
"enable_auto_node_switching": "Omogući automatsko prebacivanje čvorova",
"enable_builtin_tor": "Omogućite ugrađeni u tor",
"enable_for_auto_switching": "Omogućite automatsko prebacivanje",
"enable_mempool_api": "Mempool API za točne naknade i datume",
"enable_replace_by_fee": "Omogući zamjenu",
"enable_silent_payments_scanning": "Započnite skeniranje tihih plaćanja, dok se ne postigne savjet",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Մենք ստեղծում ենք նոր հասցե ամեն անգամ, երբ դուք օգտագործում եք այն, բայց նախորդ հասցեները շարունակում են աշխատել",
"email_address": "Էլ. փոստի հասցե",
"enable": "Միացնել",
"enable_auto_node_switching": "Միացնել ավտոմատ հանգույցի անջատումը",
"enable_builtin_tor": "Միացրեք ներկառուցված ջահը",
"enable_for_auto_switching": "Միացնել ավտոմատ անջատումը",
"enable_mempool_api": "Mempool API ճշգրիտ վճարների եւ ամսաթվերի համար",
"enable_replace_by_fee": "Միացնել փոխարինումը միջնորդավճարով",
"enable_silent_payments_scanning": "Միացնել Լուռ Վճարումների սկանավորումը",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Kami menghasilkan alamat baru setiap kali Anda menggunakan satu, tetapi alamat sebelumnya tetap berfungsi",
"email_address": "Alamat Email",
"enable": "Memungkinkan",
"enable_auto_node_switching": "Aktifkan switching simpul otomatis",
"enable_builtin_tor": "Aktifkan built-in tor",
"enable_for_auto_switching": "Aktifkan untuk pengalihan otomatis",
"enable_mempool_api": "API Mempool untuk biaya dan tanggal yang akurat",
"enable_replace_by_fee": "Aktifkan ganti-by-fee",
"enable_silent_payments_scanning": "Mulailah memindai pembayaran diam, sampai ujung tercapai",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Generiamo nuovi indirizzi ogni volta che ne utilizzi uno, ma gli indirizzi precedenti continuano a funzionare",
"email_address": "Indirizzo e-mail",
"enable": "Abilita",
"enable_auto_node_switching": "Abilita la commutazione del nodo automatico",
"enable_builtin_tor": "Abilita buildi-in tor",
"enable_for_auto_switching": "Abilita per il cambio automatico",
"enable_mempool_api": "API Mempool per commissioni e date accurate",
"enable_replace_by_fee": "Abilita Replace-By-Fee",
"enable_silent_payments_scanning": "Inizia a scansionare le transazioni inviate al tuo indirizzo Silent Payments",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "使用するたびに新しいアドレスが生成されますが、以前のアドレスは引き続き機能します",
"email_address": "メールアドレス",
"enable": "有効にする",
"enable_auto_node_switching": "自動ノードスイッチングを有効にします",
"enable_builtin_tor": "組み込みのTORを有効にします",
"enable_for_auto_switching": "自動スイッチを有効にします",
"enable_mempool_api": "正確な料金と日付のMempool API",
"enable_replace_by_fee": "交換ごとに有効にします",
"enable_silent_payments_scanning": "先端に達するまで、サイレント決済のスキャンを開始します",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "사용할 때마다 새 주소를 생성하지만 이전 주소도 계속 작동합니다",
"email_address": "이메일 주소",
"enable": "활성화",
"enable_auto_node_switching": "자동 노드 스위칭을 활성화합니다",
"enable_builtin_tor": "내장 Tor를 활성화하십시오",
"enable_for_auto_switching": "자동 전환을 가능하게합니다",
"enable_mempool_api": "정확한 수수료 및 날짜를 위한 Mempool API",
"enable_replace_by_fee": "RBF(Replace-By-Fee) 활성화",
"enable_silent_payments_scanning": "사일런트 페이먼트 주소로 전송된 트랜잭션 스캔 시작",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "သင်အသုံးပြုသည့်အချိန်တိုင်းတွင် ကျွန်ုပ်တို့သည် လိပ်စာအသစ်များကို ထုတ်ပေးသော်လည်း ယခင်လိပ်စာများသည် ဆက်လက်အလုပ်လုပ်နေပါသည်။",
"email_address": "အီးမေးလ်လိပ်စာ",
"enable": "စွမ်းဆောင်နိုင်စေ",
"enable_auto_node_switching": "အလိုအလျောက် node switching ကို enable",
"enable_builtin_tor": "built-in Tor ကို Enable လုပ်ပါ",
"enable_for_auto_switching": "Auto-switching အတွက်ဖွင့်ပါ",
"enable_mempool_api": "Mempool API တိကျသောအခကြေးငွေနှင့်ရက်စွဲများအတွက်",
"enable_replace_by_fee": "အစားထိုး - by- အခကြေးငွေ enable",
"enable_silent_payments_scanning": "အစွန်အဖျားသို့ရောက်ရှိသည်အထိအသံတိတ်ငွေပေးချေမှုကိုစကင်ဖတ်စစ်ဆေးပါ",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "We genereren nieuwe adressen elke keer dat u er een gebruikt, maar eerdere adressen blijven werken",
"email_address": "E-mailadres",
"enable": "Inschakelen",
"enable_auto_node_switching": "Schakel automatische knoopschakeling in",
"enable_builtin_tor": "Schakel ingebouwde tor in",
"enable_for_auto_switching": "Inschakelen voor automatisch schakelen",
"enable_mempool_api": "Mempool API voor nauwkeurige kosten en datums",
"enable_replace_by_fee": "Schakel vervangen door een fee",
"enable_silent_payments_scanning": "Begin met het scannen van stille betalingen, totdat de tip is bereikt",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Za każdym razem, gdy wykorzystasz adres, dla wiekszej prywatności generujemy nowy, ale poprzednie adresy nadal działają, i moga odbierać środki",
"email_address": "Adres e-mail",
"enable": "Włącz",
"enable_auto_node_switching": "Włącz automatyczne przełączanie węzłów",
"enable_builtin_tor": "Włącz wbudowany tor",
"enable_for_auto_switching": "Włącz do automatycznego przełączania",
"enable_mempool_api": "Mempool API dla dokładnych opłat i dat",
"enable_replace_by_fee": "Włącz wymianę po lewej",
"enable_silent_payments_scanning": "Zacznij skanować Silent Payments",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Geramos novos endereços cada vez que você usa um, mas os endereços anteriores continuam funcionando",
"email_address": "Endereço de e-mail",
"enable": "Habilitar",
"enable_auto_node_switching": "Ativar comutação automática de nó",
"enable_builtin_tor": "Ative o Buildi-in Tor",
"enable_for_auto_switching": "Ativar a troca automática",
"enable_mempool_api": "Mempool API para taxas e datas precisas",
"enable_replace_by_fee": "Habilite substituir por taxa",
"enable_silent_payments_scanning": "Comece a escanear pagamentos silenciosos, até que o topo seja alcançada",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Мы генерируем новые адреса каждый раз, когда вы их используете, но предыдущие адреса продолжают работать.",
"email_address": "Адрес электронной почты",
"enable": "Давать возможность",
"enable_auto_node_switching": "Включить автоматическое переключение узлов",
"enable_builtin_tor": "Включить встроенный в Tor",
"enable_for_auto_switching": "Включить для автоматического переключения",
"enable_mempool_api": "Mempool API за точные сборы и даты",
"enable_replace_by_fee": "Включить замену за пикой",
"enable_silent_payments_scanning": "Начните сканировать безмолвные платежи, пока не будет достигнут наконечник",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "เราสร้างที่อยู่ใหม่ทุกครั้งที่คุณใช้หนึ่งอย่าง แต่ที่อยู่เก่ายังสามารถใช้ได้ต่อไป",
"email_address": "ที่อยู่อีเมล",
"enable": "เปิดใช้งาน",
"enable_auto_node_switching": "เปิดใช้งานการสลับโหนดอัตโนมัติ",
"enable_builtin_tor": "เปิดใช้งาน Tor ในตัว",
"enable_for_auto_switching": "เปิดใช้งานการสลับอัตโนมัติ",
"enable_mempool_api": "Mempool API สำหรับค่าธรรมเนียมและวันที่ที่ถูกต้อง",
"enable_replace_by_fee": "เปิดใช้งานการเปลี่ยนโดยค่าธรรมเนียม",
"enable_silent_payments_scanning": "เริ่มสแกนการชำระเงินแบบเงียบจนกว่าจะถึงปลาย",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Bumubuo kami ng mga bagong address sa tuwing gagamit ka ng isa, ngunit ang mga nakaraang address ay patuloy na gumagana",
"email_address": "Email Address",
"enable": "Paganahin",
"enable_auto_node_switching": "Paganahin ang awtomatikong paglipat ng node",
"enable_builtin_tor": "Paganahin ang built-in tor",
"enable_for_auto_switching": "Paganahin para sa auto-switch",
"enable_mempool_api": "Mempool API para sa tumpak na bayad at mga petsa",
"enable_replace_by_fee": "Paganahin ang Replace-By-Fee",
"enable_silent_payments_scanning": "Simulan ang pag -scan ng tahimik na pagbabayad, hanggang sa maabot ang tip",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Adresini her kullandığında yeni adres oluşturuyoruz, ancak önceki adresler de çalışmaya devam eder",
"email_address": "E-posta Adresi",
"enable": "Olanak vermek",
"enable_auto_node_switching": "Otomatik Düğüm Anahtarlamasını Etkinleştir",
"enable_builtin_tor": "Yerleşik Tor'u etkinleştirin",
"enable_for_auto_switching": "Otomatik anahtarlama için etkinleştirin",
"enable_mempool_api": "Doğru ücretler ve tarihler için Mempool API'si",
"enable_replace_by_fee": "Farklı Değiştir'i Etkinleştir",
"enable_silent_payments_scanning": "Bahşiş ulaşılıncaya kadar sessiz ödemeleri taramaya başlayın",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "Ми створюємо нові адреси щоразу, коли ви використовуєте їх, але попередні адреси продовжують працювати",
"email_address": "Адреса електронної пошти",
"enable": "Ввімкнути",
"enable_auto_node_switching": "Увімкнути автоматичний перемикач вузлів",
"enable_builtin_tor": "Увімкнути вбудований tor",
"enable_for_auto_switching": "Увімкнути автоматичне перемикання",
"enable_mempool_api": "API Mempool для точних зборів та дат",
"enable_replace_by_fee": "Увімкнути заміну з комісією",
"enable_silent_payments_scanning": "Почніть сканувати мовчазні платежі, поки не буде досягнуто наконечника",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "جب بھی آپ ایک کا استعمال کرتے ہیں تو ہم نئے پتے تیار کرتے ہیں، لیکن پچھلے پتے کام کرتے رہتے ہیں۔",
"email_address": "ای میل اڈریس",
"enable": "قابل بنائیں",
"enable_auto_node_switching": "خودکار نوڈ سوئچنگ کو فعال کریں",
"enable_builtin_tor": "بلٹٹی ان ٹور کو فعال کریں",
"enable_for_auto_switching": "آٹو سوئچنگ کے لئے قابل بنائیں",
"enable_mempool_api": "درست فیسوں اور تاریخوں کے لئے میمپول API",
"enable_replace_by_fee": "فی فیس کو تبدیل کریں",
"enable_silent_payments_scanning": "خاموش ادائیگیوں کو اسکین کرنا شروع کریں ، جب تک کہ نوک نہ پہنچ جائے",
+2
View File
@@ -305,7 +305,9 @@
"electrum_address_disclaimer": "Chúng tôi tạo địa chỉ mới mỗi khi bạn sử dụng, nhưng các địa chỉ cũ vẫn tiếp tục hoạt động",
"email_address": "Địa chỉ Email",
"enable": "Cho phép",
"enable_auto_node_switching": "Bật chuyển đổi nút tự động",
"enable_builtin_tor": "Bật Buildi-In Tor",
"enable_for_auto_switching": "Kích hoạt để chuyển đổi tự động",
"enable_mempool_api": "API Mempool cho các khoản phí và ngày chính xác",
"enable_replace_by_fee": "Bật Thay thế Bằng Phí",
"enable_silent_payments_scanning": "Bật quét thanh toán im lặng",
+2
View File
@@ -307,7 +307,9 @@
"electrum_address_disclaimer": "A dá àwọn àdírẹ́sì títun ní gbogbo àwọn ìgbà t'ẹ́ lo ó kan ṣùgbọ́n ẹ lè tẹ̀síwájú lo àwọn àdírẹ́sì tẹ́lẹ̀tẹ́lẹ̀.",
"email_address": "Àdírẹ́sì ímeèlì",
"enable": "Mu ṣiṣẹ",
"enable_auto_node_switching": "Mu oju-ọna yiyọ laifọwọyi",
"enable_builtin_tor": "Mu ṣiṣẹ",
"enable_for_auto_switching": "Mu ṣiṣẹ fun adaṣe-pada",
"enable_mempool_api": "Mempool API fun awọn owo deede ati awọn ọjọ",
"enable_replace_by_fee": "Mu ki o rọpo",
"enable_silent_payments_scanning": "Bẹrẹ awọn sisanwo ipalọlọ, titi ti o fi de opin",
+2
View File
@@ -306,7 +306,9 @@
"electrum_address_disclaimer": "每次您使用一个地址时,我们都会生成新地址,但之前的地址仍然有效",
"email_address": "电子邮件地址",
"enable": "使能够",
"enable_auto_node_switching": "启用自动节点开关",
"enable_builtin_tor": "启用内置的tor",
"enable_for_auto_switching": "启用自动开关",
"enable_mempool_api": "Mempool API获得准确的费用和日期",
"enable_replace_by_fee": "启用by-Fee替换",
"enable_silent_payments_scanning": "开始扫描无声付款,直到达到提示",