CW-515-WalletConnect-deeplink (#1153)
* feat: WalletConnect deeplink WIP * fix: Handle cases where a non ethereum address is in use when the trigger is made * fix: edgecases fixes for walletconect * fix: edgecases fixes for walletconect * Update pubspec_base.yaml * remove unused dependency * remove unused dependency --------- Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
Adegoke David committed
Nov 2, 2023 at 15:41 UTC
745607aa731862b4fe0e93a2033de5b06228898b
38 files changed
+180
-62
cw_bitcoin_cash/linux/flutter/ephemeral/.plugin_symlinks/path_provider_linux
+1
-1
@@ -1 +1 @@
1
-C:/Users/borod/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_linux-2.2.0/
\ No newline at end of file
1
+/Users/blazebrain/.pub-cache/hosted/pub.dev/path_provider_linux-2.2.1/
\ No newline at end of file
ios/Podfile.lock
+10
@@ -115,6 +115,9 @@ PODS:
115
- Flutter
116
- flutter_secure_storage (6.0.0):
117
- Flutter
118
+ - fluttertoast (0.0.2):
119
+ - Flutter
120
+ - Toast
121
- in_app_review (0.2.0):
122
- Flutter
123
- local_auth_ios (0.0.1):
@@ -143,6 +146,7 @@ PODS:
146
- FlutterMacOS
147
- SwiftProtobuf (1.22.0)
148
- SwiftyGif (5.4.4)
149
+ - Toast (4.0.0)
150
- uni_links (0.0.1):
151
- Flutter
152
- UnstoppableDomainsResolution (4.0.0):
@@ -171,6 +175,7 @@ DEPENDENCIES:
175
- flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`)
176
- flutter_mailer (from `.symlinks/plugins/flutter_mailer/ios`)
177
- flutter_secure_storage (from `.symlinks/plugins/flutter_secure_storage/ios`)
178
+ - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
179
- in_app_review (from `.symlinks/plugins/in_app_review/ios`)
180
- local_auth_ios (from `.symlinks/plugins/local_auth_ios/ios`)
181
- package_info (from `.symlinks/plugins/package_info/ios`)
@@ -198,6 +203,7 @@ SPEC REPOS:
203
- SDWebImage
204
- SwiftProtobuf
205
- SwiftyGif
206
+ - Toast
207
- UnstoppableDomainsResolution
208
209
EXTERNAL SOURCES:
@@ -229,6 +235,8 @@ EXTERNAL SOURCES:
235
:path: ".symlinks/plugins/flutter_mailer/ios"
236
flutter_secure_storage:
237
:path: ".symlinks/plugins/flutter_secure_storage/ios"
238
+ fluttertoast:
239
+ :path: ".symlinks/plugins/fluttertoast/ios"
240
in_app_review:
241
:path: ".symlinks/plugins/in_app_review/ios"
242
local_auth_ios:
@@ -275,6 +283,7 @@ SPEC CHECKSUMS:
283
flutter_inappwebview: 3d32228f1304635e7c028b0d4252937730bbc6cf
284
flutter_mailer: 2ef5a67087bc8c6c4cefd04a178bf1ae2c94cd83
285
flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
286
+ fluttertoast: fafc4fa4d01a6a9e4f772ecd190ffa525e9e2d9c
287
in_app_review: 318597b3a06c22bb46dc454d56828c85f444f99d
288
local_auth_ios: c6cf091ded637a88f24f86a8875d8b0f526e2605
289
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
@@ -290,6 +299,7 @@ SPEC CHECKSUMS:
299
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
300
SwiftProtobuf: 40bd808372cb8706108f22d28f8ab4a6b9bc6989
301
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
302
+ Toast: 91b396c56ee72a5790816f40d3a94dd357abc196
303
uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
304
UnstoppableDomainsResolution: c3c67f4d0a5e2437cb00d4bd50c2e00d6e743841
305
url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4
lib/core/wallet_connect/evm_chain_service.dart
+1
-1
@@ -6,7 +6,7 @@ import 'package:cake_wallet/core/wallet_connect/eth_transaction_model.dart';
6
import 'package:cake_wallet/core/wallet_connect/evm_chain_id.dart';
7
import 'package:cake_wallet/core/wallet_connect/wc_bottom_sheet_service.dart';
8
import 'package:cake_wallet/generated/i18n.dart';
9
-import 'package:cake_wallet/src/screens/wallet_connect/widgets/error_display_widget.dart';
9
+import 'package:cake_wallet/src/screens/wallet_connect/widgets/message_display_widget.dart';
10
import 'package:cake_wallet/store/app_store.dart';
11
import 'package:cake_wallet/core/wallet_connect/models/chain_key_model.dart';
12
import 'package:cake_wallet/core/wallet_connect/models/connection_model.dart';
lib/core/wallet_connect/web3wallet_service.dart
+19
-1
@@ -10,7 +10,7 @@ import 'package:cake_wallet/core/wallet_connect/models/auth_request_model.dart';
10
import 'package:cake_wallet/core/wallet_connect/models/chain_key_model.dart';
11
import 'package:cake_wallet/core/wallet_connect/models/session_request_model.dart';
12
import 'package:cake_wallet/src/screens/wallet_connect/widgets/connection_request_widget.dart';
13
-import 'package:cake_wallet/src/screens/wallet_connect/widgets/error_display_widget.dart';
13
+import 'package:cake_wallet/src/screens/wallet_connect/widgets/message_display_widget.dart';
14
import 'package:cake_wallet/src/screens/wallet_connect/widgets/modals/web3_request_modal.dart';
15
import 'package:cake_wallet/store/app_store.dart';
16
import 'package:eth_sig_util/eth_sig_util.dart';
@@ -200,6 +200,24 @@ abstract class Web3WalletServiceBase with Store {
200
);
201
}
202
203
+ @action
204
+ Future<void> pairWithUri(Uri uri) async {
205
+ try {
206
+ log('Pairing with URI: $uri');
207
+ await _web3Wallet.pair(uri: uri);
208
+ } on WalletConnectError catch (e) {
209
+ _bottomSheetHandler.queueBottomSheet(
210
+ isModalDismissible: true,
211
+ widget: BottomSheetMessageDisplayWidget(message: e.message),
212
+ );
213
+ } catch (e) {
214
+ _bottomSheetHandler.queueBottomSheet(
215
+ isModalDismissible: true,
216
+ widget: BottomSheetMessageDisplayWidget(message: e.toString()),
217
+ );
218
+ }
219
+ }
220
+
221
void _onPairingCreate(PairingEvent? args) {
222
log('Pairing Create Event: $args');
223
}
lib/di.dart
+5
@@ -51,6 +51,7 @@ import 'package:cake_wallet/src/screens/setup_2fa/setup_2fa_enter_code_page.dart
51
import 'package:cake_wallet/src/screens/support_chat/support_chat_page.dart';
52
import 'package:cake_wallet/src/screens/support_other_links/support_other_links_page.dart';
53
import 'package:cake_wallet/src/screens/wallet/wallet_edit_page.dart';
54
+import 'package:cake_wallet/src/screens/wallet_connect/wc_connections_listing_view.dart';
55
import 'package:cake_wallet/themes/theme_list.dart';
56
import 'package:cake_wallet/utils/device_info.dart';
57
import 'package:cake_wallet/store/anonpay/anonpay_transactions_store.dart';
@@ -1153,5 +1154,9 @@ Future<void> setup({
1154
return ManageNodesPage(isPow, nodeListViewModel: getIt.get<NodeListViewModel>());
1155
});
1156
1157
+ getIt.registerFactory(
1158
+ () => WalletConnectConnectionsView(web3walletService: getIt.get<Web3WalletService>()));
1159
+
1160
+
1161
_isSetupFinished = true;
1162
}
lib/router.dart
+8
@@ -1,6 +1,7 @@
1
import 'package:cake_wallet/anonpay/anonpay_info_base.dart';
2
import 'package:cake_wallet/anonpay/anonpay_invoice_info.dart';
3
import 'package:cake_wallet/core/totp_request_details.dart';
4
+import 'package:cake_wallet/core/wallet_connect/web3wallet_service.dart';
5
import 'package:cake_wallet/entities/contact_record.dart';
6
import 'package:cake_wallet/buy/order.dart';
7
import 'package:cake_wallet/entities/qr_view_data.dart';
@@ -49,6 +50,7 @@ import 'package:cake_wallet/src/screens/support_chat/support_chat_page.dart';
50
import 'package:cake_wallet/src/screens/support_other_links/support_other_links_page.dart';
51
import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_details_page.dart';
52
import 'package:cake_wallet/src/screens/unspent_coins/unspent_coins_list_page.dart';
53
+import 'package:cake_wallet/src/screens/wallet_connect/wc_connections_listing_view.dart';
54
import 'package:cake_wallet/utils/payment_request.dart';
55
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
56
import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart';
@@ -594,6 +596,12 @@ Route<dynamic> createRoute(RouteSettings settings) {
596
case Routes.managePowNodes:
597
return MaterialPageRoute<void>(builder: (_) => getIt.get<ManageNodesPage>(param1: true));
598
599
+ case Routes.walletConnectConnectionsListing:
600
+ return MaterialPageRoute<void>(
601
+ builder: (_) => WalletConnectConnectionsView(
602
+ web3walletService: getIt.get<Web3WalletService>(),
603
+ launchUri: settings.arguments as Uri?,
604
+ ));
605
default:
606
return MaterialPageRoute<void>(
607
builder: (_) => Scaffold(
lib/routes.dart
+1
-1
@@ -98,5 +98,5 @@ class Routes {
98
static const editToken = '/edit_token';
99
static const manageNodes = '/manage_nodes';
100
static const managePowNodes = '/manage_pow_nodes';
101
-
101
+ static const walletConnectConnectionsListing = '/wallet-connect-connections-listing';
102
}
lib/src/screens/root/root.dart
+47
-6
@@ -1,15 +1,17 @@
1
import 'dart:async';
2
import 'package:cake_wallet/core/auth_service.dart';
3
import 'package:cake_wallet/core/totp_request_details.dart';
4
-import 'package:cake_wallet/core/wallet_connect/wc_bottom_sheet_service.dart';
4
+import 'package:cake_wallet/generated/i18n.dart';
5
import 'package:cake_wallet/utils/device_info.dart';
6
import 'package:cake_wallet/utils/payment_request.dart';
7
+import 'package:cw_core/wallet_type.dart';
8
import 'package:flutter/material.dart';
9
import 'package:cake_wallet/routes.dart';
10
import 'package:cake_wallet/src/screens/auth/auth_page.dart';
11
import 'package:cake_wallet/store/app_store.dart';
12
import 'package:cake_wallet/store/authentication_store.dart';
13
import 'package:cake_wallet/entities/qr_scanner.dart';
14
+import 'package:fluttertoast/fluttertoast.dart';
15
import 'package:uni_links/uni_links.dart';
16
17
import '../setup_2fa/setup_2fa_enter_code_page.dart';
@@ -139,8 +141,9 @@ class RootState extends State<Root> with WidgetsBindingObserver {
141
}
142
_reset();
143
totpAuth.close(
142
- route: _isValidPaymentUri() ? Routes.send : null,
143
- arguments: PaymentRequest.fromUri(launchUri),
144
+ route: _getRouteToGo(),
145
+ arguments:
146
+ isWalletConnectLink ? launchUri : PaymentRequest.fromUri(launchUri),
147
);
148
launchUri = null;
149
},
@@ -151,8 +154,8 @@ class RootState extends State<Root> with WidgetsBindingObserver {
154
} else {
155
_reset();
156
auth.close(
154
- route: _isValidPaymentUri() ? Routes.send : null,
155
- arguments: PaymentRequest.fromUri(launchUri),
157
+ route: _getRouteToGo(),
158
+ arguments: isWalletConnectLink ? launchUri : PaymentRequest.fromUri(launchUri),
159
);
160
launchUri = null;
161
}
@@ -166,8 +169,19 @@ class RootState extends State<Root> with WidgetsBindingObserver {
169
arguments: PaymentRequest.fromUri(launchUri),
170
);
171
launchUri = null;
172
+ } else if (isWalletConnectLink) {
173
+ if (widget.appStore.wallet!.type == WalletType.ethereum) {
174
+ widget.navigatorKey.currentState?.pushNamed(
175
+ Routes.walletConnectConnectionsListing,
176
+ arguments: launchUri,
177
+ );
178
+ launchUri = null;
179
+ } else {
180
+ _nonETHWalletErrorToast(S.current.switchToETHWallet);
181
+ }
182
}
170
-
183
+
184
+ launchUri = null;
185
return WillPopScope(
186
onWillPop: () async => false,
187
child: widget.child,
@@ -187,4 +201,31 @@ class RootState extends State<Root> with WidgetsBindingObserver {
201
}
202
203
bool _isValidPaymentUri() => launchUri?.path.isNotEmpty ?? false;
204
+
205
+ bool get isWalletConnectLink => launchUri?.authority == 'wc';
206
+
207
+ String? _getRouteToGo() {
208
+ if (isWalletConnectLink) {
209
+ if (widget.appStore.wallet!.type != WalletType.ethereum) {
210
+ _nonETHWalletErrorToast(S.current.switchToETHWallet);
211
+ return null;
212
+ }
213
+ return Routes.walletConnectConnectionsListing;
214
+ } else if (_isValidPaymentUri()) {
215
+ return Routes.send;
216
+ } else {
217
+ return null;
218
+ }
219
+ }
220
+
221
+ Future<void> _nonETHWalletErrorToast(String message) async {
222
+ Fluttertoast.showToast(
223
+ msg: message,
224
+ toastLength: Toast.LENGTH_LONG,
225
+ gravity: ToastGravity.SNACKBAR,
226
+ backgroundColor: Colors.black,
227
+ textColor: Colors.white,
228
+ fontSize: 16.0,
229
+ );
230
+ }
231
}
lib/src/screens/settings/connection_sync_page.dart
+1
-9
@@ -87,15 +87,7 @@ class ConnectionSyncPage extends BasePage {
87
),
88
if (dashboardViewModel.wallet.type == WalletType.ethereum) ...[
89
WalletConnectTile(
90
- onTap: () async {
91
- Navigator.of(context).push(
92
- MaterialPageRoute(
93
- builder: (context) {
94
- return WalletConnectConnectionsView(web3walletService: web3walletService!);
95
- },
96
- ),
97
- );
98
- },
90
+ onTap: () => Navigator.of(context).pushNamed(Routes.walletConnectConnectionsListing),
91
),
92
const StandardListSeparator(padding: EdgeInsets.symmetric(horizontal: 24)),
93
]
lib/src/screens/wallet_connect/wc_connections_listing_view.dart
+21
-10
@@ -19,7 +19,24 @@ import 'wc_pairing_detail_page.dart';
19
class WalletConnectConnectionsView extends StatelessWidget {
20
final Web3WalletService web3walletService;
21
22
- WalletConnectConnectionsView({required this.web3walletService, Key? key}) : super(key: key);
22
+ WalletConnectConnectionsView({required this.web3walletService, Uri? launchUri, Key? key})
23
+ : super(key: key) {
24
+ _triggerPairingFromDeeplink(launchUri);
25
+ }
26
+
27
+ void _triggerPairingFromDeeplink(Uri? launchUri) async {
28
+ if (launchUri == null) return;
29
+
30
+ final actualLinkList = launchUri.query.split("uri=");
31
+
32
+ final query = actualLinkList[1];
33
+
34
+ final uri = Uri.decodeComponent(query);
35
+
36
+ final uriData = Uri.parse(uri);
37
+
38
+ await web3walletService.pairWithUri(uriData);
39
+ }
40
41
@override
42
Widget build(BuildContext context) {
@@ -48,15 +65,9 @@ class WCPairingsWidget extends BasePage {
65
66
if (uri == null) return _invalidUriToast(context, S.current.nullURIError);
67
51
- try {
52
- log('_onFoundUri: $uri');
53
- final Uri uriData = Uri.parse(uri);
54
- await web3Wallet.pair(uri: uriData);
55
- } on WalletConnectError catch (e) {
56
- await _invalidUriToast(context, e.message);
57
- } catch (e) {
58
- await _invalidUriToast(context, e.toString());
59
- }
68
+ log('_onFoundUri: $uri');
69
+ final Uri uriData = Uri.parse(uri);
70
+ await web3walletService.pairWithUri(uriData);
71
}
72
73
Future<String?> _showEnterWalletConnectURIPopUp(BuildContext context) async {
lib/src/screens/wallet_connect/widgets/message_display_widget.dart
renamed
+13
-7
@@ -22,13 +22,19 @@ class BottomSheetMessageDisplayWidget extends StatelessWidget {
22
),
23
),
24
SizedBox(height: 8),
25
- Text(
26
- message,
27
- style: TextStyle(
28
- fontSize: 14,
29
- fontWeight: FontWeight.normal,
30
- color: Colors.white,
31
- ),
25
+ Row(
26
+ children: [
27
+ Expanded(
28
+ child: Text(
29
+ message,
30
+ style: TextStyle(
31
+ fontSize: 14,
32
+ fontWeight: FontWeight.normal,
33
+ color: Colors.white,
34
+ ),
35
+ ),
36
+ ),
37
+ ],
38
),
39
],
40
);
pubspec_base.yaml
+1
@@ -92,6 +92,7 @@ dependencies:
92
git:
93
url: https://github.com/cake-tech/bitcoin_flutter.git
94
ref: cake-update-v3
95
+ fluttertoast: 8.1.4
96
97
dev_dependencies:
98
flutter_test:
res/values/strings_ar.arb
+2
-1
@@ -722,5 +722,6 @@
722
"seed_key": "مفتاح البذور",
723
"enter_seed_phrase": "أدخل عبارة البذور الخاصة بك",
724
"add_contact": "ﻝﺎﺼﺗﺍ ﺔﻬﺟ ﺔﻓﺎﺿﺇ",
725
- "exchange_provider_unsupported": "${providerName} لم يعد مدعومًا!"
725
+ "exchange_provider_unsupported": "${providerName} لم يعد مدعومًا!",
726
+ "switchToETHWallet": "ﻯﺮﺧﺃ ﺓﺮﻣ ﺔﻟﻭﺎﺤﻤﻟﺍﻭ Ethereum ﺔﻈﻔﺤﻣ ﻰﻟﺇ ﻞﻳﺪﺒﺘﻟﺍ ﻰﺟﺮﻳ"
727
}
res/values/strings_bg.arb
+2
-1
@@ -718,5 +718,6 @@
718
"seed_key": "Ключ за семена",
719
"enter_seed_phrase": "Въведете вашата фраза за семена",
720
"add_contact": "Добави контакт",
721
- "exchange_provider_unsupported": "${providerName} вече не се поддържа!"
721
+ "exchange_provider_unsupported": "${providerName} вече не се поддържа!",
722
+ "switchToETHWallet": "Моля, преминете към портфейл Ethereum и опитайте отново"
723
}
res/values/strings_cs.arb
+2
-1
@@ -718,5 +718,6 @@
718
"seed_key": "Klíč semen",
719
"enter_seed_phrase": "Zadejte svou frázi semen",
720
"add_contact": "Přidat kontakt",
721
- "exchange_provider_unsupported": "${providerName} již není podporováno!"
721
+ "exchange_provider_unsupported": "${providerName} již není podporováno!",
722
+ "switchToETHWallet": "Přejděte na peněženku Ethereum a zkuste to znovu"
723
}
res/values/strings_de.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "Seed-Schlüssel",
727
"enter_seed_phrase": "Geben Sie Ihre Seed-Phrase ein",
728
"add_contact": "Kontakt hinzufügen",
729
- "exchange_provider_unsupported": "${providerName} wird nicht mehr unterstützt!"
729
+ "exchange_provider_unsupported": "${providerName} wird nicht mehr unterstützt!",
730
+ "switchToETHWallet": "Bitte wechseln Sie zu einem Ethereum-Wallet und versuchen Sie es erneut"
731
}
res/values/strings_en.arb
+2
-1
@@ -727,5 +727,6 @@
727
"seed_key": "Seed key",
728
"enter_seed_phrase": "Enter your seed phrase",
729
"add_contact": "Add contact",
730
- "exchange_provider_unsupported": "${providerName} is no longer supported!"
730
+ "exchange_provider_unsupported": "${providerName} is no longer supported!",
731
+ "switchToETHWallet": "Please switch to an Ethereum wallet and try again"
732
}
res/values/strings_es.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "Llave de semilla",
727
"enter_seed_phrase": "Ingrese su frase de semillas",
728
"add_contact": "Agregar contacto",
729
- "exchange_provider_unsupported": "¡${providerName} ya no es compatible!"
729
+ "exchange_provider_unsupported": "¡${providerName} ya no es compatible!",
730
+ "switchToETHWallet": "Cambie a una billetera Ethereum e inténtelo nuevamente."
731
}
res/values/strings_fr.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "Clé de graines",
727
"enter_seed_phrase": "Entrez votre phrase de semence",
728
"add_contact": "Ajouter le contact",
729
- "exchange_provider_unsupported": "${providerName} n'est plus pris en charge!"
729
+ "exchange_provider_unsupported": "${providerName} n'est plus pris en charge!",
730
+ "switchToETHWallet": "Veuillez passer à un portefeuille Ethereum et réessayer"
731
}
res/values/strings_ha.arb
+2
-1
@@ -704,5 +704,6 @@
704
"seed_key": "Maɓallin iri",
705
"enter_seed_phrase": "Shigar da Sert Sentarku",
706
"add_contact": "Ƙara lamba",
707
- "exchange_provider_unsupported": "${providerName}"
707
+ "exchange_provider_unsupported": "${providerName}",
708
+ "switchToETHWallet": "Da fatan za a canza zuwa walat ɗin Ethereum kuma a sake gwadawa"
709
}
res/values/strings_hi.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "बीज कुंजी",
727
"enter_seed_phrase": "अपना बीज वाक्यांश दर्ज करें",
728
"add_contact": "संपर्क जोड़ें",
729
- "exchange_provider_unsupported": "${providerName} अब समर्थित नहीं है!"
729
+ "exchange_provider_unsupported": "${providerName} अब समर्थित नहीं है!",
730
+ "switchToETHWallet": "कृपया एथेरियम वॉलेट पर स्विच करें और पुनः प्रयास करें"
731
}
res/values/strings_hr.arb
+2
-1
@@ -724,5 +724,6 @@
724
"seed_key": "Sjemenski ključ",
725
"enter_seed_phrase": "Unesite svoju sjemensku frazu",
726
"add_contact": "Dodaj kontakt",
727
- "exchange_provider_unsupported": "${providerName} više nije podržan!"
727
+ "exchange_provider_unsupported": "${providerName} više nije podržan!",
728
+ "switchToETHWallet": "Prijeđite na Ethereum novčanik i pokušajte ponovno"
729
}
res/values/strings_id.arb
+2
-1
@@ -714,5 +714,6 @@
714
"seed_key": "Kunci benih",
715
"enter_seed_phrase": "Masukkan frasa benih Anda",
716
"add_contact": "Tambah kontak",
717
- "exchange_provider_unsupported": "${providerName} tidak lagi didukung!"
717
+ "exchange_provider_unsupported": "${providerName} tidak lagi didukung!",
718
+ "switchToETHWallet": "Silakan beralih ke dompet Ethereum dan coba lagi"
719
}
res/values/strings_it.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "Chiave di semi",
727
"enter_seed_phrase": "Inserisci la tua frase di semi",
728
"add_contact": "Aggiungi contatto",
729
- "exchange_provider_unsupported": "${providerName} non è più supportato!"
729
+ "exchange_provider_unsupported": "${providerName} non è più supportato!",
730
+ "switchToETHWallet": "Passa a un portafoglio Ethereum e riprova"
731
}
res/values/strings_ja.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "シードキー",
727
"enter_seed_phrase": "シードフレーズを入力してください",
728
"add_contact": "連絡先を追加",
729
- "exchange_provider_unsupported": "${providerName}はサポートされなくなりました!"
729
+ "exchange_provider_unsupported": "${providerName}はサポートされなくなりました!",
730
+ "switchToETHWallet": "イーサリアムウォレットに切り替えてもう一度お試しください"
731
}
res/values/strings_ko.arb
+2
-1
@@ -724,5 +724,6 @@
724
"seed_key": "시드 키",
725
"enter_seed_phrase": "시드 문구를 입력하십시오",
726
"add_contact": "주소록에 추가",
727
- "exchange_provider_unsupported": "${providerName}은 더 이상 지원되지 않습니다!"
727
+ "exchange_provider_unsupported": "${providerName}은 더 이상 지원되지 않습니다!",
728
+ "switchToETHWallet": "이더리움 지갑으로 전환한 후 다시 시도해 주세요."
729
}
res/values/strings_my.arb
+2
-1
@@ -724,5 +724,6 @@
724
"seed_key": "မျိုးစေ့သော့",
725
"enter_seed_phrase": "သင့်ရဲ့မျိုးစေ့စကားစုကိုရိုက်ထည့်ပါ",
726
"add_contact": "အဆက်အသွယ်ထည့်ပါ။",
727
- "exchange_provider_unsupported": "${providerName} မရှိတော့ပါ!"
727
+ "exchange_provider_unsupported": "${providerName} မရှိတော့ပါ!",
728
+ "switchToETHWallet": "ကျေးဇူးပြု၍ Ethereum ပိုက်ဆံအိတ်သို့ ပြောင်းပြီး ထပ်စမ်းကြည့်ပါ။"
729
}
res/values/strings_nl.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "Zaadsleutel",
727
"enter_seed_phrase": "Voer uw zaadzin in",
728
"add_contact": "Contactpersoon toevoegen",
729
- "exchange_provider_unsupported": "${providerName} wordt niet langer ondersteund!"
729
+ "exchange_provider_unsupported": "${providerName} wordt niet langer ondersteund!",
730
+ "switchToETHWallet": "Schakel over naar een Ethereum-portemonnee en probeer het opnieuw"
731
}
res/values/strings_pl.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "Klucz nasion",
727
"enter_seed_phrase": "Wprowadź swoją frazę nasienną",
728
"add_contact": "Dodaj kontakt",
729
- "exchange_provider_unsupported": "${providerName} nie jest już obsługiwany!"
729
+ "exchange_provider_unsupported": "${providerName} nie jest już obsługiwany!",
730
+ "switchToETHWallet": "Przejdź na portfel Ethereum i spróbuj ponownie"
731
}
res/values/strings_pt.arb
+2
-1
@@ -725,5 +725,6 @@
725
"seed_key": "Chave de semente",
726
"enter_seed_phrase": "Digite sua frase de semente",
727
"add_contact": "Adicionar contato",
728
- "exchange_provider_unsupported": "${providerName} não é mais suportado!"
728
+ "exchange_provider_unsupported": "${providerName} não é mais suportado!",
729
+ "switchToETHWallet": "Mude para uma carteira Ethereum e tente novamente"
730
}
res/values/strings_ru.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "Ключ семян",
727
"enter_seed_phrase": "Введите свою семенную фразу",
728
"add_contact": "Добавить контакт",
729
- "exchange_provider_unsupported": "${providerName} больше не поддерживается!"
729
+ "exchange_provider_unsupported": "${providerName} больше не поддерживается!",
730
+ "switchToETHWallet": "Пожалуйста, переключитесь на кошелек Ethereum и повторите попытку."
731
}
res/values/strings_th.arb
+2
-1
@@ -724,5 +724,6 @@
724
"seed_key": "คีย์เมล็ดพันธุ์",
725
"enter_seed_phrase": "ป้อนวลีเมล็ดพันธุ์ของคุณ",
726
"add_contact": "เพิ่มผู้ติดต่อ",
727
- "exchange_provider_unsupported": "${providerName} ไม่ได้รับการสนับสนุนอีกต่อไป!"
727
+ "exchange_provider_unsupported": "${providerName} ไม่ได้รับการสนับสนุนอีกต่อไป!",
728
+ "switchToETHWallet": "โปรดเปลี่ยนไปใช้กระเป๋าเงิน Ethereum แล้วลองอีกครั้ง"
729
}
res/values/strings_tl.arb
+2
-1
@@ -721,5 +721,6 @@
721
"seed_key": "Seed Key",
722
"enter_seed_phrase": "Ipasok ang iyong pariralang binhi",
723
"add_contact": "Magdagdag ng contact",
724
- "exchange_provider_unsupported": "Ang ${providerName} ay hindi na suportado!"
724
+ "exchange_provider_unsupported": "Ang ${providerName} ay hindi na suportado!",
725
+ "switchToETHWallet": "Mangyaring lumipat sa isang Ethereum wallet at subukang muli"
726
}
res/values/strings_tr.arb
+2
-1
@@ -724,5 +724,6 @@
724
"seed_key": "Tohum",
725
"enter_seed_phrase": "Tohum ifadenizi girin",
726
"add_contact": "Kişi ekle",
727
- "exchange_provider_unsupported": "${providerName} artık desteklenmiyor!"
727
+ "exchange_provider_unsupported": "${providerName} artık desteklenmiyor!",
728
+ "switchToETHWallet": "Lütfen bir Ethereum cüzdanına geçin ve tekrar deneyin"
729
}
res/values/strings_uk.arb
+2
-1
@@ -726,5 +726,6 @@
726
"seed_key": "Насіннєвий ключ",
727
"enter_seed_phrase": "Введіть свою насіннєву фразу",
728
"add_contact": "Додати контакт",
729
- "exchange_provider_unsupported": "${providerName} більше не підтримується!"
729
+ "exchange_provider_unsupported": "${providerName} більше не підтримується!",
730
+ "switchToETHWallet": "Перейдіть на гаманець Ethereum і повторіть спробу"
731
}
res/values/strings_ur.arb
+2
-1
@@ -718,5 +718,6 @@
718
"seed_key": "بیج کی کلید",
719
"enter_seed_phrase": "اپنے بیج کا جملہ درج کریں",
720
"add_contact": "۔ﮟﯾﺮﮐ ﻞﻣﺎﺷ ﮧﻄﺑﺍﺭ",
721
- "exchange_provider_unsupported": "${providerName} اب تعاون نہیں کیا جاتا ہے!"
721
+ "exchange_provider_unsupported": "${providerName} اب تعاون نہیں کیا جاتا ہے!",
722
+ "switchToETHWallet": "۔ﮟﯾﺮﮐ ﺶﺷﻮﮐ ﮦﺭﺎﺑﻭﺩ ﺭﻭﺍ ﮟﯾﺮﮐ ﭻﺋﻮﺳ ﺮﭘ ﭧﯿﻟﺍﻭ Ethereum ﻡﺮﮐ ﮦﺍﺮﺑ"
723
}
res/values/strings_yo.arb
+2
-1
@@ -720,5 +720,6 @@
720
"seed_key": "Bọtini Ose",
721
"enter_seed_phrase": "Tẹ ọrọ-iru irugbin rẹ",
722
"add_contact": "Fi olubasọrọ kun",
723
- "exchange_provider_unsupported": "${providerName} ko ni atilẹyin mọ!"
723
+ "exchange_provider_unsupported": "${providerName} ko ni atilẹyin mọ!",
724
+ "switchToETHWallet": "Jọwọ yipada si apamọwọ Ethereum ki o tun gbiyanju lẹẹkansi"
725
}
res/values/strings_zh.arb
+2
-1
@@ -725,5 +725,6 @@
725
"seed_key": "种子钥匙",
726
"enter_seed_phrase": "输入您的种子短语",
727
"add_contact": "增加联系人",
728
- "exchange_provider_unsupported": "${providerName}不再支持!"
728
+ "exchange_provider_unsupported": "${providerName}不再支持!",
729
+ "switchToETHWallet": "请切换到以太坊钱包并重试"
730
}