diff options
author | Fabio Berger <me@fabioberger.com> | 2017-11-14 01:52:08 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-14 01:52:08 +0800 |
commit | 58a318b754c3d3d854e36f4b56b37f7de8c0913a (patch) | |
tree | d8e3e52fe55e1c3c4e90299708fa8197f9b2002e /packages/0x.js/src/utils/utils.ts | |
parent | a74ec0effa818a86233fe64cb0dad2c61bbb4bb6 (diff) | |
parent | ff07f490025447ff11bbdb68ef46304e981f5696 (diff) | |
download | dexon-sol-tools-58a318b754c3d3d854e36f4b56b37f7de8c0913a.tar dexon-sol-tools-58a318b754c3d3d854e36f4b56b37f7de8c0913a.tar.gz dexon-sol-tools-58a318b754c3d3d854e36f4b56b37f7de8c0913a.tar.bz2 dexon-sol-tools-58a318b754c3d3d854e36f4b56b37f7de8c0913a.tar.lz dexon-sol-tools-58a318b754c3d3d854e36f4b56b37f7de8c0913a.tar.xz dexon-sol-tools-58a318b754c3d3d854e36f4b56b37f7de8c0913a.tar.zst dexon-sol-tools-58a318b754c3d3d854e36f4b56b37f7de8c0913a.zip |
Merge pull request #214 from 0xProject/monoRepo
Switch over to Lerna + Yarn Workspaces setup for a mono-repo approach
Diffstat (limited to 'packages/0x.js/src/utils/utils.ts')
-rw-r--r-- | packages/0x.js/src/utils/utils.ts | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/packages/0x.js/src/utils/utils.ts b/packages/0x.js/src/utils/utils.ts new file mode 100644 index 000000000..280f3e979 --- /dev/null +++ b/packages/0x.js/src/utils/utils.ts @@ -0,0 +1,55 @@ +import * as _ from 'lodash'; +import * as ethABI from 'ethereumjs-abi'; +import * as ethUtil from 'ethereumjs-util'; +import {Order, SignedOrder, SolidityTypes} from '../types'; +import BigNumber from 'bignumber.js'; +import BN = require('bn.js'); + +export const utils = { + /** + * Converts BigNumber instance to BN + * The only reason we convert to BN is to remain compatible with `ethABI. soliditySHA3` that + * expects values of Solidity type `uint` to be passed as type `BN`. + * We do not use BN anywhere else in the codebase. + */ + bigNumberToBN(value: BigNumber) { + return new BN(value.toString(), 10); + }, + consoleLog(message: string): void { + // tslint:disable-next-line: no-console + console.log(message); + }, + isParityNode(nodeVersion: string): boolean { + return _.includes(nodeVersion, 'Parity'); + }, + isTestRpc(nodeVersion: string): boolean { + return _.includes(nodeVersion, 'TestRPC'); + }, + spawnSwitchErr(name: string, value: any): Error { + return new Error(`Unexpected switch value: ${value} encountered for ${name}`); + }, + getOrderHashHex(order: Order|SignedOrder): string { + const orderParts = [ + {value: order.exchangeContractAddress, type: SolidityTypes.Address}, + {value: order.maker, type: SolidityTypes.Address}, + {value: order.taker, type: SolidityTypes.Address}, + {value: order.makerTokenAddress, type: SolidityTypes.Address}, + {value: order.takerTokenAddress, type: SolidityTypes.Address}, + {value: order.feeRecipient, type: SolidityTypes.Address}, + {value: utils.bigNumberToBN(order.makerTokenAmount), type: SolidityTypes.Uint256}, + {value: utils.bigNumberToBN(order.takerTokenAmount), type: SolidityTypes.Uint256}, + {value: utils.bigNumberToBN(order.makerFee), type: SolidityTypes.Uint256}, + {value: utils.bigNumberToBN(order.takerFee), type: SolidityTypes.Uint256}, + {value: utils.bigNumberToBN(order.expirationUnixTimestampSec), type: SolidityTypes.Uint256}, + {value: utils.bigNumberToBN(order.salt), type: SolidityTypes.Uint256}, + ]; + const types = _.map(orderParts, o => o.type); + const values = _.map(orderParts, o => o.value); + const hashBuff = ethABI.soliditySHA3(types, values); + const hashHex = ethUtil.bufferToHex(hashBuff); + return hashHex; + }, + getCurrentUnixTimestamp(): BigNumber { + return new BigNumber(Date.now() / 1000); + }, +}; |