Skip to content

Commit 828dbd7

Browse files
authored
Merge pull request #2155 from MetaMask/filter-fixes-moar
Various fixes you've been waiting for, how exciting!
2 parents ca0dff0 + e72083f commit 828dbd7

File tree

7 files changed

+56
-28
lines changed

7 files changed

+56
-28
lines changed

app/scripts/contentscript.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,21 @@ function setupStreams () {
4242
name: 'contentscript',
4343
target: 'inpage',
4444
})
45-
pageStream.on('error', console.error)
4645
const pluginPort = extension.runtime.connect({ name: 'contentscript' })
4746
const pluginStream = new PortStream(pluginPort)
48-
pluginStream.on('error', console.error)
4947

5048
// forward communication plugin->inpage
51-
pageStream.pipe(pluginStream).pipe(pageStream)
49+
pump(
50+
pageStream,
51+
pluginStream,
52+
pageStream,
53+
(err) => logStreamDisconnectWarning('MetaMask Contentscript Forwarding', err)
54+
)
5255

5356
// setup local multistream channels
5457
const mux = new ObjectMultiplex()
58+
mux.setMaxListeners(25)
59+
5560
pump(
5661
mux,
5762
pageStream,

app/scripts/controllers/network.js

Lines changed: 7 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const ObservableStore = require('obs-store')
44
const ComposedStore = require('obs-store/lib/composed')
55
const extend = require('xtend')
66
const EthQuery = require('eth-query')
7+
const createEventEmitterProxy = require('../lib/events-proxy.js')
78
const RPC_ADDRESS_LIST = require('../config.js').network
89
const DEFAULT_RPC = RPC_ADDRESS_LIST['rinkeby']
910

@@ -31,16 +32,8 @@ module.exports = class NetworkController extends EventEmitter {
3132
initializeProvider (opts, providerContructor = MetaMaskProvider) {
3233
this.providerInit = opts
3334
this._provider = providerContructor(opts)
34-
this._proxy = new Proxy(this._provider, {
35-
get: (obj, name) => {
36-
if (name === 'on') return this._on.bind(this)
37-
return this._provider[name]
38-
},
39-
set: (obj, name, value) => {
40-
this._provider[name] = value
41-
return value
42-
},
43-
})
35+
this._proxy = createEventEmitterProxy(this._provider)
36+
this.provider._blockTracker = createEventEmitterProxy(this._provider._blockTracker)
4437
this.provider.on('block', this._logBlock.bind(this))
4538
this.provider.on('error', this.verifyNetwork.bind(this))
4639
this.ethQuery = new EthQuery(this.provider)
@@ -55,11 +48,11 @@ module.exports = class NetworkController extends EventEmitter {
5548

5649
this._provider.removeAllListeners()
5750
this._provider.stop()
58-
this.provider = MetaMaskProvider(newInit)
51+
this._provider = MetaMaskProvider(newInit)
5952
// apply the listners created by other controllers
60-
Object.keys(this._providerListeners).forEach((key) => {
61-
this._providerListeners[key].forEach((handler) => this._provider.addListener(key, handler))
62-
})
53+
const blockTrackerHandlers = this.provider._blockTracker.proxyEventHandlers
54+
this.provider.setTarget(this._provider)
55+
this.provider._blockTracker = createEventEmitterProxy(this._provider._blockTracker, blockTrackerHandlers)
6356
this.emit('networkDidChange')
6457
}
6558

@@ -121,10 +114,4 @@ module.exports = class NetworkController extends EventEmitter {
121114
log.info(`BLOCK CHANGED: #${block.number.toString('hex')} 0x${block.hash.toString('hex')}`)
122115
this.verifyNetwork()
123116
}
124-
125-
_on (event, handler) {
126-
if (!this._providerListeners[event]) this._providerListeners[event] = []
127-
this._providerListeners[event].push(handler)
128-
this._provider.on(event, handler)
129-
}
130117
}

app/scripts/controllers/transactions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ module.exports = class TransactionController extends EventEmitter {
7070
this.pendingTxTracker.on('txFailed', this.setTxStatusFailed.bind(this))
7171
this.pendingTxTracker.on('txConfirmed', this.setTxStatusConfirmed.bind(this))
7272

73-
this.blockTracker.on('rawBlock', this.pendingTxTracker.checkForTxInBlock.bind(this.pendingTxTracker))
73+
this.blockTracker.on('block', this.pendingTxTracker.checkForTxInBlock.bind(this.pendingTxTracker))
7474
// this is a little messy but until ethstore has been either
7575
// removed or redone this is to guard against the race condition
7676
// where accountTracker hasent been populated by the results yet

app/scripts/lib/events-proxy.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module.exports = function createEventEmitterProxy(eventEmitter, listeners) {
2+
let target = eventEmitter
3+
const eventHandlers = listeners || {}
4+
const proxy = new Proxy({}, {
5+
get: (obj, name) => {
6+
// intercept listeners
7+
if (name === 'on') return addListener
8+
if (name === 'setTarget') return setTarget
9+
if (name === 'proxyEventHandlers') return eventHandlers
10+
return target[name]
11+
},
12+
set: (obj, name, value) => {
13+
target[name] = value
14+
return true
15+
},
16+
})
17+
function setTarget (eventEmitter) {
18+
target = eventEmitter
19+
// migrate listeners
20+
Object.keys(eventHandlers).forEach((name) => {
21+
eventHandlers[name].forEach((handler) => target.on(name, handler))
22+
})
23+
}
24+
function addListener (name, handler) {
25+
if (!eventHandlers[name]) eventHandlers[name] = []
26+
eventHandlers[name].push(handler)
27+
target.on(name, handler)
28+
}
29+
if (listeners) proxy.setTarget(eventEmitter)
30+
return proxy
31+
}

app/scripts/metamask-controller.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ module.exports = class MetamaskController extends EventEmitter {
8282

8383
// rpc provider
8484
this.provider = this.initializeProvider()
85-
this.blockTracker = this.provider
85+
this.blockTracker = this.provider._blockTracker
8686

8787
// eth data query tools
8888
this.ethQuery = new EthQuery(this.provider)

package.json

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,10 @@
6767
"end-of-stream": "^1.1.0",
6868
"ensnare": "^1.0.0",
6969
"eth-bin-to-ops": "^1.0.1",
70+
"eth-block-tracker": "^2.2.0",
7071
"eth-contract-metadata": "^1.1.4",
71-
"eth-json-rpc-filters": "^1.1.0",
72+
"eth-hd-keyring": "^1.1.1",
73+
"eth-json-rpc-filters": "^1.2.1",
7274
"eth-keyring-controller": "^1.0.1",
7375
"eth-phishing-detect": "^1.1.4",
7476
"eth-query": "^2.1.2",
@@ -78,6 +80,7 @@
7880
"ethereumjs-tx": "^1.3.0",
7981
"ethereumjs-util": "github:ethereumjs/ethereumjs-util#ac5d0908536b447083ea422b435da27f26615de9",
8082
"ethereumjs-wallet": "^0.6.0",
83+
"ethjs-contract": "^0.1.9",
8184
"ethjs-ens": "^2.0.0",
8285
"ethjs-query": "^0.2.9",
8386
"express": "^4.14.0",
@@ -88,6 +91,7 @@
8891
"gulp": "github:gulpjs/gulp#4.0",
8992
"gulp-eslint": "^4.0.0",
9093
"hat": "0.0.3",
94+
"human-standard-token-abi": "^1.0.2",
9195
"idb-global": "^2.1.0",
9296
"identicon.js": "^2.3.1",
9397
"iframe": "^1.0.0",
@@ -136,7 +140,7 @@
136140
"valid-url": "^1.0.9",
137141
"vreme": "^3.0.2",
138142
"web3": "^0.20.1",
139-
"web3-provider-engine": "^13.2.9",
143+
"web3-provider-engine": "^13.2.12",
140144
"web3-stream-provider": "^3.0.1",
141145
"xtend": "^4.0.1"
142146
},

test/unit/network-contoller-test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ describe('# Network Controller', function () {
2121
it('provider should be updatable without reassignment', function () {
2222
networkController.initializeProvider(networkControllerProviderInit, dummyProviderConstructor)
2323
const provider = networkController.provider
24-
networkController._provider = {test: true}
24+
networkController.provider.setTarget({test: true, on: () => {}})
2525
assert.ok(provider.test)
2626
})
2727
})
@@ -71,6 +71,7 @@ function dummyProviderConstructor() {
7171
// provider
7272
sendAsync: noop,
7373
// block tracker
74+
_blockTracker: {},
7475
start: noop,
7576
stop: noop,
7677
on: noop,

0 commit comments

Comments
 (0)