1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-22 17:33:23 +01:00

Wraps calls to symbol() and decimals() in try catch

This commit is contained in:
Dan 2018-04-27 20:45:36 -02:30
parent 4e7b0ff15c
commit 6de450488b
3 changed files with 42 additions and 31 deletions

View File

@ -8,7 +8,7 @@ const abiDecoder = require('abi-decoder')
abiDecoder.addABI(abi)
const inherits = require('util').inherits
const actions = require('../../actions')
const util = require('../../util')
const { getSymbolAndDecimals } = require('../../token-util')
const ConfirmSendEther = require('./confirm-send-ether')
const ConfirmSendToken = require('./confirm-send-token')
const ConfirmDeployContract = require('./confirm-deploy-contract')
@ -26,6 +26,7 @@ function mapStateToProps (state) {
const {
conversionRate,
identities,
tokens: existingTokens,
} = state.metamask
const accounts = state.metamask.accounts
const selectedAddress = state.metamask.selectedAddress || Object.keys(accounts)[0]
@ -33,6 +34,7 @@ function mapStateToProps (state) {
conversionRate,
identities,
selectedAddress,
existingTokens,
}
}
@ -66,6 +68,7 @@ PendingTx.prototype.componentDidUpdate = function (prevProps, prevState) {
}
PendingTx.prototype.setTokenData = async function () {
const { existingTokens } = this.props
const txMeta = this.gatherTxMeta()
const txParams = txMeta.txParams || {}
@ -89,19 +92,14 @@ PendingTx.prototype.setTokenData = async function () {
}
if (isTokenTransaction) {
const token = util.getContractAtAddress(txParams.to)
const results = await Promise.all([
token.symbol(),
token.decimals(),
])
const [ symbol, decimals ] = results
const { symbol, decimals } = await getSymbolAndDecimals(txParams.to, existingTokens)
if (symbol[0] && decimals[0]) {
if (symbol && decimals) {
this.setState({
transactionType: TX_TYPES.SEND_TOKEN,
tokenAddress: txParams.to,
tokenSymbol: symbol[0],
tokenDecimals: decimals[0],
tokenSymbol: symbol,
tokenDecimals: decimals,
isFetching: false,
})
} else {

View File

@ -493,7 +493,7 @@ SendTransactionScreen.prototype.renderFooter = function () {
history,
} = this.props
const missingTokenBalance = selectedToken && !tokenBalance
const missingTokenBalance = selectedToken && (tokenBalance === null || tokenBalance === undefined)
const noErrors = !amountError && toError === null
return h('div.page-container__footer', [

View File

@ -1,14 +1,6 @@
const abi = require('human-standard-token-abi')
const Eth = require('ethjs-query')
const EthContract = require('ethjs-contract')
const tokenInfoGetter = function () {
if (typeof global.ethereumProvider === 'undefined') return
const eth = new Eth(global.ethereumProvider)
const contract = new EthContract(eth)
const TokenContract = contract(abi)
const util = require('./util')
function tokenInfoGetter () {
const tokens = {}
return async (address) => {
@ -16,18 +8,38 @@ const tokenInfoGetter = function () {
return tokens[address]
}
const contract = TokenContract.at(address)
tokens[address] = await getSymbolAndDecimals(address)
const result = await Promise.all([
contract.symbol(),
contract.decimals(),
return tokens[address]
}
}
async function getSymbolAndDecimals (tokenAddress, existingTokens = []) {
const existingToken = existingTokens.find(({ address }) => tokenAddress === address)
if (existingToken) {
return {
symbol: existingToken.symbol,
decimals: existingToken.decimals,
}
}
let result = []
try {
const token = util.getContractAtAddress(tokenAddress)
result = await Promise.all([
token.symbol(),
token.decimals(),
])
} catch (err) {
console.log(`symbol() and decimal() calls for token at address ${tokenAddress} resulted in error:`, err)
}
const [ symbol = [], decimals = [] ] = result
tokens[address] = { symbol: symbol[0], decimals: decimals[0] }
return tokens[address]
return {
symbol: symbol[0],
decimals: decimals[0],
}
}
@ -42,4 +54,5 @@ function calcTokenAmount (value, decimals) {
module.exports = {
tokenInfoGetter,
calcTokenAmount,
getSymbolAndDecimals,
}