From fadc3c0cdc186adc529eca9d5f0180de5badf808 Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 17 Nov 2023 16:16:27 +0100 Subject: [PATCH] feat: balance multi queries is working --- lib/providers/substrate_sdk.dart | 52 +++++++++++++++++++++++++------- lib/screens/home.dart | 8 ----- 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/lib/providers/substrate_sdk.dart b/lib/providers/substrate_sdk.dart index 3c71c29..48a9fe8 100644 --- a/lib/providers/substrate_sdk.dart +++ b/lib/providers/substrate_sdk.dart @@ -200,14 +200,45 @@ class SubstrateSdk with ChangeNotifier { return balanceRatio; } - Future getBalanceMulti(List addresses) async { + Future>> getBalanceMulti( + List addresses) async { List stringifyAddresses = []; for (var element in addresses) { stringifyAddresses.add('"$element"'); } - final List balanceGlobal = - await _getStorage('system.account.multi($stringifyAddresses)'); - log.d('debug multi: $balanceGlobal'); + + // Get onchain storage values + final List balanceGlobalMulti = + (await _getStorage('system.account.multi($stringifyAddresses)') as List) + .map((dynamic e) => e as Map) + .toList(); + log.d('debug multi: $balanceGlobalMulti'); + + final List idtyIndexList = (await _getStorage( + 'identity.identityIndexOf.multi($stringifyAddresses)') as List) + .map((dynamic e) => e as int?) + .toList(); + final List idtyDataList = (idtyIndexList.isEmpty + ? [] + : (await _getStorage('identity.identities.multi($idtyIndexList)')) + as List) + .map((dynamic e) => e as Map?) + .toList(); + final List pastReevals = + await _getStorage('universalDividend.pastReevals()'); + + int nbr = 0; + Map> finalBalancesList = {}; + for (Map balanceGlobal in balanceGlobalMulti) { + final computedBalance = + await _computeBalance(idtyDataList[nbr], pastReevals, balanceGlobal); + finalBalancesList.putIfAbsent(addresses[nbr], () => computedBalance); + nbr++; + } + + log.i(finalBalancesList); + + return finalBalancesList; } Future> getBalance(String address) async { @@ -230,6 +261,11 @@ class SubstrateSdk with ChangeNotifier { final List pastReevals = await _getStorage('universalDividend.pastReevals()'); + return _computeBalance(idtyData, pastReevals, balanceGlobal); + } + + Future> _computeBalance( + Map? idtyData, List pastReevals, Map balanceGlobal) async { // Compute amount of claimable UDs currentUdIndex = await getCurrentUdIndex(); final int unclaimedUds = _computeUnclaimUds( @@ -241,19 +277,13 @@ class SubstrateSdk with ChangeNotifier { // log.d('udValue: $udValue'); - Map finalBalances = { + return { 'transferableBalance': round((transferableBalance / balanceRatio) / 100), 'free': round((balanceGlobal['data']['free'] / balanceRatio) / 100), 'unclaimedUds': round((unclaimedUds / balanceRatio) / 100), 'reserved': round((balanceGlobal['data']['reserved'] / balanceRatio) / 100), }; - - // log.i(finalBalances); - log.d( - '${getShortPubkey(address)} --- BALANCE: ${finalBalances['transferableBalance']}'); - - return finalBalances; } int _computeUnclaimUds(int firstEligibleUd, List pastReevals) { diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 4bb1551..5e70648 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -119,14 +119,6 @@ class _HomeScreenState extends State { ratio = 1.125; } - //TODO: finish to implement multiqueries - - // final sub = Provider.of(context, listen: false); - // sub.getBalanceMulti([ - // '5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn', - // '5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz' - // ]); - return Scaffold( resizeToAvoidBottomInset: false, drawer: MainDrawer(isWalletsExists: isWalletsExists),