Don't wrap/unwrap Ethereum-style (#748)
* Don't wrap/unwrap Ethereum-style * Update packages/extension-dapp/src/wrapBytes.spec.ts
This commit is contained in:
parent
33331a0138
commit
aa9b7c959c
@ -3,9 +3,10 @@
|
|||||||
|
|
||||||
import { u8aConcat, u8aEq, u8aToString } from '@polkadot/util';
|
import { u8aConcat, u8aEq, u8aToString } from '@polkadot/util';
|
||||||
|
|
||||||
import { POSTFIX, PREFIX, unwrapBytes, wrapBytes } from './wrapBytes';
|
import { ETHEREUM, POSTFIX, PREFIX, unwrapBytes, wrapBytes } from './wrapBytes';
|
||||||
|
|
||||||
const TEST_DATA = 'this is just some random message that we expect to be wrapped along the way';
|
const TEST_DATA = 'this is just some random message that we expect to be wrapped along the way';
|
||||||
|
const TEST_ETH = u8aConcat(ETHEREUM, TEST_DATA);
|
||||||
const TEST_WRAP_EMPTY = `${u8aToString(PREFIX)}${u8aToString(POSTFIX)}`;
|
const TEST_WRAP_EMPTY = `${u8aToString(PREFIX)}${u8aToString(POSTFIX)}`;
|
||||||
const TEST_WRAP_FULL = `${u8aToString(PREFIX)}${TEST_DATA}${u8aToString(POSTFIX)}`;
|
const TEST_WRAP_FULL = `${u8aToString(PREFIX)}${TEST_DATA}${u8aToString(POSTFIX)}`;
|
||||||
const TEST_WARP_HALF_PRE = `${u8aToString(PREFIX)}${TEST_DATA}`;
|
const TEST_WARP_HALF_PRE = `${u8aToString(PREFIX)}${TEST_DATA}`;
|
||||||
@ -111,4 +112,24 @@ describe('unwrapBytes', (): void => {
|
|||||||
)
|
)
|
||||||
).toEqual('');
|
).toEqual('');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('Ethereum-style', (): void => {
|
||||||
|
it('does not wrap an Ethereum wrap', (): void => {
|
||||||
|
expect(
|
||||||
|
u8aEq(
|
||||||
|
wrapBytes(TEST_ETH),
|
||||||
|
TEST_ETH
|
||||||
|
)
|
||||||
|
).toBe(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not unwrap an Ethereum wrap', (): void => {
|
||||||
|
expect(
|
||||||
|
u8aEq(
|
||||||
|
unwrapBytes(TEST_ETH),
|
||||||
|
TEST_ETH
|
||||||
|
)
|
||||||
|
).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -3,21 +3,32 @@
|
|||||||
|
|
||||||
import { u8aConcat, u8aEq, u8aToU8a } from '@polkadot/util';
|
import { u8aConcat, u8aEq, u8aToU8a } from '@polkadot/util';
|
||||||
|
|
||||||
|
export const ETHEREUM = u8aToU8a('\x19Ethereum Signed Message:\n');
|
||||||
export const PREFIX = u8aToU8a('<Bytes>');
|
export const PREFIX = u8aToU8a('<Bytes>');
|
||||||
export const POSTFIX = u8aToU8a('</Bytes>');
|
export const POSTFIX = u8aToU8a('</Bytes>');
|
||||||
|
|
||||||
const WRAP_LEN = PREFIX.length + POSTFIX.length;
|
const WRAP_LEN = PREFIX.length + POSTFIX.length;
|
||||||
|
|
||||||
function isWrapped (u8a: Uint8Array): boolean {
|
function isWrapped (u8a: Uint8Array, withEthereum: boolean): boolean {
|
||||||
return u8a.length >= WRAP_LEN &&
|
return (
|
||||||
u8aEq(u8a.subarray(0, PREFIX.length), PREFIX) &&
|
(
|
||||||
u8aEq(u8a.slice(-POSTFIX.length), POSTFIX);
|
u8a.length >= WRAP_LEN &&
|
||||||
|
u8aEq(u8a.subarray(0, PREFIX.length), PREFIX) &&
|
||||||
|
u8aEq(u8a.slice(-POSTFIX.length), POSTFIX)
|
||||||
|
) ||
|
||||||
|
(
|
||||||
|
withEthereum &&
|
||||||
|
u8a.length >= ETHEREUM.length &&
|
||||||
|
u8aEq(u8a.subarray(0, ETHEREUM.length), ETHEREUM)
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function unwrapBytes (bytes: string | Uint8Array): Uint8Array {
|
export function unwrapBytes (bytes: string | Uint8Array): Uint8Array {
|
||||||
const u8a = u8aToU8a(bytes);
|
const u8a = u8aToU8a(bytes);
|
||||||
|
|
||||||
return isWrapped(u8a)
|
// we don't want to unwrap Ethereum-style wraps
|
||||||
|
return isWrapped(u8a, false)
|
||||||
? u8a.subarray(PREFIX.length, u8a.length - POSTFIX.length)
|
? u8a.subarray(PREFIX.length, u8a.length - POSTFIX.length)
|
||||||
: u8a;
|
: u8a;
|
||||||
}
|
}
|
||||||
@ -25,7 +36,8 @@ export function unwrapBytes (bytes: string | Uint8Array): Uint8Array {
|
|||||||
export function wrapBytes (bytes: string | Uint8Array): Uint8Array {
|
export function wrapBytes (bytes: string | Uint8Array): Uint8Array {
|
||||||
const u8a = u8aToU8a(bytes);
|
const u8a = u8aToU8a(bytes);
|
||||||
|
|
||||||
return isWrapped(u8a)
|
// if Ethereum-wrapping, we don't add our wrapping bytes
|
||||||
|
return isWrapped(u8a, true)
|
||||||
? u8a
|
? u8a
|
||||||
: u8aConcat(PREFIX, u8a, POSTFIX);
|
: u8aConcat(PREFIX, u8a, POSTFIX);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user