forked from axiom-team/gecko
Scan derivation on import is OK
This commit is contained in:
parent
4625fa1d70
commit
263b99fb95
|
@ -22,6 +22,7 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
FocusNode walletNameFocus = FocusNode();
|
||||
Color? askedWordColor = Colors.black;
|
||||
bool isAskedWordValid = false;
|
||||
int scanedWalletNumber = -1;
|
||||
|
||||
late int nbrWord;
|
||||
String? nbrWordAlpha;
|
||||
|
@ -56,8 +57,7 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
TextEditingController cellController11 = TextEditingController();
|
||||
bool isFirstTimeSentenceComplete = true;
|
||||
|
||||
Future storeHDWChest(
|
||||
String address, String _name, BuildContext context) async {
|
||||
Future storeHDWChest(BuildContext context) async {
|
||||
int chestNumber = chestBox.isEmpty ? 0 : chestBox.keys.last + 1;
|
||||
|
||||
String chestName;
|
||||
|
@ -76,16 +76,6 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
await chestBox.add(thisChest);
|
||||
int? chestKey = chestBox.keys.last;
|
||||
|
||||
WalletData myWallet = WalletData(
|
||||
version: dataVersion,
|
||||
chest: chestKey,
|
||||
address: address,
|
||||
number: 0,
|
||||
name: _name,
|
||||
derivation: 2,
|
||||
imageDefaultPath: '0.png');
|
||||
await walletBox.add(myWallet);
|
||||
|
||||
await configBox.put('currentChest', chestKey);
|
||||
notifyListeners();
|
||||
}
|
||||
|
@ -375,25 +365,83 @@ class GenerateWalletsProvider with ChangeNotifier {
|
|||
notifyListeners();
|
||||
}
|
||||
|
||||
Future scanDerivations(BuildContext context, {int number = 10}) async {
|
||||
Future<bool> scanDerivations(BuildContext context,
|
||||
{int numberScan = 10}) async {
|
||||
SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||
final ss58 = _sub.ss58;
|
||||
final currentChestNumber = configBox.get('currentChest');
|
||||
bool isAlive = false;
|
||||
scanedWalletNumber = 0;
|
||||
notifyListeners();
|
||||
|
||||
// for ()
|
||||
// final addressData = await _sub.sdk.api.keyring.addressFromMnemonic(ss58,
|
||||
// cryptoType: CryptoType.sr25519,
|
||||
// mnemonic: generatedMnemonic!,
|
||||
// derivePath: '//4');
|
||||
final hasRoot = await scanRootBalance(_sub, currentChestNumber);
|
||||
if (hasRoot) {
|
||||
scanedWalletNumber = 1;
|
||||
isAlive = true;
|
||||
}
|
||||
|
||||
// final balance = await _sub.getBalance(addressData.address!);
|
||||
for (var derivationNbr in [for (var i = 0; i < numberScan; i += 1) i]) {
|
||||
final addressData = await _sub.sdk.api.keyring.addressFromMnemonic(ss58,
|
||||
cryptoType: CryptoType.sr25519,
|
||||
mnemonic: generatedMnemonic!,
|
||||
derivePath: '//$derivationNbr');
|
||||
|
||||
// log.d(balance);
|
||||
// if (balance != 0) {
|
||||
// await _sub.importAccount(
|
||||
// mnemonic: '',
|
||||
// fromMnemonic: true,
|
||||
// derivePath: '//4',
|
||||
// password: pin.text);
|
||||
// }
|
||||
final balance = await _sub.getBalance(addressData.address!);
|
||||
|
||||
log.d(balance);
|
||||
if (balance != 0) {
|
||||
isAlive = true;
|
||||
String walletName = scanedWalletNumber == 0
|
||||
? 'Mon portefeuille courant'
|
||||
: 'Portefeuille ${scanedWalletNumber + 1}';
|
||||
await _sub.importAccount(
|
||||
mnemonic: '',
|
||||
fromMnemonic: true,
|
||||
derivePath: '//$derivationNbr',
|
||||
password: pin.text);
|
||||
|
||||
WalletData myWallet = WalletData(
|
||||
version: dataVersion,
|
||||
chest: currentChestNumber,
|
||||
address: addressData.address!,
|
||||
number: scanedWalletNumber,
|
||||
name: walletName,
|
||||
derivation: derivationNbr,
|
||||
imageDefaultPath: '${scanedWalletNumber % 4}.png');
|
||||
await walletBox.add(myWallet);
|
||||
scanedWalletNumber = scanedWalletNumber + 1;
|
||||
}
|
||||
}
|
||||
scanedWalletNumber = -1;
|
||||
notifyListeners();
|
||||
return isAlive;
|
||||
}
|
||||
|
||||
Future<bool> scanRootBalance(
|
||||
SubstrateSdk _sub, int currentChestNumber) async {
|
||||
final addressData = await _sub.sdk.api.keyring.addressFromMnemonic(ss58,
|
||||
cryptoType: CryptoType.sr25519, mnemonic: generatedMnemonic!);
|
||||
|
||||
final balance = await _sub.getBalance(addressData.address!);
|
||||
|
||||
log.d(balance);
|
||||
if (balance != 0) {
|
||||
String walletName = 'Mon portefeuille racine';
|
||||
await _sub.importAccount(
|
||||
mnemonic: '', fromMnemonic: true, password: pin.text);
|
||||
|
||||
WalletData myWallet = WalletData(
|
||||
version: dataVersion,
|
||||
chest: currentChestNumber,
|
||||
address: addressData.address!,
|
||||
number: 0,
|
||||
name: walletName,
|
||||
derivation: -1,
|
||||
imageDefaultPath: '0.png');
|
||||
await walletBox.add(myWallet);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import 'dart:async';
|
|||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:gecko/globals.dart';
|
||||
import 'package:gecko/models/wallet_data.dart';
|
||||
import 'package:gecko/providers/generate_wallets.dart';
|
||||
import 'package:gecko/providers/my_wallets.dart';
|
||||
import 'package:gecko/providers/substrate_sdk.dart';
|
||||
|
@ -58,6 +59,20 @@ class OnboardingStepTen extends StatelessWidget {
|
|||
style: TextStyle(fontSize: 16 * ratio))
|
||||
]),
|
||||
SizedBox(height: isTall ? 80 : 20),
|
||||
Visibility(
|
||||
visible: _generateWalletProvider.scanedWalletNumber != -1,
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.only(bottom: 15),
|
||||
child: SizedBox(
|
||||
height: 22,
|
||||
width: 22,
|
||||
child: CircularProgressIndicator(
|
||||
color: orangeC,
|
||||
strokeWidth: 3,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
pinForm(context, _walletOptions, _pinLenght, 1, 2),
|
||||
InkWell(
|
||||
onTap: () {
|
||||
|
@ -153,19 +168,32 @@ class OnboardingStepTen extends StatelessWidget {
|
|||
log.d(_pin + ' || ' + _generateWalletProvider.pin.text);
|
||||
if (_pin.toUpperCase() == _generateWalletProvider.pin.text) {
|
||||
pinColor = Colors.green[500];
|
||||
final address = await _sub.importAccount(
|
||||
fromMnemonic: true,
|
||||
mnemonic: _generateWalletProvider.generatedMnemonic!,
|
||||
derivePath: '//2',
|
||||
password: _generateWalletProvider.pin.text);
|
||||
await _generateWalletProvider.storeHDWChest(
|
||||
address, 'Mon portefeuille courant', context);
|
||||
|
||||
await _generateWalletProvider.storeHDWChest(context);
|
||||
bool isAlive = false;
|
||||
if (scanDerivation) {
|
||||
isAlive = await _generateWalletProvider
|
||||
.scanDerivations(context, numberScan: 30);
|
||||
}
|
||||
if (!isAlive) {
|
||||
final address = await _sub.importAccount(
|
||||
fromMnemonic: true,
|
||||
mnemonic: _generateWalletProvider.generatedMnemonic!,
|
||||
derivePath: '//2',
|
||||
password: _generateWalletProvider.pin.text);
|
||||
WalletData myWallet = WalletData(
|
||||
version: dataVersion,
|
||||
chest: configBox.get('currentChest'),
|
||||
address: address,
|
||||
number: 0,
|
||||
name: 'Mon portefeuille courant',
|
||||
derivation: 2,
|
||||
imageDefaultPath: '0.png');
|
||||
await walletBox.add(myWallet);
|
||||
}
|
||||
_myWalletProvider.readAllWallets(_currentChest);
|
||||
_myWalletProvider.rebuildWidget();
|
||||
|
||||
await _generateWalletProvider.scanDerivations(context,
|
||||
number: 20);
|
||||
|
||||
_generateWalletProvider.generatedMnemonic = '';
|
||||
_myWalletProvider.resetPinCode();
|
||||
Navigator.push(
|
||||
|
|
Loading…
Reference in New Issue