From 016b8b18092443c5c0df9981c9ae9cbcc390bfb8 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sat, 13 Oct 2018 17:12:58 +0200 Subject: [PATCH] Warn on unexpected decoded prefix (#223) --- packages/keyring/src/address/decode.spec.js | 4 ++-- packages/keyring/src/address/decode.ts | 6 +++++- packages/keyring/src/address/defaults.ts | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/keyring/src/address/decode.spec.js b/packages/keyring/src/address/decode.spec.js index d9ce34dec..674d34997 100644 --- a/packages/keyring/src/address/decode.spec.js +++ b/packages/keyring/src/address/decode.spec.js @@ -63,9 +63,9 @@ describe('decode', () => { ).toEqual(new Uint8Array([42, 44, 10, 0, 0, 0, 0, 0])); }); - it('fails when prefix is invalid', () => { + it('allows invalid prefix (in list)', () => { expect( - () => decode('BXHKtJjKdXjvbvTg6qK275sgcKKq8dnU38MQQAiR3LN2stP') + () => decode('6GfvWUvHvU8otbZ7sFhXH4eYeMcKdUkL61P3nFy52efEPVUx') ).toThrow(/address prefix/); }); diff --git a/packages/keyring/src/address/decode.ts b/packages/keyring/src/address/decode.ts index afb19f813..ab6824144 100644 --- a/packages/keyring/src/address/decode.ts +++ b/packages/keyring/src/address/decode.ts @@ -26,9 +26,13 @@ export default function decode (encoded: string | Uint8Array, prefix: Prefix = d const error = (message: string) => `Decoding ${encoded}: ${message}`; - assert(decoded[0] === prefix, error('Invalid decoded address prefix')); + assert(defaults.allowedPrefix.includes(decoded[0] as Prefix), error('Invalid decoded address prefix')); assert(defaults.allowedEncodedLengths.includes(decoded.length), error('Invalid decoded address length')); + if (decoded[0] !== prefix) { + console.log(`WARN: Expected ${prefix}, found ${decoded[0]}`); + } + const isPublicKey = decoded.length === 35; // non-publicKeys has 1 byte checksums, else default to 2 diff --git a/packages/keyring/src/address/defaults.ts b/packages/keyring/src/address/defaults.ts index 59cab5223..409c77c95 100644 --- a/packages/keyring/src/address/defaults.ts +++ b/packages/keyring/src/address/defaults.ts @@ -8,5 +8,6 @@ export default { allowedDecodedLengths: [1, 2, 4, 8, 32], // publicKey has prefix + 2 checksum bytes, short only prefix + 1 checksum byte allowedEncodedLengths: [3, 4, 6, 10, 35], + allowedPrefix: [0, 1, 42, 43, 68, 69] as Array, prefix: 42 as Prefix };