Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add Multichain API to Flask #27782

Merged
merged 995 commits into from
Mar 11, 2025
Merged

Conversation

jiexi
Copy link
Contributor

@jiexi jiexi commented Oct 10, 2024

Description

This branch adds support for the Multichain API to the Flask build of the Extension.

The existing API (via injected provider) should be completely unchanged.

(Very Briefly) What is the MetaMask Multichain API

  • Concurrent connection to any number of chains (no network switching)
  • Unified entry point for all chain ecosystems (EVM, BTC, Solana, Cosmos, Polkadot etc)
  • Accessible (on extension for chromium based browsers) via externally_connectable. Not accessible via an injected global like window.ethereum

Key Documents/Standards

mip = MetaMask Improvement Proposal

  • MIP-5 (Overview of the Multichain API)
    • CAIP-25 (new connection request API)
    • CAIP-27 (new request API, envelope with target scope/chainId included)
  • MIP-6 (Overview of how the Multichain API’s EVM support diverges from the 1193 injected provider)

Manual testing steps

yarn start:flask

Then

(RECOMMENDED) Use the Multichain Test Dapp

OR

Form requests manually

Open in GitHub Codespaces

Pre-merge author checklist

  • I’ve followed MetaMask Coding Standards.
  • I've completed the PR template to the best of my ability
  • I’ve included tests if applicable
  • I’ve documented my code using JSDoc format if applicable
  • I’ve applied the right labels on the PR (see labeling guidelines). Not required for external contributors.

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.

Copy link
Contributor

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.

@jiexi
Copy link
Contributor Author

jiexi commented Oct 14, 2024

@metamaskbot update-policies

@metamaskbot
Copy link
Collaborator

Policies updated.
👀 Please review the diff for suspicious new powers.

🧠 Learn how: https://lavamoat.github.io/guides/policy-diff/#what-to-look-for-when-reviewing-a-policy-diff

Copy link

socket-security bot commented Oct 14, 2024

👍 Dependency issues cleared. Learn more about Socket for GitHub ↗︎

This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored.

View full report↗︎

@shanejonas
Copy link
Contributor

this PR needs the patches from here: https://github.com/MetaMask/metamask-extension/pull/27847/files#r1801195961

@jiexi jiexi changed the base branch from caip-multichain to caip25-permission-migration October 15, 2024 16:18
@jiexi jiexi changed the title Multichain: migrate to core package feat: CAIP Multichain Oct 15, 2024
@jiexi
Copy link
Contributor Author

jiexi commented Oct 15, 2024

REMINDER: check the original feature branch PR for unresolved comments

@jiexi jiexi changed the title feat: CAIP Multichain feat: CAIP Multichain (New) Oct 15, 2024
@jiexi
Copy link
Contributor Author

jiexi commented Oct 15, 2024

TODO: Convert BARAD_DUR flag into flask feature flag

Done here #29003

@shanejonas shanejonas mentioned this pull request Oct 17, 2024
7 tasks
adonesky1 pushed a commit that referenced this pull request Oct 17, 2024
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/27940?quickstart=1)

## **Related issues**

Fixes:
#27782 (comment)

## **Manual testing steps**

1. Go to this page...
2.
3.

## **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 Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/develop/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] 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.

## **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.
@jiexi
Copy link
Contributor Author

jiexi commented Oct 17, 2024

@metamaskbot update-policies

@metamaskbot
Copy link
Collaborator

Policies updated.
👀 Please review the diff for suspicious new powers.

🧠 Learn how: https://lavamoat.github.io/guides/policy-diff/#what-to-look-for-when-reviewing-a-policy-diff

@metamaskbot
Copy link
Collaborator

❌ Multichain API Spec Test Failed. View the report here.

Copy link

socket-security bot commented Oct 17, 2024

New, updated, and removed dependencies detected. Learn more about Socket for GitHub ↗︎

Package New capabilities Transitives Size Publisher
npm/@metamask/[email protected] None 0 1.69 MB metamaskbot
npm/@open-rpc/[email protected]2.2.4 Transitive: environment, eval +5 1.33 MB belfordz

🚮 Removed packages: npm/[email protected]

View full report↗︎

@metamaskbot
Copy link
Collaborator

❌ Multichain API Spec Test Failed. View the report here.

@metamaskbot
Copy link
Collaborator

Builds ready [63f0ba4]
Page Load Metrics (1797 ± 138 ms)
PlatformPageMetricMin (ms)Max (ms)Average (ms)StandardDeviation (ms)MarginOfError (ms)
ChromeHomefirstPaint153527841787251121
domContentLoaded14912543173220699
load153629511797288138
domInteractive24542963
backgroundConnect11399668440
firstReactRender14108352512
getState5158333718
initialActions01000
loadScripts11201953131916378
setupStore76217157
uiStartup173344862144586281
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 6.39 KiB (0.10%)
  • ui: 0 Bytes (0.00%)
  • common: 1.98 KiB (0.02%)

@metamaskbot
Copy link
Collaborator

Builds ready [c700391]
Page Load Metrics (1978 ± 109 ms)
PlatformPageMetricMin (ms)Max (ms)Average (ms)StandardDeviation (ms)MarginOfError (ms)
ChromeHomefirstPaint17322492196019393
domContentLoaded16962238187914067
load173526791978227109
domInteractive17102442110
backgroundConnect13422979947
firstReactRender15107412713
getState6344587636
initialActions01000
loadScripts12411694142610450
setupStore8116212613
uiStartup190242222410565271
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 6.39 KiB (0.10%)
  • ui: 0 Bytes (0.00%)
  • common: 1.98 KiB (0.02%)

FrederikBolding
FrederikBolding previously approved these changes Mar 7, 2025
…questPermissions` instead of `ApprovalController.addAndShowApprovalRequest` (#30908)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

We created a merger for the `Caip25Permission` specification in order to
enable `wallet_addEthereumChain` and `wallet_switchEthereumChain` to
call to the `PermissionController` rather than the `ApprovalController`
for incremental permission requests (i.e. for the permittedChains flow).

PRs implementing these changes
core: MetaMask/core#5283
extension: #30042

We also changed `eth_requestAccounts` and `wallet_requestPermissions`
handlers to call the `PermissionController`, but we should now do the
change to `wallet_createSession` handler as well and address [this
feedback on the Flask Multichain
PR](#27782) (at the
moment this is only available on the [Flask Multichain
PR](#27782))

<!--
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?
-->

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/30908?quickstart=1)

## **Related issues**

Fixes:

## **Manual testing steps**

```
yarn start:flask
```
Then

**(RECOMMENDED)** Use the [Multichain Test
Dapp](https://metamask.github.io/test-dapp-multichain/latest/)
- [Video Demo for Interacting w/ Multichain Test
Dapp](https://drive.google.com/file/d/113iM80dZItEAGkobJkBh17h68Y5dgTS-/view)

**OR** 

[Form requests
manually](https://docs.google.com/document/d/1uq7N8Pt5ZrBQiPa0QFoGYGCnvDeTwhNK3ilOqUGX9JQ/edit?usp=sharing)

## **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**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I’ve included tests if applicable
- [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I’ve applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-extension/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] 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.
@metamaskbot
Copy link
Collaborator

Builds ready [45ea711]
Page Load Metrics (1869 ± 106 ms)
PlatformPageMetricMin (ms)Max (ms)Average (ms)StandardDeviation (ms)MarginOfError (ms)
ChromeHomefirstPaint160425811855211101
domContentLoaded15802181176512660
load160426091869220106
domInteractive248436189
backgroundConnect1175610816679
firstReactRender1592402512
getState5103313115
initialActions01000
loadScripts1189162013439546
setupStore76121178
uiStartup180536162291502241
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 6.29 KiB (0.10%)
  • ui: 0 Bytes (0.00%)
  • common: 1.98 KiB (0.02%)

@adonesky1 adonesky1 enabled auto-merge March 11, 2025 20:20
@adonesky1 adonesky1 added this pull request to the merge queue Mar 11, 2025
Merged via the queue into main with commit 2624036 Mar 11, 2025
75 checks passed
@adonesky1 adonesky1 deleted the jl/caip-multichain-migrate-core branch March 11, 2025 20:58
@github-actions github-actions bot locked and limited conversation to collaborators Mar 11, 2025
@metamaskbot metamaskbot added the release-12.15.0 Issue or pull request that will be included in release 12.15.0 label Mar 11, 2025
@adonesky1 adonesky1 restored the jl/caip-multichain-migrate-core branch March 12, 2025 18:24
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
INVALID-PR-TEMPLATE PR's body doesn't match template release-12.15.0 Issue or pull request that will be included in release 12.15.0 team-wallet-api-platform team-wallet-framework
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.