Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions packages/assets-controllers/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Changed

- Bump `@metamask/utils` from `^11.9.0` to `^11.11.0` ([#9074](https://github.com/MetaMask/core/pull/9074))
Comment thread
Prithpal-Sooriya marked this conversation as resolved.
- Bump `@metamask/transaction-controller` from `^67.0.0` to `^67.1.0` ([#9066](https://github.com/MetaMask/core/pull/9066))

### Removed
Expand Down
1 change: 1 addition & 0 deletions packages/network-enablement-controller/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added

- Add Stellar network enablement: default `enabledNetworkMap` entries for Stellar namespace (pubnet on, testnet off), enable Stellar pubnet during popular-network init when it exists in `MultichainNetworkController`, and include Stellar pubnet in `listPopularMultichainNetworks` ([#8832](https://github.com/MetaMask/core/pull/8832))
- Export `NetworkEnablementControllerStateChangeEvent` type from the package root ([#9084](https://github.com/MetaMask/core/pull/9084))

### Changed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,11 +151,11 @@ export type NetworkEnablementControllerListPopularEvmNetworksAction = {
};

/**
* Returns popular multichain (Bitcoin, Solana, Tron) mainnet chain IDs in
* Returns popular multichain (Bitcoin, Solana, Tron, Stellar) mainnet chain IDs in
* CAIP-2 form, restricted to networks that exist in MultichainNetworkController
* (multichainNetworkConfigurationsByChainId).
*
* @returns CAIP-2 chain IDs for Bitcoin, Solana, and Tron mainnets that are configured.
* @returns CAIP-2 chain IDs for Bitcoin, Solana, Tron, and Stellar mainnets that are configured.
*/
export type NetworkEnablementControllerListPopularMultichainNetworksAction = {
type: `NetworkEnablementController:listPopularMultichainNetworks`;
Expand All @@ -167,7 +167,7 @@ export type NetworkEnablementControllerListPopularMultichainNetworksAction = {
* networks that exist in NetworkController (networkConfigurationsByChainId) and
* MultichainNetworkController (multichainNetworkConfigurationsByChainId). EVM
* popular networks come from POPULAR_NETWORKS; multichain popular are Bitcoin,
* Solana, and Tron mainnets.
* Solana, Tron, and Stellar mainnets.
*
* @returns CAIP-2 chain IDs for popular EVM networks and multichain mainnets that are configured.
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { deriveStateFromMetadata } from '@metamask/base-controller';
import { BuiltInNetworkName, ChainId } from '@metamask/controller-utils';
import { BtcScope, SolScope, TrxScope } from '@metamask/keyring-api';
import { BtcScope, SolScope, TrxScope, XlmScope } from '@metamask/keyring-api';
import { Messenger, MOCK_ANY_NAMESPACE } from '@metamask/messenger';
import type {
MessengerActions,
Expand Down Expand Up @@ -83,6 +83,7 @@ const defaultMultichainGetState = (): MultichainGetStateReturn => ({
[BtcScope.Mainnet]: { chainId: BtcScope.Mainnet, name: 'Bitcoin' },
[SolScope.Mainnet]: { chainId: SolScope.Mainnet, name: 'Solana' },
[TrxScope.Mainnet]: { chainId: TrxScope.Mainnet, name: 'Tron' },
[XlmScope.Pubnet]: { chainId: XlmScope.Pubnet, name: 'Stellar' },
},
selectedMultichainNetworkChainId: 'eip155:1',
isEvmSelected: true,
Expand Down Expand Up @@ -212,6 +213,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -269,6 +274,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: {
...getDefaultNativeAssetIdentifiers(),
Expand Down Expand Up @@ -333,6 +342,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: expectedNativeAssetIdentifiers,
});
Expand Down Expand Up @@ -476,6 +489,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: expectedNativeAssetIdentifiersForFallback,
});
Expand Down Expand Up @@ -577,6 +594,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
// init() populates nativeAssetIdentifiers from NetworkController (EVM networks only)
nativeAssetIdentifiers: {
Expand Down Expand Up @@ -1178,6 +1199,10 @@ describe('NetworkEnablementController', () => {
chainId: TrxScope.Mainnet,
name: 'Tron Mainnet',
},
[XlmScope.Pubnet]: {
chainId: XlmScope.Pubnet,
name: 'Stellar Mainnet',
},
},
selectedMultichainNetworkChainId:
'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
Expand Down Expand Up @@ -1220,6 +1245,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -1255,6 +1284,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -1337,6 +1370,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: false,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -1519,6 +1556,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -1554,6 +1595,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: false,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -1609,6 +1654,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: false,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: {
...getDefaultNativeAssetIdentifiers(),
Expand Down Expand Up @@ -1648,6 +1697,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: false,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: {
...getDefaultNativeAssetIdentifiers(),
Expand Down Expand Up @@ -1687,6 +1740,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: false,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: {
...getDefaultNativeAssetIdentifiers(),
Expand Down Expand Up @@ -1737,6 +1794,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: false,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -1779,6 +1840,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: false,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -1834,6 +1899,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: false,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: {
...getDefaultNativeAssetIdentifiers(),
Expand Down Expand Up @@ -1881,6 +1950,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -1930,6 +2003,10 @@ describe('NetworkEnablementController', () => {
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
nativeAssetIdentifiers: getDefaultNativeAssetIdentifiers(),
});
Expand Down Expand Up @@ -2166,14 +2243,15 @@ describe('NetworkEnablementController', () => {
const { controller } = setupController();
const result = controller.listPopularNetworks();

// Default setup: 3 EVM (0x1, 0xe708, 0x2105) + 3 multichain (Btc, Sol, Trx)
// Default setup: 3 EVM (0x1, 0xe708, 0x2105) + 4 multichain (Btc, Sol, Trx, Stellar)
expect(result).toContain('eip155:1');
expect(result).toContain('eip155:59144');
expect(result).toContain('eip155:8453');
expect(result).toContain(BtcScope.Mainnet);
expect(result).toContain(SolScope.Mainnet);
expect(result).toContain(TrxScope.Mainnet);
expect(result).toHaveLength(6);
expect(result).toContain(XlmScope.Pubnet);
expect(result).toHaveLength(7);
});

it('excludes multichain mainnets when not in MultichainNetworkController state', () => {
Expand All @@ -2193,6 +2271,7 @@ describe('NetworkEnablementController', () => {
expect(result).not.toContain(BtcScope.Mainnet);
expect(result).not.toContain(SolScope.Mainnet);
expect(result).not.toContain(TrxScope.Mainnet);
expect(result).not.toContain(XlmScope.Pubnet);
expect(result).toHaveLength(3);
});

Expand Down Expand Up @@ -2240,14 +2319,15 @@ describe('NetworkEnablementController', () => {
});

describe('listPopularMultichainNetworks', () => {
it('returns only Bitcoin, Solana, Tron mainnets that exist in MultichainNetworkController state', () => {
it('returns only Bitcoin, Solana, Tron, Stellar mainnets that exist in MultichainNetworkController state', () => {
const { controller } = setupController();
const result = controller.listPopularMultichainNetworks();

expect(result).toContain(BtcScope.Mainnet);
expect(result).toContain(SolScope.Mainnet);
expect(result).toContain(TrxScope.Mainnet);
expect(result).toHaveLength(3);
expect(result).toContain(XlmScope.Pubnet);
expect(result).toHaveLength(4);
});

it('returns empty when none of the multichain mainnets are configured', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type {
ControllerStateChangeEvent,
} from '@metamask/base-controller';
import { BuiltInNetworkName, ChainId } from '@metamask/controller-utils';
import { BtcScope, SolScope, TrxScope } from '@metamask/keyring-api';
import { BtcScope, SolScope, TrxScope, XlmScope } from '@metamask/keyring-api';
import type { Messenger } from '@metamask/messenger';
import type { MultichainNetworkControllerGetStateAction } from '@metamask/multichain-network-controller';
import { toEvmCaipChainId } from '@metamask/multichain-network-controller';
Expand Down Expand Up @@ -184,6 +184,10 @@ const getDefaultNetworkEnablementControllerState =
[TrxScope.Nile]: false,
[TrxScope.Shasta]: false,
},
[KnownCaipNamespace.Stellar]: {
[XlmScope.Pubnet]: true,
[XlmScope.Testnet]: false,
},
},
// nativeAssetIdentifiers is initialized as empty and should be populated
// by the client using initNativeAssetIdentifiers() during controller init
Expand Down Expand Up @@ -419,6 +423,18 @@ export class NetworkEnablementController extends BaseController<
// Enable Tron mainnet
state.enabledNetworkMap[tronKeys.namespace][tronKeys.storageKey] = true;
}

// Enable Stellar mainnet if it exists in MultichainNetworkController configurations
const stellarKeys = deriveKeys(XlmScope.Pubnet as CaipChainId);
if (
multichainState.multichainNetworkConfigurationsByChainId[
XlmScope.Pubnet
]
) {
this.#ensureNamespaceBucket(state, stellarKeys.namespace);
state.enabledNetworkMap[stellarKeys.namespace][stellarKeys.storageKey] =
true;
}
});
}

Expand Down Expand Up @@ -769,11 +785,11 @@ export class NetworkEnablementController extends BaseController<
}

/**
* Returns popular multichain (Bitcoin, Solana, Tron) mainnet chain IDs in
* Returns popular multichain (Bitcoin, Solana, Tron, Stellar) mainnet chain IDs in
* CAIP-2 form, restricted to networks that exist in MultichainNetworkController
* (multichainNetworkConfigurationsByChainId).
*
* @returns CAIP-2 chain IDs for Bitcoin, Solana, and Tron mainnets that are configured.
* @returns CAIP-2 chain IDs for Bitcoin, Solana, Tron, and Stellar mainnets that are configured.
*/
listPopularMultichainNetworks(): CaipChainId[] {
const multichainState = this.messenger.call(
Expand All @@ -783,6 +799,7 @@ export class NetworkEnablementController extends BaseController<
BtcScope.Mainnet,
SolScope.Mainnet,
TrxScope.Mainnet,
XlmScope.Pubnet,
] as const;
return multichainMainnets.filter(
(chainId) =>
Expand All @@ -795,7 +812,7 @@ export class NetworkEnablementController extends BaseController<
* networks that exist in NetworkController (networkConfigurationsByChainId) and
* MultichainNetworkController (multichainNetworkConfigurationsByChainId). EVM
* popular networks come from POPULAR_NETWORKS; multichain popular are Bitcoin,
* Solana, and Tron mainnets.
* Solana, Tron, and Stellar mainnets.
*
* @returns CAIP-2 chain IDs for popular EVM networks and multichain mainnets that are configured.
*/
Expand Down
Loading