From 158ab2ee1977db50a57f9270ef29ae6b53dd6a63 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sat, 19 Sep 2020 09:56:25 +0200 Subject: [PATCH] Update Darwinia Crab IndividualExposure types (#3719) * Update Darwininia Crab IndividualExposure types * own comment * Charts --- packages/apps-config/src/api/spec/crab.ts | 5 +++-- packages/page-staking/src/Query/ChartStake.tsx | 5 +++-- packages/page-staking/src/Query/util.ts | 15 +++++++++++++-- packages/page-staking/src/useSortedTargets.ts | 5 +++-- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/packages/apps-config/src/api/spec/crab.ts b/packages/apps-config/src/api/spec/crab.ts index f4b84f559d..77530234cf 100644 --- a/packages/apps-config/src/api/spec/crab.ts +++ b/packages/apps-config/src/api/spec/crab.ts @@ -96,8 +96,9 @@ export default { who: 'AccountId', ring_balance: 'Compact', kton_balance: 'Compact', - power: 'Power', - value: 'Compact' + power: 'Power' + // not in https://github.com/darwinia-network/darwinia-common/blob/master/frame/staking/src/lib.rs + // value: 'Compact' }, ElectionResultT: { elected_stashes: 'Vec', diff --git a/packages/page-staking/src/Query/ChartStake.tsx b/packages/page-staking/src/Query/ChartStake.tsx index bedb9c213d..a6f7a003e1 100644 --- a/packages/page-staking/src/Query/ChartStake.tsx +++ b/packages/page-staking/src/Query/ChartStake.tsx @@ -24,8 +24,9 @@ function extractStake (exposures: DeriveOwnExposure[] = [], divisor: BN): ChartI let total = 0; exposures.forEach(({ clipped, era, exposure }): void => { - const cli = balanceToNumber(clipped.total.unwrap(), divisor); - const exp = balanceToNumber(exposure.total.unwrap(), divisor); + // Darwinia Crab doesn't have the total field + const cli = balanceToNumber(clipped.total?.unwrap(), divisor); + const exp = balanceToNumber(exposure.total?.unwrap(), divisor); total += cli; diff --git a/packages/page-staking/src/Query/util.ts b/packages/page-staking/src/Query/util.ts index 1012fcf337..9b2ba006c7 100644 --- a/packages/page-staking/src/Query/util.ts +++ b/packages/page-staking/src/Query/util.ts @@ -2,7 +2,18 @@ // SPDX-License-Identifier: Apache-2.0 import BN from 'bn.js'; +import { BN_ZERO, isBn, isFunction } from '@polkadot/util'; -export function balanceToNumber (amount: BN, divisor: BN): number { - return amount.muln(1000).div(divisor).toNumber() / 1000; +interface ToBN { + toBn: () => BN; +} + +export function balanceToNumber (amount: BN | ToBN = BN_ZERO, divisor: BN): number { + const value = isBn(amount) + ? amount + : isFunction(amount.toBn) + ? amount.toBn() + : BN_ZERO; + + return value.muln(1000).div(divisor).toNumber() / 1000; } diff --git a/packages/page-staking/src/useSortedTargets.ts b/packages/page-staking/src/useSortedTargets.ts index fb4111f792..3b5069f479 100644 --- a/packages/page-staking/src/useSortedTargets.ts +++ b/packages/page-staking/src/useSortedTargets.ts @@ -65,8 +65,9 @@ function sortValidators (list: ValidatorInfo[]): ValidatorInfo[] { function extractSingle (allAccounts: string[], amount: BN = baseBalance(), { info }: DeriveStakingElected | DeriveStakingWaiting, favorites: string[], perValidatorReward: BN, isElected: boolean): [ValidatorInfo[], string[]] { const nominators: Record = {}; const list = info.map(({ accountId, exposure, stakingLedger, validatorPrefs }): ValidatorInfo => { - let bondOwn = exposure.own.unwrap(); - let bondTotal = exposure.total.unwrap(); + // some overrides (e.g. Darwinia Crab) does not have the own field in Exposure + let bondOwn = exposure.own?.unwrap() || BN_ZERO; + let bondTotal = exposure.total?.unwrap() || BN_ZERO; const skipRewards = bondTotal.isZero(); if (bondTotal.isZero()) {