Make it work with apps (#74)

* Make it work with apps

* Update package.json
This commit is contained in:
Jaco Greeff 2019-07-12 19:58:22 +02:00 committed by GitHub
parent 70cb5066d1
commit da16a494e8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 99 additions and 66 deletions

View File

@ -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

View File

@ -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",

View File

@ -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>
); );

View File

@ -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}

View File

@ -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"],

View File

@ -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"
}, },

View File

@ -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();

View File

@ -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,

View File

@ -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
} }
} }

View File

@ -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"