SP Enhancments (#1483)

* fixes and minor enhancements for SP flow * fix build * change dfx text * minor fixes * pass use electrs to setListeners * comment out connecting on failure for now

Omar Hatem committed Jun 10, 2024 at 09:30 UTC 5a6502a35a27b9b611f24e3cc0d86a7953bceb88
30 files changed +86 -68
cw_bitcoin/lib/electrum_wallet.dart
+24 -16
@@ -96,13 +96,17 @@ abstract class ElectrumWalletBase
96 this.walletInfo = walletInfo;
97 transactionHistory = ElectrumTransactionHistory(walletInfo: walletInfo, password: password);
98
99 - reaction((_) => syncStatus, (SyncStatus syncStatus) {
100 - if (syncStatus is! AttemptingSyncStatus && syncStatus is! SyncedTipSyncStatus)
99 + reaction((_) => syncStatus, (SyncStatus syncStatus) async {
100 + if (syncStatus is! AttemptingSyncStatus && syncStatus is! SyncedTipSyncStatus) {
101 silentPaymentsScanningActive = syncStatus is SyncingSyncStatus;
102 + }
103
104 if (syncStatus is NotConnectedSyncStatus) {
105 // Needs to re-subscribe to all scripthashes when reconnected
106 _scripthashesUpdateSubject = {};
107 +
108 + // TODO: double check this and make sure it doesn't cause any un-necessary calls
109 + // await this.electrumClient.connectToUri(node!.uri, useSSL: node!.useSSL);
110 }
111
112 // Message is shown on the UI for 3 seconds, revert to synced
@@ -219,13 +223,13 @@ abstract class ElectrumWalletBase
223 } else {
224 alwaysScan = false;
225
222 - (await _isolate)?.kill(priority: Isolate.immediate);
226 + _isolate?.then((value) => value.kill(priority: Isolate.immediate));
227
228 if (electrumClient.isConnected) {
229 syncStatus = SyncedSyncStatus();
230 } else {
231 if (electrumClient.uri != null) {
228 - await electrumClient.connectToUri(electrumClient.uri!);
232 + await electrumClient.connectToUri(electrumClient.uri!, useSSL: electrumClient.useSSL);
233 startSync();
234 }
235 }
@@ -463,17 +467,7 @@ abstract class ElectrumWalletBase
467
468 await electrumClient.close();
469
466 - electrumClient.onConnectionStatusChange = (bool? isConnected) async {
467 - if (syncStatus is SyncingSyncStatus) return;
468 -
469 - if (isConnected == true && syncStatus is! SyncedSyncStatus) {
470 - syncStatus = ConnectedSyncStatus();
471 - } else if (isConnected == false) {
472 - syncStatus = LostConnectionSyncStatus();
473 - } else if (!(isConnected ?? false) && syncStatus is! ConnectingSyncStatus) {
474 - syncStatus = NotConnectedSyncStatus();
475 - }
476 - };
470 + electrumClient.onConnectionStatusChange = _onConnectionStatusChange;
471
472 await electrumClient.connectToUri(node.uri, useSSL: node.useSSL);
473 } catch (e) {
@@ -1139,7 +1133,7 @@ abstract class ElectrumWalletBase
1133 bool? usingElectrs,
1134 }) async {
1135 silentPaymentsScanningActive = true;
1142 - _setListeners(height, doSingleScan: doSingleScan);
1136 + _setListeners(height, doSingleScan: doSingleScan, usingElectrs: usingElectrs);
1137 }
1138
1139 @override
@@ -1657,6 +1651,7 @@ abstract class ElectrumWalletBase
1651 if (_isTransactionUpdating) {
1652 return;
1653 }
1654 + await getCurrentChainTip();
1655
1656 transactionHistory.transactions.values.forEach((tx) async {
1657 if (tx.unspents != null && tx.unspents!.isNotEmpty && tx.height > 0) {
@@ -1821,6 +1816,19 @@ abstract class ElectrumWalletBase
1816
1817 static String _hardenedDerivationPath(String derivationPath) =>
1818 derivationPath.substring(0, derivationPath.lastIndexOf("'") + 1);
1819 +
1820 + @action
1821 + void _onConnectionStatusChange(bool? isConnected) {
1822 + if (syncStatus is SyncingSyncStatus) return;
1823 +
1824 + if (isConnected == true && syncStatus is! SyncedSyncStatus) {
1825 + syncStatus = ConnectedSyncStatus();
1826 + } else if (isConnected == false) {
1827 + syncStatus = LostConnectionSyncStatus();
1828 + } else if (isConnected != true && syncStatus is! ConnectingSyncStatus) {
1829 + syncStatus = NotConnectedSyncStatus();
1830 + }
1831 + }
1832 }
1833
1834 class ScanNode {
lib/bitcoin/cw_bitcoin.dart
+10 -4
@@ -306,7 +306,7 @@ class CWBitcoin extends Bitcoin {
306 }
307
308 final electrumClient = ElectrumClient();
309 - await electrumClient.connectToUri(node.uri);
309 + await electrumClient.connectToUri(node.uri, useSSL: node.useSSL);
310
311 late BasedUtxoNetwork network;
312 btc.NetworkType networkType;
@@ -560,10 +560,16 @@ class CWBitcoin extends Bitcoin {
560 }
561
562 final bitcoinWallet = wallet as ElectrumWallet;
563 - final tweaksResponse = await bitcoinWallet.electrumClient.getTweaks(height: 0);
563 + try {
564 + final tweaksResponse = await bitcoinWallet.electrumClient.getTweaks(height: 0);
565
565 - if (tweaksResponse != null) {
566 - return true;
566 + if (tweaksResponse != null) {
567 + return true;
568 + }
569 + } on RequestFailedTimeoutException {
570 + return false;
571 + } catch (_) {
572 + rethrow;
573 }
574
575 return false;
lib/src/screens/root/root.dart
+5 -3
@@ -136,9 +136,11 @@ class RootState extends State<Root> with WidgetsBindingObserver {
136 break;
137 case AppLifecycleState.resumed:
138 widget.authService.requireAuth().then((value) {
139 - setState(() {
140 - _requestAuth = value;
141 - });
139 + if (mounted) {
140 + setState(() {
141 + _requestAuth = value;
142 + });
143 + }
144 });
145 break;
146 default:
lib/utils/exception_handler.dart
+21 -19
@@ -118,25 +118,27 @@ class ExceptionHandler {
118
119 WidgetsBinding.instance.addPostFrameCallback(
120 (timeStamp) async {
121 - await showPopUp<void>(
122 - context: navigatorKey.currentContext!,
123 - builder: (context) {
124 - return AlertWithTwoActions(
125 - isDividerExist: true,
126 - alertTitle: S.of(context).error,
127 - alertContent: S.of(context).error_dialog_content,
128 - rightButtonText: S.of(context).send,
129 - leftButtonText: S.of(context).do_not_send,
130 - actionRightButton: () {
131 - Navigator.of(context).pop();
132 - _sendExceptionFile();
133 - },
134 - actionLeftButton: () {
135 - Navigator.of(context).pop();
136 - },
137 - );
138 - },
139 - );
121 + if (navigatorKey.currentContext != null) {
122 + await showPopUp<void>(
123 + context: navigatorKey.currentContext!,
124 + builder: (context) {
125 + return AlertWithTwoActions(
126 + isDividerExist: true,
127 + alertTitle: S.of(context).error,
128 + alertContent: S.of(context).error_dialog_content,
129 + rightButtonText: S.of(context).send,
130 + leftButtonText: S.of(context).do_not_send,
131 + actionRightButton: () {
132 + Navigator.of(context).pop();
133 + _sendExceptionFile();
134 + },
135 + actionLeftButton: () {
136 + Navigator.of(context).pop();
137 + },
138 + );
139 + },
140 + );
141 + }
142
143 _hasError = false;
144 },
res/values/strings_ar.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "النزول",
198 "description": "ﻒﺻﻭ",
199 "destination_tag": "علامة الوجهة:",
200 - "dfx_option_description": "ﺎﺑﻭﺭﻭﺃ ﻲﻓ ﺕﺎﻛﺮﺸﻟﺍﻭ ﺔﺋﺰﺠﺘﻟﺍ ءﻼﻤﻌﻟ .ﻲﻓﺎﺿﺇ KYC ﻥﻭﺪﺑ ﻭﺭﻮﻳ 990 ﻰﻟﺇ ﻞﺼﻳ ﺎﻣ .ﻱﺮﺴﻳﻮﺴﻟﺍ",
200 + "dfx_option_description": "شراء التشفير مع EUR & CHF. لعملاء البيع بالتجزئة والشركات في أوروبا",
201 "didnt_get_code": "لم تحصل على رمز؟",
202 "digit_pin": "-رقم PIN",
203 "digital_and_physical_card": " بطاقة ائتمان رقمية ومادية مسبقة الدفع",
res/values/strings_bg.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Низходящ",
198 "description": "Описание",
199 "destination_tag": "Destination tag:",
200 - "dfx_option_description": "Купете крипто с EUR и CHF. До 990 € без допълнителен KYC. За клиенти на дребно и корпоративни клиенти в Европа",
200 + "dfx_option_description": "Купете криптовалута с Eur & CHF. За търговски и корпоративни клиенти в Европа",
201 "didnt_get_code": "Не получихте код?",
202 "digit_pin": "-цифрен PIN",
203 "digital_and_physical_card": " дигитална или физическа предплатена дебитна карта",
res/values/strings_cs.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Klesající",
198 "description": "Popis",
199 "destination_tag": "Destination Tag:",
200 - "dfx_option_description": "Nakupujte kryptoměny za EUR a CHF. Až 990 € bez dalších KYC. Pro maloobchodní a firemní zákazníky v Evropě",
200 + "dfx_option_description": "Koupit krypto s EUR & CHF. Pro maloobchodní a firemní zákazníky v Evropě",
201 "didnt_get_code": "Nepřišel Vám kód?",
202 "digit_pin": "-číselný PIN",
203 "digital_and_physical_card": " digitální a fyzické předplacené debetní karty,",
res/values/strings_de.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Absteigend",
198 "description": "Beschreibung",
199 "destination_tag": "Ziel-Tag:",
200 - "dfx_option_description": "Krypto mit EUR und CHF kaufen. Bis zu 990€ ohne zusätzliches KYC. Für Privat- und Firmenkunden in Europa",
200 + "dfx_option_description": "Kaufen Sie Krypto mit EUR & CHF. Für Einzelhandel und Unternehmenskunden in Europa",
201 "didnt_get_code": "Kein Code?",
202 "digit_pin": "-stellige PIN",
203 "digital_and_physical_card": "digitale und physische Prepaid-Debitkarte",
res/values/strings_en.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Descending",
198 "description": "Description",
199 "destination_tag": "Destination tag:",
200 - "dfx_option_description": "Buy crypto with EUR & CHF. Up to 990€ without additional KYC. For retail and corporate customers in Europe",
200 + "dfx_option_description": "Buy crypto with EUR & CHF. For retail and corporate customers in Europe",
201 "didnt_get_code": "Didn't get code?",
202 "digit_pin": "-digit PIN",
203 "digital_and_physical_card": " digital and physical prepaid debit card",
res/values/strings_es.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Descendente",
198 "description": "Descripción",
199 "destination_tag": "Etiqueta de destino:",
200 - "dfx_option_description": "Compre criptomonedas con EUR y CHF. Hasta 990€ sin KYC adicional. Para clientes minoristas y corporativos en Europa",
200 + "dfx_option_description": "Compre criptografía con EUR y CHF. Para clientes minoristas y corporativos en Europa",
201 "didnt_get_code": "¿No recibiste el código?",
202 "digit_pin": "-dígito PIN",
203 "digital_and_physical_card": " tarjeta de débito prepago digital y física",
res/values/strings_fr.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Descendant",
198 "description": "Description",
199 "destination_tag": "Tag de destination :",
200 - "dfx_option_description": "Achetez des crypto-monnaies avec EUR et CHF. Jusqu'à 990€ sans KYC supplémentaire. Pour les clients particuliers et entreprises en Europe",
200 + "dfx_option_description": "Achetez de la crypto avec EUR & CHF. Pour les clients de la vente au détail et des entreprises en Europe",
201 "didnt_get_code": "Vous n'avez pas reçu le code ?",
202 "digit_pin": " chiffres",
203 "digital_and_physical_card": "carte de débit prépayée numérique et physique",
res/values/strings_ha.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Saukowa",
198 "description": "Bayani",
199 "destination_tag": "Tambarin makoma:",
200 - "dfx_option_description": "Sayi crypto tare da EUR & CHF. Har zuwa € 990 ba tare da ƙarin KYC ba. Don 'yan kasuwa da abokan ciniki na kamfanoni a Turai",
200 + "dfx_option_description": "Buy crypto tare da Eur & Chf. Don Retail da abokan ciniki na kamfanoni a Turai",
201 "didnt_get_code": "Ba a samun code?",
202 "digit_pin": "-lambar PIN",
203 "digital_and_physical_card": "katin zare kudi na dijital da na zahiri",
res/values/strings_hi.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "अवरोही",
198 "description": "विवरण",
199 "destination_tag": "गंतव्य टैग:",
200 - "dfx_option_description": "EUR और CHF के साथ क्रिप्टो खरीदें। अतिरिक्त केवाईसी के बिना 990€ तक। यूरोप में खुदरा और कॉर्पोरेट ग्राहकों के लिए",
200 + "dfx_option_description": "EUR और CHF के साथ क्रिप्टो खरीदें। यूरोप में खुदरा और कॉर्पोरेट ग्राहकों के लिए",
201 "didnt_get_code": "कोड नहीं मिला?",
202 "digit_pin": "-अंक पिन",
203 "digital_and_physical_card": "डिजिटल और भौतिक प्रीपेड डेबिट कार्ड",
res/values/strings_hr.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Silazni",
198 "description": "Opis",
199 "destination_tag": "Odredišna oznaka:",
200 - "dfx_option_description": "Kupujte kripto s EUR i CHF. Do 990 € bez dodatnog KYC-a. Za maloprodajne i poslovne korisnike u Europi",
200 + "dfx_option_description": "Kupite kriptovalute s Eur & CHF. Za maloprodajne i korporativne kupce u Europi",
201 "didnt_get_code": "Ne dobivate kod?",
202 "digit_pin": "-znamenkasti PIN",
203 "digital_and_physical_card": "digitalna i fizička unaprijed plaćena debitna kartica",
res/values/strings_id.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Menurun",
198 "description": "Keterangan",
199 "destination_tag": "Tag tujuan:",
200 - "dfx_option_description": "Beli kripto dengan EUR & CHF. Hingga 990€ tanpa KYC tambahan. Untuk pelanggan ritel dan korporat di Eropa",
200 + "dfx_option_description": "Beli crypto dengan EUR & CHF. Untuk pelanggan ritel dan perusahaan di Eropa",
201 "didnt_get_code": "Tidak mendapatkan kode?",
202 "digit_pin": "-digit PIN",
203 "digital_and_physical_card": " kartu debit pra-bayar digital dan fisik",
res/values/strings_it.arb
+1 -1
@@ -198,7 +198,7 @@
198 "descending": "Discendente",
199 "description": "Descrizione",
200 "destination_tag": "Tag destinazione:",
201 - "dfx_option_description": "Acquista criptovalute con EUR e CHF. Fino a 990€ senza KYC aggiuntivi. Per clienti al dettaglio e aziendali in Europa",
201 + "dfx_option_description": "Acquista Crypto con EUR & CHF. Per i clienti al dettaglio e aziendali in Europa",
202 "didnt_get_code": "Non ricevi il codice?",
203 "digit_pin": "-cifre PIN",
204 "digital_and_physical_card": "carta di debito prepagata digitale e fisica",
res/values/strings_ja.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "下降",
198 "description": "説明",
199 "destination_tag": "宛先タグ:",
200 - "dfx_option_description": "EUR と CHF で暗号通貨を購入します。追加のKYCなしで最大990ユーロ。ヨーロッパの小売および法人顧客向け",
200 + "dfx_option_description": "EUR&CHFで暗号を購入します。ヨーロッパの小売および企業の顧客向け",
201 "didnt_get_code": "コードを取得しませんか?",
202 "digit_pin": "桁ピン",
203 "digital_and_physical_card": "デジタルおよび物理プリペイドデビットカード",
res/values/strings_ko.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "내림차순",
198 "description": "설명",
199 "destination_tag": "목적지 태그:",
200 - "dfx_option_description": "EUR 및 CHF로 암호화폐를 구매하세요. 추가 KYC 없이 최대 990€. 유럽의 소매 및 기업 고객용",
200 + "dfx_option_description": "EUR & CHF로 암호화를 구입하십시오. 유럽의 소매 및 기업 고객을 위해",
201 "didnt_get_code": "코드를 받지 못하셨습니까?",
202 "digit_pin": "숫자 PIN",
203 "digital_and_physical_card": " 디지털 및 실제 선불 직불 카드",
res/values/strings_my.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "ဆင်း",
198 "description": "ဖော်ပြချက်",
199 "destination_tag": "ခရီးဆုံးအမှတ်-",
200 - "dfx_option_description": "EUR & CHF ဖြင့် crypto ကိုဝယ်ပါ။ အပို KYC မပါဘဲ 990€ အထိ။ ဥရောပရှိ လက်လီရောင်းချသူများနှင့် ကော်ပိုရိတ်ဖောက်သည်များအတွက်",
200 + "dfx_option_description": "Crypto ကို EUR & CHF ဖြင့် 0 ယ်ပါ။ လက်လီရောင်းဝယ်မှုနှင့်ဥရောပရှိကော်ပိုရိတ်ဖောက်သည်များအတွက်",
201 "didnt_get_code": "ကုဒ်ကို မရဘူးလား?",
202 "digit_pin": "-ဂဏန်း PIN",
203 "digital_and_physical_card": " ဒစ်ဂျစ်တယ်နှင့် ရုပ်ပိုင်းဆိုင်ရာ ကြိုတင်ငွေပေးချေသော ဒက်ဘစ်ကတ်",
res/values/strings_nl.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Aflopend",
198 "description": "Beschrijving",
199 "destination_tag": "Bestemmingstag:",
200 - "dfx_option_description": "Koop crypto met EUR & CHF. Tot 990€ zonder extra KYC. Voor particuliere en zakelijke klanten in Europa",
200 + "dfx_option_description": "Koop crypto met EUR & CHF. Voor retail- en zakelijke klanten in Europa",
201 "didnt_get_code": "Geen code?",
202 "digit_pin": "-cijferige PIN",
203 "digital_and_physical_card": "digitale en fysieke prepaid debetkaart",
res/values/strings_pl.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Schodzenie",
198 "description": "Opis",
199 "destination_tag": "Tag docelowy:",
200 - "dfx_option_description": "Kupuj kryptowaluty za EUR i CHF. Do 990 € bez dodatkowego KYC. Dla klientów detalicznych i korporacyjnych w Europie",
200 + "dfx_option_description": "Kup krypto z EUR & CHF. Dla klientów detalicznych i korporacyjnych w Europie",
201 "didnt_get_code": "Nie dostałeś kodu?",
202 "digit_pin": "-znakowy PIN",
203 "digital_and_physical_card": " cyfrowa i fizyczna przedpłacona karta debetowa",
res/values/strings_pt.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "descendente",
198 "description": "Descrição",
199 "destination_tag": "Tag de destino:",
200 - "dfx_option_description": "Compre criptografia com EUR e CHF. Até 990€ sem KYC adicional. Para clientes de varejo e corporativos na Europa",
200 + "dfx_option_description": "Compre criptografia com EUR & CHF. Para clientes de varejo e corporativo na Europa",
201 "didnt_get_code": "Não recebeu o código?",
202 "digit_pin": "dígitos",
203 "digital_and_physical_card": "cartão de débito pré-pago digital e físico",
res/values/strings_ru.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Нисходящий",
198 "description": "Описание",
199 "destination_tag": "Целевой тег:",
200 - "dfx_option_description": "Покупайте криптовалюту за EUR и CHF. До 990€ без дополнительного KYC. Для розничных и корпоративных клиентов в Европе",
200 + "dfx_option_description": "Купить крипто с Eur & CHF. Для розничных и корпоративных клиентов в Европе",
201 "didnt_get_code": "Не получить код?",
202 "digit_pin": "-значный PIN",
203 "digital_and_physical_card": "цифровая и физическая предоплаченная дебетовая карта",
res/values/strings_th.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "ลงมา",
198 "description": "คำอธิบาย",
199 "destination_tag": "แท็กปลายทาง:",
200 - "dfx_option_description": "ซื้อ crypto ด้วย EUR และ CHF สูงถึง 990€ โดยไม่มี KYC เพิ่มเติม สำหรับลูกค้ารายย่อยและลูกค้าองค์กรในยุโรป",
200 + "dfx_option_description": "ซื้อ crypto ด้วย Eur & CHF สำหรับลูกค้ารายย่อยและลูกค้าในยุโรป",
201 "didnt_get_code": "ไม่ได้รับรหัส?",
202 "digit_pin": "-หลัก PIN",
203 "digital_and_physical_card": "บัตรเดบิตดิจิตอลและบัตรพื้นฐาน",
res/values/strings_tl.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Pababang",
198 "description": "Paglalarawan",
199 "destination_tag": "Tag ng patutunguhan:",
200 - "dfx_option_description": "Bumili ng crypto gamit ang EUR at CHF. Hanggang 990€ nang walang karagdagang KYC. Para sa retail at corporate na mga customer sa Europe",
200 + "dfx_option_description": "Bumili ng crypto kasama ang EUR & CHF. Para sa mga customer at corporate customer sa Europa",
201 "didnt_get_code": "Hindi nakuha ang code?",
202 "digit_pin": "-digit pin",
203 "digital_and_physical_card": "Digital at Physical Prepaid Debit Card",
res/values/strings_tr.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Azalan",
198 "description": "Tanım",
199 "destination_tag": "Hedef Etiketi:",
200 - "dfx_option_description": "EUR ve CHF ile kripto satın alın. Ek KYC olmadan 990 €'ya kadar. Avrupa'daki perakende ve kurumsal müşteriler için",
200 + "dfx_option_description": "Eur & chf ile kripto satın alın. Avrupa'daki perakende ve kurumsal müşteriler için",
201 "didnt_get_code": "Kod gelmedi mi?",
202 "digit_pin": " haneli PIN",
203 "digital_and_physical_card": " Dijital para birimleri ile para yükleyebileceğiniz ve ek bilgiye gerek olmayan",
res/values/strings_uk.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Низхідний",
198 "description": "опис",
199 "destination_tag": "Тег призначення:",
200 - "dfx_option_description": "Купуйте криптовалюту за EUR і CHF. До 990 євро без додаткового KYC. Для роздрібних і корпоративних клієнтів у Європі",
200 + "dfx_option_description": "Купуйте криптовалюту з EUR & CHF. Для роздрібних та корпоративних клієнтів у Європі",
201 "didnt_get_code": "Не отримуєте код?",
202 "digit_pin": "-значний PIN",
203 "digital_and_physical_card": " цифрова та фізична передплачена дебетова картка",
res/values/strings_ur.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "اترتے ہوئے",
198 "description": "ﻞﯿﺼﻔﺗ",
199 "destination_tag": "منزل کا ٹیگ:",
200 - "dfx_option_description": "EUR ﺭﻭﺍ CHF ﯽﻓﺎﺿﺍ ۔ﮟﯾﺪﯾﺮﺧ ﻮﭩﭘﺮﮐ ﮫﺗﺎﺳ ﮯﮐ KYC ﮯﯿﻟ ﮯﮐ ﻦﯿﻓﺭﺎﺻ ﭧﯾﺭﻮﭘﺭﺎﮐ ﺭﻭﺍ ﮦﺩﺭﻮﺧ ﮟ",
200 + "dfx_option_description": "یورو اور سی ایچ ایف کے ساتھ کرپٹو خریدیں۔ یورپ میں خوردہ اور کارپوریٹ صارفین کے لئے",
201 "didnt_get_code": "کوڈ نہیں ملتا؟",
202 "digit_pin": "-ہندسوں کا پن",
203 "digital_and_physical_card": " ڈیجیٹل اور فزیکل پری پیڈ ڈیبٹ کارڈ",
res/values/strings_yo.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "Sọkalẹ",
198 "description": "Apejuwe",
199 "destination_tag": "Orúkọ tí ìbí tó a ránṣẹ́ sí:",
200 - "dfx_option_description": "Ra crypto pẹlu EUR & CHF. Titi di 990 € laisi afikun KYC. Fun soobu ati awọn onibara ile-iṣẹ ni Yuroopu",
200 + "dfx_option_description": "Ra Crypto pẹlu EUR & CHF. Fun soobu ati awọn alabara ile-iṣẹ ni Yuroopu",
201 "didnt_get_code": "Ko gba koodu?",
202 "digit_pin": "-díjíìtì òǹkà ìdánimọ̀ àdáni",
203 "digital_and_physical_card": " káàdì ìrajà t'ara àti ti ayélujára",
res/values/strings_zh.arb
+1 -1
@@ -197,7 +197,7 @@
197 "descending": "下降",
198 "description": "描述",
199 "destination_tag": "目标Tag:",
200 - "dfx_option_description": "用欧元和瑞士法郎购买加密货币。高达 990 欧元,无需额外 KYC。对于欧洲的零售和企业客户",
200 + "dfx_option_description": "用Eur&Chf购买加密货币。对于欧洲的零售和企业客户",
201 "didnt_get_code": "没有获取代码?",
202 "digit_pin": "位 PIN",
203 "digital_and_physical_card": "数字和物理预付借记卡",