Skip to content

Commit aa9c3e3

Browse files
fix: filter and subscribe when using requestQueueing (#23386)
## **Description** <!-- Write a short description of the changes included in this pull request, also include relevant motivation and context. Have in mind the following questions: 1. What is the reason for the change? 2. What is the improvement/solution? --> When using the per-dapp network selection feature flag, subscribe and filter requests are not respecting the per-dapp selection. This the main goal of this PR. Additionally, this PR correctly uses the persisted values for the feature flag. It also addresses an issue where changing the feature flag value would require dapps to be refreshed. ## **Related issues** ## **Manual testing steps** **note** to test subscribe: 1. go to https://docs.metamask.io/wallet/reference/eth_subscribe/ 2. open dev tools / console and add event listener: `window.ethereum.on('message', ({data}) => console.log(parseInt(data.result.number, 16)));` 3. hit execute on eth_subscribe 4. console should now start showing block updates 1. Basic Functionality Tests: - Verify that subscribing to different Ethereum events (like block headers, logs, or specific event types) works as expected. - Test filtering functionalities, ensuring that the filter correctly captures and displays events based on provided criteria. 3. Network-Specific Tests: - Test the subscribe and filter functionalities across different networks (mainnet, Ropsten, Kovan, etc.) to ensure consistent behavior. - Check for any network-specific issues or inconsistencies in the functioning of the subscribe and filter features. 5. Test with and without useRequestQueue Feature Flag: - Conduct tests with the useRequestQueue feature flag enabled and verify the functioning of the subscribe and filter features. - Repeat the tests with the feature flag disabled to ensure that the functionalities remain stable and consistent. 6. Repeat the above tests, but in a multi-dapp scenario ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> ### **After** <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [ ] I’ve followed [MetaMask Coding Standards](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/CODING_GUIDELINES.md). - [ ] I've clearly explained what problem this PR is solving and how it is solved. - [ ] I've linked related issues - [ ] I've included manual testing steps - [ ] I've included screenshots/recordings if applicable - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [ ] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. - [ ] I’ve properly set the pull request status: - [ ] In case it's not yet "ready for review", I've set it to "draft". - [ ] In case it's "ready for review", I've changed it from "draft" to "non-draft". ## **Pre-merge reviewer checklist** - [ ] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [ ] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. --------- Co-authored-by: MetaMask Bot <metamaskbot@users.noreply.github.com>
1 parent eec736a commit aa9c3e3

File tree

10 files changed

+218
-211
lines changed

10 files changed

+218
-211
lines changed

app/scripts/metamask-controller.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import {
2525
} from 'lodash';
2626
import { keyringBuilderFactory } from '@metamask/eth-keyring-controller';
2727
import { KeyringController } from '@metamask/keyring-controller';
28-
import createFilterMiddleware from 'eth-json-rpc-filters';
29-
import createSubscriptionManager from 'eth-json-rpc-filters/subscriptionManager';
28+
import createFilterMiddleware from '@metamask/eth-json-rpc-filters';
29+
import createSubscriptionManager from '@metamask/eth-json-rpc-filters/subscriptionManager';
3030
import {
3131
errorCodes as rpcErrorCodes,
3232
EthereumRpcError,
@@ -4760,8 +4760,6 @@ export default class MetamaskController extends EventEmitter {
47604760
// setup json rpc engine stack
47614761
const engine = new JsonRpcEngine();
47624762

4763-
const { blockTracker, provider } = this;
4764-
47654763
// append origin to each request
47664764
engine.push(createOriginMiddleware({ origin }));
47674765

@@ -4799,10 +4797,7 @@ export default class MetamaskController extends EventEmitter {
47994797
const filterMiddleware = createFilterMiddleware(proxyClient);
48004798

48014799
// create subscription polyfill middleware
4802-
const subscriptionManager = createSubscriptionManager({
4803-
provider,
4804-
blockTracker,
4805-
});
4800+
const subscriptionManager = createSubscriptionManager(proxyClient);
48064801
subscriptionManager.events.on('notification', (message) =>
48074802
engine.emit('notification', message),
48084803
);

lavamoat/browserify/beta/policy.json

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -806,10 +806,10 @@
806806
"@metamask/controller-utils": true,
807807
"@metamask/eth-query": true,
808808
"@metamask/metamask-eth-abis": true,
809+
"@metamask/name-controller>async-mutex": true,
809810
"@metamask/polling-controller": true,
810811
"@metamask/providers>@metamask/rpc-errors": true,
811812
"@metamask/utils": true,
812-
"eth-json-rpc-filters>async-mutex": true,
813813
"ethereumjs-util": true,
814814
"lodash": true,
815815
"single-call-balance-checker-abi": true,
@@ -922,6 +922,32 @@
922922
"punycode": true
923923
}
924924
},
925+
"@metamask/eth-json-rpc-filters": {
926+
"globals": {
927+
"console.error": true
928+
},
929+
"packages": {
930+
"@metamask/eth-json-rpc-filters>@metamask/eth-query": true,
931+
"@metamask/eth-json-rpc-filters>@metamask/safe-event-emitter": true,
932+
"@metamask/name-controller>async-mutex": true,
933+
"@metamask/providers>@metamask/json-rpc-engine": true,
934+
"pify": true
935+
}
936+
},
937+
"@metamask/eth-json-rpc-filters>@metamask/eth-query": {
938+
"packages": {
939+
"@metamask/eth-query>json-rpc-random-id": true,
940+
"watchify>xtend": true
941+
}
942+
},
943+
"@metamask/eth-json-rpc-filters>@metamask/safe-event-emitter": {
944+
"globals": {
945+
"setTimeout": true
946+
},
947+
"packages": {
948+
"webpack>events": true
949+
}
950+
},
925951
"@metamask/eth-json-rpc-middleware": {
926952
"globals": {
927953
"URL": true,
@@ -1407,8 +1433,8 @@
14071433
"@metamask/base-controller": true,
14081434
"@metamask/keyring-controller>@metamask/eth-keyring-controller": true,
14091435
"@metamask/keyring-controller>ethereumjs-wallet": true,
1436+
"@metamask/name-controller>async-mutex": true,
14101437
"@metamask/utils": true,
1411-
"eth-json-rpc-filters>async-mutex": true,
14121438
"ethereumjs-util": true
14131439
}
14141440
},
@@ -1543,8 +1569,16 @@
15431569
},
15441570
"packages": {
15451571
"@metamask/base-controller": true,
1546-
"@metamask/utils": true,
1547-
"eth-json-rpc-filters>async-mutex": true
1572+
"@metamask/name-controller>async-mutex": true,
1573+
"@metamask/utils": true
1574+
}
1575+
},
1576+
"@metamask/name-controller>async-mutex": {
1577+
"globals": {
1578+
"setTimeout": true
1579+
},
1580+
"packages": {
1581+
"mockttp>graphql-tag>tslib": true
15481582
}
15491583
},
15501584
"@metamask/network-controller": {
@@ -1994,12 +2028,12 @@
19942028
"@metamask/eth-query": true,
19952029
"@metamask/gas-fee-controller": true,
19962030
"@metamask/metamask-eth-abis": true,
2031+
"@metamask/name-controller>async-mutex": true,
19972032
"@metamask/network-controller": true,
19982033
"@metamask/providers>@metamask/rpc-errors": true,
19992034
"@metamask/transaction-controller>nonce-tracker": true,
20002035
"@metamask/utils": true,
20012036
"bn.js": true,
2002-
"eth-json-rpc-filters>async-mutex": true,
20032037
"eth-method-registry": true,
20042038
"fast-json-patch": true,
20052039
"lodash": true,
@@ -2889,33 +2923,6 @@
28892923
"browserify>punycode": true
28902924
}
28912925
},
2892-
"eth-json-rpc-filters": {
2893-
"globals": {
2894-
"console.error": true
2895-
},
2896-
"packages": {
2897-
"@metamask/safe-event-emitter": true,
2898-
"eth-json-rpc-filters>async-mutex": true,
2899-
"eth-json-rpc-filters>eth-query": true,
2900-
"json-rpc-engine": true,
2901-
"pify": true
2902-
}
2903-
},
2904-
"eth-json-rpc-filters>async-mutex": {
2905-
"globals": {
2906-
"setTimeout": true
2907-
},
2908-
"packages": {
2909-
"mockttp>graphql-tag>tslib": true
2910-
}
2911-
},
2912-
"eth-json-rpc-filters>eth-query": {
2913-
"packages": {
2914-
"@metamask/eth-query>json-rpc-random-id": true,
2915-
"nock>debug": true,
2916-
"watchify>xtend": true
2917-
}
2918-
},
29192926
"eth-keyring-controller>@metamask/browser-passworder": {
29202927
"globals": {
29212928
"crypto": true

lavamoat/browserify/desktop/policy.json

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -806,10 +806,10 @@
806806
"@metamask/controller-utils": true,
807807
"@metamask/eth-query": true,
808808
"@metamask/metamask-eth-abis": true,
809+
"@metamask/name-controller>async-mutex": true,
809810
"@metamask/polling-controller": true,
810811
"@metamask/providers>@metamask/rpc-errors": true,
811812
"@metamask/utils": true,
812-
"eth-json-rpc-filters>async-mutex": true,
813813
"ethereumjs-util": true,
814814
"lodash": true,
815815
"single-call-balance-checker-abi": true,
@@ -999,6 +999,32 @@
999999
"punycode": true
10001000
}
10011001
},
1002+
"@metamask/eth-json-rpc-filters": {
1003+
"globals": {
1004+
"console.error": true
1005+
},
1006+
"packages": {
1007+
"@metamask/eth-json-rpc-filters>@metamask/eth-query": true,
1008+
"@metamask/eth-json-rpc-filters>@metamask/safe-event-emitter": true,
1009+
"@metamask/name-controller>async-mutex": true,
1010+
"@metamask/providers>@metamask/json-rpc-engine": true,
1011+
"pify": true
1012+
}
1013+
},
1014+
"@metamask/eth-json-rpc-filters>@metamask/eth-query": {
1015+
"packages": {
1016+
"@metamask/eth-query>json-rpc-random-id": true,
1017+
"watchify>xtend": true
1018+
}
1019+
},
1020+
"@metamask/eth-json-rpc-filters>@metamask/safe-event-emitter": {
1021+
"globals": {
1022+
"setTimeout": true
1023+
},
1024+
"packages": {
1025+
"webpack>events": true
1026+
}
1027+
},
10021028
"@metamask/eth-json-rpc-middleware": {
10031029
"globals": {
10041030
"URL": true,
@@ -1484,8 +1510,8 @@
14841510
"@metamask/base-controller": true,
14851511
"@metamask/keyring-controller>@metamask/eth-keyring-controller": true,
14861512
"@metamask/keyring-controller>ethereumjs-wallet": true,
1513+
"@metamask/name-controller>async-mutex": true,
14871514
"@metamask/utils": true,
1488-
"eth-json-rpc-filters>async-mutex": true,
14891515
"ethereumjs-util": true
14901516
}
14911517
},
@@ -1620,8 +1646,16 @@
16201646
},
16211647
"packages": {
16221648
"@metamask/base-controller": true,
1623-
"@metamask/utils": true,
1624-
"eth-json-rpc-filters>async-mutex": true
1649+
"@metamask/name-controller>async-mutex": true,
1650+
"@metamask/utils": true
1651+
}
1652+
},
1653+
"@metamask/name-controller>async-mutex": {
1654+
"globals": {
1655+
"setTimeout": true
1656+
},
1657+
"packages": {
1658+
"mockttp>graphql-tag>tslib": true
16251659
}
16261660
},
16271661
"@metamask/network-controller": {
@@ -2274,12 +2308,12 @@
22742308
"@metamask/eth-query": true,
22752309
"@metamask/gas-fee-controller": true,
22762310
"@metamask/metamask-eth-abis": true,
2311+
"@metamask/name-controller>async-mutex": true,
22772312
"@metamask/network-controller": true,
22782313
"@metamask/providers>@metamask/rpc-errors": true,
22792314
"@metamask/transaction-controller>nonce-tracker": true,
22802315
"@metamask/utils": true,
22812316
"bn.js": true,
2282-
"eth-json-rpc-filters>async-mutex": true,
22832317
"eth-method-registry": true,
22842318
"fast-json-patch": true,
22852319
"lodash": true,
@@ -3179,33 +3213,6 @@
31793213
"browserify>punycode": true
31803214
}
31813215
},
3182-
"eth-json-rpc-filters": {
3183-
"globals": {
3184-
"console.error": true
3185-
},
3186-
"packages": {
3187-
"@metamask/safe-event-emitter": true,
3188-
"eth-json-rpc-filters>async-mutex": true,
3189-
"eth-json-rpc-filters>eth-query": true,
3190-
"json-rpc-engine": true,
3191-
"pify": true
3192-
}
3193-
},
3194-
"eth-json-rpc-filters>async-mutex": {
3195-
"globals": {
3196-
"setTimeout": true
3197-
},
3198-
"packages": {
3199-
"mockttp>graphql-tag>tslib": true
3200-
}
3201-
},
3202-
"eth-json-rpc-filters>eth-query": {
3203-
"packages": {
3204-
"@metamask/eth-query>json-rpc-random-id": true,
3205-
"nock>debug": true,
3206-
"watchify>xtend": true
3207-
}
3208-
},
32093216
"eth-keyring-controller>@metamask/browser-passworder": {
32103217
"globals": {
32113218
"crypto": true

lavamoat/browserify/flask/policy.json

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -806,10 +806,10 @@
806806
"@metamask/controller-utils": true,
807807
"@metamask/eth-query": true,
808808
"@metamask/metamask-eth-abis": true,
809+
"@metamask/name-controller>async-mutex": true,
809810
"@metamask/polling-controller": true,
810811
"@metamask/providers>@metamask/rpc-errors": true,
811812
"@metamask/utils": true,
812-
"eth-json-rpc-filters>async-mutex": true,
813813
"ethereumjs-util": true,
814814
"lodash": true,
815815
"single-call-balance-checker-abi": true,
@@ -999,6 +999,32 @@
999999
"punycode": true
10001000
}
10011001
},
1002+
"@metamask/eth-json-rpc-filters": {
1003+
"globals": {
1004+
"console.error": true
1005+
},
1006+
"packages": {
1007+
"@metamask/eth-json-rpc-filters>@metamask/eth-query": true,
1008+
"@metamask/eth-json-rpc-filters>@metamask/safe-event-emitter": true,
1009+
"@metamask/name-controller>async-mutex": true,
1010+
"@metamask/providers>@metamask/json-rpc-engine": true,
1011+
"pify": true
1012+
}
1013+
},
1014+
"@metamask/eth-json-rpc-filters>@metamask/eth-query": {
1015+
"packages": {
1016+
"@metamask/eth-query>json-rpc-random-id": true,
1017+
"watchify>xtend": true
1018+
}
1019+
},
1020+
"@metamask/eth-json-rpc-filters>@metamask/safe-event-emitter": {
1021+
"globals": {
1022+
"setTimeout": true
1023+
},
1024+
"packages": {
1025+
"webpack>events": true
1026+
}
1027+
},
10021028
"@metamask/eth-json-rpc-middleware": {
10031029
"globals": {
10041030
"URL": true,
@@ -1484,8 +1510,8 @@
14841510
"@metamask/base-controller": true,
14851511
"@metamask/keyring-controller>@metamask/eth-keyring-controller": true,
14861512
"@metamask/keyring-controller>ethereumjs-wallet": true,
1513+
"@metamask/name-controller>async-mutex": true,
14871514
"@metamask/utils": true,
1488-
"eth-json-rpc-filters>async-mutex": true,
14891515
"ethereumjs-util": true
14901516
}
14911517
},
@@ -1620,8 +1646,16 @@
16201646
},
16211647
"packages": {
16221648
"@metamask/base-controller": true,
1623-
"@metamask/utils": true,
1624-
"eth-json-rpc-filters>async-mutex": true
1649+
"@metamask/name-controller>async-mutex": true,
1650+
"@metamask/utils": true
1651+
}
1652+
},
1653+
"@metamask/name-controller>async-mutex": {
1654+
"globals": {
1655+
"setTimeout": true
1656+
},
1657+
"packages": {
1658+
"mockttp>graphql-tag>tslib": true
16251659
}
16261660
},
16271661
"@metamask/network-controller": {
@@ -2308,12 +2342,12 @@
23082342
"@metamask/eth-query": true,
23092343
"@metamask/gas-fee-controller": true,
23102344
"@metamask/metamask-eth-abis": true,
2345+
"@metamask/name-controller>async-mutex": true,
23112346
"@metamask/network-controller": true,
23122347
"@metamask/providers>@metamask/rpc-errors": true,
23132348
"@metamask/transaction-controller>nonce-tracker": true,
23142349
"@metamask/utils": true,
23152350
"bn.js": true,
2316-
"eth-json-rpc-filters>async-mutex": true,
23172351
"eth-method-registry": true,
23182352
"fast-json-patch": true,
23192353
"lodash": true,
@@ -3213,33 +3247,6 @@
32133247
"browserify>punycode": true
32143248
}
32153249
},
3216-
"eth-json-rpc-filters": {
3217-
"globals": {
3218-
"console.error": true
3219-
},
3220-
"packages": {
3221-
"@metamask/safe-event-emitter": true,
3222-
"eth-json-rpc-filters>async-mutex": true,
3223-
"eth-json-rpc-filters>eth-query": true,
3224-
"json-rpc-engine": true,
3225-
"pify": true
3226-
}
3227-
},
3228-
"eth-json-rpc-filters>async-mutex": {
3229-
"globals": {
3230-
"setTimeout": true
3231-
},
3232-
"packages": {
3233-
"mockttp>graphql-tag>tslib": true
3234-
}
3235-
},
3236-
"eth-json-rpc-filters>eth-query": {
3237-
"packages": {
3238-
"@metamask/eth-query>json-rpc-random-id": true,
3239-
"nock>debug": true,
3240-
"watchify>xtend": true
3241-
}
3242-
},
32433250
"eth-keyring-controller>@metamask/browser-passworder": {
32443251
"globals": {
32453252
"crypto": true

0 commit comments

Comments
 (0)