This commit is contained in:
David Sun
2019-09-21 22:21:55 -04:00
parent ef0096b7d9
commit e5133a2dd9
3 changed files with 15 additions and 8 deletions

View File

@@ -422,11 +422,15 @@ export class SwapQuoter {
const isMakerAssetZrxToken = makerAssetData === zrxTokenAssetData; const isMakerAssetZrxToken = makerAssetData === zrxTokenAssetData;
// get the relevant orders for the makerAsset // get the relevant orders for the makerAsset
const ordersAndFillableAmounts = await this.getOrdersAndFillableAmountsAsync(makerAssetData, takerAssetData); const ordersAndFillableAmounts = await this.getOrdersAndFillableAmountsAsync(makerAssetData, takerAssetData);
const doesOrdersRequireFeeOrders = (!isMakerAssetZrxToken && utils.isFeeOrdersRequiredToFillOrders(ordersAndFillableAmounts)); const doesOrdersRequireFeeOrders =
!isMakerAssetZrxToken && utils.isFeeOrdersRequiredToFillOrders(ordersAndFillableAmounts);
const isRequestingFeeOrders = !shouldDisableRequestingFeeOrders && doesOrdersRequireFeeOrders; const isRequestingFeeOrders = !shouldDisableRequestingFeeOrders && doesOrdersRequireFeeOrders;
let feeOrdersAndFillableAmounts = constants.EMPTY_ORDERS_AND_FILLABLE_AMOUNTS; let feeOrdersAndFillableAmounts = constants.EMPTY_ORDERS_AND_FILLABLE_AMOUNTS;
if (isRequestingFeeOrders) { if (isRequestingFeeOrders) {
feeOrdersAndFillableAmounts = await this.getOrdersAndFillableAmountsAsync(zrxTokenAssetData, takerAssetData); feeOrdersAndFillableAmounts = await this.getOrdersAndFillableAmountsAsync(
zrxTokenAssetData,
takerAssetData,
);
} }
if (ordersAndFillableAmounts.orders.length === 0) { if (ordersAndFillableAmounts.orders.length === 0) {

View File

@@ -29,10 +29,13 @@ export const utils = {
}, },
isFeeOrdersRequiredToFillOrders(ordersAndFillableAmounts: OrdersAndFillableAmounts): boolean { isFeeOrdersRequiredToFillOrders(ordersAndFillableAmounts: OrdersAndFillableAmounts): boolean {
const { orders, remainingFillableMakerAssetAmounts } = ordersAndFillableAmounts; const { orders, remainingFillableMakerAssetAmounts } = ordersAndFillableAmounts;
return _.some(orders, (order: SignedOrder, index: number): boolean => { return _.some(
const remainingFillableMakerAssetAmount = remainingFillableMakerAssetAmounts[index]; orders,
// If takerFee is a non zero value and order is still fillable, fee orders are required (order: SignedOrder, index: number): boolean => {
return !order.takerFee.isZero() && !remainingFillableMakerAssetAmount.isZero(); const remainingFillableMakerAssetAmount = remainingFillableMakerAssetAmounts[index];
}); // If takerFee is a non zero value and order is still fillable, fee orders are required
return !order.takerFee.isZero() && !remainingFillableMakerAssetAmount.isZero();
},
);
}, },
}; };

View File

@@ -66,7 +66,7 @@ describe('utils', () => {
const isFeeOrdersRequired = utils.isFeeOrdersRequiredToFillOrders(ordersAndFillableAmounts); const isFeeOrdersRequired = utils.isFeeOrdersRequiredToFillOrders(ordersAndFillableAmounts);
expect(isFeeOrdersRequired).to.equal(false); expect(isFeeOrdersRequired).to.equal(false);
}); });
it('should return false if ordersAndFillableAmounts is completely unfilled and doesn\'t have fees', () => { it("should return false if ordersAndFillableAmounts is completely unfilled and doesn't have fees", () => {
const ordersAndFillableAmounts = { const ordersAndFillableAmounts = {
orders: [sellTwoTokensFor1Weth, sellTenTokensFor10Weth], orders: [sellTwoTokensFor1Weth, sellTenTokensFor10Weth],
remainingFillableMakerAssetAmounts: [baseUnitAmount(1), baseUnitAmount(10)], remainingFillableMakerAssetAmounts: [baseUnitAmount(1), baseUnitAmount(10)],