From 2770df80e3cdd4d539b88c6d018108cb07211748 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Wed, 25 Jul 2018 16:14:10 -0400 Subject: add & delete tokens per account --- app/scripts/controllers/detect-tokens.js | 2 +- app/scripts/controllers/preferences.js | 33 +++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/app/scripts/controllers/detect-tokens.js b/app/scripts/controllers/detect-tokens.js index 195ec918a..62e639795 100644 --- a/app/scripts/controllers/detect-tokens.js +++ b/app/scripts/controllers/detect-tokens.js @@ -85,7 +85,7 @@ class DetectTokensController { set preferences (preferences) { if (!preferences) { return } this._preferences = preferences - preferences.store.subscribe(({ tokens }) => { this.tokenAddresses = tokens.map((obj) => { return obj.address }) }) + preferences.store.subscribe(({ tokens = [] }) => { this.tokenAddresses = tokens.map((obj) => { return obj.address }) }) preferences.store.subscribe(({ selectedAddress }) => { if (this.selectedAddress !== selectedAddress) { this.selectedAddress = selectedAddress diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index f6250dc16..878333481 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -24,6 +24,7 @@ class PreferencesController { const initState = extend({ frequentRpcList: [], currentAccountTab: 'history', + addressTokens: {}, tokens: [], useBlockie: false, featureFlags: {}, @@ -35,6 +36,16 @@ class PreferencesController { this.diagnostics = opts.diagnostics this.store = new ObservableStore(initState) + + Object.defineProperty(this.store._state, 'tokens', { + get: () => { + const selectedAddress = this.store.getState().selectedAddress + const tokens = this.store.getState().addressTokens + // TODO when create vault + if (!(selectedAddress in tokens)) return [] + return tokens[selectedAddress] + }, + }) } // PUBLIC METHODS @@ -117,14 +128,16 @@ class PreferencesController { */ addAddresses (addresses) { const identities = this.store.getState().identities + const addressTokens = this.store.getState().addressTokens addresses.forEach((address) => { // skip if already exists if (identities[address]) return // add missing identity const identityCount = Object.keys(identities).length + if (!(address in addressTokens)) addressTokens[address] = [] identities[address] = { name: `Account ${identityCount + 1}`, address } }) - this.store.updateState({ identities }) + this.store.updateState({ identities, addressTokens }) } /* @@ -181,7 +194,8 @@ class PreferencesController { setSelectedAddress (_address) { return new Promise((resolve, reject) => { const address = normalizeAddress(_address) - this.store.updateState({ selectedAddress: address }) + const tokens = this.store.getState().addressTokens[_address] + this.store.updateState({ selectedAddress: address, tokens: tokens }) resolve() }) } @@ -233,7 +247,10 @@ class PreferencesController { tokens.push(newEntry) } - this.store.updateState({ tokens }) + const selectedAddress = this.store.getState().selectedAddress + const addressTokens = this.store.getState().addressTokens + addressTokens[selectedAddress] = tokens + this.store.updateState({ addressTokens }) return Promise.resolve(tokens) } @@ -246,11 +263,13 @@ class PreferencesController { * */ removeToken (rawAddress) { - const tokens = this.store.getState().tokens - - const updatedTokens = tokens.filter(token => token.address !== rawAddress) + const addressTokens = this.store.getState().addressTokens + const selectedAddress = this.store.getState().selectedAddress + + const updatedTokens = addressTokens[selectedAddress].filter(token => token.address !== rawAddress) + addressTokens[selectedAddress] = updatedTokens + this.store.updateState({ addressTokens, tokens: updatedTokens }) - this.store.updateState({ tokens: updatedTokens }) return Promise.resolve(updatedTokens) } -- cgit From adee549c43ace4809e9e9779a3bd9c0dc75aaa17 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Wed, 25 Jul 2018 17:46:31 -0400 Subject: preferences test fixes for tokens per account --- app/scripts/controllers/preferences.js | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index 878333481..1b1044955 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -40,10 +40,9 @@ class PreferencesController { Object.defineProperty(this.store._state, 'tokens', { get: () => { const selectedAddress = this.store.getState().selectedAddress - const tokens = this.store.getState().addressTokens - // TODO when create vault - if (!(selectedAddress in tokens)) return [] - return tokens[selectedAddress] + const addressTokens = this.store.getState().addressTokens + if (!(selectedAddress in addressTokens)) return [] + return addressTokens[selectedAddress] }, }) } @@ -88,12 +87,16 @@ class PreferencesController { */ setAddresses (addresses) { const oldIdentities = this.store.getState().identities + const addressTokens = this.store.getState().addressTokens const identities = addresses.reduce((ids, address, index) => { const oldId = oldIdentities[address] || {} ids[address] = {name: `Account ${index + 1}`, address, ...oldId} return ids }, {}) - this.store.updateState({ identities }) + for (const address in identities) { + if (!(address in addressTokens)) addressTokens[address] = [] + } + this.store.updateState({ identities, addressTokens }) } /** @@ -104,11 +107,13 @@ class PreferencesController { */ removeAddress (address) { const identities = this.store.getState().identities + const addressTokens = this.store.getState().addressTokens if (!identities[address]) { throw new Error(`${address} can't be deleted cause it was not found`) } delete identities[address] - this.store.updateState({ identities }) + delete addressTokens[address] + this.store.updateState({ identities, addressTokens }) // If the selected account is no longer valid, // select an arbitrary other account: @@ -194,8 +199,10 @@ class PreferencesController { setSelectedAddress (_address) { return new Promise((resolve, reject) => { const address = normalizeAddress(_address) - const tokens = this.store.getState().addressTokens[_address] - this.store.updateState({ selectedAddress: address, tokens: tokens }) + const addressTokens = this.store.getState().addressTokens + if (!(address in addressTokens)) addressTokens[address] = [] + const tokens = addressTokens[address] + this.store.updateState({ selectedAddress: address, tokens }) resolve() }) } @@ -265,7 +272,7 @@ class PreferencesController { removeToken (rawAddress) { const addressTokens = this.store.getState().addressTokens const selectedAddress = this.store.getState().selectedAddress - + const updatedTokens = addressTokens[selectedAddress].filter(token => token.address !== rawAddress) addressTokens[selectedAddress] = updatedTokens this.store.updateState({ addressTokens, tokens: updatedTokens }) -- cgit From 1d3ad7cfbbdf5831f10eed774244ba1ccedf25d1 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Thu, 26 Jul 2018 18:04:34 -0400 Subject: tokens per network for individual account --- app/scripts/controllers/preferences.js | 66 ++++++++++++++++++++++++++-------- app/scripts/metamask-controller.js | 1 + 2 files changed, 52 insertions(+), 15 deletions(-) diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index 1b1044955..6ad8a5696 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -34,16 +34,17 @@ class PreferencesController { }, opts.initState) this.diagnostics = opts.diagnostics - + this.network = opts.network this.store = new ObservableStore(initState) - - Object.defineProperty(this.store._state, 'tokens', { - get: () => { + this._defineTokensGetter(this.store._state) + this.network.providerStore.subscribe(({ type }) => { const selectedAddress = this.store.getState().selectedAddress const addressTokens = this.store.getState().addressTokens - if (!(selectedAddress in addressTokens)) return [] - return addressTokens[selectedAddress] - }, + if (!(type in addressTokens)) addressTokens[type] = {} + if (!(selectedAddress in addressTokens[type])) addressTokens[type][selectedAddress] = [] + const tokens = addressTokens[type][selectedAddress] + this.store.updateState({ tokens }) + }) } // PUBLIC METHODS @@ -88,13 +89,15 @@ class PreferencesController { setAddresses (addresses) { const oldIdentities = this.store.getState().identities const addressTokens = this.store.getState().addressTokens + const providerType = this.network.providerStore.getState().type const identities = addresses.reduce((ids, address, index) => { const oldId = oldIdentities[address] || {} ids[address] = {name: `Account ${index + 1}`, address, ...oldId} return ids }, {}) for (const address in identities) { - if (!(address in addressTokens)) addressTokens[address] = [] + if (!(providerType in addressTokens)) addressTokens[providerType] = {} + if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = [] } this.store.updateState({ identities, addressTokens }) } @@ -134,12 +137,16 @@ class PreferencesController { addAddresses (addresses) { const identities = this.store.getState().identities const addressTokens = this.store.getState().addressTokens + const providerType = this.network.providerStore.getState().type + addresses.forEach((address) => { // skip if already exists if (identities[address]) return // add missing identity const identityCount = Object.keys(identities).length - if (!(address in addressTokens)) addressTokens[address] = [] + + if (!(providerType in addressTokens)) addressTokens[providerType] = {} + if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = [] identities[address] = { name: `Account ${identityCount + 1}`, address } }) this.store.updateState({ identities, addressTokens }) @@ -200,8 +207,14 @@ class PreferencesController { return new Promise((resolve, reject) => { const address = normalizeAddress(_address) const addressTokens = this.store.getState().addressTokens - if (!(address in addressTokens)) addressTokens[address] = [] - const tokens = addressTokens[address] + const providerType = this.network.providerStore.getState().type + + if (!(providerType in addressTokens)) addressTokens[providerType] = {} + + if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = [] + + const tokens = addressTokens[providerType][address] + this.store.updateState({ selectedAddress: address, tokens }) resolve() }) @@ -256,7 +269,10 @@ class PreferencesController { const selectedAddress = this.store.getState().selectedAddress const addressTokens = this.store.getState().addressTokens - addressTokens[selectedAddress] = tokens + const providerType = this.network.providerStore.getState().type + + if (!(providerType in addressTokens)) addressTokens[providerType] = {} + addressTokens[providerType][selectedAddress] = tokens this.store.updateState({ addressTokens }) return Promise.resolve(tokens) @@ -272,9 +288,9 @@ class PreferencesController { removeToken (rawAddress) { const addressTokens = this.store.getState().addressTokens const selectedAddress = this.store.getState().selectedAddress - - const updatedTokens = addressTokens[selectedAddress].filter(token => token.address !== rawAddress) - addressTokens[selectedAddress] = updatedTokens + const providerType = this.network.providerStore.getState().type + const updatedTokens = addressTokens[providerType][selectedAddress].filter(token => token.address !== rawAddress) + addressTokens[providerType][selectedAddress] = updatedTokens this.store.updateState({ addressTokens, tokens: updatedTokens }) return Promise.resolve(updatedTokens) @@ -402,6 +418,26 @@ class PreferencesController { // // PRIVATE METHODS // + + /** + * Getter definition for the `tokens` property of store + * + * @param {object} object Store state + * + */ + + _defineTokensGetter (object) { + Object.defineProperty(object, 'tokens', { + get: () => { + const selectedAddress = this.store.getState().selectedAddress + const addressTokens = this.store.getState().addressTokens + const providerType = this.network.providerStore.getState().type + if (!(providerType in addressTokens)) addressTokens[providerType] = {} + if (!(selectedAddress in addressTokens[providerType])) return [] + return addressTokens[providerType][selectedAddress] + }, + }) + } } module.exports = PreferencesController diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index bcc7075c2..df84bcba4 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, + network: this.networkController, }) // currency controller -- cgit From 2827e13caab87692aa085af380355aeb42a13bdf Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Thu, 26 Jul 2018 19:28:12 -0400 Subject: add & delete tokens per network --- app/scripts/controllers/preferences.js | 18 ++++++++---------- ui/app/actions.js | 3 ++- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index 6ad8a5696..7ad3ce1e3 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -204,20 +204,18 @@ class PreferencesController { * */ setSelectedAddress (_address) { - return new Promise((resolve, reject) => { - const address = normalizeAddress(_address) - const addressTokens = this.store.getState().addressTokens - const providerType = this.network.providerStore.getState().type + const address = normalizeAddress(_address) + const addressTokens = this.store.getState().addressTokens + const providerType = this.network.providerStore.getState().type - if (!(providerType in addressTokens)) addressTokens[providerType] = {} + if (!(providerType in addressTokens)) addressTokens[providerType] = {} - if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = [] + if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = [] - const tokens = addressTokens[providerType][address] + const tokens = addressTokens[providerType][address] - this.store.updateState({ selectedAddress: address, tokens }) - resolve() - }) + this.store.updateState({ selectedAddress: address, tokens }) + return Promise.resolve(tokens) } /** diff --git a/ui/app/actions.js b/ui/app/actions.js index 7a8d9667d..4f71d911b 100644 --- a/ui/app/actions.js +++ b/ui/app/actions.js @@ -1483,11 +1483,12 @@ function showAccountDetail (address) { return (dispatch) => { dispatch(actions.showLoadingIndication()) log.debug(`background.setSelectedAddress`) - background.setSelectedAddress(address, (err) => { + background.setSelectedAddress(address, (err, tokens) => { dispatch(actions.hideLoadingIndication()) if (err) { return dispatch(actions.displayWarning(err.message)) } + dispatch(updateTokens(tokens)) dispatch({ type: actions.SHOW_ACCOUNT_DETAIL, value: address, -- cgit From f79a249bcc65e594dcd058c30eab2620242ade9c Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Thu, 26 Jul 2018 20:04:57 -0400 Subject: modify tests according to tokens by network --- test/unit/app/controllers/detect-tokens-test.js | 21 ++++----------------- .../app/controllers/preferences-controller-test.js | 5 ++++- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/test/unit/app/controllers/detect-tokens-test.js b/test/unit/app/controllers/detect-tokens-test.js index 426ffe23a..d6c3fad8a 100644 --- a/test/unit/app/controllers/detect-tokens-test.js +++ b/test/unit/app/controllers/detect-tokens-test.js @@ -7,10 +7,11 @@ const PreferencesController = require('../../../../app/scripts/controllers/prefe describe('DetectTokensController', () => { const sandbox = sinon.createSandbox() - let clock - let keyringMemStore - before(async () => { + let clock, keyringMemStore, network, preferences + beforeEach(async () => { keyringMemStore = new ObservableStore({ isUnlocked: false}) + network = new NetworkController({ provider: { type: 'mainnet' }}) + preferences = new PreferencesController({ network }) }) after(() => { sandbox.restore() @@ -25,9 +26,7 @@ describe('DetectTokensController', () => { it('should be called on every polling period', async () => { clock = sandbox.useFakeTimers() - const network = new NetworkController() network.setProviderType('mainnet') - const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isOpen = true controller.isUnlocked = true @@ -45,9 +44,7 @@ describe('DetectTokensController', () => { }) it('should not check tokens while in test network', async () => { - const network = new NetworkController() network.setProviderType('rinkeby') - const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isOpen = true controller.isUnlocked = true @@ -61,9 +58,7 @@ describe('DetectTokensController', () => { }) it('should only check and add tokens while in main network', async () => { - const network = new NetworkController() network.setProviderType('mainnet') - const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isOpen = true controller.isUnlocked = true @@ -80,9 +75,7 @@ describe('DetectTokensController', () => { }) it('should not detect same token while in main network', async () => { - const network = new NetworkController() network.setProviderType('mainnet') - const preferences = new PreferencesController() preferences.addToken('0x0d262e5dc4a06a0f1c90ce79c7a60c09dfc884e4', 'J8T', 8) const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isOpen = true @@ -100,9 +93,7 @@ describe('DetectTokensController', () => { }) it('should trigger detect new tokens when change address', async () => { - const network = new NetworkController() network.setProviderType('mainnet') - const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isOpen = true controller.isUnlocked = true @@ -112,9 +103,7 @@ describe('DetectTokensController', () => { }) it('should trigger detect new tokens when submit password', async () => { - const network = new NetworkController() network.setProviderType('mainnet') - const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isOpen = true controller.selectedAddress = '0x0' @@ -124,9 +113,7 @@ describe('DetectTokensController', () => { }) it('should not trigger detect new tokens when not open or not unlocked', async () => { - const network = new NetworkController() network.setProviderType('mainnet') - const preferences = new PreferencesController() const controller = new DetectTokensController({ preferences: preferences, network: network, keyringMemStore: keyringMemStore }) controller.isOpen = true controller.isUnlocked = false diff --git a/test/unit/app/controllers/preferences-controller-test.js b/test/unit/app/controllers/preferences-controller-test.js index e055500b1..0b96fdfa5 100644 --- a/test/unit/app/controllers/preferences-controller-test.js +++ b/test/unit/app/controllers/preferences-controller-test.js @@ -1,11 +1,14 @@ const assert = require('assert') +const ObservableStore = require('obs-store') const PreferencesController = require('../../../../app/scripts/controllers/preferences') describe('preferences controller', function () { let preferencesController + let network beforeEach(() => { - preferencesController = new PreferencesController() + network = {providerStore: new ObservableStore({ type: 'mainnet' })} + preferencesController = new PreferencesController({ network }) }) describe('setAddresses', function () { -- cgit From f5107fa12efcafe2d7e6531399f53c524192e6d6 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Fri, 27 Jul 2018 14:56:03 -0400 Subject: migration for preferences controller tokens --- app/scripts/migrations/028.js | 37 +++++++++++++++++++++++++++++++++++++ app/scripts/migrations/index.js | 1 + 2 files changed, 38 insertions(+) create mode 100644 app/scripts/migrations/028.js diff --git a/app/scripts/migrations/028.js b/app/scripts/migrations/028.js new file mode 100644 index 000000000..ce52cec05 --- /dev/null +++ b/app/scripts/migrations/028.js @@ -0,0 +1,37 @@ +// next version number +const version = 28 + +/* + +normalizes txParams on unconfirmed txs + +*/ +const clone = require('clone') + +module.exports = { + version, + + migrate: async function (originalVersionedData) { + const versionedData = clone(originalVersionedData) + versionedData.meta.version = version + const state = versionedData.data + const newState = transformState(state) + versionedData.data = newState + return versionedData + }, +} + +function transformState (state) { + const newState = state + + if (newState.PreferencesController) { + if (newState.PreferencesController.tokens) { + const tokens = newState.TransactionController.tokens + const selectedAddress = newState.PreferencesController.selectedAddress + newState.PreferencesController.tokens = [] + newState.PreferencesController.addressTokens = {'mainnet': {selectedAddress: tokens}} + } + } + + return newState +} diff --git a/app/scripts/migrations/index.js b/app/scripts/migrations/index.js index 04d90bfff..2499b7fd1 100644 --- a/app/scripts/migrations/index.js +++ b/app/scripts/migrations/index.js @@ -37,4 +37,5 @@ module.exports = [ require('./024'), require('./025'), require('./026'), + require('./028'), ] -- cgit From 5b9725d1f154e8ed0994c3aab844f696937b0e6e Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Fri, 27 Jul 2018 16:05:12 -0400 Subject: refactor to accountTokens --- app/scripts/controllers/preferences.js | 100 ++++++++++++++++----------------- app/scripts/migrations/028.js | 2 +- 2 files changed, 48 insertions(+), 54 deletions(-) diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index 7ad3ce1e3..88b6fa998 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -13,6 +13,7 @@ class PreferencesController { * @property {array} store.frequentRpcList A list of custom rpcs to provide the user * @property {string} store.currentAccountTab Indicates the selected tab in the ui * @property {array} store.tokens The tokens the user wants display in their token lists + * @property {object} store.accountTokens The tokens stored per account and then per network type * @property {boolean} store.useBlockie The users preference for blockie identicons within the UI * @property {object} store.featureFlags A key-boolean map, where keys refer to features and booleans to whether the * user wishes to see that feature @@ -24,7 +25,7 @@ class PreferencesController { const initState = extend({ frequentRpcList: [], currentAccountTab: 'history', - addressTokens: {}, + accountTokens: {}, tokens: [], useBlockie: false, featureFlags: {}, @@ -36,16 +37,8 @@ class PreferencesController { this.diagnostics = opts.diagnostics this.network = opts.network this.store = new ObservableStore(initState) - this._defineTokensGetter(this.store._state) - this.network.providerStore.subscribe(({ type }) => { - const selectedAddress = this.store.getState().selectedAddress - const addressTokens = this.store.getState().addressTokens - if (!(type in addressTokens)) addressTokens[type] = {} - if (!(selectedAddress in addressTokens[type])) addressTokens[type][selectedAddress] = [] - const tokens = addressTokens[type][selectedAddress] - this.store.updateState({ tokens }) - - }) + this._defineTokens() + this._subscribeProviderType() } // PUBLIC METHODS @@ -88,18 +81,17 @@ class PreferencesController { */ setAddresses (addresses) { const oldIdentities = this.store.getState().identities - const addressTokens = this.store.getState().addressTokens - const providerType = this.network.providerStore.getState().type + const accountTokens = this.store.getState().accountTokens + const identities = addresses.reduce((ids, address, index) => { const oldId = oldIdentities[address] || {} ids[address] = {name: `Account ${index + 1}`, address, ...oldId} return ids }, {}) for (const address in identities) { - if (!(providerType in addressTokens)) addressTokens[providerType] = {} - if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = [] + if (!(address in accountTokens)) accountTokens[address] = {} } - this.store.updateState({ identities, addressTokens }) + this.store.updateState({ identities, accountTokens }) } /** @@ -110,13 +102,13 @@ class PreferencesController { */ removeAddress (address) { const identities = this.store.getState().identities - const addressTokens = this.store.getState().addressTokens + const accountTokens = this.store.getState().accountTokens if (!identities[address]) { throw new Error(`${address} can't be deleted cause it was not found`) } delete identities[address] - delete addressTokens[address] - this.store.updateState({ identities, addressTokens }) + delete accountTokens[address] + this.store.updateState({ identities, accountTokens }) // If the selected account is no longer valid, // select an arbitrary other account: @@ -136,20 +128,17 @@ class PreferencesController { */ addAddresses (addresses) { const identities = this.store.getState().identities - const addressTokens = this.store.getState().addressTokens - const providerType = this.network.providerStore.getState().type - + const accountTokens = this.store.getState().accountTokens addresses.forEach((address) => { // skip if already exists if (identities[address]) return // add missing identity const identityCount = Object.keys(identities).length - if (!(providerType in addressTokens)) addressTokens[providerType] = {} - if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = [] + if (!(address in accountTokens)) accountTokens[address] = {} identities[address] = { name: `Account ${identityCount + 1}`, address } }) - this.store.updateState({ identities, addressTokens }) + this.store.updateState({ identities, accountTokens }) } /* @@ -205,16 +194,14 @@ class PreferencesController { */ setSelectedAddress (_address) { const address = normalizeAddress(_address) - const addressTokens = this.store.getState().addressTokens + const accountTokens = this.store.getState().accountTokens const providerType = this.network.providerStore.getState().type - if (!(providerType in addressTokens)) addressTokens[providerType] = {} - - if (!(address in addressTokens[providerType])) addressTokens[providerType][address] = [] - - const tokens = addressTokens[providerType][address] - + if (!(address in accountTokens)) accountTokens[address] = {} + if (!(providerType in accountTokens[address])) accountTokens[address][providerType] = [] + const tokens = accountTokens[address][providerType] this.store.updateState({ selectedAddress: address, tokens }) + return Promise.resolve(tokens) } @@ -266,12 +253,10 @@ class PreferencesController { } const selectedAddress = this.store.getState().selectedAddress - const addressTokens = this.store.getState().addressTokens + const accountTokens = this.store.getState().accountTokens const providerType = this.network.providerStore.getState().type - - if (!(providerType in addressTokens)) addressTokens[providerType] = {} - addressTokens[providerType][selectedAddress] = tokens - this.store.updateState({ addressTokens }) + accountTokens[selectedAddress][providerType] = tokens + this.store.updateState({ accountTokens, tokens }) return Promise.resolve(tokens) } @@ -284,12 +269,12 @@ class PreferencesController { * */ removeToken (rawAddress) { - const addressTokens = this.store.getState().addressTokens + const accountTokens = this.store.getState().accountTokens const selectedAddress = this.store.getState().selectedAddress const providerType = this.network.providerStore.getState().type - const updatedTokens = addressTokens[providerType][selectedAddress].filter(token => token.address !== rawAddress) - addressTokens[providerType][selectedAddress] = updatedTokens - this.store.updateState({ addressTokens, tokens: updatedTokens }) + const updatedTokens = accountTokens[selectedAddress][providerType].filter(token => token.address !== rawAddress) + accountTokens[selectedAddress][providerType] = updatedTokens + this.store.updateState({ accountTokens, tokens: updatedTokens }) return Promise.resolve(updatedTokens) } @@ -418,22 +403,31 @@ class PreferencesController { // /** - * Getter definition for the `tokens` property of store + * Getter definition for the `tokens` property of store when controller is initialized * - * @param {object} object Store state * */ + _defineTokens () { + const selectedAddress = this.store.getState().selectedAddress + const accountTokens = this.store.getState().accountTokens + const providerType = this.network.providerStore.getState().type + if (!(selectedAddress in accountTokens)) accountTokens[selectedAddress] = {} + if (!(providerType in accountTokens[selectedAddress])) return [] + this.tokens = accountTokens[selectedAddress][providerType] + } - _defineTokensGetter (object) { - Object.defineProperty(object, 'tokens', { - get: () => { - const selectedAddress = this.store.getState().selectedAddress - const addressTokens = this.store.getState().addressTokens - const providerType = this.network.providerStore.getState().type - if (!(providerType in addressTokens)) addressTokens[providerType] = {} - if (!(selectedAddress in addressTokens[providerType])) return [] - return addressTokens[providerType][selectedAddress] - }, + /** + * Subscription to network provider type + * + * + */ + _subscribeProviderType () { + this.network.providerStore.subscribe(({ type }) => { + const selectedAddress = this.store.getState().selectedAddress + const accountTokens = this.store.getState().accountTokens + if (!(type in accountTokens[selectedAddress])) accountTokens[selectedAddress][type] = [] + const tokens = accountTokens[selectedAddress][type] + this.store.updateState({ tokens }) }) } } diff --git a/app/scripts/migrations/028.js b/app/scripts/migrations/028.js index ce52cec05..e36884a9c 100644 --- a/app/scripts/migrations/028.js +++ b/app/scripts/migrations/028.js @@ -29,7 +29,7 @@ function transformState (state) { const tokens = newState.TransactionController.tokens const selectedAddress = newState.PreferencesController.selectedAddress newState.PreferencesController.tokens = [] - newState.PreferencesController.addressTokens = {'mainnet': {selectedAddress: tokens}} + newState.PreferencesController.accountTokens = {selectedAddress: {'mainnet': tokens}} } } -- cgit From e687bc5a47e2157193dfa099a0f45a97fa1aaed1 Mon Sep 17 00:00:00 2001 From: Esteban MIno Date: Fri, 27 Jul 2018 16:17:28 -0400 Subject: fix migration for preferences controller tokens --- app/scripts/migrations/028.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scripts/migrations/028.js b/app/scripts/migrations/028.js index e36884a9c..cbda48584 100644 --- a/app/scripts/migrations/028.js +++ b/app/scripts/migrations/028.js @@ -29,7 +29,7 @@ function transformState (state) { const tokens = newState.TransactionController.tokens const selectedAddress = newState.PreferencesController.selectedAddress newState.PreferencesController.tokens = [] - newState.PreferencesController.accountTokens = {selectedAddress: {'mainnet': tokens}} + newState.PreferencesController.accountTokens = {[selectedAddress]: {'mainnet': tokens}} } } -- cgit From d1734b8d7cc6cc96b133f3638783b153026b8618 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 27 Jul 2018 14:10:18 -0700 Subject: Update Phishing Html --- app/phishing.html | 49 ++++++++++++++++++++++++++----------------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/app/phishing.html b/app/phishing.html index 86f2985cc..e20c9ac9c 100644 --- a/app/phishing.html +++ b/app/phishing.html @@ -3,26 +3,29 @@ - Phishing Warning + Dangerous Website Warning