Calculate the remaining order amount in maker units

This commit is contained in:
Jacob Evans
2017-11-12 11:28:01 -05:00
parent abb23631df
commit 3e2a614eb9
3 changed files with 19 additions and 0 deletions

View File

@@ -493,6 +493,7 @@ export interface OrderRelevantState {
makerFeeProxyAllowance: BigNumber;
filledTakerTokenAmount: BigNumber;
canceledTakerTokenAmount: BigNumber;
remainingFillableMakerTokenAmount: BigNumber;
}
export interface OrderStateValid {

View File

@@ -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;
}

View File

@@ -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();