diff --git a/packages/react-qr/src/ScanAddress.tsx b/packages/react-qr/src/ScanAddress.tsx index 36f0122c..474cd2f2 100644 --- a/packages/react-qr/src/ScanAddress.tsx +++ b/packages/react-qr/src/ScanAddress.tsx @@ -8,11 +8,12 @@ import React, { useCallback } from 'react'; import { assert } from '@polkadot/util'; import { decodeAddress } from '@polkadot/util-crypto'; -import { ADDRESS_PREFIX } from './constants'; +import { ADDRESS_PREFIX, SEED_PREFIX } from './constants'; import QrScan from './Scan'; interface ScanType { - address: string; + isAddress: boolean; + content: string; genesisHash: string; name?: string; } @@ -30,12 +31,18 @@ function ScanAddress ({ className, onError, onScan, size, style }: Props): React } try { - const [prefix, address, genesisHash, name] = data.split(':'); + const [prefix, content, genesisHash, name] = data.split(':'); + const isValidPrefix = prefix === ADDRESS_PREFIX || prefix === SEED_PREFIX; - assert(prefix === ADDRESS_PREFIX, `Invalid address received, expected '${ADDRESS_PREFIX}', found '${prefix}'`); + assert(isValidPrefix, `Invalid prefix received, expected '${ADDRESS_PREFIX}/${SEED_PREFIX}' , found '${prefix}'`); - decodeAddress(address); - onScan({ address, genesisHash, name }); + const isAddress = prefix === ADDRESS_PREFIX; + + if (isAddress) { + decodeAddress(content); + } + + onScan({ content, genesisHash, isAddress, name }); } catch (error) { console.error('@polkadot/react-qr:QrScanAddress', (error as Error).message, data); } diff --git a/packages/react-qr/src/constants.ts b/packages/react-qr/src/constants.ts index aa1fe053..86a2d721 100644 --- a/packages/react-qr/src/constants.ts +++ b/packages/react-qr/src/constants.ts @@ -3,6 +3,7 @@ // of the Apache-2.0 license. See the LICENSE file for details. const ADDRESS_PREFIX = 'substrate'; +const SEED_PREFIX = 'secret'; const FRAME_SIZE = 1024; const SUBSTRATE_ID = new Uint8Array([0x53]); const CRYPTO_SR25519 = new Uint8Array([0x01]); @@ -19,5 +20,6 @@ export { CMD_SIGN_MSG, CRYPTO_SR25519, FRAME_SIZE, + SEED_PREFIX, SUBSTRATE_ID };