@@ -33,6 +33,7 @@ import 'package:cw_zano/zano_wallet_api.dart';
3333import 'package:cw_zano/zano_wallet_exceptions.dart' ;
3434import 'package:cw_zano/zano_wallet_service.dart' ;
3535import 'package:cw_zano/api/model/balance.dart' ;
36+ import 'package:cw_zano/bip39_seed.dart' ;
3637
3738import 'package:mobx/mobx.dart' ;
3839
@@ -132,14 +133,25 @@ abstract class ZanoWalletBase
132133 final wallet = ZanoWallet (credentials.walletInfo! , await credentials.walletInfo! .getDerivationInfo (), credentials.password! );
133134 await wallet.initWallet ();
134135 final path = await pathForWallet (name: credentials.name, type: credentials.walletInfo! .type);
135- final createWalletResult = await wallet.createWallet (path, credentials.password! );
136+ final strength = credentials.seedPhraseLength == 24 ? 256 : 128 ;
137+ final mnemonic = generateBip39Mnemonic (strength: strength);
138+ final passphrase = credentials.passphrase ?? '' ;
139+ final secretDerivation = getSecretDerivationFromBip39 (mnemonic, passphrase: passphrase);
140+ final creationTimestamp = DateTime .now ().millisecondsSinceEpoch ~ / 1000 ;
141+ final createWalletResult = await wallet.restoreWalletFromDerivations (
142+ path,
143+ credentials.password! ,
144+ secretDerivation,
145+ creationTimestamp: creationTimestamp,
146+ );
136147 await wallet.initWallet ();
137- await wallet.parseCreateWalletResult (createWalletResult );
148+ await wallet.setBip39Secrets (mnemonic : mnemonic, creationTimestamp : creationTimestamp );
138149 if (credentials.passphrase != null ) {
139150 await wallet.setPassphrase (credentials.passphrase! );
140- wallet.seed = await createWalletResult.seed (wallet);
141- wallet.passphrase = await wallet.getPassphrase ();
142151 }
152+ await wallet.parseCreateWalletResult (createWalletResult);
153+ wallet.seed = mnemonic;
154+ wallet.passphrase = await wallet.getPassphrase ();
143155 await wallet.init (createWalletResult.wi.address);
144156 return wallet;
145157 }
@@ -149,15 +161,33 @@ abstract class ZanoWalletBase
149161 final wallet = ZanoWallet (credentials.walletInfo! , await credentials.walletInfo! .getDerivationInfo (), credentials.password! );
150162 await wallet.initWallet ();
151163 final path = await pathForWallet (name: credentials.name, type: credentials.walletInfo! .type);
152- final createWalletResult = await wallet.restoreWalletFromSeed (
153- path, credentials.password! , credentials.mnemonic, credentials.passphrase);
164+ final passphrase = credentials.passphrase ?? '' ;
165+ final CreateWalletResult createWalletResult;
166+ if (isBip39Seed (credentials.mnemonic)) {
167+ final secretDerivation =
168+ getSecretDerivationFromBip39 (credentials.mnemonic, passphrase: passphrase);
169+ final creationTimestamp = (credentials.height ?? 0 ) > 0 ? credentials.height! : 0 ;
170+ createWalletResult = await wallet.restoreWalletFromDerivations (
171+ path,
172+ credentials.password! ,
173+ secretDerivation,
174+ creationTimestamp: creationTimestamp,
175+ );
176+ await wallet.setBip39Secrets (
177+ mnemonic: credentials.mnemonic,
178+ creationTimestamp: creationTimestamp,
179+ );
180+ } else {
181+ createWalletResult = await wallet.restoreWalletFromSeed (
182+ path, credentials.password! , credentials.mnemonic, credentials.passphrase);
183+ }
154184 await wallet.initWallet ();
155- await wallet.parseCreateWalletResult (createWalletResult);
156185 if (credentials.passphrase != null ) {
157186 await wallet.setPassphrase (credentials.passphrase! );
158- wallet.seed = await createWalletResult.seed (wallet);
159- wallet.passphrase = await wallet.getPassphrase ();
160187 }
188+ await wallet.parseCreateWalletResult (createWalletResult);
189+ wallet.seed = await createWalletResult.seed (wallet);
190+ wallet.passphrase = await wallet.getPassphrase ();
161191 await wallet.init (createWalletResult.wi.address);
162192 return wallet;
163193 }
0 commit comments