CW-1045-Ledger-Bugs-Enhancements (#2278)
* feat: prepare ledger.dart to use callbacks * feat: set ledger callback using monero_c * fix(cw_monero): async ledger * build: Bump monero_c dependencies * feat: Add "How to connect" to HW Device selection screen * refactor: use monero_c free to clean pointer * fix: use new monero_c deps * fix: merge conflicts regarding new theming * feat: add status bottomsheet indicating an ongoing signing process * fix: getLastLedgerCommand monero.dart generation * reformat send_view_model.dart [skip ci] --------- Co-authored-by: Czarek Nakamoto <cyjan@mrcyjanek.net> Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
Konstantin Ullrich committed
May 26, 2025 at 17:38 UTC
90aee053cd3ad243107dc667d52fac83bd7d7755
46 files changed
+656
-311
cw_monero/lib/api/wallet_manager.dart
+1
-3
@@ -388,9 +388,7 @@ Future<void> loadWallet(
388
if (gLedger == null) {
389
throw Exception("Tried to open a ledger wallet with no ledger connected");
390
}
391
- final dummyWPtr = (currentWallet ??
392
- wmPtr.openWallet(path: '', password: ''));
393
- enableLedgerExchange(dummyWPtr, gLedger!);
391
+ enableLedgerExchange(gLedger!);
392
}
393
394
final addr = wmPtr.ffiAddress();
cw_monero/lib/ledger.dart
+29
-56
@@ -2,75 +2,50 @@ import 'dart:async';
2
import 'dart:ffi';
3
import 'dart:typed_data';
4
5
-import 'package:collection/collection.dart';
5
import 'package:cw_core/utils/print_verbose.dart';
6
import 'package:ffi/ffi.dart';
7
+import 'package:flutter/foundation.dart';
8
import 'package:ledger_flutter_plus/ledger_flutter_plus.dart';
9
import 'package:ledger_flutter_plus/ledger_flutter_plus_dart.dart';
10
-import 'package:monero/src/wallet2.dart';
10
+import 'package:monero/src/monero.dart' as api;
11
12
LedgerConnection? gLedger;
13
+String? latestLedgerCommand;
14
14
-Timer? _ledgerExchangeTimer;
15
-Timer? _ledgerKeepAlive;
16
-
17
-void enableLedgerExchange(Wallet2Wallet wallet, LedgerConnection connection) {
18
- _ledgerExchangeTimer?.cancel();
19
- _ledgerExchangeTimer = Timer.periodic(Duration(milliseconds: 1), (_) async {
20
- final ledgerRequestLength = wallet.getSendToDeviceLength();
21
- final ledgerRequest = wallet.getSendToDevice()
22
- .cast<Uint8>()
23
- .asTypedList(ledgerRequestLength);
24
- if (ledgerRequestLength > 0) {
25
- _ledgerKeepAlive?.cancel();
26
-
27
- final Pointer<Uint8> emptyPointer = malloc<Uint8>(0);
28
- wallet.setDeviceSendData(
29
- emptyPointer.cast<UnsignedChar>(), 0);
30
- malloc.free(emptyPointer);
31
-
32
- _logLedgerCommand(ledgerRequest, false);
33
- final response = await exchange(connection, ledgerRequest);
34
- _logLedgerCommand(response, true);
35
-
36
- if (ListEquality().equals(response, [0x55, 0x15])) {
37
- await connection.disconnect();
38
- // // TODO: Show POPUP pls unlock your device
39
- // await Future.delayed(Duration(seconds: 15));
40
- // response = await exchange(connection, ledgerRequest);
41
- }
42
-
43
- final Pointer<Uint8> result = malloc<Uint8>(response.length);
44
- for (var i = 0; i < response.length; i++) {
45
- result.asTypedList(response.length)[i] = response[i];
46
- }
47
-
48
- wallet.setDeviceReceivedData(
49
- result.cast<UnsignedChar>(), response.length);
50
- malloc.free(result);
51
- keepAlive(connection);
15
+typedef LedgerCallback = Void Function(Pointer<UnsignedChar>, UnsignedInt);
16
+NativeCallable<LedgerCallback>? callable;
17
+
18
+void enableLedgerExchange(LedgerConnection connection) {
19
+ callable?.close();
20
+
21
+ void callback(Pointer<UnsignedChar> request, int requestLength) async {
22
+ final ledgerRequest = request.cast<Uint8>().asTypedList(requestLength);
23
+
24
+ _logLedgerCommand(ledgerRequest, false);
25
+ final response = await exchange(connection, ledgerRequest);
26
+ _logLedgerCommand(response, true);
27
+
28
+ final Pointer<Uint8> result = malloc<Uint8>(response.length);
29
+ for (var i = 0; i < response.length; i++) {
30
+ result.asTypedList(response.length)[i] = response[i];
31
}
53
- });
54
-}
32
56
-void keepAlive(LedgerConnection connection) {
57
- if (connection.connectionType == ConnectionType.ble) {
58
- _ledgerKeepAlive = Timer.periodic(Duration(seconds: 10), (_) async {
59
- UniversalBle.setNotifiable(
60
- connection.device.id,
61
- connection.device.deviceInfo.serviceId,
62
- connection.device.deviceInfo.notifyCharacteristicKey,
63
- BleInputProperty.notification,
64
- ).onError((_, __) async {});
65
- });
33
+ latestLedgerCommand = _ledgerMoneroCommands[ledgerRequest[1]];
34
+
35
+ api.MoneroWallet.setDeviceReceivedData(
36
+ result.cast<UnsignedChar>(), response.length);
37
+ api.MoneroFree().free(result.cast());
38
}
39
+
40
+ callable = NativeCallable<LedgerCallback>.listener(callback);
41
+ api.MoneroWallet.setLedgerCallback(callable!.nativeFunction);
42
}
43
44
void disableLedgerExchange() {
70
- _ledgerExchangeTimer?.cancel();
71
- _ledgerKeepAlive?.cancel();
45
+ callable?.close();
46
gLedger?.disconnect();
47
gLedger = null;
48
+ latestLedgerCommand = null;
49
}
50
51
Future<Uint8List> exchange(LedgerConnection connection, Uint8List data) async =>
@@ -135,8 +110,6 @@ void _logLedgerCommand(Uint8List command, [bool isResponse = true]) {
110
String toHexString(Uint8List data) =>
111
data.map((e) => e.toRadixString(16).padLeft(2, '0')).join();
112
138
-
139
-
113
if (isResponse) {
114
printV("< ${toHexString(command)}");
115
} else {
cw_monero/lib/monero_wallet.dart
+1
-2
@@ -927,8 +927,7 @@ abstract class MoneroWalletBase extends WalletBase<MoneroBalance,
927
}
928
929
void setLedgerConnection(LedgerConnection connection) {
930
- final dummyWPtr = createWalletPointer();
931
- enableLedgerExchange(dummyWPtr, connection);
930
+ enableLedgerExchange(connection);
931
}
932
933
@override
cw_monero/lib/monero_wallet_service.dart
+1
-6
@@ -294,12 +294,7 @@ class MoneroWalletService extends WalletService<
294
final password = credentials.password;
295
final height = credentials.height;
296
297
- if (currentWallet == null) {
298
- final tmpWptr = monero_wallet_manager.createWalletPointer();
299
- enableLedgerExchange(tmpWptr, credentials.ledgerConnection);
300
- } else {
301
- enableLedgerExchange(currentWallet!, credentials.ledgerConnection);
302
- }
297
+ enableLedgerExchange(credentials.ledgerConnection);
298
299
await monero_wallet_manager.restoreWalletFromHardwareWallet(
300
path: path,
cw_monero/pubspec.lock
+39
-39
@@ -42,10 +42,10 @@ packages:
42
dependency: transitive
43
description:
44
name: async
45
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
45
+ sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
46
url: "https://pub.dev"
47
source: hosted
48
- version: "2.11.0"
48
+ version: "2.12.0"
49
bip32:
50
dependency: "direct main"
51
description:
@@ -83,10 +83,10 @@ packages:
83
dependency: transitive
84
description:
85
name: boolean_selector
86
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
86
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
87
url: "https://pub.dev"
88
source: hosted
89
- version: "2.1.1"
89
+ version: "2.1.2"
90
bs58check:
91
dependency: transitive
92
description:
@@ -172,10 +172,10 @@ packages:
172
dependency: transitive
173
description:
174
name: characters
175
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
175
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
176
url: "https://pub.dev"
177
source: hosted
178
- version: "1.3.0"
178
+ version: "1.4.0"
179
checked_yaml:
180
dependency: transitive
181
description:
@@ -188,10 +188,10 @@ packages:
188
dependency: transitive
189
description:
190
name: clock
191
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
191
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
192
url: "https://pub.dev"
193
source: hosted
194
- version: "1.1.1"
194
+ version: "1.1.2"
195
code_builder:
196
dependency: transitive
197
description:
@@ -204,10 +204,10 @@ packages:
204
dependency: transitive
205
description:
206
name: collection
207
- sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
207
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
208
url: "https://pub.dev"
209
source: hosted
210
- version: "1.19.0"
210
+ version: "1.19.1"
211
convert:
212
dependency: transitive
213
description:
@@ -283,10 +283,10 @@ packages:
283
dependency: transitive
284
description:
285
name: fake_async
286
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
286
+ sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
287
url: "https://pub.dev"
288
source: hosted
289
- version: "1.3.1"
289
+ version: "1.3.2"
290
ffi:
291
dependency: "direct main"
292
description:
@@ -461,18 +461,18 @@ packages:
461
dependency: transitive
462
description:
463
name: leak_tracker
464
- sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
464
+ sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
465
url: "https://pub.dev"
466
source: hosted
467
- version: "10.0.7"
467
+ version: "10.0.8"
468
leak_tracker_flutter_testing:
469
dependency: transitive
470
description:
471
name: leak_tracker_flutter_testing
472
- sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
472
+ sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
473
url: "https://pub.dev"
474
source: hosted
475
- version: "3.0.8"
475
+ version: "3.0.9"
476
leak_tracker_testing:
477
dependency: transitive
478
description:
@@ -517,10 +517,10 @@ packages:
517
dependency: transitive
518
description:
519
name: matcher
520
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
520
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
521
url: "https://pub.dev"
522
source: hosted
523
- version: "0.12.16+1"
523
+ version: "0.12.17"
524
material_color_utilities:
525
dependency: transitive
526
description:
@@ -533,10 +533,10 @@ packages:
533
dependency: transitive
534
description:
535
name: meta
536
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
536
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
537
url: "https://pub.dev"
538
source: hosted
539
- version: "1.15.0"
539
+ version: "1.16.0"
540
mime:
541
dependency: transitive
542
description:
@@ -573,8 +573,8 @@ packages:
573
dependency: "direct main"
574
description:
575
path: "impls/monero.dart"
576
- ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
577
- resolved-ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
576
+ ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
577
+ resolved-ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
578
url: "https://github.com/mrcyjanek/monero_c"
579
source: git
580
version: "0.0.0"
@@ -615,10 +615,10 @@ packages:
615
dependency: transitive
616
description:
617
name: path
618
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
618
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
619
url: "https://pub.dev"
620
source: hosted
621
- version: "1.9.0"
621
+ version: "1.9.1"
622
path_provider:
623
dependency: "direct main"
624
description:
@@ -804,26 +804,26 @@ packages:
804
dependency: transitive
805
description:
806
name: source_span
807
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
807
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
808
url: "https://pub.dev"
809
source: hosted
810
- version: "1.10.0"
810
+ version: "1.10.1"
811
stack_trace:
812
dependency: transitive
813
description:
814
name: stack_trace
815
- sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
815
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
816
url: "https://pub.dev"
817
source: hosted
818
- version: "1.12.0"
818
+ version: "1.12.1"
819
stream_channel:
820
dependency: transitive
821
description:
822
name: stream_channel
823
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
823
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
824
url: "https://pub.dev"
825
source: hosted
826
- version: "2.1.2"
826
+ version: "2.1.4"
827
stream_transform:
828
dependency: transitive
829
description:
@@ -836,26 +836,26 @@ packages:
836
dependency: transitive
837
description:
838
name: string_scanner
839
- sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
839
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
840
url: "https://pub.dev"
841
source: hosted
842
- version: "1.3.0"
842
+ version: "1.4.1"
843
term_glyph:
844
dependency: transitive
845
description:
846
name: term_glyph
847
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
847
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
848
url: "https://pub.dev"
849
source: hosted
850
- version: "1.2.1"
850
+ version: "1.2.2"
851
test_api:
852
dependency: transitive
853
description:
854
name: test_api
855
- sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
855
+ sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
856
url: "https://pub.dev"
857
source: hosted
858
- version: "0.7.3"
858
+ version: "0.7.4"
859
timing:
860
dependency: transitive
861
description:
@@ -916,10 +916,10 @@ packages:
916
dependency: transitive
917
description:
918
name: vm_service
919
- sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
919
+ sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
920
url: "https://pub.dev"
921
source: hosted
922
- version: "14.3.0"
922
+ version: "14.3.1"
923
watcher:
924
dependency: "direct overridden"
925
description:
@@ -977,5 +977,5 @@ packages:
977
source: hosted
978
version: "3.1.3"
979
sdks:
980
- dart: ">=3.6.0 <4.0.0"
980
+ dart: ">=3.7.0-0 <4.0.0"
981
flutter: ">=3.24.0"
cw_monero/pubspec.yaml
+2
-3
@@ -2,11 +2,10 @@ name: cw_monero
2
description: A new flutter plugin project.
3
version: 0.0.1
4
publish_to: none
5
-author: Cake Wallet
5
homepage: https://cakewallet.com
6
7
environment:
9
- sdk: ">=2.19.0 <3.0.0"
8
+ sdk: ^3.5.0
9
flutter: ">=1.20.0"
10
11
dependencies:
@@ -27,7 +26,7 @@ dependencies:
26
monero:
27
git:
28
url: https://github.com/mrcyjanek/monero_c
30
- ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
29
+ ref: a27fbcb24d91143715ed930a05aaa4d853fba1f2
30
path: impls/monero.dart
31
mutex: ^3.1.0
32
ledger_flutter_plus: ^1.4.1
cw_wownero/pubspec.lock
+39
-39
@@ -37,10 +37,10 @@ packages:
37
dependency: transitive
38
description:
39
name: async
40
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
40
+ sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
41
url: "https://pub.dev"
42
source: hosted
43
- version: "2.11.0"
43
+ version: "2.12.0"
44
blockchain_utils:
45
dependency: transitive
46
description:
@@ -54,10 +54,10 @@ packages:
54
dependency: transitive
55
description:
56
name: boolean_selector
57
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
57
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
58
url: "https://pub.dev"
59
source: hosted
60
- version: "2.1.1"
60
+ version: "2.1.2"
61
build:
62
dependency: transitive
63
description:
@@ -135,10 +135,10 @@ packages:
135
dependency: transitive
136
description:
137
name: characters
138
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
138
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
139
url: "https://pub.dev"
140
source: hosted
141
- version: "1.3.0"
141
+ version: "1.4.0"
142
checked_yaml:
143
dependency: transitive
144
description:
@@ -151,10 +151,10 @@ packages:
151
dependency: transitive
152
description:
153
name: clock
154
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
154
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
155
url: "https://pub.dev"
156
source: hosted
157
- version: "1.1.1"
157
+ version: "1.1.2"
158
code_builder:
159
dependency: transitive
160
description:
@@ -167,10 +167,10 @@ packages:
167
dependency: transitive
168
description:
169
name: collection
170
- sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
170
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
171
url: "https://pub.dev"
172
source: hosted
173
- version: "1.19.0"
173
+ version: "1.19.1"
174
convert:
175
dependency: transitive
176
description:
@@ -238,10 +238,10 @@ packages:
238
dependency: transitive
239
description:
240
name: fake_async
241
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
241
+ sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
242
url: "https://pub.dev"
243
source: hosted
244
- version: "1.3.1"
244
+ version: "1.3.2"
245
ffi:
246
dependency: "direct main"
247
description:
@@ -400,18 +400,18 @@ packages:
400
dependency: transitive
401
description:
402
name: leak_tracker
403
- sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
403
+ sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
404
url: "https://pub.dev"
405
source: hosted
406
- version: "10.0.7"
406
+ version: "10.0.8"
407
leak_tracker_flutter_testing:
408
dependency: transitive
409
description:
410
name: leak_tracker_flutter_testing
411
- sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
411
+ sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
412
url: "https://pub.dev"
413
source: hosted
414
- version: "3.0.8"
414
+ version: "3.0.9"
415
leak_tracker_testing:
416
dependency: transitive
417
description:
@@ -432,10 +432,10 @@ packages:
432
dependency: transitive
433
description:
434
name: matcher
435
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
435
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
436
url: "https://pub.dev"
437
source: hosted
438
- version: "0.12.16+1"
438
+ version: "0.12.17"
439
material_color_utilities:
440
dependency: transitive
441
description:
@@ -448,10 +448,10 @@ packages:
448
dependency: transitive
449
description:
450
name: meta
451
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
451
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
452
url: "https://pub.dev"
453
source: hosted
454
- version: "1.15.0"
454
+ version: "1.16.0"
455
mime:
456
dependency: transitive
457
description:
@@ -480,8 +480,8 @@ packages:
480
dependency: "direct main"
481
description:
482
path: "impls/monero.dart"
483
- ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
484
- resolved-ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
483
+ ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
484
+ resolved-ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
485
url: "https://github.com/mrcyjanek/monero_c"
486
source: git
487
version: "0.0.0"
@@ -522,10 +522,10 @@ packages:
522
dependency: transitive
523
description:
524
name: path
525
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
525
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
526
url: "https://pub.dev"
527
source: hosted
528
- version: "1.9.0"
528
+ version: "1.9.1"
529
path_provider:
530
dependency: "direct main"
531
description:
@@ -695,26 +695,26 @@ packages:
695
dependency: transitive
696
description:
697
name: source_span
698
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
698
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
699
url: "https://pub.dev"
700
source: hosted
701
- version: "1.10.0"
701
+ version: "1.10.1"
702
stack_trace:
703
dependency: transitive
704
description:
705
name: stack_trace
706
- sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
706
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
707
url: "https://pub.dev"
708
source: hosted
709
- version: "1.12.0"
709
+ version: "1.12.1"
710
stream_channel:
711
dependency: transitive
712
description:
713
name: stream_channel
714
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
714
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
715
url: "https://pub.dev"
716
source: hosted
717
- version: "2.1.2"
717
+ version: "2.1.4"
718
stream_transform:
719
dependency: transitive
720
description:
@@ -727,26 +727,26 @@ packages:
727
dependency: transitive
728
description:
729
name: string_scanner
730
- sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
730
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
731
url: "https://pub.dev"
732
source: hosted
733
- version: "1.3.0"
733
+ version: "1.4.1"
734
term_glyph:
735
dependency: transitive
736
description:
737
name: term_glyph
738
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
738
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
739
url: "https://pub.dev"
740
source: hosted
741
- version: "1.2.1"
741
+ version: "1.2.2"
742
test_api:
743
dependency: transitive
744
description:
745
name: test_api
746
- sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
746
+ sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
747
url: "https://pub.dev"
748
source: hosted
749
- version: "0.7.3"
749
+ version: "0.7.4"
750
timing:
751
dependency: transitive
752
description:
@@ -791,10 +791,10 @@ packages:
791
dependency: transitive
792
description:
793
name: vm_service
794
- sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
794
+ sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
795
url: "https://pub.dev"
796
source: hosted
797
- version: "14.3.0"
797
+ version: "14.3.1"
798
watcher:
799
dependency: "direct overridden"
800
description:
@@ -844,5 +844,5 @@ packages:
844
source: hosted
845
version: "3.1.3"
846
sdks:
847
- dart: ">=3.5.0 <4.0.0"
847
+ dart: ">=3.7.0-0 <4.0.0"
848
flutter: ">=3.24.0"
cw_wownero/pubspec.yaml
+1
-2
@@ -2,7 +2,6 @@ name: cw_wownero
2
description: A new flutter plugin project.
3
version: 0.0.1
4
publish_to: none
5
-author: Cake Wallet
5
homepage: https://cakewallet.com
6
7
environment:
@@ -25,7 +24,7 @@ dependencies:
24
monero:
25
git:
26
url: https://github.com/mrcyjanek/monero_c
28
- ref: b335585a7fb94b315eb52bd88f2da6d3489fa508 # monero_c hash
27
+ ref: a27fbcb24d91143715ed930a05aaa4d853fba1f2 # monero_c hash
28
path: impls/monero.dart
29
mutex: ^3.1.0
30
cw_zano/pubspec.lock
+40
-40
@@ -37,10 +37,10 @@ packages:
37
dependency: transitive
38
description:
39
name: async
40
- sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
40
+ sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
41
url: "https://pub.dev"
42
source: hosted
43
- version: "2.11.0"
43
+ version: "2.12.0"
44
blockchain_utils:
45
dependency: transitive
46
description:
@@ -54,10 +54,10 @@ packages:
54
dependency: transitive
55
description:
56
name: boolean_selector
57
- sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
57
+ sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
58
url: "https://pub.dev"
59
source: hosted
60
- version: "2.1.1"
60
+ version: "2.1.2"
61
build:
62
dependency: transitive
63
description:
@@ -135,10 +135,10 @@ packages:
135
dependency: transitive
136
description:
137
name: characters
138
- sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
138
+ sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
139
url: "https://pub.dev"
140
source: hosted
141
- version: "1.3.0"
141
+ version: "1.4.0"
142
checked_yaml:
143
dependency: transitive
144
description:
@@ -151,10 +151,10 @@ packages:
151
dependency: transitive
152
description:
153
name: clock
154
- sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
154
+ sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
155
url: "https://pub.dev"
156
source: hosted
157
- version: "1.1.1"
157
+ version: "1.1.2"
158
code_builder:
159
dependency: transitive
160
description:
@@ -167,10 +167,10 @@ packages:
167
dependency: transitive
168
description:
169
name: collection
170
- sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
170
+ sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
171
url: "https://pub.dev"
172
source: hosted
173
- version: "1.19.0"
173
+ version: "1.19.1"
174
convert:
175
dependency: transitive
176
description:
@@ -238,10 +238,10 @@ packages:
238
dependency: transitive
239
description:
240
name: fake_async
241
- sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
241
+ sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
242
url: "https://pub.dev"
243
source: hosted
244
- version: "1.3.1"
244
+ version: "1.3.2"
245
ffi:
246
dependency: "direct main"
247
description:
@@ -405,18 +405,18 @@ packages:
405
dependency: transitive
406
description:
407
name: leak_tracker
408
- sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
408
+ sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
409
url: "https://pub.dev"
410
source: hosted
411
- version: "10.0.7"
411
+ version: "10.0.8"
412
leak_tracker_flutter_testing:
413
dependency: transitive
414
description:
415
name: leak_tracker_flutter_testing
416
- sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
416
+ sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
417
url: "https://pub.dev"
418
source: hosted
419
- version: "3.0.8"
419
+ version: "3.0.9"
420
leak_tracker_testing:
421
dependency: transitive
422
description:
@@ -437,10 +437,10 @@ packages:
437
dependency: transitive
438
description:
439
name: matcher
440
- sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
440
+ sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
441
url: "https://pub.dev"
442
source: hosted
443
- version: "0.12.16+1"
443
+ version: "0.12.17"
444
material_color_utilities:
445
dependency: transitive
446
description:
@@ -453,10 +453,10 @@ packages:
453
dependency: transitive
454
description:
455
name: meta
456
- sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
456
+ sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
457
url: "https://pub.dev"
458
source: hosted
459
- version: "1.15.0"
459
+ version: "1.16.0"
460
mime:
461
dependency: transitive
462
description:
@@ -485,8 +485,8 @@ packages:
485
dependency: "direct main"
486
description:
487
path: "impls/monero.dart"
488
- ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
489
- resolved-ref: b335585a7fb94b315eb52bd88f2da6d3489fa508
488
+ ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
489
+ resolved-ref: "4868eb9220962a4176a7ed0fc7c809c6200e71a0"
490
url: "https://github.com/mrcyjanek/monero_c"
491
source: git
492
version: "0.0.0"
@@ -519,10 +519,10 @@ packages:
519
dependency: transitive
520
description:
521
name: path
522
- sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
522
+ sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
523
url: "https://pub.dev"
524
source: hosted
525
- version: "1.9.0"
525
+ version: "1.9.1"
526
path_provider:
527
dependency: "direct main"
528
description:
@@ -692,26 +692,26 @@ packages:
692
dependency: transitive
693
description:
694
name: source_span
695
- sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
695
+ sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
696
url: "https://pub.dev"
697
source: hosted
698
- version: "1.10.0"
698
+ version: "1.10.1"
699
stack_trace:
700
dependency: transitive
701
description:
702
name: stack_trace
703
- sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
703
+ sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
704
url: "https://pub.dev"
705
source: hosted
706
- version: "1.12.0"
706
+ version: "1.12.1"
707
stream_channel:
708
dependency: transitive
709
description:
710
name: stream_channel
711
- sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
711
+ sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
712
url: "https://pub.dev"
713
source: hosted
714
- version: "2.1.2"
714
+ version: "2.1.4"
715
stream_transform:
716
dependency: transitive
717
description:
@@ -724,26 +724,26 @@ packages:
724
dependency: transitive
725
description:
726
name: string_scanner
727
- sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
727
+ sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
728
url: "https://pub.dev"
729
source: hosted
730
- version: "1.3.0"
730
+ version: "1.4.1"
731
term_glyph:
732
dependency: transitive
733
description:
734
name: term_glyph
735
- sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
735
+ sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
736
url: "https://pub.dev"
737
source: hosted
738
- version: "1.2.1"
738
+ version: "1.2.2"
739
test_api:
740
dependency: transitive
741
description:
742
name: test_api
743
- sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
743
+ sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
744
url: "https://pub.dev"
745
source: hosted
746
- version: "0.7.3"
746
+ version: "0.7.4"
747
timing:
748
dependency: transitive
749
description:
@@ -788,10 +788,10 @@ packages:
788
dependency: transitive
789
description:
790
name: vm_service
791
- sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
791
+ sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
792
url: "https://pub.dev"
793
source: hosted
794
- version: "14.3.0"
794
+ version: "14.3.1"
795
watcher:
796
dependency: "direct overridden"
797
description:
@@ -841,5 +841,5 @@ packages:
841
source: hosted
842
version: "3.1.3"
843
sdks:
844
- dart: ">=3.5.0 <4.0.0"
845
- flutter: ">=3.27.4"
844
+ dart: ">=3.7.0-0 <4.0.0"
845
+ flutter: ">=3.24.0"
cw_zano/pubspec.yaml
+1
-2
@@ -2,7 +2,6 @@ name: cw_zano
2
description: A new flutter plugin project.
3
version: 0.0.1
4
publish_to: none
5
-author: Cake Wallet
5
homepage: https://cakewallet.com
6
7
environment:
@@ -26,7 +25,7 @@ dependencies:
25
monero:
26
git:
27
url: https://github.com/mrcyjanek/monero_c
29
- ref: b335585a7fb94b315eb52bd88f2da6d3489fa508 # monero_c hash
28
+ ref: a27fbcb24d91143715ed930a05aaa4d853fba1f2 # monero_c hash
29
path: impls/monero.dart
30
dev_dependencies:
31
flutter_test:
lib/monero/cw_monero.dart
+4
-2
@@ -421,6 +421,7 @@ class CWMonero extends Monero {
421
moneroWallet.setLedgerConnection(connection);
422
}
423
424
+ @override
425
void resetLedgerConnection() {
426
disableLedgerExchange();
427
}
@@ -428,9 +429,11 @@ class CWMonero extends Monero {
429
@override
430
void setGlobalLedgerConnection(ledger.LedgerConnection connection) {
431
gLedger = connection;
431
- keepAlive(connection);
432
}
433
434
+ @override
435
+ String? getLastLedgerCommand() => latestLedgerCommand;
436
+
437
bool isViewOnly() {
438
return isViewOnlyBySpendKey(null);
439
}
@@ -439,5 +442,4 @@ class CWMonero extends Monero {
442
Map<String, List<int>> debugCallLength() {
443
return monero_wallet_api.debugCallLength();
444
}
442
-
445
}
lib/src/screens/connect_device/connect_device_page.dart
+127
-88
@@ -5,7 +5,9 @@ import 'package:cake_wallet/generated/i18n.dart';
5
import 'package:cake_wallet/routes.dart';
6
import 'package:cake_wallet/src/screens/base_page.dart';
7
import 'package:cake_wallet/src/screens/connect_device/widgets/device_tile.dart';
8
+import 'package:cake_wallet/src/widgets/bottom_sheet/info_steps_bottom_sheet_widget.dart';
9
import 'package:cake_wallet/src/widgets/primary_button.dart';
10
+import 'package:cake_wallet/themes/core/material_base_theme.dart';
11
import 'package:cake_wallet/utils/responsive_layout_util.dart';
12
import 'package:cake_wallet/view_model/hardware_wallet/ledger_view_model.dart';
13
import 'package:cw_core/utils/print_verbose.dart';
@@ -60,6 +62,7 @@ class ConnectDevicePage extends BasePage {
62
onConnectDevice,
63
allowChangeWallet,
64
ledgerVM,
65
+ currentTheme,
66
));
67
}
68
@@ -68,12 +71,14 @@ class ConnectDevicePageBody extends StatefulWidget {
71
final OnConnectDevice onConnectDevice;
72
final bool allowChangeWallet;
73
final LedgerViewModel ledgerVM;
74
+ final MaterialThemeBase currentTheme;
75
76
const ConnectDevicePageBody(
77
this.walletType,
78
this.onConnectDevice,
79
this.allowChangeWallet,
80
this.ledgerVM,
81
+ this.currentTheme,
82
);
83
84
@override
@@ -179,109 +184,126 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
184
185
@override
186
Widget build(BuildContext context) {
182
- return Center(
183
- child: Container(
184
- width: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint,
185
- height: double.infinity,
186
- padding: EdgeInsets.symmetric(vertical: 24, horizontal: 24),
187
- child: SingleChildScrollView(
188
- child: Column(
189
- children: [
190
- Padding(
191
- padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
192
- child: Text(
193
- Platform.isIOS
194
- ? S.of(context).connect_your_hardware_wallet_ios
195
- : S.of(context).connect_your_hardware_wallet,
196
- style: Theme.of(context).textTheme.titleMedium,
197
- textAlign: TextAlign.center,
198
- ),
199
- ),
200
- Offstage(
201
- offstage: !longWait,
202
- child: Padding(
203
- padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
204
- child: Text(
205
- S.of(context).if_you_dont_see_your_device,
206
- style: Theme.of(context).textTheme.titleMedium,
207
- textAlign: TextAlign.center,
208
- ),
209
- ),
210
- ),
211
- Observer(
212
- builder: (_) => Offstage(
213
- offstage: widget.ledgerVM.bleIsEnabled,
214
- child: Padding(
187
+ return Container(
188
+ width: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint,
189
+ padding: EdgeInsets.symmetric(vertical: 24, horizontal: 24),
190
+ child: Column(
191
+ children: [
192
+ Expanded(
193
+ child: SingleChildScrollView(
194
+ child: Column(
195
+ children: [
196
+ Padding(
197
padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
198
child: Text(
217
- S.of(context).ledger_please_enable_bluetooth,
218
- style: Theme.of(context).textTheme.titleMedium,
199
+ Platform.isIOS
200
+ ? S.of(context).connect_your_hardware_wallet_ios
201
+ : S.of(context).connect_your_hardware_wallet,
202
+ style: Theme.of(context)
203
+ .textTheme.titleMedium,
204
textAlign: TextAlign.center,
205
),
206
),
222
- ),
223
- ),
224
- if (bleDevices.length > 0) ...[
225
- Padding(
226
- padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
227
- child: Container(
228
- width: double.infinity,
229
- child: Text(
230
- S.of(context).bluetooth,
231
- style: Theme.of(context).textTheme.bodyMedium,
207
+ Offstage(
208
+ offstage: !longWait,
209
+ child: Padding(
210
+ padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
211
+ child: Text(
212
+ S.of(context).if_you_dont_see_your_device,
213
+ style: Theme.of(context)
214
+ .textTheme.titleMedium,
215
+ textAlign: TextAlign.center,
216
+ ),
217
),
218
),
234
- ),
235
- ...bleDevices
236
- .map(
237
- (device) => Padding(
238
- padding: EdgeInsets.only(bottom: 20),
239
- child: DeviceTile(
240
- onPressed: () => _connectToDevice(device),
241
- title: device.name,
242
- leading: _getDeviceTileLeading(device.deviceInfo),
243
- connectionType: device.connectionType,
219
+ Observer(
220
+ builder: (_) => Offstage(
221
+ offstage: widget.ledgerVM.bleIsEnabled,
222
+ child: Padding(
223
+ padding:
224
+ EdgeInsets.only(left: 20, right: 20, bottom: 20),
225
+ child: Text(
226
+ S.of(context).ledger_please_enable_bluetooth,
227
+ style: Theme.of(context)
228
+ .textTheme.titleMedium,
229
+ textAlign: TextAlign.center,
230
),
231
),
246
- )
247
- .toList()
248
- ],
249
- if (usbDevices.length > 0) ...[
250
- Padding(
251
- padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
252
- child: Container(
253
- width: double.infinity,
254
- child: Text(
255
- S.of(context).usb,
256
- style: Theme.of(context).textTheme.bodyMedium,
232
),
233
),
259
- ),
260
- ...usbDevices
261
- .map(
262
- (device) => Padding(
263
- padding: EdgeInsets.only(bottom: 20),
264
- child: DeviceTile(
265
- onPressed: () => _connectToDevice(device),
266
- title: device.name,
267
- leading: _getDeviceTileLeading(device.deviceInfo),
268
- connectionType: device.connectionType,
234
+ if (bleDevices.length > 0) ...[
235
+ Padding(
236
+ padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
237
+ child: Container(
238
+ width: double.infinity,
239
+ child: Text(
240
+ S.of(context).bluetooth,
241
+ style: Theme.of(context)
242
+ .textTheme.bodyMedium,
243
),
244
),
245
+ ),
246
+ ...bleDevices
247
+ .map(
248
+ (device) => Padding(
249
+ padding: EdgeInsets.only(bottom: 20),
250
+ child: DeviceTile(
251
+ onPressed: () => _connectToDevice(device),
252
+ title: device.name,
253
+ leading: _getDeviceTileLeading(device.deviceInfo),
254
+ connectionType: device.connectionType,
255
+ ),
256
+ ),
257
+ )
258
+ .toList()
259
+ ],
260
+ if (usbDevices.length > 0) ...[
261
+ Padding(
262
+ padding: EdgeInsets.only(left: 20, right: 20, bottom: 20),
263
+ child: Container(
264
+ width: double.infinity,
265
+ child: Text(
266
+ S.of(context).usb,
267
+ style: Theme.of(context)
268
+ .textTheme.bodyMedium,
269
+ ),
270
+ ),
271
+ ),
272
+ ...usbDevices
273
+ .map(
274
+ (device) => Padding(
275
+ padding: EdgeInsets.only(bottom: 20),
276
+ child: DeviceTile(
277
+ onPressed: () => _connectToDevice(device),
278
+ title: device.name,
279
+ leading: _getDeviceTileLeading(device.deviceInfo),
280
+ connectionType: device.connectionType,
281
+ ),
282
+ ),
283
+ )
284
+ .toList(),
285
+ ],
286
+ if (widget.allowChangeWallet) ...[
287
+ PrimaryButton(
288
+ text: S.of(context).wallets,
289
+ color: Theme.of(context)
290
+ .colorScheme.primary,
291
+ textColor: Theme.of(context)
292
+ .colorScheme.onPrimary,
293
+ onPressed: _onChangeWallet,
294
)
272
- .toList(),
273
- ],
274
- if (widget.allowChangeWallet) ...[
275
- PrimaryButton(
276
- text: S.of(context).wallets,
277
- color: Theme.of(context).colorScheme.primary,
278
- textColor: Theme.of(context).colorScheme.onPrimary,
279
- onPressed: _onChangeWallet,
280
- )
281
- ],
282
- ],
295
+ ],
296
+ ],
297
+ ),
298
+ ),
299
),
284
- ),
300
+ PrimaryButton(
301
+ text: S.of(context).how_to_connect,
302
+ color: Theme.of(context).colorScheme.surfaceContainer,
303
+ textColor: Theme.of(context).colorScheme.onSecondaryContainer,
304
+ onPressed: () => _onHowToConnect(context),
305
+ )
306
+ ],
307
),
308
);
309
}
@@ -293,4 +315,21 @@ class ConnectDevicePageBodyState extends State<ConnectDevicePageBody> {
315
.pushNamedAndRemoveUntil(Routes.dashboard, (route) => false),
316
);
317
}
318
+
319
+ void _onHowToConnect(BuildContext context) {
320
+ showModalBottomSheet(
321
+ context: context,
322
+ isScrollControlled: true,
323
+ builder: (BuildContext bottomSheetContext) => InfoStepsBottomSheet(
324
+ titleText: S.of(context).how_to_connect,
325
+ currentTheme: widget.currentTheme,
326
+ steps: [
327
+ InfoStep('${S.of(context).step} 1', S.of(context).connect_hw_info_step_1),
328
+ InfoStep('${S.of(context).step} 2', S.of(context).connect_hw_info_step_2),
329
+ InfoStep('${S.of(context).step} 3', S.of(context).connect_hw_info_step_3),
330
+ InfoStep('${S.of(context).step} 4', S.of(context).connect_hw_info_step_4),
331
+ ],
332
+ ),
333
+ );
334
+ }
335
}
lib/src/screens/send/send_page.dart
+32
-14
@@ -684,29 +684,47 @@ class SendPage extends BasePage {
684
});
685
}
686
687
- if (state is IsAwaitingDeviceResponseState) {
687
+ if (state is IsDeviceSigningResponseState) {
688
WidgetsBinding.instance.addPostFrameCallback((_) {
689
if (!context.mounted) return;
690
691
showModalBottomSheet<void>(
692
context: context,
693
isDismissible: false,
694
- builder: (BuildContext bottomSheetContext) => InfoBottomSheet(
695
- currentTheme: currentTheme,
696
- titleText: S.of(bottomSheetContext).proceed_on_device,
697
- contentImage: 'assets/images/hardware_wallet/ledger_nano_x.png',
698
- contentImageColor: Theme.of(context).colorScheme.onSurface,
699
- content: S.of(bottomSheetContext).proceed_on_device_description,
700
- isTwoAction: false,
701
- actionButtonText: S.of(context).cancel,
702
- actionButton: () {
703
- sendViewModel.state = InitialExecutionState();
704
- Navigator.of(bottomSheetContext).pop();
705
- },
706
- ),
694
+ builder: (context) {
695
+ dialogContext = context;
696
+ return LoadingBottomSheet(titleText: S.of(context).device_is_signing);
697
+ },
698
);
699
});
700
}
701
+
702
+ if (state is IsAwaitingDeviceResponseState) {
703
+ WidgetsBinding.instance.addPostFrameCallback((_) {
704
+ if (!context.mounted) return;
705
+
706
+ showModalBottomSheet<void>(
707
+ context: context,
708
+ isDismissible: false,
709
+ builder: (context) {
710
+ dialogContext = context;
711
+ return InfoBottomSheet(
712
+ currentTheme: currentTheme,
713
+ titleText: S.of(context).proceed_on_device,
714
+ contentImage:
715
+ 'assets/images/hardware_wallet/ledger_nano_x.png',
716
+ contentImageColor: Theme.of(context).colorScheme.onSurface,
717
+ content: S.of(context).proceed_on_device_description,
718
+ isTwoAction: false,
719
+ actionButtonText: S.of(context).cancel,
720
+ actionButton: () {
721
+ sendViewModel.state = InitialExecutionState();
722
+ Navigator.of(context).pop();
723
+ },
724
+ );
725
+ });
726
+ });
727
+ }
728
});
729
730
_effectsInstalled = true;
lib/src/widgets/bottom_sheet/info_steps_bottom_sheet_widget.dart
new
+114
@@ -0,0 +1,114 @@
1
+import 'package:cake_wallet/generated/i18n.dart';
2
+import 'package:cake_wallet/src/widgets/primary_button.dart';
3
+import 'package:cake_wallet/themes/core/material_base_theme.dart';
4
+import 'package:flutter/material.dart';
5
+
6
+import 'base_bottom_sheet_widget.dart';
7
+
8
+class InfoStep {
9
+ final String title;
10
+ final String description;
11
+
12
+ const InfoStep(this.title, this.description);
13
+}
14
+
15
+class InfoStepsBottomSheet extends BaseBottomSheet {
16
+ final MaterialThemeBase currentTheme;
17
+ final List<InfoStep> steps;
18
+
19
+ InfoStepsBottomSheet({
20
+ required String titleText,
21
+ required this.steps,
22
+ String? titleIconPath,
23
+ required this.currentTheme,
24
+ }) : super(titleText: titleText, titleIconPath: titleIconPath);
25
+
26
+ @override
27
+ Widget contentWidget(BuildContext context) => SizedBox(
28
+ height: 500,
29
+ child: Column(
30
+ children: [
31
+ Expanded(
32
+ child: SingleChildScrollView(
33
+ child: Column(
34
+ children: steps
35
+ .map((step) => Container(
36
+ margin: EdgeInsets.only(
37
+ bottom: 15, left: 20, right: 20),
38
+ padding: EdgeInsets.all(10),
39
+ alignment: Alignment.center,
40
+ decoration: BoxDecoration(
41
+ borderRadius: BorderRadius.circular(10),
42
+ color: Theme.of(context).cardColor,
43
+ ),
44
+ child: Row(
45
+ mainAxisSize: MainAxisSize.max,
46
+ mainAxisAlignment: MainAxisAlignment.center,
47
+ crossAxisAlignment: CrossAxisAlignment.start,
48
+ children: <Widget>[
49
+ Expanded(
50
+ child: Padding(
51
+ padding: EdgeInsets.only(left: 16),
52
+ child: Column(
53
+ mainAxisSize: MainAxisSize.max,
54
+ mainAxisAlignment:
55
+ MainAxisAlignment.start,
56
+ crossAxisAlignment:
57
+ CrossAxisAlignment.start,
58
+ children: <Widget>[
59
+ Text(
60
+ step.title,
61
+ style: Theme.of(context)
62
+ .textTheme
63
+ .bodyMedium!
64
+ .copyWith(
65
+ fontSize: 20,
66
+ fontWeight: FontWeight.w500,
67
+ color: Theme.of(context)
68
+ .colorScheme
69
+ .onSurface,
70
+ ),
71
+ ),
72
+ Padding(
73
+ padding: EdgeInsets.only(top: 5),
74
+ child: Text(
75
+ step.description,
76
+ style: Theme.of(context)
77
+ .textTheme
78
+ .bodyMedium!
79
+ .copyWith(
80
+ color: Theme.of(context)
81
+ .colorScheme
82
+ .onSurfaceVariant,
83
+ ),
84
+ ),
85
+ )
86
+ ],
87
+ ),
88
+ ),
89
+ )
90
+ ],
91
+ ),
92
+ ))
93
+ .toList(),
94
+ ),
95
+ ),
96
+ ),
97
+ Padding(
98
+ padding: const EdgeInsets.all(16),
99
+ child: PrimaryButton(
100
+ text: S.of(context).close,
101
+ color: Theme.of(context).colorScheme.primary,
102
+ textColor: currentTheme.isDark
103
+ ? Theme.of(context).colorScheme.onSurfaceVariant
104
+ : Theme.of(context).colorScheme.onPrimary,
105
+ onPressed: () => Navigator.of(context).pop(),
106
+ ),
107
+ )
108
+ ],
109
+ ),
110
+ );
111
+
112
+ @override
113
+ Widget footerWidget(BuildContext context) => SizedBox.shrink();
114
+}
lib/view_model/send/send_view_model.dart
+25
-13
@@ -15,8 +15,8 @@ import 'package:cake_wallet/entities/contact_record.dart';
15
import 'package:cake_wallet/entities/evm_transaction_error_fees_handler.dart';
16
import 'package:cake_wallet/entities/fiat_currency.dart';
17
import 'package:cake_wallet/entities/parsed_address.dart';
18
-import 'package:cake_wallet/entities/template.dart';
18
import 'package:cake_wallet/entities/preferences_key.dart';
19
+import 'package:cake_wallet/entities/template.dart';
20
import 'package:cake_wallet/entities/transaction_description.dart';
21
import 'package:cake_wallet/entities/wallet_contact.dart';
22
import 'package:cake_wallet/ethereum/ethereum.dart';
@@ -293,19 +293,18 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
293
.toList();
294
295
@computed
296
- bool get hasCoinControl =>
297
- wallet.type == WalletType.bitcoin ||
298
- wallet.type == WalletType.litecoin ||
299
- wallet.type == WalletType.monero ||
300
- wallet.type == WalletType.wownero ||
301
- wallet.type == WalletType.decred ||
302
- wallet.type == WalletType.bitcoinCash;
296
+ bool get hasCoinControl => [
297
+ WalletType.bitcoin,
298
+ WalletType.litecoin,
299
+ WalletType.monero,
300
+ WalletType.wownero,
301
+ WalletType.decred,
302
+ WalletType.bitcoinCash
303
+ ].contains(wallet.type);
304
305
@computed
306
bool get isElectrumWallet =>
306
- wallet.type == WalletType.bitcoin ||
307
- wallet.type == WalletType.litecoin ||
308
- wallet.type == WalletType.bitcoinCash;
307
+ [WalletType.bitcoin, WalletType.litecoin, WalletType.bitcoinCash].contains(wallet.type);
308
309
@observable
310
CryptoCurrency selectedCryptoCurrency;
@@ -444,12 +443,23 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
443
}
444
}
445
446
+ Timer? _ledgerTxStateTimer;
447
+
448
@action
449
Future<PendingTransaction?> createTransaction({ExchangeProvider? provider}) async {
450
try {
451
if (!(state is IsExecutingState)) state = IsExecutingState();
452
452
- if (wallet.isHardwareWallet) state = IsAwaitingDeviceResponseState();
453
+ if (wallet.isHardwareWallet) {
454
+ state = IsAwaitingDeviceResponseState();
455
+ if (walletType == WalletType.monero)
456
+ _ledgerTxStateTimer = Timer.periodic(Duration(seconds: 1), (timer) {
457
+ if (monero!.getLastLedgerCommand() == "INS_CLSAG") {
458
+ timer.cancel();
459
+ state = IsDeviceSigningResponseState();
460
+ }
461
+ });
462
+ }
463
464
pendingTransaction = await wallet.createTransaction(_credentials(provider));
465
@@ -475,6 +485,7 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
485
state = ExecutedSuccessfullyState();
486
return pendingTransaction;
487
} catch (e) {
488
+ _ledgerTxStateTimer?.cancel();
489
// if (e is LedgerException) {
490
// final errorCode = e.errorCode.toRadixString(16);
491
// final fallbackMsg =
@@ -592,7 +603,8 @@ abstract class SendViewModelBase extends WalletChangeListenerViewModel with Stor
603
));
604
}
605
final sharedPreferences = await SharedPreferences.getInstance();
595
- await sharedPreferences.setString(PreferencesKey.backgroundSyncLastTrigger(wallet.name), DateTime.now().add(Duration(minutes: 1)).toIso8601String());
606
+ await sharedPreferences.setString(PreferencesKey.backgroundSyncLastTrigger(wallet.name),
607
+ DateTime.now().add(Duration(minutes: 1)).toIso8601String());
608
state = TransactionCommitted();
609
} catch (e) {
610
state = FailureState(translateErrorMessage(e, wallet.type, wallet.currency));
lib/view_model/send/send_view_model_state.dart
+1
@@ -1,5 +1,6 @@
1
import 'package:cake_wallet/core/execution_state.dart';
2
3
+class IsDeviceSigningResponseState extends IsExecutingState {}
4
class IsAwaitingDeviceResponseState extends IsExecutingState {}
5
class TransactionCommitting extends ExecutionState {}
6
class TransactionCommitted extends ExecutionState {}
res/values/strings_ar.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "مؤكد",
182
"congratulations": "تهانينا!",
183
"connect_an_existing_yat": "توصيل Yat الحالي",
184
+ "connect_hw_info_step_1": "تأكد من تشغيل جهازك.",
185
+ "connect_hw_info_step_2": "قم بتشغيل Bluetooth لكل من الجهازين وإقرانها من الهاتف ، أو قم بتوصيل أجهزتك معًا باستخدام كبل USB.",
186
+ "connect_hw_info_step_3": "افتح جهازك وانتقل إلى تطبيق التشفير المطلوب.",
187
+ "connect_hw_info_step_4": "حدد جهازك في محفظة كعكة ومتابعة الإعداد.",
188
"connect_yats": "توصيل Yats",
189
"connect_your_hardware_wallet": "قم بتوصيل محفظة الأجهزة الخاصة بك باستخدام Bluetooth أو USB",
190
"connect_your_hardware_wallet_ios": "قم بتوصيل محفظة الأجهزة الخاصة بك باستخدام Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "النزول",
245
"description": "ﻒﺻﻭ",
246
"destination_tag": "علامة الوجهة:",
247
+ "device_is_signing": "الجهاز يوقع",
248
"dfx_option_description": "شراء التشفير مع EUR & CHF. لعملاء البيع بالتجزئة والشركات في أوروبا",
249
"didnt_get_code": "لم تحصل على رمز؟",
250
"digit_pin": "-رقم PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "أخف التفاصيل",
400
"high_contrast_theme": "موضوع عالي التباين",
401
"home_screen_settings": "إعدادات الشاشة الرئيسية",
402
+ "how_to_connect": "كيفية الاتصال",
403
"how_to_use": " ﻞﻤﻌﺘﺴﺗ ﻒﻴﻛ",
404
"how_to_use_card": "كيفية استخدام هذه البطاقة",
405
"id": "رقم المعرف:",
@@ -842,6 +848,7 @@
848
"spend_key_private": "مفتاح الإنفاق (خاص)",
849
"spend_key_public": "مفتاح الإنفاق (عام)",
850
"status": "الحالة:",
851
+ "step": "خطوة",
852
"string_default": "تقصير",
853
"subaddress_title": "قائمة العناوين الفرعية",
854
"subaddresses": "العناوين الفرعية",
res/values/strings_bg.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Потвърдено",
182
"congratulations": "Поздравления!",
183
"connect_an_existing_yat": "Добавете съществуващ Yat",
184
+ "connect_hw_info_step_1": "Уверете се, че вашето устройство е включено.",
185
+ "connect_hw_info_step_2": "Включете Bluetooth както за устройства, така и за тях от телефона или свържете устройствата си заедно с USB кабел.",
186
+ "connect_hw_info_step_3": "Отключете устройството си и отворете желаното приложение за криптовалута.",
187
+ "connect_hw_info_step_4": "Изберете вашето устройство в портфейла за торта и продължете с настройката.",
188
"connect_yats": "Добавете Yats",
189
"connect_your_hardware_wallet": "Свържете хардуерния си портфейл с помощта на Bluetooth или USB",
190
"connect_your_hardware_wallet_ios": "Свържете хардуерния си портфейл с помощта на Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Низходящ",
245
"description": "Описание",
246
"destination_tag": "Destination tag:",
247
+ "device_is_signing": "Устройството подписва",
248
"dfx_option_description": "Купете криптовалута с Eur & CHF. За търговски и корпоративни клиенти в Европа",
249
"didnt_get_code": "Не получихте код?",
250
"digit_pin": "-цифрен PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Скриване на подробностите",
400
"high_contrast_theme": "Тема с висок контраст",
401
"home_screen_settings": "Настройки на началния екран",
402
+ "how_to_connect": "Как да се свържа",
403
"how_to_use": "Как да използвам",
404
"how_to_use_card": "Как се ползва тази карта",
405
"id": "ID: ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "Spend key (таен)",
849
"spend_key_public": "Spend key (публичен)",
850
"status": "Статус: ",
851
+ "step": "Стъпка",
852
"string_default": "По подразбиране",
853
"subaddress_title": "Лист от подадреси",
854
"subaddresses": "Подадреси",
res/values/strings_cs.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Potvrzeno",
182
"congratulations": "Gratulujeme!",
183
"connect_an_existing_yat": "Připojit existující Yat",
184
+ "connect_hw_info_step_1": "Ujistěte se, že je vaše zařízení zapnuté.",
185
+ "connect_hw_info_step_2": "Zapněte Bluetooth pro obě zařízení a spárujte je z telefonu nebo připojte zařízení pomocí kabelu USB.",
186
+ "connect_hw_info_step_3": "Odemkněte zařízení a přejděte na požadovanou aplikaci Crypto.",
187
+ "connect_hw_info_step_4": "Vyberte zařízení v peněžence dortu a pokračujte v nastavení.",
188
"connect_yats": "Připojit Yaty",
189
"connect_your_hardware_wallet": "Připojte hardwarovou peněženku pomocí Bluetooth nebo USB",
190
"connect_your_hardware_wallet_ios": "Připojte hardwarovou peněženku pomocí Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Klesající",
245
"description": "Popis",
246
"destination_tag": "Destination Tag:",
247
+ "device_is_signing": "Zařízení se podpisu",
248
"dfx_option_description": "Koupit krypto s EUR & CHF. Pro maloobchodní a firemní zákazníky v Evropě",
249
"didnt_get_code": "Nepřišel Vám kód?",
250
"digit_pin": "-číselný PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Skrýt detaily",
400
"high_contrast_theme": "Téma s vysokým kontrastem",
401
"home_screen_settings": "Nastavení domovské obrazovky",
402
+ "how_to_connect": "Jak se připojit",
403
"how_to_use": "Jak používat",
404
"how_to_use_card": "Jak použít tuto kartu",
405
"id": "ID: ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "Klíč pro platby (soukromý)",
849
"spend_key_public": "Klíč pro platby (veřejný)",
850
"status": "Status: ",
851
+ "step": "Krok",
852
"string_default": "Výchozí",
853
"subaddress_title": "Seznam subadres",
854
"subaddresses": "Subadresy",
res/values/strings_de.arb
+8
-1
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Bestätigt",
182
"congratulations": "Glückwunsch!",
183
"connect_an_existing_yat": "Verbinden Sie ein vorhandenes Yat",
184
+ "connect_hw_info_step_1": "Stellen Sie sicher, dass Ihr Gerät eingeschaltet ist.",
185
+ "connect_hw_info_step_2": "Schalten Sie Bluetooth für beide Geräte ein oder schließen Sie Ihre Geräte mit einem USB-Kabel an.",
186
+ "connect_hw_info_step_3": "Entsperren Sie Ihr Gerät und navigieren Sie zur gewünschten Krypto-App auf ihrem Gerät.",
187
+ "connect_hw_info_step_4": "Wählen Sie Ihr Gerät in Cake Wallet aus und fahren Sie mit dem Setup fort.",
188
"connect_yats": "Yats verbinden",
189
"connect_your_hardware_wallet": "Verbinden Sie Ihre Hardware-Wallet über Bluetooth oder USB",
190
"connect_your_hardware_wallet_ios": "Verbinden Sie Ihre Hardware-Wallet über Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Absteigend",
245
"description": "Beschreibung",
246
"destination_tag": "Ziel-Tag:",
247
+ "device_is_signing": "Das Gerät unterschreibt",
248
"dfx_option_description": "Kaufen Sie Krypto mit EUR & CHF. Für Einzelhandel und Unternehmenskunden in Europa",
249
"didnt_get_code": "Kein Code?",
250
"digit_pin": "-stellige PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Details ausblenden",
400
"high_contrast_theme": "Kontrastreiches Thema",
401
"home_screen_settings": "Einstellungen für den Startbildschirm",
402
+ "how_to_connect": "Anleitung",
403
"how_to_use": "Wie benutzt man",
404
"how_to_use_card": "Wie man diese Karte benutzt",
405
"id": "ID: ",
@@ -584,7 +590,7 @@
590
"potential_scam": "Potenzieller Betrug",
591
"powered_by": "Ermöglicht durch ${title}",
592
"pre_seed_button_text": "Verstanden. Zeig mir meinen Seed",
587
- "pre_seed_description": "Auf der nächsten Seite sehen Sie eine Reihe von Wörtern. Dies ist Ihr einzigartiger und privater Samen und der einzige Weg, Ihre Brieftasche im Falle eines Verlusts oder einer Fehlfunktion zurückzugewinnen. Es liegt in Ihrer Verantwortung, es aufzuschreiben und an einem sicheren Ort außerhalb der Cake Wallet -App aufzubewahren.",
593
+ "pre_seed_description": "Auf der nächsten Seite sehen Sie eine Reihe von Wörtern. Dies ist Ihr einzigartiger und privater Seed und der einzige Weg, Ihre Brieftasche im Falle eines Verlusts oder einer Fehlfunktion zurückzugewinnen. Es liegt in Ihrer Verantwortung, es aufzuschreiben und an einem sicheren Ort außerhalb der Cake Wallet -App aufzubewahren.",
594
"pre_seed_title": "WICHTIG",
595
"prepaid_cards": "Karten mit Guthaben",
596
"prevent_screenshots": "Verhindern Sie Screenshots und Bildschirmaufzeichnungen",
@@ -843,6 +849,7 @@
849
"spend_key_private": "Spend Key (geheim)",
850
"spend_key_public": "Spend Key (öffentlich)",
851
"status": "Status: ",
852
+ "step": "Schritt",
853
"string_default": "Standard",
854
"subaddress_title": "Unteradressenliste",
855
"subaddresses": "Unteradressen",
res/values/strings_en.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Confirmed",
182
"congratulations": "Congratulations!",
183
"connect_an_existing_yat": "Connect an existing Yat",
184
+ "connect_hw_info_step_1": "Make sure your device is powered ON.",
185
+ "connect_hw_info_step_2": "Turn Bluetooth on for both devices and pair them from the phone, OR connect your devices together using a USB cable.",
186
+ "connect_hw_info_step_3": "Unlock your device and navigate to the desired crypto app.",
187
+ "connect_hw_info_step_4": "Select your device in Cake Wallet and continue with the setup.",
188
"connect_yats": "Connect Yats",
189
"connect_your_hardware_wallet": "Connect your hardware wallet using Bluetooth or USB",
190
"connect_your_hardware_wallet_ios": "Connect your hardware wallet using Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Descending",
245
"description": "Description",
246
"destination_tag": "Destination tag:",
247
+ "device_is_signing": "Device is signing",
248
"dfx_option_description": "Buy crypto with EUR & CHF. For retail and corporate customers in Europe",
249
"didnt_get_code": "Didn't get code?",
250
"digit_pin": "-digit PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Hide Details",
400
"high_contrast_theme": "High Contrast Theme",
401
"home_screen_settings": "Home screen settings",
402
+ "how_to_connect": "How to Connect",
403
"how_to_use": "How to use",
404
"how_to_use_card": "How to use this card",
405
"id": "ID: ",
@@ -843,6 +849,7 @@
849
"spend_key_private": "Spend key (private)",
850
"spend_key_public": "Spend key (public)",
851
"status": "Status: ",
852
+ "step": "Step",
853
"string_default": "Default",
854
"subaddress_title": "Subaddress list",
855
"subaddresses": "Subaddresses",
res/values/strings_es.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Confirmado",
182
"congratulations": "Felicidades!",
183
"connect_an_existing_yat": "Conectar un Yat existente",
184
+ "connect_hw_info_step_1": "Asegúrese de que su dispositivo esté encendido.",
185
+ "connect_hw_info_step_2": "Encienda Bluetooth para ambos dispositivos y combínelos desde el teléfono o conecte sus dispositivos con un cable USB.",
186
+ "connect_hw_info_step_3": "Desbloquee su dispositivo y navegue a la aplicación de cifrado deseada.",
187
+ "connect_hw_info_step_4": "Seleccione su dispositivo en la billetera de pastel y continúe con la configuración.",
188
"connect_yats": "Conectar Yats",
189
"connect_your_hardware_wallet": "Conecta tu billetera de hardware con Bluetooth o USB",
190
"connect_your_hardware_wallet_ios": "Conecta tu billetera de hardware con Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Descendente",
245
"description": "Descripción",
246
"destination_tag": "Etiqueta de destino:",
247
+ "device_is_signing": "El dispositivo está firmando",
248
"dfx_option_description": "Compre cripto con EUR y CHF. Para clientes minoristas y corporativos en Europa",
249
"didnt_get_code": "¿No recibiste el código?",
250
"digit_pin": "-dígito PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Ocultar detalles",
400
"high_contrast_theme": "Tema de alto contraste",
401
"home_screen_settings": "Configuración de la pantalla de inicio",
402
+ "how_to_connect": "Cómo conectarse",
403
"how_to_use": "Cómo utilizar",
404
"how_to_use_card": "Cómo usar esta tarjeta",
405
"id": "ID: ",
@@ -843,6 +849,7 @@
849
"spend_key_private": "Llave de gasto (privada)",
850
"spend_key_public": "Llave de gasto (pública)",
851
"status": "Estado: ",
852
+ "step": "Paso",
853
"string_default": "Por defecto",
854
"subaddress_title": "Lista de subdirecciones",
855
"subaddresses": "Subdirecciones",
res/values/strings_fr.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Confirmé",
182
"congratulations": "Félicitations !",
183
"connect_an_existing_yat": "Connecter un Yat existant",
184
+ "connect_hw_info_step_1": "Assurez-vous que votre appareil est allumé.",
185
+ "connect_hw_info_step_2": "Allumez Bluetooth pour les deux appareils et associez-les à partir du téléphone, ou connectez vos appareils ensemble à l'aide d'un câble USB.",
186
+ "connect_hw_info_step_3": "Déverrouillez votre appareil et accédez à l'application Crypto souhaitée.",
187
+ "connect_hw_info_step_4": "Sélectionnez votre appareil dans le portefeuille de gâteaux et continuez avec la configuration.",
188
"connect_yats": "Connecter Yats",
189
"connect_your_hardware_wallet": "Connectez votre portefeuille matériel à l'aide de Bluetooth ou USB",
190
"connect_your_hardware_wallet_ios": "Connectez votre portefeuille matériel à l'aide de Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Descendant",
245
"description": "Description",
246
"destination_tag": "Tag de destination :",
247
+ "device_is_signing": "L'appareil signale",
248
"dfx_option_description": "Achetez de la crypto avec EUR & CHF. Pour les clients de la vente au détail et des entreprises en Europe",
249
"didnt_get_code": "Vous n'avez pas reçu le code ?",
250
"digit_pin": " chiffres",
@@ -394,6 +399,7 @@
399
"hide_details": "Masquer les détails",
400
"high_contrast_theme": "Thème à contraste élevé",
401
"home_screen_settings": "Paramètres de l'écran d'accueil",
402
+ "how_to_connect": "Comment se connecter",
403
"how_to_use": "Comment utiliser",
404
"how_to_use_card": "Comment utiliser cette carte",
405
"id": "ID : ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "Clef de dépense (spend key) (privée)",
849
"spend_key_public": "Clef de dépense (spend key) (publique)",
850
"status": "Statut: ",
851
+ "step": "Étape",
852
"string_default": "Défaut",
853
"subaddress_title": "Liste des sous-adresses",
854
"subaddresses": "Sous-adresses",
res/values/strings_ha.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Tabbatar",
182
"congratulations": "Taya murna!",
183
"connect_an_existing_yat": "Haɗa Yat da ke akwai",
184
+ "connect_hw_info_step_1": "Tabbatar cewa na'urarka tana da iko.",
185
+ "connect_hw_info_step_2": "Juya Bluetooth akan na'urorin biyu da kuma haɗa su daga wayar, ko haɗa na'urorinku tare ta amfani da kebul na USB.",
186
+ "connect_hw_info_step_3": "Buɗe na'urarka kuma kewaya cikin app ɗin da ake so.",
187
+ "connect_hw_info_step_4": "Zaɓi na'urarka a cikin walat walat kuma ci gaba da saiti.",
188
"connect_yats": "Haɗa Yats",
189
"connect_your_hardware_wallet": "Haɗa Wallake Wallware ɗinku ta Bluetooth ko USB",
190
"connect_your_hardware_wallet_ios": "Haɗa kayan aikinku ta Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Saukowa",
245
"description": "Bayani",
246
"destination_tag": "Tambarin makoma:",
247
+ "device_is_signing": "Na'urar tana shiga",
248
"dfx_option_description": "Buy crypto tare da Eur & Chf. Don Retail da abokan ciniki na kamfanoni a Turai",
249
"didnt_get_code": "Ba a samun code?",
250
"digit_pin": "-lambar PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Ɓoye cikakkun bayanai",
400
"high_contrast_theme": "Babban Jigon Kwatance",
401
"home_screen_settings": "Saitunan allo na gida",
402
+ "how_to_connect": "Yadda ake haɗa",
403
"how_to_use": "Yadda ake amfani da shi",
404
"how_to_use_card": "Yadda ake amfani da wannan kati",
405
"id": "ID:",
@@ -844,6 +850,7 @@
850
"spend_key_private": "makullin biya (maɓallin kalmar sirri)",
851
"spend_key_public": "makullin biya (maɓallin jama'a)",
852
"status": "Matsayi:",
853
+ "step": "Taka",
854
"string_default": "Ƙin cika alƙawari",
855
"subaddress_title": "Jagorar subaddress",
856
"subaddresses": "Subaddresses",
res/values/strings_hi.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "की पुष्टि",
182
"congratulations": "बधाई!",
183
"connect_an_existing_yat": "मौजूदा Yat कनेक्ट करें",
184
+ "connect_hw_info_step_1": "सुनिश्चित करें कि आपका डिवाइस चालू है।",
185
+ "connect_hw_info_step_2": "दोनों उपकरणों के लिए ब्लूटूथ चालू करें और उन्हें फोन से पेयर करें, या एक USB केबल का उपयोग करके अपने डिवाइस को एक साथ कनेक्ट करें।",
186
+ "connect_hw_info_step_3": "अपने डिवाइस को अनलॉक करें और वांछित क्रिप्टो ऐप पर नेविगेट करें।",
187
+ "connect_hw_info_step_4": "केक वॉलेट में अपने डिवाइस का चयन करें और सेटअप के साथ जारी रखें।",
188
"connect_yats": "कनेक्ट Yats",
189
"connect_your_hardware_wallet": "ब्लूटूथ या यूएसबी का उपयोग करके अपने हार्डवेयर वॉलेट को कनेक्ट करें",
190
"connect_your_hardware_wallet_ios": "ब्लूटूथ का उपयोग करके अपने हार्डवेयर वॉलेट को कनेक्ट करें",
@@ -240,6 +244,7 @@
244
"descending": "अवरोही",
245
"description": "विवरण",
246
"destination_tag": "गंतव्य टैग:",
247
+ "device_is_signing": "उपकरण हस्ताक्षर कर रहा है",
248
"dfx_option_description": "EUR और CHF के साथ क्रिप्टो खरीदें। यूरोप में खुदरा और कॉर्पोरेट ग्राहकों के लिए",
249
"didnt_get_code": "कोड नहीं मिला?",
250
"digit_pin": "-अंक पिन",
@@ -394,6 +399,7 @@
399
"hide_details": "विवरण छुपाएं",
400
"high_contrast_theme": "उच्च कंट्रास्ट थीम",
401
"home_screen_settings": "होम स्क्रीन सेटिंग्स",
402
+ "how_to_connect": "कनेक्ट कैसे करें",
403
"how_to_use": "का उपयोग कैसे करें",
404
"how_to_use_card": "इस कार्ड का उपयोग कैसे करें",
405
"id": "ID: ",
@@ -844,6 +850,7 @@
850
"spend_key_private": "खर्च करना (निजी)",
851
"spend_key_public": "खर्च करना (जनता)",
852
"status": "स्थिति: ",
853
+ "step": "कदम",
854
"string_default": "गलती करना",
855
"subaddress_title": "उपखंड सूची",
856
"subaddresses": "उप पते",
res/values/strings_hr.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Potvrđen",
182
"congratulations": "Čestitamo!",
183
"connect_an_existing_yat": "Povežite postojeći Yat",
184
+ "connect_hw_info_step_1": "Provjerite je li vaš uređaj uključen.",
185
+ "connect_hw_info_step_2": "Uključite Bluetooth za oba uređaja i uparite ih s telefona ili spojite svoje uređaje zajedno pomoću USB kabela.",
186
+ "connect_hw_info_step_3": "Otključajte svoj uređaj i idite do željene kripto aplikacije.",
187
+ "connect_hw_info_step_4": "Odaberite svoj uređaj u novčanici za torte i nastavite s postavljanjem.",
188
"connect_yats": "Povežite Yats",
189
"connect_your_hardware_wallet": "Spojite svoj hardverski novčanik pomoću Bluetooth -a ili USB -a",
190
"connect_your_hardware_wallet_ios": "Spojite svoj hardverski novčanik pomoću Bluetooth -a",
@@ -240,6 +244,7 @@
244
"descending": "Silazni",
245
"description": "Opis",
246
"destination_tag": "Odredišna oznaka:",
247
+ "device_is_signing": "Uređaj se potpisuje",
248
"dfx_option_description": "Kupite kriptovalute s Eur & CHF. Za maloprodajne i korporativne kupce u Europi",
249
"didnt_get_code": "Ne dobivate kod?",
250
"digit_pin": "-znamenkasti PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Sakrij pojedinosti",
400
"high_contrast_theme": "Tema visokog kontrasta",
401
"home_screen_settings": "Postavke početnog zaslona",
402
+ "how_to_connect": "Kako se povezati",
403
"how_to_use": "Kako koristiti",
404
"how_to_use_card": "Kako koristiti ovu karticu",
405
"id": "ID: ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "Spend key (privatni)",
849
"spend_key_public": "Spend key (javni)",
850
"status": "Status: ",
851
+ "step": "Korak",
852
"string_default": "Zadano",
853
"subaddress_title": "Lista podadresa",
854
"subaddresses": "Podadrese",
res/values/strings_hy.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Հաստատված",
182
"congratulations": "Շնորհավորանք!",
183
"connect_an_existing_yat": "Միացրեք գոյություն ունեցող Yat-ը",
184
+ "connect_hw_info_step_1": "Համոզվեք, որ ձեր սարքը միացված է:",
185
+ "connect_hw_info_step_2": "Միացրեք Bluetooth- ը երկու սարքերի համար, եւ զույգացրեք հեռախոսից կամ միացրեք ձեր սարքերը միասին `օգտագործելով USB մալուխ:",
186
+ "connect_hw_info_step_3": "Բացեք ձեր սարքը եւ նավարկեք ցանկալի ծպտյալ հավելվածին:",
187
+ "connect_hw_info_step_4": "Ընտրեք ձեր սարքը տորթի դրամապանակում եւ շարունակեք կարգաբերումը:",
188
"connect_yats": "Միացրեք Yat-ները",
189
"connect_your_hardware_wallet": "Միացրեք ձեր ապարատային դրամապանակը Bluetooth-ի կամ USB-ի միջոցով",
190
"connect_your_hardware_wallet_ios": "Միացրեք ձեր ապարատային դրամապանակը Bluetooth-ի միջոցով",
@@ -240,6 +244,7 @@
244
"descending": "Նվազող",
245
"description": "Նկարագրություն",
246
"destination_tag": "Նպատակակետի պիտակ:",
247
+ "device_is_signing": "Սարքը ստորագրում է",
248
"dfx_option_description": "Գնեք կրիպտոարժույթ EUR և CHF: Կորպորատիվ և մանրածախ հաճախորդների համար Եվրոպայում",
249
"didnt_get_code": "Չեք ստացել կոդը?",
250
"digit_pin": "-նիշ ՊԻՆ",
@@ -394,6 +399,7 @@
399
"hide_details": "Թաքցնել մանրամասները",
400
"high_contrast_theme": "Բարձր հակադրության տեսք",
401
"home_screen_settings": "Գլխավոր էկրանի կարգավորումներ",
402
+ "how_to_connect": "Ինչպես միացնել",
403
"how_to_use": "Ինչպես օգտագործել",
404
"how_to_use_card": "Ինչպես օգտագործել այս քարտը",
405
"id": "ID: ",
@@ -840,6 +846,7 @@
846
"spend_key_private": "Վճարման բանալի (գախտնի)",
847
"spend_key_public": "Վճարման բանալի (հանրային)",
848
"status": "Կարգավիճակ՝ ",
849
+ "step": "Քայլ",
850
"string_default": "Լռելայն",
851
"subaddress_title": "Ենթահասցեների ցանկ",
852
"subaddresses": "Ենթահասցեներ",
res/values/strings_id.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Dikonfirmasi",
182
"congratulations": "Selamat!",
183
"connect_an_existing_yat": "Hubungkan Yat yang ada",
184
+ "connect_hw_info_step_1": "Pastikan perangkat Anda didukung.",
185
+ "connect_hw_info_step_2": "Nyalakan Bluetooth untuk kedua perangkat dan pasangkan dari telepon, atau hubungkan perangkat Anda bersama -sama menggunakan kabel USB.",
186
+ "connect_hw_info_step_3": "Buka kunci perangkat Anda dan arahkan ke aplikasi crypto yang diinginkan.",
187
+ "connect_hw_info_step_4": "Pilih perangkat Anda di dompet kue dan lanjutkan dengan pengaturan.",
188
"connect_yats": "Hubungkan Yats",
189
"connect_your_hardware_wallet": "Hubungkan dompet perangkat keras Anda menggunakan Bluetooth atau USB",
190
"connect_your_hardware_wallet_ios": "Hubungkan dompet perangkat keras Anda menggunakan Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Menurun",
245
"description": "Keterangan",
246
"destination_tag": "Tag tujuan:",
247
+ "device_is_signing": "Perangkat sedang menandatangani",
248
"dfx_option_description": "Beli crypto dengan EUR & CHF. Untuk pelanggan ritel dan perusahaan di Eropa",
249
"didnt_get_code": "Tidak mendapatkan kode?",
250
"digit_pin": "-digit PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Sembunyikan Rincian",
400
"high_contrast_theme": "Tema Kontras Tinggi",
401
"home_screen_settings": "Pengaturan layar awal",
402
+ "how_to_connect": "Cara terhubung",
403
"how_to_use": "Cara Penggunaan",
404
"how_to_use_card": "Bagaimana menggunakan kartu ini",
405
"id": "ID: ",
@@ -845,6 +851,7 @@
851
"spend_key_private": "Kunci pengeluaran (privat)",
852
"spend_key_public": "Kunci pengeluaran (publik)",
853
"status": "Status: ",
854
+ "step": "Melangkah",
855
"string_default": "Bawaan",
856
"subaddress_title": "Daftar sub-alamat",
857
"subaddresses": "Sub-alamat",
res/values/strings_it.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Confermato",
182
"congratulations": "Congratulazioni!",
183
"connect_an_existing_yat": "Collegare un Yat esistente",
184
+ "connect_hw_info_step_1": "Assicurati che il tuo dispositivo sia acceso.",
185
+ "connect_hw_info_step_2": "Accendi Bluetooth per entrambi i dispositivi e abbinali dal telefono o collega i dispositivi utilizzando un cavo USB.",
186
+ "connect_hw_info_step_3": "Sblocca il dispositivo e naviga nell'app crittografica desiderata.",
187
+ "connect_hw_info_step_4": "Seleziona il tuo dispositivo nel portafoglio Cake e continua con l'installazione.",
188
"connect_yats": "Connetti Yats",
189
"connect_your_hardware_wallet": "Collega il tuo portafoglio hardware tramite Bluetooth o USB",
190
"connect_your_hardware_wallet_ios": "Collega il tuo portafoglio hardware tramite Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Discendente",
245
"description": "Descrizione",
246
"destination_tag": "Tag destinazione:",
247
+ "device_is_signing": "Il dispositivo sta firmando",
248
"dfx_option_description": "Acquista Crypto con EUR & CHF. Per i clienti al dettaglio e aziendali in Europa",
249
"didnt_get_code": "Non hai ricevuto il codice?",
250
"digit_pin": "-cifre PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Nascondi dettagli",
400
"high_contrast_theme": "Tema ad alto contrasto",
401
"home_screen_settings": "Impostazioni della schermata iniziale",
402
+ "how_to_connect": "Come connettersi",
403
"how_to_use": "Come usare",
404
"how_to_use_card": "Come usare questa carta",
405
"id": "ID: ",
@@ -843,6 +849,7 @@
849
"spend_key_private": "Chiave di spesa (privata)",
850
"spend_key_public": "Chiave di spesa (pubblica)",
851
"status": "Stato: ",
852
+ "step": "Fare un passo",
853
"string_default": "Predefinito",
854
"subaddress_title": "Lista sottoindirizzi",
855
"subaddresses": "Sottoindirizzi",
res/values/strings_ja.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "確認済み",
182
"congratulations": "おめでとうございます!",
183
"connect_an_existing_yat": "既存のYatを接続します",
184
+ "connect_hw_info_step_1": "デバイスが電源を入れていることを確認してください。",
185
+ "connect_hw_info_step_2": "両方のデバイスのBluetoothをオンにして電話からペアリングするか、USBケーブルを使用してデバイスを一緒に接続します。",
186
+ "connect_hw_info_step_3": "デバイスのロックを解除し、目的のCryptoアプリに移動します。",
187
+ "connect_hw_info_step_4": "ケーキウォレットでデバイスを選択し、セットアップを続行します。",
188
"connect_yats": "Yatsを接続します",
189
"connect_your_hardware_wallet": "BluetoothまたはUSBを使用して、ハードウェアウォレットを接続します",
190
"connect_your_hardware_wallet_ios": "Bluetoothを使用してハードウェアウォレットを接続します",
@@ -240,6 +244,7 @@
244
"descending": "下降",
245
"description": "説明",
246
"destination_tag": "宛先タグ:",
247
+ "device_is_signing": "デバイスが署名しています",
248
"dfx_option_description": "EUR&CHFで暗号を購入します。ヨーロッパの小売および企業の顧客向け",
249
"didnt_get_code": "コードを取得しませんか?",
250
"digit_pin": "桁ピン",
@@ -395,6 +400,7 @@
400
"hide_details": "詳細を非表示",
401
"high_contrast_theme": "ハイコントラストテーマ",
402
"home_screen_settings": "ホーム画面の設定",
403
+ "how_to_connect": "接続方法",
404
"how_to_use": "使い方",
405
"how_to_use_card": "このカードの使用方法",
406
"id": "ID: ",
@@ -843,6 +849,7 @@
849
"spend_key_private": "キーを使う (プライベート)",
850
"spend_key_public": "キーを使う (パブリック)",
851
"status": "状態: ",
852
+ "step": "ステップ",
853
"string_default": "デフォルト",
854
"subaddress_title": "サブアドレス一覧",
855
"subaddresses": "サブアドレス",
res/values/strings_ko.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "확정됨",
182
"congratulations": "축하합니다!",
183
"connect_an_existing_yat": "기존 Yat 연결",
184
+ "connect_hw_info_step_1": "장치의 전원이 켜져 있는지 확인하십시오.",
185
+ "connect_hw_info_step_2": "두 장치 모두에 Bluetooth를 켜고 전화에서 페어링하거나 USB 케이블을 사용하여 장치를 함께 연결하십시오.",
186
+ "connect_hw_info_step_3": "장치를 잠금 해제하고 원하는 암호화 앱으로 이동하십시오.",
187
+ "connect_hw_info_step_4": "케이크 지갑에서 장치를 선택하고 설정을 계속하십시오.",
188
"connect_yats": "Yat 연결",
189
"connect_your_hardware_wallet": "블루투스 또는 USB를 사용하여 하드웨어 지갑 연결",
190
"connect_your_hardware_wallet_ios": "블루투스를 사용하여 하드웨어 지갑 연결",
@@ -240,6 +244,7 @@
244
"descending": "내림차순",
245
"description": "설명",
246
"destination_tag": "목적지 태그:",
247
+ "device_is_signing": "장치가 서명 중입니다",
248
"dfx_option_description": "EUR 및 CHF로 암호화폐 구매. 유럽의 개인 및 기업 고객 대상",
249
"didnt_get_code": "코드를 받지 못했나요?",
250
"digit_pin": "자리 PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "세부 정보 숨기기",
400
"high_contrast_theme": "고대비 테마",
401
"home_screen_settings": "홈 화면 설정",
402
+ "how_to_connect": "연결 방법",
403
"how_to_use": "사용 방법",
404
"how_to_use_card": "이 카드 사용 방법",
405
"id": "ID: ",
@@ -843,6 +849,7 @@
849
"spend_key_private": "지출 키 (개인)",
850
"spend_key_public": "지출 키 (공개)",
851
"status": "상태: ",
852
+ "step": "단계",
853
"string_default": "기본값",
854
"subaddress_title": "하위 주소 목록",
855
"subaddresses": "하위 주소",
res/values/strings_my.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "အတည်ပြုသည်",
182
"congratulations": "ဂုဏ်ယူပါသည်။",
183
"connect_an_existing_yat": "ရှိပြီးသား Yat ကို ချိတ်ဆက်ပါ။",
184
+ "connect_hw_info_step_1": "သင်၏ device ကိုသေချာအောင်လုပ်ပါ။",
185
+ "connect_hw_info_step_2": "ကိရိယာနှစ်ခုလုံးအတွက် Bluetooth ကိုဖွင့ ်. ဖုန်းမှတွဲပါ, သို့မဟုတ်သင်၏ကိရိယာများကို USB ကြိုးဖြင့်ချိတ်ဆက်ပါ။",
186
+ "connect_hw_info_step_3": "သင်၏ device ကိုသော့ဖွင့်ပြီးလိုချင်သော crypto app သို့သွားပါ။",
187
+ "connect_hw_info_step_4": "Cake Wallet တွင်သင်၏ device ကိုရွေးချယ်ပြီး setup ကိုဆက်လုပ်ပါ။",
188
"connect_yats": "Yats ကိုချိတ်ဆက်ပါ။",
189
"connect_your_hardware_wallet": "သင်၏ hardware ပိုက်ဆံအိတ်ကို Bluetooth သို့မဟုတ် USB ကို သုံး. ချိတ်ဆက်ပါ",
190
"connect_your_hardware_wallet_ios": "သင်၏ hardware ပိုက်ဆံအိတ်ကို Bluetooth ကို အသုံးပြု. ချိတ်ဆက်ပါ",
@@ -240,6 +244,7 @@
244
"descending": "ဆင်း",
245
"description": "ဖော်ပြချက်",
246
"destination_tag": "ခရီးဆုံးအမှတ်-",
247
+ "device_is_signing": "ကိရိယာလက်မှတ်ထိုးနေသည်",
248
"dfx_option_description": "Crypto ကို EUR & CHF ဖြင့် 0 ယ်ပါ။ လက်လီရောင်းဝယ်မှုနှင့်ဥရောပရှိကော်ပိုရိတ်ဖောက်သည်များအတွက်",
249
"didnt_get_code": "ကုဒ်ကို မရဘူးလား?",
250
"digit_pin": "-ဂဏန်း PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "အသေးစိတ်ကို ဝှက်ပါ။",
400
"high_contrast_theme": "အလင်းအမှောင် မြင့်မားသော အပြင်အဆင်",
401
"home_screen_settings": "ပင်မစခရင် ဆက်တင်များ",
402
+ "how_to_connect": "ဘယ်လိုချိတ်ဆက်ရမလဲ",
403
"how_to_use": "အသုံးပြုနည်း",
404
"how_to_use_card": "ဒီကတ်ကို ဘယ်လိုသုံးမလဲ။",
405
"id": "ID:",
@@ -842,6 +848,7 @@
848
"spend_key_private": "သော့သုံးရန် (သီးသန့်)",
849
"spend_key_public": "သုံးစွဲရန်သော့ (အများပြည်သူ)",
850
"status": "အခြေအနေ:",
851
+ "step": "လှမ်း",
852
"string_default": "ပျက်ကွက်ခြင်း",
853
"subaddress_title": "လိပ်စာစာရင်း",
854
"subaddresses": "လိပ်စာများ",
res/values/strings_nl.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Bevestigd",
182
"congratulations": "gefeliciteerd!",
183
"connect_an_existing_yat": "Verbind een bestaande Yat",
184
+ "connect_hw_info_step_1": "Zorg ervoor dat uw apparaat is ingeschakeld.",
185
+ "connect_hw_info_step_2": "Zet Bluetooth aan voor beide apparaten en combineer ze van de telefoon, of sluit uw apparaten samen met een USB -kabel.",
186
+ "connect_hw_info_step_3": "Ontgrendel uw apparaat en navigeer naar de gewenste crypto -app.",
187
+ "connect_hw_info_step_4": "Selecteer uw apparaat in cake -portemonnee en ga verder met de opstelling.",
188
"connect_yats": "Verbind Yats",
189
"connect_your_hardware_wallet": "Sluit uw hardware -portemonnee aan met Bluetooth of USB",
190
"connect_your_hardware_wallet_ios": "Sluit uw hardware -portemonnee aan met Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Aflopend",
245
"description": "Beschrijving",
246
"destination_tag": "Bestemmingstag:",
247
+ "device_is_signing": "Apparaat ondertekent",
248
"dfx_option_description": "Koop crypto met EUR & CHF. Voor retail- en zakelijke klanten in Europa",
249
"didnt_get_code": "Geen code?",
250
"digit_pin": "-cijferige PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Details verbergen",
400
"high_contrast_theme": "Thema met hoog contrast",
401
"home_screen_settings": "Instellingen voor het startscherm",
402
+ "how_to_connect": "Hoe verbinding te maken",
403
"how_to_use": "Hoe te gebruiken",
404
"how_to_use_card": "Hoe deze kaart te gebruiken",
405
"id": "ID: ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "Sleutel uitgeven (privaat)",
849
"spend_key_public": "Sleutel uitgeven (openbaar)",
850
"status": "Staat: ",
851
+ "step": "Stap",
852
"string_default": "Standaard",
853
"subaddress_title": "Subadreslijst",
854
"subaddresses": "Subadressen",
res/values/strings_pl.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Potwierdzony",
182
"congratulations": "gratulacje!",
183
"connect_an_existing_yat": "Podłącz istniejący Yat",
184
+ "connect_hw_info_step_1": "Upewnij się, że urządzenie jest włączone.",
185
+ "connect_hw_info_step_2": "Włącz Bluetooth dla obu urządzeń i sparuj je z telefonu lub podłącz urządzenia razem za pomocą kabla USB.",
186
+ "connect_hw_info_step_3": "Odblokuj urządzenie i przejdź do żądanej aplikacji Crypto.",
187
+ "connect_hw_info_step_4": "Wybierz urządzenie w portfelu ciasta i kontynuuj konfigurację.",
188
"connect_yats": "Połącz Yats",
189
"connect_your_hardware_wallet": "Podłącz portfel sprzętowy za pomocą Bluetooth lub USB",
190
"connect_your_hardware_wallet_ios": "Podłącz portfel sprzętowy za pomocą Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Malejąco",
245
"description": "Opis",
246
"destination_tag": "Tag docelowy:",
247
+ "device_is_signing": "Urządzenie podpisuje",
248
"dfx_option_description": "Kup krypto za EUR & CHF. Dla klientów prywatnych i korporacyjnych w Europie",
249
"didnt_get_code": "Nie dostałeś kodu?",
250
"digit_pin": "-znakowy PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Ukryj szczegóły",
400
"high_contrast_theme": "Motyw o wysokim kontraście",
401
"home_screen_settings": "Ustawienia ekranu głównego",
402
+ "how_to_connect": "Jak połączyć się",
403
"how_to_use": "Jak używać",
404
"how_to_use_card": "Jak korzystać z tej karty?",
405
"id": "ID: ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "Klucz prywatny",
849
"spend_key_public": "Klucz publiczny",
850
"status": "Status: ",
851
+ "step": "Krok",
852
"string_default": "Domyślny",
853
"subaddress_title": "Lista podadresów",
854
"subaddresses": "Podadresy",
res/values/strings_pt.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Confirmado",
182
"congratulations": "Parabéns!",
183
"connect_an_existing_yat": "Conecte um Yat existente",
184
+ "connect_hw_info_step_1": "Verifique se o seu dispositivo está ligado.",
185
+ "connect_hw_info_step_2": "Ligue o Bluetooth para os dois dispositivos e emparelhe -os do telefone ou conecte seus dispositivos usando um cabo USB.",
186
+ "connect_hw_info_step_3": "Desbloqueie seu dispositivo e navegue até o aplicativo Crypto desejado.",
187
+ "connect_hw_info_step_4": "Selecione seu dispositivo na carteira de bolo e continue com a configuração.",
188
"connect_yats": "Connect Yats",
189
"connect_your_hardware_wallet": "Conecte sua carteira de hardware usando Bluetooth ou USB",
190
"connect_your_hardware_wallet_ios": "Conecte sua carteira de hardware usando o Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "descendente",
245
"description": "Descrição",
246
"destination_tag": "Tag de destino:",
247
+ "device_is_signing": "O dispositivo está assinando",
248
"dfx_option_description": "Compre criptografia com EUR & CHF. Para clientes de varejo e corporativo na Europa",
249
"didnt_get_code": "Não recebeu o código?",
250
"digit_pin": "dígitos",
@@ -394,6 +399,7 @@
399
"hide_details": "Ocultar detalhes",
400
"high_contrast_theme": "Tema de alto contraste",
401
"home_screen_settings": "Configurações da tela inicial",
402
+ "how_to_connect": "Como conectar",
403
"how_to_use": "Como usar",
404
"how_to_use_card": "Como usar este cartão",
405
"id": "ID: ",
@@ -844,6 +850,7 @@
850
"spend_key_private": "Chave de gastos (privada)",
851
"spend_key_public": "Chave de gastos (pública)",
852
"status": "Status: ",
853
+ "step": "Etapa",
854
"string_default": "Padrão",
855
"subaddress_title": "Sub-endereços",
856
"subaddresses": "Sub-endereços",
res/values/strings_ru.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Подтвержденный",
182
"congratulations": "Поздравляем!",
183
"connect_an_existing_yat": "Подключить существующий Yat",
184
+ "connect_hw_info_step_1": "Убедитесь, что ваше устройство включено.",
185
+ "connect_hw_info_step_2": "Включите Bluetooth для обоих устройств и соедините их с телефона или соедините свои устройства вместе с помощью USB -кабеля.",
186
+ "connect_hw_info_step_3": "Разблокируйте свое устройство и перейдите к желаемому крипто -приложению.",
187
+ "connect_hw_info_step_4": "Выберите свое устройство в кошельке для торта и продолжайте с настройкой.",
188
"connect_yats": "Подключить Yats",
189
"connect_your_hardware_wallet": "Подключите свой аппаратный кошелек с помощью Bluetooth или USB",
190
"connect_your_hardware_wallet_ios": "Подключите свой аппаратный кошелек с помощью Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Нисходящий",
245
"description": "Описание",
246
"destination_tag": "Целевой тег:",
247
+ "device_is_signing": "Устройство подписывает",
248
"dfx_option_description": "Купить крипто с Eur & CHF. Для розничных и корпоративных клиентов в Европе",
249
"didnt_get_code": "Не получить код?",
250
"digit_pin": "-значный PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Скрыть детали",
400
"high_contrast_theme": "Высококонтрастная тема",
401
"home_screen_settings": "Настройки главного экрана",
402
+ "how_to_connect": "Как подключиться",
403
"how_to_use": "Как использовать",
404
"how_to_use_card": "Как использовать эту карту",
405
"id": "ID: ",
@@ -843,6 +849,7 @@
849
"spend_key_private": "Приватный ключ траты",
850
"spend_key_public": "Публичный ключ траты",
851
"status": "Статус: ",
852
+ "step": "Шаг",
853
"string_default": "По умолчанию",
854
"subaddress_title": "Список субадресов",
855
"subaddresses": "Субадреса",
res/values/strings_th.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "ซึ่งยืนยันแล้ว",
182
"congratulations": "ขอแสดงความยินดี!",
183
"connect_an_existing_yat": "เชื่อมต่อ Yat ที่มีอยู่",
184
+ "connect_hw_info_step_1": "ตรวจสอบให้แน่ใจว่าอุปกรณ์ของคุณเปิดใช้งาน",
185
+ "connect_hw_info_step_2": "เปิดบลูทู ธ สำหรับอุปกรณ์ทั้งสองและจับคู่จากโทรศัพท์หรือเชื่อมต่ออุปกรณ์ของคุณเข้าด้วยกันโดยใช้สายเคเบิล USB",
186
+ "connect_hw_info_step_3": "ปลดล็อกอุปกรณ์ของคุณและนำทางไปยังแอพ crypto ที่ต้องการ",
187
+ "connect_hw_info_step_4": "เลือกอุปกรณ์ของคุณในกระเป๋าเงินเค้กและดำเนินการติดตั้งต่อไป",
188
"connect_yats": "เชื่อมต่อ Yats",
189
"connect_your_hardware_wallet": "เชื่อมต่อกระเป๋าเงินฮาร์ดแวร์ของคุณโดยใช้บลูทู ธ หรือ USB",
190
"connect_your_hardware_wallet_ios": "เชื่อมต่อกระเป๋าเงินฮาร์ดแวร์ของคุณโดยใช้บลูทู ธ",
@@ -240,6 +244,7 @@
244
"descending": "ลงมา",
245
"description": "คำอธิบาย",
246
"destination_tag": "แท็กปลายทาง:",
247
+ "device_is_signing": "อุปกรณ์กำลังลงนาม",
248
"dfx_option_description": "ซื้อ crypto ด้วย Eur & CHF สำหรับลูกค้ารายย่อยและลูกค้าในยุโรป",
249
"didnt_get_code": "ไม่ได้รับรหัส?",
250
"digit_pin": "-หลัก PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "ซ่อนรายละเอียด",
400
"high_contrast_theme": "ธีมความคมชัดสูง",
401
"home_screen_settings": "การตั้งค่าหน้าจอหลัก",
402
+ "how_to_connect": "วิธีการเชื่อมต่อ",
403
"how_to_use": "วิธีใช้",
404
"how_to_use_card": "วิธีใช้บัตรนี้",
405
"id": "ID: ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "คีย์จ่าย (ส่วนตัว)",
849
"spend_key_public": "คีย์จ่าย (สาธารณะ)",
850
"status": "สถานะ: ",
851
+ "step": "ขั้นตอน",
852
"string_default": "ค่าเริ่มต้น",
853
"subaddress_title": "รายการที่อยู่ย่อย",
854
"subaddresses": "ที่อยู่ย่อย",
res/values/strings_tl.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Nakumpirma",
182
"congratulations": "Congratulations!",
183
"connect_an_existing_yat": "Ikonekta ang isang umiiral na Yat",
184
+ "connect_hw_info_step_1": "Siguraduhin na ang iyong aparato ay pinapagana.",
185
+ "connect_hw_info_step_2": "Lumiko ang Bluetooth para sa parehong mga aparato at ipares ang mga ito mula sa telepono, o ikonekta ang iyong mga aparato nang magkasama gamit ang isang USB cable.",
186
+ "connect_hw_info_step_3": "I -unlock ang iyong aparato at mag -navigate sa nais na crypto app.",
187
+ "connect_hw_info_step_4": "Piliin ang iyong aparato sa cake wallet at magpatuloy sa pag -setup.",
188
"connect_yats": "Ikonekta sa Yats",
189
"connect_your_hardware_wallet": "Ikonekta ang iyong hardware wallet gamit ang Bluetooth o USB",
190
"connect_your_hardware_wallet_ios": "Ikonekta ang iyong wallet gamit ang Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Pababang",
245
"description": "Paglalarawan",
246
"destination_tag": "Tag ng patutunguhan:",
247
+ "device_is_signing": "Nag -sign ang aparato",
248
"dfx_option_description": "Bumili ng crypto kasama ang EUR & CHF. Para sa mga retail customer at corporate customer sa Europe",
249
"didnt_get_code": "Hindi nakuha ang code?",
250
"digit_pin": "-digit PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Itago ang mga detalye",
400
"high_contrast_theme": "High Contrast Theme",
401
"home_screen_settings": "Mga setting ng home screen",
402
+ "how_to_connect": "Paano kumonekta",
403
"how_to_use": "Paano gamitin",
404
"how_to_use_card": "Paano gamitin ang card na ito",
405
"id": "ID: ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "Spend key (private)",
849
"spend_key_public": "Spend key (public)",
850
"status": "Katayuan: ",
851
+ "step": "Hakbang",
852
"string_default": "Default",
853
"subaddress_title": "Listahan ng Subaddress",
854
"subaddresses": "Mga Subaddress",
res/values/strings_tr.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Onaylanmış",
182
"congratulations": "Tebrikler!",
183
"connect_an_existing_yat": "Mevcut bir Yat'ı bağla",
184
+ "connect_hw_info_step_1": "Cihazınızın açıldığından emin olun.",
185
+ "connect_hw_info_step_2": "Bluetooth'u her iki cihaz için açın ve telefondan eşleştirin veya bir USB kablosu kullanarak cihazlarınızı birbirine bağlayın.",
186
+ "connect_hw_info_step_3": "Cihazınızın kilidini açın ve istenen kripto uygulamasına gidin.",
187
+ "connect_hw_info_step_4": "Cihazınızı kek cüzdanında seçin ve kuruluma devam edin.",
188
"connect_yats": "Yat'lara bağlan",
189
"connect_your_hardware_wallet": "Bluetooth veya USB kullanarak donanım cüzdanınızı bağlayın",
190
"connect_your_hardware_wallet_ios": "Bluetooth kullanarak donanım cüzdanınızı bağlayın",
@@ -240,6 +244,7 @@
244
"descending": "Azalan",
245
"description": "Tanım",
246
"destination_tag": "Hedef Etiketi:",
247
+ "device_is_signing": "Cihaz imzalıyor",
248
"dfx_option_description": "Eur & chf ile kripto satın alın. Avrupa'daki perakende ve kurumsal müşteriler için",
249
"didnt_get_code": "Kod gelmedi mi?",
250
"digit_pin": " haneli PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Detayları Gizle",
400
"high_contrast_theme": "Yüksek Kontrastlı Tema",
401
"home_screen_settings": "Ana ekran ayarları",
402
+ "how_to_connect": "Nasıl bağlanır",
403
"how_to_use": "Nasıl kullanılır",
404
"how_to_use_card": "Bu kart nasıl kullanılır",
405
"id": "ID: ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "Harcama anahtarı (özel)",
849
"spend_key_public": "Harcama anahtarı (genel)",
850
"status": "Durum: ",
851
+ "step": "Adım",
852
"string_default": "Varsayılan",
853
"subaddress_title": "Alt adres listesi",
854
"subaddresses": "Alt adresler",
res/values/strings_uk.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Підтверджений",
182
"congratulations": "Вітаємо!",
183
"connect_an_existing_yat": "Підключити існуючий Yat",
184
+ "connect_hw_info_step_1": "Переконайтесь, що ваш пристрій працює.",
185
+ "connect_hw_info_step_2": "Увімкніть Bluetooth для обох пристроїв і з’єднайте їх з телефону або підключіть свої пристрої разом за допомогою USB -кабелю.",
186
+ "connect_hw_info_step_3": "Розблокуйте свій пристрій і перейдіть до потрібного програми Crypto.",
187
+ "connect_hw_info_step_4": "Виберіть свій пристрій у гаманці тортів і продовжуйте налаштування.",
188
"connect_yats": "Підключіть Yats",
189
"connect_your_hardware_wallet": "Підключіть апаратний гаманець за допомогою Bluetooth або USB",
190
"connect_your_hardware_wallet_ios": "Підключіть апаратний гаманець за допомогою Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Низхідний",
245
"description": "опис",
246
"destination_tag": "Тег призначення:",
247
+ "device_is_signing": "Пристрій підписується",
248
"dfx_option_description": "Купуйте криптовалюту з EUR & CHF. Для роздрібних та корпоративних клієнтів у Європі",
249
"didnt_get_code": "Не отримали код?",
250
"digit_pin": "-значний PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "Приховати деталі",
400
"high_contrast_theme": "Тема високої контрастності",
401
"home_screen_settings": "Налаштування головного екрана",
402
+ "how_to_connect": "Як підключитися",
403
"how_to_use": "Як використовувати",
404
"how_to_use_card": "Як використовувати цю картку",
405
"id": "ID: ",
@@ -843,6 +849,7 @@
849
"spend_key_private": "Приватний ключ витрати",
850
"spend_key_public": "Публічний ключ витрати",
851
"status": "Статус: ",
852
+ "step": "Крок",
853
"string_default": "За замовчуванням",
854
"subaddress_title": "Список Субадрес",
855
"subaddresses": "Субадреси",
res/values/strings_ur.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "تصدیق",
182
"congratulations": "مبارک ہو!",
183
"connect_an_existing_yat": "ایک موجودہ Yat کو جوڑیں۔",
184
+ "connect_hw_info_step_1": "اس بات کو یقینی بنائیں کہ آپ کا آلہ چل رہا ہے۔",
185
+ "connect_hw_info_step_2": "دونوں آلات کے لئے بلوٹوتھ کو آن کریں اور فون سے ان کو جوڑیں ، یا USB کیبل کا استعمال کرکے اپنے آلات کو ایک ساتھ جوڑیں۔",
186
+ "connect_hw_info_step_3": "اپنے آلے کو انلاک کریں اور مطلوبہ کریپٹو ایپ پر جائیں۔",
187
+ "connect_hw_info_step_4": "اپنے آلے کو کیک پرس میں منتخب کریں اور سیٹ اپ کے ساتھ جاری رکھیں۔",
188
"connect_yats": "Yats کو جوڑیں۔",
189
"connect_your_hardware_wallet": "بلوٹوتھ یا USB کا استعمال کرتے ہوئے اپنے ہارڈ ویئر پرس کو مربوط کریں",
190
"connect_your_hardware_wallet_ios": "بلوٹوتھ کا استعمال کرتے ہوئے اپنے ہارڈ ویئر پرس کو جوڑیں",
@@ -240,6 +244,7 @@
244
"descending": "اترتے ہوئے",
245
"description": "ﻞﯿﺼﻔﺗ",
246
"destination_tag": "منزل کا ٹیگ:",
247
+ "device_is_signing": "ڈیوائس پر دستخط کر رہے ہیں",
248
"dfx_option_description": "یورو اور سی ایچ ایف کے ساتھ کرپٹو خریدیں۔ یورپ میں خوردہ اور کارپوریٹ صارفین کے لئے",
249
"didnt_get_code": "کوڈ نہیں ملتا؟",
250
"digit_pin": "-ہندسوں کا پن",
@@ -394,6 +399,7 @@
399
"hide_details": "تفصیلات چھپائیں۔",
400
"high_contrast_theme": "ہائی کنٹراسٹ تھیم",
401
"home_screen_settings": "ہوم اسکرین کی ترتیبات",
402
+ "how_to_connect": "کیسے مربوط ہوں",
403
"how_to_use": " ﮧﻘﯾﺮﻃ ﺎﮐ ﮯﻧﺮﮐ ﻝﺎﻤﻌﺘﺳﺍ",
404
"how_to_use_card": "اس کارڈ کو استعمال کرنے کا طریقہ",
405
"id": "ID:",
@@ -844,6 +850,7 @@
850
"spend_key_private": "خرچ کی کلید (نجی)",
851
"spend_key_public": "خرچ کی کلید (عوامی)",
852
"status": "حالت:",
853
+ "step": "مرحلہ",
854
"string_default": "پہلے سے طے شدہ",
855
"subaddress_title": "ذیلی ایڈریس کی فہرست",
856
"subaddresses": "ذیلی پتے",
res/values/strings_vi.arb
+7
@@ -180,6 +180,10 @@
180
"confirmed_tx": "Đã xác nhận",
181
"congratulations": "Chúc mừng!",
182
"connect_an_existing_yat": "Kết nối Yat hiện có",
183
+ "connect_hw_info_step_1": "Hãy chắc chắn rằng thiết bị của bạn được bật nguồn.",
184
+ "connect_hw_info_step_2": "Bật Bluetooth cho cả hai thiết bị và ghép chúng từ điện thoại hoặc kết nối các thiết bị của bạn với nhau bằng cáp USB.",
185
+ "connect_hw_info_step_3": "Mở khóa thiết bị của bạn và điều hướng đến ứng dụng tiền điện tử mong muốn.",
186
+ "connect_hw_info_step_4": "Chọn thiết bị của bạn trong ví bánh và tiếp tục với thiết lập.",
187
"connect_yats": "Kết nối Yats",
188
"connect_your_hardware_wallet": "Kết nối ví phần cứng của bạn bằng Bluetooth hoặc USB",
189
"connect_your_hardware_wallet_ios": "Kết nối ví phần cứng của bạn bằng Bluetooth",
@@ -239,6 +243,7 @@
243
"descending": "Giảm dần",
244
"description": "Mô tả",
245
"destination_tag": "Thẻ đích:",
246
+ "device_is_signing": "Thiết bị đang ký",
247
"dfx_option_description": "Mua tiền điện tử bằng EUR & CHF. Dành cho khách hàng bán lẻ và doanh nghiệp tại Châu Âu",
248
"didnt_get_code": "Không nhận được mã?",
249
"digit_pin": "Mã PIN - số",
@@ -393,6 +398,7 @@
398
"hide_details": "Ẩn chi tiết",
399
"high_contrast_theme": "Chủ đề độ tương phản cao",
400
"home_screen_settings": "Cài đặt màn hình chính",
401
+ "how_to_connect": "Cách kết nối",
402
"how_to_use": "Cách sử dụng",
403
"how_to_use_card": "Cách sử dụng thẻ này",
404
"id": "ID: ",
@@ -839,6 +845,7 @@
845
"spend_key_private": "Khóa chi tiêu (riêng tư)",
846
"spend_key_public": "Khóa chi tiêu (công khai)",
847
"status": "Trạng thái: ",
848
+ "step": "Bước chân",
849
"string_default": "Mặc định",
850
"subaddress_title": "Danh sách địa chỉ phụ",
851
"subaddresses": "Địa chỉ phụ",
res/values/strings_yo.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "Jẹrisi",
182
"congratulations": "Ẹ kúuṣẹ́ ooo!",
183
"connect_an_existing_yat": "So Yat wíwà",
184
+ "connect_hw_info_step_1": "Rii daju pe ẹrọ rẹ ni agbara lori.",
185
+ "connect_hw_info_step_2": "Tan Bluetooth lori fun awọn ẹrọ mejeeji ki o pa wọn kuro ninu foonu, tabi so awọn ẹrọ rẹ pọ pẹlu lilo okun USB.",
186
+ "connect_hw_info_step_3": "Ṣii ẹrọ rẹ ki o lọ kiri si ohun elo Crypto ti o fẹ.",
187
+ "connect_hw_info_step_4": "Yan ẹrọ rẹ ni apamọwọ akara oyinbo ki o tẹsiwaju pẹlu iṣeto.",
188
"connect_yats": "So àwọn Yat",
189
"connect_your_hardware_wallet": "So apamọwọ irinṣẹ rẹ nipa lilo Bluetooth tabi USB",
190
"connect_your_hardware_wallet_ios": "So apamọwọ ẹrọ rẹ ni lilo Bluetooth",
@@ -240,6 +244,7 @@
244
"descending": "Sọkalẹ",
245
"description": "Apejuwe",
246
"destination_tag": "Orúkọ tí ìbí tó a ránṣẹ́ sí:",
247
+ "device_is_signing": "Ẹrọ n forukọsilẹ",
248
"dfx_option_description": "Ra Crypto pẹlu EUR & CHF. Fun soobu ati awọn alabara ile-iṣẹ ni Yuroopu",
249
"didnt_get_code": "Ko gba koodu?",
250
"digit_pin": "-díjíìtì òǹkà ìdánimọ̀ àdáni",
@@ -395,6 +400,7 @@
400
"hide_details": "Dé ìsọfúnni kékeré",
401
"high_contrast_theme": "Akori Iyatọ giga",
402
"home_screen_settings": "Awọn eto iboju ile",
403
+ "how_to_connect": "Bi o ṣe le sopọ",
404
"how_to_use": "Bawo ni lati lo",
405
"how_to_use_card": "Báyìí ni wọ́n ṣe ń lo káàdì yìí.",
406
"id": "Àmì Ìdánimọ̀: ",
@@ -843,6 +849,7 @@
849
"spend_key_private": "Kọ́kọ́rọ́ sísan (àdáni)",
850
"spend_key_public": "Kọ́kọ́rọ́ sísan (kò àdáni)",
851
"status": "Tó ń ṣẹlẹ̀: ",
852
+ "step": "Igbesẹ",
853
"string_default": "Aiyipada",
854
"subaddress_title": "Àkọsílẹ̀ ni nínú àwọn àdírẹ́sì tíwọn rẹ̀lẹ̀",
855
"subaddresses": "Àwọn àdírẹ́sì kékeré",
res/values/strings_zh.arb
+7
@@ -181,6 +181,10 @@
181
"confirmed_tx": "确认的",
182
"congratulations": "恭喜!",
183
"connect_an_existing_yat": "連接現有 Yat",
184
+ "connect_hw_info_step_1": "确保您的设备已上电。",
185
+ "connect_hw_info_step_2": "为这两个设备打开蓝牙,然后将它们配对,或使用USB电缆将设备连接在一起。",
186
+ "connect_hw_info_step_3": "解锁设备并导航到所需的加密应用程序。",
187
+ "connect_hw_info_step_4": "在蛋糕钱包中选择您的设备,然后继续设置。",
188
"connect_yats": "连接 Yats",
189
"connect_your_hardware_wallet": "使用蓝牙或USB连接硬件钱包",
190
"connect_your_hardware_wallet_ios": "使用蓝牙连接硬件钱包",
@@ -240,6 +244,7 @@
244
"descending": "下降",
245
"description": "描述",
246
"destination_tag": "目标Tag:",
247
+ "device_is_signing": "设备正在签名",
248
"dfx_option_description": "用Eur&Chf购买加密货币。对于欧洲的零售和企业客户",
249
"didnt_get_code": "没有获取代码?",
250
"digit_pin": "位 PIN",
@@ -394,6 +399,7 @@
399
"hide_details": "隐藏细节",
400
"high_contrast_theme": "高对比度主题",
401
"home_screen_settings": "主屏幕设置",
402
+ "how_to_connect": "如何连接",
403
"how_to_use": "如何使用",
404
"how_to_use_card": "如何使用这张卡",
405
"id": "ID: ",
@@ -842,6 +848,7 @@
848
"spend_key_private": "Spend 密钥 (私钥)",
849
"spend_key_public": "Spend 密钥 (公钥)",
850
"status": "状态: ",
851
+ "step": "步",
852
"string_default": "默认",
853
"subaddress_title": "子地址列表",
854
"subaddresses": "子地址",
scripts/prepare_moneroc.sh
+1
-1
@@ -8,7 +8,7 @@ if [[ ! -d "monero_c/.git" ]];
8
then
9
git clone https://github.com/mrcyjanek/monero_c --branch master monero_c
10
cd monero_c
11
- git checkout b335585a7fb94b315eb52bd88f2da6d3489fa508
11
+ git checkout a27fbcb24d91143715ed930a05aaa4d853fba1f2
12
git reset --hard
13
git submodule update --init --force --recursive
14
./apply_patches.sh monero
tool/configure.dart
+1
@@ -434,6 +434,7 @@ WalletCredentials createMoneroNewWalletCredentials({required String name, requir
434
void setLedgerConnection(Object wallet, ledger.LedgerConnection connection);
435
void resetLedgerConnection();
436
void setGlobalLedgerConnection(ledger.LedgerConnection connection);
437
+ String? getLastLedgerCommand();
438
Map<String, List<int>> debugCallLength();
439
}
440