diff options
author | Fabio Berger <me@fabioberger.com> | 2018-05-16 20:59:10 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2018-05-16 20:59:10 +0800 |
commit | 839db68571037f6fff8273aaade6ea0bd14ea8a5 (patch) | |
tree | 302b3164f01bc5363bf07841a42fa30b3842169e /packages/order-utils/src | |
parent | fec6ac3ff0c4781cea0b3f42e287aee2b8aa2a79 (diff) | |
download | dexon-0x-contracts-839db68571037f6fff8273aaade6ea0bd14ea8a5.tar.gz dexon-0x-contracts-839db68571037f6fff8273aaade6ea0bd14ea8a5.tar.zst dexon-0x-contracts-839db68571037f6fff8273aaade6ea0bd14ea8a5.zip |
Fix TSLint rules
Diffstat (limited to 'packages/order-utils/src')
-rw-r--r-- | packages/order-utils/src/order_hash.ts | 3 | ||||
-rw-r--r-- | packages/order-utils/src/signature_utils.ts | 17 |
2 files changed, 15 insertions, 5 deletions
diff --git a/packages/order-utils/src/order_hash.ts b/packages/order-utils/src/order_hash.ts index 1cde72a73..108344a04 100644 --- a/packages/order-utils/src/order_hash.ts +++ b/packages/order-utils/src/order_hash.ts @@ -17,7 +17,8 @@ const INVALID_TAKER_FORMAT = 'instance.taker is not of a type(s) string'; * We do not use BN anywhere else in the codebase. */ function bigNumberToBN(value: BigNumber): BN { - return new BN(value.toString(), 10); + const base = 10; + return new BN(value.toString(), base); } /** diff --git a/packages/order-utils/src/signature_utils.ts b/packages/order-utils/src/signature_utils.ts index b511573a8..28a8e7241 100644 --- a/packages/order-utils/src/signature_utils.ts +++ b/packages/order-utils/src/signature_utils.ts @@ -72,6 +72,7 @@ export async function signOrderHashAsync( // v + r + s OR r + s + v, and different clients (even different versions of the same client) // return the signature params in different orders. In order to support all client implementations, // we parse the signature in both ways, and evaluate if either one is a valid signature. + // tslint:disable-next-line:custom-no-magic-numbers const validVParamValues = [27, 28]; const ecSignatureVRS = parseSignatureHexAsVRS(signature); if (_.includes(validVParamValues, ecSignatureVRS.v)) { @@ -95,11 +96,19 @@ export async function signOrderHashAsync( function parseSignatureHexAsVRS(signatureHex: string): ECSignature { const signatureBuffer = ethUtil.toBuffer(signatureHex); let v = signatureBuffer[0]; - if (v < 27) { - v += 27; + // HACK: Sometimes v is returned as [0, 1] and sometimes as [27, 28] + // If it is returned as [0, 1], add 27 to both so it becomes [27, 28] + const lowestValidV = 27; + const isProperlyFormattedV = v < lowestValidV; + if (!isProperlyFormattedV) { + v += lowestValidV; } - const r = signatureBuffer.slice(1, 33); - const s = signatureBuffer.slice(33, 65); + // signatureBuffer contains vrs + const vEndIndex = 1; + const rsIndex = 33; + const r = signatureBuffer.slice(vEndIndex, rsIndex); + const sEndIndex = 65; + const s = signatureBuffer.slice(rsIndex, sEndIndex); const ecSignature: ECSignature = { v, r: ethUtil.bufferToHex(r), |