Fixes before refactor

This commit is contained in:
Jacob Evans 2017-11-21 09:50:37 +11:00
parent d6589004c7
commit fb812d59b0

View File

@ -78,14 +78,14 @@ export class OrderStateUtils {
const remainingTakerTokenAmount = totalTakerTokenAmount.minus(unavailableTakerTokenAmount); const remainingTakerTokenAmount = totalTakerTokenAmount.minus(unavailableTakerTokenAmount);
const remainingMakerTokenAmount = remainingTakerTokenAmount.times(totalMakerTokenAmount) const remainingMakerTokenAmount = remainingTakerTokenAmount.times(totalMakerTokenAmount)
.dividedToIntegerBy(totalTakerTokenAmount); .dividedToIntegerBy(totalTakerTokenAmount);
const remainingFeeTokenAmount = remainingTakerTokenAmount.times(signedOrder.makerFee) const remainingMakerFeeAmount = remainingTakerTokenAmount.times(signedOrder.makerFee)
.dividedToIntegerBy(totalTakerTokenAmount); .dividedToIntegerBy(totalTakerTokenAmount);
const transferrableMakerTokenAmount = BigNumber.min([makerProxyAllowance, makerBalance]); const transferrableMakerTokenAmount = BigNumber.min([makerProxyAllowance, makerBalance]);
const transferrableFeeTokenAmount = BigNumber.min([makerFeeProxyAllowance, makerFeeBalance]); const transferrableFeeTokenAmount = BigNumber.min([makerFeeProxyAllowance, makerFeeBalance]);
const remainingFillableMakerTokenAmount = this.calculateRemainingMakerTokenAmount( const remainingFillableMakerTokenAmount = this.calculateRemainingMakerTokenAmount(
transferrableMakerTokenAmount, transferrableFeeTokenAmount, remainingMakerTokenAmount, transferrableMakerTokenAmount, transferrableFeeTokenAmount, remainingMakerTokenAmount,
remainingFeeTokenAmount, totalMakerTokenAmount, signedOrder.makerFee, signedOrder.makerTokenAddress, remainingMakerFeeAmount, totalMakerTokenAmount, signedOrder.makerFee, signedOrder.makerTokenAddress,
zrxTokenAddress); zrxTokenAddress);
const remainingFillableTakerTokenAmount = remainingFillableMakerTokenAmount const remainingFillableTakerTokenAmount = remainingFillableMakerTokenAmount
@ -107,30 +107,38 @@ export class OrderStateUtils {
transferrableMakerFeeTokenAmount: BigNumber, transferrableMakerFeeTokenAmount: BigNumber,
remainingMakerAmount: BigNumber, remainingMakerAmount: BigNumber,
remainingMakerFeeAmount: BigNumber, remainingMakerFeeAmount: BigNumber,
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber, totalMakerAmount: BigNumber,
makerTokenAddress: string, zrxTokenAddress: string): BigNumber { makerFeeAmount: BigNumber,
makerTokenAddress: string,
zrxTokenAddress: string): BigNumber {
if ((makerTokenAddress !== zrxTokenAddress || makerFeeAmount.isZero())) { if ((makerTokenAddress !== zrxTokenAddress || makerFeeAmount.isZero())) {
return this.calculateFillableMakerTokenAmount( return this.computeFillableMakerTokenAmountWhenMakerTokenIsNotZRX(
transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount, transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount,
remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress, remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress,
zrxTokenAddress); zrxTokenAddress);
} else { } else {
return this.calculatePooledFillableMakerTokenAmount( return this.computeFillableMakerTokenAmountWhenMakerTokenIsZRX(
transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount, transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount,
remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress, remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress,
zrxTokenAddress); zrxTokenAddress);
} }
} }
private calculateFillableMakerTokenAmount(transferrableMakerTokenAmount: BigNumber, private computeFillableMakerTokenAmountWhenMakerTokenIsNotZRX(transferrableMakerTokenAmount: BigNumber,
transferrableMakerFeeTokenAmount: BigNumber, transferrableMakerFeeTokenAmount: BigNumber,
remainingMakerAmount: BigNumber, remainingMakerAmount: BigNumber,
remainingMakerFeeAmount: BigNumber, remainingMakerFeeAmount: BigNumber,
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber, totalMakerAmount: BigNumber,
makerTokenAddress: string, zrxTokenAddress: string): BigNumber { makerFeeAmount: BigNumber,
makerTokenAddress: string,
zrxTokenAddress: string): BigNumber {
const hasSufficientFundsForTransferAmount = transferrableMakerTokenAmount.gte(remainingMakerAmount);
const hasSufficientFundsForFeeAmount = transferrableMakerFeeTokenAmount.gte(remainingMakerFeeAmount);
const hasSufficientFundsForFeeAndTransferAmount = (hasSufficientFundsForTransferAmount &&
hasSufficientFundsForFeeAmount);
if (makerFeeAmount.isZero()) { if (makerFeeAmount.isZero()) {
return BigNumber.min(remainingMakerAmount, transferrableMakerTokenAmount); return BigNumber.min(remainingMakerAmount, transferrableMakerTokenAmount);
} else if (transferrableMakerTokenAmount.gte(remainingMakerAmount) && } else if (hasSufficientFundsForFeeAndTransferAmount) {
transferrableMakerFeeTokenAmount.gte(remainingMakerFeeAmount)) {
return remainingMakerAmount; return remainingMakerAmount;
} else { } else {
return this.calculatePartiallyFillableMakerTokenAmount( return this.calculatePartiallyFillableMakerTokenAmount(
@ -139,14 +147,17 @@ export class OrderStateUtils {
zrxTokenAddress); zrxTokenAddress);
} }
} }
private calculatePooledFillableMakerTokenAmount(transferrableMakerTokenAmount: BigNumber, private computeFillableMakerTokenAmountWhenMakerTokenIsZRX(transferrableMakerTokenAmount: BigNumber,
transferrableMakerFeeTokenAmount: BigNumber, transferrableMakerFeeTokenAmount: BigNumber,
remainingMakerAmount: BigNumber, remainingMakerAmount: BigNumber,
remainingMakerFeeAmount: BigNumber, remainingMakerFeeAmount: BigNumber,
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber, totalMakerAmount: BigNumber,
makerTokenAddress: string, zrxTokenAddress: string): BigNumber { makerFeeAmount: BigNumber,
if (transferrableMakerTokenAmount.plus(transferrableMakerFeeTokenAmount).gte( makerTokenAddress: string,
remainingMakerAmount.plus(remainingMakerFeeAmount))) { zrxTokenAddress: string): BigNumber {
const totalZRXTransferAmount = remainingMakerAmount.plus(remainingMakerFeeAmount);
const hasSufficientFundsForFeeAndTransferAmount = transferrableMakerTokenAmount.gte(totalZRXTransferAmount);
if (hasSufficientFundsForFeeAndTransferAmount) {
return remainingMakerAmount; return remainingMakerAmount;
} else { } else {
return this.calculatePartiallyFillableMakerTokenAmount( return this.calculatePartiallyFillableMakerTokenAmount(
@ -165,14 +176,15 @@ export class OrderStateUtils {
const fillableTimesInFeeToken = BigNumber.min(transferrableMakerFeeTokenAmount, remainingMakerFeeAmount); const fillableTimesInFeeToken = BigNumber.min(transferrableMakerFeeTokenAmount, remainingMakerFeeAmount);
let fillableTimesInMakerToken = transferrableMakerTokenAmount.dividedToIntegerBy(orderToFeeRatio); let fillableTimesInMakerToken = transferrableMakerTokenAmount.dividedToIntegerBy(orderToFeeRatio);
if (makerTokenAddress === zrxTokenAddress) { if (makerTokenAddress === zrxTokenAddress) {
const totalFeeTokenPool = transferrableMakerTokenAmount.plus(transferrableMakerFeeTokenAmount); // when zrx == maker token transferrable maker == transfer
fillableTimesInMakerToken = totalFeeTokenPool.dividedToIntegerBy( const totalZRXTokenPooled = transferrableMakerTokenAmount;
orderToFeeRatio.plus( fillableTimesInMakerToken = totalZRXTokenPooled.dividedToIntegerBy(
ZeroEx.toBaseUnitAmount(new BigNumber(1), 18))); orderToFeeRatio.plus(new BigNumber(1)));
} }
return BigNumber.min(fillableTimesInMakerToken.times(orderToFeeRatio), const partiallyFillableMakerTokenAmount = fillableTimesInMakerToken.times(orderToFeeRatio);
fillableTimesInFeeToken.times(orderToFeeRatio)); const partiallyFillableFeeTokenAmount = fillableTimesInFeeToken.times(orderToFeeRatio);
return BigNumber.min(partiallyFillableMakerTokenAmount, partiallyFillableFeeTokenAmount);
} }
private validateIfOrderIsValid(signedOrder: SignedOrder, orderRelevantState: OrderRelevantState): void { private validateIfOrderIsValid(signedOrder: SignedOrder, orderRelevantState: OrderRelevantState): void {
const unavailableTakerTokenAmount = orderRelevantState.cancelledTakerTokenAmount.add( const unavailableTakerTokenAmount = orderRelevantState.cancelledTakerTokenAmount.add(