Move obs store into account-tracker instead of inheriting

feature/default_network_editable
Dan Finlay 7 years ago
parent 3bedcd3582
commit 2eca5455c0
  1. 4
      app/scripts/controllers/balance.js
  2. 6
      app/scripts/controllers/computed-balances.js
  3. 31
      app/scripts/lib/account-tracker.js
  4. 4
      app/scripts/metamask-controller.js

@ -36,12 +36,12 @@ class BalanceController {
this.txController.on('submitted', update) this.txController.on('submitted', update)
this.txController.on('confirmed', update) this.txController.on('confirmed', update)
this.txController.on('failed', update) this.txController.on('failed', update)
this.accountTracker.subscribe(update) this.accountTracker.store.subscribe(update)
this.blockTracker.on('block', update) this.blockTracker.on('block', update)
} }
async _getBalance () { async _getBalance () {
const { accounts } = this.accountTracker.getState() const { accounts } = this.accountTracker.store.getState()
const entry = accounts[this.address] const entry = accounts[this.address]
const balance = entry.balance const balance = entry.balance
return balance ? new BN(balance.substring(2), 16) : undefined return balance ? new BN(balance.substring(2), 16) : undefined

@ -20,15 +20,15 @@ class ComputedbalancesController {
} }
updateAllBalances () { updateAllBalances () {
for (let address in this.balances) { for (let address in this.accountTracker.store.getState().accounts) {
this.balances[address].updateBalance() this.balances[address].updateBalance()
} }
} }
_initBalanceUpdating () { _initBalanceUpdating () {
const store = this.accountTracker.getState() const store = this.accountTracker.store.getState()
this.addAnyAccountsFromStore(store) this.addAnyAccountsFromStore(store)
this.accountTracker.subscribe(this.addAnyAccountsFromStore.bind(this)) this.accountTracker.store.subscribe(this.addAnyAccountsFromStore.bind(this))
} }
addAnyAccountsFromStore(store) { addAnyAccountsFromStore(store) {

@ -10,16 +10,21 @@
const async = require('async') const async = require('async')
const EthQuery = require('eth-query') const EthQuery = require('eth-query')
const ObservableStore = require('obs-store') const ObservableStore = require('obs-store')
const EventEmitter = require('events').EventEmitter
function noop () {} function noop () {}
class EthereumStore extends ObservableStore { class AccountTracker extends EventEmitter {
constructor (opts = {}) { constructor (opts = {}) {
super({ super()
const initState = {
accounts: {}, accounts: {},
currentBlockGasLimit: '', currentBlockGasLimit: '',
}) }
this.store = new ObservableStore(initState)
this._provider = opts.provider this._provider = opts.provider
this._query = new EthQuery(this._provider) this._query = new EthQuery(this._provider)
this._blockTracker = opts.blockTracker this._blockTracker = opts.blockTracker
@ -34,17 +39,17 @@ class EthereumStore extends ObservableStore {
// //
addAccount (address) { addAccount (address) {
const accounts = this.getState().accounts const accounts = this.store.getState().accounts
accounts[address] = {} accounts[address] = {}
this.updateState({ accounts }) this.store.updateState({ accounts })
if (!this._currentBlockNumber) return if (!this._currentBlockNumber) return
this._updateAccount(address) this._updateAccount(address)
} }
removeAccount (address) { removeAccount (address) {
const accounts = this.getState().accounts const accounts = this.store.getState().accounts
delete accounts[address] delete accounts[address]
this.updateState({ accounts }) this.store.updateState({ accounts })
} }
// //
@ -55,31 +60,31 @@ class EthereumStore extends ObservableStore {
const blockNumber = '0x' + block.number.toString('hex') const blockNumber = '0x' + block.number.toString('hex')
this._currentBlockNumber = blockNumber this._currentBlockNumber = blockNumber
this.updateState({ currentBlockGasLimit: `0x${block.gasLimit.toString('hex')}` }) this.store.updateState({ currentBlockGasLimit: `0x${block.gasLimit.toString('hex')}` })
async.parallel([ async.parallel([
this._updateAccounts.bind(this), this._updateAccounts.bind(this),
], (err) => { ], (err) => {
if (err) return console.error(err) if (err) return console.error(err)
this.emit('block', this.getState()) this.emit('block', this.store.getState())
}) })
} }
_updateAccounts (cb = noop) { _updateAccounts (cb = noop) {
const accounts = this.getState().accounts const accounts = this.store.getState().accounts
const addresses = Object.keys(accounts) const addresses = Object.keys(accounts)
async.each(addresses, this._updateAccount.bind(this), cb) async.each(addresses, this._updateAccount.bind(this), cb)
} }
_updateAccount (address, cb = noop) { _updateAccount (address, cb = noop) {
const accounts = this.getState().accounts
this._getAccount(address, (err, result) => { this._getAccount(address, (err, result) => {
if (err) return cb(err) if (err) return cb(err)
result.address = address result.address = address
const accounts = this.store.getState().accounts
// only populate if the entry is still present // only populate if the entry is still present
if (accounts[address]) { if (accounts[address]) {
accounts[address] = result accounts[address] = result
this.updateState({ accounts }) this.store.updateState({ accounts })
} }
cb(null, result) cb(null, result)
}) })
@ -96,4 +101,4 @@ class EthereumStore extends ObservableStore {
} }
module.exports = EthereumStore module.exports = AccountTracker

@ -194,7 +194,7 @@ module.exports = class MetamaskController extends EventEmitter {
// manual mem state subscriptions // manual mem state subscriptions
this.networkController.store.subscribe(this.sendUpdate.bind(this)) this.networkController.store.subscribe(this.sendUpdate.bind(this))
this.accountTracker.subscribe(this.sendUpdate.bind(this)) this.accountTracker.store.subscribe(this.sendUpdate.bind(this))
this.txController.memStore.subscribe(this.sendUpdate.bind(this)) this.txController.memStore.subscribe(this.sendUpdate.bind(this))
this.balancesController.store.subscribe(this.sendUpdate.bind(this)) this.balancesController.store.subscribe(this.sendUpdate.bind(this))
this.messageManager.memStore.subscribe(this.sendUpdate.bind(this)) this.messageManager.memStore.subscribe(this.sendUpdate.bind(this))
@ -277,7 +277,7 @@ module.exports = class MetamaskController extends EventEmitter {
isInitialized, isInitialized,
}, },
this.networkController.store.getState(), this.networkController.store.getState(),
this.accountTracker.getState(), this.accountTracker.store.getState(),
this.txController.memStore.getState(), this.txController.memStore.getState(),
this.messageManager.memStore.getState(), this.messageManager.memStore.getState(),
this.personalMessageManager.memStore.getState(), this.personalMessageManager.memStore.getState(),

Loading…
Cancel
Save