diff options
author | Brandon Millman <brandon@0xproject.com> | 2018-11-15 07:20:31 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-15 07:20:31 +0800 |
commit | 2eef766aff1d0d1b13af9a28f28d38bb722996d1 (patch) | |
tree | 008b77679ca189c75b5484377ce1db6801ea636d | |
parent | 504f4d9eb99589b4d9071a6f13cea9dcc11f226d (diff) | |
parent | af6aa2df93d533293316512c5b724a2fa40315d6 (diff) | |
download | dexon-sol-tools-2eef766aff1d0d1b13af9a28f28d38bb722996d1.tar.gz dexon-sol-tools-2eef766aff1d0d1b13af9a28f28d38bb722996d1.tar.zst dexon-sol-tools-2eef766aff1d0d1b13af9a28f28d38bb722996d1.zip |
Merge pull request #1258 from 0xProject/fix/instant/contract-call
[instant] Catch errors coming from calls to the orderValidator contract
-rw-r--r-- | packages/asset-buyer/src/utils/order_provider_response_processor.ts | 29 |
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 |