Revise api.derive.balances.all to include ED when necessary (#5957)
This commit is contained in:
@@ -58,12 +58,16 @@ function calcShared (api: DeriveApi, bestNumber: BlockNumber, data: DeriveBalanc
|
||||
|
||||
if (data.frameSystemAccountInfo?.frozen) {
|
||||
const { frameSystemAccountInfo, freeBalance, reservedBalance } = data;
|
||||
const noFrozenReserved = frameSystemAccountInfo.frozen.isZero() && reservedBalance.isZero();
|
||||
const ED = api.consts.balances.existentialDeposit;
|
||||
const maybeED = noFrozenReserved ? new BN(0) : ED;
|
||||
const frozenReserveDif = frameSystemAccountInfo.frozen.sub(reservedBalance);
|
||||
|
||||
transferable = api.registry.createType(
|
||||
'Balance',
|
||||
allLocked
|
||||
? 0
|
||||
: freeBalance.sub(bnMax(new BN(0), frameSystemAccountInfo.frozen.sub(reservedBalance)))
|
||||
: freeBalance.sub(bnMax(maybeED, frozenReserveDif))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,8 @@ export interface DeriveBalancesAllAccountData extends DeriveBalancesAccountData
|
||||
*/
|
||||
lockedBreakdown: (PalletBalancesBalanceLock | BalanceLockTo212)[];
|
||||
/**
|
||||
* Calculated transferable balance. This uses the formula: free - max(0, frozen - reserve)
|
||||
* Calculated transferable balance. This uses the formula: free - max(maybeEd, frozen - reserve)
|
||||
* Where `maybeEd` means if there is no frozen and reserves it will be zero, else it will be the existential deposit.
|
||||
* 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.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user