Browse Source

More effcicient derive for staking info (#2017)

Jaco Greeff 5 years ago
parent
commit
e9a45f8dde

+ 3 - 3
package.json

@@ -10,10 +10,10 @@
     "packages/*"
   ],
   "resolutions": {
-    "@polkadot/api": "^0.99.0-beta.6",
-    "@polkadot/api-contract": "^0.99.0-beta.6",
+    "@polkadot/api": "^0.99.0-beta.7",
+    "@polkadot/api-contract": "^0.99.0-beta.7",
     "@polkadot/keyring": "^1.7.1",
-    "@polkadot/types": "^0.99.0-beta.6",
+    "@polkadot/types": "^0.99.0-beta.7",
     "@polkadot/util": "^1.7.1",
     "@polkadot/util-crypto": "^1.7.1",
     "babel-core": "^7.0.0-bridge.0",

+ 1 - 1
packages/app-contracts/package.json

@@ -11,7 +11,7 @@
   "license": "Apache-2.0",
   "dependencies": {
     "@babel/runtime": "^7.7.5",
-    "@polkadot/api-contract": "^0.99.0-beta.6",
+    "@polkadot/api-contract": "^0.99.0-beta.7",
     "@polkadot/react-components": "^0.38.0-beta.49"
   }
 }

+ 8 - 17
packages/app-staking/src/Actions/Account/index.tsx

@@ -3,7 +3,7 @@
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 
-import { DerivedBalances, DerivedStaking, DerivedStakingOnlineStatus, DerivedHeartbeats } from '@polkadot/api-derive/types';
+import { DerivedBalances, DerivedStakingAccount, DerivedHeartbeats } from '@polkadot/api-derive/types';
 import { ApiProps } from '@polkadot/react-api/types';
 import { I18nProps } from '@polkadot/react-components/types';
 import { AccountId, Exposure, StakingLedger, ValidatorPrefs } from '@polkadot/types/interfaces';
@@ -11,7 +11,7 @@ import { KeyringSectionOption } from '@polkadot/ui-keyring/options/types';
 
 import React from 'react';
 import styled from 'styled-components';
-import { AddressCard, AddressInfo, AddressMini, AddressRow, Button, Menu, OnlineStatus, Popup, TxButton } from '@polkadot/react-components';
+import { AddressCard, AddressInfo, AddressMini, AddressRow, Button, Menu, Popup, TxButton } from '@polkadot/react-components';
 import { withCalls, withMulti } from '@polkadot/react-api';
 
 import BondExtra from './BondExtra';
@@ -31,7 +31,7 @@ interface Props extends ApiProps, I18nProps {
   className?: string;
   isOwnStash: boolean;
   recentlyOnline?: DerivedHeartbeats;
-  staking_info?: DerivedStaking;
+  staking_account?: DerivedStakingAccount;
   stashId: string;
   stashOptions: KeyringSectionOption[];
 }
@@ -53,7 +53,6 @@ interface State {
   isUnbondOpen: boolean;
   isValidateOpen: boolean;
   nominees?: string[];
-  onlineStatus: DerivedStakingOnlineStatus;
   sessionIds: string[];
   stakers?: Exposure;
   stakingLedger?: StakingLedger;
@@ -99,16 +98,15 @@ class Account extends React.PureComponent<Props, State> {
     isStashValidating: false,
     isUnbondOpen: false,
     isValidateOpen: false,
-    onlineStatus: {},
     sessionIds: []
   };
 
-  public static getDerivedStateFromProps ({ allStashes, staking_info, stashId }: Props): Pick<State, never> | null {
-    if (!staking_info) {
+  public static getDerivedStateFromProps ({ allStashes, staking_account, stashId }: Props): Pick<State, never> | null {
+    if (!staking_account) {
       return null;
     }
 
-    const { controllerId, nextSessionIds, nominators, rewardDestination, sessionIds, stakers, stakingLedger, validatorPrefs } = staking_info;
+    const { controllerId, nextSessionIds, nominators, rewardDestination, sessionIds, stakers, stakingLedger, validatorPrefs } = staking_account;
     const isStashNominating = nominators && !!nominators.length;
     const isStashValidating = !!allStashes && !!stashId && allStashes.includes(stashId);
     const nextConcat = u8aConcat(...nextSessionIds.map((id): Uint8Array => id.toU8a()));
@@ -135,7 +133,7 @@ class Account extends React.PureComponent<Props, State> {
 
   public render (): React.ReactNode {
     const { className, isSubstrateV2, stashId, t } = this.props;
-    const { controllerId, hexSessionIdNext, hexSessionIdQueue, isBondExtraOpen, isInjectOpen, isStashValidating, isUnbondOpen, nominees, onlineStatus, sessionIds } = this.state;
+    const { controllerId, hexSessionIdNext, hexSessionIdQueue, isBondExtraOpen, isInjectOpen, isStashValidating, isUnbondOpen, nominees, sessionIds } = this.state;
 
     // Each component is rendered and gets a `is[Component]Open` passed in a `isOpen` props.
     // These components will be loaded and return null at the first load (because is[Component]Open === false).
@@ -145,13 +143,6 @@ class Account extends React.PureComponent<Props, State> {
       <AddressCard
         buttons={this.renderButtons()}
         className={className}
-        iconInfo={onlineStatus && (
-          <OnlineStatus
-            isTooltip
-            value={onlineStatus}
-          />
-        )}
-        // label={t('stash')}
         type='account'
         value={stashId}
         withAddressOrName
@@ -612,7 +603,7 @@ export default withMulti(
   `,
   translate,
   withCalls<Props>(
-    ['derive.staking.info', { paramName: 'stashId' }],
+    ['derive.staking.account', { paramName: 'stashId' }],
     ['derive.balances.all', { paramName: 'stashId' }]
   )
 );

+ 2 - 2
packages/app-staking/src/Overview/Address.tsx

@@ -3,7 +3,7 @@
 // of the Apache-2.0 license. See the LICENSE file for details.
 
 import { AccountId, Balance, Points, ValidatorPrefsTo196 } from '@polkadot/types/interfaces';
-import { DerivedStaking, DerivedHeartbeats } from '@polkadot/api-derive/types';
+import { DerivedStakingQuery, DerivedHeartbeats } from '@polkadot/api-derive/types';
 import { I18nProps } from '@polkadot/react-components/types';
 import { ValidatorFilter } from '../types';
 
@@ -51,7 +51,7 @@ interface StakingState {
 function Address ({ address, authorsMap, className, filter, hasQueries, isElected, isFavorite, lastAuthors, myAccounts, points, recentlyOnline, t, toggleFavorite, withNominations = true }: Props): React.ReactElement<Props> | null {
   const { api } = useApi();
   // FIXME Any horrors, caused by derive type mismatches
-  const stakingInfo = useCall<DerivedStaking>(api.derive.staking.info as any, [address]);
+  const stakingInfo = useCall<DerivedStakingQuery>(api.derive.staking.query as any, [address]);
   const [hasActivity, setHasActivity] = useState(true);
   const [{ commission, hasNominators, isNominatorMe, nominators, stashId, stakeOwn, stakeOther, validatorPayment }, setStakingState] = useState<StakingState>({
     hasNominators: false,

+ 8 - 25
packages/app-staking/src/Targets/index.tsx

@@ -4,7 +4,7 @@
 
 import { DerivedStakingElected } from '@polkadot/api-derive/types';
 import { I18nProps } from '@polkadot/react-components/types';
-import { AccountId, Exposure, ValidatorPrefs, ValidatorPrefsTo196 } from '@polkadot/types/interfaces';
+import { ValidatorPrefs, ValidatorPrefsTo196 } from '@polkadot/types/interfaces';
 import { SessionRewards } from '../types';
 import { ValidatorInfo } from './types';
 
@@ -32,12 +32,6 @@ interface AllInfo {
   validators: ValidatorInfo[];
 }
 
-interface BaseInfo {
-  accountId: AccountId;
-  stakers?: Exposure;
-  validatorPrefs?: ValidatorPrefs;
-}
-
 function sortValidators (list: ValidatorInfo[]): ValidatorInfo[] {
   return list
     .sort((a, b): number => b.bondTotal.cmp(a.bondTotal))
@@ -91,10 +85,11 @@ function sortValidators (list: ValidatorInfo[]): ValidatorInfo[] {
     );
 }
 
-function extractInfo (allAccounts: string[], amount: BN = new BN(0), baseInfo: BaseInfo[], favorites: string[], lastReward: BN): AllInfo {
+function extractInfo (allAccounts: string[], amount: BN = new BN(0), electedInfo: DerivedStakingElected, favorites: string[], lastReward: BN): AllInfo {
   let totalStaked = new BN(0);
+  const perValidatorReward = lastReward.divn(electedInfo.info.length);
   const validators = sortValidators(
-    baseInfo.map(({ accountId, stakers, validatorPrefs }): ValidatorInfo => {
+    electedInfo.info.map(({ accountId, stakers, validatorPrefs }): ValidatorInfo => {
       const exposure = stakers || {
         total: createType(registry, 'Compact<Balance>'),
         own: createType(registry, 'Compact<Balance>'),
@@ -105,7 +100,6 @@ function extractInfo (allAccounts: string[], amount: BN = new BN(0), baseInfo: B
       };
       const bondOwn = exposure.own.unwrap();
       const bondTotal = exposure.total.unwrap();
-      const perValidatorReward = lastReward.divn(baseInfo.length);
       const validatorPayment = (prefs as ValidatorPrefsTo196).validatorPayment
         ? (prefs as ValidatorPrefsTo196).validatorPayment.unwrap() as BN
         : (prefs as ValidatorPrefs).commission.unwrap().mul(perValidatorReward).div(PERBILL);
@@ -150,23 +144,12 @@ function Targets ({ className, sessionRewards, t }: Props): React.ReactElement<P
   const { api } = useApi();
   const { allAccounts } = useAccounts();
   const [_amount, setAmount] = useState<BN | undefined>(new BN(1000));
-  const electedInfo = useCall<DerivedStakingElected>(api.derive.staking.electedInfo, [], { isSingle: true });
+  const electedInfo = useCall<DerivedStakingElected>(api.derive.staking.electedInfo, []);
   const [favorites, toggleFavorite] = useFavorites(STORE_FAVS_BASE);
   const [lastReward, setLastReward] = useState(new BN(0));
-  const [baseInfo, setBaseInfo] = useState<BaseInfo[] | undefined>();
   const [{ validators, totalStaked }, setWorkable] = useState<AllInfo>({ totalStaked: new BN(0), validators: [] });
   const amount = useDebounce(_amount);
 
-  useEffect((): void => {
-    if (electedInfo) {
-      setBaseInfo(
-        electedInfo.info.map(({ accountId, stakers, validatorPrefs }) => ({
-          accountId, stakers, validatorPrefs
-        }))
-      );
-    }
-  }, [electedInfo]);
-
   useEffect((): void => {
     if (sessionRewards && sessionRewards.length) {
       const lastRewardSession = sessionRewards.filter(({ reward }): boolean => reward.gtn(0));
@@ -180,10 +163,10 @@ function Targets ({ className, sessionRewards, t }: Props): React.ReactElement<P
   }, [sessionRewards]);
 
   useEffect((): void => {
-    if (baseInfo) {
-      setWorkable(extractInfo(allAccounts, amount, baseInfo, favorites, lastReward));
+    if (electedInfo) {
+      setWorkable(extractInfo(allAccounts, amount, electedInfo, favorites, lastReward));
     }
-  }, [allAccounts, amount, baseInfo, favorites, lastReward]);
+  }, [allAccounts, amount, electedInfo, favorites, lastReward]);
 
   return (
     <div className={className}>

+ 1 - 1
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.7.5",
-    "@polkadot/api": "^0.99.0-beta.6",
+    "@polkadot/api": "^0.99.0-beta.7",
     "@polkadot/extension-dapp": "^0.14.0-beta.9",
     "edgeware-node-types": "^1.0.10",
     "rxjs-compat": "^6.5.3"

+ 4 - 4
packages/react-components/src/AddressInfo.tsx

@@ -2,7 +2,7 @@
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 
-import { DerivedBalances, DerivedStaking } from '@polkadot/api-derive/types';
+import { DerivedBalances, DerivedStakingAccount } from '@polkadot/api-derive/types';
 import { ValidatorPrefsTo145 } from '@polkadot/types/interfaces';
 import { BareProps, I18nProps } from './types';
 
@@ -49,7 +49,7 @@ interface Props extends BareProps, I18nProps {
   balancesAll?: DerivedBalances;
   children?: React.ReactNode;
   extraInfo?: [string, string][];
-  stakingInfo?: DerivedStaking;
+  stakingInfo?: DerivedStakingAccount;
   withBalance?: boolean | BalanceActiveType;
   withBalanceToggle?: false;
   withExtended?: boolean | CryptoActiveType;
@@ -112,7 +112,7 @@ function skipStakingIf ({ stakingInfo, withBalance = true, withRewardDestination
 }
 
 // calculates the bonded, first being the own, the second being nominated
-function calcBonded (stakingInfo?: DerivedStaking, bonded?: boolean | BN[]): [BN, BN[]] {
+function calcBonded (stakingInfo?: DerivedStakingAccount, bonded?: boolean | BN[]): [BN, BN[]] {
   let other: BN[] = [];
   let own = new BN(0);
 
@@ -494,7 +494,7 @@ export default withMulti(
       propName: 'balancesAll',
       skipIf: skipBalancesIf
     }],
-    ['derive.staking.info', {
+    ['derive.staking.account', {
       paramName: 'address',
       propName: 'stakingInfo',
       skipIf: skipStakingIf

+ 2 - 2
packages/react-components/src/AddressRow.tsx

@@ -3,7 +3,7 @@
 // This software may be modified and distributed under the terms
 // of the Apache-2.0 license. See the LICENSE file for details.
 
-import { DeriveAccountInfo, DerivedStaking } from '@polkadot/api-derive/types';
+import { DeriveAccountInfo, DerivedStakingAccount } from '@polkadot/api-derive/types';
 import { ApiProps } from '@polkadot/react-api/types';
 import { I18nProps } from '@polkadot/react-components/types';
 import { AccountId, AccountIndex, Address } from '@polkadot/types/interfaces';
@@ -32,7 +32,7 @@ export interface Props extends I18nProps, RowProps {
   accounts_info?: DeriveAccountInfo;
   noDefaultNameOpacity?: boolean;
   overlay?: React.ReactNode;
-  stakingInfo?: DerivedStaking;
+  stakingInfo?: DerivedStakingAccount;
   value: AccountId | AccountIndex | Address | string | null;
   withAddressOrName?: boolean;
   withBalance?: boolean | BalanceActiveType;

+ 0 - 75
packages/react-components/src/OnlineStatus.tsx

@@ -1,75 +0,0 @@
-// Copyright 2017-2019 @polkadot/app-staking authors & contributors
-// This software may be modified and distributed under the terms
-// of the Apache-2.0 license. See the LICENSE file for details.
-
-import { DerivedStakingOnlineStatus } from '@polkadot/api-derive/types';
-import { I18nProps } from './types';
-
-import BN from 'bn.js';
-import React, { useEffect, useState } from 'react';
-import { formatNumber } from '@polkadot/util';
-
-import Badge from './Badge';
-import Icon from './Icon';
-
-import translate from './translate';
-
-interface Props extends I18nProps {
-  isTooltip?: boolean;
-  value: DerivedStakingOnlineStatus;
-}
-
-function OnlineStatus ({ className, value, isTooltip = false, t }: Props): React.ReactElement<Props> | null {
-  const [{ hover, info, type }, setType] = useState<{ hover: React.ReactNode; info: React.ReactNode; type: 'online' | 'offline' | null }>({ hover: '', info: '', type: null });
-
-  useEffect((): void => {
-    const { online, offline } = value;
-    let hover: React.ReactNode = '';
-    let info: React.ReactNode = '';
-    let type: 'online' | 'offline' | null = null;
-
-    if (offline) {
-      const count = offline.reduce((total, { count }): BN => total.add(count), new BN(0));
-      const blockNumbers = offline.map(({ blockNumber }): string => `#${formatNumber(blockNumber)}`);
-
-      info = count.toString();
-      hover = t('Reported offline {{count}} times, last at {{blockNumber}}', {
-        replace: {
-          count,
-          blockNumber: blockNumbers[blockNumbers.length - 1]
-        }
-      });
-      type = 'offline';
-    } else if (online && online.isOnline) {
-      const blockNumber = value.online ? value.online.blockNumber : null;
-
-      info = <Icon name='check' />;
-      hover = blockNumber
-        ? t('Reported online at #{{blockNumber}}', {
-          replace: {
-            blockNumber: formatNumber(blockNumber)
-          }
-        })
-        : t('Reported online in the current session');
-      type = 'online';
-    }
-
-    setType({ hover, info, type });
-  }, [value]);
-
-  if (!type) {
-    return null;
-  }
-
-  return (
-    <Badge
-      className={`ui--OnlineStatus ${className}`}
-      hover={hover}
-      info={info}
-      isTooltip={isTooltip}
-      type={type}
-    />
-  );
-}
-
-export default translate(OnlineStatus);

+ 0 - 1
packages/react-components/src/index.tsx

@@ -67,7 +67,6 @@ export { default as Password } from './Password';
 export { default as Popup } from './Popup';
 export { default as Progress } from './Progress';
 export { default as ProposedAction } from './ProposedAction';
-export { default as OnlineStatus } from './OnlineStatus';
 export { default as Row } from './Row';
 export { default as Static } from './Static';
 export { default as Status, StatusContext } from './Status';

+ 46 - 46
yarn.lock

@@ -2044,35 +2044,35 @@
   dependencies:
     "@types/node" ">= 8"
 
-"@polkadot/api-contract@^0.99.0-beta.6":
-  version "0.99.0-beta.6"
-  resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-0.99.0-beta.6.tgz#a90e8206c18e27013c4411122f523ef8cb17019e"
-  integrity sha512-jgijvl7vAtHWCWrOKW2rlNTiQihJgvkDPLxEuORV3qcfE9kUwFDFKkDeh9cGhyXXEZZsuXwIwIDuMtZNlLJ92w==
+"@polkadot/api-contract@^0.99.0-beta.7":
+  version "0.99.0-beta.7"
+  resolved "https://registry.yarnpkg.com/@polkadot/api-contract/-/api-contract-0.99.0-beta.7.tgz#86c46d87af1094312dc92d3b3aa26ace69196fcf"
+  integrity sha512-88Etd3F7erP0rLoO3vnUYiDO3uZTeCo4pswGhnDpRzkmRMp/LiyvHzmIJjFsY6nOU4nFVVQ1gSA5xvvzfxEczg==
   dependencies:
     "@babel/runtime" "^7.7.5"
-    "@polkadot/types" "^0.99.0-beta.6"
+    "@polkadot/types" "^0.99.0-beta.7"
 
-"@polkadot/api-derive@^0.99.0-beta.6":
-  version "0.99.0-beta.6"
-  resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.99.0-beta.6.tgz#901dfa6703d515e5121b0749cf18cdbf58316499"
-  integrity sha512-kQzqVH1qRrhU1a3/QNg8m/VJDMcuYmJhPX73NwFS9JnrE4L4wyHrxhJ3B5+viAdA8QI8I0MF+idOIbJ4rkIVfw==
+"@polkadot/api-derive@^0.99.0-beta.7":
+  version "0.99.0-beta.7"
+  resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.99.0-beta.7.tgz#90fb3172f665f4e9253d9f209cc5acbb03341b6a"
+  integrity sha512-RdRGOzy3VUY1Bt0XeGSH4l4MgXTlokgtBANlL4BkCYKqpk9VTzOIgTr9km8rveDU+S4EoqT7nL/YuQikm/buGA==
   dependencies:
     "@babel/runtime" "^7.7.5"
-    "@polkadot/api" "^0.99.0-beta.6"
-    "@polkadot/types" "^0.99.0-beta.6"
+    "@polkadot/api" "^0.99.0-beta.7"
+    "@polkadot/types" "^0.99.0-beta.7"
 
-"@polkadot/api@^0.99.0-beta.6":
-  version "0.99.0-beta.6"
-  resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.99.0-beta.6.tgz#29f91a48a456a5ff27798a028eab4105ff9fec12"
-  integrity sha512-mzzdj4/dJgm/8nq7n8tok3qiC56uBFMoTyJ7GVsOAQWaPso0RflOJHbF9quQZIzxn6adaXV2LnuxWpKuKolCzw==
+"@polkadot/api@^0.99.0-beta.7":
+  version "0.99.0-beta.7"
+  resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.99.0-beta.7.tgz#2ea03b2e27d28cbb6af5cca45c226b0db63c685b"
+  integrity sha512-y7lDN4YqAxTwmBlynBWQKBJJVaUPc9cWZyjfLMYY3cp4KcvAxtuAFKmxON4pdGfNdo4bAPvTJZGoEy9oWOJ6Kw==
   dependencies:
     "@babel/runtime" "^7.7.5"
-    "@polkadot/api-derive" "^0.99.0-beta.6"
+    "@polkadot/api-derive" "^0.99.0-beta.7"
     "@polkadot/keyring" "^1.7.1"
-    "@polkadot/metadata" "^0.99.0-beta.6"
-    "@polkadot/rpc-core" "^0.99.0-beta.6"
-    "@polkadot/rpc-provider" "^0.99.0-beta.6"
-    "@polkadot/types" "^0.99.0-beta.6"
+    "@polkadot/metadata" "^0.99.0-beta.7"
+    "@polkadot/rpc-core" "^0.99.0-beta.7"
+    "@polkadot/rpc-provider" "^0.99.0-beta.7"
+    "@polkadot/types" "^0.99.0-beta.7"
     "@polkadot/util-crypto" "^1.7.1"
 
 "@polkadot/dev-react@^0.32.0-beta.17":
@@ -2177,10 +2177,10 @@
   dependencies:
     "@babel/runtime" "^7.7.5"
 
-"@polkadot/jsonrpc@^0.99.0-beta.6":
-  version "0.99.0-beta.6"
-  resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.99.0-beta.6.tgz#397ee6c6d7b0e0a3e1447c613fde2fe48786c241"
-  integrity sha512-a/jyvDlEHjWYhVhJyEB+o+ZZd/iNmV6GRImxsaG55kDG9+4fzAN+4xxWHSfPDBi1YHflV7oO4jpcbJeI5QGCaQ==
+"@polkadot/jsonrpc@^0.99.0-beta.7":
+  version "0.99.0-beta.7"
+  resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.99.0-beta.7.tgz#31599ae85fa0288bed669c648e4d034c73344be2"
+  integrity sha512-yVPv9/o5AYPbKYSmjuSybCSclBKgc+yGjRHBBZpFXk8ZNLWXeXbpfBIHsW51MMCbrfF2wz/dg1KuZH10/jlJYw==
   dependencies:
     "@babel/runtime" "^7.7.5"
 
@@ -2193,13 +2193,13 @@
     "@polkadot/util" "^1.7.1"
     "@polkadot/util-crypto" "^1.7.1"
 
-"@polkadot/metadata@^0.99.0-beta.6":
-  version "0.99.0-beta.6"
-  resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-0.99.0-beta.6.tgz#4449d636fd99adb6c78f195602e84ba607ad72c8"
-  integrity sha512-zBW4C4OwQyPrJjbv7gUwMYMcrBr6GAEi7eDrxRE9K0s6IvbBONQ+d4MZM9deeIf/0PavYowJ0UqRRnrFuUa3Vg==
+"@polkadot/metadata@^0.99.0-beta.7":
+  version "0.99.0-beta.7"
+  resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-0.99.0-beta.7.tgz#02e6c469b42b57aeebf404ddbe3f2b0aaabefb29"
+  integrity sha512-2ONCv+Qv/0yG61j3zsVgj9vibUbO6cEUp7XS37QOMvr2n3M4Mn4lrqIQkizkgh81aUQf4p9zL4kFMF3dYphc6Q==
   dependencies:
     "@babel/runtime" "^7.7.5"
-    "@polkadot/types" "^0.99.0-beta.6"
+    "@polkadot/types" "^0.99.0-beta.7"
     "@polkadot/util" "^1.7.1"
     "@polkadot/util-crypto" "^1.7.1"
 
@@ -2228,25 +2228,25 @@
     qrcode-generator "^1.4.4"
     react-qr-reader "^2.2.1"
 
-"@polkadot/rpc-core@^0.99.0-beta.6":
-  version "0.99.0-beta.6"
-  resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.99.0-beta.6.tgz#2659433bd8dc899f9f3d327d9c623409ed6a8010"
-  integrity sha512-qS0HG+2pQM45oI3nQL3V/ZZUG/nlrnGMX+OTOvG8MYAuEhgHj9AuqJBhP9UQA5E0ZqeAub6Cr9gOPCUbQPiDOQ==
+"@polkadot/rpc-core@^0.99.0-beta.7":
+  version "0.99.0-beta.7"
+  resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.99.0-beta.7.tgz#245e40be36b2b98ebb7a3052e0613741559a668f"
+  integrity sha512-l8o9NLuSSMlbg0mSl9kQ4ouRwOdgk4XDs77srkAk6vApmVT1B2UBhPitOHzrbsvS3INCIpzH086la4U7daiPQw==
   dependencies:
     "@babel/runtime" "^7.7.5"
-    "@polkadot/jsonrpc" "^0.99.0-beta.6"
-    "@polkadot/rpc-provider" "^0.99.0-beta.6"
-    "@polkadot/types" "^0.99.0-beta.6"
+    "@polkadot/jsonrpc" "^0.99.0-beta.7"
+    "@polkadot/rpc-provider" "^0.99.0-beta.7"
+    "@polkadot/types" "^0.99.0-beta.7"
     "@polkadot/util" "^1.7.1"
     rxjs "^6.5.3"
 
-"@polkadot/rpc-provider@^0.99.0-beta.6":
-  version "0.99.0-beta.6"
-  resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.99.0-beta.6.tgz#a1a321cbc4b6fcb166299432d840cf9e87dc3405"
-  integrity sha512-4embwXT6bqI3E5FIX281jgHgSfdjNWt/xNnP3UT5eFwExMEOKA9pux80S33mab/lWsWfBuJO81xV4V4nmdV10w==
+"@polkadot/rpc-provider@^0.99.0-beta.7":
+  version "0.99.0-beta.7"
+  resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.99.0-beta.7.tgz#c4f533dfeaa782672ffd2425797c86ec72945de2"
+  integrity sha512-266vHWCvVLs3zIHGAqlGp026CMGrHD/FKfHeLDpMPm9Qx/MyGWlm5f89+B6hlrD/RzNy/Hx2r46BGN+zgtp3yw==
   dependencies:
     "@babel/runtime" "^7.7.5"
-    "@polkadot/metadata" "^0.99.0-beta.6"
+    "@polkadot/metadata" "^0.99.0-beta.7"
     "@polkadot/util" "^1.7.1"
     "@polkadot/util-crypto" "^1.7.1"
     eventemitter3 "^4.0.0"
@@ -2260,13 +2260,13 @@
   dependencies:
     "@types/chrome" "^0.0.91"
 
-"@polkadot/types@^0.99.0-beta.6":
-  version "0.99.0-beta.6"
-  resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.99.0-beta.6.tgz#9775620c61cfea9ab073469f5134ad340cc6cc31"
-  integrity sha512-kboJSre60o37nJuceXe+sxqjuhrYbFXltseN8+aSJS6FxRorBzMhB7zRmK4U8PltE5fhorXeavlmndXLnXzyug==
+"@polkadot/types@^0.99.0-beta.7":
+  version "0.99.0-beta.7"
+  resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.99.0-beta.7.tgz#fe8c22a39ba46b7dc384cf49342b14a7ac03cdbb"
+  integrity sha512-v70tU4jomd69eRo40nXPwlElVZbk3jWa3Nzn9HJ8C/hm7sowdOlznJ1+WErjYiQynmLJkXPRXCD8+XT2JJeGPg==
   dependencies:
     "@babel/runtime" "^7.7.5"
-    "@polkadot/metadata" "^0.99.0-beta.6"
+    "@polkadot/metadata" "^0.99.0-beta.7"
     "@polkadot/util" "^1.7.1"
     "@polkadot/util-crypto" "^1.7.1"
     "@types/memoizee" "^0.4.3"