Calculate the remaining order amount in maker units
This commit is contained in:
@@ -493,6 +493,7 @@ export interface OrderRelevantState {
|
|||||||
makerFeeProxyAllowance: BigNumber;
|
makerFeeProxyAllowance: BigNumber;
|
||||||
filledTakerTokenAmount: BigNumber;
|
filledTakerTokenAmount: BigNumber;
|
||||||
canceledTakerTokenAmount: BigNumber;
|
canceledTakerTokenAmount: BigNumber;
|
||||||
|
remainingFillableMakerTokenAmount: BigNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface OrderStateValid {
|
export interface OrderStateValid {
|
||||||
|
|||||||
@@ -60,6 +60,21 @@ export class OrderStateUtils {
|
|||||||
);
|
);
|
||||||
const filledTakerTokenAmount = await this.exchangeWrapper.getFilledTakerAmountAsync(orderHash, methodOpts);
|
const filledTakerTokenAmount = await this.exchangeWrapper.getFilledTakerAmountAsync(orderHash, methodOpts);
|
||||||
const canceledTakerTokenAmount = await this.exchangeWrapper.getCanceledTakerAmountAsync(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 = {
|
const orderRelevantState = {
|
||||||
makerBalance,
|
makerBalance,
|
||||||
makerProxyAllowance,
|
makerProxyAllowance,
|
||||||
@@ -67,6 +82,7 @@ export class OrderStateUtils {
|
|||||||
makerFeeProxyAllowance,
|
makerFeeProxyAllowance,
|
||||||
filledTakerTokenAmount,
|
filledTakerTokenAmount,
|
||||||
canceledTakerTokenAmount,
|
canceledTakerTokenAmount,
|
||||||
|
remainingFillableMakerTokenAmount,
|
||||||
};
|
};
|
||||||
return orderRelevantState;
|
return orderRelevantState;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -189,6 +189,8 @@ describe('OrderStateWatcher', () => {
|
|||||||
expect(validOrderState.orderHash).to.be.equal(orderHash);
|
expect(validOrderState.orderHash).to.be.equal(orderHash);
|
||||||
const orderRelevantState = validOrderState.orderRelevantState;
|
const orderRelevantState = validOrderState.orderRelevantState;
|
||||||
const remainingMakerBalance = makerBalance.sub(fillAmountInBaseUnits);
|
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);
|
expect(orderRelevantState.makerBalance).to.be.bignumber.equal(remainingMakerBalance);
|
||||||
if (eventCount === 2) {
|
if (eventCount === 2) {
|
||||||
done();
|
done();
|
||||||
|
|||||||
Reference in New Issue
Block a user