diff options
Diffstat (limited to 'packages/instant')
-rw-r--r-- | packages/instant/src/containers/selected_erc20_asset_amount_input.ts | 2 | ||||
-rw-r--r-- | packages/instant/src/util/address.ts | 2 | ||||
-rw-r--r-- | packages/instant/src/util/balance.ts | 26 |
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; }, }; |