aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFabio Berger <me@fabioberger.com>2017-05-25 19:19:46 +0800
committerFabio Berger <me@fabioberger.com>2017-05-25 19:19:46 +0800
commit12aa9a29e4367ab79d42cc00f97955bc1c099d24 (patch)
tree3cb0d524490a4f3dd15eced55cc1ba59ecb644e6 /src
parentb1a6c895cc095b39c263ff508d98395b1b901dc6 (diff)
downloaddexon-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.ts26
-rw-r--r--src/ts/globals.d.ts13
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;