Pull in new subscription API (tracking subs per method) (#227)

* Pull in new subscription API (tracking subs per method)

* Add apiMethods (support checks)

* Quick (not dirty) extrinsic count
This commit is contained in:
Jaco Greeff 2018-08-15 18:16:57 +02:00 committed by GitHub
parent 9c3d59284c
commit a817db5fe2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
20 changed files with 232 additions and 116 deletions

View File

@ -11,9 +11,9 @@
"license": "ISC",
"dependencies": {
"@babel/runtime": "^7.0.0-beta.51",
"@polkadot/storage": "^0.28.11",
"@polkadot/storage": "^0.28.14",
"@polkadot/ui-react": "^0.19.32",
"@polkadot/ui-react-rx": "^0.19.32",
"@polkadot/util-keyring": "^0.28.1"
"@polkadot/util-keyring": "^0.28.2"
}
}

View File

@ -11,9 +11,9 @@
"license": "ISC",
"dependencies": {
"@babel/runtime": "^7.0.0-beta.51",
"@polkadot/storage": "^0.28.11",
"@polkadot/storage": "^0.28.14",
"@polkadot/ui-react": "^0.19.32",
"@polkadot/ui-react-rx": "^0.19.32",
"@polkadot/util-keyring": "^0.28.1"
"@polkadot/util-keyring": "^0.28.2"
}
}

View File

@ -16,8 +16,8 @@
},
"dependencies": {
"@babel/runtime": "^7.0.0-beta.51",
"@polkadot/primitives": "^0.28.11",
"@polkadot/primitives": "^0.28.14",
"@polkadot/ui-app": "^0.19.32",
"@polkadot/util-crypto": "^0.28.1"
"@polkadot/util-crypto": "^0.28.2"
}
}

View File

@ -0,0 +1,48 @@
// Copyright 2017-2018 @polkadot/app-explorer authors & contributors
// This software may be modified and distributed under the terms
// of the ISC license. See the LICENSE file for details.
import { I18nProps } from '@polkadot/ui-app/types';
import React from 'react';
import withMulti from '@polkadot/ui-react-rx/with/multi';
import withObservable from '@polkadot/ui-react-rx/with/observable';
import translate from '../translate';
type Props = I18nProps & {
hash: Uint8Array,
chainGetBlock: any
};
class Extrinsics extends React.PureComponent<Props> {
render () {
const { chainGetBlock, t } = this.props;
if (!chainGetBlock || !chainGetBlock.extrinsics) {
return null;
}
return (
<tr>
<td className='type'>extrinsics</td>
<td className='hash'>
{t('extrinsics.count', {
defaultValue: '{{count}} in block',
replace: {
count: chainGetBlock.extrinsics.length
}
})}
</td>
</tr>
);
}
}
export default withMulti(
Extrinsics,
translate,
withObservable('chainGetBlock', { paramProp: 'hash' })
);

View File

@ -4,6 +4,7 @@
import { Header } from '@polkadot/primitives/header';
import { I18nProps } from '@polkadot/ui-app/types';
import { ApiProps } from '@polkadot/ui-react-rx/types';
import './BlockHeader.css';
@ -12,17 +13,20 @@ import React from 'react';
import headerHash from '@polkadot/primitives/codec/header/hash';
import classes from '@polkadot/ui-app/util/classes';
import numberFormat from '@polkadot/ui-react-rx/util/numberFormat';
import withApi from '@polkadot/ui-react-rx/with/api';
import u8aToHex from '@polkadot/util/u8a/toHex';
import translate from '../translate';
import Extrinsics from './Extrinsics';
type Props = I18nProps & {
type Props = ApiProps & I18nProps & {
value?: Header
};
class BlockHeader extends React.PureComponent<Props> {
render () {
const { className, value, style } = this.props;
if (!value) {
return null;
}
@ -63,12 +67,27 @@ class BlockHeader extends React.PureComponent<Props> {
{u8aToHex(stateRoot)}
</td>
</tr>
{this.renderExtrinsics(hash)}
</tbody>
</table>
</div>
</div>
);
}
private renderExtrinsics (hash: Uint8Array) {
const { apiMethods } = this.props;
if (!apiMethods['chain_getBlock']) {
return null;
}
return (
<Extrinsics hash={hash} />
);
}
}
export default translate(BlockHeader);
export default withApi(
translate(BlockHeader)
);

View File

@ -16,7 +16,7 @@
},
"dependencies": {
"@babel/runtime": "^7.0.0-beta.51",
"@polkadot/extrinsics": "^0.28.11",
"@polkadot/extrinsics": "^0.28.14",
"@polkadot/ui-app": "^0.19.32",
"@polkadot/ui-signer": "^0.19.32",
"react-dropzone": "^4.2.9"

View File

@ -12,11 +12,11 @@
"dependencies": {
"@babel/runtime": "^7.0.0-beta.51",
"@polkadot/app-extrinsics": "^0.19.32",
"@polkadot/storage": "^0.28.11",
"@polkadot/storage": "^0.28.14",
"@polkadot/ui-app": "^0.19.32",
"@polkadot/ui-keyring": "^0.19.32",
"@polkadot/ui-react": "^0.19.32",
"@polkadot/ui-react-rx": "^0.19.32",
"@polkadot/util-keyring": "^0.28.1"
"@polkadot/util-keyring": "^0.28.2"
}
}

View File

@ -11,8 +11,8 @@
"license": "ISC",
"dependencies": {
"@babel/runtime": "^7.0.0-beta.51",
"@polkadot/extrinsics": "^0.28.11",
"@polkadot/storage": "^0.28.11",
"@polkadot/extrinsics": "^0.28.14",
"@polkadot/storage": "^0.28.14",
"@polkadot/ui-keyring": "^0.19.32",
"@polkadot/ui-react": "^0.19.32",
"@polkadot/ui-react-rx": "^0.19.32",

View File

@ -8,7 +8,7 @@ import { SectionVisibilityAll } from '../util/types';
import isUndefined from '@polkadot/util/is/undefined';
import isNull from '@polkadot/util/is/null';
function anyMethodToDisplay <T> (methods: SectionItems<T>) {
function anyMethodToDisplay <T> (methods: SectionItems<T, any>) {
if (isUndefined(methods) || isNull(methods)) {
return false;
}
@ -23,7 +23,7 @@ function anyMethodToDisplay <T> (methods: SectionItems<T>) {
.length !== 0;
}
export function shouldDisplaySection<T> (section: Section<T>, type: SectionVisibilityAll) {
export function shouldDisplaySection<T> (section: Section<T, any, any>, type: SectionVisibilityAll) {
if (isUndefined(section)) {
return false;
}

View File

@ -22,7 +22,7 @@
"color": "^3.0.0"
},
"devDependencies": {
"@polkadot/util-crypto": "^0.28.1",
"@polkadot/util-crypto": "^0.28.2",
"xmlserializer": "^0.6.1"
}
}

View File

@ -17,7 +17,7 @@
"dependencies": {
"@babel/runtime": "^7.0.0-beta.51",
"@polkadot/ui-react": "^0.19.32",
"@polkadot/util-keyring": "^0.28.1",
"@polkadot/util-keyring": "^0.28.2",
"store": "^2.0.12"
},
"peerDependencies": {

View File

@ -36,9 +36,9 @@
},
"dependencies": {
"@babel/runtime": "^7.0.0-beta.51",
"@polkadot/api-rx": "^0.28.11",
"@polkadot/extrinsics": "^0.28.11",
"@polkadot/storage": "^0.28.11",
"@polkadot/api-rx": "^0.28.14",
"@polkadot/extrinsics": "^0.28.14",
"@polkadot/storage": "^0.28.14",
"rxjs-compat": "^6.2.2"
},
"devDependencies": {

View File

@ -5,6 +5,7 @@
import { ProviderInterface } from '@polkadot/api-provider/types';
import { RxApiInterface } from '@polkadot/api-rx/types';
import { EncodingVersions } from '@polkadot/params/types';
import { Header } from '@polkadot/primitives/header';
import { ApiProps } from '../types';
import React from 'react';
@ -16,6 +17,7 @@ import defaults from '@polkadot/api-rx/defaults';
import ApiObservable from '../ApiObservable';
import ApiContext from './Context';
import isUndefined from '@polkadot/util/is/undefined';
type Props = {
api?: RxApiInterface,
@ -59,6 +61,7 @@ export default class Api extends React.PureComponent<Props, State> {
this.state = {
api,
apiConnected: false,
apiMethods: {},
apiObservable: new ApiObservable(api),
apiSupport: 'poc-1',
setApi,
@ -76,22 +79,19 @@ export default class Api extends React.PureComponent<Props, State> {
this.unsubscribe();
}
updateSubscriptions () {
private updateSubscriptions () {
const { api } = this.state;
this.unsubscribe();
this.setState({
subscriptions:
[
() => api.isConnected().subscribe((isConnected?: boolean) => {
this.setState({ apiConnected: !!isConnected });
}),
() => api.system.chain().subscribe((chain?: string) => {
this.setState({ apiSupport: apiSupport(chain) });
})
this.subscribeIsConnected,
this.subscribeChain,
this.subscribeMethodCheck
].map((fn: Function) => {
try {
return fn();
return fn(api);
} catch (error) {
console.error(error);
return null;
@ -100,7 +100,49 @@ export default class Api extends React.PureComponent<Props, State> {
});
}
unsubscribe (): void {
private subscribeIsConnected = (api: RxApiInterface): void => {
api
.isConnected()
.subscribe((isConnected?: boolean) => {
this.setState({ apiConnected: !!isConnected });
});
}
private subscribeChain = (api: RxApiInterface): void => {
api.system
.chain()
.subscribe((chain?: string) => {
this.setState({ apiSupport: apiSupport(chain) });
});
}
private subscribeMethodCheck = (api: RxApiInterface): void => {
api.chain
.newHead()
.subscribe(async (header?: Header) => {
if (!header || !isUndefined(this.state.apiMethods['chain_getBlock'])) {
return;
}
let isSupported = false;
try {
await api.chain.getBlock(header.parentHash).toPromise();
isSupported = true;
} catch (error) {
// console.error('chain_getBlock not supported, ignoring');
}
this.setState(({ apiMethods }: State) => ({
apiMethods: {
...apiMethods,
'chain_getBlock': isSupported
}
}));
});
}
private unsubscribe (): void {
const { subscriptions } = this.state;
subscriptions.forEach((subscription) => {
@ -115,12 +157,13 @@ export default class Api extends React.PureComponent<Props, State> {
}
render () {
const { api, apiConnected, apiObservable, apiSupport, setApi, setApiProvider, setApiWsUrl } = this.state;
const { api, apiConnected, apiMethods, apiObservable, apiSupport, setApi, setApiProvider, setApiWsUrl } = this.state;
return (
<ApiContext.Provider value={{
api,
apiConnected,
apiMethods,
apiObservable,
apiSupport,
setApi,

View File

@ -66,7 +66,7 @@ export default class ObservableApi implements ObservableApiInterface {
rawStorageMulti = <T> (...keys: Array<KeyWithParams>): Observable<T> => {
return this.api.state
.subscribeStorage(keys)
.storage(keys)
.pipe(
map((result?: any) =>
isUndefined(result)
@ -88,8 +88,12 @@ export default class ObservableApi implements ObservableApiInterface {
);
}
chainGetBlock = (hash: Uint8Array): Observable<any> => {
return this.api.chain.getBlock(hash);
}
chainNewHead = (): Observable<Header | undefined> => {
return this.api.chain.subscribeNewHead().pipe(
return this.api.chain.newHead().pipe(
defaultIfEmpty()
);
}

View File

@ -54,6 +54,7 @@ export interface ObservableApiInterface {
rawStorage: <T> (key: SectionItem<Storages>, ...params: Array<any>) => Observable<T>,
rawStorageMulti: <T> (...keys: Array<[SectionItem<Storages>, any]>) => Observable<T>,
bestNumber: () => Observable<BN | undefined>,
chainGetBlock: (hash: Uint8Array) => Observable<any>,
chainNewHead: () => Observable<Header | undefined>,
democracyLaunchPeriod: () => Observable<BN | undefined>,
democracyNextTally: () => Observable<BN | undefined>,

View File

@ -20,6 +20,9 @@ export type BareProps = {
export type ApiProps = {
api: RxApiInterface,
apiConnected: boolean,
apiMethods: {
[index: string]: boolean
},
apiObservable: ObservableApiInterface,
apiSupport: EncodingVersions,
setApi: (api: RxApiInterface) => void,

View File

@ -20,7 +20,7 @@
"polkadot-identicon": "^1.0.2"
},
"devDependencies": {
"@polkadot/util-keyring": "^0.28.1",
"@polkadot/util-keyring": "^0.28.2",
"babel-loader": "^8.0.0-beta.2",
"css-loader": "0.28.9",
"empty": "^0.10.1",

View File

@ -16,7 +16,7 @@
},
"dependencies": {
"@babel/runtime": "^7.0.0-beta.51",
"@polkadot/extrinsics": "^0.28.11",
"@polkadot/extrinsics": "^0.28.14",
"@polkadot/ui-app": "^0.19.32",
"@polkadot/ui-keyring": "^0.19.32"
},

View File

@ -6,7 +6,6 @@ import { ApiProps } from '@polkadot/ui-react-rx/types';
import { I18nProps, BareProps } from '@polkadot/ui-app/types';
import { QueueTx, QueueTx$MessageSetStatus } from './types';
import BN from 'bn.js';
import React from 'react';
import Button from '@polkadot/ui-app/Button';
import Modal from '@polkadot/ui-app/Modal';
@ -45,7 +44,6 @@ class Signer extends React.PureComponent<Props, State> {
super(props);
this.state = {
// apiSupport: 'poc-1',
password: '',
unlockError: null
};

160
yarn.lock
View File

@ -765,50 +765,50 @@
version "1.1.0"
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz#50c1e2260ac0ed9439a181de3725a0168d59c48a"
"@polkadot/api-format@^0.28.11":
version "0.28.11"
resolved "https://registry.yarnpkg.com/@polkadot/api-format/-/api-format-0.28.11.tgz#7497f36d764016cd715795b6a62de62424d78c5b"
"@polkadot/api-format@^0.28.14":
version "0.28.14"
resolved "https://registry.yarnpkg.com/@polkadot/api-format/-/api-format-0.28.14.tgz#10a670bee5e6e41568289aa69cddb51ecf1505dd"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/jsonrpc" "^0.28.11"
"@polkadot/primitives" "^0.28.11"
"@polkadot/util" "^0.28.1"
"@polkadot/util-keyring" "^0.28.1"
"@polkadot/jsonrpc" "^0.28.14"
"@polkadot/primitives" "^0.28.14"
"@polkadot/util" "^0.28.2"
"@polkadot/util-keyring" "^0.28.2"
"@polkadot/api-provider@^0.28.11":
version "0.28.11"
resolved "https://registry.yarnpkg.com/@polkadot/api-provider/-/api-provider-0.28.11.tgz#3d2ccbb039d84130e828e8a9883d4e5cdee10d99"
"@polkadot/api-provider@^0.28.14":
version "0.28.14"
resolved "https://registry.yarnpkg.com/@polkadot/api-provider/-/api-provider-0.28.14.tgz#d629be0bfbd53b792d3f2c80cfb510842946b79e"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/storage" "^0.28.11"
"@polkadot/util" "^0.28.1"
"@polkadot/util-crypto" "^0.28.1"
"@polkadot/util-keyring" "^0.28.1"
"@polkadot/storage" "^0.28.14"
"@polkadot/util" "^0.28.2"
"@polkadot/util-crypto" "^0.28.2"
"@polkadot/util-keyring" "^0.28.2"
"@types/nock" "^9.1.3"
eventemitter3 "^2.0.3"
isomorphic-fetch "^2.2.1"
websocket "^1.0.25"
"@polkadot/api-rx@^0.28.11":
version "0.28.11"
resolved "https://registry.yarnpkg.com/@polkadot/api-rx/-/api-rx-0.28.11.tgz#5f0a057ea7b160b3242f12f153bff581278c9271"
"@polkadot/api-rx@^0.28.14":
version "0.28.14"
resolved "https://registry.yarnpkg.com/@polkadot/api-rx/-/api-rx-0.28.14.tgz#e399dbeabdbe200adf1cc80b5e2ea5890a464248"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/api" "^0.28.11"
"@polkadot/api-provider" "^0.28.11"
"@polkadot/api" "^0.28.14"
"@polkadot/api-provider" "^0.28.14"
"@types/rx" "^4.1.1"
rxjs "^6.2.2"
"@polkadot/api@^0.28.11":
version "0.28.11"
resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.28.11.tgz#46b2a7b395dabdc9cb47a769aec3c419a7c2e405"
"@polkadot/api@^0.28.14":
version "0.28.14"
resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.28.14.tgz#10bd94158a6150c870a7ff31d329e36bbb3c58de"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/api-format" "^0.28.11"
"@polkadot/api-provider" "^0.28.11"
"@polkadot/jsonrpc" "^0.28.11"
"@polkadot/params" "^0.28.11"
"@polkadot/util" "^0.28.1"
"@polkadot/api-format" "^0.28.14"
"@polkadot/api-provider" "^0.28.14"
"@polkadot/jsonrpc" "^0.28.14"
"@polkadot/params" "^0.28.14"
"@polkadot/util" "^0.28.2"
"@polkadot/dev-react@^0.20.12":
version "0.20.12"
@ -877,96 +877,96 @@
typedoc "^0.11.1"
typescript "^2.9.2"
"@polkadot/extrinsics@^0.28.11":
version "0.28.11"
resolved "https://registry.yarnpkg.com/@polkadot/extrinsics/-/extrinsics-0.28.11.tgz#834c04b58dbdeee9750bdca7a2cc125c2411bb2e"
"@polkadot/extrinsics@^0.28.14":
version "0.28.14"
resolved "https://registry.yarnpkg.com/@polkadot/extrinsics/-/extrinsics-0.28.14.tgz#dd6dd776c4ed93437963c87df5b54c7f8f60328d"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/params" "^0.28.11"
"@polkadot/primitives" "^0.28.11"
"@polkadot/util" "^0.28.1"
"@polkadot/params" "^0.28.14"
"@polkadot/primitives" "^0.28.14"
"@polkadot/util" "^0.28.2"
"@polkadot/jsonrpc@^0.28.11":
version "0.28.11"
resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.28.11.tgz#0687b93077be6ed3dc16f1d8937918ed9647b5e8"
"@polkadot/jsonrpc@^0.28.14":
version "0.28.14"
resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.28.14.tgz#89555f781c1aa3bc964c503cd2d58c5def3af3fe"
dependencies:
"@polkadot/params" "^0.28.11"
"@polkadot/params" "^0.28.14"
babel-runtime "^6.26.0"
"@polkadot/params@^0.28.11":
version "0.28.11"
resolved "https://registry.yarnpkg.com/@polkadot/params/-/params-0.28.11.tgz#9dea2efa3c6b4725547fd6dd8b3c2312d1d226d7"
"@polkadot/params@^0.28.14":
version "0.28.14"
resolved "https://registry.yarnpkg.com/@polkadot/params/-/params-0.28.14.tgz#ad2bd45c53aa78190e595b6cbd1bdf18ecc996ef"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/extrinsics" "^0.28.11"
"@polkadot/params" "^0.28.11"
"@polkadot/primitives" "^0.28.11"
"@polkadot/util" "^0.28.1"
"@polkadot/util-keyring" "^0.28.1"
"@polkadot/extrinsics" "^0.28.14"
"@polkadot/params" "^0.28.14"
"@polkadot/primitives" "^0.28.14"
"@polkadot/util" "^0.28.2"
"@polkadot/util-keyring" "^0.28.2"
"@polkadot/primitives@^0.28.11":
version "0.28.11"
resolved "https://registry.yarnpkg.com/@polkadot/primitives/-/primitives-0.28.11.tgz#4c32f181a779f002d9def60cecf46237034ef270"
"@polkadot/primitives@^0.28.14":
version "0.28.14"
resolved "https://registry.yarnpkg.com/@polkadot/primitives/-/primitives-0.28.14.tgz#cb6595d938eb4f91e351ca4fc07e5220a0739ad5"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/trie-hash" "^0.28.1"
"@polkadot/util" "^0.28.1"
"@polkadot/trie-hash" "^0.28.2"
"@polkadot/util" "^0.28.2"
"@polkadot/storage@^0.28.11":
version "0.28.11"
resolved "https://registry.yarnpkg.com/@polkadot/storage/-/storage-0.28.11.tgz#c388142dcc409fb151512f2c34b6d191656c9bd3"
"@polkadot/storage@^0.28.14":
version "0.28.14"
resolved "https://registry.yarnpkg.com/@polkadot/storage/-/storage-0.28.14.tgz#f8b16e8a4c15615d8a3a7ea88cc10a739a7a1230"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/params" "^0.28.11"
"@polkadot/primitives" "^0.28.11"
"@polkadot/util" "^0.28.1"
"@polkadot/util-crypto" "^0.28.1"
"@polkadot/util-keyring" "^0.28.1"
"@polkadot/params" "^0.28.14"
"@polkadot/primitives" "^0.28.14"
"@polkadot/util" "^0.28.2"
"@polkadot/util-crypto" "^0.28.2"
"@polkadot/util-keyring" "^0.28.2"
"@polkadot/trie-hash@^0.28.1":
version "0.28.1"
resolved "https://registry.yarnpkg.com/@polkadot/trie-hash/-/trie-hash-0.28.1.tgz#8e220bd2280813818d6d90e4d7d826edfb0d407d"
"@polkadot/trie-hash@^0.28.2":
version "0.28.2"
resolved "https://registry.yarnpkg.com/@polkadot/trie-hash/-/trie-hash-0.28.2.tgz#89eb0bca267a5a576bf1629a1d9b173f4ab02c50"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/util" "^0.28.1"
"@polkadot/util-crypto" "^0.28.1"
"@polkadot/util-rlp" "^0.28.1"
"@polkadot/util" "^0.28.2"
"@polkadot/util-crypto" "^0.28.2"
"@polkadot/util-rlp" "^0.28.2"
"@polkadot/ts@^0.1.10":
version "0.1.10"
resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.1.10.tgz#784d460cf4b2e9b38bb1c77f9366dd01425f220d"
"@polkadot/util-crypto@^0.28.1":
version "0.28.1"
resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-0.28.1.tgz#07bef16d5b68889f96ff9b9c034b92e22bd6f63d"
"@polkadot/util-crypto@^0.28.2":
version "0.28.2"
resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-0.28.2.tgz#17bf06af6e3e57c9c6541ee4a166011dfda18434"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/util" "^0.28.1"
"@polkadot/util" "^0.28.2"
blakejs "^1.1.0"
js-sha3 "^0.7.0"
tweetnacl "^1.0.0"
xxhashjs "^0.2.2"
"@polkadot/util-keyring@^0.28.1":
version "0.28.1"
resolved "https://registry.yarnpkg.com/@polkadot/util-keyring/-/util-keyring-0.28.1.tgz#68fac78bc7154226d7e6d06acfcfaebc6232814c"
"@polkadot/util-keyring@^0.28.2":
version "0.28.2"
resolved "https://registry.yarnpkg.com/@polkadot/util-keyring/-/util-keyring-0.28.2.tgz#a391e785a0710518be349f0ca2d688c89879a69d"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/util" "^0.28.1"
"@polkadot/util-crypto" "^0.28.1"
"@polkadot/util" "^0.28.2"
"@polkadot/util-crypto" "^0.28.2"
"@types/bs58" "^3.0.30"
bs58 "^4.0.1"
"@polkadot/util-rlp@^0.28.1":
version "0.28.1"
resolved "https://registry.yarnpkg.com/@polkadot/util-rlp/-/util-rlp-0.28.1.tgz#101cecbb30223fc3b66bd3448371eb5404d46ac6"
"@polkadot/util-rlp@^0.28.2":
version "0.28.2"
resolved "https://registry.yarnpkg.com/@polkadot/util-rlp/-/util-rlp-0.28.2.tgz#21c326cdca437b1b31a44bbbf26bf9adcac4fb7f"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@polkadot/util" "^0.28.1"
"@polkadot/util" "^0.28.2"
"@polkadot/util@^0.28.1":
version "0.28.1"
resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-0.28.1.tgz#7c566cc46741c422d93f535fbd27db4e6eff5f80"
"@polkadot/util@^0.28.2":
version "0.28.2"
resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-0.28.2.tgz#59fb5a0f3f34d73520a5e0ac54f55ccfde94a8b5"
dependencies:
"@babel/runtime" "^7.0.0-beta.51"
"@types/bn.js" "^4.11.1"