calculate remaining maker token amount
This commit is contained in:
parent
c8f6e3f923
commit
7460a36ce2
@ -84,18 +84,10 @@ export class OrderStateUtils {
|
|||||||
const transferrableMakerTokenAmount = BigNumber.min([makerProxyAllowance, makerBalance]);
|
const transferrableMakerTokenAmount = BigNumber.min([makerProxyAllowance, makerBalance]);
|
||||||
const transferrableFeeTokenAmount = BigNumber.min([makerFeeProxyAllowance, makerFeeBalance]);
|
const transferrableFeeTokenAmount = BigNumber.min([makerFeeProxyAllowance, makerFeeBalance]);
|
||||||
|
|
||||||
let remainingFillableMakerTokenAmount;
|
const remainingFillableMakerTokenAmount = this.calculateRemainingMakerTokenAmount(
|
||||||
if ((signedOrder.makerTokenAddress !== zrxTokenAddress || signedOrder.makerFee.isZero())) {
|
|
||||||
remainingFillableMakerTokenAmount = this.calculateFillableMakerTokenAmount(
|
|
||||||
transferrableMakerTokenAmount, transferrableFeeTokenAmount, remainingMakerTokenAmount,
|
transferrableMakerTokenAmount, transferrableFeeTokenAmount, remainingMakerTokenAmount,
|
||||||
remainingFeeTokenAmount, totalMakerTokenAmount, signedOrder.makerFee, signedOrder.makerTokenAddress,
|
remainingFeeTokenAmount, totalMakerTokenAmount, signedOrder.makerFee, signedOrder.makerTokenAddress,
|
||||||
zrxTokenAddress);
|
zrxTokenAddress);
|
||||||
} else {
|
|
||||||
remainingFillableMakerTokenAmount = this.calculatePooledFillableMakerTokenAmount(
|
|
||||||
transferrableMakerTokenAmount, transferrableFeeTokenAmount, remainingMakerTokenAmount,
|
|
||||||
remainingFeeTokenAmount, totalMakerTokenAmount, signedOrder.makerFee, signedOrder.makerTokenAddress,
|
|
||||||
zrxTokenAddress);
|
|
||||||
}
|
|
||||||
|
|
||||||
const remainingFillableTakerTokenAmount = remainingFillableMakerTokenAmount
|
const remainingFillableTakerTokenAmount = remainingFillableMakerTokenAmount
|
||||||
.times(totalTakerTokenAmount)
|
.times(totalTakerTokenAmount)
|
||||||
@ -112,51 +104,69 @@ export class OrderStateUtils {
|
|||||||
};
|
};
|
||||||
return orderRelevantState;
|
return orderRelevantState;
|
||||||
}
|
}
|
||||||
private calculateFillableMakerTokenAmount(makerTransferrableAmount: BigNumber,
|
private calculateRemainingMakerTokenAmount(transferrableMakerTokenAmount: BigNumber,
|
||||||
makerFeeTransferrableAmount: BigNumber,
|
transferrableMakerFeeTokenAmount: BigNumber,
|
||||||
|
remainingMakerAmount: BigNumber,
|
||||||
|
remainingMakerFeeAmount: BigNumber,
|
||||||
|
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber,
|
||||||
|
makerTokenAddress: string, zrxTokenAddress: string): BigNumber {
|
||||||
|
if ((makerTokenAddress !== zrxTokenAddress || makerFeeAmount.isZero())) {
|
||||||
|
return this.calculateFillableMakerTokenAmount(
|
||||||
|
transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount,
|
||||||
|
remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress,
|
||||||
|
zrxTokenAddress);
|
||||||
|
} else {
|
||||||
|
return this.calculatePooledFillableMakerTokenAmount(
|
||||||
|
transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount,
|
||||||
|
remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress,
|
||||||
|
zrxTokenAddress);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private calculateFillableMakerTokenAmount(transferrableMakerTokenAmount: BigNumber,
|
||||||
|
transferrableMakerFeeTokenAmount: BigNumber,
|
||||||
remainingMakerAmount: BigNumber,
|
remainingMakerAmount: BigNumber,
|
||||||
remainingMakerFeeAmount: BigNumber,
|
remainingMakerFeeAmount: BigNumber,
|
||||||
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber,
|
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber,
|
||||||
makerTokenAddress: string, zrxTokenAddress: string): BigNumber {
|
makerTokenAddress: string, zrxTokenAddress: string): BigNumber {
|
||||||
if (makerFeeAmount.isZero()) {
|
if (makerFeeAmount.isZero()) {
|
||||||
return BigNumber.min(remainingMakerAmount, makerTransferrableAmount);
|
return BigNumber.min(remainingMakerAmount, transferrableMakerTokenAmount);
|
||||||
} else if (makerTransferrableAmount.gte(remainingMakerAmount) &&
|
} else if (transferrableMakerTokenAmount.gte(remainingMakerAmount) &&
|
||||||
makerFeeTransferrableAmount.gte(remainingMakerFeeAmount)) {
|
transferrableMakerFeeTokenAmount.gte(remainingMakerFeeAmount)) {
|
||||||
return makerTransferrableAmount;
|
return transferrableMakerTokenAmount;
|
||||||
} else {
|
} else {
|
||||||
return this.calculatePartiallyFillableMakerTokenAmount(
|
return this.calculatePartiallyFillableMakerTokenAmount(
|
||||||
makerTransferrableAmount, makerFeeTransferrableAmount, remainingMakerAmount,
|
transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount,
|
||||||
remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress,
|
remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress,
|
||||||
zrxTokenAddress);
|
zrxTokenAddress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private calculatePooledFillableMakerTokenAmount(makerTransferrableAmount: BigNumber,
|
private calculatePooledFillableMakerTokenAmount(transferrableMakerTokenAmount: BigNumber,
|
||||||
makerFeeTransferrableAmount: BigNumber,
|
transferrableMakerFeeTokenAmount: BigNumber,
|
||||||
remainingMakerAmount: BigNumber,
|
remainingMakerAmount: BigNumber,
|
||||||
remainingMakerFeeAmount: BigNumber,
|
remainingMakerFeeAmount: BigNumber,
|
||||||
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber,
|
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber,
|
||||||
makerTokenAddress: string, zrxTokenAddress: string): BigNumber {
|
makerTokenAddress: string, zrxTokenAddress: string): BigNumber {
|
||||||
if (makerTransferrableAmount.plus(makerFeeTransferrableAmount).gte(
|
if (transferrableMakerTokenAmount.plus(transferrableMakerFeeTokenAmount).gte(
|
||||||
remainingMakerAmount.plus(remainingMakerFeeAmount))) {
|
remainingMakerAmount.plus(remainingMakerFeeAmount))) {
|
||||||
return remainingMakerAmount;
|
return remainingMakerAmount;
|
||||||
} else {
|
} else {
|
||||||
return this.calculatePartiallyFillableMakerTokenAmount(
|
return this.calculatePartiallyFillableMakerTokenAmount(
|
||||||
makerTransferrableAmount, makerFeeTransferrableAmount, remainingMakerAmount,
|
transferrableMakerTokenAmount, transferrableMakerFeeTokenAmount, remainingMakerAmount,
|
||||||
remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress,
|
remainingMakerFeeAmount, totalMakerAmount, makerFeeAmount, makerTokenAddress,
|
||||||
zrxTokenAddress);
|
zrxTokenAddress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private calculatePartiallyFillableMakerTokenAmount(makerTransferrableAmount: BigNumber,
|
private calculatePartiallyFillableMakerTokenAmount(transferrableMakerTokenAmount: BigNumber,
|
||||||
makerFeeTransferrableAmount: BigNumber,
|
transferrableMakerFeeTokenAmount: BigNumber,
|
||||||
remainingMakerAmount: BigNumber,
|
remainingMakerAmount: BigNumber,
|
||||||
remainingMakerFeeAmount: BigNumber,
|
remainingMakerFeeAmount: BigNumber,
|
||||||
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber,
|
totalMakerAmount: BigNumber, makerFeeAmount: BigNumber,
|
||||||
makerTokenAddress: string, zrxTokenAddress: string): BigNumber {
|
makerTokenAddress: string, zrxTokenAddress: string): BigNumber {
|
||||||
const orderToFeeRatio = totalMakerAmount.dividedToIntegerBy(makerFeeAmount);
|
const orderToFeeRatio = totalMakerAmount.dividedToIntegerBy(makerFeeAmount);
|
||||||
const fillableTimesInFeeToken = BigNumber.min(makerFeeTransferrableAmount, remainingMakerFeeAmount);
|
const fillableTimesInFeeToken = BigNumber.min(transferrableMakerFeeTokenAmount, remainingMakerFeeAmount);
|
||||||
let fillableTimesInMakerToken = makerTransferrableAmount.dividedToIntegerBy(orderToFeeRatio);
|
let fillableTimesInMakerToken = transferrableMakerTokenAmount.dividedToIntegerBy(orderToFeeRatio);
|
||||||
if (makerTokenAddress === zrxTokenAddress) {
|
if (makerTokenAddress === zrxTokenAddress) {
|
||||||
const totalFeeTokenPool = makerTransferrableAmount.plus(makerFeeTransferrableAmount);
|
const totalFeeTokenPool = transferrableMakerTokenAmount.plus(transferrableMakerFeeTokenAmount);
|
||||||
fillableTimesInMakerToken = totalFeeTokenPool.dividedToIntegerBy(
|
fillableTimesInMakerToken = totalFeeTokenPool.dividedToIntegerBy(
|
||||||
orderToFeeRatio.plus(
|
orderToFeeRatio.plus(
|
||||||
ZeroEx.toBaseUnitAmount(new BigNumber(1), 18)));
|
ZeroEx.toBaseUnitAmount(new BigNumber(1), 18)));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user