From 119f88e6d20871dffaaf8526dae7ebb35255c41a Mon Sep 17 00:00:00 2001 From: Tarik Gul <47201679+TarikGul@users.noreply.github.com> Date: Sun, 18 Aug 2024 19:13:50 -0700 Subject: [PATCH] Fix transferable formula (#5956) * Fix transferable formula * nits --- packages/api-derive/src/balances/all.ts | 9 +++++++-- packages/api-derive/src/balances/types.ts | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/api-derive/src/balances/all.ts b/packages/api-derive/src/balances/all.ts index fa69a5cc98..a9224155ce 100644 --- a/packages/api-derive/src/balances/all.ts +++ b/packages/api-derive/src/balances/all.ts @@ -57,9 +57,14 @@ function calcShared (api: DeriveApi, bestNumber: BlockNumber, data: DeriveBalanc let transferable = null; if (data.frameSystemAccountInfo?.frozen) { - const frozenReserveDiff = data.frameSystemAccountInfo.frozen.sub(data.reservedBalance); + const { frameSystemAccountInfo, freeBalance, reservedBalance } = data; - transferable = api.registry.createType('Balance', allLocked ? 0 : data?.freeBalance.sub(bnMax(frozenReserveDiff, api.consts.balances.existentialDeposit))); + transferable = api.registry.createType( + 'Balance', + allLocked + ? 0 + : freeBalance.sub(bnMax(new BN(0), frameSystemAccountInfo.frozen.sub(reservedBalance))) + ); } return objectSpread({}, data, { diff --git a/packages/api-derive/src/balances/types.ts b/packages/api-derive/src/balances/types.ts index aa28324d27..94605cb648 100644 --- a/packages/api-derive/src/balances/types.ts +++ b/packages/api-derive/src/balances/types.ts @@ -41,7 +41,7 @@ export interface DeriveBalancesAllAccountData extends DeriveBalancesAccountData */ lockedBreakdown: (PalletBalancesBalanceLock | BalanceLockTo212)[]; /** - * Calculated transferable balance. This uses the formula: free - max(frozen - reserve, ed) + * Calculated transferable balance. This uses the formula: free - max(0, frozen - reserve) * This is only correct when the return type of `api.query.system.account` is `FrameSystemAccountInfo`. * Which is the most up to date calulcation for transferrable balances. *