aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--packages/instant/src/containers/selected_erc20_asset_amount_input.ts2
-rw-r--r--packages/instant/src/util/address.ts2
-rw-r--r--packages/instant/src/util/balance.ts26
3 files changed, 19 insertions, 11 deletions
diff --git a/packages/instant/src/containers/selected_erc20_asset_amount_input.ts b/packages/instant/src/containers/selected_erc20_asset_amount_input.ts
index 1fc5b6d8c..325dc0ef2 100644
--- a/packages/instant/src/containers/selected_erc20_asset_amount_input.ts
+++ b/packages/instant/src/containers/selected_erc20_asset_amount_input.ts
@@ -82,7 +82,7 @@ const updateBuyQuoteAsync = async (
// set error if user doesn't have appropriate balance
const takerAddress = await getBestAddress();
- await balanceUtil.checkSufficientBalanceAndFlashError(takerAddress, newBuyQuote, web3Wrapper, dispatch);
+ await balanceUtil.checkInsufficientEthBalanceAndFlashError(takerAddress, newBuyQuote, web3Wrapper, dispatch);
};
const debouncedUpdateBuyQuoteAsync = _.debounce(updateBuyQuoteAsync, 200, { trailing: true });
diff --git a/packages/instant/src/util/address.ts b/packages/instant/src/util/address.ts
index 97ed30a00..14d42d8c0 100644
--- a/packages/instant/src/util/address.ts
+++ b/packages/instant/src/util/address.ts
@@ -1,6 +1,6 @@
import { web3Wrapper } from '../util/web3_wrapper';
-export const getBestAddress = async (): Promise<string> => {
+export const getBestAddress = async (): Promise<string | undefined> => {
const addresses = await web3Wrapper.getAvailableAddressesAsync();
return addresses[0];
};
diff --git a/packages/instant/src/util/balance.ts b/packages/instant/src/util/balance.ts
index d442da9e0..954dc7156 100644
--- a/packages/instant/src/util/balance.ts
+++ b/packages/instant/src/util/balance.ts
@@ -1,30 +1,38 @@
import { BuyQuote } from '@0x/asset-buyer';
import { Web3Wrapper } from '@0x/web3-wrapper';
+import * as _ from 'lodash';
import { Dispatch } from 'redux';
import { ZeroExInstantError } from '../types';
import { errorUtil } from './error';
+const hasSufficientFunds = async (takerAddress: string | undefined, buyQuote: BuyQuote, web3Wrapper: Web3Wrapper) => {
+ if (_.isUndefined(takerAddress)) {
+ return false;
+ }
+ const balanceWei = await web3Wrapper.getBalanceInWeiAsync(takerAddress);
+ return balanceWei >= buyQuote.worstCaseQuoteInfo.totalEthAmount;
+};
+
export const balanceUtil = {
/**
* Checks to see if user has enough balance to buy assets
* If they do not, flash an error and return false
* If they do, return true
*/
- checkSufficientBalanceAndFlashError: async (
- takerAddress: string,
+ checkInsufficientEthBalanceAndFlashError: async (
+ takerAddress: string | undefined,
buyQuote: BuyQuote,
web3Wrapper: Web3Wrapper,
dispatch: Dispatch,
) => {
- const balanceWei = await web3Wrapper.getBalanceInWeiAsync(takerAddress);
-
- if (balanceWei < buyQuote.worstCaseQuoteInfo.totalEthAmount) {
- const balanceError = new Error(ZeroExInstantError.InsufficientBalance);
- errorUtil.errorFlasher.flashNewError(dispatch, balanceError);
- return false;
+ const hasEnoughFunds = await hasSufficientFunds(takerAddress, buyQuote, web3Wrapper);
+ if (hasEnoughFunds) {
+ return true;
}
- return true;
+ const balanceError = new Error(ZeroExInstantError.InsufficientBalance);
+ errorUtil.errorFlasher.flashNewError(dispatch, balanceError);
+ return false;
},
};