From dbc9dd7b1a190ffb8b4ad6d323c4e5429205311c Mon Sep 17 00:00:00 2001 From: YJ Date: Mon, 12 Aug 2019 15:50:26 +0200 Subject: [PATCH] feat: add flag for payload type passed in by caller (#182) * feat: add flag for payload type passed in by caller * fix: lint * fix: unit tests * fix: use number --- packages/react-qr/src/DisplayPayload.tsx | 5 +++-- packages/react-qr/src/constants.ts | 8 +++++++- packages/react-qr/src/util.spec.ts | 6 +++--- packages/react-qr/src/util.ts | 6 +++--- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/react-qr/src/DisplayPayload.tsx b/packages/react-qr/src/DisplayPayload.tsx index f7c7631d..4b06f843 100644 --- a/packages/react-qr/src/DisplayPayload.tsx +++ b/packages/react-qr/src/DisplayPayload.tsx @@ -12,6 +12,7 @@ import QrDisplay from './Display'; interface Props extends BaseProps { address: string; + cmd: number; payload: Uint8Array; } @@ -26,8 +27,8 @@ export default class DisplayPayload extends React.PureComponent { dataHash: null }; - public static getDerivedStateFromProps ({ address, payload }: Props, prevState: State): State | null { - const data = createSignPayload(address, payload); + public static getDerivedStateFromProps ({ address, cmd, payload }: Props, prevState: State): State | null { + const data = createSignPayload(address, cmd, payload); const dataHash = xxhashAsHex(data); if (dataHash === prevState.dataHash) { diff --git a/packages/react-qr/src/constants.ts b/packages/react-qr/src/constants.ts index f56efcb8..c1dfbe3b 100644 --- a/packages/react-qr/src/constants.ts +++ b/packages/react-qr/src/constants.ts @@ -7,11 +7,17 @@ const ADDRESS_PREFIX = 'substrate:'; const FRAME_SIZE = 2048; const SUBSTRATE_ID = new Uint8Array([0x53]); const CRYPTO_SR25519 = new Uint8Array([0x01]); -const CMD_SIGN_TX = new Uint8Array([0x00]); +const CMD_SIGN_TX = new Uint8Array([0]); +const CMD_SIGN_TX_HASH = new Uint8Array([1]); +const CMD_SIGN_IMMORTAL_TX = new Uint8Array([2]); +const CMD_SIGN_MSG = new Uint8Array([3]); export { ADDRESS_PREFIX, CMD_SIGN_TX, + CMD_SIGN_TX_HASH, + CMD_SIGN_IMMORTAL_TX, + CMD_SIGN_MSG, CRYPTO_SR25519, DEFAULT_IMG_SIZE, FRAME_SIZE, diff --git a/packages/react-qr/src/util.spec.ts b/packages/react-qr/src/util.spec.ts index a82156d6..918668dc 100644 --- a/packages/react-qr/src/util.spec.ts +++ b/packages/react-qr/src/util.spec.ts @@ -60,13 +60,13 @@ describe('util', (): void => { it('encodes a payload properly', (): void => { expect( u8aToHex( - createSignPayload('5HbgaJEuVN5qGbkhgtuDQANivSWwHXWsC2erP1SQUXgciTVq', 'THIS IS SPARTA!') + createSignPayload('5HbgaJEuVN5qGbkhgtuDQANivSWwHXWsC2erP1SQUXgciTVq', 3, 'THIS IS SPARTA!') ) ).toEqual( '0x' + // prefix '53' + // substrate '01' + // sr25519 - '00' + // sign tx + '03' + // sign tx 'f4cd755672a8f9542ca9da4fbf2182e79135d94304002e6a09ffc96fef6e6c4c' + // publickey '544849532049532053504152544121' // THIS IS SPARTA! ); @@ -77,7 +77,7 @@ describe('util', (): void => { it('encodes frames properly', (): void => { expect( createFrames( - createSignPayload('5HbgaJEuVN5qGbkhgtuDQANivSWwHXWsC2erP1SQUXgciTVq', '0x12345678') + createSignPayload('5HbgaJEuVN5qGbkhgtuDQANivSWwHXWsC2erP1SQUXgciTVq', 0, '0x12345678') ).map((u8a): string => u8aToHex(u8a)) ).toEqual([ '0x' + diff --git a/packages/react-qr/src/util.ts b/packages/react-qr/src/util.ts index 7c2405db..e4bc1b86 100644 --- a/packages/react-qr/src/util.ts +++ b/packages/react-qr/src/util.ts @@ -5,7 +5,7 @@ import { u8aConcat, u8aToU8a } from '@polkadot/util'; import { decodeAddress } from '@polkadot/util-crypto'; -import { ADDRESS_PREFIX, CMD_SIGN_TX, CRYPTO_SR25519, DEFAULT_IMG_SIZE, FRAME_SIZE, SUBSTRATE_ID } from './constants'; +import { ADDRESS_PREFIX, CRYPTO_SR25519, DEFAULT_IMG_SIZE, FRAME_SIZE, SUBSTRATE_ID } from './constants'; const MULTIPART = new Uint8Array([0]); @@ -36,11 +36,11 @@ export function createAddressPayload (address: string): Uint8Array { ); } -export function createSignPayload (address: string, payload: string | Uint8Array): Uint8Array { +export function createSignPayload (address: string, cmd: number, payload: string | Uint8Array): Uint8Array { return u8aConcat( SUBSTRATE_ID, CRYPTO_SR25519, - CMD_SIGN_TX, + new Uint8Array([cmd]), decodeAddress(address), u8aToU8a(payload) );