Submit extrinsics via signAndSend (#585)

* WIP first bits...

* Coversion should be ok, testing remains

* Tie up loose ends

* Bump deps
This commit is contained in:
Jaco Greeff 2019-01-11 14:54:18 +01:00 committed by GitHub
parent f2aff50736
commit 8e2f80d176
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 172 additions and 261 deletions

1
.gitignore vendored
View File

@ -7,6 +7,7 @@ tmp/
.env.development.local
.env.test.local
.env.production.local
.npmrc
package-lock.json
npm-debug.log*
yarn-debug.log*

View File

@ -4,7 +4,7 @@ node_js:
env:
- GH_PAGES_SRC="packages/apps/build"
before_install:
- curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 1.10.1
- curl -o- -L https://yarnpkg.com/install.sh | bash
- export PATH=$HOME/.yarn/bin:$PATH
cache:
yarn: true

View File

@ -27,8 +27,8 @@
},
"devDependencies": {
"@babel/core": "^7.2.2",
"@polkadot/dev-react": "^0.23.7",
"@polkadot/ts": "^0.1.47",
"@polkadot/dev-react": "^0.23.9",
"@polkadot/ts": "^0.1.49",
"autoprefixer": "^9.4.4",
"empty": "^0.10.1",
"gh-pages": "^2.0.1",

View File

@ -9,15 +9,14 @@ import { ApiProps } from '@polkadot/ui-react-rx/types';
import BN from 'bn.js';
import React from 'react';
import { Button } from '@polkadot/ui-app/index';
import { withCall, withMulti } from '@polkadot/ui-react-rx/with/index';
import { withApi, withMulti } from '@polkadot/ui-react-rx/with/index';
import translate from './translate';
type Props = ApiProps & I18nProps & {
accountId?: string,
queueExtrinsic: QueueTx$ExtrinsicAdd,
referendumId: BN,
query_system_accountNonce?: BN
referendumId: BN
};
class VotingButton extends React.PureComponent<Props> {
@ -48,7 +47,7 @@ class VotingButton extends React.PureComponent<Props> {
}
private doVote (vote: boolean) {
const { accountId, apiPromise, queueExtrinsic, referendumId, query_system_accountNonce } = this.props;
const { accountId, apiPromise, queueExtrinsic, referendumId } = this.props;
if (!accountId) {
return;
@ -56,7 +55,6 @@ class VotingButton extends React.PureComponent<Props> {
queueExtrinsic({
extrinsic: apiPromise.tx.democracy.vote(referendumId, vote ? -1 : 0),
accountNonce: query_system_accountNonce,
accountId
});
}
@ -73,5 +71,5 @@ class VotingButton extends React.PureComponent<Props> {
export default withMulti(
VotingButton,
translate,
withCall('query.system.accountNonce', { paramProp: 'accountId' })
withApi
);

View File

@ -4,7 +4,7 @@
import BN from 'bn.js';
import { I18nProps } from '@polkadot/ui-app/types';
import { QueueTx$ExtrinsicAdd, QueueTx$Unclog } from '@polkadot/ui-app/Status/types';
import { QueueTx$ExtrinsicAdd } from '@polkadot/ui-app/Status/types';
import { ApiProps } from '@polkadot/ui-react-rx/types';
import React from 'react';
@ -19,8 +19,7 @@ import Nonce from './Nonce';
import translate from './translate';
type Props = ApiProps & I18nProps & {
queueExtrinsic: QueueTx$ExtrinsicAdd,
queueUnclog: QueueTx$Unclog
queueExtrinsic: QueueTx$ExtrinsicAdd
};
type State = {
@ -117,11 +116,7 @@ class Selection extends React.PureComponent<Props, State> {
}
private onChangeNonce = (accountNonce: BN = new BN(0)): void => {
const { queueUnclog } = this.props;
this.nextState({ accountNonce } as State);
queueUnclog(accountNonce);
}
private onChangeSender = (accountId: string): void => {
@ -130,15 +125,16 @@ class Selection extends React.PureComponent<Props, State> {
private onQueue (isUnsigned: boolean): void {
const { apiPromise, queueExtrinsic } = this.props;
const { accountNonce, method, isValid, accountId } = this.state;
const { method, isValid, accountId } = this.state;
if (!isValid || !method) {
return;
}
queueExtrinsic({
accountId,
accountNonce,
accountId: isUnsigned
? undefined
: accountId,
extrinsic: new SubmittableExtrinsic(apiPromise, method),
isUnsigned
});

View File

@ -43,8 +43,8 @@ class ExtrinsicsApp extends React.PureComponent<Props> {
return (
<main className='extrinsics--App'>
<QueueConsumer>
{({ queueExtrinsic, queueUnclog }: QueueProps) => (
<Selection queueExtrinsic={queueExtrinsic} queueUnclog={queueUnclog} />
{({ queueExtrinsic }: QueueProps) => (
<Selection queueExtrinsic={queueExtrinsic} />
)}
</QueueConsumer>
</main>

View File

@ -9,7 +9,6 @@ import { QueueTx$RpcAdd } from '@polkadot/ui-app/Status/types';
import './index.css';
import BN from 'bn.js';
import React from 'react';
import rpc from '@polkadot/jsonrpc';
import { getTypeDef } from '@polkadot/types/codec';
@ -25,7 +24,6 @@ type Props = I18nProps & {
type State = {
isValid: boolean,
accountNonce: BN,
accountId?: string | null,
rpc: RpcMethod,
values: Array<RawParam>
@ -36,7 +34,6 @@ const defaultMethod = rpc.author.methods.submitExtrinsic;
class Selection extends React.PureComponent<Props, State> {
state: State = {
isValid: false,
accountNonce: new BN(0),
accountId: null,
rpc: defaultMethod,
values: []
@ -96,7 +93,7 @@ class Selection extends React.PureComponent<Props, State> {
private nextState (newState: State): void {
this.setState(
(prevState: State): State => {
const { rpc = prevState.rpc, accountNonce = prevState.accountNonce, accountId = prevState.accountId, values = prevState.values } = newState;
const { rpc = prevState.rpc, accountId = prevState.accountId, values = prevState.values } = newState;
const hasNeededKey = true; // rpc.isSigned !== true || (!!publicKey && publicKey.length === 32);
const isValid = values.reduce((isValid, value) => {
return isValid && value.isValid === true;
@ -105,7 +102,6 @@ class Selection extends React.PureComponent<Props, State> {
return {
isValid,
rpc,
accountNonce: accountNonce || new BN(0),
accountId,
values
};
@ -133,10 +129,9 @@ class Selection extends React.PureComponent<Props, State> {
private onSubmit = (): void => {
const { queueRpc } = this.props;
const { accountNonce, accountId, rpc, values } = this.state;
const { accountId, rpc, values } = this.state;
queueRpc({
accountNonce,
accountId,
rpc,
values: values.map(({ value }) =>

View File

@ -7,7 +7,6 @@ import { QueueTx$ExtrinsicAdd } from '@polkadot/ui-app/Status/types';
import { DerivedBalancesMap } from '@polkadot/ui-react-rx/derive/types';
import { ApiProps } from '@polkadot/ui-react-rx/types';
import BN from 'bn.js';
import React from 'react';
import SubmittableExtrinsic from '@polkadot/api/promise/SubmittableExtrinsic';
import { AccountId, Balance } from '@polkadot/types';
@ -19,7 +18,6 @@ import UnnominateButton from './UnnominateButton';
import translate from '../translate';
type Props = ApiProps & I18nProps & {
query_system_accountNonce?: BN,
accountId: string,
balances: DerivedBalancesMap,
balanceArray: (_address: AccountId | string) => Array<Balance> | undefined,
@ -164,11 +162,10 @@ class Account extends React.PureComponent<Props, State> {
}
private send (extrinsic: SubmittableExtrinsic) {
const { query_system_accountNonce, accountId, queueExtrinsic } = this.props;
const { accountId, queueExtrinsic } = this.props;
queueExtrinsic({
extrinsic,
accountNonce: query_system_accountNonce,
accountId
});
}
@ -214,6 +211,5 @@ export default withMulti(
Account,
translate,
withCall('query.staking.nominatorsFor', { paramProp: 'accountId' }),
withCall('query.staking.nominating', { paramProp: 'accountId' }),
withCall('query.system.accountNonce', { paramProp: 'accountId' })
withCall('query.staking.nominating', { paramProp: 'accountId' })
);

View File

@ -26,7 +26,7 @@
"@polkadot/app-transfer": "^0.22.6",
"@polkadot/app-vanitygen": "^0.22.6",
"@polkadot/ui-app": "^0.22.6",
"@polkadot/ui-assets": "^0.25.1",
"@polkadot/ui-assets": "^0.25.2",
"@polkadot/ui-signer": "^0.22.6"
}
}

View File

@ -11,16 +11,16 @@
"license": "Apache-2.0",
"dependencies": {
"@babel/runtime": "^7.2.0",
"@polkadot/extrinsics": "^0.38.9",
"@polkadot/keyring": "^0.33.30",
"@polkadot/storage": "^0.38.9",
"@polkadot/types": "^0.38.9",
"@polkadot/ui-identicon": "^0.25.1",
"@polkadot/ui-keyring": "^0.25.1",
"@polkadot/extrinsics": "^0.38.16",
"@polkadot/keyring": "^0.33.33",
"@polkadot/storage": "^0.38.16",
"@polkadot/types": "^0.38.16",
"@polkadot/ui-identicon": "^0.25.2",
"@polkadot/ui-keyring": "^0.25.2",
"@polkadot/ui-react-rx": "^0.22.6",
"@polkadot/ui-settings": "^0.25.1",
"@polkadot/util": "^0.33.30",
"@polkadot/util-crypto": "^0.33.30",
"@polkadot/ui-settings": "^0.25.2",
"@polkadot/util": "^0.33.33",
"@polkadot/util-crypto": "^0.33.33",
"@types/chart.js": "^2.7.42",
"@types/i18next": "^12.1.0",
"@types/i18next-browser-languagedetector": "^2.0.1",

View File

@ -6,7 +6,6 @@ import { RpcMethod } from '@polkadot/jsonrpc/types';
import { BareProps } from '../types';
import { ActionStatus, PartialQueueTx$Extrinsic, PartialQueueTx$Rpc, QueueProps, QueueStatus, QueueTx, QueueTx$Extrinsic, QueueTx$Rpc, QueueTx$Status } from './types';
import BN from 'bn.js';
import React from 'react';
import jsonrpc from '@polkadot/jsonrpc';
@ -47,8 +46,7 @@ export default class Queue extends React.Component<Props, State> {
queueAction: this.queueAction,
queueRpc: this.queueRpc,
queueExtrinsic: this.queueExtrinsic,
queueSetTxStatus: this.queueSetTxStatus,
queueUnclog: this.queueUnclog
queueSetTxStatus: this.queueSetTxStatus
};
}
@ -60,17 +58,6 @@ export default class Queue extends React.Component<Props, State> {
);
}
private isDuplicateNonce = (value: QueueTx$Extrinsic | QueueTx$Rpc | QueueTx): boolean => {
const { txqueue } = this.state;
return txqueue.filter((item) =>
!STATUS_COMPLETE.includes(item.status) &&
item.status !== 'completed' &&
item.accountNonce.eq(value.accountNonce) &&
item.accountId === value.accountId
).length > 0;
}
queueAction = (status: ActionStatus): number => {
const id = ++nextId;
@ -155,7 +142,7 @@ export default class Queue extends React.Component<Props, State> {
...value,
id,
rpc,
status: this.isDuplicateNonce(value) ? 'blocked' : 'queued'
status: 'queued'
}])
} as State)
);
@ -163,38 +150,19 @@ export default class Queue extends React.Component<Props, State> {
return id;
}
queueExtrinsic = ({ accountId, accountNonce, extrinsic, isUnsigned }: PartialQueueTx$Extrinsic): number => {
queueExtrinsic = ({ accountId, extrinsic, isUnsigned }: PartialQueueTx$Extrinsic): number => {
return this.queueAdd({
accountId,
accountNonce: accountNonce || new BN(0),
extrinsic,
isUnsigned
});
}
queueRpc = ({ accountId, accountNonce, rpc, values }: PartialQueueTx$Rpc): number => {
queueRpc = ({ accountId, rpc, values }: PartialQueueTx$Rpc): number => {
return this.queueAdd({
accountId,
accountNonce: accountNonce || new BN(0),
rpc,
values
});
}
queueUnclog = (accountNonce: BN): void => {
const { txqueue } = this.state;
// FIXME It works, but it's gross. It cancels all queued extrinsic with the nonincremenated
// nonce marked with a 'blocked' status and then requeues them all with the updated nonce.
// Unless users spam submit extrinsics, i can't see this being an issue, but it is still ugly.
txqueue.forEach((item) => {
if (item.status === 'blocked') {
let updatedItem = item;
this.queueSetTxStatus(item.id, 'cancelled');
updatedItem.accountNonce = accountNonce;
this.queueAdd(updatedItem);
}
});
}
}

View File

@ -2,7 +2,6 @@
// This software may be modified and distributed under the terms
// of the Apache-2.0 license. See the LICENSE file for details.
import BN from 'bn.js';
import SubmittableExtrinsic from '@polkadot/api/promise/SubmittableExtrinsic';
import { RpcMethod } from '@polkadot/jsonrpc/types';
import { AccountId, Address } from '@polkadot/types';
@ -17,8 +16,7 @@ export type ActionStatus = {
};
export type AccountInfo = {
accountId?: string | null,
accountNonce: BN
accountId?: string | null
};
export type QueueTx$Status = 'future' | 'ready' | 'finalised' | 'usurped' | 'dropped' | 'invalid' | 'broadcast' | 'cancelled' | 'completed' | 'error' | 'incomplete' | 'queued' | 'sending' | 'sent' | 'blocked';
@ -55,8 +53,7 @@ export type QueueTx$Rpc = AccountInfo & {
};
export type PartialAccountInfo = {
accountId?: string | null,
accountNonce?: BN | null
accountId?: string | null
};
export type PartialQueueTx$Extrinsic = PartialAccountInfo & {
@ -75,15 +72,12 @@ export type QueueTx$ExtrinsicAdd = (value: PartialQueueTx$Extrinsic) => number;
export type QueueTx$MessageSetStatus = (id: number, status: QueueTx$Status, result?: any, error?: Error) => void;
export type QueueTx$Unclog = (accountNonce: BN) => void;
export type QueueAction$Add = (status: ActionStatus) => number;
export type QueueProps = {
stqueue: Array<QueueStatus>,
txqueue: Array<QueueTx>,
queueAction: QueueAction$Add,
queueUnclog: QueueTx$Unclog,
queueExtrinsic: QueueTx$ExtrinsicAdd,
queueRpc: QueueTx$RpcAdd,
queueSetTxStatus: QueueTx$MessageSetStatus

View File

@ -31,8 +31,8 @@
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-react-rx#readme",
"dependencies": {
"@babel/runtime": "^7.2.0",
"@polkadot/api": "^0.38.9",
"@polkadot/types": "^0.38.9",
"@polkadot/api": "^0.38.16",
"@polkadot/types": "^0.38.16",
"rxjs-compat": "^6.3.2"
}
}

View File

@ -19,7 +19,7 @@ type Props = I18nProps & {
class Transaction extends React.PureComponent<Props> {
render () {
const { children, t, value: { accountId, accountNonce, extrinsic, isUnsigned } } = this.props;
const { children, t, value: { accountId, extrinsic, isUnsigned } } = this.props;
if (!extrinsic) {
return null;
@ -31,7 +31,7 @@ class Transaction extends React.PureComponent<Props> {
<Trans i18nKey='decoded.short-unsigned'>You are about to submit an (unsigned) inherent transaction calling <span className='code'>{section}.{method}</span></Trans>
)
: (
<Trans i18nKey='decoded.short-signed'>You are about to sign a message from <span className='code'>{accountId}</span> calling <span className='code'>{section}.{method}</span> with an index of <span className='code'>{accountNonce.toString()}</span></Trans>
<Trans i18nKey='decoded.short-signed'>You are about to sign a transaction from <span className='code'>{accountId}</span> calling <span className='code'>{section}.{method}</span> </Trans>
);
const icon = isUnsigned
? undefined

View File

@ -3,6 +3,7 @@
// of the Apache-2.0 license. See the LICENSE file for details.
import { SubmittableSendResult } from '@polkadot/api/types';
import { UnsubFunction } from '@polkadot/api/promise/types';
import { ApiProps } from '@polkadot/ui-react-rx/types';
import { I18nProps, BareProps } from '@polkadot/ui-app/types';
import { RpcMethod } from '@polkadot/jsonrpc/types';
@ -14,12 +15,12 @@ import { decodeAddress } from '@polkadot/keyring';
import { Button, Modal } from '@polkadot/ui-app/index';
import keyring from '@polkadot/ui-keyring';
import { withApi, withMulti } from '@polkadot/ui-react-rx/with/index';
import { assert } from '@polkadot/util';
import { format } from '@polkadot/util/logger';
import ExtrinsicDisplay from './Extrinsic';
import Unlock from './Unlock';
import translate from './translate';
import { UnsubFunction } from '@polkadot/api/promise/types';
type BaseProps = BareProps & {
queue: Array<QueueTx>,
@ -72,7 +73,7 @@ class Signer extends React.PureComponent<Props, State> {
};
}
async componentDidUpdate (prevProps: Props, prevState: State) {
async componentDidUpdate () {
const { currentItem } = this.state;
if (currentItem && currentItem.status === 'queued' && !currentItem.extrinsic) {
@ -212,9 +213,9 @@ class Signer extends React.PureComponent<Props, State> {
});
}
private onKeyDown = async (event: React.KeyboardEvent<Element>): Promise<any> => {
private onKeyDown = (event: React.KeyboardEvent<Element>): void => {
if (event.key === 'Enter') {
await this.onSend();
this.onSend();
}
}
@ -230,7 +231,7 @@ class Signer extends React.PureComponent<Props, State> {
queueSetTxStatus(currentItem.id, 'cancelled');
}
private onSend = async (): Promise<any> => {
private onSend = (): void => {
const { currentItem, password } = this.state;
// This should never be executed
@ -255,13 +256,13 @@ class Signer extends React.PureComponent<Props, State> {
queueSetTxStatus(id, status, result, error);
}
private sendExtrinsic = ({ accountNonce, accountId, extrinsic, id, isUnsigned }: QueueTx, password?: string) => {
if (!extrinsic || !accountId) {
return;
}
private sendExtrinsic = ({ accountId, extrinsic, id, isUnsigned }: QueueTx, password?: string) => {
assert(extrinsic, 'Expected an extrinsic to be supplied to sendExtrinsic');
if (!isUnsigned) {
const unlockError = this.unlockAccount(accountId, password);
assert(accountId, 'Expected an accountId with signed transactions');
const unlockError = this.unlockAccount(accountId as string, password);
if (unlockError) {
this.setState({ unlockError });
@ -269,21 +270,16 @@ class Signer extends React.PureComponent<Props, State> {
}
}
const { apiPromise, queueSetTxStatus } = this.props;
const submittable = extrinsic as SubmittableExtrinsic;
const { queueSetTxStatus } = this.props;
queueSetTxStatus(id, 'sending');
const pair = keyring.getPair(accountId);
if (!isUnsigned) {
console.log(`sendExtrinsic: from=${pair.address()}, nonce=${accountNonce}, blockHash=${apiPromise.genesisHash.toHex()}`);
extrinsic.sign(pair, accountNonce, apiPromise.genesisHash);
this.makeExtrinsicCall(submittable, id, submittable.signAndSend, keyring.getPair(accountId as string));
} else {
console.log(`sendInherent: from=${pair.address()}, nonce=${accountNonce}`);
this.makeExtrinsicCall(submittable, id, submittable.send);
}
this.submitExtrinsic(extrinsic, id);
}
private async submitRpc ({ method, section }: RpcMethod, values: Array<any>): Promise<QueueTx$Result> {
@ -308,30 +304,19 @@ class Signer extends React.PureComponent<Props, State> {
}
}
private submitExtrinsic (extrinsic: SubmittableExtrinsic, id: number) {
private makeExtrinsicCall (extrinsic: SubmittableExtrinsic, id: number, extrinsicCall: (...params: Array<any>) => any, ..._params: Array<any>) {
const { queueSetTxStatus } = this.props;
const unsubscribe = extrinsicCall.apply(extrinsic, [..._params, (result: SubmittableSendResult) => {
const status = result.type.toLowerCase() as QueueTx$Status;
try {
const encoded = extrinsic.toJSON();
console.log('submitAndWatchExtrinsic: updated status ::', result);
console.log('submitAndWatchExtrinsic: encode ::', encoded);
queueSetTxStatus(id, status, result);
const unsubscribe = extrinsic.send((result: SubmittableSendResult) => {
const status = result.type.toLowerCase() as QueueTx$Status;
console.log('submitAndWatchExtrinsic: updated status ::', result);
queueSetTxStatus(id, status, result);
if (status === 'finalised') {
unsubscribe();
}
}) as UnsubFunction;
} catch (error) {
console.error('submitAndWatchExtrinsic:', error);
queueSetTxStatus(id, 'error', null, error);
}
if (status === 'finalised') {
unsubscribe();
}
}]) as UnsubFunction;
}
}

238
yarn.lock
View File

@ -1369,43 +1369,43 @@
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
"@polkadot/api-derive@^0.38.9":
version "0.38.9"
resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.38.9.tgz#ee66b36b0b500950c1ed639df6dfd0ede04cb35b"
integrity sha512-ro56uw34jk2G030eR++YICeiQUv9p+l/hwGSxu+zvagD0hLq89Ya7XVYpspbAeOYaWz8JrGERjLjCe8sJ7D4dQ==
"@polkadot/api-derive@^0.38.16":
version "0.38.16"
resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.38.16.tgz#15e4b41f82c455d2dd289a5e984fc9ca6b931668"
integrity sha512-cTjUkpjSzzW94QmugqR6eoZ1Up/hScSqOdxWIiihPtx9owYqmD+0fPd0gQgf7Y4AKkrBEW/la5cW/tNNFEgRqA==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/api" "^0.38.9"
"@polkadot/types" "^0.38.9"
"@polkadot/api" "^0.38.16"
"@polkadot/types" "^0.38.16"
"@types/memoizee" "^0.4.2"
"@types/rx" "^4.1.1"
memoizee "^0.4.14"
rxjs "^6.3.3"
"@polkadot/api@^0.38.9":
version "0.38.9"
resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.38.9.tgz#56f02638ab96b9261120f3ac7f57272909e502c2"
integrity sha512-ExLmrolv1ygwAdPb8lIcxkZMeWSPr+82jwbrHPMSr4mKak4MRW7d6C9RlZSgVaaqVJqZYiWTS5Vvf8rcdBDglQ==
"@polkadot/api@^0.38.16":
version "0.38.16"
resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.38.16.tgz#00fd750801edb7ba8f97fc1b548b45c1d6d9f9c3"
integrity sha512-G53NQLGJNJFwVPQljWTiSiC1WnOXB6Uh05JcYNe3kpW3H2dE/XSwRe9q5T9WrgdGGDX3zDxfYN0dgTyrZlFYGg==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/api-derive" "^0.38.9"
"@polkadot/extrinsics" "^0.38.9"
"@polkadot/rpc-provider" "^0.38.9"
"@polkadot/rpc-rx" "^0.38.9"
"@polkadot/storage" "^0.38.9"
"@polkadot/types" "^0.38.9"
"@polkadot/api-derive" "^0.38.16"
"@polkadot/extrinsics" "^0.38.16"
"@polkadot/rpc-provider" "^0.38.16"
"@polkadot/rpc-rx" "^0.38.16"
"@polkadot/storage" "^0.38.16"
"@polkadot/types" "^0.38.16"
"@types/rx" "^4.1.1"
rxjs "^6.3.3"
"@polkadot/dev-react@^0.23.7":
version "0.23.7"
resolved "https://registry.yarnpkg.com/@polkadot/dev-react/-/dev-react-0.23.7.tgz#59c0b23e208c2fc10a007994ff3ca4b805f9673f"
integrity sha512-8fUdnv7vwPaTZSMKYZ9pYDAZl5g6mnl+GcT81EpMtBfVhPi2ZimzhMqQwQQ+lS4gMs6Jcmnk0Ajfg87EIFzdBA==
"@polkadot/dev-react@^0.23.9":
version "0.23.9"
resolved "https://registry.yarnpkg.com/@polkadot/dev-react/-/dev-react-0.23.9.tgz#73a0ecaf4a7c88fc0e9402d9121f97769c9b87f1"
integrity sha512-ZW/+fC7ItE3SPGCdY/vsZPg8Mgyk7gmTtlxzQW0DOx76niDZuauTHEmj0MebKBVHw9FboQlrCWEUcXa52tUmww==
dependencies:
"@babel/core" "^7.2.2"
"@babel/plugin-syntax-dynamic-import" "^7.2.0"
"@babel/preset-react" "^7.0.0"
"@polkadot/dev" "^0.23.7"
"@polkadot/dev" "^0.23.9"
"@types/react" "^16.7.18"
"@types/react-dom" "^16.0.11"
"@types/styled-components" "^4.1.4"
@ -1433,10 +1433,10 @@
webpack-serve "^2.0.3"
worker-loader "^2.0.0"
"@polkadot/dev@^0.23.7":
version "0.23.7"
resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.23.7.tgz#4a32050214fe13e7fdaa5aa1cc9fd0ccd310211b"
integrity sha512-6US2N28NBSfUt67zEZn+5CJ6DCFcklGqwHEykN6Xr+S9HsX+en9oK4NTzfgewjNP9FlKLjDjl7EwIJgIOERmwA==
"@polkadot/dev@^0.23.9":
version "0.23.9"
resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.23.9.tgz#dc40dcfccd987b9160d6ad9be6b303dfca407d72"
integrity sha512-DE5uhjLnv8fjhuztcy6riHcpnSW029ObtQuDchjQOOo2KU+YNxDAM0yNXIymdALuu7ZC75bjKembZl1AGF+oSw==
dependencies:
"@babel/cli" "^7.2.3"
"@babel/core" "^7.2.2"
@ -1463,7 +1463,6 @@
gitbook-plugin-sunlight-highlighter "^0.4.3"
jest "^23.6.0"
lerna "^3.8.4"
makeshift "^1.1.0"
mkdirp "^0.5.1"
rimraf "^2.6.3"
tslint "^5.12.0"
@ -1473,141 +1472,141 @@
typedoc-plugin-no-inherit "^1.1.1"
typescript "^3.2.2"
"@polkadot/extrinsics@^0.38.9":
version "0.38.9"
resolved "https://registry.yarnpkg.com/@polkadot/extrinsics/-/extrinsics-0.38.9.tgz#5ae8aed15964dfa6c2094d79c020074b97f061a7"
integrity sha512-bETKVEyQjoBTuVWrEHgy77bs/pSf99/7VsWXZ1DuSJYrRjXnlQIVgslWpMx8rxJZiNatODNI8+g0E9Toz7+zTg==
"@polkadot/extrinsics@^0.38.16":
version "0.38.16"
resolved "https://registry.yarnpkg.com/@polkadot/extrinsics/-/extrinsics-0.38.16.tgz#49ce7e47529b912b17843e30717efb13f5f9f667"
integrity sha512-3Kcyoq+Dh/f5jIlkr6DIug3f9Ythf+p7sSp7ktrCD55ZYfvYzdXOCb5SIeVpXDhHlpDYXT/Aj/QLynCFD+I3Kw==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/types" "^0.38.9"
"@polkadot/util" "^0.33.30"
"@polkadot/types" "^0.38.16"
"@polkadot/util" "^0.33.33"
"@polkadot/jsonrpc@^0.38.9":
version "0.38.9"
resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.38.9.tgz#370f3087e1bf17bb7ac4b5f77635cd134f5a8f9c"
integrity sha512-uXgNrl+JNe2glbwg2tvkT1mzej81kpVY+oPHuNPbBrUpg6Rpq3eAvRvN73PiiJs+OHI0B+Out54Jq8fQj0w9gw==
"@polkadot/jsonrpc@^0.38.16":
version "0.38.16"
resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.38.16.tgz#456d8ce11f1dedb108d2debe974187c92a73bb13"
integrity sha512-G87JwRnp89AwTXiaQWeVefU8ykzw7y5/Az7FLKW3BmgH6eFbr8uxYD1LaSl1W+VArwCve5ibFvBIzfcqStbtIA==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/keyring@^0.33.30":
version "0.33.30"
resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-0.33.30.tgz#54cb6baec7db16366989381601cd58f2b5f9b851"
integrity sha512-qE6X9Nhp0reXBSPz5PGPlT78KchJXdfUuAE/yJIOyM2s5WGOWCHCMzQEJmL7S9F70w76EFxazczJCmNe+ZhPGA==
"@polkadot/keyring@^0.33.33":
version "0.33.33"
resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-0.33.33.tgz#fe34934b44e900ca4f635382fbb47d497bd00117"
integrity sha512-/vlPmOsRobWu8QHKXfLb1zdUHeKzqVbnL+qbyT6OQyOfAq7rCpZYgryhXuDq4QR14WMmy3Xhcp0/62QWGWAf4g==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/util" "^0.33.30"
"@polkadot/util-crypto" "^0.33.30"
"@polkadot/util" "^0.33.33"
"@polkadot/util-crypto" "^0.33.33"
"@types/bs58" "^4.0.0"
bs58 "^4.0.1"
"@polkadot/rpc-core@^0.38.9":
version "0.38.9"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.38.9.tgz#f6948eae53a13eed5c576195ce7a707e28bf3e3c"
integrity sha512-urd08d3aZZDORM4u3lBY+huSBfQ05FEH0tdkZMciEajL5rJbF8O9UeaK5uqUIxe8Kjb5ZO+XBvdxS5EgKVVIIg==
"@polkadot/rpc-core@^0.38.16":
version "0.38.16"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.38.16.tgz#332bd9134502c075a4a2dee478d818bf4bd17ec0"
integrity sha512-H/H6fnXj/tkArf8hfBFpvfI+EGw0uedKkwLca3tRSJ/4680oTD9JNKqWkp3BMfCjombsLkuw6mAqnOyBDO1Z9w==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/jsonrpc" "^0.38.9"
"@polkadot/rpc-provider" "^0.38.9"
"@polkadot/types" "^0.38.9"
"@polkadot/util" "^0.33.30"
"@polkadot/jsonrpc" "^0.38.16"
"@polkadot/rpc-provider" "^0.38.16"
"@polkadot/types" "^0.38.16"
"@polkadot/util" "^0.33.33"
"@polkadot/rpc-provider@^0.38.9":
version "0.38.9"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.38.9.tgz#81807fab2d648df850449d63b6e4aa3da88d6c86"
integrity sha512-BdFYa0BIC1iaVGolevfobVjwVQhWCFXBE616xlaSP3TZgYaQHpGb/PNFUsDLaqSBYv5P3GADOWEiAvx6T95EqQ==
"@polkadot/rpc-provider@^0.38.16":
version "0.38.16"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.38.16.tgz#9216e5629e06cf51b2f736113b9a1c178d0df1a8"
integrity sha512-oqh2p0FeroymdcJbPDYlNpGrZpahrcZN04EZYixnL0JrluD6nmz51yA0/k59YdHwBNZRAcF9eOGJfuQhEtTL0g==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/keyring" "^0.33.30"
"@polkadot/storage" "^0.38.9"
"@polkadot/util" "^0.33.30"
"@polkadot/util-crypto" "^0.33.30"
"@polkadot/keyring" "^0.33.33"
"@polkadot/storage" "^0.38.16"
"@polkadot/util" "^0.33.33"
"@polkadot/util-crypto" "^0.33.33"
"@types/nock" "^9.3.0"
eventemitter3 "^3.1.0"
isomorphic-fetch "^2.2.1"
websocket "^1.0.28"
"@polkadot/rpc-rx@^0.38.9":
version "0.38.9"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-rx/-/rpc-rx-0.38.9.tgz#a595165cd747ec826db8e0f071f333480496db6f"
integrity sha512-2KhoJkUk5VY6LE/i390TKQvb4cmkwUgeosUfSoUbi2En4+hqKTIosJBlIVA60s1s1Y6HYIF1P2HETKLr0DznCw==
"@polkadot/rpc-rx@^0.38.16":
version "0.38.16"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-rx/-/rpc-rx-0.38.16.tgz#7485afab25429095716e579cb456a7c25601c947"
integrity sha512-i/3E52TGYGO3sQWP8QRTEbUmrpTdMkV/+U+jUUvs0DyjbpnI1hw6roTI0lUdJoi3dPP8p29WctSGP6kXaIlkHQ==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/rpc-core" "^0.38.9"
"@polkadot/rpc-provider" "^0.38.9"
"@polkadot/rpc-core" "^0.38.16"
"@polkadot/rpc-provider" "^0.38.16"
"@types/rx" "^4.1.1"
rxjs "^6.3.3"
"@polkadot/storage@^0.38.9":
version "0.38.9"
resolved "https://registry.yarnpkg.com/@polkadot/storage/-/storage-0.38.9.tgz#d36b663d7bc3d21d5b010d092117e23ba92e2068"
integrity sha512-Ps20FwyVDttQrjqyZq08roydL47e1Pa8zjqrZIFSLZd1i8ns5AFvb+I/XDl7xKu+JZPLK8yUZtZYXlI1/gCdsw==
"@polkadot/storage@^0.38.16":
version "0.38.16"
resolved "https://registry.yarnpkg.com/@polkadot/storage/-/storage-0.38.16.tgz#dc53c7a6f35a1623be4f30575974b5e6c1158d92"
integrity sha512-DZT5++RvKu4C57s84mx55kA85R6EKZf4GBiaW06VeHTmq9q6cyoGCaB7tdLxlLmIndz779rFT25LeXN86Bxgpw==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/keyring" "^0.33.30"
"@polkadot/types" "^0.38.9"
"@polkadot/util" "^0.33.30"
"@polkadot/util-crypto" "^0.33.30"
"@polkadot/keyring" "^0.33.33"
"@polkadot/types" "^0.38.16"
"@polkadot/util" "^0.33.33"
"@polkadot/util-crypto" "^0.33.33"
"@polkadot/ts@^0.1.47":
version "0.1.47"
resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.1.47.tgz#89a7e44ce3274feb446e8102f16499ec6a5b5720"
integrity sha512-UE8Wru0BOk+h0RiDAxo1P5dpk9mZyK1VIJiKKM2vfzQqMCPfKnSuQXXXkNzJ/4dqjRJ6ilYwFkzXQwemJWF0+w==
"@polkadot/ts@^0.1.49":
version "0.1.49"
resolved "https://registry.yarnpkg.com/@polkadot/ts/-/ts-0.1.49.tgz#9f4cf54540ca10bec64910bb3f5e094db609b63d"
integrity sha512-0qtOAmT5DJcDjgnfx95ByljJYjMqgOA72SWsBfZq9myzzCrAvoVXMn7lzfKvpPgaZooTJ+vpp/YqXgx3507LKQ==
"@polkadot/types@^0.38.9":
version "0.38.9"
resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.38.9.tgz#44606b6f2a3e46e8169fe2bc0a794d1a4fa0dc45"
integrity sha512-vBXEeGuShIzLQ9W4EC9s+YREDnABaOlrajbUaEO37U82WcmOF04MvEPqTbRbyxfLltF3wlEEl9OFPpgem4o0iA==
"@polkadot/types@^0.38.16":
version "0.38.16"
resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.38.16.tgz#06d898c3dea86601e4c53d4e7b46c6ecf2194376"
integrity sha512-totQOU3ZrxTGH9ZoDM168TD2aEk+vCrrw7TeBu5eeAhcCEPfksXAc3awAa0X09hWB9X+PfbryPOsrp3wHXuWJw==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/keyring" "^0.33.30"
"@polkadot/util" "^0.33.30"
"@polkadot/keyring" "^0.33.33"
"@polkadot/util" "^0.33.33"
core-js "^2.6.1"
"@polkadot/ui-assets@^0.25.1":
version "0.25.1"
resolved "https://registry.yarnpkg.com/@polkadot/ui-assets/-/ui-assets-0.25.1.tgz#fc00d299d2b2f48dc5d6d085638ebe1a266a614d"
integrity sha512-jHqITQ5rye5bjS1ii/ldiB2OIrsOhzEvLYi0MOatgmUXIXgEiWdpRhiqlLKQsmA5bPs4MIsZiLViDjQb8B+r4Q==
"@polkadot/ui-assets@^0.25.2":
version "0.25.2"
resolved "https://registry.yarnpkg.com/@polkadot/ui-assets/-/ui-assets-0.25.2.tgz#62f5ec5320f4e86dff151bd6f6de8c5745d1ff46"
integrity sha512-hgkd9R09nmDbgRQVshozdL9mGZjRSHUHIZqlZ052B7kTgoiGEm37A3ig8E0kUja49+tDYV0Emz2ojd1k6mLofg==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/ui-identicon@^0.25.1":
version "0.25.1"
resolved "https://registry.yarnpkg.com/@polkadot/ui-identicon/-/ui-identicon-0.25.1.tgz#bdf38b192a3b9c92846cce2b4ca683e9371043f4"
integrity sha512-cGH6fa0C2XNk88NY2/h772bE6NYbuBa2MOQvuywZ6VT9sqaMTMjUYuNy5uA+QFkNJXOd34sg0jHmVt4Qb4xgvQ==
"@polkadot/ui-identicon@^0.25.2":
version "0.25.2"
resolved "https://registry.yarnpkg.com/@polkadot/ui-identicon/-/ui-identicon-0.25.2.tgz#dc5173e0fc4ac2788dbb85eaecdeb84759df6f42"
integrity sha512-Pv0smjtKkqasipUEHypXGnsRvDYNFjIGydu7ZEmz4O6YUOMM9A9l37HcBWAB8bTro2uEAnL55zupOnOo0CMCkw==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/ui-settings" "^0.25.1"
"@polkadot/ui-settings" "^0.25.2"
"@types/color" "^3.0.0"
"@types/react-copy-to-clipboard" "^4.2.6"
color "^3.0.0"
react-copy-to-clipboard "^5.0.1"
"@polkadot/ui-keyring@^0.25.1":
version "0.25.1"
resolved "https://registry.yarnpkg.com/@polkadot/ui-keyring/-/ui-keyring-0.25.1.tgz#cc687bbdb9660b6a045511200b29a61c68da0aa1"
integrity sha512-609t8YvEQS9hslcFUk/efP2eRk16HsmOksZ3MkH/P/Ibu9ZXlk/38ys6L0Z5c0iiXMUgL5DaJ1udnnU01Xhkrw==
"@polkadot/ui-keyring@^0.25.2":
version "0.25.2"
resolved "https://registry.yarnpkg.com/@polkadot/ui-keyring/-/ui-keyring-0.25.2.tgz#c22468432ba0c9721280496ae11a01336f0b08ba"
integrity sha512-eoYHza4JSo7LEpvOh5KZ2mHBB4aPtQCE7WyJ5w0/5TZIBvA072/pWBeEvTRD1mAZP1PXDEQnPAdOjTZVn5lOqw==
dependencies:
"@babel/runtime" "^7.2.0"
"@types/store" "^2.0.1"
rxjs "^6.3.3"
store "^2.0.12"
"@polkadot/ui-settings@^0.25.1":
version "0.25.1"
resolved "https://registry.yarnpkg.com/@polkadot/ui-settings/-/ui-settings-0.25.1.tgz#32c346eb2d7c708142633b7ca7aed01aa5601d38"
integrity sha512-ADl+YoZEaXC/v6Gk8F5KuUKYvCRMtvAWSmayyc7KUoMuLtr5MopvEPWlpukUatX+16zfT/RZSgbSybCzfLgECA==
"@polkadot/ui-settings@^0.25.2":
version "0.25.2"
resolved "https://registry.yarnpkg.com/@polkadot/ui-settings/-/ui-settings-0.25.2.tgz#4526585a211713f275b038db1af4dd47b4b4f93e"
integrity sha512-VW+Wkt1MY5IjsZB9T36vEo5Bck9TF8L45fI4qjNmXinvd/KMxH8+tGuO36ZkJEHAO7QjUiU6csliGXZ/AwoITA==
dependencies:
"@babel/runtime" "^7.2.0"
"@types/store" "^2.0.1"
store "^2.0.12"
"@polkadot/util-crypto@^0.33.30":
version "0.33.30"
resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-0.33.30.tgz#e164d6cc274e9031b6e51bbe674fc32a3845a6bd"
integrity sha512-epaEyZlVjAvOS2GwiIzgKcD+/09GaNeWcb7+N+Cpr3y8SV2cTFe0r4FHip93Aioj/pB+QzMiYuJbM2gYxKxMvQ==
"@polkadot/util-crypto@^0.33.33":
version "0.33.33"
resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-0.33.33.tgz#5c308fb06019d65018aebd4ca56a2d4d21096137"
integrity sha512-LJ5+rV5XwN6Mc/29ZG6CnktZvPf9GAPhJtUYBshZaniXMpf+BvV7NmNG/OzYbQi00F3LNA/wI5Zpjaliwi8oVw==
dependencies:
"@babel/runtime" "^7.2.0"
"@polkadot/util" "^0.33.30"
"@polkadot/util" "^0.33.33"
"@types/bip39" "^2.4.1"
bip39 "^2.5.0"
blakejs "^1.1.0"
@ -1615,10 +1614,10 @@
tweetnacl "^1.0.0"
xxhashjs "^0.2.2"
"@polkadot/util@^0.33.30":
version "0.33.30"
resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-0.33.30.tgz#a25ca56ac5b5979ec199d51c35593153162b7ea0"
integrity sha512-193F3ZlFdCWn6hrnICy2NJmsVhi7VsxC1C2RXOfddfxgJa9/5+xtgPiobFD/6sL7IOhLF6vINlDYcoFNKdsw9w==
"@polkadot/util@^0.33.33":
version "0.33.33"
resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-0.33.33.tgz#edae020dfa7544c26e11694308411742d23ff048"
integrity sha512-G33KkWZrrnkj0TfqeDjK+2z+g3Odc/6OEKmV4oRnvVmKTP+wmWy2c5r0aRdPHAd4paVHGFuYwaN6gIzo9qirig==
dependencies:
"@babel/runtime" "^7.2.0"
"@types/bn.js" "^4.11.3"
@ -2957,7 +2956,7 @@ block-stream@*, block-stream@0.0.9:
dependencies:
inherits "~2.0.0"
bluebird@^3.4.1, bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@~3.5.0:
bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@~3.5.0:
version "3.5.3"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
@ -8241,17 +8240,6 @@ makeerror@1.0.x:
dependencies:
tmpl "1.0.x"
makeshift@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/makeshift/-/makeshift-1.1.0.tgz#03819e68ebb5a0939edc20e7ea230c8818e2b4c4"
integrity sha512-wrL4SLWEDFlGLRHmO4r+6eMlu5z2Aj73CRpB0iDtRSkznFbN8/S4VNI8kxeClIJM5nZi1mrI+HcNegVw5orO3w==
dependencies:
bluebird "^3.4.1"
chalk "^2.0.1"
figures "^2.0.0"
sywac "^1.0.0"
url-parse-as-address "^1.0.0"
map-age-cleaner@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
@ -12377,11 +12365,6 @@ symbol-tree@^3.2.1, symbol-tree@^3.2.2:
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
sywac@^1.0.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/sywac/-/sywac-1.2.1.tgz#528e482b2f2a18e764ffccc59eb40eea16a7f97d"
integrity sha512-bf8agjBAV9mm90k2nWoobe48bO/XugTS86W4dGYTpzVlfFv1cmWsRrQ9hUKIfoDaIRaXIta/BLFINmmxfV+otg==
tapable@^1.0.0, tapable@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.1.tgz#4d297923c5a72a42360de2ab52dadfaaec00018e"
@ -13088,11 +13071,6 @@ url-loader@^1.1.1:
mime "^2.0.3"
schema-utils "^1.0.0"
url-parse-as-address@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/url-parse-as-address/-/url-parse-as-address-1.0.0.tgz#fb80901883f338b3cbed3538f5faa26adaf7f2e7"
integrity sha1-+4CQGIPzOLPL7TU49fqiatr38uc=
url-parse-lax@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"