diff options
author | Fabio Berger <me@fabioberger.com> | 2017-05-25 19:19:46 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2017-05-25 19:19:46 +0800 |
commit | 12aa9a29e4367ab79d42cc00f97955bc1c099d24 (patch) | |
tree | 3cb0d524490a4f3dd15eced55cc1ba59ecb644e6 /src | |
parent | b1a6c895cc095b39c263ff508d98395b1b901dc6 (diff) | |
download | dexon-0x-contracts-12aa9a29e4367ab79d42cc00f97955bc1c099d24.tar.gz dexon-0x-contracts-12aa9a29e4367ab79d42cc00f97955bc1c099d24.tar.zst dexon-0x-contracts-12aa9a29e4367ab79d42cc00f97955bc1c099d24.zip |
Add toUnitAmount and toBaseUnitAmount static helpers and tests
Diffstat (limited to 'src')
-rw-r--r-- | src/ts/0x.js.ts | 26 | ||||
-rw-r--r-- | src/ts/globals.d.ts | 13 |
2 files changed, 39 insertions, 0 deletions
diff --git a/src/ts/0x.js.ts b/src/ts/0x.js.ts index 1cc2d8b44..b71c691d5 100644 --- a/src/ts/0x.js.ts +++ b/src/ts/0x.js.ts @@ -50,4 +50,30 @@ export class ZeroEx { const salt = randomNumber.times(factor).round(); return salt; } + /* + * A unit amount is defined as the amount of a token above the specified decimal places (integer part). + * E.g: If a currency has 18 decimal places, 1e18 or one quintillion of the currency is equivalent + * to 1 unit. + */ + public static toUnitAmount(amount: BigNumber.BigNumber, decimals: number): BigNumber.BigNumber { + assert.isBigNumber('amount', amount); + assert.isNumber('decimals', decimals); + + const aUnit = new BigNumber(10).pow(decimals); + const unit = amount.div(aUnit); + return unit; + } + /* + * A baseUnit is defined as the smallest denomination of a token. An amount expressed in baseUnits + * is the amount expressed in the smallest denomination. + * E.g: 1 unit of a token with 18 decimal places is expressed in baseUnits as 1000000000000000000 + */ + public static toBaseUnitAmount(amount: BigNumber.BigNumber, decimals: number): BigNumber.BigNumber { + assert.isBigNumber('amount', amount); + assert.isNumber('decimals', decimals); + + const unit = new BigNumber(10).pow(decimals); + const baseUnitAmount = amount.times(unit); + return baseUnitAmount; + } } diff --git a/src/ts/globals.d.ts b/src/ts/globals.d.ts index 659638a1e..974b4b26d 100644 --- a/src/ts/globals.d.ts +++ b/src/ts/globals.d.ts @@ -1,3 +1,5 @@ +declare module 'chai-bignumber'; + declare type ETHPublicKey = string; declare type ETHAddressHex = string; declare type ETHAddressBuff = Buffer; @@ -6,6 +8,17 @@ declare interface Schema { id: string; } +// HACK: In order to merge the bignumber declaration added by chai-bignumber to the chai Assertion +// interface we must use `namespace` as the Chai definitelyTyped definition does. Since we otherwise +// disallow `namespace`, we disable tslint for the following. +/* tslint:disable */ +declare namespace Chai { + interface Assertion { + bignumber: Assertion; + } +} +/* tslint:enable */ + declare module 'ethereumjs-util' { const toBuffer: (data: string) => Buffer; const hashPersonalMessage: (msg: Buffer) => Buffer; |