diff --git a/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/index.jsx b/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/index.jsx index 72b93cf4..a0639876 100644 --- a/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/index.jsx +++ b/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/index.jsx @@ -2,6 +2,7 @@ import React, { useState } from 'react' import { List } from 'immutable' import { OnChange } from 'react-final-form-listeners' +import { FormSpy } from 'react-final-form' import { withStyles } from '@material-ui/core/styles' import Block from '~/components/layout/Block' import Paragraph from '~/components/layout/Paragraph' @@ -17,7 +18,7 @@ import Hairline from '~/components/layout/Hairline' import { composeValidators, required, mustBeEthereumAddress } from '~/components/forms/validator' import { type TokenProps } from '~/logic/tokens/store/model/token' import TokenPlaceholder from '~/routes/safe/components/Balances/assets/token_placeholder.svg' -import { checkTokenExistenceAndSetFields, INITIAL_FORM_STATE } from './validators' +import { addressIsTokenContract, INITIAL_FORM_STATE } from './validators' import { styles } from './style' type Props = { @@ -70,7 +71,7 @@ const AddCustomToken = (props: Props) => { validate={composeValidators( required, mustBeEthereumAddress, - checkTokenExistenceAndSetFields(setFormValue), + addressIsTokenContract, )} placeholder="Token contract address*" text="Token contract address*" diff --git a/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/validators.js b/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/validators.js index bfcd65f9..2d36d433 100644 --- a/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/validators.js +++ b/src/routes/safe/components/Balances/Tokens/screens/AddCustomToken/validators.js @@ -1,5 +1,5 @@ // @flow -import { fetchToken } from '~/logic/tokens/api' +import { getWeb3 } from '~/logic/wallets/getWeb3' export const INITIAL_FORM_STATE = { address: '', @@ -20,22 +20,12 @@ export const simpleMemoize = (fn: Function) => { } } -export const checkTokenExistenceAndSetFields = (updateForm: ?Function) => simpleMemoize(async (tokenAddress: string, anotherArgument, andAnotherone) => { - const relayToken = await fetchToken(tokenAddress) +// eslint-disable-next-line +export const addressIsTokenContract = simpleMemoize(async (tokenAddress: string) => { + const web3 = getWeb3() + const call = await web3.eth.call({ to: tokenAddress, data: web3.utils.sha3('totalSupply()') }) - if (!relayToken.data.count) { - return "Couldn't find the token" - } - - if (updateForm) { - const { - address, symbol, decimals, logoUri, - } = relayToken.data.results[0] - updateForm({ - address, - symbol, - decimals: String(decimals), - logoUri, - }) + if (call === '0x') { + return 'Not a token address' } })