From 926fcb296fb728c3520c638a43a5da950393832e Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Fri, 14 Dec 2018 14:06:24 -0800 Subject: fix(instant): treat executeBuyQuote errors as signature denials --- packages/instant/src/components/buy_button.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'packages') diff --git a/packages/instant/src/components/buy_button.tsx b/packages/instant/src/components/buy_button.tsx index 1489b94d4..880303cc7 100644 --- a/packages/instant/src/components/buy_button.tsx +++ b/packages/instant/src/components/buy_button.tsx @@ -10,6 +10,7 @@ import { WEB_3_WRAPPER_TRANSACTION_FAILED_ERROR_MSG_PREFIX } from '../constants' import { ColorOption } from '../style/theme'; import { AffiliateInfo, Asset, ZeroExInstantError } from '../types'; import { analytics } from '../util/analytics'; +import { errorReporter } from '../util/error_reporter'; import { gasPriceEstimator } from '../util/gas_price_estimator'; import { util } from '../util/util'; @@ -82,14 +83,17 @@ export class BuyButton extends React.Component { }); } catch (e) { if (e instanceof Error) { - if (e.message === AssetBuyerError.SignatureRequestDenied) { - analytics.trackBuySignatureDenied(buyQuote); - this.props.onSignatureDenied(buyQuote); - return; - } else if (e.message === AssetBuyerError.TransactionValueTooLow) { + if (e.message === AssetBuyerError.TransactionValueTooLow) { analytics.trackBuySimulationFailed(buyQuote); this.props.onValidationFail(buyQuote, AssetBuyerError.TransactionValueTooLow); return; + } else { + if (e.message !== AssetBuyerError.SignatureRequestDenied) { + errorReporter.report(e); + } + analytics.trackBuySignatureDenied(buyQuote); + this.props.onSignatureDenied(buyQuote); + return; } } throw e; -- cgit v1.2.3 From 21a193e51650a78e59aaf6ae49b5120fb8b73e15 Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Fri, 14 Dec 2018 14:10:15 -0800 Subject: feature(instant): add trust wallet detection --- packages/instant/src/constants.ts | 1 + packages/instant/src/types.ts | 1 + packages/instant/src/util/env.ts | 2 ++ 3 files changed, 4 insertions(+) (limited to 'packages') diff --git a/packages/instant/src/constants.ts b/packages/instant/src/constants.ts index f83eb4ac7..6d3680dc1 100644 --- a/packages/instant/src/constants.ts +++ b/packages/instant/src/constants.ts @@ -71,5 +71,6 @@ export const PROVIDER_TYPE_TO_NAME: { [key in ProviderType]: string } = { [ProviderType.Mist]: 'Mist', [ProviderType.CoinbaseWallet]: 'Coinbase Wallet', [ProviderType.Parity]: 'Parity', + [ProviderType.TrustWallet]: 'Trust Wallet', [ProviderType.Fallback]: 'Fallback', }; diff --git a/packages/instant/src/types.ts b/packages/instant/src/types.ts index 1c7490e63..6374dda09 100644 --- a/packages/instant/src/types.ts +++ b/packages/instant/src/types.ts @@ -176,6 +176,7 @@ export enum ProviderType { Mist = 'MIST', CoinbaseWallet = 'COINBASE_WALLET', Cipher = 'CIPHER', + TrustWallet = 'TRUST_WALLET', Fallback = 'FALLBACK', } diff --git a/packages/instant/src/util/env.ts b/packages/instant/src/util/env.ts index 0fda0cc0e..0f0b472b2 100644 --- a/packages/instant/src/util/env.ts +++ b/packages/instant/src/util/env.ts @@ -44,6 +44,8 @@ export const envUtil = { getProviderType(provider: Provider): ProviderType | undefined { if (provider.constructor.name === 'EthereumProvider') { return ProviderType.Mist; + } else if (provider.constructor.name === 'TrustWeb3Provider') { + return ProviderType.TrustWallet; } else if ((provider as any).isParity) { return ProviderType.Parity; } else if ((provider as any).isMetaMask) { -- cgit v1.2.3 From 2effc3e267f01e620c50622138d98381883d4c32 Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Thu, 20 Dec 2018 14:10:29 -0800 Subject: fix(instant): use isTrust property to determine if provider is trust wallet --- packages/instant/src/util/env.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'packages') diff --git a/packages/instant/src/util/env.ts b/packages/instant/src/util/env.ts index 0f0b472b2..aedf4f5d6 100644 --- a/packages/instant/src/util/env.ts +++ b/packages/instant/src/util/env.ts @@ -44,7 +44,7 @@ export const envUtil = { getProviderType(provider: Provider): ProviderType | undefined { if (provider.constructor.name === 'EthereumProvider') { return ProviderType.Mist; - } else if (provider.constructor.name === 'TrustWeb3Provider') { + } else if ((provider as any).isTrust) { return ProviderType.TrustWallet; } else if ((provider as any).isParity) { return ProviderType.Parity; -- cgit v1.2.3 From 080c6d3146bee3691b6f3b9452be639354236e44 Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Thu, 20 Dec 2018 14:32:11 -0800 Subject: fix(instant): catch unknown errors from executeBuyAsync, report them and show could not submit transaction --- packages/instant/src/components/buy_button.tsx | 9 +++++---- .../src/containers/selected_asset_buy_order_state_buttons.ts | 3 +++ packages/instant/src/types.ts | 1 + 3 files changed, 9 insertions(+), 4 deletions(-) (limited to 'packages') diff --git a/packages/instant/src/components/buy_button.tsx b/packages/instant/src/components/buy_button.tsx index 880303cc7..ff1cda1e1 100644 --- a/packages/instant/src/components/buy_button.tsx +++ b/packages/instant/src/components/buy_button.tsx @@ -87,13 +87,14 @@ export class BuyButton extends React.Component { analytics.trackBuySimulationFailed(buyQuote); this.props.onValidationFail(buyQuote, AssetBuyerError.TransactionValueTooLow); return; - } else { - if (e.message !== AssetBuyerError.SignatureRequestDenied) { - errorReporter.report(e); - } + } else if (e.message === AssetBuyerError.SignatureRequestDenied) { analytics.trackBuySignatureDenied(buyQuote); this.props.onSignatureDenied(buyQuote); return; + } else { + errorReporter.report(e); + this.props.onValidationFail(buyQuote, ZeroExInstantError.CouldNotSubmitTransaction); + return; } } throw e; diff --git a/packages/instant/src/containers/selected_asset_buy_order_state_buttons.ts b/packages/instant/src/containers/selected_asset_buy_order_state_buttons.ts index 80943a96f..4da99cf04 100644 --- a/packages/instant/src/containers/selected_asset_buy_order_state_buttons.ts +++ b/packages/instant/src/containers/selected_asset_buy_order_state_buttons.ts @@ -95,6 +95,9 @@ const mapDispatchToProps = ( if (error === ZeroExInstantError.InsufficientETH) { const errorMessage = "You don't have enough ETH"; errorFlasher.flashNewErrorMessage(dispatch, errorMessage); + } else if (error === ZeroExInstantError.CouldNotSubmitTransaction) { + const errorMessage = 'Could not submit transaction'; + errorFlasher.flashNewErrorMessage(dispatch, errorMessage); } else { errorFlasher.flashNewErrorMessage(dispatch); } diff --git a/packages/instant/src/types.ts b/packages/instant/src/types.ts index 6374dda09..d217c1a4f 100644 --- a/packages/instant/src/types.ts +++ b/packages/instant/src/types.ts @@ -91,6 +91,7 @@ export enum Network { export enum ZeroExInstantError { AssetMetaDataNotAvailable = 'ASSET_META_DATA_NOT_AVAILABLE', InsufficientETH = 'INSUFFICIENT_ETH', + CouldNotSubmitTransaction = 'COULD_NOT_SUBMIT_TRANSACTION', } export type SimpleHandler = () => void; -- cgit v1.2.3 From bbe9862aa6c0e495c58ee028d8e4964b63377d1c Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Thu, 20 Dec 2018 14:43:14 -0800 Subject: fix(instant): add analytics to unknown error on executeBuyAsync --- packages/instant/src/components/buy_button.tsx | 1 + 1 file changed, 1 insertion(+) (limited to 'packages') diff --git a/packages/instant/src/components/buy_button.tsx b/packages/instant/src/components/buy_button.tsx index ff1cda1e1..46d121611 100644 --- a/packages/instant/src/components/buy_button.tsx +++ b/packages/instant/src/components/buy_button.tsx @@ -93,6 +93,7 @@ export class BuyButton extends React.Component { return; } else { errorReporter.report(e); + analytics.trackBuySignatureDenied(buyQuote); this.props.onValidationFail(buyQuote, ZeroExInstantError.CouldNotSubmitTransaction); return; } -- cgit v1.2.3 From 7c7085c9328ce41c97469dc50232737814a7b95f Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Thu, 20 Dec 2018 14:45:06 -0800 Subject: feature(contract-wrappers): add support for Trust Wallet signature denial errors when trying to sense signature denial from a provider --- packages/contract-wrappers/CHANGELOG.json | 8 ++++++++ packages/contract-wrappers/src/utils/constants.ts | 3 ++- packages/contract-wrappers/src/utils/decorators.ts | 5 ++++- 3 files changed, 14 insertions(+), 2 deletions(-) (limited to 'packages') diff --git a/packages/contract-wrappers/CHANGELOG.json b/packages/contract-wrappers/CHANGELOG.json index 9475e5a88..d39027797 100644 --- a/packages/contract-wrappers/CHANGELOG.json +++ b/packages/contract-wrappers/CHANGELOG.json @@ -1,4 +1,12 @@ [ + { + "version": "4.1.4", + "changes": [ + { + "note": "Add support for Trust Wallet signature denial error" + } + ] + }, { "version": "4.1.3", "changes": [ diff --git a/packages/contract-wrappers/src/utils/constants.ts b/packages/contract-wrappers/src/utils/constants.ts index c587ba526..94afdc112 100644 --- a/packages/contract-wrappers/src/utils/constants.ts +++ b/packages/contract-wrappers/src/utils/constants.ts @@ -14,5 +14,6 @@ export const constants = { ZERO_AMOUNT: new BigNumber(0), ONE_AMOUNT: new BigNumber(1), ETHER_TOKEN_DECIMALS: 18, - USER_DENIED_SIGNATURE_PATTERN: 'User denied transaction signature', + METAMASK_USER_DENIED_SIGNATURE_PATTERN: 'User denied transaction signature', + TRUST_WALLET_USER_DENIED_SIGNATURE_PATTERN: 'cancelled', }; diff --git a/packages/contract-wrappers/src/utils/decorators.ts b/packages/contract-wrappers/src/utils/decorators.ts index a4207ae4c..3acfa3a88 100644 --- a/packages/contract-wrappers/src/utils/decorators.ts +++ b/packages/contract-wrappers/src/utils/decorators.ts @@ -30,7 +30,10 @@ const schemaErrorTransformer = (error: Error) => { }; const signatureRequestErrorTransformer = (error: Error) => { - if (_.includes(error.message, constants.USER_DENIED_SIGNATURE_PATTERN)) { + if ( + _.includes(error.message, constants.METAMASK_USER_DENIED_SIGNATURE_PATTERN) || + _.includes(error.message, constants.TRUST_WALLET_USER_DENIED_SIGNATURE_PATTERN) + ) { const errMsg = ContractWrappersError.SignatureRequestDenied; return new Error(errMsg); } -- cgit v1.2.3 From b399aa25aa9386d388d31edb463e803c7c31a2db Mon Sep 17 00:00:00 2001 From: Brandon Millman Date: Thu, 20 Dec 2018 15:05:54 -0800 Subject: feat(instant): add new event for unknown buy errors --- packages/instant/src/components/buy_button.tsx | 2 +- packages/instant/src/util/analytics.ts | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'packages') diff --git a/packages/instant/src/components/buy_button.tsx b/packages/instant/src/components/buy_button.tsx index 46d121611..5c9c28ae4 100644 --- a/packages/instant/src/components/buy_button.tsx +++ b/packages/instant/src/components/buy_button.tsx @@ -93,7 +93,7 @@ export class BuyButton extends React.Component { return; } else { errorReporter.report(e); - analytics.trackBuySignatureDenied(buyQuote); + analytics.trackBuyUnknownError(buyQuote, e.message); this.props.onValidationFail(buyQuote, ZeroExInstantError.CouldNotSubmitTransaction); return; } diff --git a/packages/instant/src/util/analytics.ts b/packages/instant/src/util/analytics.ts index e6128f857..21d3a4d9e 100644 --- a/packages/instant/src/util/analytics.ts +++ b/packages/instant/src/util/analytics.ts @@ -44,6 +44,7 @@ enum EventNames { BUY_STARTED = 'Buy - Started', BUY_SIGNATURE_DENIED = 'Buy - Signature Denied', BUY_SIMULATION_FAILED = 'Buy - Simulation Failed', + BUY_UNKNOWN_ERROR = 'Buy - Unknown Error', BUY_TX_SUBMITTED = 'Buy - Tx Submitted', BUY_TX_SUCCEEDED = 'Buy - Tx Succeeded', BUY_TX_FAILED = 'Buy - Tx Failed', @@ -181,6 +182,11 @@ export const analytics = { trackingEventFnWithPayload(EventNames.BUY_SIGNATURE_DENIED)(buyQuoteEventProperties(buyQuote)), trackBuySimulationFailed: (buyQuote: BuyQuote) => trackingEventFnWithPayload(EventNames.BUY_SIMULATION_FAILED)(buyQuoteEventProperties(buyQuote)), + trackBuyUnknownError: (buyQuote: BuyQuote, errorMessage: string) => + trackingEventFnWithPayload(EventNames.BUY_UNKNOWN_ERROR)({ + ...buyQuoteEventProperties(buyQuote), + errorMessage, + }), trackBuyTxSubmitted: (buyQuote: BuyQuote, txHash: string, startTimeUnix: number, expectedEndTimeUnix: number) => trackingEventFnWithPayload(EventNames.BUY_TX_SUBMITTED)({ ...buyQuoteEventProperties(buyQuote), -- cgit v1.2.3