diff --git a/package.json b/package.json index 5e48a35a62c4..2c60fa8801d8 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "url": "https://github.com/polkadot-js/apps.git" }, "sideEffects": false, - "version": "0.98.2-83", + "version": "0.98.2-84", "workspaces": [ "packages/*" ], diff --git a/packages/apps-config/package.json b/packages/apps-config/package.json index 42e76b743f36..30baa77776f5 100644 --- a/packages/apps-config/package.json +++ b/packages/apps-config/package.json @@ -10,7 +10,7 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "main": "index.js", "dependencies": { "@acala-network/type-definitions": "^3.0.2-4", diff --git a/packages/apps-config/src/packageInfo.ts b/packages/apps-config/src/packageInfo.ts index 9a6affa72865..f51725609c09 100644 --- a/packages/apps-config/src/packageInfo.ts +++ b/packages/apps-config/src/packageInfo.ts @@ -3,4 +3,4 @@ // Auto-generated by @polkadot/dev, do not edit -export const packageInfo = { name: '@polkadot/apps-config', version: '0.98.2-83' }; +export const packageInfo = { name: '@polkadot/apps-config', version: '0.98.2-84' }; diff --git a/packages/apps-electron/package.json b/packages/apps-electron/package.json index 61f8cf8dc487..5a538aa8808c 100644 --- a/packages/apps-electron/package.json +++ b/packages/apps-electron/package.json @@ -10,12 +10,12 @@ "url": "https://github.com/polkadot-js/apps.git" }, "sideEffects": false, - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/core": "^7.16.0", "@babel/polyfill": "^7.12.1", "@polkadot/dev": "^0.63.29", - "@polkadot/react-components": "^0.98.2-83", + "@polkadot/react-components": "^0.98.2-84", "electron-log": "^4.4.1", "electron-updater": "^4.6.2" }, diff --git a/packages/apps-routing/package.json b/packages/apps-routing/package.json index 46745d1dea67..c7a3ebef87af 100644 --- a/packages/apps-routing/package.json +++ b/packages/apps-routing/package.json @@ -11,7 +11,7 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3" } diff --git a/packages/apps/package.json b/packages/apps/package.json index d75096a00e8c..ebfd7a898886 100644 --- a/packages/apps/package.json +++ b/packages/apps/package.json @@ -11,20 +11,20 @@ }, "sideEffects": true, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/core": "^7.16.0", "@babel/polyfill": "^7.12.1", "@babel/runtime": "^7.16.3", - "@polkadot/apps-config": "^0.98.2-83", - "@polkadot/apps-routing": "^0.98.2-83", + "@polkadot/apps-config": "^0.98.2-84", + "@polkadot/apps-routing": "^0.98.2-84", "@polkadot/dev": "^0.63.29", - "@polkadot/react-api": "^0.98.2-83", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-hooks": "^0.98.2-83", - "@polkadot/react-params": "^0.98.2-83", - "@polkadot/react-query": "^0.98.2-83", - "@polkadot/react-signer": "^0.98.2-83", + "@polkadot/react-api": "^0.98.2-84", + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-hooks": "^0.98.2-84", + "@polkadot/react-params": "^0.98.2-84", + "@polkadot/react-query": "^0.98.2-84", + "@polkadot/react-signer": "^0.98.2-84", "punycode": "^2.1.1", "query-string": "^7.0.1" }, diff --git a/packages/apps/src/packageInfo.ts b/packages/apps/src/packageInfo.ts index 24cd85d9c6b0..eeb4c55830ae 100644 --- a/packages/apps/src/packageInfo.ts +++ b/packages/apps/src/packageInfo.ts @@ -3,4 +3,4 @@ // Auto-generated by @polkadot/dev, do not edit -export const packageInfo = { name: '@polkadot/apps', version: '0.98.2-83' }; +export const packageInfo = { name: '@polkadot/apps', version: '0.98.2-84' }; diff --git a/packages/page-accounts/package.json b/packages/page-accounts/package.json index 276440ff9593..87ae858c63d5 100644 --- a/packages/page-accounts/package.json +++ b/packages/page-accounts/package.json @@ -11,16 +11,16 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", "@polkadot/phishing": "^0.6.443", - "@polkadot/react-components": "^0.98.2-83", + "@polkadot/react-components": "^0.98.2-84", "@polkadot/vanitygen": "^0.48.4-0", "detect-browser": "^5.2.1", "file-saver": "^2.0.5" }, "devDependencies": { - "@polkadot/test-support": "0.98.2-83" + "@polkadot/test-support": "0.98.2-84" } } diff --git a/packages/page-addresses/package.json b/packages/page-addresses/package.json index 14ec4d5de3de..56904de5dd75 100644 --- a/packages/page-addresses/package.json +++ b/packages/page-addresses/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", + "@polkadot/react-components": "^0.98.2-84", "file-saver": "^2.0.5" }, "devDependencies": { diff --git a/packages/page-assets/package.json b/packages/page-assets/package.json index 8291f7e70c80..3c573be559c4 100644 --- a/packages/page-assets/package.json +++ b/packages/page-assets/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-bounties/package.json b/packages/page-bounties/package.json index d9910b610e7d..093fe2d0401b 100644 --- a/packages/page-bounties/package.json +++ b/packages/page-bounties/package.json @@ -11,12 +11,12 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" }, "devDependencies": { - "@polkadot/test-support": "0.98.2-83" + "@polkadot/test-support": "0.98.2-84" } } diff --git a/packages/page-calendar/package.json b/packages/page-calendar/package.json index 7bde11f2d92e..bda518623566 100644 --- a/packages/page-calendar/package.json +++ b/packages/page-calendar/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-claims/package.json b/packages/page-claims/package.json index 6737e1e7b56d..cb3b4401c24a 100644 --- a/packages/page-claims/package.json +++ b/packages/page-claims/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", + "@polkadot/react-components": "^0.98.2-84", "secp256k1": "^3.8.0" } } diff --git a/packages/page-contracts/package.json b/packages/page-contracts/package.json index f48a059e7b8f..dad38812ce52 100644 --- a/packages/page-contracts/package.json +++ b/packages/page-contracts/package.json @@ -11,7 +11,7 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", "@polkadot/api-contract": "^6.8.2-15" diff --git a/packages/page-council/package.json b/packages/page-council/package.json index e0b2b5e86098..55120b3c8bb0 100644 --- a/packages/page-council/package.json +++ b/packages/page-council/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-query": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-query": "^0.98.2-84" } } diff --git a/packages/page-democracy/package.json b/packages/page-democracy/package.json index f591bbd8c912..f23bf72c8ce1 100644 --- a/packages/page-democracy/package.json +++ b/packages/page-democracy/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-query": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-query": "^0.98.2-84" } } diff --git a/packages/page-explorer/package.json b/packages/page-explorer/package.json index 559d77123892..ef3a0df71abd 100644 --- a/packages/page-explorer/package.json +++ b/packages/page-explorer/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-extrinsics/package.json b/packages/page-extrinsics/package.json index 1262623e3aac..5ccea1084ef3 100644 --- a/packages/page-extrinsics/package.json +++ b/packages/page-extrinsics/package.json @@ -11,11 +11,11 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-params": "^0.98.2-83", - "@polkadot/react-signer": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-params": "^0.98.2-84", + "@polkadot/react-signer": "^0.98.2-84" } } diff --git a/packages/page-gilt/package.json b/packages/page-gilt/package.json index 1fff7c05c5a3..834f6463066a 100644 --- a/packages/page-gilt/package.json +++ b/packages/page-gilt/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-js/package.json b/packages/page-js/package.json index 4dbe5b864340..e75bd0138e2b 100644 --- a/packages/page-js/package.json +++ b/packages/page-js/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-membership/package.json b/packages/page-membership/package.json index 40ea7b8c86e2..3ab294d960b7 100644 --- a/packages/page-membership/package.json +++ b/packages/page-membership/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-query": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-query": "^0.98.2-84" } } diff --git a/packages/page-parachains/package.json b/packages/page-parachains/package.json index ed184fc22a3a..8f9005b6dd91 100644 --- a/packages/page-parachains/package.json +++ b/packages/page-parachains/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-query": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-query": "^0.98.2-84" } } diff --git a/packages/page-poll/package.json b/packages/page-poll/package.json index 5ddc0ed18da5..55fba026cd4e 100644 --- a/packages/page-poll/package.json +++ b/packages/page-poll/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-rpc/package.json b/packages/page-rpc/package.json index 58f55298f997..4bb4bef31efa 100644 --- a/packages/page-rpc/package.json +++ b/packages/page-rpc/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-settings/package.json b/packages/page-settings/package.json index d23ce57e6f74..521941770d0e 100644 --- a/packages/page-settings/package.json +++ b/packages/page-settings/package.json @@ -11,12 +11,12 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/apps-config": "^0.98.2-83", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-query": "^0.98.2-83", + "@polkadot/apps-config": "^0.98.2-84", + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-query": "^0.98.2-84", "query-string": "^7.0.1" } } diff --git a/packages/page-signing/package.json b/packages/page-signing/package.json index b282d9d8fae7..0d514b9dfb02 100644 --- a/packages/page-signing/package.json +++ b/packages/page-signing/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-society/package.json b/packages/page-society/package.json index 38b1c24569f1..f9929495816e 100644 --- a/packages/page-society/package.json +++ b/packages/page-society/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-staking/package.json b/packages/page-staking/package.json index fab486595b4a..181f0c723d54 100644 --- a/packages/page-staking/package.json +++ b/packages/page-staking/package.json @@ -11,11 +11,11 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/app-explorer": "^0.98.2-83", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-query": "^0.98.2-83" + "@polkadot/app-explorer": "^0.98.2-84", + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-query": "^0.98.2-84" } } diff --git a/packages/page-staking/src/ParachainStakingApp/CollatorDetails.tsx b/packages/page-staking/src/ParachainStakingApp/CollatorDetails.tsx new file mode 100644 index 000000000000..3c8e7b01cf91 --- /dev/null +++ b/packages/page-staking/src/ParachainStakingApp/CollatorDetails.tsx @@ -0,0 +1,71 @@ +// Copyright 2017-2021 @polkadot/app-staking authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; + +import { AddressSmall } from '@polkadot/react-components'; +import { FormatBalance } from '@polkadot/react-query'; +import { BN } from '@polkadot/util'; + +interface Props { + className?: string; + collatorDetails: CollatorState2 + collatorInfo: {minNomination: string, maxNominatorsPerCollator: string} +} + +export interface CollatorState2 { + id: string; + bond: string; + nominators: string[] + topNominators: {amount: string}[] + bottomNominators: string[] + totalCounted: string + totalBacking: string + state: string +} + +function CollatorDetails ({ className = '', collatorDetails, collatorInfo }: Props): React.ReactElement | null { + const { bond, + nominators, + topNominators, + totalBacking, + totalCounted } = collatorDetails || { bond: new BN(0), + nominators: [], + topNominators: [], + totalBacking: new BN(0), + totalCounted: new BN(0) }; + const minContribution = topNominators?.length === Number(collatorInfo.maxNominatorsPerCollator) && topNominators?.length > 0 ? topNominators[topNominators?.length - 1].amount : collatorInfo.minNomination; + + return ( + + + + + + {totalCounted && ( + // counted nominator stake + )} + + + {totalBacking && ( + // total nominator stake + )} + + + {nominators.length} + + + {bond && ( + // own stake + )} + + + {minContribution !== '0' && ( + // minContribution + )} + + + ); +} + +export default React.memo(CollatorDetails); diff --git a/packages/page-staking/src/ParachainStakingApp/CollatorList.tsx b/packages/page-staking/src/ParachainStakingApp/CollatorList.tsx new file mode 100644 index 000000000000..3a037f4f7c26 --- /dev/null +++ b/packages/page-staking/src/ParachainStakingApp/CollatorList.tsx @@ -0,0 +1,48 @@ +// Copyright 2017-2021 @polkadot/app-staking authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import React, { useRef } from 'react'; + +import { Table } from '@polkadot/react-components'; +import { useLoadingDelay } from '@polkadot/react-hooks'; + +import { useTranslation } from '../translate'; +import CollatorDetails, { CollatorState2 } from './CollatorDetails'; + +interface Props { + allCollatorsSorted: CollatorState2[] + collatorInfo: {minNomination: string, maxNominatorsPerCollator: string} +} + +function CollatorList ({ allCollatorsSorted, collatorInfo }: Props): React.ReactElement | null { + const { t } = useTranslation(); + const isLoading = useLoadingDelay(); + + const headerRef = useRef( + [ + [t('collators'), 'start'], + [t('counted nominator stake'), 'media--1100'], + [t('total nominator stake'), 'media--1100'], + [t('# of nominators'), 'media--1100'], + [t('own stake'), 'media--1100'], + [t('min contribution'), 'media--1100'] + ] + ); + + return ( + + {!isLoading && ( + allCollatorsSorted.map((collatorState): React.ReactNode => ( + + )))} +
+ ); +} + +export default React.memo(CollatorList); diff --git a/packages/page-staking/src/ParachainStakingApp/Summary.tsx b/packages/page-staking/src/ParachainStakingApp/Summary.tsx index 3f0947a65a65..53ec441abd0f 100644 --- a/packages/page-staking/src/ParachainStakingApp/Summary.tsx +++ b/packages/page-staking/src/ParachainStakingApp/Summary.tsx @@ -7,7 +7,8 @@ import React from 'react'; import styled from 'styled-components'; import { CardSummary, Spinner, SummaryBox } from '@polkadot/react-components'; -import { formatNumber } from '@polkadot/util'; +import { FormatBalance } from '@polkadot/react-query'; +import { BN, formatNumber } from '@polkadot/util'; import { useTranslation } from '../translate'; import SummaryRound, { RoundInfo } from './SummaryRound'; @@ -19,17 +20,21 @@ interface Props { bestNumberFinalized: BlockNumber|undefined } -export interface OwnerAmount {owner: string, amount: string} +export interface OwnerAmount {owner: string, amount: BN} interface StakingInfo{ + collatorCommission: string|undefined, totalSelected: number, - totalSelectedStaked: string, + totalSelectedStaked: BN, totalCollatorCount: number, + selectedCollatorCount: number, inflationPrct: string|undefined parachainBondInfoPrct: string|undefined + activeNominatorsCount: number + allNominatorsCount: number } -function Summary ({ bestNumberFinalized, className = '', roundInfo, stakingInfo: { inflationPrct, parachainBondInfoPrct, totalCollatorCount, totalSelected, totalSelectedStaked } }: Props): React.ReactElement { +function Summary ({ bestNumberFinalized, className = '', roundInfo, stakingInfo: { activeNominatorsCount, allNominatorsCount, collatorCommission, inflationPrct, parachainBondInfoPrct, selectedCollatorCount, totalCollatorCount, totalSelected, totalSelectedStaked } }: Props): React.ReactElement { const { t } = useTranslation(); return ( @@ -37,7 +42,7 @@ function Summary ({ bestNumberFinalized, className = '', roundInfo, stakingInfo:
('collators')}> {totalSelected - ? <>{formatNumber(totalSelected)} / {formatNumber(totalSelected)} // TODO:differntiate the two + ? <>{formatNumber(selectedCollatorCount)} / {formatNumber(totalSelected)} // TODO:differntiate the two : } @@ -52,12 +57,30 @@ function Summary ({ bestNumberFinalized, className = '', roundInfo, stakingInfo:
- {(totalSelectedStaked !== '0') && ( + ('active / nominators') + } + > + {activeNominatorsCount > 0 + ? ( + <> + {formatNumber(activeNominatorsCount)} + {allNominatorsCount > 0 && ( + <> / {formatNumber(allNominatorsCount)} + )} + + ) + : + } + + {(totalSelectedStaked && totalSelectedStaked.toString() !== '0') && ( ('total staked by selected candidates')} > - <>{(totalSelectedStaked)} + )} @@ -83,6 +106,17 @@ function Summary ({ bestNumberFinalized, className = '', roundInfo, stakingInfo: ) : } + ('% collator commission')} // TODO: add translation?? + > + {(collatorCommission) + ? ( + <>{collatorCommission} + + ) + : } +
string } +interface CollatorState2Raw { + unwrap: () => CollatorState2 +} + function ParachainStakingApp ({ className = '' }: AppProps): React.ReactElement { const { api } = useApi(); + + // summary info const roundInfo = useCall>(api.query.parachainStaking.round); const totalSelected = Number(useCall(api.query.parachainStaking.totalSelected)); - const totalSelectedStaked = (useCall(api.query.parachainStaking.staked, [roundInfo?.current])); + const totalSelectedStaked = (useCall(api.query.parachainStaking.staked, [roundInfo?.current])); const inflation = (useCall<{annual: {ideal: ApiResult}}|undefined>(api.query.parachainStaking.inflationConfig)); const inflationPrct = inflation?.annual.ideal.toHuman(); const parachainBondInfo = (useCall<{percent: ApiResult}|undefined>(api.query.parachainStaking.parachainBondInfo)); const parachainBondInfoPrct = parachainBondInfo?.percent.toHuman(); - const candidatePool = useCall(api.query.parachainStaking.candidatePool); const bestNumberFinalized = useBestNumber(); + const collatorCommission = (useCall(api.query.parachainStaking.collatorCommission)); + // Fetch all collator states using entries + const allCollators = useCall<[Uint8Array, CollatorState2Raw][]>(api.query.parachainStaking.collatorState2.entries, []); + // Sort them and extract nominator numbers + const [allCollatorsSorted, setAllCollatorsSorted] = useState([]); + const [activeNominatorsCount, setActiveNominatorsCount] = useState(0); + const [allNominatorsCount, setAllNominatorsCount] = useState(0); + + // list info + const candidatePool = useCall(api.query.parachainStaking.candidatePool); + const selectedCandidates = useCall(api.query.parachainStaking.selectedCandidates); + + useEffect(() => { + let _allNominatorCount = 0; + let _activeNominatorCount = 0; + const sorted: CollatorState2[] = []; + + // unwrap output + allCollators?.forEach(([_, collatorStateRaw]) => { + sorted.push(collatorStateRaw.unwrap()); + }); + // sort by total staked + sorted.sort((a, b) => { + return Number(BigInt(b.totalCounted) - BigInt(a.totalCounted)); + }).forEach((collatorState, i) => { + // extract relevant nominator stats + if (selectedCandidates?.length && i < selectedCandidates?.length) { _activeNominatorCount += collatorState.topNominators.length; } + + _allNominatorCount += collatorState.topNominators.length + collatorState.bottomNominators.length; + }); + setAllCollatorsSorted(sorted); + setActiveNominatorsCount(_activeNominatorCount); + setAllNominatorsCount(_allNominatorCount); + }, [allCollators, selectedCandidates]); return (
@@ -34,13 +76,21 @@ function ParachainStakingApp ({ className = '' }: AppProps): React.ReactElement< bestNumberFinalized={bestNumberFinalized} roundInfo={roundInfo} stakingInfo={{ + activeNominatorsCount, + allNominatorsCount, + collatorCommission: collatorCommission?.toHuman(), inflationPrct, parachainBondInfoPrct, + selectedCollatorCount: selectedCandidates?.length, totalCollatorCount: candidatePool?.length, totalSelected, - totalSelectedStaked: totalSelectedStaked?.toHuman() + totalSelectedStaked }} /> +
); } diff --git a/packages/page-storage/package.json b/packages/page-storage/package.json index 0a1811b89f32..d297df6b4259 100644 --- a/packages/page-storage/package.json +++ b/packages/page-storage/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-params": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-params": "^0.98.2-84" } } diff --git a/packages/page-sudo/package.json b/packages/page-sudo/package.json index 8f632128746b..52559ce9039c 100644 --- a/packages/page-sudo/package.json +++ b/packages/page-sudo/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/page-tech-comm/package.json b/packages/page-tech-comm/package.json index 7b5e0fa3beeb..494a4f66a877 100644 --- a/packages/page-tech-comm/package.json +++ b/packages/page-tech-comm/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-query": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-query": "^0.98.2-84" } } diff --git a/packages/page-treasury/package.json b/packages/page-treasury/package.json index 629297b57531..4e88bab83831 100644 --- a/packages/page-treasury/package.json +++ b/packages/page-treasury/package.json @@ -11,10 +11,10 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83", - "@polkadot/react-query": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84", + "@polkadot/react-query": "^0.98.2-84" } } diff --git a/packages/react-api/package.json b/packages/react-api/package.json index cae6a9e6e62e..5b9440775015 100644 --- a/packages/react-api/package.json +++ b/packages/react-api/package.json @@ -11,7 +11,7 @@ }, "sideEffects": true, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", "@polkadot/api": "^6.8.2-15", diff --git a/packages/react-components/package.json b/packages/react-components/package.json index 3ead49c8f5dc..aadf03f563f9 100644 --- a/packages/react-components/package.json +++ b/packages/react-components/package.json @@ -11,17 +11,17 @@ }, "sideEffects": true, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", "@fortawesome/fontawesome-svg-core": "^1.2.36", "@fortawesome/free-solid-svg-icons": "^5.15.4", "@fortawesome/react-fontawesome": "^0.1.16", "@polkadot/keyring": "^7.8.3-29", - "@polkadot/react-api": "^0.98.2-83", + "@polkadot/react-api": "^0.98.2-84", "@polkadot/react-identicon": "^0.86.6-0", "@polkadot/react-qr": "^0.86.6-0", - "@polkadot/react-query": "^0.98.2-83", + "@polkadot/react-query": "^0.98.2-84", "@polkadot/ui-keyring": "^0.86.6-0", "@polkadot/ui-settings": "^0.86.6-0", "@polkadot/util": "^7.8.3-29", diff --git a/packages/react-hooks/package.json b/packages/react-hooks/package.json index 13306058ef8b..22ed6fcfbe19 100644 --- a/packages/react-hooks/package.json +++ b/packages/react-hooks/package.json @@ -11,7 +11,7 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3" } diff --git a/packages/react-params/package.json b/packages/react-params/package.json index b78880e65fda..3533fd37004d 100644 --- a/packages/react-params/package.json +++ b/packages/react-params/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/react-query/package.json b/packages/react-query/package.json index 73f0ca1afedc..afbb50a17136 100644 --- a/packages/react-query/package.json +++ b/packages/react-query/package.json @@ -11,7 +11,7 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3" } diff --git a/packages/react-signer/package.json b/packages/react-signer/package.json index a24c122de4c7..c729d58ca3ba 100644 --- a/packages/react-signer/package.json +++ b/packages/react-signer/package.json @@ -11,9 +11,9 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@babel/runtime": "^7.16.3", - "@polkadot/react-components": "^0.98.2-83" + "@polkadot/react-components": "^0.98.2-84" } } diff --git a/packages/test-support/package.json b/packages/test-support/package.json index 19148c3f7b77..f1bf9e62339d 100644 --- a/packages/test-support/package.json +++ b/packages/test-support/package.json @@ -11,7 +11,7 @@ }, "sideEffects": false, "type": "module", - "version": "0.98.2-83", + "version": "0.98.2-84", "dependencies": { "@testing-library/react": "^12.1.2", "testcontainers": "^7.23.2" diff --git a/yarn.lock b/yarn.lock index dd6d9ea087ba..55aafd1245cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2566,8 +2566,8 @@ __metadata: dependencies: "@babel/runtime": ^7.16.3 "@polkadot/phishing": ^0.6.443 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/test-support": 0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/test-support": 0.98.2-84 "@polkadot/vanitygen": ^0.48.4-0 detect-browser: ^5.2.1 file-saver: ^2.0.5 @@ -2579,7 +2579,7 @@ __metadata: resolution: "@polkadot/app-addresses@workspace:packages/page-addresses" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 "@testing-library/react": ^12.1.2 file-saver: ^2.0.5 testcontainers: ^7.23.2 @@ -2591,7 +2591,7 @@ __metadata: resolution: "@polkadot/app-assets@workspace:packages/page-assets" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2600,8 +2600,8 @@ __metadata: resolution: "@polkadot/app-bounties@workspace:packages/page-bounties" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/test-support": 0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/test-support": 0.98.2-84 languageName: unknown linkType: soft @@ -2610,7 +2610,7 @@ __metadata: resolution: "@polkadot/app-calendar@workspace:packages/page-calendar" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2619,7 +2619,7 @@ __metadata: resolution: "@polkadot/app-claims@workspace:packages/page-claims" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 secp256k1: ^3.8.0 languageName: unknown linkType: soft @@ -2638,8 +2638,8 @@ __metadata: resolution: "@polkadot/app-council@workspace:packages/page-council" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-query": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-query": ^0.98.2-84 languageName: unknown linkType: soft @@ -2648,17 +2648,17 @@ __metadata: resolution: "@polkadot/app-democracy@workspace:packages/page-democracy" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-query": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-query": ^0.98.2-84 languageName: unknown linkType: soft -"@polkadot/app-explorer@^0.98.2-83, @polkadot/app-explorer@workspace:packages/page-explorer": +"@polkadot/app-explorer@^0.98.2-84, @polkadot/app-explorer@workspace:packages/page-explorer": version: 0.0.0-use.local resolution: "@polkadot/app-explorer@workspace:packages/page-explorer" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2667,9 +2667,9 @@ __metadata: resolution: "@polkadot/app-extrinsics@workspace:packages/page-extrinsics" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-params": ^0.98.2-83 - "@polkadot/react-signer": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-params": ^0.98.2-84 + "@polkadot/react-signer": ^0.98.2-84 languageName: unknown linkType: soft @@ -2678,7 +2678,7 @@ __metadata: resolution: "@polkadot/app-gilt@workspace:packages/page-gilt" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2687,7 +2687,7 @@ __metadata: resolution: "@polkadot/app-js@workspace:packages/page-js" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2696,8 +2696,8 @@ __metadata: resolution: "@polkadot/app-membership@workspace:packages/page-membership" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-query": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-query": ^0.98.2-84 languageName: unknown linkType: soft @@ -2706,8 +2706,8 @@ __metadata: resolution: "@polkadot/app-parachains@workspace:packages/page-parachains" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-query": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-query": ^0.98.2-84 languageName: unknown linkType: soft @@ -2716,7 +2716,7 @@ __metadata: resolution: "@polkadot/app-poll@workspace:packages/page-poll" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2725,7 +2725,7 @@ __metadata: resolution: "@polkadot/app-rpc@workspace:packages/page-rpc" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2734,9 +2734,9 @@ __metadata: resolution: "@polkadot/app-settings@workspace:packages/page-settings" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/apps-config": ^0.98.2-83 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-query": ^0.98.2-83 + "@polkadot/apps-config": ^0.98.2-84 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-query": ^0.98.2-84 query-string: ^7.0.1 languageName: unknown linkType: soft @@ -2746,7 +2746,7 @@ __metadata: resolution: "@polkadot/app-signing@workspace:packages/page-signing" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2755,7 +2755,7 @@ __metadata: resolution: "@polkadot/app-society@workspace:packages/page-society" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2764,9 +2764,9 @@ __metadata: resolution: "@polkadot/app-staking@workspace:packages/page-staking" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/app-explorer": ^0.98.2-83 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-query": ^0.98.2-83 + "@polkadot/app-explorer": ^0.98.2-84 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-query": ^0.98.2-84 languageName: unknown linkType: soft @@ -2775,8 +2775,8 @@ __metadata: resolution: "@polkadot/app-storage@workspace:packages/page-storage" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-params": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-params": ^0.98.2-84 languageName: unknown linkType: soft @@ -2785,7 +2785,7 @@ __metadata: resolution: "@polkadot/app-sudo@workspace:packages/page-sudo" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -2794,8 +2794,8 @@ __metadata: resolution: "@polkadot/app-tech-comm@workspace:packages/page-tech-comm" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-query": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-query": ^0.98.2-84 languageName: unknown linkType: soft @@ -2804,12 +2804,12 @@ __metadata: resolution: "@polkadot/app-treasury@workspace:packages/page-treasury" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-query": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-query": ^0.98.2-84 languageName: unknown linkType: soft -"@polkadot/apps-config@^0.98.2-83, @polkadot/apps-config@workspace:packages/apps-config": +"@polkadot/apps-config@^0.98.2-84, @polkadot/apps-config@workspace:packages/apps-config": version: 0.0.0-use.local resolution: "@polkadot/apps-config@workspace:packages/apps-config" dependencies: @@ -2850,7 +2850,7 @@ __metadata: "@babel/core": ^7.16.0 "@babel/polyfill": ^7.12.1 "@polkadot/dev": ^0.63.29 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 "@types/react-dom": ^17.0.11 "@types/tmp": ^0.2.2 babel-loader: ^8.2.3 @@ -2866,7 +2866,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/apps-routing@^0.98.2-83, @polkadot/apps-routing@workspace:packages/apps-routing": +"@polkadot/apps-routing@^0.98.2-84, @polkadot/apps-routing@workspace:packages/apps-routing": version: 0.0.0-use.local resolution: "@polkadot/apps-routing@workspace:packages/apps-routing" dependencies: @@ -2881,15 +2881,15 @@ __metadata: "@babel/core": ^7.16.0 "@babel/polyfill": ^7.12.1 "@babel/runtime": ^7.16.3 - "@polkadot/apps-config": ^0.98.2-83 - "@polkadot/apps-routing": ^0.98.2-83 + "@polkadot/apps-config": ^0.98.2-84 + "@polkadot/apps-routing": ^0.98.2-84 "@polkadot/dev": ^0.63.29 - "@polkadot/react-api": ^0.98.2-83 - "@polkadot/react-components": ^0.98.2-83 - "@polkadot/react-hooks": ^0.98.2-83 - "@polkadot/react-params": ^0.98.2-83 - "@polkadot/react-query": ^0.98.2-83 - "@polkadot/react-signer": ^0.98.2-83 + "@polkadot/react-api": ^0.98.2-84 + "@polkadot/react-components": ^0.98.2-84 + "@polkadot/react-hooks": ^0.98.2-84 + "@polkadot/react-params": ^0.98.2-84 + "@polkadot/react-query": ^0.98.2-84 + "@polkadot/react-signer": ^0.98.2-84 "@types/punycode": ^2.1.0 assert: ^2.0.0 babel-loader: ^8.2.3 @@ -3116,7 +3116,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-api@^0.98.2-83, @polkadot/react-api@workspace:packages/react-api": +"@polkadot/react-api@^0.98.2-84, @polkadot/react-api@workspace:packages/react-api": version: 0.0.0-use.local resolution: "@polkadot/react-api@workspace:packages/react-api" dependencies: @@ -3130,7 +3130,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-components@^0.98.2-83, @polkadot/react-components@workspace:packages/react-components": +"@polkadot/react-components@^0.98.2-84, @polkadot/react-components@workspace:packages/react-components": version: 0.0.0-use.local resolution: "@polkadot/react-components@workspace:packages/react-components" dependencies: @@ -3139,10 +3139,10 @@ __metadata: "@fortawesome/free-solid-svg-icons": ^5.15.4 "@fortawesome/react-fontawesome": ^0.1.16 "@polkadot/keyring": ^7.8.3-29 - "@polkadot/react-api": ^0.98.2-83 + "@polkadot/react-api": ^0.98.2-84 "@polkadot/react-identicon": ^0.86.6-0 "@polkadot/react-qr": ^0.86.6-0 - "@polkadot/react-query": ^0.98.2-83 + "@polkadot/react-query": ^0.98.2-84 "@polkadot/ui-keyring": ^0.86.6-0 "@polkadot/ui-settings": ^0.86.6-0 "@polkadot/util": ^7.8.3-29 @@ -3173,7 +3173,7 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-hooks@^0.98.2-83, @polkadot/react-hooks@workspace:packages/react-hooks": +"@polkadot/react-hooks@^0.98.2-84, @polkadot/react-hooks@workspace:packages/react-hooks": version: 0.0.0-use.local resolution: "@polkadot/react-hooks@workspace:packages/react-hooks" dependencies: @@ -3208,12 +3208,12 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-params@^0.98.2-83, @polkadot/react-params@workspace:packages/react-params": +"@polkadot/react-params@^0.98.2-84, @polkadot/react-params@workspace:packages/react-params": version: 0.0.0-use.local resolution: "@polkadot/react-params@workspace:packages/react-params" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -3237,7 +3237,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/react-query@^0.98.2-83, @polkadot/react-query@workspace:packages/react-query": +"@polkadot/react-query@^0.98.2-84, @polkadot/react-query@workspace:packages/react-query": version: 0.0.0-use.local resolution: "@polkadot/react-query@workspace:packages/react-query" dependencies: @@ -3245,12 +3245,12 @@ __metadata: languageName: unknown linkType: soft -"@polkadot/react-signer@^0.98.2-83, @polkadot/react-signer@workspace:packages/react-signer": +"@polkadot/react-signer@^0.98.2-84, @polkadot/react-signer@workspace:packages/react-signer": version: 0.0.0-use.local resolution: "@polkadot/react-signer@workspace:packages/react-signer" dependencies: "@babel/runtime": ^7.16.3 - "@polkadot/react-components": ^0.98.2-83 + "@polkadot/react-components": ^0.98.2-84 languageName: unknown linkType: soft @@ -3283,7 +3283,7 @@ __metadata: languageName: node linkType: hard -"@polkadot/test-support@0.98.2-83, @polkadot/test-support@workspace:packages/test-support": +"@polkadot/test-support@0.98.2-84, @polkadot/test-support@workspace:packages/test-support": version: 0.0.0-use.local resolution: "@polkadot/test-support@workspace:packages/test-support" dependencies: