Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7cbfee7
feat: MUSD-98 create musd conversion education screen (#22972)
Matt561 Nov 28, 2025
9023254
feat(perps): add pending trade configuration storage with auto-save o…
michalconsensys Nov 28, 2025
18185db
feat: cp-7.61.0 display total Bandwidth and Energy in along with the …
ulissesferreira Nov 28, 2025
43f351b
fix: opt in for rewards when no active season cp-7.61.0 (#23395)
VGR-GIT Nov 28, 2025
11ea6e9
fix(perps): auto display latest info in recent activity cp-7.61.0 (#2…
abretonc7s Nov 28, 2025
80e8c75
chore: remove SwapsController utils imports (#23191)
infiniteflower Nov 28, 2025
cb8426a
feat: rewards hold musd way to earn cp-7.61.0 (#23363)
VGR-GIT Nov 28, 2025
b274a94
ci: ensure E2E tests results are success for final check (#23409)
jvbriones Nov 28, 2025
a88cba6
fix: [Trending] inconsistencies in results (#23408)
juanmigdr Nov 28, 2025
11b8f60
fix: cp-7.61.0 balance updates when switching accounts (#23377)
Prithpal-Sooriya Nov 28, 2025
27f5fd8
chore: Bump network-controller to v27 (+ dependencies) (#22911)
mcmire Nov 28, 2025
89367f9
feat: price API v3 upgrade (#22876)
bergarces Nov 28, 2025
ffba0b0
chore: bump Android e2e workflow runner from lg to xl (#23418)
cryptodev-2s Nov 28, 2025
4d3ae67
refactor(ramp): remove unused modal (#23419)
wachunei Nov 28, 2025
6b625be
test: exposes X and Y starting point for swipe Gestures (#23370)
christopherferreira9 Nov 28, 2025
6f8c1e6
feat: [Trending] show marketData when using token search API (#23197)
juanmigdr Nov 28, 2025
7bb3639
feat: hide network connection banner immediately when network recover…
cryptodev-2s Nov 28, 2025
8d2f55a
fix: gracefully handle unsupported notifications (#23291)
Prithpal-Sooriya Nov 28, 2025
8f5bf8e
fix: cp-7.61.0 resolve missing push notification analytics events (#2…
Prithpal-Sooriya Nov 28, 2025
d6a39f0
feat: [Trending] simplified predict market row item (#23388)
juanmigdr Nov 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build-android-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ on:
jobs:
build-android-apks:
name: Build Android E2E APKs
runs-on: ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04-lg
runs-on: ghcr.io/cirruslabs/ubuntu-runner-amd64:24.04-xl # Bumped from lg to xl to prevent Daemon disappearance issue (Daemon OOM issue in CI)
timeout-minutes: 40
env:
GRADLE_USER_HOME: /home/admin/_work/.gradle
Expand Down
24 changes: 16 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ jobs:
echo "No changes detected"
fi
needs_e2e_build:
uses: ./.github/workflows/needs-e2e-build.yml
uses: ./.github/workflows/needs-e2e-build.yml
component-view-test:
runs-on: ubuntu-latest
steps:
Expand Down Expand Up @@ -277,7 +277,7 @@ jobs:
post-comment: 'true'

# Main E2E tests

build-android-apks:
name: 'Build Android APKs'
if: ${{ github.event_name != 'merge_group' && needs.needs_e2e_build.outputs.android_changed == 'true' }}
Expand Down Expand Up @@ -549,16 +549,24 @@ jobs:

# Check E2E jobs only if they should have run
if [[ "${{ needs.needs_e2e_build.outputs.builds }}" == "true" ]]; then
if [[ "${{ needs.e2e-smoke-tests-android.result }}" == "failure" ]]; then
echo "Android E2E tests failed"
# Accept both 'success' and 'skipped' as valid results
# 'skipped' occurs during merge_group events or when jobs are intentionally skipped
# Only fail on 'failure' or 'cancelled'
ANDROID_RESULT="${{ needs.e2e-smoke-tests-android.result }}"
if [[ "$ANDROID_RESULT" == "failure" ]] || [[ "$ANDROID_RESULT" == "cancelled" ]]; then
echo "Android E2E tests failed (result: $ANDROID_RESULT)"
exit 1
fi
if [[ "${{ needs.e2e-smoke-tests-ios.result }}" == "failure" ]]; then
echo "iOS E2E tests failed"

IOS_RESULT="${{ needs.e2e-smoke-tests-ios.result }}"
if [[ "$IOS_RESULT" == "failure" ]] || [[ "$IOS_RESULT" == "cancelled" ]]; then
echo "iOS E2E tests failed (result: $IOS_RESULT)"
exit 1
fi
if [[ "${{ needs.e2e-smoke-tests-android-flask.result }}" == "failure" ]]; then
echo "Android Flask E2E tests failed"

FLASK_RESULT="${{ needs.e2e-smoke-tests-android-flask.result }}"
if [[ "$FLASK_RESULT" == "failure" ]] || [[ "$FLASK_RESULT" == "cancelled" ]]; then
echo "Android Flask E2E tests failed (result: $FLASK_RESULT)"
exit 1
fi
fi
Expand Down

This file was deleted.

139 changes: 139 additions & 0 deletions .yarn/patches/@metamask-assets-controllers-npm-91.0.0-ea998cb0bd.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
diff --git a/dist/TokenBalancesController.cjs b/dist/TokenBalancesController.cjs
index 4918812dde60b8d0e24a7bded27d88f233968858..4e8018bce92b9e5d47fc40784409e16db22be615 100644
--- a/dist/TokenBalancesController.cjs
+++ b/dist/TokenBalancesController.cjs
@@ -535,14 +535,16 @@ class TokenBalancesController extends (0, polling_controller_1.StaticIntervalPol
}
// Update with actual fetched balances only if the value has changed
aggregated.forEach(({ success, value, account, token, chainId }) => {
- var _a, _b, _c;
+ var _a, _b;
if (success && value !== undefined) {
+ // Ensure all accounts we add/update are in lower-case
+ const lowerCaseAccount = account.toLowerCase();
const newBalance = (0, controller_utils_1.toHex)(value);
const tokenAddress = checksum(token);
- const currentBalance = d.tokenBalances[account]?.[chainId]?.[tokenAddress];
+ const currentBalance = d.tokenBalances[lowerCaseAccount]?.[chainId]?.[tokenAddress];
// Only update if the balance has actually changed
if (currentBalance !== newBalance) {
- ((_c = ((_a = d.tokenBalances)[_b = account] ?? (_a[_b] = {})))[chainId] ?? (_c[chainId] = {}))[tokenAddress] = newBalance;
+ ((_b = ((_a = d.tokenBalances)[lowerCaseAccount] ?? (_a[lowerCaseAccount] = {})))[chainId] ?? (_b[chainId] = {}))[tokenAddress] = newBalance;
}
}
});
diff --git a/dist/TokenBalancesController.mjs b/dist/TokenBalancesController.mjs
index f64d13f8de56631345a44e6ebb025e62e03f51bc..99aa7f27c574c94b26daa56091ac50d15281dd30 100644
--- a/dist/TokenBalancesController.mjs
+++ b/dist/TokenBalancesController.mjs
@@ -531,14 +531,16 @@ export class TokenBalancesController extends StaticIntervalPollingController() {
}
// Update with actual fetched balances only if the value has changed
aggregated.forEach(({ success, value, account, token, chainId }) => {
- var _a, _b, _c;
+ var _a, _b;
if (success && value !== undefined) {
+ // Ensure all accounts we add/update are in lower-case
+ const lowerCaseAccount = account.toLowerCase();
const newBalance = toHex(value);
const tokenAddress = checksum(token);
- const currentBalance = d.tokenBalances[account]?.[chainId]?.[tokenAddress];
+ const currentBalance = d.tokenBalances[lowerCaseAccount]?.[chainId]?.[tokenAddress];
// Only update if the balance has actually changed
if (currentBalance !== newBalance) {
- ((_c = ((_a = d.tokenBalances)[_b = account] ?? (_a[_b] = {})))[chainId] ?? (_c[chainId] = {}))[tokenAddress] = newBalance;
+ ((_b = ((_a = d.tokenBalances)[lowerCaseAccount] ?? (_a[lowerCaseAccount] = {})))[chainId] ?? (_b[chainId] = {}))[tokenAddress] = newBalance;
}
}
});
diff --git a/dist/token-prices-service/codefi-v2.cjs b/dist/token-prices-service/codefi-v2.cjs
index ba0f0c1bcbf0f231549b1ca9d3be2d1137a0d732..fd4851471fa0c2f07efbb527a3eea55cbfbc4743 100644
--- a/dist/token-prices-service/codefi-v2.cjs
+++ b/dist/token-prices-service/codefi-v2.cjs
@@ -100,6 +100,8 @@ exports.SUPPORTED_CURRENCIES = [
'mxn',
// Malaysian Ringgit
'myr',
+ // Monad
+ 'mon',
// Nigerian Naira
'ngn',
// Norwegian Krone
@@ -220,43 +222,43 @@ exports.getNativeTokenAddress = getNativeTokenAddress;
// Source: https://github.com/consensys-vertical-apps/va-mmcx-price-api/blob/main/src/constants/slip44.ts
// We can only support PricesAPI V3 for EVM chains that have a CAIP-19 native asset mapping.
exports.SPOT_PRICES_SUPPORT_INFO = {
- '0x1': 'eip155:1/slip44:60', // Ethereum Mainnet - Native symbol: ETH
- '0xa': 'eip155:10/slip44:60', // OP Mainnet - Native symbol: ETH
- '0x19': 'eip155:25/slip44:394', // Cronos Mainnet - Native symbol: CRO
- '0x38': 'eip155:56/slip44:714', // BNB Smart Chain Mainnet - Native symbol: BNB
- '0x39': 'eip155:57/erc20:0x0000000000000000000000000000000000000000', // 'eip155:57/slip44:57', // Syscoin Mainnet - Native symbol: SYS
+ '0x1': null, //'eip155:1/slip44:60', // Ethereum Mainnet - Native symbol: ETH
+ '0xa': null, //'eip155:10/slip44:60', // OP Mainnet - Native symbol: ETH
+ '0x19': null, //'eip155:25/slip44:394', // Cronos Mainnet - Native symbol: CRO
+ '0x38': null, //'eip155:56/slip44:714', // BNB Smart Chain Mainnet - Native symbol: BNB
+ '0x39': null, //'eip155:57/erc20:0x0000000000000000000000000000000000000000', // 'eip155:57/slip44:57', // Syscoin Mainnet - Native symbol: SYS
'0x52': null, // 'eip155:82/slip44:18000', // Meter Mainnet - Native symbol: MTR
- '0x58': 'eip155:88/erc20:0x0000000000000000000000000000000000000000', // 'eip155:88/slip44:889', // TomoChain - Native symbol: TOMO
- '0x64': 'eip155:100/slip44:700', // Gnosis (formerly xDAI Chain) - Native symbol: xDAI
- '0x6a': 'eip155:106/erc20:0x0000000000000000000000000000000000000000', // 'eip155:106/slip44:5655640', // Velas EVM Mainnet - Native symbol: VLX
- '0x80': 'eip155:128/erc20:0x0000000000000000000000000000000000000000', // 'eip155:128/slip44:1010', // Huobi ECO Chain Mainnet - Native symbol: HT
- '0x89': 'eip155:137/slip44:966', // Polygon Mainnet - Native symbol: POL
+ '0x58': null, //'eip155:88/erc20:0x0000000000000000000000000000000000000000', // 'eip155:88/slip44:889', // TomoChain - Native symbol: TOMO
+ '0x64': null, //'eip155:100/slip44:700', // Gnosis (formerly xDAI Chain) - Native symbol: xDAI
+ '0x6a': null, //'eip155:106/erc20:0x0000000000000000000000000000000000000000', // 'eip155:106/slip44:5655640', // Velas EVM Mainnet - Native symbol: VLX
+ '0x80': null, //'eip155:128/erc20:0x0000000000000000000000000000000000000000', // 'eip155:128/slip44:1010', // Huobi ECO Chain Mainnet - Native symbol: HT
+ '0x89': null, //'eip155:137/slip44:966', // Polygon Mainnet - Native symbol: POL
'0x8f': null, // 'eip155:143/slip44:268435779', // Monad Mainnet - Native symbol: MON
- '0x92': 'eip155:146/slip44:10007', // Sonic Mainnet - Native symbol: S
- '0xfa': 'eip155:250/slip44:1007', // Fantom Opera - Native symbol: FTM
- '0x141': 'eip155:321/erc20:0x0000000000000000000000000000000000000000', // 'eip155:321/slip44:641', // KCC Mainnet - Native symbol: KCS
- '0x144': 'eip155:324/slip44:60', // zkSync Era Mainnet (Ethereum L2) - Native symbol: ETH
- '0x169': 'eip155:361/erc20:0x0000000000000000000000000000000000000000', // 'eip155:361/slip44:589', // Theta Mainnet - Native symbol: TFUEL
- '0x3e7': 'eip155:999/slip44:2457', // HyperEVM - Native symbol: ETH
- '0x440': 'eip155:1088/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // 'eip155:1088/slip44:XXX', // Metis Andromeda Mainnet (Ethereum L2) - Native symbol: METIS
- '0x44d': 'eip155:1101/slip44:60', // Polygon zkEVM mainnet - Native symbol: ETH
- '0x504': 'eip155:1284/slip44:1284', // Moonbeam - Native symbol: GLMR
- '0x505': 'eip155:1285/slip44:1285', // Moonriver - Native symbol: MOVR
- '0x531': 'eip155:1329/slip44:19000118', // Sei Mainnet - Native symbol: SEI
- '0x1388': 'eip155:5000/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // 'eip155:5000/slip44:XXX', // Mantle - Native symbol: MNT
- '0x2105': 'eip155:8453/slip44:60', // Base - Native symbol: ETH
- '0x2710': 'eip155:10000/erc20:0x0000000000000000000000000000000000000000', // 'eip155:10000/slip44:145', // Smart Bitcoin Cash - Native symbol: BCH
- '0xa4b1': 'eip155:42161/slip44:60', // Arbitrum One - Native symbol: ETH
- '0xa4ec': 'eip155:42220/slip44:52752', // Celo Mainnet - Native symbol: CELO
- '0xa516': 'eip155:42262/erc20:0x0000000000000000000000000000000000000000', // 'eip155:42262/slip44:474', // Oasis Emerald - Native symbol: ROSE
- '0xa86a': 'eip155:43114/slip44:9005', // Avalanche C-Chain - Native symbol: AVAX
- '0xe708': 'eip155:59144/slip44:60', // Linea Mainnet - Native symbol: ETH
- '0x13c31': 'eip155:81457/erc20:0x0000000000000000000000000000000000000000', // 'eip155:81457/slip44:60', // Blast Mainnet - Native symbol: ETH
- '0x17dcd': 'eip155:97741/erc20:0x0000000000000000000000000000000000000000', // 'eip155:97741/slip44:XXX', // Pepe Unchained Mainnet - Native symbol: PEPU
+ '0x92': null, //'eip155:146/slip44:10007', // Sonic Mainnet - Native symbol: S
+ '0xfa': null, //'eip155:250/slip44:1007', // Fantom Opera - Native symbol: FTM
+ '0x141': null, //'eip155:321/erc20:0x0000000000000000000000000000000000000000', // 'eip155:321/slip44:641', // KCC Mainnet - Native symbol: KCS
+ '0x144': null, //'eip155:324/slip44:60', // zkSync Era Mainnet (Ethereum L2) - Native symbol: ETH
+ '0x169': null, //'eip155:361/erc20:0x0000000000000000000000000000000000000000', // 'eip155:361/slip44:589', // Theta Mainnet - Native symbol: TFUEL
+ '0x3e7': null, //'eip155:999/slip44:2457', // HyperEVM - Native symbol: ETH
+ '0x440': null, //'eip155:1088/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // 'eip155:1088/slip44:XXX', // Metis Andromeda Mainnet (Ethereum L2) - Native symbol: METIS
+ '0x44d': null, //'eip155:1101/slip44:60', // Polygon zkEVM mainnet - Native symbol: ETH
+ '0x504': null, //'eip155:1284/slip44:1284', // Moonbeam - Native symbol: GLMR
+ '0x505': null, //'eip155:1285/slip44:1285', // Moonriver - Native symbol: MOVR
+ '0x531': null, //'eip155:1329/slip44:19000118', // Sei Mainnet - Native symbol: SEI
+ '0x1388': null, //'eip155:5000/erc20:0xdeaddeaddeaddeaddeaddeaddeaddeaddead0000', // 'eip155:5000/slip44:XXX', // Mantle - Native symbol: MNT
+ '0x2105': null, //'eip155:8453/slip44:60', // Base - Native symbol: ETH
+ '0x2710': null, //'eip155:10000/erc20:0x0000000000000000000000000000000000000000', // 'eip155:10000/slip44:145', // Smart Bitcoin Cash - Native symbol: BCH
+ '0xa4b1': null, //'eip155:42161/slip44:60', // Arbitrum One - Native symbol: ETH
+ '0xa4ec': null, //'eip155:42220/slip44:52752', // Celo Mainnet - Native symbol: CELO
+ '0xa516': null, //'eip155:42262/erc20:0x0000000000000000000000000000000000000000', // 'eip155:42262/slip44:474', // Oasis Emerald - Native symbol: ROSE
+ '0xa86a': null, //'eip155:43114/slip44:9005', // Avalanche C-Chain - Native symbol: AVAX
+ '0xe708': null, //'eip155:59144/slip44:60', // Linea Mainnet - Native symbol: ETH
+ '0x13c31': null, //'eip155:81457/erc20:0x0000000000000000000000000000000000000000', // 'eip155:81457/slip44:60', // Blast Mainnet - Native symbol: ETH
+ '0x17dcd': null, //'eip155:97741/erc20:0x0000000000000000000000000000000000000000', // 'eip155:97741/slip44:XXX', // Pepe Unchained Mainnet - Native symbol: PEPU
'0x518af': null, // 'eip155:333999/slip44:1997', // Polis Mainnet - Native symbol: POLIS
- '0x82750': 'eip155:534352/slip44:60', // Scroll Mainnet - Native symbol: ETH
- '0x4e454152': 'eip155:60/slip44:60', // Aurora Mainnet (Ethereum L2 on NEAR) - Native symbol: ETH
- '0x63564c40': 'eip155:1666600000/slip44:1023', // Harmony Mainnet Shard 0 - Native symbol: ONE
+ '0x82750': null, //'eip155:534352/slip44:60', // Scroll Mainnet - Native symbol: ETH
+ '0x4e454152': null, //'eip155:60/slip44:60', // Aurora Mainnet (Ethereum L2 on NEAR) - Native symbol: ETH
+ '0x63564c40': null, //'eip155:1666600000/slip44:1023', // Harmony Mainnet Shard 0 - Native symbol: ONE
};
/**
* The list of chain IDs that can be supplied in the URL for the `/spot-prices`
10 changes: 10 additions & 0 deletions app/actions/user/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import {
type SetExistingUserAction,
type SetIsConnectionRemovedAction,
type SetMultichainAccountsIntroModalSeenAction,
type SetMusdConversionEducationSeenAction,
UserActionType,
} from './types';

Expand Down Expand Up @@ -213,3 +214,12 @@ export function setMultichainAccountsIntroModalSeen(
payload: { seen },
};
}

/**
* Action to set mUSD conversion education as seen
*/
export function setMusdConversionEducationSeen(): SetMusdConversionEducationSeenAction {
return {
type: UserActionType.SET_MUSD_CONVERSION_EDUCATION_SEEN,
};
}
7 changes: 6 additions & 1 deletion app/actions/user/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ export enum UserActionType {
SET_EXISTING_USER = 'SET_EXISTING_USER',
SET_IS_CONNECTION_REMOVED = 'SET_IS_CONNECTION_REMOVED',
SET_MULTICHAIN_ACCOUNTS_INTRO_MODAL_SEEN = 'SET_MULTICHAIN_ACCOUNTS_INTRO_MODAL_SEEN',
SET_MUSD_CONVERSION_EDUCATION_SEEN = 'SET_MUSD_CONVERSION_EDUCATION_SEEN',
}

// User actions
Expand Down Expand Up @@ -109,6 +110,9 @@ export type SetMultichainAccountsIntroModalSeenAction =
payload: { seen: boolean };
};

export type SetMusdConversionEducationSeenAction =
Action<UserActionType.SET_MUSD_CONVERSION_EDUCATION_SEEN>;

/**
* User actions union type
*/
Expand Down Expand Up @@ -137,4 +141,5 @@ export type UserAction =
| SetAppServicesReadyAction
| SetExistingUserAction
| SetIsConnectionRemovedAction
| SetMultichainAccountsIntroModalSeenAction;
| SetMultichainAccountsIntroModalSeenAction
| SetMusdConversionEducationSeenAction;
Loading
Loading