diff --git a/package.json b/package.json index ba31969453..f74e29a1a4 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,10 @@ "packages/*" ], "resolutions": { - "@polkadot/api": "^0.96.0-beta.21", - "@polkadot/api-contract": "^0.96.0-beta.21", + "@polkadot/api": "^0.96.0-beta.22", + "@polkadot/api-contract": "^0.96.0-beta.22", "@polkadot/keyring": "^1.6.1", - "@polkadot/types": "^0.96.0-beta.21", + "@polkadot/types": "^0.96.0-beta.22", "@polkadot/util": "^1.6.1", "@polkadot/util-crypto": "^1.6.1", "babel-core": "^7.0.0-bridge.0", diff --git a/packages/app-123code/src/SummaryBar.tsx b/packages/app-123code/src/SummaryBar.tsx index 56191f265a..9242644597 100644 --- a/packages/app-123code/src/SummaryBar.tsx +++ b/packages/app-123code/src/SummaryBar.tsx @@ -7,7 +7,7 @@ import { AccountId } from '@polkadot/types/interfaces'; import { BareProps, I18nProps } from '@polkadot/react-components/types'; import BN from 'bn.js'; -import React, { useContext, useState, useEffect } from 'react'; +import React, { useContext } from 'react'; import { ApiContext, withCalls } from '@polkadot/react-api'; import { Bubble, IdentityIcon } from '@polkadot/react-components'; import { formatBalance, formatNumber } from '@polkadot/util'; @@ -18,23 +18,11 @@ interface Props extends BareProps, I18nProps { balances_totalIssuance?: BN; chain_bestNumber?: BN; chain_bestNumberLag?: BN; - session_validators?: AccountId[]; - staking_intentions?: AccountId[]; + staking_validators?: AccountId[]; } -function SummaryBar ({ balances_totalIssuance, chain_bestNumber, chain_bestNumberLag, staking_intentions, session_validators }: Props): React.ReactElement { +function SummaryBar ({ balances_totalIssuance, chain_bestNumber, chain_bestNumberLag, staking_validators }: Props): React.ReactElement { const { api, systemChain, systemName, systemVersion } = useContext(ApiContext); - const [nextUp, setNextUp] = useState([]); - - useEffect((): void => { - if (staking_intentions && session_validators) { - setNextUp(staking_intentions.filter((accountId): boolean => - !session_validators.find((validatorId): boolean => - validatorId.eq(accountId) - ) - )); - } - }, [staking_intentions, session_validators]); return ( @@ -51,16 +39,13 @@ function SummaryBar ({ balances_totalIssuance, chain_bestNumber, chain_bestNumbe {formatNumber(chain_bestNumber)} ({formatNumber(chain_bestNumberLag)} lag) - { - (session_validators || []).map((accountId, index): React.ReactNode => ( - - )) - } - { - nextUp.map((accountId, index): React.ReactNode => ( - - )) - } + {staking_validators && ( + { + staking_validators.map((accountId, index): React.ReactNode => ( + + )) + } + )} {formatBalance(balances_totalIssuance)} @@ -74,7 +59,7 @@ export default translate( withCalls( 'derive.chain.bestNumber', 'derive.chain.bestNumberLag', - 'query.balances.totalIssuance', - 'query.session.validators' + 'derive.staking.validators', + 'query.balances.totalIssuance' )(SummaryBar) ); diff --git a/packages/app-contracts/package.json b/packages/app-contracts/package.json index 99318992af..c3c94e1f03 100644 --- a/packages/app-contracts/package.json +++ b/packages/app-contracts/package.json @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.6.3", - "@polkadot/api-contract": "^0.96.0-beta.21", + "@polkadot/api-contract": "^0.96.0-beta.22", "@polkadot/react-components": "^0.37.0-beta.34" } } diff --git a/packages/app-explorer/src/Summary.tsx b/packages/app-explorer/src/Summary.tsx index 1d9c28c6be..be7886e4ed 100644 --- a/packages/app-explorer/src/Summary.tsx +++ b/packages/app-explorer/src/Summary.tsx @@ -32,7 +32,7 @@ function Summary ({ t }: Props): React.ReactElement {
- +
diff --git a/packages/app-explorer/src/SummarySession.tsx b/packages/app-explorer/src/SummarySession.tsx index 7a8fe8ec6d..e755d012e1 100644 --- a/packages/app-explorer/src/SummarySession.tsx +++ b/packages/app-explorer/src/SummarySession.tsx @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/camelcase */ // Copyright 2017-2019 @polkadot/app-explorer authors & contributors // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. @@ -14,57 +13,57 @@ import translate from './translate'; import { formatNumber } from '@polkadot/util'; interface Props extends I18nProps { - session_info?: DerivedSessionInfo; + sessionInfo?: DerivedSessionInfo; withEra?: boolean; withSession?: boolean; } -function renderSession ({ session_info, t, withSession = true }: Props): React.ReactNode { - if (!withSession || !session_info) { +function renderSession ({ sessionInfo, t, withSession = true }: Props): React.ReactNode { + if (!withSession || !sessionInfo) { return null; } - const label = session_info.isEpoch && session_info.sessionLength.gtn(1) + const label = sessionInfo.isEpoch && sessionInfo.sessionLength.gtn(1) ? t('epoch') : t('session'); - return session_info.sessionLength.gtn(0) + return sessionInfo.sessionLength.gtn(0) ? ( ) : ( - {formatNumber(session_info.currentIndex)} + {formatNumber(sessionInfo.currentIndex)} ); } -function renderEra ({ session_info, t, withEra = true }: Props): React.ReactNode { - if (!withEra || !session_info) { +function renderEra ({ sessionInfo, t, withEra = true }: Props): React.ReactNode { + if (!withEra || !sessionInfo) { return null; } const label = t('era'); - return session_info.sessionLength.gtn(0) + return sessionInfo.sessionLength.gtn(0) ? ( ) : ( - {formatNumber(session_info.currentEra)} + {formatNumber(sessionInfo.currentEra)} ); } @@ -80,6 +79,6 @@ function SummarySession (props: Props): React.ReactElement { export default translate( withCalls( - 'derive.session.info' + ['derive.session.info', { propName: 'sessionInfo' }] )(SummarySession) ); diff --git a/packages/app-staking/src/Overview/Address.tsx b/packages/app-staking/src/Overview/Address.tsx index 3e16fae835..934ab29109 100644 --- a/packages/app-staking/src/Overview/Address.tsx +++ b/packages/app-staking/src/Overview/Address.tsx @@ -19,7 +19,7 @@ import { formatNumber } from '@polkadot/util'; import translate from '../translate'; interface Props extends I18nProps { - address: string; + address: AccountId | string; authorsMap: Record; className?: string; currentElected: string[]; @@ -69,7 +69,7 @@ function Address ({ address, authorsMap, className, currentElected, defaultName, useEffect((): void => { if (stakingInfo) { - const { controllerId, nextSessionId, stakers, stashId } = stakingInfo; + const { controllerId, nextSessionIds, stakers, stashId } = stakingInfo; const nominators = withNominations && stakers ? stakers.others.map(({ who, value }): [AccountId, Balance] => [who, value.unwrap()]) : []; @@ -87,7 +87,7 @@ function Address ({ address, authorsMap, className, currentElected, defaultName, ), isSelected: !!(_stashId && currentElected && currentElected.includes(_stashId)), nominators, - sessionId: nextSessionId && nextSessionId.toString(), + sessionId: nextSessionIds && nextSessionIds[0] && nextSessionIds[0].toString(), stashId: _stashId }); } diff --git a/packages/app-staking/src/Overview/CurrentList.tsx b/packages/app-staking/src/Overview/CurrentList.tsx index 533ad42373..e4f815bc95 100644 --- a/packages/app-staking/src/Overview/CurrentList.tsx +++ b/packages/app-staking/src/Overview/CurrentList.tsx @@ -2,9 +2,9 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { DerivedHeartbeats } from '@polkadot/api-derive/types'; +import { AccountId } from '@polkadot/types/interfaces'; +import { DerivedHeartbeats, DerivedStakingOverview } from '@polkadot/api-derive/types'; import { I18nProps } from '@polkadot/react-components/types'; -import { EraPoints } from '@polkadot/types/interfaces'; import { ValidatorFilter } from '../types'; import React, { useContext, useEffect, useState } from 'react'; @@ -16,27 +16,25 @@ import Address from './Address'; interface Props extends I18nProps { authorsMap: Record; - currentElected: string[]; - currentValidators: string[]; - eraPoints?: EraPoints; lastAuthors?: string[]; next: string[]; recentlyOnline?: DerivedHeartbeats; + stakingOverview?: DerivedStakingOverview; } -function renderColumn (addresses: string[], defaultName: string, withOnline: boolean, withPoints: boolean, filter: string, { authorsMap, currentElected, eraPoints, lastAuthors, recentlyOnline }: Props): React.ReactNode { - return addresses.map((address, index): React.ReactNode => ( +function renderColumn (addresses: AccountId[] | string[], defaultName: string, withOnline: boolean, withPoints: boolean, filter: string, { authorsMap, lastAuthors, recentlyOnline, stakingOverview }: Props): React.ReactNode { + return (addresses as AccountId[]).map((address, index): React.ReactNode => (
!without.includes(accountId)); +function filterAccounts (list: string[] = [], without: AccountId[] | string[]): string[] { + return list.filter((accountId): boolean => !without.includes(accountId as any)); } function CurrentList (props: Props): React.ReactElement { const { isSubstrateV2 } = useContext(ApiContext); const [filter, setFilter] = useState('all'); const [{ electedFiltered, nextFiltered }, setFiltered] = useState<{ electedFiltered: string[]; nextFiltered: string[] }>({ electedFiltered: [], nextFiltered: [] }); - const { currentElected, currentValidators, next, t } = props; + const { next, stakingOverview, t } = props; useEffect((): void => { - if (currentElected && currentValidators) { + if (stakingOverview) { + const elected = stakingOverview.currentElected.map((accountId): string => accountId.toString()); + setFiltered({ - electedFiltered: isSubstrateV2 ? filterAccounts(currentElected, currentValidators) : [], - nextFiltered: filterAccounts(next, currentElected) + electedFiltered: isSubstrateV2 ? filterAccounts(elected, stakingOverview.validators) : [], + nextFiltered: filterAccounts(next, elected) }); } - }, [currentElected, currentValidators, next]); + }, [next, stakingOverview]); return (
@@ -90,7 +90,7 @@ function CurrentList (props: Props): React.ReactElement { emptyText={t('No addresses found')} headerText={t('validators')} > - {renderColumn(currentValidators, t('validator'), true, true, filter, props)} + {stakingOverview && renderColumn(stakingOverview.validators, t('validator'), true, true, filter, props)} { +function Summary ({ className, lastAuthors, lastBlock, next, stakingOverview, style, t }: Props): React.ReactElement { return (
- - {currentValidators.length}/{staking_validatorCount ? staking_validatorCount.toString() : '-'} - - - {next.length} - + {stakingOverview && ( + + {stakingOverview.validators.length}{`/${stakingOverview.validatorCount.toString()}`} + + )} + {next && ( + + {next.length} + + )}
('query.staking.validatorCount') + ` ); diff --git a/packages/app-staking/src/Overview/index.tsx b/packages/app-staking/src/Overview/index.tsx index b536930508..5f78f4e8e0 100644 --- a/packages/app-staking/src/Overview/index.tsx +++ b/packages/app-staking/src/Overview/index.tsx @@ -4,7 +4,6 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { BareProps } from '@polkadot/react-components/types'; -import { EraPoints } from '@polkadot/types/interfaces'; import { ComponentProps } from '../types'; import React, { useContext, useEffect, useState } from 'react'; @@ -14,43 +13,39 @@ import { BlockAuthorsContext } from '@polkadot/react-query'; import CurrentList from './CurrentList'; import Summary from './Summary'; -interface Props extends BareProps, ComponentProps { - eraPoints?: EraPoints; -} +interface Props extends BareProps, ComponentProps {} -export default function Overview ({ allControllers, allStashes, currentElected, currentValidators, eraPoints, recentlyOnline }: Props): React.ReactElement { +export default function Overview ({ allControllers, allStashes, recentlyOnline, stakingOverview }: Props): React.ReactElement { const { isSubstrateV2 } = useContext(ApiContext); const { byAuthor, lastBlockAuthors, lastBlockNumber } = useContext(BlockAuthorsContext); const [next, setNext] = useState([]); + const validators = stakingOverview && stakingOverview.validators; useEffect((): void => { - setNext( + validators && setNext( isSubstrateV2 // this is a V2 node currentValidators is a list of stashes - ? allStashes.filter((address): boolean => !currentValidators.includes(address)) + ? allStashes.filter((address): boolean => !validators.includes(address as any)) // this is a V1 node currentValidators is a list of controllers - : allControllers.filter((address): boolean => !currentValidators.includes(address)) + : allControllers.filter((address): boolean => !validators.includes(address as any)) ); - }, [allControllers, allStashes, currentValidators]); + }, [allControllers, allStashes, validators]); return (
); diff --git a/packages/app-staking/src/index.tsx b/packages/app-staking/src/index.tsx index 5b947c80da..bc4c2f6f43 100644 --- a/packages/app-staking/src/index.tsx +++ b/packages/app-staking/src/index.tsx @@ -2,10 +2,10 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { DerivedHeartbeats } from '@polkadot/api-derive/types'; +import { DerivedHeartbeats, DerivedStakingOverview } from '@polkadot/api-derive/types'; import { AppProps, I18nProps } from '@polkadot/react-components/types'; import { ApiProps } from '@polkadot/react-api/types'; -import { AccountId, BlockNumber, EraPoints } from '@polkadot/types/interfaces'; +import { AccountId, BlockNumber } from '@polkadot/types/interfaces'; import { SubjectInfo } from '@polkadot/ui-keyring/observable/types'; import { ComponentProps } from './types'; @@ -27,16 +27,14 @@ interface Props extends AppProps, ApiProps, I18nProps { allAccounts?: SubjectInfo; allStashesAndControllers?: [string[], string[]]; bestNumber?: BlockNumber; - currentElected?: string[]; - currentValidators?: string[]; - eraPoints?: EraPoints; recentlyOnline?: DerivedHeartbeats; + stakingOverview?: DerivedStakingOverview; } const EMPY_ACCOUNTS: string[] = []; const EMPTY_ALL: [string[], string[]] = [EMPY_ACCOUNTS, EMPY_ACCOUNTS]; -function App ({ allAccounts, allStashesAndControllers: [allStashes, allControllers] = EMPTY_ALL, className, currentElected, currentValidators, basePath, eraPoints, recentlyOnline, t }: Props): React.ReactElement { +function App ({ allAccounts, allStashesAndControllers: [allStashes, allControllers] = EMPTY_ALL, basePath, className, recentlyOnline, stakingOverview, t }: Props): React.ReactElement { const _renderComponent = (Component: React.ComponentType): () => React.ReactNode => { // eslint-disable-next-line react/display-name return (): React.ReactNode => { @@ -49,10 +47,8 @@ function App ({ allAccounts, allStashesAndControllers: [allStashes, allControlle allAccounts={allAccounts} allControllers={allControllers} allStashes={allStashes} - currentElected={currentElected || EMPY_ACCOUNTS} - currentValidators={currentValidators || EMPY_ACCOUNTS} - eraPoints={eraPoints} recentlyOnline={recentlyOnline} + stakingOverview={stakingOverview} /> ); }; @@ -108,18 +104,7 @@ export default withMulti( .map((accountId): string => accountId.unwrap().toString()) ] }], - ['query.session.validators', { - propName: 'currentValidators', - transform: (validators: AccountId[]): string[] => - validators.map((accountId): string => accountId.toString()) - }], - ['query.staking.currentElected', { - propName: 'currentElected', - transform: (elected: AccountId[]): string[] => - elected.map((accountId): string => accountId.toString()) - }], - ['query.staking.currentEra', { propName: 'currentEra' }], - ['query.staking.currentEraPointsEarned', { paramName: 'currentEra', propName: 'eraPoints' }] + ['derive.staking.overview', { propName: 'stakingOverview' }] ), withObservable(accountObservable.subject, { propName: 'allAccounts' }) ); diff --git a/packages/app-staking/src/types.ts b/packages/app-staking/src/types.ts index b41cc63b49..a98590ab82 100644 --- a/packages/app-staking/src/types.ts +++ b/packages/app-staking/src/types.ts @@ -2,20 +2,25 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { DerivedFees, DerivedBalances, DerivedHeartbeats } from '@polkadot/api-derive/types'; +import { DerivedFees, DerivedBalances, DerivedHeartbeats, DerivedStakingOverview } from '@polkadot/api-derive/types'; import { SubjectInfo } from '@polkadot/ui-keyring/observable/types'; import { EraPoints } from '@polkadot/types/interfaces'; +import { u32 } from '@polkadot/types'; export type Nominators = Record; +export interface DerivedStakingOverviewExt { + currentElected: string[]; + eraPointsEarned: EraPoints; + validatorCount: u32; +} + export interface ComponentProps { allAccounts?: SubjectInfo; allControllers: string[]; allStashes: string[]; - currentElected: string[]; - currentValidators: string[]; - eraPoints?: EraPoints; recentlyOnline?: DerivedHeartbeats; + stakingOverview?: DerivedStakingOverview; } export interface CalculateBalanceProps { diff --git a/packages/app-storage/src/Query.tsx b/packages/app-storage/src/Query.tsx index de5313a039..b36ab03f55 100644 --- a/packages/app-storage/src/Query.tsx +++ b/packages/app-storage/src/Query.tsx @@ -97,14 +97,16 @@ function getCachedComponent (query: QueryTypes): CacheInstance { paramName: 'params', paramValid: true, params: [[key]], - transform: ([data]: Option[]): Option => data + transform: ([data]: Option[]): Option => data, + withIndicator: true }); } else { // render function to create an element for the query results which is plugged to the api renderHelper = withCallDiv('subscribe', { paramName: 'params', paramValid: true, - params: [key, ...values] + params: [key, ...values], + withIndicator: true }); } diff --git a/packages/app-storage/src/Selection/Modules.tsx b/packages/app-storage/src/Selection/Modules.tsx index 950e1ef353..f1ae9487db 100644 --- a/packages/app-storage/src/Selection/Modules.tsx +++ b/packages/app-storage/src/Selection/Modules.tsx @@ -58,11 +58,8 @@ function Modules ({ onAdd, t }: Props): React.ReactElement { const isLinked = isMap && key.creator.meta.type.asMap.linked.isTrue; setKey({ - defaultValues: key.creator.section === 'session' - ? [{ - isValid: true, - value: api.consts.session.dedupKeyPrefix.toHex() - }] + defaultValues: key.creator.section === 'session' && key.creator.meta.type.isDoubleMap + ? [{ isValid: true, value: api.consts.session.dedupKeyPrefix.toHex() }] : null, isLinked, key, diff --git a/packages/apps/src/Apps.tsx b/packages/apps/src/Apps.tsx index 7a24b197c1..1f09ef2287 100644 --- a/packages/apps/src/Apps.tsx +++ b/packages/apps/src/Apps.tsx @@ -37,7 +37,7 @@ function Placeholder (): React.ReactElement { const WarmUp = withCalls<{}>( 'derive.accounts.indexes', 'derive.balances.fees', - 'query.session.validators' + 'derive.staking.overview' // This are very ineffective queries that // (a) adds load to the RPC node when activated globally // (b) is used in additional information (next-up) diff --git a/packages/react-api/package.json b/packages/react-api/package.json index 4545b403a1..f77006aa70 100644 --- a/packages/react-api/package.json +++ b/packages/react-api/package.json @@ -31,7 +31,7 @@ "homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-reactive#readme", "dependencies": { "@babel/runtime": "^7.6.3", - "@polkadot/api": "^0.96.0-beta.21", + "@polkadot/api": "^0.96.0-beta.22", "@polkadot/extension-dapp": "^0.14.0-beta.1", "edgeware-node-types": "^1.0.10", "rxjs-compat": "^6.5.3" diff --git a/packages/react-api/src/with/call.tsx b/packages/react-api/src/with/call.tsx index f1a2f4f836..aeadb418d3 100644 --- a/packages/react-api/src/with/call.tsx +++ b/packages/react-api/src/with/call.tsx @@ -43,7 +43,8 @@ export default function withCall

(endpoint: string, { paramValid = false, propName, skipIf = NO_SKIP, - transform = echoTransform + transform = echoTransform, + withIndicator = false }: Options = {}): (Inner: React.ComponentType) => React.ComponentType { return (Inner: React.ComponentType): React.ComponentType> => { class WithPromise extends React.Component { @@ -83,14 +84,17 @@ export default function withCall

(endpoint: string, { public componentDidMount (): void { this.isActive = true; - this.timerId = window.setInterval((): void => { - const elapsed = Date.now() - (this.state.callUpdatedAt || 0); - const callUpdated = elapsed <= 1500; - if (callUpdated !== this.state.callUpdated) { - this.nextState({ callUpdated }); - } - }, 500); + if (withIndicator) { + this.timerId = window.setInterval((): void => { + const elapsed = Date.now() - (this.state.callUpdatedAt || 0); + const callUpdated = elapsed <= 1500; + + if (callUpdated !== this.state.callUpdated) { + this.nextState({ callUpdated }); + } + }, 500); + } // The attachment takes time when a lot is available, set a timeout // to first handle the current queue before subscribing diff --git a/packages/react-api/src/with/types.ts b/packages/react-api/src/with/types.ts index c0a8fc6e46..0f04e1de92 100644 --- a/packages/react-api/src/with/types.ts +++ b/packages/react-api/src/with/types.ts @@ -26,6 +26,7 @@ export interface Options { propName?: string; skipIf?: (props: any) => boolean; transform?: Transform; + withIndicator?: boolean; } export type RenderFn = (value?: any) => React.ReactNode; diff --git a/packages/react-components/src/IdentityIcon.tsx b/packages/react-components/src/IdentityIcon.tsx index adaafe8884..0147297398 100644 --- a/packages/react-components/src/IdentityIcon.tsx +++ b/packages/react-components/src/IdentityIcon.tsx @@ -17,9 +17,9 @@ import StatusContext from './Status/Context'; import translate from './translate'; interface Props extends IdentityProps, I18nProps { - session_validators?: AccountId[]; staking_bonded?: string | null; system_name?: string; + validators?: AccountId[]; } // overrides based on the actual software node type @@ -41,7 +41,7 @@ export function getIdentityTheme (systemName: string): 'empty' { return ((uiSettings.icon === 'default' && NODES[systemName]) || uiSettings.icon) as 'empty'; } -function IdentityIcon ({ className, onCopy, prefix, session_validators, size, staking_bonded, style, t, theme, value }: Props): React.ReactElement { +function IdentityIcon ({ className, onCopy, prefix, size, staking_bonded, style, t, theme, validators, value }: Props): React.ReactElement { const { systemName } = useContext(ApiContext); const { queueAction } = useContext(StatusContext); const [isValidator, setIsValidator] = useState(false); @@ -53,13 +53,13 @@ function IdentityIcon ({ className, onCopy, prefix, session_validators, size, st : null; setIsValidator( - session_validators - ? session_validators.some((validator): boolean => + validators + ? validators.some((validator): boolean => [address, staking_bonded].includes(validator.toString()) ) : false ); - }, [session_validators, value]); + }, [validators, value]); const _onCopy = (account: string): void => { onCopy && onCopy(account); @@ -89,7 +89,7 @@ export default withMulti( IdentityIcon, translate, withCalls( - 'query.session.validators', + ['derive.staking.validators', { propName: 'validators' }], ['query.staking.bonded', { paramName: 'value', transform: (bonded: Option): string | null => diff --git a/yarn.lock b/yarn.lock index 1def7375fe..98ff3347aa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2016,45 +2016,45 @@ once "^1.4.0" universal-user-agent "^4.0.0" -"@polkadot/api-contract@^0.96.0-beta.21": - version "0.96.0-beta.21" - resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-0.96.0-beta.21.tgz#5d77e123bcf066dfc5c1eac17e923588ed92a5d7" - integrity sha512-ESeZq59QOwYCtkQSiwKB3FPKtAYvU/qN15jmEFAA6nKyCZpE8CHpeMANEEjKh5nreEv+W+GTEBSplZ63y5j/fQ== +"@polkadot/api-contract@^0.96.0-beta.22": + version "0.96.0-beta.22" + resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-0.96.0-beta.22.tgz#04e166aad0b9a20ca04d4845ddcb3fadec844886" + integrity sha512-IodK2QdJevNmIDeWfqMmwDB2gUbMZjwKmHCZUtOxR6MeutTSTRr/KRJH4fKDQ9oCWRs8phPLcooo3ngQ/xSncg== dependencies: "@babel/runtime" "^7.6.3" - "@polkadot/types" "^0.96.0-beta.21" + "@polkadot/types" "^0.96.0-beta.22" -"@polkadot/api-derive@^0.96.0-beta.21": - version "0.96.0-beta.21" - resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.96.0-beta.21.tgz#3d0a7bad14dd3a9d60fd810ec95af027176855b4" - integrity sha512-QxXRW/jI+9ExXMpqsNO+epuN5UGfuQbbmlHyDfzP49wRXuCnGatPDZ52ynRK3UBWB8hSKPgdTXFsoDFMPm6ILw== +"@polkadot/api-derive@^0.96.0-beta.22": + version "0.96.0-beta.22" + resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.96.0-beta.22.tgz#a00d59e96f097b2ab0c0c65a9bf97bf9c7ea44aa" + integrity sha512-lRVC1hWSOYfQMcmOdudnhb7hzK6tsGY194WlytFzAGIzxLYz7FWrVfA3JnxfytMPEHyznsZC9RCTSMvPAXUv/g== dependencies: "@babel/runtime" "^7.6.3" - "@polkadot/api" "^0.96.0-beta.21" - "@polkadot/types" "^0.96.0-beta.21" + "@polkadot/api" "^0.96.0-beta.22" + "@polkadot/types" "^0.96.0-beta.22" -"@polkadot/api-metadata@^0.96.0-beta.21": - version "0.96.0-beta.21" - resolved "https://registry.yarnpkg.com/@polkadot/api-metadata/-/api-metadata-0.96.0-beta.21.tgz#18b52f27f10cc52cd38003d1990344adee4b57d1" - integrity sha512-b+kuEbl0Cpymv6jA9wYHT4NH2rpMre8scix/1LLN931mMBftGSJ24PHeOH5ZocmWH0krK6FK+u+NeQ58ZuEfxQ== +"@polkadot/api-metadata@^0.96.0-beta.22": + version "0.96.0-beta.22" + resolved "https://registry.yarnpkg.com/@polkadot/api-metadata/-/api-metadata-0.96.0-beta.22.tgz#8ba272f5ebe62cf2edab75ed9a554943fbce4316" + integrity sha512-MkxuohC9F01rg0z/F141ky9poSTVowExpmvUnaJwt//UDDLERwauZ+DCS0+7xao0z6a7ciLn32I0/xW6T9o0GQ== dependencies: "@babel/runtime" "^7.6.3" - "@polkadot/types" "^0.96.0-beta.21" + "@polkadot/types" "^0.96.0-beta.22" "@polkadot/util" "^1.6.1" "@polkadot/util-crypto" "^1.6.1" -"@polkadot/api@^0.96.0-beta.21": - version "0.96.0-beta.21" - resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.96.0-beta.21.tgz#91fa6db7acbb7402005727c24be4898c4a6654b6" - integrity sha512-17dxU5KGT4bi+mrOlPvPFhpAKXvMBcJJQ6Uv3h67czCCmU3vC/bFZ7lrGNRIDytEXQouQbGZVlZLosi6gBsjow== +"@polkadot/api@^0.96.0-beta.22": + version "0.96.0-beta.22" + resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.96.0-beta.22.tgz#d26a6ce18b4e1fd2df31bc065ac4adff48038bfa" + integrity sha512-V2wDDUXO/ld6Nw7Rf1qEl7v8pChy23/FAY1qbvQGMPWhjtnb9KTq49R7nuXneOVVXB0ESnTTZETzXQBWLndaQw== dependencies: "@babel/runtime" "^7.6.3" - "@polkadot/api-derive" "^0.96.0-beta.21" - "@polkadot/api-metadata" "^0.96.0-beta.21" + "@polkadot/api-derive" "^0.96.0-beta.22" + "@polkadot/api-metadata" "^0.96.0-beta.22" "@polkadot/keyring" "^1.6.1" - "@polkadot/rpc-core" "^0.96.0-beta.21" - "@polkadot/rpc-provider" "^0.96.0-beta.21" - "@polkadot/types" "^0.96.0-beta.21" + "@polkadot/rpc-core" "^0.96.0-beta.22" + "@polkadot/rpc-provider" "^0.96.0-beta.22" + "@polkadot/types" "^0.96.0-beta.22" "@polkadot/util-crypto" "^1.6.1" "@polkadot/dev-react@^0.32.0-beta.12": @@ -2156,10 +2156,10 @@ dependencies: "@babel/runtime" "^7.6.3" -"@polkadot/jsonrpc@^0.96.0-beta.21": - version "0.96.0-beta.21" - resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.96.0-beta.21.tgz#d8873b2aa0cdff96727c9050060fcff8f649a151" - integrity sha512-5IAc9fF6rSX6LPWB+xGcDxS3Kc9JwvEf0DKwgKZRfjE4W56n6r5lrqDX/LoCZ3CYXw9N6UgTTKB5IPgBVAoHrQ== +"@polkadot/jsonrpc@^0.96.0-beta.22": + version "0.96.0-beta.22" + resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.96.0-beta.22.tgz#38b3437b7f4f7eb4800d9d71623f1b0e8777cf94" + integrity sha512-EF7GbdIB+jFXiWzBkHatc65mOO4dVT8r9lpXYaWQzuqkZOHrotTYJC7DQ0V2n04fo4IKlJPyb0TKh3+3X6/FTw== dependencies: "@babel/runtime" "^7.6.3" @@ -2197,25 +2197,25 @@ qrcode-generator "^1.4.4" react-qr-reader "^2.2.1" -"@polkadot/rpc-core@^0.96.0-beta.21": - version "0.96.0-beta.21" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.96.0-beta.21.tgz#22932216658b8bfdd803c369af7ec5c73aca6b71" - integrity sha512-LRmNqB5eUjIr+DrvJp+X2o5+OXtsJg+y65SQ1ei0voj35VM1/OmiuxyqEWIKRKwna3BNBm3PbeQDaHepeaRc9g== +"@polkadot/rpc-core@^0.96.0-beta.22": + version "0.96.0-beta.22" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.96.0-beta.22.tgz#fa0e9f2e3609eeb18c91bf6163dd3f3c1bfc94a1" + integrity sha512-JXO1XiJiqtXYotGp6oTOWuSqWiEyH6nnu1R5CwrZ/+ShTOWgbplPMv91F7qT0IktDY4rRZ9WLjy4xYE9yUSnEw== dependencies: "@babel/runtime" "^7.6.3" - "@polkadot/jsonrpc" "^0.96.0-beta.21" - "@polkadot/rpc-provider" "^0.96.0-beta.21" - "@polkadot/types" "^0.96.0-beta.21" + "@polkadot/jsonrpc" "^0.96.0-beta.22" + "@polkadot/rpc-provider" "^0.96.0-beta.22" + "@polkadot/types" "^0.96.0-beta.22" "@polkadot/util" "^1.6.1" rxjs "^6.5.3" -"@polkadot/rpc-provider@^0.96.0-beta.21": - version "0.96.0-beta.21" - resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.96.0-beta.21.tgz#44ba559ce92053a007301066fa29a3964328e146" - integrity sha512-awGbWL3WEV59OKy7vtikEd6T6mg5qlTycbUt5MqagfaqjyZK3aIHRLq6L4Td3z1hDdtgIkYxajms0xhPvbt0FQ== +"@polkadot/rpc-provider@^0.96.0-beta.22": + version "0.96.0-beta.22" + resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.96.0-beta.22.tgz#cb885efa65cbc1da3a42a19bed5a5acf0ffea50c" + integrity sha512-WGLWt9PLEY7wm6aOLrSMTz98vUXXzQ2iApOkK3acSzuPneRCqauqLLjM2AAnX9bpS/YY+Mk0DDDrvAMxOYj7WQ== dependencies: "@babel/runtime" "^7.6.3" - "@polkadot/api-metadata" "^0.96.0-beta.21" + "@polkadot/api-metadata" "^0.96.0-beta.22" "@polkadot/util" "^1.6.1" "@polkadot/util-crypto" "^1.6.1" "@types/nock" "^11.1.0" @@ -2230,10 +2230,10 @@ dependencies: "@types/chrome" "^0.0.91" -"@polkadot/types@^0.96.0-beta.21": - version "0.96.0-beta.21" - resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.96.0-beta.21.tgz#d1a808076ed63d154597a26f1d7317d3a96bbd39" - integrity sha512-utrP6TkPda7MiNyYEO1dl4zhezvlPy01MKKb7NG08RcmqgkwEL582jiIW33DJi9YMVhurDvzpqHjGnXtNSlftw== +"@polkadot/types@^0.96.0-beta.22": + version "0.96.0-beta.22" + resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.96.0-beta.22.tgz#40a343e4fe0ae03567b765481040e34edb54eeb2" + integrity sha512-eY2CGgJG8ytbJgI2bQOmDvyeQ0eorJtD2eE5BBsTYFNgMvIWvUmyBqgi3CTMS3zG7QM7M8PQUU1T98vG8qhSPg== dependencies: "@babel/runtime" "^7.6.3" "@polkadot/util" "^1.6.1"