aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/scripts/background.js2
-rw-r--r--app/scripts/controllers/preferences.js41
-rw-r--r--app/scripts/metamask-controller.js2
-rw-r--r--ui/app/components/pages/confirm-add-token/confirm-add-token.container.js8
-rw-r--r--ui/app/components/pages/home.js16
5 files changed, 67 insertions, 2 deletions
diff --git a/app/scripts/background.js b/app/scripts/background.js
index 7eb7b1255..c0b00730d 100644
--- a/app/scripts/background.js
+++ b/app/scripts/background.js
@@ -253,6 +253,7 @@ function setupController (initState, initLangCode) {
showUnconfirmedMessage: triggerUi,
unlockAccountMessage: triggerUi,
showUnapprovedTx: triggerUi,
+ showAddTokenUi: triggerUi,
// initial state
initState,
// initial locale code
@@ -446,3 +447,4 @@ extension.runtime.onInstalled.addListener(function (details) {
extension.tabs.create({url: 'https://metamask.io/#how-it-works'})
}
})
+
diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js
index f6250dc16..8a4a63bb6 100644
--- a/app/scripts/controllers/preferences.js
+++ b/app/scripts/controllers/preferences.js
@@ -25,6 +25,7 @@ class PreferencesController {
frequentRpcList: [],
currentAccountTab: 'history',
tokens: [],
+ suggestedTokens: {},
useBlockie: false,
featureFlags: {},
currentLocale: opts.initLangCode,
@@ -35,6 +36,7 @@ class PreferencesController {
this.diagnostics = opts.diagnostics
this.store = new ObservableStore(initState)
+ this.showAddTokenUi = opts.showAddTokenUi
}
// PUBLIC METHODS
@@ -48,6 +50,45 @@ class PreferencesController {
this.store.updateState({ useBlockie: val })
}
+ getSuggestedTokens () {
+ return this.store.getState().suggestedTokens
+ }
+
+ addSuggestedToken (tokenOpts) {
+ // TODO: Validate params
+ const suggested = this.getSuggestedTokens()
+ suggested[tokenOpts.address] = suggested
+ this.store.updateState({ suggestedTokens: suggested })
+ }
+
+ /**
+ * RPC engine middleware for requesting new token added
+ *
+ * @param req
+ * @param res
+ * @param {Function} - next
+ * @param {Function} - end
+ */
+ requestAddToken(req, res, next, end) {
+ if (req.method === 'eth_watchToken') {
+ // TODO: Validate params!
+ const [ rawAddress, symbol, decimals ] = req.params
+
+ const tokenOpts = {
+ address: rawAddress,
+ decimals,
+ symbol,
+ }
+
+ this.addSuggestedToken(tokenOpts)
+ this.showAddTokenUi()
+
+ return end(rawAddress)
+ } else {
+ return next()
+ }
+ }
+
/**
* Getter for the `useBlockie` property
*
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index bcc7075c2..e843ec660 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -87,6 +87,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.preferencesController = new PreferencesController({
initState: initState.PreferencesController,
initLangCode: opts.initLangCode,
+ showAddTokenUi: opts.showAddTokenUi,
})
// currency controller
@@ -1242,6 +1243,7 @@ module.exports = class MetamaskController extends EventEmitter {
engine.push(createOriginMiddleware({ origin }))
engine.push(createLoggerMiddleware({ origin }))
engine.push(filterMiddleware)
+ engine.push(this.preferencesController.requestAddToken.bind(this.preferencesController))
engine.push(createProviderMiddleware({ provider: this.provider }))
// setup connection
diff --git a/ui/app/components/pages/confirm-add-token/confirm-add-token.container.js b/ui/app/components/pages/confirm-add-token/confirm-add-token.container.js
index 0190024d9..500b406bb 100644
--- a/ui/app/components/pages/confirm-add-token/confirm-add-token.container.js
+++ b/ui/app/components/pages/confirm-add-token/confirm-add-token.container.js
@@ -1,12 +1,16 @@
import { connect } from 'react-redux'
import ConfirmAddToken from './confirm-add-token.component'
+const extend = require('xtend')
+
const { addTokens, clearPendingTokens } = require('../../../actions')
const mapStateToProps = ({ metamask }) => {
- const { pendingTokens } = metamask
+ const { pendingTokens, suggestedTokens } = metamask
+ const params = extend(pendingTokens, suggestedTokens)
+
return {
- pendingTokens,
+ pendingTokens: params,
}
}
diff --git a/ui/app/components/pages/home.js b/ui/app/components/pages/home.js
index 5e3fdc9af..cd4bf9033 100644
--- a/ui/app/components/pages/home.js
+++ b/ui/app/components/pages/home.js
@@ -25,6 +25,7 @@ const {
RESTORE_VAULT_ROUTE,
CONFIRM_TRANSACTION_ROUTE,
NOTICE_ROUTE,
+ CONFIRM_ADD_TOKEN_ROUTE,
} = require('../../routes')
const { unconfirmedTransactionsCountSelector } = require('../../selectors/confirm-transaction')
@@ -33,9 +34,20 @@ class Home extends Component {
componentDidMount () {
const {
history,
+ unapprovedTxs = {},
+ unapprovedMsgCount = 0,
+ unapprovedPersonalMsgCount = 0,
+ unapprovedTypedMessagesCount = 0,
+ suggestedTokens = {},
unconfirmedTransactionsCount = 0,
+
} = this.props
+ // suggested new tokens
+ if (suggestedTokens.length > 0) {
+ history.push(CONFIRM_ADD_TOKEN_ROUTE)
+ }
+
// unapprovedTxs and unapproved messages
if (unconfirmedTransactionsCount > 0) {
history.push(CONFIRM_TRANSACTION_ROUTE)
@@ -165,7 +177,11 @@ Home.propTypes = {
isPopup: PropTypes.bool,
isMouseUser: PropTypes.bool,
t: PropTypes.func,
+<<<<<<< HEAD
+ suggestedTokens: PropTypes.object,
+=======
unconfirmedTransactionsCount: PropTypes.number,
+>>>>>>> develop
}
function mapStateToProps (state) {