asset-s: check RFQ expiry more canonically

For firm quotes, re-use orderCalculationUtils.willOrderExpire(), just
like utils.order_prune_utils.

For indicative quotes, duplicate the logic used in that
willOrderExpire() function, since it can't be re-used for an indicative
quote (it's not a full Order object), and since the logic is very
minimal.

Addresses review comment https://github.com/0xProject/0x-monorepo/pull/2574#discussion_r419768395
This commit is contained in:
F. Eugene Aumson
2020-05-05 13:33:58 -04:00
parent 38781807cd
commit 125c53827b

View File

@@ -1,5 +1,5 @@
import { schemas, SchemaValidator } from '@0x/json-schemas'; import { schemas, SchemaValidator } from '@0x/json-schemas';
import { assetDataUtils, SignedOrder } from '@0x/order-utils'; import { assetDataUtils, orderCalculationUtils, SignedOrder } from '@0x/order-utils';
import { ERC20AssetData } from '@0x/types'; import { ERC20AssetData } from '@0x/types';
import { BigNumber, logUtils } from '@0x/utils'; import { BigNumber, logUtils } from '@0x/utils';
import Axios, { AxiosResponse } from 'axios'; import Axios, { AxiosResponse } from 'axios';
@@ -161,20 +161,10 @@ export class QuoteRequestor {
return false; return false;
} }
const minExpiry = Math.round((Date.now() + this._expiryBufferMs) / constants.ONE_SECOND_MS);
if (new BigNumber(order.expirationTimeSeconds).isLessThan(minExpiry)) {
this._warningLogger(
`Expiry too soon (expected at least ${minExpiry}) in RFQ-T order, filtering out: ${JSON.stringify(
order,
)}`,
);
return false;
}
return true; return true;
}); });
const orders: SignedOrder[] = validatedOrdersWithStringInts.map(orderWithStringInts => { const validatedOrders: SignedOrder[] = validatedOrdersWithStringInts.map(orderWithStringInts => {
return { return {
...orderWithStringInts, ...orderWithStringInts,
makerAssetAmount: new BigNumber(orderWithStringInts.makerAssetAmount), makerAssetAmount: new BigNumber(orderWithStringInts.makerAssetAmount),
@@ -186,6 +176,14 @@ export class QuoteRequestor {
}; };
}); });
const orders = validatedOrders.filter(order => {
if (orderCalculationUtils.willOrderExpire(order, this._expiryBufferMs / constants.ONE_SECOND_MS)) {
this._warningLogger(`Expiry too soon in RFQ-T order, filtering out: ${JSON.stringify(order)}`);
return false;
}
return true;
});
return orders; return orders;
} }
@@ -250,19 +248,10 @@ export class QuoteRequestor {
); );
return false; return false;
} }
const minExpiry = Math.round((Date.now() + this._expiryBufferMs) / constants.ONE_SECOND_MS);
if (new BigNumber(response.expirationTimeSeconds).isLessThan(minExpiry)) {
this._warningLogger(
`Expiry too soon (expected at least ${minExpiry}) in RFQ-T indicative quote, filtering out: ${JSON.stringify(
response,
)}`,
);
return false;
}
return true; return true;
}); });
const responses = validResponsesWithStringInts.map(response => { const validResponses = validResponsesWithStringInts.map(response => {
return { return {
...response, ...response,
makerAssetAmount: new BigNumber(response.makerAssetAmount), makerAssetAmount: new BigNumber(response.makerAssetAmount),
@@ -271,6 +260,16 @@ export class QuoteRequestor {
}; };
}); });
const responses = validResponses.filter(response => {
if (this._isExpirationTooSoon(response.expirationTimeSeconds)) {
this._warningLogger(
`Expiry too soon in RFQ-T indicative quote, filtering out: ${JSON.stringify(response)}`,
);
return false;
}
return true;
});
return responses; return responses;
} }
@@ -315,4 +314,10 @@ export class QuoteRequestor {
} }
return false; return false;
} }
private _isExpirationTooSoon(expirationTimeSeconds: BigNumber): boolean {
const expirationTimeMs = expirationTimeSeconds.times(constants.ONE_SECOND_MS);
const currentTimeMs = new BigNumber(Date.now());
return expirationTimeMs.isLessThan(currentTimeMs.plus(this._expiryBufferMs));
}
} }