diff options
author | Jacob Evans <jacob@dekz.net> | 2017-11-13 00:28:01 +0800 |
---|---|---|
committer | Jacob Evans <jacob@dekz.net> | 2017-11-13 00:28:01 +0800 |
commit | 3e2a614eb9a4f1219e2f11ea29c8a7cd59dd74dd (patch) | |
tree | 37f4c3dc2344607737e5da3d79ed5cf0c3bb5ffd | |
parent | abb23631df4fd775d2f9c96332e16c0732b2955e (diff) | |
download | dexon-0x-contracts-3e2a614eb9a4f1219e2f11ea29c8a7cd59dd74dd.tar.gz dexon-0x-contracts-3e2a614eb9a4f1219e2f11ea29c8a7cd59dd74dd.tar.zst dexon-0x-contracts-3e2a614eb9a4f1219e2f11ea29c8a7cd59dd74dd.zip |
Calculate the remaining order amount in maker units
-rw-r--r-- | src/types.ts | 1 | ||||
-rw-r--r-- | src/utils/order_state_utils.ts | 16 | ||||
-rw-r--r-- | test/order_state_watcher_test.ts | 2 |
3 files changed, 19 insertions, 0 deletions
diff --git a/src/types.ts b/src/types.ts index 160b71fda..a366fc31e 100644 --- a/src/types.ts +++ b/src/types.ts @@ -493,6 +493,7 @@ export interface OrderRelevantState { makerFeeProxyAllowance: BigNumber; filledTakerTokenAmount: BigNumber; canceledTakerTokenAmount: BigNumber; + remainingFillableMakerTokenAmount: BigNumber; } export interface OrderStateValid { diff --git a/src/utils/order_state_utils.ts b/src/utils/order_state_utils.ts index 2a5becf9a..ff5c1880d 100644 --- a/src/utils/order_state_utils.ts +++ b/src/utils/order_state_utils.ts @@ -60,6 +60,21 @@ export class OrderStateUtils { ); const filledTakerTokenAmount = await this.exchangeWrapper.getFilledTakerAmountAsync(orderHash, methodOpts); const canceledTakerTokenAmount = await this.exchangeWrapper.getCanceledTakerAmountAsync(orderHash, methodOpts); + const unavailableTakerTokenAmount = + await this.exchangeWrapper.getUnavailableTakerAmountAsync(orderHash, methodOpts); + const totalMakerTokenAmount = signedOrder.makerTokenAmount; + const totalTakerTokenAmount = signedOrder.takerTokenAmount; + const remainingTakerTokenAmount = totalTakerTokenAmount.minus(unavailableTakerTokenAmount); + // 200 in order, 100 unavailable = 100 remaning, 0.5 remaning proportion + const remainingTakerProportion = remainingTakerTokenAmount.dividedBy(totalTakerTokenAmount); + const remainingMakerTokenAmount = remainingTakerProportion.times(totalMakerTokenAmount); + // min allowance, balance in account of maker + const fillableMakerTokenAmount = BigNumber.min([makerProxyAllowance, makerBalance]); + // min ^, remaining order maker token amount + const remainingFillableMakerTokenAmount = BigNumber.min(fillableMakerTokenAmount, remainingMakerTokenAmount); + // TODO + // edge case when maker token is ZRX + // rounding issues, check if its fillabae const orderRelevantState = { makerBalance, makerProxyAllowance, @@ -67,6 +82,7 @@ export class OrderStateUtils { makerFeeProxyAllowance, filledTakerTokenAmount, canceledTakerTokenAmount, + remainingFillableMakerTokenAmount, }; return orderRelevantState; } diff --git a/test/order_state_watcher_test.ts b/test/order_state_watcher_test.ts index 3421353e3..039bcef18 100644 --- a/test/order_state_watcher_test.ts +++ b/test/order_state_watcher_test.ts @@ -189,6 +189,8 @@ describe('OrderStateWatcher', () => { expect(validOrderState.orderHash).to.be.equal(orderHash); const orderRelevantState = validOrderState.orderRelevantState; const remainingMakerBalance = makerBalance.sub(fillAmountInBaseUnits); + const remainingFillable = fillableAmount.minus(fillAmountInBaseUnits); + expect(remainingFillable).to.be.bignumber.equal(fillableAmount.minus(fillAmountInBaseUnits)); expect(orderRelevantState.makerBalance).to.be.bignumber.equal(remainingMakerBalance); if (eventCount === 2) { done(); |