From 6e081eb17c8052dc626e1d113784ee8e1f9f96f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20Mi=C3=B1o?= Date: Tue, 20 Aug 2019 14:53:21 -0400 Subject: [PATCH] Filter non-ERC-20 assets during mobile sync (#7035) --- app/scripts/metamask-controller.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index b430ea8b9a40..1007412c6e87 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -55,6 +55,7 @@ const HW_WALLETS_KEYRINGS = [TrezorKeyring.type, LedgerBridgeKeyring.type] const EthQuery = require('eth-query') const ethUtil = require('ethereumjs-util') const sigUtil = require('eth-sig-util') +const contractMap = require('eth-contract-metadata') const { AddressBookController, CurrencyRateController, @@ -63,7 +64,6 @@ const { } = require('gaba') const backEndMetaMetricsEvent = require('./lib/backend-metametrics') - module.exports = class MetamaskController extends EventEmitter { /** @@ -650,8 +650,24 @@ module.exports = class MetamaskController extends EventEmitter { tokens, } = this.preferencesController.store.getState() + // Filter ERC20 tokens + const filteredAccountTokens = {} + Object.keys(accountTokens).forEach(address => { + const checksummedAddress = ethUtil.toChecksumAddress(address) + filteredAccountTokens[checksummedAddress] = {} + Object.keys(accountTokens[address]).forEach( + networkType => (filteredAccountTokens[checksummedAddress][networkType] = networkType !== 'mainnet' ? + accountTokens[address][networkType] : + accountTokens[address][networkType].filter(({ address }) => { + const tokenAddress = ethUtil.toChecksumAddress(address) + return contractMap[tokenAddress] ? contractMap[tokenAddress].erc20 : true + }) + ) + ) + }) + const preferences = { - accountTokens, + accountTokens: filteredAccountTokens, currentLocale, frequentRpcList, identities,