fix bug when fees and partial asymmetric
This commit is contained in:
@@ -131,7 +131,7 @@ export class OrderStateUtils {
|
|||||||
return BigNumber.min(remainingMakerAmount, transferrableMakerTokenAmount);
|
return BigNumber.min(remainingMakerAmount, transferrableMakerTokenAmount);
|
||||||
} else if (transferrableMakerTokenAmount.gte(remainingMakerAmount) &&
|
} else if (transferrableMakerTokenAmount.gte(remainingMakerAmount) &&
|
||||||
transferrableMakerFeeTokenAmount.gte(remainingMakerFeeAmount)) {
|
transferrableMakerFeeTokenAmount.gte(remainingMakerFeeAmount)) {
|
||||||
return transferrableMakerTokenAmount;
|
return remainingMakerAmount;
|
||||||
} else {
|
} else {
|
||||||
return this.calculatePartiallyFillableMakerTokenAmount(
|
return this.calculatePartiallyFillableMakerTokenAmount(
|
||||||
transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount,
|
transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount,
|
||||||
|
|||||||
@@ -321,6 +321,32 @@ describe('OrderStateWatcher', () => {
|
|||||||
makerToken.address, maker, ZeroEx.NULL_ADDRESS, transferAmount);
|
makerToken.address, maker, ZeroEx.NULL_ADDRESS, transferAmount);
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
});
|
});
|
||||||
|
it('should equal remaining amount when partially cancelled and order has fees', (done: DoneCallback) => {
|
||||||
|
(async () => {
|
||||||
|
const takerFee = ZeroEx.toBaseUnitAmount(new BigNumber(0), 18);
|
||||||
|
const makerFee = ZeroEx.toBaseUnitAmount(new BigNumber(5), 18);
|
||||||
|
const feeRecipient = taker;
|
||||||
|
signedOrder = await fillScenarios.createFillableSignedOrderWithFeesAsync(
|
||||||
|
makerToken.address, takerToken.address, makerFee, takerFee, maker,
|
||||||
|
taker, fillableAmount, feeRecipient);
|
||||||
|
|
||||||
|
const makerBalance = await zeroEx.token.getBalanceAsync(makerToken.address, maker);
|
||||||
|
|
||||||
|
const remainingTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(4), 18);
|
||||||
|
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
|
||||||
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
|
const callback = reportCallbackErrors(done)((orderState: OrderState) => {
|
||||||
|
const validOrderState = orderState as OrderStateValid;
|
||||||
|
const orderRelevantState = validOrderState.orderRelevantState;
|
||||||
|
expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
|
||||||
|
remainingTokenAmount);
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
zeroEx.orderStateWatcher.subscribe(callback);
|
||||||
|
await zeroEx.exchange.cancelOrderAsync(signedOrder, transferTokenAmount);
|
||||||
|
})().catch(done);
|
||||||
|
});
|
||||||
it('should equal ratio amount when fee balance is lowered', (done: DoneCallback) => {
|
it('should equal ratio amount when fee balance is lowered', (done: DoneCallback) => {
|
||||||
(async () => {
|
(async () => {
|
||||||
const takerFee = ZeroEx.toBaseUnitAmount(new BigNumber(0), 18);
|
const takerFee = ZeroEx.toBaseUnitAmount(new BigNumber(0), 18);
|
||||||
|
|||||||
Reference in New Issue
Block a user