aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrandon Millman <brandon.millman@gmail.com>2018-11-14 08:57:46 +0800
committerBrandon Millman <brandon.millman@gmail.com>2018-11-14 10:03:09 +0800
commitaf6aa2df93d533293316512c5b724a2fa40315d6 (patch)
treebd26127cbacb62adc08eff829c1212c6e9b9e30c
parent4fc457b78b30e761164eac26fe5f1ebcddd11f7d (diff)
downloaddexon-sol-tools-af6aa2df93d533293316512c5b724a2fa40315d6.tar.gz
dexon-sol-tools-af6aa2df93d533293316512c5b724a2fa40315d6.tar.zst
dexon-sol-tools-af6aa2df93d533293316512c5b724a2fa40315d6.zip
fix(instant): catch errors coming from calls to the orderValidator contract
-rw-r--r--packages/asset-buyer/src/utils/order_provider_response_processor.ts29
1 files changed, 17 insertions, 12 deletions
diff --git a/packages/asset-buyer/src/utils/order_provider_response_processor.ts b/packages/asset-buyer/src/utils/order_provider_response_processor.ts
index 28f684f3c..25e85b2cc 100644
--- a/packages/asset-buyer/src/utils/order_provider_response_processor.ts
+++ b/packages/asset-buyer/src/utils/order_provider_response_processor.ts
@@ -44,19 +44,24 @@ export const orderProviderResponseProcessor = {
let unsortedOrders = filteredOrders;
// if an orderValidator is provided, use on chain information to calculate remaining fillable makerAsset amounts
if (!_.isUndefined(orderValidator)) {
- // TODO(bmillman): improvement
- // try/catch this request and throw a more domain specific error
const takerAddresses = _.map(filteredOrders, () => constants.NULL_ADDRESS);
- const ordersAndTradersInfo = await orderValidator.getOrdersAndTradersInfoAsync(
- filteredOrders,
- takerAddresses,
- );
- // take orders + on chain information and find the valid orders and remaining fillable maker asset amounts
- unsortedOrders = getValidOrdersWithRemainingFillableMakerAssetAmountsFromOnChain(
- filteredOrders,
- ordersAndTradersInfo,
- isMakerAssetZrxToken,
- );
+ try {
+ const ordersAndTradersInfo = await orderValidator.getOrdersAndTradersInfoAsync(
+ filteredOrders,
+ takerAddresses,
+ );
+ // take orders + on chain information and find the valid orders and remaining fillable maker asset amounts
+ unsortedOrders = getValidOrdersWithRemainingFillableMakerAssetAmountsFromOnChain(
+ filteredOrders,
+ ordersAndTradersInfo,
+ isMakerAssetZrxToken,
+ );
+ } catch (err) {
+ // Sometimes we observe this call to orderValidator fail with response `0x`
+ // Because of differences in Parity / Geth implementations, its very hard to tell if this response is a "system error"
+ // or a revert. In this case we just swallow these errors and fallback to partial fill information from the SRA.
+ // TODO(bmillman): report these errors so we have an idea of how often we're getting these failures.
+ }
}
// sort orders by rate
// TODO(bmillman): optimization