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

feat: balance multi queries is working

parent 1f72710b
No related branches found
No related tags found
No related merge requests found
...@@ -200,14 +200,45 @@ class SubstrateSdk with ChangeNotifier { ...@@ -200,14 +200,45 @@ class SubstrateSdk with ChangeNotifier {
return balanceRatio; return balanceRatio;
} }
Future getBalanceMulti(List addresses) async { Future<Map<String, Map<String, double>>> getBalanceMulti(
List<String> addresses) async {
List stringifyAddresses = []; List stringifyAddresses = [];
for (var element in addresses) { for (var element in addresses) {
stringifyAddresses.add('"$element"'); stringifyAddresses.add('"$element"');
} }
final List balanceGlobal =
await _getStorage('system.account.multi($stringifyAddresses)'); // Get onchain storage values
log.d('debug multi: $balanceGlobal'); final List<Map> balanceGlobalMulti =
(await _getStorage('system.account.multi($stringifyAddresses)') as List)
.map((dynamic e) => e as Map<String, dynamic>)
.toList();
log.d('debug multi: $balanceGlobalMulti');
final List<int?> idtyIndexList = (await _getStorage(
'identity.identityIndexOf.multi($stringifyAddresses)') as List)
.map((dynamic e) => e as int?)
.toList();
final List<Map?> idtyDataList = (idtyIndexList.isEmpty
? []
: (await _getStorage('identity.identities.multi($idtyIndexList)'))
as List)
.map((dynamic e) => e as Map<String, dynamic>?)
.toList();
final List pastReevals =
await _getStorage('universalDividend.pastReevals()');
int nbr = 0;
Map<String, Map<String, double>> 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<Map<String, double>> getBalance(String address) async { Future<Map<String, double>> getBalance(String address) async {
...@@ -230,6 +261,11 @@ class SubstrateSdk with ChangeNotifier { ...@@ -230,6 +261,11 @@ class SubstrateSdk with ChangeNotifier {
final List pastReevals = final List pastReevals =
await _getStorage('universalDividend.pastReevals()'); await _getStorage('universalDividend.pastReevals()');
return _computeBalance(idtyData, pastReevals, balanceGlobal);
}
Future<Map<String, double>> _computeBalance(
Map? idtyData, List pastReevals, Map balanceGlobal) async {
// Compute amount of claimable UDs // Compute amount of claimable UDs
currentUdIndex = await getCurrentUdIndex(); currentUdIndex = await getCurrentUdIndex();
final int unclaimedUds = _computeUnclaimUds( final int unclaimedUds = _computeUnclaimUds(
...@@ -241,19 +277,13 @@ class SubstrateSdk with ChangeNotifier { ...@@ -241,19 +277,13 @@ class SubstrateSdk with ChangeNotifier {
// log.d('udValue: $udValue'); // log.d('udValue: $udValue');
Map<String, double> finalBalances = { return {
'transferableBalance': round((transferableBalance / balanceRatio) / 100), 'transferableBalance': round((transferableBalance / balanceRatio) / 100),
'free': round((balanceGlobal['data']['free'] / balanceRatio) / 100), 'free': round((balanceGlobal['data']['free'] / balanceRatio) / 100),
'unclaimedUds': round((unclaimedUds / balanceRatio) / 100), 'unclaimedUds': round((unclaimedUds / balanceRatio) / 100),
'reserved': 'reserved':
round((balanceGlobal['data']['reserved'] / balanceRatio) / 100), round((balanceGlobal['data']['reserved'] / balanceRatio) / 100),
}; };
// log.i(finalBalances);
log.d(
'${getShortPubkey(address)} --- BALANCE: ${finalBalances['transferableBalance']}');
return finalBalances;
} }
int _computeUnclaimUds(int firstEligibleUd, List pastReevals) { int _computeUnclaimUds(int firstEligibleUd, List pastReevals) {
......
...@@ -119,14 +119,6 @@ class _HomeScreenState extends State<HomeScreen> { ...@@ -119,14 +119,6 @@ class _HomeScreenState extends State<HomeScreen> {
ratio = 1.125; ratio = 1.125;
} }
//TODO: finish to implement multiqueries
// final sub = Provider.of<SubstrateSdk>(context, listen: false);
// sub.getBalanceMulti([
// '5CQ8T4qpbYJq7uVsxGPQ5q2df7x3Wa4aRY6HUWMBYjfLZhnn',
// '5Dq8xjvkmbz7q4g2LbZgyExD26VSCutfEc6n4W4AfQeVHZqz'
// ]);
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, resizeToAvoidBottomInset: false,
drawer: MainDrawer(isWalletsExists: isWalletsExists), drawer: MainDrawer(isWalletsExists: isWalletsExists),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment