CW-1090-ledger-issues (#2314)
* build: bump ledger_flutter_plus dependencies * fix: handle connection errors occurring during connecting to a ledger device * fix: enhance ledger error handling and improve wallet connection reliability * fix: enhance ledger error handling and improve wallet connection reliability * feat: add localized strings for "Try again" and update Ledger error handling on auth * fix: handle rethrow behavior in onAuthenticationStateChange * fix: improve Ledger error handling and refine error code interpretation * fix: refine Ledger error code interpretation and enhance error handling [skip-ci] * add missing ledger error codes --------- Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
Konstantin Ullrich committed
Jun 19, 2025 at 19:00 UTC
18c2ba93668dce0239859809a141493f89006906
36 files changed
+159
-31
cw_evm/pubspec.yaml
+1
@@ -30,6 +30,7 @@ dependencies:
30
git:
31
url: https://github.com/cake-tech/ledger-flutter-plus-plugins
32
path: packages/ledger-ethereum
33
+ ref: f4761cd5171d4c1e2e42fd3298261650539fb2db
34
35
dependency_overrides:
36
web3dart:
lib/core/wallet_loading_service.dart
+3
@@ -73,8 +73,11 @@ class WalletLoadingService {
73
return wallet;
74
} catch (error, stack) {
75
await ExceptionHandler.resetLastPopupDate();
76
+ final isLedgerError = await ExceptionHandler.isLedgerError(error);
77
+ if (isLedgerError) rethrow;
78
await ExceptionHandler.onError(FlutterErrorDetails(exception: error, stack: stack));
79
80
+
81
// try fetching the seeds of the corrupted wallet to show it to the user
82
String corruptedWalletsSeeds = "Corrupted wallets seeds (if retrievable, empty otherwise):";
83
try {
lib/reactions/on_authentication_state_change.dart
+43
-7
@@ -9,6 +9,7 @@ import 'package:cake_wallet/routes.dart';
9
import 'package:cake_wallet/src/screens/connect_device/connect_device_page.dart';
10
import 'package:cake_wallet/src/screens/wallet_connect/services/bottom_sheet_service.dart';
11
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
12
+import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
13
import 'package:cake_wallet/store/authentication_store.dart';
14
import 'package:cake_wallet/store/settings_store.dart';
15
import 'package:cake_wallet/utils/exception_handler.dart';
@@ -63,14 +64,49 @@ void startAuthenticationStateChange(
64
monero!.setGlobalLedgerConnection(ledgerVM.connection);
65
showPopUp<void>(
66
context: context,
66
- builder: (BuildContext context) => AlertWithOneAction(
67
- alertTitle: S.of(context).proceed_on_device,
68
- alertContent: S.of(context).proceed_on_device_description,
69
- buttonText: S.of(context).cancel,
70
- alertBarrierDismissible: false,
71
- buttonAction: () => Navigator.of(context).pop()),
67
+ builder: (context) => AlertWithOneAction(
68
+ alertTitle: S.of(context).proceed_on_device,
69
+ alertContent: S.of(context).proceed_on_device_description,
70
+ buttonText: S.of(context).cancel,
71
+ alertBarrierDismissible: false,
72
+ buttonAction: () => Navigator.of(context).pop(),
73
+ ),
74
);
73
- await loadCurrentWallet();
75
+ bool tryOpening = true;
76
+ while (tryOpening) {
77
+ try {
78
+ await loadCurrentWallet();
79
+ tryOpening = false;
80
+ } on Exception catch (e) {
81
+ final errorCode = RegExp(r'0x\S*?(?= )').firstMatch(
82
+ e.toString());
83
+
84
+ final errorMessage = ledgerVM.interpretErrorCode(
85
+ errorCode?.group(0).toString().replaceAll("0x", "") ??
86
+ "");
87
+ if (errorMessage != null) {
88
+ await showPopUp<void>(
89
+ context: context,
90
+ builder: (context) => AlertWithTwoActions(
91
+ alertTitle: "Ledger Error",
92
+ alertContent: errorMessage,
93
+ leftButtonText: S.of(context).try_again,
94
+ alertBarrierDismissible: false,
95
+ actionLeftButton: () => Navigator.of(context).pop(),
96
+ rightButtonText: S.of(context).cancel,
97
+ actionRightButton: () {
98
+ tryOpening = false;
99
+ Navigator.of(context).pop();
100
+ },
101
+ ),
102
+ );
103
+ } else {
104
+ tryOpening = false;
105
+ rethrow;
106
+ }
107
+ }
108
+ }
109
+
110
getIt.get<BottomSheetService>().showNext();
111
await navigatorKey.currentState!
112
.pushNamedAndRemoveUntil(Routes.dashboard, (route) => false);
lib/src/screens/connect_device/connect_device_page.dart
+3
-2
@@ -165,8 +165,9 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
165
}
166
167
Future<void> _connectToDevice(LedgerDevice device) async {
168
- await widget.ledgerVM.connectLedger(device, widget.walletType);
169
- widget.onConnectDevice(context, widget.ledgerVM);
168
+ final isConnected =
169
+ await widget.ledgerVM.connectLedger(device, widget.walletType);
170
+ if (isConnected) widget.onConnectDevice(context, widget.ledgerVM);
171
}
172
173
String _getDeviceTileLeading(LedgerDeviceType deviceInfo) {
lib/utils/exception_handler.dart
+56
-1
@@ -4,8 +4,10 @@ import 'package:cake_wallet/di.dart';
4
import 'package:cake_wallet/entities/preferences_key.dart';
5
import 'package:cake_wallet/generated/i18n.dart';
6
import 'package:cake_wallet/main.dart';
7
+import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
8
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
9
import 'package:cake_wallet/store/app_store.dart';
10
+import 'package:cake_wallet/utils/package_info.dart';
11
import 'package:cake_wallet/utils/show_bar.dart';
12
import 'package:cake_wallet/utils/show_pop_up.dart';
13
import 'package:cw_core/root_dir.dart';
@@ -15,7 +17,6 @@ import 'package:flutter/foundation.dart';
17
import 'package:flutter/material.dart';
18
import 'package:flutter/services.dart';
19
import 'package:flutter_mailer/flutter_mailer.dart';
18
-import 'package:cake_wallet/utils/package_info.dart';
20
import 'package:shared_preferences/shared_preferences.dart';
21
22
class ExceptionHandler {
@@ -113,6 +114,8 @@ class ExceptionHandler {
114
}
115
116
static Future<void> onError(FlutterErrorDetails errorDetails) async {
117
+ if (await onLedgerError(errorDetails)) return;
118
+
119
if (kDebugMode || kProfileMode) {
120
FlutterError.presentError(errorDetails);
121
printV(errorDetails.toString());
@@ -183,6 +186,57 @@ class ExceptionHandler {
186
_hasError = false;
187
}
188
189
+ static const List<String> _ledgerErrors = [
190
+ 'Wrong Device Status',
191
+ 'PlatformException(133, Failed to write: (Unknown Error: 133), null, null)',
192
+ 'PlatformException(IllegalArgument, Unknown deviceId:',
193
+ 'ServiceNotSupportedException(ConnectionType.ble, Required service not supported. Write characteristic: false, Notify characteristic: false)',
194
+ 'Exception: 6e01', // Wrong App
195
+ 'Exception: 6d02',
196
+ 'Exception: 6511',
197
+ 'Exception: 6e00',
198
+ 'Exception: 6985',
199
+ 'Exception: 5515',
200
+ ];
201
+
202
+ static bool isLedgerError(Object exception) =>
203
+ _ledgerErrors.any((element) => exception.toString().contains(element));
204
+
205
+ static Future<bool> onLedgerError(FlutterErrorDetails errorDetails) async {
206
+ if (!isLedgerError(errorDetails.exception)) return false;
207
+
208
+ String? interpretErrorCode(String errorCode) {
209
+ if (errorCode.contains("6985")) {
210
+ return S.current.ledger_error_tx_rejected_by_user;
211
+ } else if (errorCode.contains("5515")) {
212
+ return S.current.ledger_error_device_locked;
213
+ } else
214
+ if (["6e01", "6d02", "6511", "6e00"].any((e) => errorCode.contains(e))) {
215
+ return S.current.ledger_error_wrong_app;
216
+ }
217
+ return null;
218
+ }
219
+
220
+ printV(errorDetails.exception);
221
+
222
+ if (navigatorKey.currentContext != null) {
223
+ await showPopUp<void>(
224
+ context: navigatorKey.currentContext!,
225
+ builder: (context) => AlertWithOneAction(
226
+ alertTitle: "Ledger Error",
227
+ alertContent:
228
+ interpretErrorCode(errorDetails.exception.toString()) ??
229
+ S.of(context).ledger_connection_error,
230
+ buttonText: S.of(context).close,
231
+ buttonAction: () => Navigator.of(context).pop(),
232
+ ),
233
+ );
234
+ }
235
+
236
+ _hasError = false;
237
+ return true;
238
+ }
239
+
240
/// Ignore User related errors or system errors
241
static bool _ignoreError(String error) =>
242
_ignoredErrors.any((element) => error.contains(element));
@@ -227,6 +281,7 @@ class ExceptionHandler {
281
"core/auth_service.dart:64",
282
"core/key_service.dart:14",
283
"core/wallet_loading_service.dart:139",
284
+ "Wrong Device Status: 0x5515 (UNKNOWN)",
285
];
286
287
static Future<void> _addDeviceInfo(File file) async {
lib/view_model/hardware_wallet/ledger_view_model.dart
+22
-16
@@ -96,7 +96,8 @@ abstract class LedgerViewModelBase with Store {
96
if (!Platform.isIOS) await ledgerPlusUSB.stopScanning();
97
}
98
99
- Future<void> connectLedger(sdk.LedgerDevice device, WalletType type) async {
99
+ Future<bool> connectLedger(sdk.LedgerDevice device, WalletType type) async {
100
+ if (_isConnecting) return false;
101
_isConnecting = true;
102
_connectingWalletType = type;
103
if (isConnected) {
@@ -110,17 +111,25 @@ abstract class LedgerViewModelBase with Store {
111
: ledgerPlusUSB;
112
113
if (_connectionChangeSubscription == null) {
113
- _connectionChangeSubscription =
114
- ledger.deviceStateChanges.listen(_connectionChangeListener);
114
+ _connectionChangeSubscription = ledger
115
+ .deviceStateChanges(device.id)
116
+ .listen(_connectionChangeListener);
117
}
118
117
- _connection = await ledger.connect(device);
119
+ try {
120
+ _connection = await ledger.connect(device);
121
+ _isConnecting = false;
122
+ return true;
123
+ } catch (e) {
124
+ printV(e);
125
+ }
126
_isConnecting = false;
127
+ return false;
128
}
129
130
StreamSubscription<sdk.BleConnectionState>? _connectionChangeSubscription;
131
sdk.LedgerConnection? _connection;
123
- bool _isConnecting = true;
132
+ bool _isConnecting = false;
133
WalletType? _connectingWalletType;
134
135
void _connectionChangeListener(sdk.BleConnectionState event) {
@@ -168,17 +177,14 @@ abstract class LedgerViewModelBase with Store {
177
}
178
179
String? interpretErrorCode(String errorCode) {
171
- switch (errorCode) {
172
- case "6985":
173
- return S.current.ledger_error_tx_rejected_by_user;
174
- case "5515":
175
- return S.current.ledger_error_device_locked;
176
- case "6d02": // UNKNOWN_APDU
177
- case "6511":
178
- case "6e00":
179
- return S.current.ledger_error_wrong_app;
180
- default:
181
- return null;
180
+ if (errorCode.contains("6985")) {
181
+ return S.current.ledger_error_tx_rejected_by_user;
182
+ } else if (errorCode.contains("5515")) {
183
+ return S.current.ledger_error_device_locked;
184
+ } else
185
+ if (["6e01", "6a87", "6d02", "6511", "6e00"].any((e) => errorCode.contains(e))) {
186
+ return S.current.ledger_error_wrong_app;
187
}
188
+ return null;
189
}
190
}
lib/view_model/wallet_hardware_restore_view_model.dart
+1
-3
@@ -80,11 +80,9 @@ abstract class WalletHardwareRestoreViewModelBase extends WalletCreationVM with
80
81
availableAccounts.addAll(accounts);
82
_nextIndex += limit;
83
- // } on LedgerException catch (e) {
84
- // error = ledgerViewModel.interpretErrorCode(e.errorCode.toRadixString(16));
83
} catch (e) {
84
printV(e);
87
- error = S.current.ledger_connection_error;
85
+ error = ledgerViewModel.interpretErrorCode(e.toString()) ?? S.current.ledger_connection_error;
86
}
87
88
isLoadingMoreAccounts = false;
pubspec_base.yaml
+2
-2
@@ -110,7 +110,7 @@ dependencies:
110
ledger_flutter_plus:
111
git:
112
url: https://github.com/vespr-wallet/ledger-flutter-plus
113
- ref: c2e341d8038f1108690ad6f80f7b4b7156aacc76
113
+ ref: 60817d4b20144f9da9029f5034790272795b9d38
114
hashlib: ^1.19.2
115
on_chain:
116
git:
@@ -165,7 +165,7 @@ dependency_overrides:
165
ledger_flutter_plus:
166
git:
167
url: https://github.com/vespr-wallet/ledger-flutter-plus
168
- ref: c2e341d8038f1108690ad6f80f7b4b7156aacc76
168
+ ref: 60817d4b20144f9da9029f5034790272795b9d38
169
web_socket_channel: ^3.0.2
170
freezed_annotation: 2.4.4
171
res/values/strings_ar.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "نوع النقل",
980
"trongrid_history": "تاريخ ترونغريد",
981
"trusted": "موثوق به",
982
+ "try_again": "حاول ثانية",
983
"tx_commit_exception_no_dust_on_change": "يتم رفض المعاملة مع هذا المبلغ. باستخدام هذه العملات المعدنية ، يمكنك إرسال ${min} دون تغيير أو ${max} الذي يعيد التغيير.",
984
"tx_commit_failed": "فشل ارتكاب المعاملة. يرجى الاتصال بالدعم.",
985
"tx_commit_failed_no_peers": "فشل المعاملة في البث ، يرجى المحاولة مرة أخرى في ثانية أو نحو ذلك",
res/values/strings_bg.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "Тип транспорт",
980
"trongrid_history": "Trongrid History",
981
"trusted": "Надежден",
982
+ "try_again": "Опитайте отново",
983
"tx_commit_exception_no_dust_on_change": "Сделката се отхвърля с тази сума. С тези монети можете да изпратите ${min} без промяна или ${max}, която връща промяна.",
984
"tx_commit_failed": "Компетацията на транзакцията не успя. Моля, свържете се с поддръжката.",
985
"tx_commit_failed_no_peers": "Сделката не успя да излъчи, моля, опитайте отново след секунда или така",
res/values/strings_cs.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "Typ transportu",
980
"trongrid_history": "Trongridní historie",
981
"trusted": "Důvěřovat",
982
+ "try_again": "Zkuste to znovu",
983
"tx_commit_exception_no_dust_on_change": "Transakce je zamítnuta s touto částkou. S těmito mincemi můžete odeslat ${min} bez změny nebo ${max}, které se vrátí změna.",
984
"tx_commit_failed": "Transakce COMPORT selhala. Kontaktujte prosím podporu.",
985
"tx_commit_failed_no_peers": "Transakce se nepodařilo vysílat, zkuste to prosím znovu za vteřinu",
res/values/strings_de.arb
+1
@@ -980,6 +980,7 @@
980
"transport_type": "Transporttyp",
981
"trongrid_history": "Trongrid-Historie",
982
"trusted": "Vertrauenswürdige",
983
+ "try_again": "Erneut versuchen",
984
"tx_commit_exception_no_dust_on_change": "Die Transaktion wird diesen Betrag abgelehnt. Mit diesen Münzen können Sie ${min} ohne Veränderung oder ${max} senden, die Änderungen zurückgeben.",
985
"tx_commit_failed": "Transaktionsausschüsse ist fehlgeschlagen. Bitte wenden Sie sich an Support.",
986
"tx_commit_failed_no_peers": "Transaktion konnte nicht übertragen werden. Bitte versuchen Sie es in einer Sekunde oder so erneut",
res/values/strings_en.arb
+1
@@ -980,6 +980,7 @@
980
"transport_type": "Transport Type",
981
"trongrid_history": "TronGrid history",
982
"trusted": "Trusted",
983
+ "try_again": "Try again",
984
"tx_commit_exception_no_dust_on_change": "The transaction is rejected with this amount. With these coins you can send ${min} without change or ${max} that returns change.",
985
"tx_commit_failed": "Transaction commit failed. Please contact support.",
986
"tx_commit_failed_no_peers": "Transaction failed to broadcast, please try again in a second or so",
res/values/strings_es.arb
+1
@@ -980,6 +980,7 @@
980
"transport_type": "Tipo de transporte",
981
"trongrid_history": "Historia trongrid",
982
"trusted": "de confianza",
983
+ "try_again": "Intentar otra vez",
984
"tx_commit_exception_no_dust_on_change": "La transacción se rechaza con esta cantidad. Con estas monedas puede enviar ${min} sin cambios o ${max} que devuelve el cambio.",
985
"tx_commit_failed": "La confirmación de transacción falló. Ponte en contacto con el soporte.",
986
"tx_commit_failed_no_peers": "La transacción no se transmitió, intenta nuevamente en un segundo más o menos",
res/values/strings_fr.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "Type de transport",
980
"trongrid_history": "Histoire de la trongride",
981
"trusted": "de confiance",
982
+ "try_again": "Essayer à nouveau",
983
"tx_commit_exception_no_dust_on_change": "La transaction est rejetée avec ce montant. Avec ces pièces, vous pouvez envoyer ${min} sans changement ou ${max} qui renvoie le changement.",
984
"tx_commit_failed": "La validation de la transaction a échoué. Veuillez contacter l'assistance.",
985
"tx_commit_failed_no_peers": "La transaction n'a pas été diffusée, veuillez réessayer dans une seconde environ",
res/values/strings_ha.arb
+1
@@ -981,6 +981,7 @@
981
"transport_type": "Nau'in sufuri",
982
"trongrid_history": "Tarihin Trongrid",
983
"trusted": "Amintacce",
984
+ "try_again": "Gwada kuma",
985
"tx_commit_exception_no_dust_on_change": "An ƙi ma'amala da wannan adadin. Tare da waɗannan tsabar kudi Zaka iya aika ${min}, ba tare da canji ba ko ${max} wanda ya dawo canzawa.",
986
"tx_commit_failed": "Ma'amala ya kasa. Da fatan za a tuntuɓi goyan baya.",
987
"tx_commit_failed_no_peers": "Kasuwanci ya kasa watsa, don Allah sake gwadawa a cikin na biyu ko",
res/values/strings_hi.arb
+1
@@ -981,6 +981,7 @@
981
"transport_type": "परिवहन प्रकार",
982
"trongrid_history": "ट्रॉन्ग्रिड का इतिहास",
983
"trusted": "भरोसा",
984
+ "try_again": "पुनः प्रयास करें",
985
"tx_commit_exception_no_dust_on_change": "लेनदेन को इस राशि से खारिज कर दिया जाता है। इन सिक्कों के साथ आप चेंज या ${min} के बिना ${max} को भेज सकते हैं जो परिवर्तन लौटाता है।",
986
"tx_commit_failed": "लेन -देन प्रतिबद्ध विफल। कृपया संपर्क समर्थन करें।",
987
"tx_commit_failed_no_peers": "लेन -देन प्रसारित करने में विफल रहा, कृपया एक या दो सेकंड में पुनः प्रयास करें",
res/values/strings_hr.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "Transportni tip",
980
"trongrid_history": "Povijest Trongrida",
981
"trusted": "vjerovao",
982
+ "try_again": "Pokušajte ponovo",
983
"tx_commit_exception_no_dust_on_change": "Transakcija se odbija s tim iznosom. Pomoću ovih kovanica možete poslati ${min} bez promjene ili ${max} koja vraća promjenu.",
984
"tx_commit_failed": "Obveza transakcije nije uspjela. Molimo kontaktirajte podršku.",
985
"tx_commit_failed_no_peers": "Transakcija nije uspjela emitirati, pokušajte ponovo u sekundi ili tako",
res/values/strings_hy.arb
+1
@@ -977,6 +977,7 @@
977
"transport_type": "Տրանսպորտի տեսակը",
978
"trongrid_history": "TronGrid պատմություն",
979
"trusted": "Վստահելի",
980
+ "try_again": "Կրկին փորձեք",
981
"tx_commit_exception_no_dust_on_change": "Փոխանցումը մերժվել է այս գումարով: Այս արժույթներով կարող եք ուղարկել ${min} առանց փոփոխության կամ ${max} որը վերադարձնում է փոփոխությունը",
982
"tx_commit_failed": "Փոխանցումը ձախողվել է: Խնդրում ենք դիմել աջակցությանը",
983
"tx_commit_failed_no_peers": "Գործարքը չի հաջողվել հեռարձակել, խնդրում ենք կրկին փորձել մեկ վայրկյանում",
res/values/strings_id.arb
+1
@@ -982,6 +982,7 @@
982
"transport_type": "Jenis transportasi",
983
"trongrid_history": "Sejarah Trongrid",
984
"trusted": "Dipercayai",
985
+ "try_again": "Coba lagi",
986
"tx_commit_exception_no_dust_on_change": "Transaksi ditolak dengan jumlah ini. Dengan koin ini Anda dapat mengirim ${min} tanpa perubahan atau ${max} yang mengembalikan perubahan.",
987
"tx_commit_failed": "Transaksi Gagal. Silakan hubungi Dukungan.",
988
"tx_commit_failed_no_peers": "Transaksi gagal untuk disiarkan, silakan coba lagi sebentar lagi",
res/values/strings_it.arb
+1
@@ -980,6 +980,7 @@
980
"transport_type": "Tipo di trasporto",
981
"trongrid_history": "Cronologia TronGrid",
982
"trusted": "Fidato",
983
+ "try_again": "Riprova",
984
"tx_commit_exception_no_dust_on_change": "La transazione viene respinta con questo importo. Con queste monete è possibile inviare ${min} senza modifiche o ${max} che restituisce il cambiamento.",
985
"tx_commit_failed": "Commit di transazione non riuscita. Si prega di contattare il supporto.",
986
"tx_commit_failed_no_peers": "Errore nella trasmissione della transazione, si prega di provare nuovamente",
res/values/strings_ja.arb
+1
@@ -980,6 +980,7 @@
980
"transport_type": "輸送タイプ",
981
"trongrid_history": "トロンリッドの歴史",
982
"trusted": "信頼できる",
983
+ "try_again": "もう一度やり直してください",
984
"tx_commit_exception_no_dust_on_change": "この金額ではトランザクションは拒否されます。 これらのコインを使用すると、おつりなしの ${min} またはおつりを返す ${max} を送信できます。",
985
"tx_commit_failed": "トランザクションコミットは失敗しました。サポートに連絡してください。",
986
"tx_commit_failed_no_peers": "トランザクションはブロードキャストに失敗しました。一瞬かそこらで再試行してください",
res/values/strings_ko.arb
+1
@@ -980,6 +980,7 @@
980
"transport_type": "전송 유형",
981
"trongrid_history": "TronGrid 내역",
982
"trusted": "신뢰됨",
983
+ "try_again": "다시 시도하십시오",
984
"tx_commit_exception_no_dust_on_change": "이 금액으로는 트랜잭션이 거부됩니다. 이 코인으로는 잔돈 없이 ${min}을(를) 보내거나 잔돈이 반환되는 ${max}을(를) 보낼 수 있습니다.",
985
"tx_commit_failed": "트랜잭션 커밋 실패. 지원팀에 문의하세요.",
986
"tx_commit_failed_no_peers": "트랜잭션 전파 실패. 잠시 후 다시 시도하세요.",
res/values/strings_my.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "သယ်ယူပို့ဆောင်ရေးအမျိုးအစား",
980
"trongrid_history": "Trongrid သမိုင်း",
981
"trusted": "ယုံတယ်။",
982
+ "try_again": "ထပ်ကြိုးစားပါ",
983
"tx_commit_exception_no_dust_on_change": "အဆိုပါငွေပေးငွေယူကဒီပမာဏနှင့်အတူပယ်ချခံရသည်။ ဤဒင်္ဂါးပြားများနှင့်အတူပြောင်းလဲမှုကိုပြန်လည်ပြောင်းလဲခြင်းသို့မဟုတ် ${min} မပါဘဲ ${max} ပေးပို့နိုင်သည်။",
984
"tx_commit_failed": "ငွေပေးငွေယူကျူးလွန်မှုပျက်ကွက်။ ကျေးဇူးပြုပြီးပံ့ပိုးမှုဆက်သွယ်ပါ။",
985
"tx_commit_failed_no_peers": "ငွေပေးငွေယူထုတ်လွှင့်ရန်ပျက်ကွက်ပါက ကျေးဇူးပြု. ဒုတိယသို့မဟုတ်ထိုအတိုင်းထပ်မံကြိုးစားပါ",
res/values/strings_nl.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "Transporttype",
980
"trongrid_history": "Trongrid geschiedenis",
981
"trusted": "vertrouwd",
982
+ "try_again": "Probeer het opnieuw",
983
"tx_commit_exception_no_dust_on_change": "De transactie wordt afgewezen met dit bedrag. Met deze munten kunt u ${min} verzenden zonder verandering of ${max} die wijziging retourneert.",
984
"tx_commit_failed": "Transactiebewissing is mislukt. Neem contact op met de ondersteuning.",
985
"tx_commit_failed_no_peers": "De transactie is niet uitgezonden, probeer het opnieuw binnen een seconde of zo",
res/values/strings_pl.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "Typ transportu",
980
"trongrid_history": "Historia Trongrida",
981
"trusted": "Zaufany",
982
+ "try_again": "Spróbuj ponownie",
983
"tx_commit_exception_no_dust_on_change": "Transakcja została odrzucana z tą kwotą. Za pomocą tych monet możesz wysłać ${min} bez reszty lub ${max}, które zwrócą resztę.",
984
"tx_commit_failed": "Zatwierdzenie transakcji nie powiodło się. Skontaktuj się z obsługą.",
985
"tx_commit_failed_no_peers": "Transakcja nie była transmitowana, spróbuj ponownie za około sekundę",
res/values/strings_pt.arb
+1
@@ -981,6 +981,7 @@
981
"transport_type": "Tipo de transporte",
982
"trongrid_history": "História de Trongrid",
983
"trusted": "confiável",
984
+ "try_again": "Tente novamente",
985
"tx_commit_exception_no_dust_on_change": "A transação é rejeitada com esse valor. Com essas moedas, você pode enviar ${min} sem alteração ou ${max} que retorna alterações.",
986
"tx_commit_failed": "A confirmação da transação falhou. Entre em contato com o suporte.",
987
"tx_commit_failed_no_peers": "A transação não foi transmitida, tente novamente em um segundo",
res/values/strings_ru.arb
+1
@@ -980,6 +980,7 @@
980
"transport_type": "Транспортный тип",
981
"trongrid_history": "История Тронгрида",
982
"trusted": "доверенный",
983
+ "try_again": "Попробуйте еще раз",
984
"tx_commit_exception_no_dust_on_change": "Транзакция отклоняется с этой суммой. С этими монетами вы можете отправлять ${min} без изменения или ${max}, которые возвращают изменение.",
985
"tx_commit_failed": "Комплект транзакции не удался. Пожалуйста, свяжитесь с поддержкой.",
986
"tx_commit_failed_no_peers": "Транзакция не смогла передать, попробуйте еще раз через секунду или около того",
res/values/strings_th.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "ประเภทการขนส่ง",
980
"trongrid_history": "ประวัติศาสตร์ Trongrid",
981
"trusted": "มั่นคง",
982
+ "try_again": "ลองอีกครั้ง",
983
"tx_commit_exception_no_dust_on_change": "ธุรกรรมถูกปฏิเสธด้วยจำนวนเงินนี้ ด้วยเหรียญเหล่านี้คุณสามารถส่ง ${min} โดยไม่ต้องเปลี่ยนแปลงหรือ ${max} ที่ส่งคืนการเปลี่ยนแปลง",
984
"tx_commit_failed": "การทำธุรกรรมล้มเหลว กรุณาติดต่อฝ่ายสนับสนุน",
985
"tx_commit_failed_no_peers": "การทำธุรกรรมล้มเหลวในการออกอากาศโปรดลองอีกครั้งในวินาทีหรือมากกว่านั้น",
res/values/strings_tl.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "Uri ng transportasyon",
980
"trongrid_history": "Kasaysayan ng TronGrid",
981
"trusted": "Pinagkakatiwalaan",
982
+ "try_again": "Subukang muli",
983
"tx_commit_exception_no_dust_on_change": "Ang transaksyon ay tinanggihan sa halagang ito. Sa mga barya na ito maaari kang magpadala ng ${min} nang walang sukli o ${max} na nagbabalik ng sukli.",
984
"tx_commit_failed": "Nabigo ang transaksyon. Mangyaring makipag-ugnay sa suporta.",
985
"tx_commit_failed_no_peers": "Nabigo ang transaksyon na mag -broadcast, mangyaring subukang muli sa isang segundo o higit pa",
res/values/strings_tr.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "Taşıma tipi",
980
"trongrid_history": "Trongrid tarihi",
981
"trusted": "Güvenilir",
982
+ "try_again": "Tekrar deneyin",
983
"tx_commit_exception_no_dust_on_change": "İşlem bu miktarla reddedilir. Bu madeni paralarla değişiklik yapmadan ${min} veya değişikliği döndüren ${max} gönderebilirsiniz.",
984
"tx_commit_failed": "İşlem taahhüdü başarısız oldu. Lütfen Destek ile iletişime geçin.",
985
"tx_commit_failed_no_peers": "İşlem yayın yapamadı, lütfen bir saniye içinde tekrar deneyin",
res/values/strings_uk.arb
+1
@@ -980,6 +980,7 @@
980
"transport_type": "Транспортний тип",
981
"trongrid_history": "Тронгрідська історія",
982
"trusted": "довіряють",
983
+ "try_again": "Спробуйте ще раз",
984
"tx_commit_exception_no_dust_on_change": "Транзакція відхилена цією сумою. За допомогою цих монет ви можете надіслати ${min} без змін або ${max}, що повертає зміни.",
985
"tx_commit_failed": "Транзакційна комісія не вдалося. Будь ласка, зв'яжіться з підтримкою.",
986
"tx_commit_failed_no_peers": "Транзакція не вдалося транслювати, спробуйте ще раз за секунду або близько того",
res/values/strings_ur.arb
+1
@@ -981,6 +981,7 @@
981
"transport_type": "ٹرانسپورٹ کی قسم",
982
"trongrid_history": "ٹرانگریڈ ہسٹری",
983
"trusted": "قابل اعتماد",
984
+ "try_again": "دوبارہ کوشش کریں",
985
"tx_commit_exception_no_dust_on_change": "اس رقم سے لین دین کو مسترد کردیا گیا ہے۔ ان سککوں کے ذریعہ آپ بغیر کسی تبدیلی کے ${min} یا ${max} بھیج سکتے ہیں جو لوٹتے ہیں۔",
986
"tx_commit_failed": "ٹرانزیکشن کمٹ ناکام ہوگیا۔ براہ کرم سپورٹ سے رابطہ کریں۔",
987
"tx_commit_failed_no_peers": "ٹرانزیکشن نشر کرنے میں ناکام ، براہ کرم ایک سیکنڈ یا اس میں دوبارہ کوشش کریں",
res/values/strings_vi.arb
+1
@@ -976,6 +976,7 @@
976
"transport_type": "Loại vận chuyển",
977
"trongrid_history": "Lịch sử TronGrid",
978
"trusted": "Đã tin cậy",
979
+ "try_again": "Hãy thử lại",
980
"tx_commit_exception_no_dust_on_change": "Giao dịch bị từ chối với số tiền này. Với số tiền này bạn có thể gửi ${min} mà không cần đổi tiền lẻ hoặc ${max} trả lại tiền lẻ.",
981
"tx_commit_failed": "Giao dịch không thành công. Vui lòng liên hệ với hỗ trợ.",
982
"tx_commit_failed_no_peers": "Giao dịch không phát sóng, vui lòng thử lại trong một giây hoặc lâu hơn",
res/values/strings_yo.arb
+1
@@ -980,6 +980,7 @@
980
"transport_type": "Iru irinna",
981
"trongrid_history": "Itan Trongrid",
982
"trusted": "A ti fọkàn ẹ̀ tán",
983
+ "try_again": "Gbiyanju lẹẹkansi",
984
"tx_commit_exception_no_dust_on_change": "Iṣowo naa ti kọ pẹlu iye yii. Pẹlu awọn owó wọnyi o le firanṣẹ ${min} laisi ayipada tabi ${max} ni iyipada iyipada.",
985
"tx_commit_failed": "Idunadura iṣowo kuna. Jọwọ kan si atilẹyin.",
986
"tx_commit_failed_no_peers": "Idunadura kuna lati wa igbohungbe, jọwọ gbiyanju lẹẹkansi ni iṣẹju keji tabi bẹẹ",
res/values/strings_zh.arb
+1
@@ -979,6 +979,7 @@
979
"transport_type": "运输类型",
980
"trongrid_history": "Trongrid历史",
981
"trusted": "值得信赖",
982
+ "try_again": "再试一次",
983
"tx_commit_exception_no_dust_on_change": "交易被此金额拒绝。使用这些硬币,您可以发送${min}无需更改或返回${max}的变化。",
984
"tx_commit_failed": "交易承诺失败。请联系支持。",
985
"tx_commit_failed_no_peers": "交易无法广播,请在一秒钟左右的时间内重试",