From b16f54d8bc2851941dc699673a08d44f730f6441 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Wed, 26 Aug 2020 19:39:44 +0200 Subject: [PATCH] Small sorting optimizations (#3529) --- packages/page-staking/src/useSortedTargets.ts | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/packages/page-staking/src/useSortedTargets.ts b/packages/page-staking/src/useSortedTargets.ts index 584e89b9c9..048788a103 100644 --- a/packages/page-staking/src/useSortedTargets.ts +++ b/packages/page-staking/src/useSortedTargets.ts @@ -64,18 +64,20 @@ function sortValidators (list: ValidatorInfo[]): ValidatorInfo[] { } function extractSingle (allAccounts: string[], amount: BN = baseBalance(), { info }: DeriveStakingElected | DeriveStakingWaiting, favorites: string[], perValidatorReward: BN, isElected: boolean): [ValidatorInfo[], string[], BN, BN] { - const nominators: string[] = []; + const defaultExposure = { + others: registry.createType('Vec'), + own: registry.createType('Compact'), + total: registry.createType('Compact') + }; + const defaultPrefs = { + commission: registry.createType('Compact') + }; + const nominators: Record = {}; let totalStaked = BN_ZERO; let lowStaked = BN_ZERO; const list = info.map(({ accountId, exposure: _exposure, stakingLedger, validatorPrefs }): ValidatorInfo => { - const exposure = _exposure || { - others: registry.createType('Vec'), - own: registry.createType('Compact'), - total: registry.createType('Compact') - }; - const prefs = (validatorPrefs as (ValidatorPrefs | ValidatorPrefsTo196)) || { - commission: registry.createType('Compact') - }; + const exposure = _exposure || defaultExposure; + const prefs = (validatorPrefs as (ValidatorPrefs | ValidatorPrefsTo196)) || defaultPrefs; let bondOwn = exposure.own.unwrap(); let bondTotal = exposure.total.unwrap(); const skipRewards = bondTotal.isZero(); @@ -95,9 +97,7 @@ function extractSingle (allAccounts: string[], amount: BN = baseBalance(), { inf const isNominating = exposure.others.reduce((isNominating, indv): boolean => { const nominator = indv.who.toString(); - if (!nominators.includes(nominator)) { - nominators.push(nominator); - } + nominators[nominator] = true; return isNominating || allAccounts.includes(nominator); }, allAccounts.includes(key)); @@ -136,7 +136,7 @@ function extractSingle (allAccounts: string[], amount: BN = baseBalance(), { inf }; }); - return [list, nominators, totalStaked, lowStaked]; + return [list, Object.keys(nominators), totalStaked, lowStaked]; } function extractInfo (allAccounts: string[], amount: BN = baseBalance(), electedDerive: DeriveStakingElected, waitingDerive: DeriveStakingWaiting, favorites: string[], lastReward = BN_ONE): Partial {