From da16a494e86f36bb061b9948cd048177e84044e0 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 12 Jul 2019 19:58:22 +0200 Subject: [PATCH] Make it work with apps (#74) * Make it work with apps * Update package.json --- CHANGELOG.md | 4 + package.json | 2 +- .../src/Popup/Signing/Details.tsx | 38 ++++++--- .../src/Popup/Signing/Request.tsx | 4 +- packages/extension/manifest.json | 3 + packages/extension/package.json | 2 +- .../src/background/handlers/Extension.ts | 6 +- packages/extension/src/background/types.ts | 16 ++-- packages/extension/src/page/Signer.ts | 10 ++- yarn.lock | 80 +++++++++---------- 10 files changed, 99 insertions(+), 66 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eb164a70..2d2e7490 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.3.x + +- Mortal/Immortal display + # 0.2.1 - First release to Chrome store, basic functionality only diff --git a/package.json b/package.json index eb2dce3f..74c7c6fb 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/packages/extension-ui/src/Popup/Signing/Details.tsx b/packages/extension-ui/src/Popup/Signing/Details.tsx index 4c89d7bf..f76d42af 100644 --- a/packages/extension-ui/src/Popup/Signing/Details.tsx +++ b/packages/extension-ui/src/Popup/Signing/Details.tsx @@ -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 ( @@ -79,6 +93,10 @@ function Details ({ className, genesisHash, isDecoded, method, nonce, url }: Pro {renderMethod(method, (chain && isDecoded) ? chain.meta : null)} + + + +
{nonce}
mortality{renderMortality(eera, blockNumber)}
); diff --git a/packages/extension-ui/src/Popup/Signing/Request.tsx b/packages/extension-ui/src/Popup/Signing/Request.tsx index 5153bc04..08415718 100644 --- a/packages/extension-ui/src/Popup/Signing/Request.tsx +++ b/packages/extension-ui/src/Popup/Signing/Request.tsx @@ -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 (
", "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" }, diff --git a/packages/extension/src/background/handlers/Extension.ts b/packages/extension/src/background/handlers/Extension.ts index 868163d2..e731d8cb 100644 --- a/packages/extension/src/background/handlers/Extension.ts +++ b/packages/extension/src/background/handlers/Extension.ts @@ -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(); diff --git a/packages/extension/src/background/types.ts b/packages/extension/src/background/types.ts index e1a47fd4..f673b023 100644 --- a/packages/extension/src/background/types.ts +++ b/packages/extension/src/background/types.ts @@ -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, diff --git a/packages/extension/src/page/Signer.ts b/packages/extension/src/page/Signer.ts index 1d071e4b..dd58dc69 100644 --- a/packages/extension/src/page/Signer.ts +++ b/packages/extension/src/page/Signer.ts @@ -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 { + public async sign (extrinsic: IExtrinsic, address: string, { blockHash, blockNumber, era, genesisHash, nonce }: SignerOptions): Promise { // 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 } } diff --git a/yarn.lock b/yarn.lock index 29944a0b..442df712 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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"