Skip to content

Commit 469bbed

Browse files
committed
Fix issues
1 parent e51455a commit 469bbed

5 files changed

Lines changed: 36 additions & 34 deletions

File tree

app/scripts/controllers/network/createInfuraClient.js

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ import {
1010

1111
import { createInfuraMiddleware } from '@metamask/eth-json-rpc-infura';
1212
import { PollingBlockTracker } from 'eth-block-tracker';
13-
import createFilterMiddleware from 'eth-json-rpc-filters';
14-
import createSubscriptionManager from 'eth-json-rpc-filters/subscriptionManager';
1513

1614
import { BUILT_IN_NETWORKS } from '../../../../shared/constants/network';
1715

@@ -25,15 +23,6 @@ export default function createInfuraClient({ network, projectId }) {
2523
const infuraProvider = providerFromMiddleware(infuraMiddleware);
2624
const blockTracker = new PollingBlockTracker({ provider: infuraProvider });
2725

28-
const filterMiddleware = createFilterMiddleware({
29-
infuraProvider,
30-
blockTracker,
31-
});
32-
const subscriptionManager = createSubscriptionManager({
33-
infuraProvider,
34-
blockTracker,
35-
});
36-
3726
const networkMiddleware = mergeMiddleware([
3827
createNetworkAndChainIdMiddleware({ network }),
3928
createBlockCacheMiddleware({ blockTracker }),
@@ -42,10 +31,8 @@ export default function createInfuraClient({ network, projectId }) {
4231
createRetryOnEmptyMiddleware({ blockTracker, provider: infuraProvider }),
4332
createBlockTrackerInspectorMiddleware({ blockTracker }),
4433
infuraMiddleware,
45-
filterMiddleware,
46-
subscriptionManager.middleware,
4734
]);
48-
return { networkMiddleware, blockTracker, subscriptionManager };
35+
return { networkMiddleware, blockTracker };
4936
}
5037

5138
function createNetworkAndChainIdMiddleware({ network }) {

app/scripts/controllers/network/createJsonRpcClient.js

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ import {
88
providerFromMiddleware,
99
} from 'eth-json-rpc-middleware';
1010
import { PollingBlockTracker } from 'eth-block-tracker';
11-
import createFilterMiddleware from 'eth-json-rpc-filters';
12-
import createSubscriptionManager from 'eth-json-rpc-filters/subscriptionManager';
1311
import { SECOND } from '../../../../shared/constants/time';
1412

1513
const inTest = process.env.IN_TEST;
@@ -21,21 +19,11 @@ const getTestMiddlewares = () => {
2119
export default function createJsonRpcClient({ rpcUrl, chainId }) {
2220
const fetchMiddleware = createFetchMiddleware({ rpcUrl });
2321
const blockProvider = providerFromMiddleware(fetchMiddleware);
24-
2522
const blockTracker = new PollingBlockTracker({
2623
...blockTrackerOpts,
2724
provider: blockProvider,
2825
});
2926

30-
const filterMiddleware = createFilterMiddleware({
31-
blockProvider,
32-
blockTracker,
33-
});
34-
const subscriptionManager = createSubscriptionManager({
35-
blockProvider,
36-
blockTracker,
37-
});
38-
3927
const networkMiddleware = mergeMiddleware([
4028
...getTestMiddlewares(),
4129
createChainIdMiddleware(chainId),
@@ -44,11 +32,9 @@ export default function createJsonRpcClient({ rpcUrl, chainId }) {
4432
createInflightCacheMiddleware(),
4533
createBlockTrackerInspectorMiddleware({ blockTracker }),
4634
fetchMiddleware,
47-
filterMiddleware,
48-
subscriptionManager.middleware,
4935
]);
5036

51-
return { networkMiddleware, blockTracker, subscriptionManager };
37+
return { networkMiddleware, blockTracker };
5238
}
5339

5440
function createChainIdMiddleware(chainId) {

app/scripts/controllers/network/network.js

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,18 @@ import { strict as assert } from 'assert';
22
import EventEmitter from 'events';
33
import { ComposedStore, ObservableStore } from '@metamask/obs-store';
44
import { JsonRpcEngine } from 'json-rpc-engine';
5-
import { providerFromEngine } from 'eth-json-rpc-middleware';
5+
import {
6+
providerFromEngine,
7+
providerFromMiddleware,
8+
} from 'eth-json-rpc-middleware';
69
import log from 'loglevel';
710
import {
811
createSwappableProxy,
912
createEventEmitterProxy,
1013
} from 'swappable-obj-proxy';
1114
import EthQuery from 'eth-query';
15+
import createFilterMiddleware from 'eth-json-rpc-filters';
16+
import createSubscriptionManager from 'eth-json-rpc-filters/subscriptionManager';
1217
import {
1318
INFURA_PROVIDER_TYPES,
1419
BUILT_IN_NETWORKS,
@@ -424,19 +429,31 @@ export default class NetworkController extends EventEmitter {
424429
this._setNetworkClient(networkClient);
425430
}
426431

427-
_setNetworkClient({ networkMiddleware, blockTracker, subscriptionManager }) {
432+
_setNetworkClient({ networkMiddleware, blockTracker }) {
433+
const networkProvider = providerFromMiddleware(networkMiddleware);
434+
const filterMiddleware = createFilterMiddleware({
435+
provider: networkProvider,
436+
blockTracker,
437+
});
438+
const subscriptionManager = createSubscriptionManager({
439+
provider: networkProvider,
440+
blockTracker,
441+
});
428442
const metamaskMiddleware = createMetamaskMiddleware(
429443
this._baseProviderParams,
430444
);
431-
const engine = new JsonRpcEngine();
432445

446+
const engine = new JsonRpcEngine();
433447
subscriptionManager.events.on('notification', (message) =>
434448
engine.emit('notification', message),
435449
);
436-
450+
engine.push(filterMiddleware);
451+
engine.push(subscriptionManager.middleware);
437452
engine.push(metamaskMiddleware);
438453
engine.push(networkMiddleware);
454+
439455
const provider = providerFromEngine(engine);
456+
440457
this._setProviderAndBlockTracker({ provider, blockTracker });
441458
}
442459

app/scripts/controllers/permissions/specifications.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,12 @@ export const unrestrictedMethods = Object.freeze([
260260
'eth_signTypedData_v1',
261261
'eth_signTypedData_v3',
262262
'eth_signTypedData_v4',
263+
'eth_subscribe',
263264
'eth_submitHashrate',
264265
'eth_submitWork',
265266
'eth_syncing',
266267
'eth_uninstallFilter',
268+
'eth_unsubscribe',
267269
'metamask_getProviderState',
268270
'metamask_watchAsset',
269271
'net_listening',

app/scripts/metamask-controller.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3732,9 +3732,19 @@ export default class MetamaskController extends EventEmitter {
37323732
* @param {tabId} [options.tabId] - The tab ID of the sender - if the sender is within a tab
37333733
*/
37343734
setupProviderEngine({ origin, subjectType, sender, tabId }) {
3735+
const { provider } = this;
3736+
37353737
// setup json rpc engine stack
37363738
const engine = new JsonRpcEngine();
3737-
const { provider } = this;
3739+
3740+
// forward notifications from network provider
3741+
provider.on('data', (error, message) => {
3742+
if (error) {
3743+
// This should never happen, this error parameter is never set
3744+
throw error;
3745+
}
3746+
engine.emit('notification', message);
3747+
});
37383748

37393749
if (isManifestV3) {
37403750
engine.push(createDupeReqFilterMiddleware());

0 commit comments

Comments
 (0)