Skip to content
Snippets Groups Projects
Commit 263b99fb authored by poka's avatar poka
Browse files

Scan derivation on import is OK

parent 4625fa1d
No related branches found
No related tags found
No related merge requests found
Pipeline #15964 failed
...@@ -22,6 +22,7 @@ class GenerateWalletsProvider with ChangeNotifier { ...@@ -22,6 +22,7 @@ class GenerateWalletsProvider with ChangeNotifier {
FocusNode walletNameFocus = FocusNode(); FocusNode walletNameFocus = FocusNode();
Color? askedWordColor = Colors.black; Color? askedWordColor = Colors.black;
bool isAskedWordValid = false; bool isAskedWordValid = false;
int scanedWalletNumber = -1;
late int nbrWord; late int nbrWord;
String? nbrWordAlpha; String? nbrWordAlpha;
...@@ -56,8 +57,7 @@ class GenerateWalletsProvider with ChangeNotifier { ...@@ -56,8 +57,7 @@ class GenerateWalletsProvider with ChangeNotifier {
TextEditingController cellController11 = TextEditingController(); TextEditingController cellController11 = TextEditingController();
bool isFirstTimeSentenceComplete = true; bool isFirstTimeSentenceComplete = true;
Future storeHDWChest( Future storeHDWChest(BuildContext context) async {
String address, String _name, BuildContext context) async {
int chestNumber = chestBox.isEmpty ? 0 : chestBox.keys.last + 1; int chestNumber = chestBox.isEmpty ? 0 : chestBox.keys.last + 1;
String chestName; String chestName;
...@@ -76,16 +76,6 @@ class GenerateWalletsProvider with ChangeNotifier { ...@@ -76,16 +76,6 @@ class GenerateWalletsProvider with ChangeNotifier {
await chestBox.add(thisChest); await chestBox.add(thisChest);
int? chestKey = chestBox.keys.last; 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); await configBox.put('currentChest', chestKey);
notifyListeners(); notifyListeners();
} }
...@@ -375,25 +365,83 @@ class GenerateWalletsProvider with ChangeNotifier { ...@@ -375,25 +365,83 @@ class GenerateWalletsProvider with ChangeNotifier {
notifyListeners(); 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); SubstrateSdk _sub = Provider.of<SubstrateSdk>(context, listen: false);
final ss58 = _sub.ss58; final ss58 = _sub.ss58;
final currentChestNumber = configBox.get('currentChest');
bool isAlive = false;
scanedWalletNumber = 0;
notifyListeners();
final hasRoot = await scanRootBalance(_sub, currentChestNumber);
if (hasRoot) {
scanedWalletNumber = 1;
isAlive = true;
}
// for () for (var derivationNbr in [for (var i = 0; i < numberScan; i += 1) i]) {
// final addressData = await _sub.sdk.api.keyring.addressFromMnemonic(ss58, final addressData = await _sub.sdk.api.keyring.addressFromMnemonic(ss58,
// cryptoType: CryptoType.sr25519, cryptoType: CryptoType.sr25519,
// mnemonic: generatedMnemonic!, mnemonic: generatedMnemonic!,
// derivePath: '//4'); derivePath: '//$derivationNbr');
// final balance = await _sub.getBalance(addressData.address!); final balance = await _sub.getBalance(addressData.address!);
// log.d(balance); log.d(balance);
// if (balance != 0) { if (balance != 0) {
// await _sub.importAccount( isAlive = true;
// mnemonic: '', String walletName = scanedWalletNumber == 0
// fromMnemonic: true, ? 'Mon portefeuille courant'
// derivePath: '//4', : 'Portefeuille ${scanedWalletNumber + 1}';
// password: pin.text); 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'; ...@@ -4,6 +4,7 @@ import 'dart:async';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gecko/globals.dart'; import 'package:gecko/globals.dart';
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/providers/generate_wallets.dart'; import 'package:gecko/providers/generate_wallets.dart';
import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/my_wallets.dart';
import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/substrate_sdk.dart';
...@@ -58,6 +59,20 @@ class OnboardingStepTen extends StatelessWidget { ...@@ -58,6 +59,20 @@ class OnboardingStepTen extends StatelessWidget {
style: TextStyle(fontSize: 16 * ratio)) style: TextStyle(fontSize: 16 * ratio))
]), ]),
SizedBox(height: isTall ? 80 : 20), 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), pinForm(context, _walletOptions, _pinLenght, 1, 2),
InkWell( InkWell(
onTap: () { onTap: () {
...@@ -153,19 +168,32 @@ class OnboardingStepTen extends StatelessWidget { ...@@ -153,19 +168,32 @@ class OnboardingStepTen extends StatelessWidget {
log.d(_pin + ' || ' + _generateWalletProvider.pin.text); log.d(_pin + ' || ' + _generateWalletProvider.pin.text);
if (_pin.toUpperCase() == _generateWalletProvider.pin.text) { if (_pin.toUpperCase() == _generateWalletProvider.pin.text) {
pinColor = Colors.green[500]; pinColor = Colors.green[500];
final address = await _sub.importAccount(
fromMnemonic: true, await _generateWalletProvider.storeHDWChest(context);
mnemonic: _generateWalletProvider.generatedMnemonic!, bool isAlive = false;
derivePath: '//2', if (scanDerivation) {
password: _generateWalletProvider.pin.text); isAlive = await _generateWalletProvider
await _generateWalletProvider.storeHDWChest( .scanDerivations(context, numberScan: 30);
address, 'Mon portefeuille courant', context); }
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.readAllWallets(_currentChest);
_myWalletProvider.rebuildWidget(); _myWalletProvider.rebuildWidget();
await _generateWalletProvider.scanDerivations(context,
number: 20);
_generateWalletProvider.generatedMnemonic = ''; _generateWalletProvider.generatedMnemonic = '';
_myWalletProvider.resetPinCode(); _myWalletProvider.resetPinCode();
Navigator.push( Navigator.push(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment