aboutsummaryrefslogtreecommitdiffstats
path: root/packages/order-utils/src/rate_utils.ts
diff options
context:
space:
mode:
authorBrandon Millman <brandon.millman@gmail.com>2018-08-15 04:48:21 +0800
committerBrandon Millman <brandon.millman@gmail.com>2018-08-15 04:48:21 +0800
commit9c3d10d5be40abe86cb24ec437946707167c19ff (patch)
treeecdc085c2439090728e8816687357cf489320dd3 /packages/order-utils/src/rate_utils.ts
parent6a2634d362e50e5a611f388c0785df3209cee308 (diff)
parent3afe405bbe92f9c549a59f26b9c82654f0e304c4 (diff)
downloaddexon-sol-tools-9c3d10d5be40abe86cb24ec437946707167c19ff.tar
dexon-sol-tools-9c3d10d5be40abe86cb24ec437946707167c19ff.tar.gz
dexon-sol-tools-9c3d10d5be40abe86cb24ec437946707167c19ff.tar.bz2
dexon-sol-tools-9c3d10d5be40abe86cb24ec437946707167c19ff.tar.lz
dexon-sol-tools-9c3d10d5be40abe86cb24ec437946707167c19ff.tar.xz
dexon-sol-tools-9c3d10d5be40abe86cb24ec437946707167c19ff.tar.zst
dexon-sol-tools-9c3d10d5be40abe86cb24ec437946707167c19ff.zip
Merge branch 'development' into refactor/order-utils/market-utils-api
* development: feat: Upgrade TypeScript to 3.0.1 Add defaults for networkId and pagination Update sortingUtils to support Order and SignedOrder Change rateUtils to use Order Updated CHANGELOG Fix lint errors Update tests for optional feeRate Make feeRate optional with a default of 0 Add tests for sortingUtils Implement sorting utils Add tests for rateUtils Implement rate utils
Diffstat (limited to 'packages/order-utils/src/rate_utils.ts')
-rw-r--r--packages/order-utils/src/rate_utils.ts48
1 files changed, 48 insertions, 0 deletions
diff --git a/packages/order-utils/src/rate_utils.ts b/packages/order-utils/src/rate_utils.ts
new file mode 100644
index 000000000..c9ca72c59
--- /dev/null
+++ b/packages/order-utils/src/rate_utils.ts
@@ -0,0 +1,48 @@
+import { schemas } from '@0xproject/json-schemas';
+import { Order } from '@0xproject/types';
+import { BigNumber } from '@0xproject/utils';
+
+import { assert } from './assert';
+import { constants } from './constants';
+
+export const rateUtils = {
+ /**
+ * Takes an order and calculates the fee adjusted rate (takerAsset/makerAsset) by calculating how much takerAsset
+ * is required to cover the fees (feeRate * takerFee), adding the takerAssetAmount and dividing by makerAssetAmount
+ * @param order An object that conforms to the order interface
+ * @param feeRate The market rate of ZRX denominated in takerAssetAmount
+ * (ex. feeRate is 0.1 takerAsset/ZRX if it takes 1 unit of takerAsset to buy 10 ZRX)
+ * Defaults to 0
+ * @return The rate (takerAsset/makerAsset) of the order adjusted for fees
+ */
+ getFeeAdjustedRateOfOrder(order: Order, feeRate: BigNumber = constants.ZERO_AMOUNT): BigNumber {
+ assert.doesConformToSchema('order', order, schemas.orderSchema);
+ assert.isBigNumber('feeRate', feeRate);
+ assert.assert(
+ feeRate.gte(constants.ZERO_AMOUNT),
+ `Expected feeRate: ${feeRate} to be greater than or equal to 0`,
+ );
+ const takerAssetAmountNeededToPayForFees = order.takerFee.mul(feeRate);
+ const totalTakerAssetAmount = takerAssetAmountNeededToPayForFees.plus(order.takerAssetAmount);
+ const rate = totalTakerAssetAmount.div(order.makerAssetAmount);
+ return rate;
+ },
+ /**
+ * Takes a fee order (makerAssetData corresponds to ZRX and takerAssetData corresponds to WETH) and calculates
+ * the fee adjusted rate (WETH/ZRX) by dividing the takerAssetAmount by the makerAmount minus the takerFee
+ * @param feeOrder An object that conforms to the order interface
+ * @return The rate (WETH/ZRX) of the fee order adjusted for fees
+ */
+ getFeeAdjustedRateOfFeeOrder(feeOrder: Order): BigNumber {
+ assert.doesConformToSchema('feeOrder', feeOrder, schemas.orderSchema);
+ const zrxAmountAfterFees = feeOrder.makerAssetAmount.sub(feeOrder.takerFee);
+ assert.assert(
+ zrxAmountAfterFees.greaterThan(constants.ZERO_AMOUNT),
+ `Expected takerFee: ${JSON.stringify(feeOrder.takerFee)} to be less than makerAssetAmount: ${JSON.stringify(
+ feeOrder.makerAssetAmount,
+ )}`,
+ );
+ const rate = feeOrder.takerAssetAmount.div(zrxAmountAfterFees);
+ return rate;
+ },
+};