fix derivation Info (#1689)
Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
Serhii committed
Sep 26, 2024 at 05:10 UTC
647551661d3fde011a017974eb56ece869c94e98
1 file changed
+42
-3
lib/view_model/wallet_creation_vm.dart
+42
-3
@@ -5,8 +5,10 @@ import 'package:cake_wallet/di.dart';
5
import 'package:cake_wallet/entities/background_tasks.dart';
6
import 'package:cake_wallet/entities/generate_name.dart';
7
import 'package:cake_wallet/generated/i18n.dart';
8
+import 'package:cake_wallet/nano/nano.dart';
9
import 'package:cake_wallet/store/app_store.dart';
10
import 'package:cake_wallet/store/settings_store.dart';
11
+import 'package:cake_wallet/view_model/restore/restore_mode.dart';
12
import 'package:cake_wallet/view_model/restore/restore_wallet.dart';
13
import 'package:cake_wallet/view_model/seed_settings_view_model.dart';
14
import 'package:cw_core/pathForWallet.dart';
@@ -82,9 +84,22 @@ abstract class WalletCreationVMBase with Store {
84
walletCreationService.checkIfExists(name);
85
final dirPath = await pathForWalletDir(name: name, type: type);
86
final path = await pathForWallet(name: name, type: type);
85
- final credentials = restoreWallet != null
86
- ? getCredentialsFromRestoredWallet(options, restoreWallet)
87
- : getCredentials(options);
87
+
88
+ WalletCredentials credentials;
89
+ if (restoreWallet != null) {
90
+ if (restoreWallet.restoreMode == WalletRestoreMode.seed &&
91
+ options == null &&
92
+ (type == WalletType.nano ||
93
+ type == WalletType.bitcoin ||
94
+ type == WalletType.litecoin)) {
95
+ final derivationInfo = await getDerivationInfo(restoreWallet);
96
+ options ??= {};
97
+ options["derivationInfo"] = derivationInfo.first;
98
+ }
99
+ credentials = getCredentialsFromRestoredWallet(options, restoreWallet);
100
+ } else {
101
+ credentials = getCredentials(options);
102
+ }
103
104
final walletInfo = WalletInfo.external(
105
id: WalletBase.idFor(name, type),
@@ -185,6 +200,30 @@ abstract class WalletCreationVMBase with Store {
200
}
201
}
202
203
+ Future<List<DerivationInfo>> getDerivationInfo(RestoredWallet restoreWallet) async {
204
+ var list = <DerivationInfo>[];
205
+ final walletType = restoreWallet.type;
206
+ var appStore = getIt.get<AppStore>();
207
+ var node = appStore.settingsStore.getCurrentNode(walletType);
208
+
209
+ switch (walletType) {
210
+ case WalletType.bitcoin:
211
+ case WalletType.litecoin:
212
+ return bitcoin!.getDerivationsFromMnemonic(
213
+ mnemonic: restoreWallet.mnemonicSeed!,
214
+ node: node,
215
+ );
216
+ case WalletType.nano:
217
+ return nanoUtil!.getDerivationsFromMnemonic(
218
+ mnemonic: restoreWallet.mnemonicSeed!,
219
+ node: node,
220
+ );
221
+ default:
222
+ break;
223
+ }
224
+ return list;
225
+ }
226
+
227
WalletCredentials getCredentials(dynamic options) => throw UnimplementedError();
228
229
Future<WalletBase> process(WalletCredentials credentials) => throw UnimplementedError();