-
Notifications
You must be signed in to change notification settings - Fork 5.5k
feat: support swap deep links cp-13.0.0 #34259
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
Conversation
✨ Files requiring CODEOWNER review ✨🔄 @MetaMask/swaps-engineers (14 files, +1063 -238)
|
Builds ready [2578d90]
UI Startup Metrics (1239 ± 71 ms)
Benchmark value 17 exceeds gate value 15 for chrome browserify home mean getState Benchmark value 6 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 43 exceeds gate value 41 for chrome browserify home p95 domInteractive Benchmark value 24 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 20 exceeds gate value 17 for chrome browserify home p95 setupStore Benchmark value 2229 exceeds gate value 2192 for chrome webpack home mean uiStartup Benchmark value 277 exceeds gate value 235 for chrome webpack home mean firstReactRender Benchmark value 9 exceeds gate value 7 for chrome webpack home mean initialActions Benchmark value 2686 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 66 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 397 exceeds gate value 370 for chrome webpack home p95 firstReactRender Benchmark value 26 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 1978 exceeds gate value 1970 for chrome webpack home p95 loadScripts Benchmark value 125 exceeds gate value 110 for firefox browserify home mean domInteractive Benchmark value 15 exceeds gate value 11 for firefox browserify home mean getState Benchmark value 8 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 14 exceeds gate value 9 for firefox browserify home mean setupStore Benchmark value 1796 exceeds gate value 1660 for firefox browserify home p95 uiStartup Benchmark value 432 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 19 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 1720 exceeds gate value 1615 for firefox webpack home mean uiStartup Benchmark value 1452 exceeds gate value 1380 for firefox webpack home mean load Benchmark value 1451 exceeds gate value 1380 for firefox webpack home mean domContentLoaded Benchmark value 105 exceeds gate value 100 for firefox webpack home mean domInteractive Benchmark value 58 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 8 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 1432 exceeds gate value 1360 for firefox webpack home mean loadScripts Benchmark value 2166 exceeds gate value 1935 for firefox webpack home p95 uiStartup Benchmark value 1792 exceeds gate value 1660 for firefox webpack home p95 load Benchmark value 1791 exceeds gate value 1660 for firefox webpack home p95 domContentLoaded Benchmark value 297 exceeds gate value 156 for firefox webpack home p95 domInteractive Benchmark value 70 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 35 exceeds gate value 32 for firefox webpack home p95 getState Benchmark value 18 exceeds gate value 2 for firefox webpack home p95 initialActions Benchmark value 1772 exceeds gate value 1630 for firefox webpack home p95 loadScripts Benchmark value 30 exceeds gate value 28 for firefox webpack home p95 setupStore Sum of mean exceeds: 476ms | Sum of p95 exceeds: 1546.8ms Sum of all benchmark exceeds: 2022.8ms Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
Builds ready [527943b]
UI Startup Metrics (1245 ± 70 ms)
Benchmark value 16 exceeds gate value 15 for chrome browserify home mean getState Benchmark value 7 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 1378 exceeds gate value 1365 for chrome browserify home p95 uiStartup Benchmark value 1202 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 21 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 21 exceeds gate value 17 for chrome browserify home p95 setupStore Benchmark value 2251 exceeds gate value 2192 for chrome webpack home mean uiStartup Benchmark value 262 exceeds gate value 235 for chrome webpack home mean firstReactRender Benchmark value 12 exceeds gate value 7 for chrome webpack home mean initialActions Benchmark value 2639 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 61 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 402 exceeds gate value 370 for chrome webpack home p95 firstReactRender Benchmark value 27 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 111 exceeds gate value 110 for firefox browserify home mean domInteractive Benchmark value 14 exceeds gate value 11 for firefox browserify home mean getState Benchmark value 6 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 14 exceeds gate value 9 for firefox browserify home mean setupStore Benchmark value 289 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 41 exceeds gate value 24 for firefox browserify home p95 getState Benchmark value 21 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 73 exceeds gate value 27 for firefox browserify home p95 setupStore Benchmark value 1758 exceeds gate value 1615 for firefox webpack home mean uiStartup Benchmark value 1477 exceeds gate value 1380 for firefox webpack home mean load Benchmark value 1477 exceeds gate value 1380 for firefox webpack home mean domContentLoaded Benchmark value 116 exceeds gate value 100 for firefox webpack home mean domInteractive Benchmark value 60 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 17 exceeds gate value 15 for firefox webpack home mean getState Benchmark value 9 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 1456 exceeds gate value 1360 for firefox webpack home mean loadScripts Benchmark value 19 exceeds gate value 13 for firefox webpack home mean setupStore Benchmark value 2235 exceeds gate value 1935 for firefox webpack home p95 uiStartup Benchmark value 1922 exceeds gate value 1660 for firefox webpack home p95 load Benchmark value 1922 exceeds gate value 1660 for firefox webpack home p95 domContentLoaded Benchmark value 325 exceeds gate value 156 for firefox webpack home p95 domInteractive Benchmark value 70 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 37 exceeds gate value 32 for firefox webpack home p95 getState Benchmark value 23 exceeds gate value 2 for firefox webpack home p95 initialActions Benchmark value 1897 exceeds gate value 1630 for firefox webpack home p95 loadScripts Benchmark value 40 exceeds gate value 28 for firefox webpack home p95 setupStore Sum of mean exceeds: 611ms | Sum of p95 exceeds: 1794.8ms Sum of all benchmark exceeds: 2405.8ms |
Builds ready [dc2c43b]
UI Startup Metrics (1232 ± 94 ms)
Benchmark value 42 exceeds gate value 41 for chrome browserify home p95 domInteractive Benchmark value 20 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 19 exceeds gate value 17 for chrome browserify home p95 setupStore Benchmark value 2263 exceeds gate value 2192 for chrome webpack home mean uiStartup Benchmark value 255 exceeds gate value 235 for chrome webpack home mean firstReactRender Benchmark value 12 exceeds gate value 7 for chrome webpack home mean initialActions Benchmark value 2718 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 62 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 400 exceeds gate value 370 for chrome webpack home p95 firstReactRender Benchmark value 28 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 1971 exceeds gate value 1970 for chrome webpack home p95 loadScripts Benchmark value 1411 exceeds gate value 1405 for firefox browserify home mean uiStartup Benchmark value 120 exceeds gate value 110 for firefox browserify home mean domInteractive Benchmark value 7 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 1702 exceeds gate value 1660 for firefox browserify home p95 uiStartup Benchmark value 332 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 34 exceeds gate value 24 for firefox browserify home p95 getState Benchmark value 19 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 37 exceeds gate value 27 for firefox browserify home p95 setupStore Benchmark value 1707 exceeds gate value 1615 for firefox webpack home mean uiStartup Benchmark value 1456 exceeds gate value 1380 for firefox webpack home mean load Benchmark value 1456 exceeds gate value 1380 for firefox webpack home mean domContentLoaded Benchmark value 108 exceeds gate value 100 for firefox webpack home mean domInteractive Benchmark value 55 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 10 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 1437 exceeds gate value 1360 for firefox webpack home mean loadScripts Benchmark value 2277 exceeds gate value 1935 for firefox webpack home p95 uiStartup Benchmark value 1935 exceeds gate value 1660 for firefox webpack home p95 load Benchmark value 1935 exceeds gate value 1660 for firefox webpack home p95 domContentLoaded Benchmark value 293 exceeds gate value 156 for firefox webpack home p95 domInteractive Benchmark value 64 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 27 exceeds gate value 2 for firefox webpack home p95 initialActions Benchmark value 1918 exceeds gate value 1630 for firefox webpack home p95 loadScripts Sum of mean exceeds: 479ms | Sum of p95 exceeds: 1914.8ms Sum of all benchmark exceeds: 2393.8ms |
Builds ready [bc75aea]
UI Startup Metrics (1303 ± 61 ms)
Benchmark value 1120 exceeds gate value 1070 for chrome browserify home mean load Benchmark value 1112 exceeds gate value 1061 for chrome browserify home mean domContentLoaded Benchmark value 220 exceeds gate value 10 for chrome browserify home mean backgroundConnect Benchmark value 3 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 900 exceeds gate value 830 for chrome browserify home mean loadScripts Benchmark value 1420 exceeds gate value 1365 for chrome browserify home p95 uiStartup Benchmark value 1231 exceeds gate value 1190 for chrome browserify home p95 load Benchmark value 1221 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded Benchmark value 1199 exceeds gate value 1180 for chrome browserify home p95 firstPaint Benchmark value 242 exceeds gate value 18 for chrome browserify home p95 backgroundConnect Benchmark value 11 exceeds gate value 1.2 for chrome browserify home p95 initialActions Benchmark value 1012 exceeds gate value 940 for chrome browserify home p95 loadScripts Benchmark value 2391 exceeds gate value 2192 for chrome webpack home mean uiStartup Benchmark value 1890 exceeds gate value 1711 for chrome webpack home mean load Benchmark value 1880 exceeds gate value 1704 for chrome webpack home mean domContentLoaded Benchmark value 44 exceeds gate value 40 for chrome webpack home mean backgroundConnect Benchmark value 14 exceeds gate value 7 for chrome webpack home mean initialActions Benchmark value 1875 exceeds gate value 1699 for chrome webpack home mean loadScripts Benchmark value 2585 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 2138 exceeds gate value 2030 for chrome webpack home p95 load Benchmark value 2133 exceeds gate value 2005 for chrome webpack home p95 domContentLoaded Benchmark value 58 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 277 exceeds gate value 90 for chrome webpack home p95 backgroundConnect Benchmark value 51 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 2130 exceeds gate value 1970 for chrome webpack home p95 loadScripts Benchmark value 1547 exceeds gate value 1405 for firefox browserify home mean uiStartup Benchmark value 1325 exceeds gate value 1245 for firefox browserify home mean load Benchmark value 1324 exceeds gate value 1239 for firefox browserify home mean domContentLoaded Benchmark value 126 exceeds gate value 110 for firefox browserify home mean domInteractive Benchmark value 28 exceeds gate value 25 for firefox browserify home mean backgroundConnect Benchmark value 32 exceeds gate value 25 for firefox browserify home mean firstReactRender Benchmark value 17 exceeds gate value 11 for firefox browserify home mean getState Benchmark value 6 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 1302 exceeds gate value 1230 for firefox browserify home mean loadScripts Benchmark value 12 exceeds gate value 9 for firefox browserify home mean setupStore Benchmark value 1796 exceeds gate value 1660 for firefox browserify home p95 uiStartup Benchmark value 1529 exceeds gate value 1495 for firefox browserify home p95 load Benchmark value 1529 exceeds gate value 1495 for firefox browserify home p95 domContentLoaded Benchmark value 389 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 61 exceeds gate value 55 for firefox browserify home p95 firstReactRender Benchmark value 61 exceeds gate value 24 for firefox browserify home p95 getState Benchmark value 29 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 1504 exceeds gate value 1475 for firefox browserify home p95 loadScripts Benchmark value 39 exceeds gate value 27 for firefox browserify home p95 setupStore Benchmark value 1744 exceeds gate value 1615 for firefox webpack home mean uiStartup Benchmark value 1475 exceeds gate value 1380 for firefox webpack home mean load Benchmark value 1475 exceeds gate value 1380 for firefox webpack home mean domContentLoaded Benchmark value 101 exceeds gate value 100 for firefox webpack home mean domInteractive Benchmark value 29 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 8 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 1452 exceeds gate value 1360 for firefox webpack home mean loadScripts Benchmark value 19 exceeds gate value 13 for firefox webpack home mean setupStore Benchmark value 2124 exceeds gate value 1935 for firefox webpack home p95 uiStartup Benchmark value 1734 exceeds gate value 1660 for firefox webpack home p95 load Benchmark value 1734 exceeds gate value 1660 for firefox webpack home p95 domContentLoaded Benchmark value 299 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 64 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 20 exceeds gate value 2 for firefox webpack home p95 initialActions Benchmark value 1703 exceeds gate value 1630 for firefox webpack home p95 loadScripts Benchmark value 44 exceeds gate value 28 for firefox webpack home p95 setupStore Sum of mean exceeds: 2054ms | Sum of p95 exceeds: 2336.8ms Sum of all benchmark exceeds: 4390.8ms Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: Unsafe Type Assertion Causes Metadata Retrieval Failures
The as unknown as CaipAssetType type assertion is unsafely used to cast lowercased CAIP asset IDs (parsedFromAssetId.assetId.toLowerCase() and parsedToAssetId.assetId.toLowerCase()) when retrieving asset metadata. This bypasses TypeScript's type safety and can lead to runtime errors if the lowercased ID is not a valid CaipAssetType or if asset IDs are case-sensitive for non-Ethereum assets.
ui/hooks/bridge/useBridgeQueryParams.ts#L249-L254
metamask-extension/ui/hooks/bridge/useBridgeQueryParams.ts
Lines 249 to 254 in 0f043b8
| const fromTokenMetadata = | |
| assetMetadataByAssetId?.[parsedFromAssetId.assetId] ?? | |
| assetMetadataByAssetId?.[ | |
| parsedFromAssetId.assetId.toLowerCase() as unknown as CaipAssetType | |
| ]; | |
ui/hooks/bridge/useBridgeQueryParams.ts#L279-L282
metamask-extension/ui/hooks/bridge/useBridgeQueryParams.ts
Lines 279 to 282 in 0f043b8
| assetMetadataByAssetId?.[parsedToAssetId.assetId] ?? | |
| assetMetadataByAssetId?.[ | |
| parsedToAssetId.assetId.toLowerCase() as unknown as CaipAssetType | |
| ]; |
Bug: Address Formatting Issue in Metadata Fetch
The fetchAssetMetadata function incorrectly changed the returned address field from toHex(address) to address.toLowerCase(). This is problematic because the address parameter can be a CAIP asset ID, causing toLowerCase() to be applied to the entire ID instead of extracting and lowercasing only the hex address reference (unlike the Solana branch). Additionally, toLowerCase() does not ensure the address is a properly formatted hexadecimal string, which toHex previously guaranteed, potentially returning malformed addresses to consumers.
shared/lib/asset-utils.ts#L136-L137
metamask-extension/shared/lib/asset-utils.ts
Lines 136 to 137 in 0f043b8
| ...commonFields, | |
| address: address.toLowerCase(), |
Was this report helpful? Give feedback by reacting with 👍 or 👎
Builds ready [0f043b8]
UI Startup Metrics (1285 ± 60 ms)
Benchmark value 1103 exceeds gate value 1070 for chrome browserify home mean load Benchmark value 1096 exceeds gate value 1061 for chrome browserify home mean domContentLoaded Benchmark value 214 exceeds gate value 10 for chrome browserify home mean backgroundConnect Benchmark value 3 exceeds gate value 1 for chrome browserify home mean initialActions Benchmark value 889 exceeds gate value 830 for chrome browserify home mean loadScripts Benchmark value 1369 exceeds gate value 1365 for chrome browserify home p95 uiStartup Benchmark value 42 exceeds gate value 41 for chrome browserify home p95 domInteractive Benchmark value 231 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 970 exceeds gate value 940 for chrome browserify home p95 loadScripts Benchmark value 2410 exceeds gate value 2192 for chrome webpack home mean uiStartup Benchmark value 1912 exceeds gate value 1711 for chrome webpack home mean load Benchmark value 1904 exceeds gate value 1704 for chrome webpack home mean domContentLoaded Benchmark value 23 exceeds gate value 21 for chrome webpack home mean domInteractive Benchmark value 46 exceeds gate value 40 for chrome webpack home mean backgroundConnect Benchmark value 13 exceeds gate value 7 for chrome webpack home mean initialActions Benchmark value 1899 exceeds gate value 1699 for chrome webpack home mean loadScripts Benchmark value 2643 exceeds gate value 2454 for chrome webpack home p95 uiStartup Benchmark value 2159 exceeds gate value 2030 for chrome webpack home p95 load Benchmark value 2155 exceeds gate value 2005 for chrome webpack home p95 domContentLoaded Benchmark value 77 exceeds gate value 57 for chrome webpack home p95 domInteractive Benchmark value 284 exceeds gate value 90 for chrome webpack home p95 backgroundConnect Benchmark value 51 exceeds gate value 7 for chrome webpack home p95 initialActions Benchmark value 2153 exceeds gate value 1970 for chrome webpack home p95 loadScripts Benchmark value 1529 exceeds gate value 1405 for firefox browserify home mean uiStartup Benchmark value 1314 exceeds gate value 1245 for firefox browserify home mean load Benchmark value 1314 exceeds gate value 1239 for firefox browserify home mean domContentLoaded Benchmark value 118 exceeds gate value 110 for firefox browserify home mean domInteractive Benchmark value 26 exceeds gate value 25 for firefox browserify home mean backgroundConnect Benchmark value 31 exceeds gate value 25 for firefox browserify home mean firstReactRender Benchmark value 5 exceeds gate value 1 for firefox browserify home mean initialActions Benchmark value 1291 exceeds gate value 1230 for firefox browserify home mean loadScripts Benchmark value 17 exceeds gate value 9 for firefox browserify home mean setupStore Benchmark value 1800 exceeds gate value 1660 for firefox browserify home p95 uiStartup Benchmark value 1519 exceeds gate value 1495 for firefox browserify home p95 load Benchmark value 1518 exceeds gate value 1495 for firefox browserify home p95 domContentLoaded Benchmark value 322 exceeds gate value 195 for firefox browserify home p95 domInteractive Benchmark value 60 exceeds gate value 55 for firefox browserify home p95 firstReactRender Benchmark value 38 exceeds gate value 24 for firefox browserify home p95 getState Benchmark value 16 exceeds gate value 2 for firefox browserify home p95 initialActions Benchmark value 1489 exceeds gate value 1475 for firefox browserify home p95 loadScripts Benchmark value 96 exceeds gate value 27 for firefox browserify home p95 setupStore Benchmark value 1717 exceeds gate value 1615 for firefox webpack home mean uiStartup Benchmark value 1457 exceeds gate value 1380 for firefox webpack home mean load Benchmark value 1457 exceeds gate value 1380 for firefox webpack home mean domContentLoaded 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 53 exceeds gate value 38 for firefox webpack home mean firstReactRender Benchmark value 8 exceeds gate value 1 for firefox webpack home mean initialActions Benchmark value 1433 exceeds gate value 1360 for firefox webpack home mean loadScripts Benchmark value 2082 exceeds gate value 1935 for firefox webpack home p95 uiStartup Benchmark value 1762 exceeds gate value 1660 for firefox webpack home p95 load Benchmark value 1762 exceeds gate value 1660 for firefox webpack home p95 domContentLoaded Benchmark value 294 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 62 exceeds gate value 50 for firefox webpack home p95 firstReactRender Benchmark value 14 exceeds gate value 2 for firefox webpack home p95 initialActions Benchmark value 1722 exceeds gate value 1630 for firefox webpack home p95 loadScripts Benchmark value 43 exceeds gate value 28 for firefox webpack home p95 setupStore Sum of mean exceeds: 1935ms | Sum of p95 exceeds: 2223.8ms Sum of all benchmark exceeds: 4158.8ms Bundle size diffs [🚨 Warning! Bundle size has increased!]
|
Description
This pre-fills Swap amount, src token and dest tokens based on deep-link query parameters (examples below)
Changelog
CHANGELOG entry:
Related issues
Fixes: #34475
Fixes: https://consensyssoftware.atlassian.net/browse/SWAPS-2601
Manual testing steps
Navigation should set src token (existing feature)
Deep links should set src, dest tokens and amount
Partial deep links
Screenshots/Recordings
Before
After
Pre-merge author checklist
Pre-merge reviewer checklist