aboutsummaryrefslogtreecommitdiffstats
path: root/src/ts/0x.js.ts
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2017-05-25 23:24:29 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2017-05-25 23:24:29 +0800
commitf2f39d9eb2822b71aa7c5cf6f3b2ef006a83ad03 (patch)
treec2a474aebcbdc93834afc1374908fbf4677d2381 /src/ts/0x.js.ts
parentf7b8378a6eb4b4c6c3461ff677723869c67a4753 (diff)
downloaddexon-sol-tools-f2f39d9eb2822b71aa7c5cf6f3b2ef006a83ad03.tar
dexon-sol-tools-f2f39d9eb2822b71aa7c5cf6f3b2ef006a83ad03.tar.gz
dexon-sol-tools-f2f39d9eb2822b71aa7c5cf6f3b2ef006a83ad03.tar.bz2
dexon-sol-tools-f2f39d9eb2822b71aa7c5cf6f3b2ef006a83ad03.tar.lz
dexon-sol-tools-f2f39d9eb2822b71aa7c5cf6f3b2ef006a83ad03.tar.xz
dexon-sol-tools-f2f39d9eb2822b71aa7c5cf6f3b2ef006a83ad03.tar.zst
dexon-sol-tools-f2f39d9eb2822b71aa7c5cf6f3b2ef006a83ad03.zip
Port getOrderHash
Diffstat (limited to 'src/ts/0x.js.ts')
-rw-r--r--src/ts/0x.js.ts40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/ts/0x.js.ts b/src/ts/0x.js.ts
index ead1f56df..82dbce22d 100644
--- a/src/ts/0x.js.ts
+++ b/src/ts/0x.js.ts
@@ -1,8 +1,12 @@
import * as BigNumber from 'bignumber.js';
+import * as BN from 'bn.js';
import * as ethUtil from 'ethereumjs-util';
+import * as ethABI from 'ethereumjs-abi';
import * as _ from 'lodash';
+import {constants} from './utils/constants';
import {assert} from './utils/assert';
import {ECSignatureSchema} from './schemas/ec_signature_schema';
+import {SolidityTypes} from './types';
/**
* Elliptic Curve signature
@@ -16,6 +20,42 @@ export interface ECSignature {
const MAX_DIGITS_IN_UNSIGNED_256_INT = 78;
export class ZeroEx {
+ public static getOrderHash(exchangeContractAddr: string, makerAddr: string, takerAddr: string,
+ depositTokenAddr: string, receiveTokenAddr: string, feeRecipient: string,
+ depositAmt: BigNumber.BigNumber, receiveAmt: BigNumber.BigNumber,
+ makerFee: BigNumber.BigNumber, takerFee: BigNumber.BigNumber,
+ expiration: BigNumber.BigNumber, salt: BigNumber.BigNumber): string {
+ takerAddr = takerAddr !== '' ? takerAddr : constants.NULL_ADDRESS;
+ assert.isETHAddressHex('exchangeContractAddr', exchangeContractAddr);
+ assert.isETHAddressHex('makerAddr', makerAddr);
+ assert.isETHAddressHex('takerAddr', takerAddr);
+ assert.isETHAddressHex('depositTokenAddr', depositTokenAddr);
+ assert.isETHAddressHex('receiveTokenAddr', receiveTokenAddr);
+ assert.isETHAddressHex('feeRecipient', feeRecipient);
+ assert.isBigNumber('depositAmt', depositAmt);
+ assert.isBigNumber('receiveAmt', receiveAmt);
+ assert.isBigNumber('makerFee', makerFee);
+ assert.isBigNumber('takerFee', takerFee);
+ assert.isBigNumber('expiration', expiration);
+ assert.isBigNumber('salt', salt);
+ const orderParts = [
+ {value: exchangeContractAddr, type: SolidityTypes.address},
+ {value: makerAddr, type: SolidityTypes.address},
+ {value: takerAddr, type: SolidityTypes.address},
+ {value: depositTokenAddr, type: SolidityTypes.address},
+ {value: receiveTokenAddr, type: SolidityTypes.address},
+ {value: feeRecipient, type: SolidityTypes.address},
+ {value: new BN(depositAmt.toString(), 10), type: SolidityTypes.uint256},
+ {value: new BN(receiveAmt.toString(), 10), type: SolidityTypes.uint256},
+ {value: new BN(makerFee.toString(), 10), type: SolidityTypes.uint256},
+ {value: new BN(takerFee.toString(), 10), type: SolidityTypes.uint256},
+ {value: new BN(expiration.toString(), 10), type: SolidityTypes.uint256},
+ {value: new BN(salt.toString(), 10), type: SolidityTypes.uint256},
+ ];
+ const hashBuff = ethABI.soliditySHA3(_.map(orderParts, 'type'), _.map(orderParts, 'value'));
+ const buffHashHex = ethUtil.bufferToHex(hashBuff);
+ return buffHashHex;
+ }
/**
* Verifies that the elliptic curve signature `signature` was generated
* by signing `data` with the private key corresponding to the `signerAddressHex` address.