From e2b4e0d3e67de4f625c200baba1b08740d75ac22 Mon Sep 17 00:00:00 2001 From: Tarik Gul <47201679+TarikGul@users.noreply.github.com> Date: Sun, 18 Aug 2024 14:51:19 -0700 Subject: [PATCH] Rework api.derive.balance.{account, all} to work with the new frame account data (#5955) * Rework api.derive.balance.account to work with the new frame account data * Ensure api.derive.balances.all correctly returns transferable * Remove null from transferable * set back to null --- packages/api-derive/src/balances/account.ts | 71 +++++++++++++++------ packages/api-derive/src/balances/all.ts | 8 +++ packages/api-derive/src/balances/types.ts | 28 ++++++++ 3 files changed, 89 insertions(+), 18 deletions(-) diff --git a/packages/api-derive/src/balances/account.ts b/packages/api-derive/src/balances/account.ts index 087cfc87c557..b938c82a841c 100644 --- a/packages/api-derive/src/balances/account.ts +++ b/packages/api-derive/src/balances/account.ts @@ -4,6 +4,7 @@ import type { Observable } from 'rxjs'; import type { QueryableStorageEntry } from '@polkadot/api-base/types'; import type { AccountData, AccountId, AccountIndex, AccountInfo, Address, Balance, Index } from '@polkadot/types/interfaces'; +import type { FrameSystemAccountInfo, PalletBalancesAccountData } from '@polkadot/types/lookup'; import type { ITuple } from '@polkadot/types/types'; import type { DeriveApi, DeriveBalancesAccount, DeriveBalancesAccountData } from '../types.js'; @@ -15,7 +16,9 @@ import { memo } from '../util/index.js'; type BalanceResult = [Balance, Balance, Balance, Balance]; -type Result = [Index, BalanceResult[]]; +type Result = [Index, BalanceResult[], AccountType]; + +interface AccountType { isFrameAccountData: boolean } type DeriveCustomAccount = DeriveApi['derive'] & Record getBalance(api, b)) - }, getBalance(api, primary)); + additional: additional.map((b) => getBalance(api, b, accType)) + }, getBalance(api, primary, accType)); } // old @@ -54,7 +71,8 @@ function queryBalancesFree (api: DeriveApi, accountId: AccountId): Observable [ accountNonce, - [[freeBalance, reservedBalance, zeroBalance(api), zeroBalance(api)]] + [[freeBalance, reservedBalance, zeroBalance(api), zeroBalance(api)]], + { isFrameAccountData: false } ]) ); } @@ -62,7 +80,8 @@ function queryBalancesFree (api: DeriveApi, accountId: AccountId): Observable { const fill = (nonce: Index): Result => [ nonce, - [[zeroBalance(api), zeroBalance(api), zeroBalance(api), zeroBalance(api)]] + [[zeroBalance(api), zeroBalance(api), zeroBalance(api), zeroBalance(api)]], + { isFrameAccountData: false } ]; return isFunction(api.query.system.account) @@ -83,7 +102,8 @@ function queryBalancesAccount (api: DeriveApi, accountId: AccountId, modules: st const extract = (nonce: Index, data: AccountData[]): Result => [ nonce, - data.map(({ feeFrozen, free, miscFrozen, reserved }): BalanceResult => [free, reserved, feeFrozen, miscFrozen]) + data.map(({ feeFrozen, free, miscFrozen, reserved }): BalanceResult => [free, reserved, feeFrozen, miscFrozen]), + { isFrameAccountData: false } ]; // NOTE this is for the first case where we do have instances specified @@ -106,7 +126,7 @@ function queryBalancesAccount (api: DeriveApi, accountId: AccountId, modules: st function querySystemAccount (api: DeriveApi, accountId: AccountId): Observable { // AccountInfo is current, support old, eg. Edgeware - return api.query.system.account>(accountId).pipe( + return api.query.system.account>(accountId).pipe( map((infoOrTuple): Result => { const data = (infoOrTuple as AccountInfo).nonce ? (infoOrTuple as AccountInfo).data @@ -117,16 +137,30 @@ function querySystemAccount (api: DeriveApi, accountId: AccountId): Observable