From a751b1ebf3a42ebd35185881f7410b0a7e0e5ab3 Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 17 Nov 2023 17:33:57 +0100 Subject: [PATCH] feat: big improvement on wallet scan at safe import --- lib/providers/generate_wallets.dart | 31 +++++++++++++------------ lib/providers/substrate_sdk.dart | 4 ---- lib/screens/myWallets/wallets_home.dart | 3 ++- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/lib/providers/generate_wallets.dart b/lib/providers/generate_wallets.dart index 3cbe930..a180d4d 100644 --- a/lib/providers/generate_wallets.dart +++ b/lib/providers/generate_wallets.dart @@ -23,7 +23,7 @@ class GenerateWalletsProvider with ChangeNotifier { bool isAskedWordValid = false; int scanedValidWalletNumber = -1; int scanedWalletNumber = -1; - int numberScan = 20; + int numberScan = 60; late int nbrWord; String? nbrWordAlpha; @@ -301,6 +301,7 @@ class GenerateWalletsProvider with ChangeNotifier { bool isAlive = false; scanedValidWalletNumber = 0; scanedWalletNumber = 0; + Map addressToScan = {}; notifyListeners(); if (!sub.nodeConnected) { @@ -315,37 +316,38 @@ class GenerateWalletsProvider with ChangeNotifier { isAlive = true; } - for (var derivationNbr in [for (var i = 0; i < numberScan; i += 1) i]) { + for (int derivationNbr in [for (var i = 0; i < numberScan; i += 1) i]) { final addressData = await sub.sdk.api.keyring.addressFromMnemonic( sub.currencyParameters['ss58']!, cryptoType: CryptoType.sr25519, mnemonic: generatedMnemonic!, derivePath: '//$derivationNbr'); + addressToScan.putIfAbsent(addressData.address!, () => derivationNbr); + } - final Map balance = await sub.getBalance(addressData.address!).timeout( - const Duration(seconds: 1), - onTimeout: () => {'transferableBalance': 0}, - ); - // const balance = 0; + final balanceList = + await sub.getBalanceMulti(addressToScan.keys.toList()).timeout( + const Duration(seconds: 20), + onTimeout: () => {}, + ); - log.d( - "${addressData.address!}: ${balance['transferableBalance']} $currencyName"); - if (balance['transferableBalance'] != 0) { + for (String scannedWallet in balanceList.keys) { + if (balanceList[scannedWallet]!['transferableBalance'] != 0) { isAlive = true; String walletName = scanedValidWalletNumber == 0 ? 'currentWallet'.tr() : '${'wallet'.tr()} ${scanedValidWalletNumber + 1}'; await sub.importAccount( mnemonic: generatedMnemonic!, - derivePath: '//$derivationNbr', + derivePath: "//${addressToScan[scannedWallet]}", password: pin.text); WalletData myWallet = WalletData( chest: currentChestNumber, - address: addressData.address!, + address: scannedWallet, number: scanedValidWalletNumber, name: walletName, - derivation: derivationNbr, + derivation: addressToScan[scannedWallet], imageDefaultPath: '${scanedValidWalletNumber % 4}.png', isOwned: true); await walletBox.put(myWallet.address, myWallet); @@ -354,6 +356,7 @@ class GenerateWalletsProvider with ChangeNotifier { scanedWalletNumber = scanedWalletNumber + 1; notifyListeners(); } + log.d(scanedWalletNumber); scanedWalletNumber = -1; scanedValidWalletNumber = -1; @@ -372,8 +375,6 @@ class GenerateWalletsProvider with ChangeNotifier { onTimeout: () => {}, ); - log.d(balance); - log.d( "${addressData.address!}: ${balance['transferableBalance']} $currencyName"); if (balance['transferableBalance'] != 0) { diff --git a/lib/providers/substrate_sdk.dart b/lib/providers/substrate_sdk.dart index 48a9fe8..511b517 100644 --- a/lib/providers/substrate_sdk.dart +++ b/lib/providers/substrate_sdk.dart @@ -236,8 +236,6 @@ class SubstrateSdk with ChangeNotifier { nbr++; } - log.i(finalBalancesList); - return finalBalancesList; } @@ -275,8 +273,6 @@ class SubstrateSdk with ChangeNotifier { final int transferableBalance = (balanceGlobal['data']['free'] + unclaimedUds); - // log.d('udValue: $udValue'); - return { 'transferableBalance': round((transferableBalance / balanceRatio) / 100), 'free': round((balanceGlobal['data']['free'] / balanceRatio) / 100), diff --git a/lib/screens/myWallets/wallets_home.dart b/lib/screens/myWallets/wallets_home.dart index 2882b4d..1da0d0b 100644 --- a/lib/screens/myWallets/wallets_home.dart +++ b/lib/screens/myWallets/wallets_home.dart @@ -467,7 +467,8 @@ class _WalletsHomeState extends State { }), ), Consumer(builder: (context, sub, _) { - return sub.nodeConnected + return sub.nodeConnected && + myWalletProvider.listWallets.length < 30 ? addNewDerivation(context) : const Text(''); }),