Make it work with apps (#74)
* Make it work with apps * Update package.json
This commit is contained in:
parent
70cb5066d1
commit
da16a494e8
@ -1,3 +1,7 @@
|
|||||||
|
# 0.3.x
|
||||||
|
|
||||||
|
- Mortal/Immortal display
|
||||||
|
|
||||||
# 0.2.1
|
# 0.2.1
|
||||||
|
|
||||||
- First release to Chrome store, basic functionality only
|
- First release to Chrome store, basic functionality only
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "NODE_ENV=production polkadot-dev-build-ts",
|
"build": "NODE_ENV=production polkadot-dev-build-ts",
|
||||||
"buildzip": "(cd packages/extension/build && zip -r -FS ../../../master-build.zip *)",
|
"build:zip": "(cd packages/extension/build && zip -r -FS ../../../master-build.zip *)",
|
||||||
"check": "yarn lint",
|
"check": "yarn lint",
|
||||||
"lint": "tslint --project . && tsc --noEmit --pretty",
|
"lint": "tslint --project . && tsc --noEmit --pretty",
|
||||||
"clean": "polkadot-dev-clean-build",
|
"clean": "polkadot-dev-clean-build",
|
||||||
|
|||||||
@ -6,20 +6,23 @@ import React from 'react';
|
|||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import fromMetadata from '@polkadot/api-metadata/extrinsics/fromMetadata';
|
import fromMetadata from '@polkadot/api-metadata/extrinsics/fromMetadata';
|
||||||
import findChain from '@polkadot/extension/chains';
|
import findChain from '@polkadot/extension/chains';
|
||||||
import { Metadata, Method } from '@polkadot/types';
|
import { Metadata, Method, ExtrinsicEra } from '@polkadot/types';
|
||||||
|
import { formatNumber } from '@polkadot/util';
|
||||||
|
|
||||||
type MethodJson = {
|
type MethodJson = {
|
||||||
args: { [index: string]: any }
|
args: { [index: string]: any }
|
||||||
};
|
};
|
||||||
|
|
||||||
type Props = {
|
interface Props {
|
||||||
className?: string,
|
blockNumber: number;
|
||||||
genesisHash: string,
|
className?: string;
|
||||||
isDecoded: boolean,
|
era?: string;
|
||||||
method: string,
|
genesisHash: string;
|
||||||
nonce: string,
|
isDecoded: boolean;
|
||||||
url: string
|
method: string;
|
||||||
};
|
nonce: string;
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
|
||||||
function renderMethod (data: string, meta?: Metadata | null) {
|
function renderMethod (data: string, meta?: Metadata | null) {
|
||||||
if (!meta) {
|
if (!meta) {
|
||||||
@ -60,8 +63,19 @@ function renderMethod (data: string, meta?: Metadata | null) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function Details ({ className, genesisHash, isDecoded, method, nonce, url }: Props) {
|
function renderMortality (era: ExtrinsicEra, blockNumber: number): string {
|
||||||
|
if (era.isImmortalEra) {
|
||||||
|
return 'immortal';
|
||||||
|
}
|
||||||
|
|
||||||
|
const mortal = era.asMortalEra;
|
||||||
|
|
||||||
|
return `mortal (birth #${formatNumber(mortal.birth(blockNumber))}, death #${formatNumber(mortal.death(blockNumber))})`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Details ({ blockNumber, className, genesisHash, isDecoded, era, method, nonce, url }: Props) {
|
||||||
const chain = findChain(genesisHash);
|
const chain = findChain(genesisHash);
|
||||||
|
const eera = new ExtrinsicEra(era);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<table className={className}>
|
<table className={className}>
|
||||||
@ -79,6 +93,10 @@ function Details ({ className, genesisHash, isDecoded, method, nonce, url }: Pro
|
|||||||
<td className='data'>{nonce}</td>
|
<td className='data'>{nonce}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{renderMethod(method, (chain && isDecoded) ? chain.meta : null)}
|
{renderMethod(method, (chain && isDecoded) ? chain.meta : null)}
|
||||||
|
<tr>
|
||||||
|
<td className='label'>mortality</td>
|
||||||
|
<td className='data'>{renderMortality(eera, blockNumber)}</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -20,7 +20,7 @@ type Props = {
|
|||||||
url: string
|
url: string
|
||||||
};
|
};
|
||||||
|
|
||||||
function Request ({ isFirst, onAction, request: { address, genesisHash, method, nonce }, signId, url }: Props) {
|
function Request ({ isFirst, onAction, request: { address, blockNumber, era, genesisHash, method, nonce }, signId, url }: Props) {
|
||||||
const onCancel = () =>
|
const onCancel = () =>
|
||||||
cancelSignRequest(signId)
|
cancelSignRequest(signId)
|
||||||
.then(() => onAction())
|
.then(() => onAction())
|
||||||
@ -32,6 +32,8 @@ function Request ({ isFirst, onAction, request: { address, genesisHash, method,
|
|||||||
return (
|
return (
|
||||||
<Address address={address}>
|
<Address address={address}>
|
||||||
<Details
|
<Details
|
||||||
|
blockNumber={blockNumber}
|
||||||
|
era={era}
|
||||||
genesisHash={genesisHash}
|
genesisHash={genesisHash}
|
||||||
isDecoded={isFirst}
|
isDecoded={isFirst}
|
||||||
method={method}
|
method={method}
|
||||||
|
|||||||
@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"author": "polkadot.{js}",
|
||||||
|
"description": "Manage your Polkadot & Substrate keys independent for the dapps. Injects the accounts into dapps and allows the dapp to request transactions to be signed.",
|
||||||
|
"homepage_url": "https://github.com/polkadot-js/extension",
|
||||||
"name": "polkadot{.js} extension",
|
"name": "polkadot{.js} extension",
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"permissions": ["activeTab", "storage"],
|
"permissions": ["activeTab", "storage"],
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||||
"license": "Apache-2",
|
"license": "Apache-2",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/api": "^0.82.0-beta.48",
|
"@polkadot/api": "^0.82.0-beta.53",
|
||||||
"@polkadot/extension-ui": "^0.3.0-beta.0",
|
"@polkadot/extension-ui": "^0.3.0-beta.0",
|
||||||
"@polkadot/ui-keyring": "^0.42.0-beta.7"
|
"@polkadot/ui-keyring": "^0.42.0-beta.7"
|
||||||
},
|
},
|
||||||
|
|||||||
@ -137,7 +137,7 @@ export default class Extension {
|
|||||||
|
|
||||||
assert(queued, 'Unable to find request');
|
assert(queued, 'Unable to find request');
|
||||||
|
|
||||||
const { request: { address, blockHash, method, nonce }, resolve, reject } = queued;
|
const { request: { address, genesisHash, method, nonce }, resolve, reject } = queued;
|
||||||
const pair = keyring.getPair(address);
|
const pair = keyring.getPair(address);
|
||||||
|
|
||||||
if (!pair) {
|
if (!pair) {
|
||||||
@ -148,7 +148,9 @@ export default class Extension {
|
|||||||
|
|
||||||
pair.decodePkcs8(password);
|
pair.decodePkcs8(password);
|
||||||
|
|
||||||
const payload = new SignaturePayloadRaw({ blockHash, method, nonce });
|
// FIXME We should pass the era and blockHash as received here - however... it seems
|
||||||
|
// like something goes wrong along the way. Immortal is ok
|
||||||
|
const payload = new SignaturePayloadRaw({ blockHash: genesisHash, method, nonce });
|
||||||
const signature = u8aToHex(payload.sign(pair));
|
const signature = u8aToHex(payload.sign(pair));
|
||||||
|
|
||||||
pair.lock();
|
pair.lock();
|
||||||
|
|||||||
@ -60,13 +60,15 @@ export type MessageExtrinsicSignCancel = {
|
|||||||
id: string
|
id: string
|
||||||
};
|
};
|
||||||
|
|
||||||
export type MessageExtrinsicSign = {
|
export interface MessageExtrinsicSign {
|
||||||
address: string,
|
address: string;
|
||||||
blockHash: string,
|
blockHash: string;
|
||||||
genesisHash: string,
|
blockNumber: number;
|
||||||
method: string,
|
era?: string;
|
||||||
nonce: string
|
genesisHash: string;
|
||||||
};
|
method: string;
|
||||||
|
nonce: string;
|
||||||
|
}
|
||||||
|
|
||||||
export type MessageExtrinsicSign$Response = {
|
export type MessageExtrinsicSign$Response = {
|
||||||
id: string,
|
id: string,
|
||||||
|
|||||||
@ -13,26 +13,28 @@ import { SubmittableResult } from '@polkadot/api/SubmittableExtrinsic';
|
|||||||
let sendRequest: SendRequest;
|
let sendRequest: SendRequest;
|
||||||
|
|
||||||
export default class Signer implements InjectedSigner {
|
export default class Signer implements InjectedSigner {
|
||||||
constructor (_sendRequest: SendRequest) {
|
public constructor (_sendRequest: SendRequest) {
|
||||||
sendRequest = _sendRequest;
|
sendRequest = _sendRequest;
|
||||||
}
|
}
|
||||||
|
|
||||||
async sign (extrinsic: IExtrinsic, address: string, { blockHash, genesisHash, nonce }: SignerOptions): Promise<number> {
|
public async sign (extrinsic: IExtrinsic, address: string, { blockHash, blockNumber, era, genesisHash, nonce }: SignerOptions): Promise<number> {
|
||||||
// Bit of a hack - with this round-about way, we skip any keyring deps
|
// Bit of a hack - with this round-about way, we skip any keyring deps
|
||||||
const { id, signature } = await sendRequest('extrinsic.sign', JSON.parse(JSON.stringify({
|
const { id, signature } = await sendRequest('extrinsic.sign', JSON.parse(JSON.stringify({
|
||||||
address,
|
address,
|
||||||
blockHash,
|
blockHash,
|
||||||
|
blockNumber: blockNumber.toNumber(),
|
||||||
|
era,
|
||||||
genesisHash,
|
genesisHash,
|
||||||
method: extrinsic.method.toHex(),
|
method: extrinsic.method.toHex(),
|
||||||
nonce
|
nonce
|
||||||
})));
|
})));
|
||||||
|
|
||||||
extrinsic.addSignature(address as any, signature, nonce);
|
extrinsic.addSignature(address, signature, nonce);
|
||||||
|
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
update (id: number, status: Hash | SubmittableResult): void {
|
public update (id: number, status: Hash | SubmittableResult): void {
|
||||||
// something
|
// something
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
80
yarn.lock
80
yarn.lock
@ -1861,38 +1861,38 @@
|
|||||||
universal-user-agent "^2.0.0"
|
universal-user-agent "^2.0.0"
|
||||||
url-template "^2.0.8"
|
url-template "^2.0.8"
|
||||||
|
|
||||||
"@polkadot/api-derive@^0.82.0-beta.48":
|
"@polkadot/api-derive@^0.82.0-beta.53":
|
||||||
version "0.82.0-beta.48"
|
version "0.82.0-beta.53"
|
||||||
resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.82.0-beta.48.tgz#ce7bcee0e999ae1d4aae1db6aa53770b3a5302fa"
|
resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.82.0-beta.53.tgz#2b57d68c964ca504d0d2a9e9d49a0c9f605bcceb"
|
||||||
integrity sha512-Q0/lQoeMplS2Xmct0ugRpEpFzXu/1u0PVN61turf8NkZE0rS3UxJE/NGElro17ul6KfrpGdHLrkJaVy3vSZzjw==
|
integrity sha512-KHrXxb0MYFzrMWV0L/3eSGyNUCaRlZ/cI8M06KWAV6quLGo7iMwaK1KXexgRvFsL4iHCcDGoqjb/vY7+gpqN1g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.5.4"
|
"@babel/runtime" "^7.5.4"
|
||||||
"@polkadot/api" "^0.82.0-beta.48"
|
"@polkadot/api" "^0.82.0-beta.53"
|
||||||
"@polkadot/types" "^0.82.0-beta.48"
|
"@polkadot/types" "^0.82.0-beta.53"
|
||||||
"@types/memoizee" "^0.4.2"
|
"@types/memoizee" "^0.4.2"
|
||||||
memoizee "^0.4.14"
|
memoizee "^0.4.14"
|
||||||
|
|
||||||
"@polkadot/api-metadata@^0.82.0-beta.48":
|
"@polkadot/api-metadata@^0.82.0-beta.53":
|
||||||
version "0.82.0-beta.48"
|
version "0.82.0-beta.53"
|
||||||
resolved "https://registry.yarnpkg.com/@polkadot/api-metadata/-/api-metadata-0.82.0-beta.48.tgz#cd49dbe93dfcd4e2058dc028cf841a7b6e35ab92"
|
resolved "https://registry.yarnpkg.com/@polkadot/api-metadata/-/api-metadata-0.82.0-beta.53.tgz#5734058941af6602fa492f18e7a2e1fc6507d96a"
|
||||||
integrity sha512-yweqA1nhUv++bfHtWSvG5pdWEitO8qUGH/KIbQaGFr88A3bXWMEgitMie1HtsoOMzNABe2iz8QeJxxxHIR3wWA==
|
integrity sha512-IRdMtKKC8PE19o79Oyy80ooKplh6bWI0OIF6Uxz59ulG9vdEy0tpXUZbOaQG0YoEG5ncuv8wVScAHwhnfocotQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.5.4"
|
"@babel/runtime" "^7.5.4"
|
||||||
"@polkadot/types" "^0.82.0-beta.48"
|
"@polkadot/types" "^0.82.0-beta.53"
|
||||||
"@polkadot/util" "^0.94.0-beta.9"
|
"@polkadot/util" "^0.94.0-beta.9"
|
||||||
"@polkadot/util-crypto" "^0.94.0-beta.9"
|
"@polkadot/util-crypto" "^0.94.0-beta.9"
|
||||||
|
|
||||||
"@polkadot/api@^0.82.0-beta.48":
|
"@polkadot/api@^0.82.0-beta.53":
|
||||||
version "0.82.0-beta.48"
|
version "0.82.0-beta.53"
|
||||||
resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.82.0-beta.48.tgz#dbe2e938d6012fb3d7d9c1375f0bc8636b5d6b2c"
|
resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.82.0-beta.53.tgz#b49fec5792bdd7db835969a0360868eea2a0a31b"
|
||||||
integrity sha512-jBfPwbwzdHgXznT3BjvsoFASSC4ur+E2fxQWZ0x2SxkgoGP7xav2q4YjOdGahGprbX03vqZopvLiQhSx6ugXUw==
|
integrity sha512-vb4rL1SLrhZgE5rHe2ag3WhjBTJ+bLcsPFQt/W8UccJDogNTu659lQuYXeNxr/3bpxitSQFuvvGwwDz5u2b2kA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.5.4"
|
"@babel/runtime" "^7.5.4"
|
||||||
"@polkadot/api-derive" "^0.82.0-beta.48"
|
"@polkadot/api-derive" "^0.82.0-beta.53"
|
||||||
"@polkadot/api-metadata" "^0.82.0-beta.48"
|
"@polkadot/api-metadata" "^0.82.0-beta.53"
|
||||||
"@polkadot/rpc-core" "^0.82.0-beta.48"
|
"@polkadot/rpc-core" "^0.82.0-beta.53"
|
||||||
"@polkadot/rpc-provider" "^0.82.0-beta.48"
|
"@polkadot/rpc-provider" "^0.82.0-beta.53"
|
||||||
"@polkadot/types" "^0.82.0-beta.48"
|
"@polkadot/types" "^0.82.0-beta.53"
|
||||||
"@polkadot/util-crypto" "^0.94.0-beta.9"
|
"@polkadot/util-crypto" "^0.94.0-beta.9"
|
||||||
|
|
||||||
"@polkadot/dev-react@^0.30.0-beta.21":
|
"@polkadot/dev-react@^0.30.0-beta.21":
|
||||||
@ -1980,10 +1980,10 @@
|
|||||||
typescript "^3.5.3"
|
typescript "^3.5.3"
|
||||||
vuepress "^1.0.2"
|
vuepress "^1.0.2"
|
||||||
|
|
||||||
"@polkadot/jsonrpc@^0.82.0-beta.48":
|
"@polkadot/jsonrpc@^0.82.0-beta.53":
|
||||||
version "0.82.0-beta.48"
|
version "0.82.0-beta.53"
|
||||||
resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.82.0-beta.48.tgz#acaf2e134feb7eb37303ecf1e15555c7eb715ba7"
|
resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.82.0-beta.53.tgz#a3e6be18606859905ec536f662ce5f6a423a70c0"
|
||||||
integrity sha512-KBw05ZoUC/XNVjheZILqfr3XVecKk+bbS7FXj7BIPbB/cpxpx0DYmcILDt1/ilpz0c2nJUdcSfyElrErX2ERmg==
|
integrity sha512-Jx+h/Kj1Eh5sgAmJgxVeJT9zsqmR3sEHzkBTrPj3HwoeTtqcGBl9OodfO5plj2qFWMpufAn36yJWfdraiX47/g==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.5.4"
|
"@babel/runtime" "^7.5.4"
|
||||||
|
|
||||||
@ -1996,26 +1996,26 @@
|
|||||||
"@polkadot/util" "^0.94.0-beta.9"
|
"@polkadot/util" "^0.94.0-beta.9"
|
||||||
"@polkadot/util-crypto" "^0.94.0-beta.9"
|
"@polkadot/util-crypto" "^0.94.0-beta.9"
|
||||||
|
|
||||||
"@polkadot/rpc-core@^0.82.0-beta.48":
|
"@polkadot/rpc-core@^0.82.0-beta.53":
|
||||||
version "0.82.0-beta.48"
|
version "0.82.0-beta.53"
|
||||||
resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.82.0-beta.48.tgz#81bd3e3c13890d8ba6ff2b7be4a98597687cb711"
|
resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.82.0-beta.53.tgz#8b89634144de0216555f8753a922aaf687e5d6e4"
|
||||||
integrity sha512-Qy/hJZJPa7JlZjlOHDlNzn9qA0roSnJF5KoKZ++TqfMx5ZlRGYp7k9HiX4nu01hA6xIx7QwNojatazvhHJut3g==
|
integrity sha512-wJMhYQ6SXRsbjAoeMUr1wg5lbpRwi0AQBz+jcSzbaoJkRL3AsCHbTIzLfMf3M/F2vnQpA9VABc1QI7gnI3Tngw==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.5.4"
|
"@babel/runtime" "^7.5.4"
|
||||||
"@polkadot/jsonrpc" "^0.82.0-beta.48"
|
"@polkadot/jsonrpc" "^0.82.0-beta.53"
|
||||||
"@polkadot/rpc-provider" "^0.82.0-beta.48"
|
"@polkadot/rpc-provider" "^0.82.0-beta.53"
|
||||||
"@polkadot/types" "^0.82.0-beta.48"
|
"@polkadot/types" "^0.82.0-beta.53"
|
||||||
"@polkadot/util" "^0.94.0-beta.9"
|
"@polkadot/util" "^0.94.0-beta.9"
|
||||||
memoizee "^0.4.14"
|
memoizee "^0.4.14"
|
||||||
rxjs "^6.5.2"
|
rxjs "^6.5.2"
|
||||||
|
|
||||||
"@polkadot/rpc-provider@^0.82.0-beta.48":
|
"@polkadot/rpc-provider@^0.82.0-beta.53":
|
||||||
version "0.82.0-beta.48"
|
version "0.82.0-beta.53"
|
||||||
resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.82.0-beta.48.tgz#0d736324ed4a259832f3586f5a73a2d56417dcf8"
|
resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.82.0-beta.53.tgz#6882c22c52c6ad562e9a772a707906cbe75605ba"
|
||||||
integrity sha512-F9XQPs55zB/H1FIa6AaY1oqmzWocELVzCoHEbWvruyuUQq/VMiqOp89gkQhtEyV1I0+mV1db6O9Qd+hpky4FZA==
|
integrity sha512-Bd3Ha2q4GMID0v5bFosWbqb/sEGesSQJxfdFKG0x2PAh0CEHuakboUw3/LZAbNpdZz5fEqxgPCXlMuWd8OGWGQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.5.4"
|
"@babel/runtime" "^7.5.4"
|
||||||
"@polkadot/api-metadata" "^0.82.0-beta.48"
|
"@polkadot/api-metadata" "^0.82.0-beta.53"
|
||||||
"@polkadot/util" "^0.94.0-beta.9"
|
"@polkadot/util" "^0.94.0-beta.9"
|
||||||
"@polkadot/util-crypto" "^0.94.0-beta.9"
|
"@polkadot/util-crypto" "^0.94.0-beta.9"
|
||||||
"@types/nock" "^10.0.3"
|
"@types/nock" "^10.0.3"
|
||||||
@ -2030,10 +2030,10 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/chrome" "^0.0.86"
|
"@types/chrome" "^0.0.86"
|
||||||
|
|
||||||
"@polkadot/types@^0.82.0-beta.48":
|
"@polkadot/types@^0.82.0-beta.53":
|
||||||
version "0.82.0-beta.48"
|
version "0.82.0-beta.53"
|
||||||
resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.82.0-beta.48.tgz#9e746d8860fb691e3a4fcc25d974843f321e7dd9"
|
resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.82.0-beta.53.tgz#aba4053fde27609484039f7e1c460927b01c9bc0"
|
||||||
integrity sha512-nMKAejUbM9rTWfUxBQvTBYNGd7Ga2D4cRVO7xjRUk96w+QTY/KKxpEA1KaENnTrqubHDcauNP39hcChMTGXNGw==
|
integrity sha512-lKTMVZLilimjRs079LEe7nl+HAdwpwIjLpv9ByrdXYBTIDIUXi+LkGrZ+cV7k4Rk/YNM/R1MDttf6EYbx/j++w==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/runtime" "^7.5.4"
|
"@babel/runtime" "^7.5.4"
|
||||||
"@polkadot/util" "^0.94.0-beta.9"
|
"@polkadot/util" "^0.94.0-beta.9"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user