Identify token transactions by method names token data, and not just whether they've been add via metamask.

feature/default_network_editable
Dan 7 years ago
parent 424e98f6a8
commit dc92b56f18
  1. 1
      ui/app/components/pending-tx/confirm-send-token.js
  2. 14
      ui/app/components/pending-tx/index.js
  3. 3
      ui/app/selectors.js

@ -86,6 +86,7 @@ function mapDispatchToProps (dispatch, ownProps) {
amount: tokenAmountInHex, amount: tokenAmountInHex,
errors: { to: null, amount: null }, errors: { to: null, amount: null },
editingTransactionId: id, editingTransactionId: id,
token: ownProps.token,
})) }))
dispatch(actions.showSendTokenPage()) dispatch(actions.showSendTokenPage())
}, },

@ -63,14 +63,17 @@ PendingTx.prototype.componentWillMount = async function () {
isFetching: false, isFetching: false,
}) })
} }
const tokenData = txParams && abiDecoder.decodeMethod(txParams.data)
const { name: tokenMethodName } = tokenData || {}
const isTokenTransaction = ['transfer', 'approve', 'transferFrom']
.find(possibleName => tokenMethodName === possibleName)
try { if (isTokenTransaction) {
const token = util.getContractAtAddress(txParams.to) const token = util.getContractAtAddress(txParams.to)
const results = await Promise.all([ const results = await Promise.all([
token.symbol(), token.symbol(),
token.decimals(), token.decimals(),
]) ])
const [ symbol, decimals ] = results const [ symbol, decimals ] = results
if (symbol[0] && decimals[0]) { if (symbol[0] && decimals[0]) {
@ -83,11 +86,14 @@ PendingTx.prototype.componentWillMount = async function () {
}) })
} else { } else {
this.setState({ this.setState({
transactionType: TX_TYPES.SEND_ETHER, transactionType: TX_TYPES.SEND_TOKEN,
tokenAddress: txParams.to,
tokenSymbol: null,
tokenDecimals: null,
isFetching: false, isFetching: false,
}) })
} }
} catch (e) { } else {
this.setState({ this.setState({
transactionType: TX_TYPES.SEND_ETHER, transactionType: TX_TYPES.SEND_ETHER,
isFetching: false, isFetching: false,

@ -55,8 +55,9 @@ function getSelectedToken (state) {
const tokens = state.metamask.tokens || [] const tokens = state.metamask.tokens || []
const selectedTokenAddress = state.metamask.selectedTokenAddress const selectedTokenAddress = state.metamask.selectedTokenAddress
const selectedToken = tokens.filter(({ address }) => address === selectedTokenAddress)[0] const selectedToken = tokens.filter(({ address }) => address === selectedTokenAddress)[0]
const sendToken = state.metamask.send.token
return selectedToken || null return selectedToken || sendToken || null
} }
function getSelectedTokenExchangeRate (state) { function getSelectedTokenExchangeRate (state) {

Loading…
Cancel
Save