aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/scripts/metamask-controller.js68
-rw-r--r--app/scripts/transaction-manager.js17
-rw-r--r--test/unit/tx-manager-test.js15
3 files changed, 53 insertions, 47 deletions
diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js
index 468e7d285..cc30a97e6 100644
--- a/app/scripts/metamask-controller.js
+++ b/app/scripts/metamask-controller.js
@@ -29,12 +29,14 @@ module.exports = class MetamaskController extends EventEmitter {
constructor (opts) {
super()
this.opts = opts
- this.state = { network: 'loading' }
let initState = opts.initState || {}
// observable state store
this.store = new ObservableStore(initState)
+ // network store
+ this.networkStore = new ObservableStore({ network: 'loading' })
+
// config manager
this.configManager = new ConfigManager({
store: this.store,
@@ -49,7 +51,7 @@ module.exports = class MetamaskController extends EventEmitter {
// rpc provider
this.provider = this.initializeProvider(opts)
this.provider.on('block', this.logBlock.bind(this))
- this.provider.on('error', this.getNetwork.bind(this))
+ this.provider.on('error', this.verifyNetwork.bind(this))
// eth data query tools
this.ethQuery = new EthQuery(this.provider)
@@ -59,7 +61,7 @@ module.exports = class MetamaskController extends EventEmitter {
this.keyringController = new KeyringController({
initState: initState.KeyringController,
ethStore: this.ethStore,
- getNetwork: this.getStateNetwork.bind(this),
+ getNetwork: this.getNetworkState.bind(this),
})
this.keyringController.on('newAccount', (address) => {
this.preferencesController.setSelectedAddress(address)
@@ -68,10 +70,11 @@ module.exports = class MetamaskController extends EventEmitter {
// tx mgmt
this.txManager = new TxManager({
- initState: initState.TxManager,
+ initState: initState.TransactionManager,
+ networkStore: this.networkStore,
txHistoryLimit: 40,
getSelectedAddress: this.preferencesController.getSelectedAddress.bind(this.preferencesController),
- getNetwork: this.getStateNetwork.bind(this),
+ getNetwork: this.getNetworkState.bind(this),
signTransaction: this.keyringController.signTransaction.bind(this.keyringController),
provider: this.provider,
blockTracker: this.provider,
@@ -85,7 +88,7 @@ module.exports = class MetamaskController extends EventEmitter {
// to be uncommented when retrieving notices from a remote server.
// this.noticeController.startPolling()
- this.getNetwork()
+ this.lookupNetwork()
this.messageManager = new MessageManager()
this.publicConfigStore = this.initPublicConfigStore()
@@ -111,6 +114,7 @@ module.exports = class MetamaskController extends EventEmitter {
// manual mem state subscriptions
this.ethStore.on('update', this.sendUpdate.bind(this))
+ this.networkStore.subscribe(this.sendUpdate.bind(this))
this.keyringController.memStore.subscribe(this.sendUpdate.bind(this))
this.txManager.memStore.subscribe(this.sendUpdate.bind(this))
this.messageManager.memStore.subscribe(this.sendUpdate.bind(this))
@@ -176,7 +180,7 @@ module.exports = class MetamaskController extends EventEmitter {
{
isInitialized,
},
- this.state,
+ this.networkStore.getState(),
this.ethStore.getState(),
this.txManager.memStore.getState(),
this.messageManager.memStore.getState(),
@@ -571,16 +575,20 @@ module.exports = class MetamaskController extends EventEmitter {
buyEth (address, amount) {
if (!amount) amount = '5'
- var network = this.state.network
- var url = `https://buy.coinbase.com/?code=9ec56d01-7e81-5017-930c-513daa27bb6a&amount=${amount}&address=${address}&crypto_currency=ETH`
+ const network = this.getNetworkState()
+ let url
+
+ switch (network) {
+ case '1':
+ url = `https://buy.coinbase.com/?code=9ec56d01-7e81-5017-930c-513daa27bb6a&amount=${amount}&address=${address}&crypto_currency=ETH`
+ break
- if (network === '3') {
- url = 'https://faucet.metamask.io/'
+ case '3':
+ url = 'https://faucet.metamask.io/'
+ break
}
- extension.tabs.create({
- url,
- })
+ if (url) extension.tabs.create({ url })
}
createShapeShiftTx (depositAddress, depositType) {
@@ -602,21 +610,19 @@ module.exports = class MetamaskController extends EventEmitter {
verifyNetwork () {
// Check network when restoring connectivity:
- if (this.state.network === 'loading') {
- this.getNetwork()
- }
+ if (this.isNetworkLoading()) this.lookupNetwork()
}
setRpcTarget (rpcTarget) {
this.configManager.setRpcTarget(rpcTarget)
extension.runtime.reload()
- this.getNetwork()
+ this.lookupNetwork()
}
setProviderType (type) {
this.configManager.setProviderType(type)
extension.runtime.reload()
- this.getNetwork()
+ this.lookupNetwork()
}
useEtherscanProvider () {
@@ -624,26 +630,32 @@ module.exports = class MetamaskController extends EventEmitter {
extension.runtime.reload()
}
- getStateNetwork () {
- return this.state.network
+ getNetworkState () {
+ return this.networkStore.getState().network
+ }
+
+ setNetworkState (network) {
+ return this.networkStore.updateState({ network })
+ }
+
+ isNetworkLoading () {
+ return this.getNetworkState() === 'loading'
}
- getNetwork (err) {
+ lookupNetwork (err) {
if (err) {
- this.state.network = 'loading'
- this.sendUpdate()
+ this.setNetworkState('loading')
}
this.ethQuery.sendAsync({ method: 'net_version' }, (err, network) => {
if (err) {
- this.state.network = 'loading'
- return this.sendUpdate()
+ this.setNetworkState('loading')
+ return
}
if (global.METAMASK_DEBUG) {
console.log('web3.getNetwork returned ' + network)
}
- this.state.network = network
- this.sendUpdate()
+ this.setNetworkState(network)
})
}
diff --git a/app/scripts/transaction-manager.js b/app/scripts/transaction-manager.js
index 7949fb854..8d4cf6df3 100644
--- a/app/scripts/transaction-manager.js
+++ b/app/scripts/transaction-manager.js
@@ -12,12 +12,11 @@ module.exports = class TransactionManager extends EventEmitter {
constructor (opts) {
super()
this.store = new ObservableStore(extend({
- txList: [],
+ transactions: [],
gasMultiplier: 1,
}, opts.initState))
this.memStore = new ObservableStore({})
- // this.networkStore = opts.networkStore || new ObservableStore({})
- this.getNetwork = opts.getNetwork
+ this.networkStore = opts.networkStore || new ObservableStore({})
this.txHistoryLimit = opts.txHistoryLimit
this.getSelectedAddress = opts.getSelectedAddress
@@ -31,17 +30,21 @@ module.exports = class TransactionManager extends EventEmitter {
// memstore is computed from diskStore
this._updateMemstore()
this.store.subscribe(() => this._updateMemstore() )
- // this.networkStore.subscribe(() => this._updateMemstore() )
+ this.networkStore.subscribe(() => this._updateMemstore() )
}
getState () {
return this.memStore.getState()
}
+ getNetwork () {
+ return this.networkStore.getState().network
+ }
+
// Returns the tx list
getTxList () {
let network = this.getNetwork()
- let fullTxList = this.store.getState().txList
+ let fullTxList = this.store.getState().transactions
return fullTxList.filter(txMeta => txMeta.metamaskNetworkId === network)
}
@@ -365,8 +368,8 @@ module.exports = class TransactionManager extends EventEmitter {
// Saves the new/updated txList.
// Function is intended only for internal use
- _saveTxList (txList) {
- this.store.updateState({ txList })
+ _saveTxList (transactions) {
+ this.store.updateState({ transactions })
}
_updateMemstore () {
diff --git a/test/unit/tx-manager-test.js b/test/unit/tx-manager-test.js
index f03294ce3..3b64f340b 100644
--- a/test/unit/tx-manager-test.js
+++ b/test/unit/tx-manager-test.js
@@ -1,6 +1,7 @@
const assert = require('assert')
const extend = require('xtend')
const EventEmitter = require('events')
+const ObservableStore = require('obs-store')
const STORAGE_KEY = 'metamask-persistance-key'
const TransactionManager = require('../../app/scripts/transaction-manager')
const noop = () => true
@@ -9,11 +10,10 @@ describe('Transaction Manager', function() {
let txManager
beforeEach(function() {
- txManager = new TransactionManager ({
- provider: "testnet",
+ txManager = new TransactionManager({
+ networkStore: new ObservableStore({ network: 'unit test' }),
txHistoryLimit: 10,
blockTracker: new EventEmitter(),
- getNetwork: function(){ return 'unit test' },
getSelectedAddress: function(){ return '0xabcd' },
})
})
@@ -50,15 +50,6 @@ describe('Transaction Manager', function() {
})
})
- describe('#_saveTxList', function() {
- it('saves the submitted data to the tx list', function() {
- var target = [{ foo: 'bar', metamaskNetworkId: 'unit test', txParams: {} }]
- txManager._saveTxList(target)
- var result = txManager.getTxList()
- assert.equal(result[0].foo, 'bar')
- })
- })
-
describe('#addTx', function() {
it('adds a tx returned in getTxList', function() {
var tx = { id: 1, status: 'confirmed', metamaskNetworkId: 'unit test', txParams: {} }