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
10 changed files with 99 additions and 66 deletions
+4
View File
@@ -1,3 +1,7 @@
# 0.3.x
- Mortal/Immortal display
# 0.2.1
- First release to Chrome store, basic functionality only
+1 -1
View File
@@ -17,7 +17,7 @@
},
"scripts": {
"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",
"lint": "tslint --project . && tsc --noEmit --pretty",
"clean": "polkadot-dev-clean-build",
@@ -6,20 +6,23 @@ import React from 'react';
import styled from 'styled-components';
import fromMetadata from '@polkadot/api-metadata/extrinsics/fromMetadata';
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 = {
args: { [index: string]: any }
};
type Props = {
className?: string,
genesisHash: string,
isDecoded: boolean,
method: string,
nonce: string,
url: string
};
interface Props {
blockNumber: number;
className?: string;
era?: string;
genesisHash: string;
isDecoded: boolean;
method: string;
nonce: string;
url: string;
}
function renderMethod (data: string, meta?: Metadata | null) {
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 eera = new ExtrinsicEra(era);
return (
<table className={className}>
@@ -79,6 +93,10 @@ function Details ({ className, genesisHash, isDecoded, method, nonce, url }: Pro
<td className='data'>{nonce}</td>
</tr>
{renderMethod(method, (chain && isDecoded) ? chain.meta : null)}
<tr>
<td className='label'>mortality</td>
<td className='data'>{renderMortality(eera, blockNumber)}</td>
</tr>
</tbody>
</table>
);
@@ -20,7 +20,7 @@ type Props = {
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 = () =>
cancelSignRequest(signId)
.then(() => onAction())
@@ -32,6 +32,8 @@ function Request ({ isFirst, onAction, request: { address, genesisHash, method,
return (
<Address address={address}>
<Details
blockNumber={blockNumber}
era={era}
genesisHash={genesisHash}
isDecoded={isFirst}
method={method}
+3
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",
"manifest_version": 2,
"permissions": ["activeTab", "storage"],
+1 -1
View File
@@ -5,7 +5,7 @@
"author": "Jaco Greeff <jacogr@gmail.com>",
"license": "Apache-2",
"dependencies": {
"@polkadot/api": "^0.82.0-beta.48",
"@polkadot/api": "^0.82.0-beta.53",
"@polkadot/extension-ui": "^0.3.0-beta.0",
"@polkadot/ui-keyring": "^0.42.0-beta.7"
},
@@ -137,7 +137,7 @@ export default class Extension {
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);
if (!pair) {
@@ -148,7 +148,9 @@ export default class Extension {
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));
pair.lock();
+9 -7
View File
@@ -60,13 +60,15 @@ export type MessageExtrinsicSignCancel = {
id: string
};
export type MessageExtrinsicSign = {
address: string,
blockHash: string,
genesisHash: string,
method: string,
nonce: string
};
export interface MessageExtrinsicSign {
address: string;
blockHash: string;
blockNumber: number;
era?: string;
genesisHash: string;
method: string;
nonce: string;
}
export type MessageExtrinsicSign$Response = {
id: string,
+6 -4
View File
@@ -13,26 +13,28 @@ import { SubmittableResult } from '@polkadot/api/SubmittableExtrinsic';
let sendRequest: SendRequest;
export default class Signer implements InjectedSigner {
constructor (_sendRequest: SendRequest) {
public constructor (_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
const { id, signature } = await sendRequest('extrinsic.sign', JSON.parse(JSON.stringify({
address,
blockHash,
blockNumber: blockNumber.toNumber(),
era,
genesisHash,
method: extrinsic.method.toHex(),
nonce
})));
extrinsic.addSignature(address as any, signature, nonce);
extrinsic.addSignature(address, signature, nonce);
return id;
}
update (id: number, status: Hash | SubmittableResult): void {
public update (id: number, status: Hash | SubmittableResult): void {
// something
}
}
+40 -40
View File
@@ -1861,38 +1861,38 @@
universal-user-agent "^2.0.0"
url-template "^2.0.8"
"@polkadot/api-derive@^0.82.0-beta.48":
version "0.82.0-beta.48"
resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.82.0-beta.48.tgz#ce7bcee0e999ae1d4aae1db6aa53770b3a5302fa"
integrity sha512-Q0/lQoeMplS2Xmct0ugRpEpFzXu/1u0PVN61turf8NkZE0rS3UxJE/NGElro17ul6KfrpGdHLrkJaVy3vSZzjw==
"@polkadot/api-derive@^0.82.0-beta.53":
version "0.82.0-beta.53"
resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-0.82.0-beta.53.tgz#2b57d68c964ca504d0d2a9e9d49a0c9f605bcceb"
integrity sha512-KHrXxb0MYFzrMWV0L/3eSGyNUCaRlZ/cI8M06KWAV6quLGo7iMwaK1KXexgRvFsL4iHCcDGoqjb/vY7+gpqN1g==
dependencies:
"@babel/runtime" "^7.5.4"
"@polkadot/api" "^0.82.0-beta.48"
"@polkadot/types" "^0.82.0-beta.48"
"@polkadot/api" "^0.82.0-beta.53"
"@polkadot/types" "^0.82.0-beta.53"
"@types/memoizee" "^0.4.2"
memoizee "^0.4.14"
"@polkadot/api-metadata@^0.82.0-beta.48":
version "0.82.0-beta.48"
resolved "https://registry.yarnpkg.com/@polkadot/api-metadata/-/api-metadata-0.82.0-beta.48.tgz#cd49dbe93dfcd4e2058dc028cf841a7b6e35ab92"
integrity sha512-yweqA1nhUv++bfHtWSvG5pdWEitO8qUGH/KIbQaGFr88A3bXWMEgitMie1HtsoOMzNABe2iz8QeJxxxHIR3wWA==
"@polkadot/api-metadata@^0.82.0-beta.53":
version "0.82.0-beta.53"
resolved "https://registry.yarnpkg.com/@polkadot/api-metadata/-/api-metadata-0.82.0-beta.53.tgz#5734058941af6602fa492f18e7a2e1fc6507d96a"
integrity sha512-IRdMtKKC8PE19o79Oyy80ooKplh6bWI0OIF6Uxz59ulG9vdEy0tpXUZbOaQG0YoEG5ncuv8wVScAHwhnfocotQ==
dependencies:
"@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-crypto" "^0.94.0-beta.9"
"@polkadot/api@^0.82.0-beta.48":
version "0.82.0-beta.48"
resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.82.0-beta.48.tgz#dbe2e938d6012fb3d7d9c1375f0bc8636b5d6b2c"
integrity sha512-jBfPwbwzdHgXznT3BjvsoFASSC4ur+E2fxQWZ0x2SxkgoGP7xav2q4YjOdGahGprbX03vqZopvLiQhSx6ugXUw==
"@polkadot/api@^0.82.0-beta.53":
version "0.82.0-beta.53"
resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-0.82.0-beta.53.tgz#b49fec5792bdd7db835969a0360868eea2a0a31b"
integrity sha512-vb4rL1SLrhZgE5rHe2ag3WhjBTJ+bLcsPFQt/W8UccJDogNTu659lQuYXeNxr/3bpxitSQFuvvGwwDz5u2b2kA==
dependencies:
"@babel/runtime" "^7.5.4"
"@polkadot/api-derive" "^0.82.0-beta.48"
"@polkadot/api-metadata" "^0.82.0-beta.48"
"@polkadot/rpc-core" "^0.82.0-beta.48"
"@polkadot/rpc-provider" "^0.82.0-beta.48"
"@polkadot/types" "^0.82.0-beta.48"
"@polkadot/api-derive" "^0.82.0-beta.53"
"@polkadot/api-metadata" "^0.82.0-beta.53"
"@polkadot/rpc-core" "^0.82.0-beta.53"
"@polkadot/rpc-provider" "^0.82.0-beta.53"
"@polkadot/types" "^0.82.0-beta.53"
"@polkadot/util-crypto" "^0.94.0-beta.9"
"@polkadot/dev-react@^0.30.0-beta.21":
@@ -1980,10 +1980,10 @@
typescript "^3.5.3"
vuepress "^1.0.2"
"@polkadot/jsonrpc@^0.82.0-beta.48":
version "0.82.0-beta.48"
resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.82.0-beta.48.tgz#acaf2e134feb7eb37303ecf1e15555c7eb715ba7"
integrity sha512-KBw05ZoUC/XNVjheZILqfr3XVecKk+bbS7FXj7BIPbB/cpxpx0DYmcILDt1/ilpz0c2nJUdcSfyElrErX2ERmg==
"@polkadot/jsonrpc@^0.82.0-beta.53":
version "0.82.0-beta.53"
resolved "https://registry.yarnpkg.com/@polkadot/jsonrpc/-/jsonrpc-0.82.0-beta.53.tgz#a3e6be18606859905ec536f662ce5f6a423a70c0"
integrity sha512-Jx+h/Kj1Eh5sgAmJgxVeJT9zsqmR3sEHzkBTrPj3HwoeTtqcGBl9OodfO5plj2qFWMpufAn36yJWfdraiX47/g==
dependencies:
"@babel/runtime" "^7.5.4"
@@ -1996,26 +1996,26 @@
"@polkadot/util" "^0.94.0-beta.9"
"@polkadot/util-crypto" "^0.94.0-beta.9"
"@polkadot/rpc-core@^0.82.0-beta.48":
version "0.82.0-beta.48"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.82.0-beta.48.tgz#81bd3e3c13890d8ba6ff2b7be4a98597687cb711"
integrity sha512-Qy/hJZJPa7JlZjlOHDlNzn9qA0roSnJF5KoKZ++TqfMx5ZlRGYp7k9HiX4nu01hA6xIx7QwNojatazvhHJut3g==
"@polkadot/rpc-core@^0.82.0-beta.53":
version "0.82.0-beta.53"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-0.82.0-beta.53.tgz#8b89634144de0216555f8753a922aaf687e5d6e4"
integrity sha512-wJMhYQ6SXRsbjAoeMUr1wg5lbpRwi0AQBz+jcSzbaoJkRL3AsCHbTIzLfMf3M/F2vnQpA9VABc1QI7gnI3Tngw==
dependencies:
"@babel/runtime" "^7.5.4"
"@polkadot/jsonrpc" "^0.82.0-beta.48"
"@polkadot/rpc-provider" "^0.82.0-beta.48"
"@polkadot/types" "^0.82.0-beta.48"
"@polkadot/jsonrpc" "^0.82.0-beta.53"
"@polkadot/rpc-provider" "^0.82.0-beta.53"
"@polkadot/types" "^0.82.0-beta.53"
"@polkadot/util" "^0.94.0-beta.9"
memoizee "^0.4.14"
rxjs "^6.5.2"
"@polkadot/rpc-provider@^0.82.0-beta.48":
version "0.82.0-beta.48"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.82.0-beta.48.tgz#0d736324ed4a259832f3586f5a73a2d56417dcf8"
integrity sha512-F9XQPs55zB/H1FIa6AaY1oqmzWocELVzCoHEbWvruyuUQq/VMiqOp89gkQhtEyV1I0+mV1db6O9Qd+hpky4FZA==
"@polkadot/rpc-provider@^0.82.0-beta.53":
version "0.82.0-beta.53"
resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-0.82.0-beta.53.tgz#6882c22c52c6ad562e9a772a707906cbe75605ba"
integrity sha512-Bd3Ha2q4GMID0v5bFosWbqb/sEGesSQJxfdFKG0x2PAh0CEHuakboUw3/LZAbNpdZz5fEqxgPCXlMuWd8OGWGQ==
dependencies:
"@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-crypto" "^0.94.0-beta.9"
"@types/nock" "^10.0.3"
@@ -2030,10 +2030,10 @@
dependencies:
"@types/chrome" "^0.0.86"
"@polkadot/types@^0.82.0-beta.48":
version "0.82.0-beta.48"
resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.82.0-beta.48.tgz#9e746d8860fb691e3a4fcc25d974843f321e7dd9"
integrity sha512-nMKAejUbM9rTWfUxBQvTBYNGd7Ga2D4cRVO7xjRUk96w+QTY/KKxpEA1KaENnTrqubHDcauNP39hcChMTGXNGw==
"@polkadot/types@^0.82.0-beta.53":
version "0.82.0-beta.53"
resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-0.82.0-beta.53.tgz#aba4053fde27609484039f7e1c460927b01c9bc0"
integrity sha512-lKTMVZLilimjRs079LEe7nl+HAdwpwIjLpv9ByrdXYBTIDIUXi+LkGrZ+cV7k4Rk/YNM/R1MDttf6EYbx/j++w==
dependencies:
"@babel/runtime" "^7.5.4"
"@polkadot/util" "^0.94.0-beta.9"