feat: add wallet_requestExecutionPermissions method#35193
Conversation
|
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
f267a84 to
a82090e
Compare
Builds ready [a82090e]
UI Startup Metrics (1191 ± 70 ms)
Benchmark value 3 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 231 exceeds gate value 18 for chrome browserify home p95 backgroundConnect Benchmark value 13 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 2870 exceeds gate value 2192 for chrome webpack home mean uiStartup Benchmark value 2270 exceeds gate value 1711 for chrome webpack home mean load Benchmark value 2254 exceeds gate value 1704 for chrome webpack home mean domContentLoaded Benchmark value 24 exceeds gate value 21 for chrome webpack home mean domInteractive Benchmark value 238 exceeds gate value 199 for chrome webpack home mean firstPaint Benchmark value 90 exceeds gate value 40 for chrome webpack home mean backgroundConnect Benchmark value 2242 exceeds gate value 1699 for chrome webpack home mean loadScripts Benchmark value 3272 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 2817 exceeds gate value 2030 for chrome webpack home p95 load Benchmark value 2800 exceeds gate value 2005 for chrome webpack home p95 domContentLoaded Benchmark value 70 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 380 exceeds gate value 334 for chrome webpack home p95 firstPaint Benchmark value 356 exceeds gate value 90 for chrome webpack home p95 backgroundConnect Benchmark value 14 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 2797 exceeds gate value 1970 for chrome webpack home p95 loadScripts Benchmark value 28 exceeds gate value 25 for firefox browserify home mean backgroundConnect Benchmark value 4 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 10 exceeds gate value 9 for firefox browserify home mean setupStore Benchmark value 1685 exceeds gate value 1660 for firefox browserify home p95 uiStartup Benchmark value 216 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 32 exceeds gate value 24 for firefox browserify home p95 getState Benchmark value 14 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 35 exceeds gate value 27 for firefox browserify home p95 setupStore Benchmark value 30 exceeds gate value 26 for firefox webpack home mean backgroundConnect Benchmark value 52 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 4 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 267 exceeds gate value 156 for firefox webpack home p95 domInteractive Benchmark value 55 exceeds gate value 49 for firefox webpack home p95 backgroundConnect Benchmark value 63 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 13 exceeds gate value 2 for firefox webpack home p95 initialActions Sum of mean exceeds: 2658ms | Sum of p95 exceeds: 3998.8ms Sum of all benchmark exceeds: 6656.8ms Bundle size diffs [🚀 Bundle size reduced!]
|
a82090e to
ed48de5
Compare
wallet_requestExecutionPermissions method.wallet_requestExecutionPermissions method
Builds ready [ed48de5]
UI Startup Metrics (1190 ± 64 ms)
Benchmark value 3 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 250 exceeds gate value 18 for chrome browserify home p95 backgroundConnect Benchmark value 13 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 38 exceeds gate value 29 for chrome webpack home mean getState Benchmark value 2501 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 67 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 387 exceeds gate value 370 for chrome webpack home p95 firstReactRender Benchmark value 283 exceeds gate value 195 for chrome webpack home p95 getState Benchmark value 13 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 102 exceeds gate value 65 for chrome webpack home p95 setupStore Benchmark value 31 exceeds gate value 25 for firefox browserify home mean backgroundConnect Benchmark value 6 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 205 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 14 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 39 exceeds gate value 27 for firefox browserify home p95 setupStore Benchmark value 33 exceeds gate value 26 for firefox webpack home mean backgroundConnect Benchmark value 53 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 5 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 1948 exceeds gate value 1935 for firefox webpack home p95 uiStartup Benchmark value 204 exceeds gate value 156 for firefox webpack home p95 domInteractive Benchmark value 74 exceeds gate value 49 for firefox webpack home p95 backgroundConnect Benchmark value 65 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 42 exceeds gate value 32 for firefox webpack home p95 getState Benchmark value 21 exceeds gate value 2 for firefox webpack home p95 initialActions Sum of mean exceeds: 259ms | Sum of p95 exceeds: 612.8ms Sum of all benchmark exceeds: 871.8ms Bundle size diffs [🚀 Bundle size reduced!]
|
app/scripts/metamask-controller.js
Outdated
| }, | ||
| this.controllerMessenger, | ||
| ), | ||
| processRequestExecutionPermissions: |
There was a problem hiding this comment.
after this feature is enabled and shipped, I'd love to rename this hook to plain old handleSnapRequest or something like that
There was a problem hiding this comment.
Great idea! I have updated this to forwardRequestToSnap which I think is pretty clear about what it's doing. Presently it forwards the request to the specified snap verbatim, but in the future we could support a mapRequest function that could accept the incoming request and return the snap request, so that the publicly exposed method doesn't necessarily need to match exactly the snap method.
lmkwyt
| ); | ||
| } | ||
|
|
||
| const requestExecutionPermissionsResult = (await handleRequest({ |
There was a problem hiding this comment.
Forwarding requests to the kernel-snap is a pattern that is similar to how we forward requests to gator-snap to fetch granted permissions. Should we move this to the GatorPermissionsController and expose via an action to the consumer?
Is there a strong reason why processRequestExecutionPermissions() can not live in the GatorPermissionsController?
There was a problem hiding this comment.
Nice - in response to Jiexi's suggestion above, I've removed the bulk of EIP-7715 bespoke logic, and implemented a generic forwardRequestToSnap handler.
The only thing left is Kernel Snap Id, which is provided via environment - I think the Gator Permissions Controller should be accepting the snap Id from the same place, as it makes switching between environments really easy.
Adds methods `wallet_requestExecutionPermissions` and `wallet_revokeExecutionPermission`, as defined in this revision of the EIP-7715 specification ethereum/ERCs#1098. This supports Readable Permissions project, and is related to the following PRs: - MetaMask/smart-accounts-kit#60 - MetaMask/metamask-extension#35193 Note: workflows are failing due to existing problems, fixed by #397
…json-rpc-middleware upgrade.
ed48de5 to
52fb362
Compare
|
I have read the CLA Document and I hereby sign the CLA |
c541fd4 to
d1b4e31
Compare
167e2a7 to
83e35f3
Compare
📊 Page Load Benchmark ResultsCurrent Commit: 📄 https://metamask.github.io/test-dapp/Samples: 100 Summary
📈 Detailed Results
Results generated automatically by MetaMask CI |
d7a811b to
3073711
Compare
📊 Page Load Benchmark ResultsCurrent Commit: 📄 https://metamask.github.io/test-dapp/Samples: 100 Summary
📈 Detailed Results
Results generated automatically by MetaMask CI |
Builds ready [ded62c4]
UI Startup Metrics (1229 ± 63 ms)
Benchmark value 24 exceeds gate value 23 for chrome browserify home mean firstReactRender Benchmark value 6 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 260 exceeds gate value 18 for chrome browserify home p95 backgroundConnect Benchmark value 12 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 23 exceeds gate value 17 for chrome browserify home p95 setupStore Benchmark value 66 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 8 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 1425 exceeds gate value 1405 for firefox browserify home mean uiStartup Benchmark value 34 exceeds gate value 25 for firefox browserify home mean backgroundConnect Benchmark value 27 exceeds gate value 25 for firefox browserify home mean firstReactRender Benchmark value 6 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 11 exceeds gate value 9 for firefox browserify home mean setupStore Benchmark value 1683 exceeds gate value 1660 for firefox browserify home p95 uiStartup Benchmark value 249 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 10 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 34 exceeds gate value 27 for firefox browserify home p95 setupStore Benchmark value 103 exceeds gate value 100 for firefox webpack home mean domInteractive Benchmark value 33 exceeds gate value 26 for firefox webpack home mean backgroundConnect Benchmark value 43 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 5 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 277 exceeds gate value 156 for firefox webpack home p95 domInteractive Benchmark value 6 exceeds gate value 2 for firefox webpack home p95 initialActions Sum of mean exceeds: 296ms | Sum of p95 exceeds: 485.8ms Sum of all benchmark exceeds: 781.8ms Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
📊 Page Load Benchmark ResultsCurrent Commit: 📄 https://metamask.github.io/test-dapp/Samples: 100 Summary
📈 Detailed Results
Results generated automatically by MetaMask CI |
Builds ready [9fdc885]
UI Startup Metrics (1233 ± 74 ms)
Benchmark value 1067 exceeds gate value 1061 for chrome browserify home mean domContentLoaded Benchmark value 245 exceeds gate value 10 for chrome browserify home mean backgroundConnect Benchmark value 25 exceeds gate value 23 for chrome browserify home mean firstReactRender Benchmark value 5 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 1367 exceeds gate value 1365 for chrome browserify home p95 uiStartup Benchmark value 1198 exceeds gate value 1190 for chrome browserify home p95 load Benchmark value 1191 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded Benchmark value 258 exceeds gate value 18 for chrome browserify home p95 backgroundConnect Benchmark value 13 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 952 exceeds gate value 940 for chrome browserify home p95 loadScripts Benchmark value 34 exceeds gate value 29 for chrome webpack home mean getState Benchmark value 11 exceeds gate value 7 for chrome webpack home mean initialActions Benchmark value 2491 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 69 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 277 exceeds gate value 195 for chrome webpack home p95 getState Benchmark value 27 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 36 exceeds gate value 25 for firefox browserify home mean backgroundConnect Benchmark value 28 exceeds gate value 25 for firefox browserify home mean firstReactRender Benchmark value 4 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 11 exceeds gate value 9 for firefox browserify home mean setupStore Benchmark value 213 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 82 exceeds gate value 70 for firefox browserify home p95 backgroundConnect Benchmark value 11 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 31 exceeds gate value 27 for firefox browserify home p95 setupStore Benchmark value 104 exceeds gate value 100 for firefox webpack home mean domInteractive Benchmark value 35 exceeds gate value 26 for firefox webpack home mean backgroundConnect Benchmark value 45 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 5 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 271 exceeds gate value 156 for firefox webpack home p95 domInteractive Benchmark value 53 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 8 exceeds gate value 2 for firefox webpack home p95 initialActions Sum of mean exceeds: 303ms | Sum of p95 exceeds: 602.8ms Sum of all benchmark exceeds: 905.8ms Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
…'s handleSnapRequest function, rather than binding the call function on the ControllerMessenger
📊 Page Load Benchmark ResultsCurrent Commit: 📄 https://metamask.github.io/test-dapp/Samples: 100 Summary
📈 Detailed Results
Results generated automatically by MetaMask CI |
Builds ready [f34409f]
UI Startup Metrics (1258 ± 73 ms)
Benchmark value 1093 exceeds gate value 1070 for chrome browserify home mean load Benchmark value 1085 exceeds gate value 1061 for chrome browserify home mean domContentLoaded Benchmark value 249 exceeds gate value 10 for chrome browserify home mean backgroundConnect Benchmark value 25 exceeds gate value 23 for chrome browserify home mean firstReactRender Benchmark value 4 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 845 exceeds gate value 830 for chrome browserify home mean loadScripts Benchmark value 1414 exceeds gate value 1365 for chrome browserify home p95 uiStartup Benchmark value 1245 exceeds gate value 1190 for chrome browserify home p95 load Benchmark value 1238 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded Benchmark value 1189 exceeds gate value 1180 for chrome browserify home p95 firstPaint Benchmark value 266 exceeds gate value 18 for chrome browserify home p95 backgroundConnect Benchmark value 10 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 999 exceeds gate value 940 for chrome browserify home p95 loadScripts Benchmark value 31 exceeds gate value 29 for chrome webpack home mean getState Benchmark value 2545 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 67 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 268 exceeds gate value 195 for chrome webpack home p95 getState Benchmark value 15 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 1561 exceeds gate value 1405 for firefox browserify home mean uiStartup Benchmark value 1366 exceeds gate value 1245 for firefox browserify home mean load Benchmark value 1365 exceeds gate value 1239 for firefox browserify home mean domContentLoaded Benchmark value 124 exceeds gate value 110 for firefox browserify home mean domInteractive Benchmark value 40 exceeds gate value 25 for firefox browserify home mean backgroundConnect Benchmark value 30 exceeds gate value 25 for firefox browserify home mean firstReactRender Benchmark value 4 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 1336 exceeds gate value 1230 for firefox browserify home mean loadScripts Benchmark value 10 exceeds gate value 9 for firefox browserify home mean setupStore Benchmark value 1767 exceeds gate value 1660 for firefox browserify home p95 uiStartup Benchmark value 1555 exceeds gate value 1495 for firefox browserify home p95 load Benchmark value 1555 exceeds gate value 1495 for firefox browserify home p95 domContentLoaded Benchmark value 262 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 94 exceeds gate value 70 for firefox browserify home p95 backgroundConnect Benchmark value 11 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 1523 exceeds gate value 1475 for firefox browserify home p95 loadScripts Benchmark value 102 exceeds gate value 100 for firefox webpack home mean domInteractive Benchmark value 33 exceeds gate value 26 for firefox webpack home mean backgroundConnect Benchmark value 43 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 4 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 269 exceeds gate value 156 for firefox webpack home p95 domInteractive Benchmark value 51 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 5 exceeds gate value 2 for firefox webpack home p95 initialActions Sum of mean exceeds: 897ms | Sum of p95 exceeds: 1160.8ms Sum of all benchmark exceeds: 2057.8ms Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
📊 Page Load Benchmark ResultsCurrent Commit: 📄 https://metamask.github.io/test-dapp/Samples: 100 Summary
📈 Detailed Results
Results generated automatically by MetaMask CI |
Builds ready [ae84b86]
UI Startup Metrics (1403 ± 70 ms)
Benchmark value 1191 exceeds gate value 1070 for chrome browserify home mean load Benchmark value 1167 exceeds gate value 1061 for chrome browserify home mean domContentLoaded Benchmark value 22 exceeds gate value 20 for chrome browserify home mean domInteractive Benchmark value 882 exceeds gate value 800 for chrome browserify home mean firstPaint Benchmark value 300 exceeds gate value 10 for chrome browserify home mean backgroundConnect Benchmark value 41 exceeds gate value 23 for chrome browserify home mean firstReactRender Benchmark value 18 exceeds gate value 15 for chrome browserify home mean getState Benchmark value 8 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 892 exceeds gate value 830 for chrome browserify home mean loadScripts Benchmark value 15 exceeds gate value 11 for chrome browserify home mean setupStore Benchmark value 1542 exceeds gate value 1365 for chrome browserify home p95 uiStartup Benchmark value 1327 exceeds gate value 1190 for chrome browserify home p95 load Benchmark value 1315 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded Benchmark value 1310 exceeds gate value 1180 for chrome browserify home p95 firstPaint Benchmark value 413 exceeds gate value 18 for chrome browserify home p95 backgroundConnect Benchmark value 129 exceeds gate value 45 for chrome browserify home p95 firstReactRender Benchmark value 36 exceeds gate value 33 for chrome browserify home p95 getState Benchmark value 23 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 1058 exceeds gate value 940 for chrome browserify home p95 loadScripts Benchmark value 31 exceeds gate value 17 for chrome browserify home p95 setupStore Benchmark value 41 exceeds gate value 40 for chrome webpack home mean backgroundConnect Benchmark value 2560 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 2011 exceeds gate value 2005 for chrome webpack home p95 domContentLoaded Benchmark value 88 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 267 exceeds gate value 195 for chrome webpack home p95 getState Benchmark value 16 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 1998 exceeds gate value 1970 for chrome webpack home p95 loadScripts Benchmark value 1415 exceeds gate value 1405 for firefox browserify home mean uiStartup Benchmark value 33 exceeds gate value 25 for firefox browserify home mean backgroundConnect Benchmark value 28 exceeds gate value 25 for firefox browserify home mean firstReactRender Benchmark value 6 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 11 exceeds gate value 9 for firefox browserify home mean setupStore Benchmark value 255 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 14 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 43 exceeds gate value 27 for firefox browserify home p95 setupStore Benchmark value 111 exceeds gate value 100 for firefox webpack home mean domInteractive Benchmark value 32 exceeds gate value 26 for firefox webpack home mean backgroundConnect Benchmark value 45 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 4 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 273 exceeds gate value 156 for firefox webpack home p95 domInteractive Benchmark value 54 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 8 exceeds gate value 2 for firefox webpack home p95 initialActions Sum of mean exceeds: 920ms | Sum of p95 exceeds: 1681.8ms Sum of all benchmark exceeds: 2601.8ms |
Adds the method
wallet_requestExecutionPermissionswhich is defined in this proposed revision of the EIP-7715 specification ethereum/ERCs#1098.Description
This method is proxied to
@metamask/permissions-kernel-snap, which implements the exact same method. This snap will be preinstalled in Extension, before the feature is enabled for any users.The feature is gated by
process.env.EIP_7715_READABLE_PERMISSIONS_ENABLEDand requiresprocess.env.PERMISSIONS_KERNEL_SNAP_IDto be set. PresentlyEIP_7715_READABLE_PERMISSIONS_ENABLEDis set to false, andPERMISSIONS_KERNEL_SNAP_IDis set to an empty string for all builds.Requires MetaMask/eth-json-rpc-middleware#396 released in https://github.com/MetaMask/eth-json-rpc-middleware/releases/tag/v17.1.0. This change also adds support for
wallet_revokePermission, which will be implemented in a future PR, once the revocation UI is implemented.Changelog
CHANGELOG entry: As this is behind a local feature gate, there are no public facing changes.
Manual testing steps
Can be tested with MetaMask/smart-accounts-kit#60 which adds support to the delegation-toolkit's experimental api to call the wallet method directly, rather than via
wallet_invokeSnap.Pre-merge author checklist
Pre-merge reviewer checklist