@metamask-previews/multichain-network-controller 0.3.0-preview-13542d74 → 0.4.0-preview-31a5eea2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -2
- package/dist/MultichainNetworkController.cjs +9 -8
- package/dist/MultichainNetworkController.cjs.map +1 -1
- package/dist/MultichainNetworkController.d.cts.map +1 -1
- package/dist/MultichainNetworkController.d.mts.map +1 -1
- package/dist/MultichainNetworkController.mjs +10 -9
- package/dist/MultichainNetworkController.mjs.map +1 -1
- package/dist/constants.cjs +67 -4
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +22 -1
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.mts +22 -1
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.mjs +66 -3
- package/dist/constants.mjs.map +1 -1
- package/dist/index.cjs +4 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add Testnet asset IDs as constants ([#5589](https://github.com/MetaMask/core/pull/5589))
|
|
15
|
+
- Add Network specific decimal values and ticker as constants ([#5589](https://github.com/MetaMask/core/pull/5589))
|
|
16
|
+
- Add new method `removeNetwork` that acts as a proxy to remove an EVM network from the `@metamask/network-controller` ([#5516](https://github.com/MetaMask/core/pull/5516))
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
|
|
20
|
+
- The `AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS` now includes non-EVM testnets ([#5589](https://github.com/MetaMask/core/pull/5589))
|
|
21
|
+
- Bump `@metamask/keyring-api"` from `^17.2.0` to `^17.4.0` ([#5565](https://github.com/MetaMask/core/pull/5565))
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
|
|
25
|
+
- Fix the condition to update the active network based on the `AccountsController:selectedAccountChange` event ([#5642](https://github.com/MetaMask/core/pull/5642))
|
|
26
|
+
|
|
10
27
|
## [0.3.0]
|
|
11
28
|
|
|
12
29
|
### Changed
|
|
@@ -32,7 +49,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
32
49
|
|
|
33
50
|
### Fixed
|
|
34
51
|
|
|
35
|
-
- Add `MultichainNetworkController:stateChange` to list of subscribable `MultichainNetworkController` messenger events ([#5331](https://github.com/MetaMask/core
|
|
52
|
+
- Add `MultichainNetworkController:stateChange` to list of subscribable `MultichainNetworkController` messenger events ([#5331](https://github.com/MetaMask/core/pull/5331))
|
|
36
53
|
|
|
37
54
|
## [0.1.0]
|
|
38
55
|
|
|
@@ -42,7 +59,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
42
59
|
- Handle both EVM and non-EVM network and account switching for the associated network.
|
|
43
60
|
- Act as a proxy for the `NetworkController` (for EVM network changes).
|
|
44
61
|
|
|
45
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/multichain-network-controller@0.
|
|
62
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/multichain-network-controller@0.4.0...HEAD
|
|
63
|
+
[0.4.0]: https://github.com/MetaMask/core/compare/@metamask/multichain-network-controller@0.3.0...@metamask/multichain-network-controller@0.4.0
|
|
46
64
|
[0.3.0]: https://github.com/MetaMask/core/compare/@metamask/multichain-network-controller@0.2.0...@metamask/multichain-network-controller@0.3.0
|
|
47
65
|
[0.2.0]: https://github.com/MetaMask/core/compare/@metamask/multichain-network-controller@0.1.2...@metamask/multichain-network-controller@0.2.0
|
|
48
66
|
[0.1.2]: https://github.com/MetaMask/core/compare/@metamask/multichain-network-controller@0.1.1...@metamask/multichain-network-controller@0.1.2
|
|
@@ -26,6 +26,9 @@ class MultichainNetworkController extends base_controller_1.BaseController {
|
|
|
26
26
|
state: {
|
|
27
27
|
...(0, constants_1.getDefaultMultichainNetworkControllerState)(),
|
|
28
28
|
...state,
|
|
29
|
+
// We can keep the current network as a hardcoded value
|
|
30
|
+
// since it is not expected to add/remove networks yet.
|
|
31
|
+
multichainNetworkConfigurationsByChainId: constants_1.AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,
|
|
29
32
|
},
|
|
30
33
|
});
|
|
31
34
|
_MultichainNetworkController_instances.add(this);
|
|
@@ -57,10 +60,9 @@ class MultichainNetworkController extends base_controller_1.BaseController {
|
|
|
57
60
|
*/
|
|
58
61
|
async removeNetwork(chainId) {
|
|
59
62
|
if ((0, utils_2.isEvmCaipChainId)(chainId)) {
|
|
60
|
-
await __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeEvmNetwork).call(this, chainId);
|
|
61
|
-
return;
|
|
63
|
+
return await __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeEvmNetwork).call(this, chainId);
|
|
62
64
|
}
|
|
63
|
-
__classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeNonEvmNetwork).call(this, chainId);
|
|
65
|
+
return __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeNonEvmNetwork).call(this, chainId);
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
exports.MultichainNetworkController = MultichainNetworkController;
|
|
@@ -130,7 +132,7 @@ async function _MultichainNetworkController_removeEvmNetwork(chainId) {
|
|
|
130
132
|
}, _MultichainNetworkController_removeNonEvmNetwork = function _MultichainNetworkController_removeNonEvmNetwork(_chainId) {
|
|
131
133
|
throw new Error('Removal of non-EVM networks is not supported');
|
|
132
134
|
}, _MultichainNetworkController_handleOnSelectedAccountChange = function _MultichainNetworkController_handleOnSelectedAccountChange(account) {
|
|
133
|
-
const { type: accountType, address: accountAddress } = account;
|
|
135
|
+
const { type: accountType, address: accountAddress, scopes } = account;
|
|
134
136
|
const isEvmAccount = (0, keyring_api_1.isEvmAccountType)(accountType);
|
|
135
137
|
// Handle switching to EVM network
|
|
136
138
|
if (isEvmAccount) {
|
|
@@ -145,15 +147,14 @@ async function _MultichainNetworkController_removeEvmNetwork(chainId) {
|
|
|
145
147
|
return;
|
|
146
148
|
}
|
|
147
149
|
// Handle switching to non-EVM network
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
if (isSameNonEvmNetwork) {
|
|
151
|
-
// No need to update if already on the same non-EVM network
|
|
150
|
+
if (scopes.includes(this.state.selectedMultichainNetworkChainId)) {
|
|
151
|
+
// No need to update if the account's scope includes the active network
|
|
152
152
|
this.update((state) => {
|
|
153
153
|
state.isEvmSelected = false;
|
|
154
154
|
});
|
|
155
155
|
return;
|
|
156
156
|
}
|
|
157
|
+
const nonEvmChainId = (0, utils_2.getChainIdForNonEvmAddress)(accountAddress);
|
|
157
158
|
this.update((state) => {
|
|
158
159
|
state.selectedMultichainNetworkChainId = nonEvmChainId;
|
|
159
160
|
state.isEvmSelected = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultichainNetworkController.cjs","sourceRoot":"","sources":["../src/MultichainNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport { type CaipChainId, isCaipChainId } from '@metamask/utils';\n\nimport {\n MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n getDefaultMultichainNetworkControllerState,\n} from './constants';\nimport {\n MULTICHAIN_NETWORK_CONTROLLER_NAME,\n type MultichainNetworkControllerState,\n type MultichainNetworkControllerMessenger,\n type SupportedCaipChainId,\n} from './types';\nimport {\n checkIfSupportedCaipChainId,\n getChainIdForNonEvmAddress,\n convertEvmCaipToHexChainId,\n isEvmCaipChainId,\n} from './utils';\n\n/**\n * The MultichainNetworkController is responsible for fetching and caching account\n * balances.\n */\nexport class MultichainNetworkController extends BaseController<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerState,\n MultichainNetworkControllerMessenger\n> {\n constructor({\n messenger,\n state,\n }: {\n messenger: MultichainNetworkControllerMessenger;\n state?: Omit<\n Partial<MultichainNetworkControllerState>,\n 'multichainNetworkConfigurationsByChainId'\n >;\n }) {\n super({\n messenger,\n name: MULTICHAIN_NETWORK_CONTROLLER_NAME,\n metadata: MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n state: {\n ...getDefaultMultichainNetworkControllerState(),\n ...state,\n },\n });\n\n this.#subscribeToMessageEvents();\n this.#registerMessageHandlers();\n }\n\n /**\n * Sets the active EVM network.\n *\n * @param id - The client ID of the EVM network to set active.\n */\n async #setActiveEvmNetwork(id: NetworkClientId): Promise<void> {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n\n const shouldSetEvmActive = !this.state.isEvmSelected;\n const shouldNotifyNetworkChange = id !== selectedNetworkClientId;\n\n // No changes needed if EVM is active and network is already selected\n if (!shouldSetEvmActive && !shouldNotifyNetworkChange) {\n return;\n }\n\n // Update EVM selection state if needed\n if (shouldSetEvmActive) {\n this.update((state) => {\n state.isEvmSelected = true;\n });\n }\n\n // Only notify the network controller if the selected evm network is different\n if (shouldNotifyNetworkChange) {\n await this.messagingSystem.call('NetworkController:setActiveNetwork', id);\n }\n\n // Only publish the networkDidChange event if either the EVM network is different or we're switching between EVM and non-EVM networks\n if (shouldSetEvmActive || shouldNotifyNetworkChange) {\n this.messagingSystem.publish(\n 'MultichainNetworkController:networkDidChange',\n id,\n );\n }\n }\n\n /**\n * Sets the active non-EVM network.\n *\n * @param id - The chain ID of the non-EVM network to set active.\n */\n #setActiveNonEvmNetwork(id: SupportedCaipChainId): void {\n if (\n id === this.state.selectedMultichainNetworkChainId &&\n !this.state.isEvmSelected\n ) {\n // Same non-EVM network is already selected, no need to update\n return;\n }\n\n this.update((state) => {\n state.selectedMultichainNetworkChainId = id;\n state.isEvmSelected = false;\n });\n\n // Notify listeners that the network changed\n this.messagingSystem.publish(\n 'MultichainNetworkController:networkDidChange',\n id,\n );\n }\n\n /**\n * Sets the active network.\n *\n * @param id - The non-EVM Caip chain ID or EVM client ID of the network to set active.\n * @returns - A promise that resolves when the network is set active.\n */\n async setActiveNetwork(\n id: SupportedCaipChainId | NetworkClientId,\n ): Promise<void> {\n if (isCaipChainId(id)) {\n const isSupportedCaipChainId = checkIfSupportedCaipChainId(id);\n if (!isSupportedCaipChainId) {\n throw new Error(`Unsupported Caip chain ID: ${String(id)}`);\n }\n return this.#setActiveNonEvmNetwork(id);\n }\n\n return await this.#setActiveEvmNetwork(id);\n }\n\n /**\n * Removes an EVM network from the list of networks.\n * This method re-directs the request to the network-controller.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async #removeEvmNetwork(chainId: CaipChainId): Promise<void> {\n const hexChainId = convertEvmCaipToHexChainId(chainId);\n const selectedChainId = this.messagingSystem.call(\n 'NetworkController:getSelectedChainId',\n );\n\n if (selectedChainId === hexChainId) {\n // We prevent removing the currently selected network.\n if (this.state.isEvmSelected) {\n throw new Error('Cannot remove the currently selected network');\n }\n\n // If a non-EVM network is selected, we can delete the currently EVM selected network, but\n // we automatically switch to EVM mainnet.\n const ethereumMainnetHexChainId = '0x1'; // TODO: Should probably be a constant.\n const clientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n ethereumMainnetHexChainId,\n );\n\n await this.messagingSystem.call(\n 'NetworkController:setActiveNetwork',\n clientId,\n );\n }\n\n this.messagingSystem.call('NetworkController:removeNetwork', hexChainId);\n }\n\n #removeNonEvmNetwork(_chainId: CaipChainId): void {\n throw new Error('Removal of non-EVM networks is not supported');\n }\n\n /**\n * Removes a network from the list of networks.\n * It only supports EVM networks.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async removeNetwork(chainId: CaipChainId): Promise<void> {\n if (isEvmCaipChainId(chainId)) {\n await this.#removeEvmNetwork(chainId);\n return;\n }\n\n this.#removeNonEvmNetwork(chainId);\n }\n\n /**\n * Handles switching between EVM and non-EVM networks when an account is changed\n *\n * @param account - The account that was changed\n */\n #handleOnSelectedAccountChange(account: InternalAccount) {\n const { type: accountType, address: accountAddress } = account;\n const isEvmAccount = isEvmAccountType(accountType);\n\n // Handle switching to EVM network\n if (isEvmAccount) {\n if (this.state.isEvmSelected) {\n // No need to update if already on evm network\n return;\n }\n\n // Make EVM network active\n this.update((state) => {\n state.isEvmSelected = true;\n });\n\n return;\n }\n\n // Handle switching to non-EVM network\n const nonEvmChainId = getChainIdForNonEvmAddress(accountAddress);\n const isSameNonEvmNetwork =\n nonEvmChainId === this.state.selectedMultichainNetworkChainId;\n\n if (isSameNonEvmNetwork) {\n // No need to update if already on the same non-EVM network\n this.update((state) => {\n state.isEvmSelected = false;\n });\n return;\n }\n\n this.update((state) => {\n state.selectedMultichainNetworkChainId = nonEvmChainId;\n state.isEvmSelected = false;\n });\n\n // No need to publish NetworkController:setActiveNetwork because EVM accounts falls back to use the last selected EVM network\n // DO NOT publish MultichainNetworkController:networkDidChange to prevent circular listener loops\n }\n\n /**\n * Subscribes to message events.\n */\n #subscribeToMessageEvents() {\n // Handle network switch when account is changed\n this.messagingSystem.subscribe(\n 'AccountsController:selectedAccountChange',\n (account) => this.#handleOnSelectedAccountChange(account),\n );\n }\n\n /**\n * Registers message handlers.\n */\n #registerMessageHandlers() {\n this.messagingSystem.registerActionHandler(\n 'MultichainNetworkController:setActiveNetwork',\n this.setActiveNetwork.bind(this),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MultichainNetworkController.cjs","sourceRoot":"","sources":["../src/MultichainNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport { type CaipChainId, isCaipChainId } from '@metamask/utils';\n\nimport {\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n getDefaultMultichainNetworkControllerState,\n} from './constants';\nimport {\n MULTICHAIN_NETWORK_CONTROLLER_NAME,\n type MultichainNetworkControllerState,\n type MultichainNetworkControllerMessenger,\n type SupportedCaipChainId,\n} from './types';\nimport {\n checkIfSupportedCaipChainId,\n getChainIdForNonEvmAddress,\n convertEvmCaipToHexChainId,\n isEvmCaipChainId,\n} from './utils';\n\n/**\n * The MultichainNetworkController is responsible for fetching and caching account\n * balances.\n */\nexport class MultichainNetworkController extends BaseController<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerState,\n MultichainNetworkControllerMessenger\n> {\n constructor({\n messenger,\n state,\n }: {\n messenger: MultichainNetworkControllerMessenger;\n state?: Omit<\n Partial<MultichainNetworkControllerState>,\n 'multichainNetworkConfigurationsByChainId'\n >;\n }) {\n super({\n messenger,\n name: MULTICHAIN_NETWORK_CONTROLLER_NAME,\n metadata: MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n state: {\n ...getDefaultMultichainNetworkControllerState(),\n ...state,\n // We can keep the current network as a hardcoded value\n // since it is not expected to add/remove networks yet.\n multichainNetworkConfigurationsByChainId:\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n },\n });\n\n this.#subscribeToMessageEvents();\n this.#registerMessageHandlers();\n }\n\n /**\n * Sets the active EVM network.\n *\n * @param id - The client ID of the EVM network to set active.\n */\n async #setActiveEvmNetwork(id: NetworkClientId): Promise<void> {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n\n const shouldSetEvmActive = !this.state.isEvmSelected;\n const shouldNotifyNetworkChange = id !== selectedNetworkClientId;\n\n // No changes needed if EVM is active and network is already selected\n if (!shouldSetEvmActive && !shouldNotifyNetworkChange) {\n return;\n }\n\n // Update EVM selection state if needed\n if (shouldSetEvmActive) {\n this.update((state) => {\n state.isEvmSelected = true;\n });\n }\n\n // Only notify the network controller if the selected evm network is different\n if (shouldNotifyNetworkChange) {\n await this.messagingSystem.call('NetworkController:setActiveNetwork', id);\n }\n\n // Only publish the networkDidChange event if either the EVM network is different or we're switching between EVM and non-EVM networks\n if (shouldSetEvmActive || shouldNotifyNetworkChange) {\n this.messagingSystem.publish(\n 'MultichainNetworkController:networkDidChange',\n id,\n );\n }\n }\n\n /**\n * Sets the active non-EVM network.\n *\n * @param id - The chain ID of the non-EVM network to set active.\n */\n #setActiveNonEvmNetwork(id: SupportedCaipChainId): void {\n if (\n id === this.state.selectedMultichainNetworkChainId &&\n !this.state.isEvmSelected\n ) {\n // Same non-EVM network is already selected, no need to update\n return;\n }\n\n this.update((state) => {\n state.selectedMultichainNetworkChainId = id;\n state.isEvmSelected = false;\n });\n\n // Notify listeners that the network changed\n this.messagingSystem.publish(\n 'MultichainNetworkController:networkDidChange',\n id,\n );\n }\n\n /**\n * Sets the active network.\n *\n * @param id - The non-EVM Caip chain ID or EVM client ID of the network to set active.\n * @returns - A promise that resolves when the network is set active.\n */\n async setActiveNetwork(\n id: SupportedCaipChainId | NetworkClientId,\n ): Promise<void> {\n if (isCaipChainId(id)) {\n const isSupportedCaipChainId = checkIfSupportedCaipChainId(id);\n if (!isSupportedCaipChainId) {\n throw new Error(`Unsupported Caip chain ID: ${String(id)}`);\n }\n return this.#setActiveNonEvmNetwork(id);\n }\n\n return await this.#setActiveEvmNetwork(id);\n }\n\n /**\n * Removes an EVM network from the list of networks.\n * This method re-directs the request to the network-controller.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async #removeEvmNetwork(chainId: CaipChainId): Promise<void> {\n const hexChainId = convertEvmCaipToHexChainId(chainId);\n const selectedChainId = this.messagingSystem.call(\n 'NetworkController:getSelectedChainId',\n );\n\n if (selectedChainId === hexChainId) {\n // We prevent removing the currently selected network.\n if (this.state.isEvmSelected) {\n throw new Error('Cannot remove the currently selected network');\n }\n\n // If a non-EVM network is selected, we can delete the currently EVM selected network, but\n // we automatically switch to EVM mainnet.\n const ethereumMainnetHexChainId = '0x1'; // TODO: Should probably be a constant.\n const clientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n ethereumMainnetHexChainId,\n );\n\n await this.messagingSystem.call(\n 'NetworkController:setActiveNetwork',\n clientId,\n );\n }\n\n this.messagingSystem.call('NetworkController:removeNetwork', hexChainId);\n }\n\n /**\n * Removes a non-EVM network from the list of networks.\n * This method is not supported and throws an error.\n *\n * @param _chainId - The chain ID of the network to remove.\n * @throws - An error indicating that removal of non-EVM networks is not supported.\n */\n #removeNonEvmNetwork(_chainId: CaipChainId): void {\n throw new Error('Removal of non-EVM networks is not supported');\n }\n\n /**\n * Removes a network from the list of networks.\n * It only supports EVM networks.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async removeNetwork(chainId: CaipChainId): Promise<void> {\n if (isEvmCaipChainId(chainId)) {\n return await this.#removeEvmNetwork(chainId);\n }\n\n return this.#removeNonEvmNetwork(chainId);\n }\n\n /**\n * Handles switching between EVM and non-EVM networks when an account is changed\n *\n * @param account - The account that was changed\n */\n #handleOnSelectedAccountChange(account: InternalAccount) {\n const { type: accountType, address: accountAddress, scopes } = account;\n const isEvmAccount = isEvmAccountType(accountType);\n\n // Handle switching to EVM network\n if (isEvmAccount) {\n if (this.state.isEvmSelected) {\n // No need to update if already on evm network\n return;\n }\n\n // Make EVM network active\n this.update((state) => {\n state.isEvmSelected = true;\n });\n\n return;\n }\n\n // Handle switching to non-EVM network\n if (scopes.includes(this.state.selectedMultichainNetworkChainId)) {\n // No need to update if the account's scope includes the active network\n this.update((state) => {\n state.isEvmSelected = false;\n });\n return;\n }\n\n const nonEvmChainId = getChainIdForNonEvmAddress(accountAddress);\n this.update((state) => {\n state.selectedMultichainNetworkChainId = nonEvmChainId;\n state.isEvmSelected = false;\n });\n\n // No need to publish NetworkController:setActiveNetwork because EVM accounts falls back to use the last selected EVM network\n // DO NOT publish MultichainNetworkController:networkDidChange to prevent circular listener loops\n }\n\n /**\n * Subscribes to message events.\n */\n #subscribeToMessageEvents() {\n // Handle network switch when account is changed\n this.messagingSystem.subscribe(\n 'AccountsController:selectedAccountChange',\n (account) => this.#handleOnSelectedAccountChange(account),\n );\n }\n\n /**\n * Registers message handlers.\n */\n #registerMessageHandlers() {\n this.messagingSystem.registerActionHandler(\n 'MultichainNetworkController:setActiveNetwork',\n this.setActiveNetwork.bind(this),\n );\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultichainNetworkController.d.cts","sourceRoot":"","sources":["../src/MultichainNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAG3D,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,EAAE,KAAK,WAAW,EAAiB,wBAAwB;
|
|
1
|
+
{"version":3,"file":"MultichainNetworkController.d.cts","sourceRoot":"","sources":["../src/MultichainNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAG3D,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,EAAE,KAAK,WAAW,EAAiB,wBAAwB;AAOlE,OAAO,EACL,kCAAkC,EAClC,KAAK,gCAAgC,EACrC,KAAK,oCAAoC,EACzC,KAAK,oBAAoB,EAC1B,oBAAgB;AAQjB;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,cAAc,CAC7D,OAAO,kCAAkC,EACzC,gCAAgC,EAChC,oCAAoC,CACrC;;gBACa,EACV,SAAS,EACT,KAAK,GACN,EAAE;QACD,SAAS,EAAE,oCAAoC,CAAC;QAChD,KAAK,CAAC,EAAE,IAAI,CACV,OAAO,CAAC,gCAAgC,CAAC,EACzC,0CAA0C,CAC3C,CAAC;KACH;IAoFD;;;;;OAKG;IACG,gBAAgB,CACpB,EAAE,EAAE,oBAAoB,GAAG,eAAe,GACzC,OAAO,CAAC,IAAI,CAAC;IA2DhB;;;;;;OAMG;IACG,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAuEzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultichainNetworkController.d.mts","sourceRoot":"","sources":["../src/MultichainNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAG3D,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,EAAE,KAAK,WAAW,EAAiB,wBAAwB;
|
|
1
|
+
{"version":3,"file":"MultichainNetworkController.d.mts","sourceRoot":"","sources":["../src/MultichainNetworkController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAG3D,OAAO,KAAK,EAAE,eAAe,EAAE,qCAAqC;AACpE,OAAO,EAAE,KAAK,WAAW,EAAiB,wBAAwB;AAOlE,OAAO,EACL,kCAAkC,EAClC,KAAK,gCAAgC,EACrC,KAAK,oCAAoC,EACzC,KAAK,oBAAoB,EAC1B,oBAAgB;AAQjB;;;GAGG;AACH,qBAAa,2BAA4B,SAAQ,cAAc,CAC7D,OAAO,kCAAkC,EACzC,gCAAgC,EAChC,oCAAoC,CACrC;;gBACa,EACV,SAAS,EACT,KAAK,GACN,EAAE;QACD,SAAS,EAAE,oCAAoC,CAAC;QAChD,KAAK,CAAC,EAAE,IAAI,CACV,OAAO,CAAC,gCAAgC,CAAC,EACzC,0CAA0C,CAC3C,CAAC;KACH;IAoFD;;;;;OAKG;IACG,gBAAgB,CACpB,EAAE,EAAE,oBAAoB,GAAG,eAAe,GACzC,OAAO,CAAC,IAAI,CAAC;IA2DhB;;;;;;OAMG;IACG,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAuEzD"}
|
|
@@ -7,7 +7,7 @@ var _MultichainNetworkController_instances, _MultichainNetworkController_setActi
|
|
|
7
7
|
import { BaseController } from "@metamask/base-controller";
|
|
8
8
|
import { isEvmAccountType } from "@metamask/keyring-api";
|
|
9
9
|
import { isCaipChainId } from "@metamask/utils";
|
|
10
|
-
import { MULTICHAIN_NETWORK_CONTROLLER_METADATA, getDefaultMultichainNetworkControllerState } from "./constants.mjs";
|
|
10
|
+
import { AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS, MULTICHAIN_NETWORK_CONTROLLER_METADATA, getDefaultMultichainNetworkControllerState } from "./constants.mjs";
|
|
11
11
|
import { MULTICHAIN_NETWORK_CONTROLLER_NAME } from "./types.mjs";
|
|
12
12
|
import { checkIfSupportedCaipChainId, getChainIdForNonEvmAddress, convertEvmCaipToHexChainId, isEvmCaipChainId } from "./utils.mjs";
|
|
13
13
|
/**
|
|
@@ -23,6 +23,9 @@ export class MultichainNetworkController extends BaseController {
|
|
|
23
23
|
state: {
|
|
24
24
|
...getDefaultMultichainNetworkControllerState(),
|
|
25
25
|
...state,
|
|
26
|
+
// We can keep the current network as a hardcoded value
|
|
27
|
+
// since it is not expected to add/remove networks yet.
|
|
28
|
+
multichainNetworkConfigurationsByChainId: AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,
|
|
26
29
|
},
|
|
27
30
|
});
|
|
28
31
|
_MultichainNetworkController_instances.add(this);
|
|
@@ -54,10 +57,9 @@ export class MultichainNetworkController extends BaseController {
|
|
|
54
57
|
*/
|
|
55
58
|
async removeNetwork(chainId) {
|
|
56
59
|
if (isEvmCaipChainId(chainId)) {
|
|
57
|
-
await __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeEvmNetwork).call(this, chainId);
|
|
58
|
-
return;
|
|
60
|
+
return await __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeEvmNetwork).call(this, chainId);
|
|
59
61
|
}
|
|
60
|
-
__classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeNonEvmNetwork).call(this, chainId);
|
|
62
|
+
return __classPrivateFieldGet(this, _MultichainNetworkController_instances, "m", _MultichainNetworkController_removeNonEvmNetwork).call(this, chainId);
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
_MultichainNetworkController_instances = new WeakSet(), _MultichainNetworkController_setActiveEvmNetwork =
|
|
@@ -126,7 +128,7 @@ async function _MultichainNetworkController_removeEvmNetwork(chainId) {
|
|
|
126
128
|
}, _MultichainNetworkController_removeNonEvmNetwork = function _MultichainNetworkController_removeNonEvmNetwork(_chainId) {
|
|
127
129
|
throw new Error('Removal of non-EVM networks is not supported');
|
|
128
130
|
}, _MultichainNetworkController_handleOnSelectedAccountChange = function _MultichainNetworkController_handleOnSelectedAccountChange(account) {
|
|
129
|
-
const { type: accountType, address: accountAddress } = account;
|
|
131
|
+
const { type: accountType, address: accountAddress, scopes } = account;
|
|
130
132
|
const isEvmAccount = isEvmAccountType(accountType);
|
|
131
133
|
// Handle switching to EVM network
|
|
132
134
|
if (isEvmAccount) {
|
|
@@ -141,15 +143,14 @@ async function _MultichainNetworkController_removeEvmNetwork(chainId) {
|
|
|
141
143
|
return;
|
|
142
144
|
}
|
|
143
145
|
// Handle switching to non-EVM network
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
if (isSameNonEvmNetwork) {
|
|
147
|
-
// No need to update if already on the same non-EVM network
|
|
146
|
+
if (scopes.includes(this.state.selectedMultichainNetworkChainId)) {
|
|
147
|
+
// No need to update if the account's scope includes the active network
|
|
148
148
|
this.update((state) => {
|
|
149
149
|
state.isEvmSelected = false;
|
|
150
150
|
});
|
|
151
151
|
return;
|
|
152
152
|
}
|
|
153
|
+
const nonEvmChainId = getChainIdForNonEvmAddress(accountAddress);
|
|
153
154
|
this.update((state) => {
|
|
154
155
|
state.selectedMultichainNetworkChainId = nonEvmChainId;
|
|
155
156
|
state.isEvmSelected = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultichainNetworkController.mjs","sourceRoot":"","sources":["../src/MultichainNetworkController.ts"],"names":[],"mappings":"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","sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport { type CaipChainId, isCaipChainId } from '@metamask/utils';\n\nimport {\n MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n getDefaultMultichainNetworkControllerState,\n} from './constants';\nimport {\n MULTICHAIN_NETWORK_CONTROLLER_NAME,\n type MultichainNetworkControllerState,\n type MultichainNetworkControllerMessenger,\n type SupportedCaipChainId,\n} from './types';\nimport {\n checkIfSupportedCaipChainId,\n getChainIdForNonEvmAddress,\n convertEvmCaipToHexChainId,\n isEvmCaipChainId,\n} from './utils';\n\n/**\n * The MultichainNetworkController is responsible for fetching and caching account\n * balances.\n */\nexport class MultichainNetworkController extends BaseController<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerState,\n MultichainNetworkControllerMessenger\n> {\n constructor({\n messenger,\n state,\n }: {\n messenger: MultichainNetworkControllerMessenger;\n state?: Omit<\n Partial<MultichainNetworkControllerState>,\n 'multichainNetworkConfigurationsByChainId'\n >;\n }) {\n super({\n messenger,\n name: MULTICHAIN_NETWORK_CONTROLLER_NAME,\n metadata: MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n state: {\n ...getDefaultMultichainNetworkControllerState(),\n ...state,\n },\n });\n\n this.#subscribeToMessageEvents();\n this.#registerMessageHandlers();\n }\n\n /**\n * Sets the active EVM network.\n *\n * @param id - The client ID of the EVM network to set active.\n */\n async #setActiveEvmNetwork(id: NetworkClientId): Promise<void> {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n\n const shouldSetEvmActive = !this.state.isEvmSelected;\n const shouldNotifyNetworkChange = id !== selectedNetworkClientId;\n\n // No changes needed if EVM is active and network is already selected\n if (!shouldSetEvmActive && !shouldNotifyNetworkChange) {\n return;\n }\n\n // Update EVM selection state if needed\n if (shouldSetEvmActive) {\n this.update((state) => {\n state.isEvmSelected = true;\n });\n }\n\n // Only notify the network controller if the selected evm network is different\n if (shouldNotifyNetworkChange) {\n await this.messagingSystem.call('NetworkController:setActiveNetwork', id);\n }\n\n // Only publish the networkDidChange event if either the EVM network is different or we're switching between EVM and non-EVM networks\n if (shouldSetEvmActive || shouldNotifyNetworkChange) {\n this.messagingSystem.publish(\n 'MultichainNetworkController:networkDidChange',\n id,\n );\n }\n }\n\n /**\n * Sets the active non-EVM network.\n *\n * @param id - The chain ID of the non-EVM network to set active.\n */\n #setActiveNonEvmNetwork(id: SupportedCaipChainId): void {\n if (\n id === this.state.selectedMultichainNetworkChainId &&\n !this.state.isEvmSelected\n ) {\n // Same non-EVM network is already selected, no need to update\n return;\n }\n\n this.update((state) => {\n state.selectedMultichainNetworkChainId = id;\n state.isEvmSelected = false;\n });\n\n // Notify listeners that the network changed\n this.messagingSystem.publish(\n 'MultichainNetworkController:networkDidChange',\n id,\n );\n }\n\n /**\n * Sets the active network.\n *\n * @param id - The non-EVM Caip chain ID or EVM client ID of the network to set active.\n * @returns - A promise that resolves when the network is set active.\n */\n async setActiveNetwork(\n id: SupportedCaipChainId | NetworkClientId,\n ): Promise<void> {\n if (isCaipChainId(id)) {\n const isSupportedCaipChainId = checkIfSupportedCaipChainId(id);\n if (!isSupportedCaipChainId) {\n throw new Error(`Unsupported Caip chain ID: ${String(id)}`);\n }\n return this.#setActiveNonEvmNetwork(id);\n }\n\n return await this.#setActiveEvmNetwork(id);\n }\n\n /**\n * Removes an EVM network from the list of networks.\n * This method re-directs the request to the network-controller.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async #removeEvmNetwork(chainId: CaipChainId): Promise<void> {\n const hexChainId = convertEvmCaipToHexChainId(chainId);\n const selectedChainId = this.messagingSystem.call(\n 'NetworkController:getSelectedChainId',\n );\n\n if (selectedChainId === hexChainId) {\n // We prevent removing the currently selected network.\n if (this.state.isEvmSelected) {\n throw new Error('Cannot remove the currently selected network');\n }\n\n // If a non-EVM network is selected, we can delete the currently EVM selected network, but\n // we automatically switch to EVM mainnet.\n const ethereumMainnetHexChainId = '0x1'; // TODO: Should probably be a constant.\n const clientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n ethereumMainnetHexChainId,\n );\n\n await this.messagingSystem.call(\n 'NetworkController:setActiveNetwork',\n clientId,\n );\n }\n\n this.messagingSystem.call('NetworkController:removeNetwork', hexChainId);\n }\n\n #removeNonEvmNetwork(_chainId: CaipChainId): void {\n throw new Error('Removal of non-EVM networks is not supported');\n }\n\n /**\n * Removes a network from the list of networks.\n * It only supports EVM networks.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async removeNetwork(chainId: CaipChainId): Promise<void> {\n if (isEvmCaipChainId(chainId)) {\n await this.#removeEvmNetwork(chainId);\n return;\n }\n\n this.#removeNonEvmNetwork(chainId);\n }\n\n /**\n * Handles switching between EVM and non-EVM networks when an account is changed\n *\n * @param account - The account that was changed\n */\n #handleOnSelectedAccountChange(account: InternalAccount) {\n const { type: accountType, address: accountAddress } = account;\n const isEvmAccount = isEvmAccountType(accountType);\n\n // Handle switching to EVM network\n if (isEvmAccount) {\n if (this.state.isEvmSelected) {\n // No need to update if already on evm network\n return;\n }\n\n // Make EVM network active\n this.update((state) => {\n state.isEvmSelected = true;\n });\n\n return;\n }\n\n // Handle switching to non-EVM network\n const nonEvmChainId = getChainIdForNonEvmAddress(accountAddress);\n const isSameNonEvmNetwork =\n nonEvmChainId === this.state.selectedMultichainNetworkChainId;\n\n if (isSameNonEvmNetwork) {\n // No need to update if already on the same non-EVM network\n this.update((state) => {\n state.isEvmSelected = false;\n });\n return;\n }\n\n this.update((state) => {\n state.selectedMultichainNetworkChainId = nonEvmChainId;\n state.isEvmSelected = false;\n });\n\n // No need to publish NetworkController:setActiveNetwork because EVM accounts falls back to use the last selected EVM network\n // DO NOT publish MultichainNetworkController:networkDidChange to prevent circular listener loops\n }\n\n /**\n * Subscribes to message events.\n */\n #subscribeToMessageEvents() {\n // Handle network switch when account is changed\n this.messagingSystem.subscribe(\n 'AccountsController:selectedAccountChange',\n (account) => this.#handleOnSelectedAccountChange(account),\n );\n }\n\n /**\n * Registers message handlers.\n */\n #registerMessageHandlers() {\n this.messagingSystem.registerActionHandler(\n 'MultichainNetworkController:setActiveNetwork',\n this.setActiveNetwork.bind(this),\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MultichainNetworkController.mjs","sourceRoot":"","sources":["../src/MultichainNetworkController.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,cAAc,EAAE,kCAAkC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,8BAA8B;AAGzD,OAAO,EAAoB,aAAa,EAAE,wBAAwB;AAElE,OAAO,EACL,2CAA2C,EAC3C,sCAAsC,EACtC,0CAA0C,EAC3C,wBAAoB;AACrB,OAAO,EACL,kCAAkC,EAInC,oBAAgB;AACjB,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EACjB,oBAAgB;AAEjB;;;GAGG;AACH,MAAM,OAAO,2BAA4B,SAAQ,cAIhD;IACC,YAAY,EACV,SAAS,EACT,KAAK,GAON;QACC,KAAK,CAAC;YACJ,SAAS;YACT,IAAI,EAAE,kCAAkC;YACxC,QAAQ,EAAE,sCAAsC;YAChD,KAAK,EAAE;gBACL,GAAG,0CAA0C,EAAE;gBAC/C,GAAG,KAAK;gBACR,uDAAuD;gBACvD,uDAAuD;gBACvD,wCAAwC,EACtC,2CAA2C;aAC9C;SACF,CAAC,CAAC;;QAEH,uBAAA,IAAI,qGAA0B,MAA9B,IAAI,CAA4B,CAAC;QACjC,uBAAA,IAAI,oGAAyB,MAA7B,IAAI,CAA2B,CAAC;IAClC,CAAC;IAmED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CACpB,EAA0C;QAE1C,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE;YACrB,MAAM,sBAAsB,GAAG,2BAA2B,CAAC,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,sBAAsB,EAAE;gBAC3B,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aAC7D;YACD,OAAO,uBAAA,IAAI,mGAAwB,MAA5B,IAAI,EAAyB,EAAE,CAAC,CAAC;SACzC;QAED,OAAO,MAAM,uBAAA,IAAI,gGAAqB,MAAzB,IAAI,EAAsB,EAAE,CAAC,CAAC;IAC7C,CAAC;IAiDD;;;;;;OAMG;IACH,KAAK,CAAC,aAAa,CAAC,OAAoB;QACtC,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE;YAC7B,OAAO,MAAM,uBAAA,IAAI,6FAAkB,MAAtB,IAAI,EAAmB,OAAO,CAAC,CAAC;SAC9C;QAED,OAAO,uBAAA,IAAI,gGAAqB,MAAzB,IAAI,EAAsB,OAAO,CAAC,CAAC;IAC5C,CAAC;CAiEF;;AAlNC;;;;GAIG;AACH,KAAK,2DAAsB,EAAmB;IAC5C,MAAM,EAAE,uBAAuB,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAC3D,4BAA4B,CAC7B,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;IACrD,MAAM,yBAAyB,GAAG,EAAE,KAAK,uBAAuB,CAAC;IAEjE,qEAAqE;IACrE,IAAI,CAAC,kBAAkB,IAAI,CAAC,yBAAyB,EAAE;QACrD,OAAO;KACR;IAED,uCAAuC;IACvC,IAAI,kBAAkB,EAAE;QACtB,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;KACJ;IAED,8EAA8E;IAC9E,IAAI,yBAAyB,EAAE;QAC7B,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;KAC3E;IAED,qIAAqI;IACrI,IAAI,kBAAkB,IAAI,yBAAyB,EAAE;QACnD,IAAI,CAAC,eAAe,CAAC,OAAO,CAC1B,8CAA8C,EAC9C,EAAE,CACH,CAAC;KACH;AACH,CAAC,qHAOuB,EAAwB;IAC9C,IACE,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,gCAAgC;QAClD,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EACzB;QACA,8DAA8D;QAC9D,OAAO;KACR;IAED,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACpB,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC;QAC5C,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,IAAI,CAAC,eAAe,CAAC,OAAO,CAC1B,8CAA8C,EAC9C,EAAE,CACH,CAAC;AACJ,CAAC;AAsBD;;;;;;GAMG;AACH,KAAK,wDAAmB,OAAoB;IAC1C,MAAM,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAC/C,sCAAsC,CACvC,CAAC;IAEF,IAAI,eAAe,KAAK,UAAU,EAAE;QAClC,sDAAsD;QACtD,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC5B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;SACjE;QAED,0FAA0F;QAC1F,0CAA0C;QAC1C,MAAM,yBAAyB,GAAG,KAAK,CAAC,CAAC,uCAAuC;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACxC,gDAAgD,EAChD,yBAAyB,CAC1B,CAAC;QAEF,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAC7B,oCAAoC,EACpC,QAAQ,CACT,CAAC;KACH;IAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iCAAiC,EAAE,UAAU,CAAC,CAAC;AAC3E,CAAC,+GASoB,QAAqB;IACxC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AAClE,CAAC,mIAsB8B,OAAwB;IACrD,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACvE,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEnD,kCAAkC;IAClC,IAAI,YAAY,EAAE;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC5B,8CAA8C;YAC9C,OAAO;SACR;QAED,0BAA0B;QAC1B,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,OAAO;KACR;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,EAAE;QAChE,uEAAuE;QACvE,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;QAC9B,CAAC,CAAC,CAAC;QACH,OAAO;KACR;IAED,MAAM,aAAa,GAAG,0BAA0B,CAAC,cAAc,CAAC,CAAC;IACjE,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QACpB,KAAK,CAAC,gCAAgC,GAAG,aAAa,CAAC;QACvD,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,6HAA6H;IAC7H,iGAAiG;AACnG,CAAC;IAMC,gDAAgD;IAChD,IAAI,CAAC,eAAe,CAAC,SAAS,CAC5B,0CAA0C,EAC1C,CAAC,OAAO,EAAE,EAAE,CAAC,uBAAA,IAAI,0GAA+B,MAAnC,IAAI,EAAgC,OAAO,CAAC,CAC1D,CAAC;AACJ,CAAC;IAMC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CACxC,8CAA8C,EAC9C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAC;AACJ,CAAC","sourcesContent":["import { BaseController } from '@metamask/base-controller';\nimport { isEvmAccountType } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport { type CaipChainId, isCaipChainId } from '@metamask/utils';\n\nimport {\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n getDefaultMultichainNetworkControllerState,\n} from './constants';\nimport {\n MULTICHAIN_NETWORK_CONTROLLER_NAME,\n type MultichainNetworkControllerState,\n type MultichainNetworkControllerMessenger,\n type SupportedCaipChainId,\n} from './types';\nimport {\n checkIfSupportedCaipChainId,\n getChainIdForNonEvmAddress,\n convertEvmCaipToHexChainId,\n isEvmCaipChainId,\n} from './utils';\n\n/**\n * The MultichainNetworkController is responsible for fetching and caching account\n * balances.\n */\nexport class MultichainNetworkController extends BaseController<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerState,\n MultichainNetworkControllerMessenger\n> {\n constructor({\n messenger,\n state,\n }: {\n messenger: MultichainNetworkControllerMessenger;\n state?: Omit<\n Partial<MultichainNetworkControllerState>,\n 'multichainNetworkConfigurationsByChainId'\n >;\n }) {\n super({\n messenger,\n name: MULTICHAIN_NETWORK_CONTROLLER_NAME,\n metadata: MULTICHAIN_NETWORK_CONTROLLER_METADATA,\n state: {\n ...getDefaultMultichainNetworkControllerState(),\n ...state,\n // We can keep the current network as a hardcoded value\n // since it is not expected to add/remove networks yet.\n multichainNetworkConfigurationsByChainId:\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n },\n });\n\n this.#subscribeToMessageEvents();\n this.#registerMessageHandlers();\n }\n\n /**\n * Sets the active EVM network.\n *\n * @param id - The client ID of the EVM network to set active.\n */\n async #setActiveEvmNetwork(id: NetworkClientId): Promise<void> {\n const { selectedNetworkClientId } = this.messagingSystem.call(\n 'NetworkController:getState',\n );\n\n const shouldSetEvmActive = !this.state.isEvmSelected;\n const shouldNotifyNetworkChange = id !== selectedNetworkClientId;\n\n // No changes needed if EVM is active and network is already selected\n if (!shouldSetEvmActive && !shouldNotifyNetworkChange) {\n return;\n }\n\n // Update EVM selection state if needed\n if (shouldSetEvmActive) {\n this.update((state) => {\n state.isEvmSelected = true;\n });\n }\n\n // Only notify the network controller if the selected evm network is different\n if (shouldNotifyNetworkChange) {\n await this.messagingSystem.call('NetworkController:setActiveNetwork', id);\n }\n\n // Only publish the networkDidChange event if either the EVM network is different or we're switching between EVM and non-EVM networks\n if (shouldSetEvmActive || shouldNotifyNetworkChange) {\n this.messagingSystem.publish(\n 'MultichainNetworkController:networkDidChange',\n id,\n );\n }\n }\n\n /**\n * Sets the active non-EVM network.\n *\n * @param id - The chain ID of the non-EVM network to set active.\n */\n #setActiveNonEvmNetwork(id: SupportedCaipChainId): void {\n if (\n id === this.state.selectedMultichainNetworkChainId &&\n !this.state.isEvmSelected\n ) {\n // Same non-EVM network is already selected, no need to update\n return;\n }\n\n this.update((state) => {\n state.selectedMultichainNetworkChainId = id;\n state.isEvmSelected = false;\n });\n\n // Notify listeners that the network changed\n this.messagingSystem.publish(\n 'MultichainNetworkController:networkDidChange',\n id,\n );\n }\n\n /**\n * Sets the active network.\n *\n * @param id - The non-EVM Caip chain ID or EVM client ID of the network to set active.\n * @returns - A promise that resolves when the network is set active.\n */\n async setActiveNetwork(\n id: SupportedCaipChainId | NetworkClientId,\n ): Promise<void> {\n if (isCaipChainId(id)) {\n const isSupportedCaipChainId = checkIfSupportedCaipChainId(id);\n if (!isSupportedCaipChainId) {\n throw new Error(`Unsupported Caip chain ID: ${String(id)}`);\n }\n return this.#setActiveNonEvmNetwork(id);\n }\n\n return await this.#setActiveEvmNetwork(id);\n }\n\n /**\n * Removes an EVM network from the list of networks.\n * This method re-directs the request to the network-controller.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async #removeEvmNetwork(chainId: CaipChainId): Promise<void> {\n const hexChainId = convertEvmCaipToHexChainId(chainId);\n const selectedChainId = this.messagingSystem.call(\n 'NetworkController:getSelectedChainId',\n );\n\n if (selectedChainId === hexChainId) {\n // We prevent removing the currently selected network.\n if (this.state.isEvmSelected) {\n throw new Error('Cannot remove the currently selected network');\n }\n\n // If a non-EVM network is selected, we can delete the currently EVM selected network, but\n // we automatically switch to EVM mainnet.\n const ethereumMainnetHexChainId = '0x1'; // TODO: Should probably be a constant.\n const clientId = this.messagingSystem.call(\n 'NetworkController:findNetworkClientIdByChainId',\n ethereumMainnetHexChainId,\n );\n\n await this.messagingSystem.call(\n 'NetworkController:setActiveNetwork',\n clientId,\n );\n }\n\n this.messagingSystem.call('NetworkController:removeNetwork', hexChainId);\n }\n\n /**\n * Removes a non-EVM network from the list of networks.\n * This method is not supported and throws an error.\n *\n * @param _chainId - The chain ID of the network to remove.\n * @throws - An error indicating that removal of non-EVM networks is not supported.\n */\n #removeNonEvmNetwork(_chainId: CaipChainId): void {\n throw new Error('Removal of non-EVM networks is not supported');\n }\n\n /**\n * Removes a network from the list of networks.\n * It only supports EVM networks.\n *\n * @param chainId - The chain ID of the network to remove.\n * @returns - A promise that resolves when the network is removed.\n */\n async removeNetwork(chainId: CaipChainId): Promise<void> {\n if (isEvmCaipChainId(chainId)) {\n return await this.#removeEvmNetwork(chainId);\n }\n\n return this.#removeNonEvmNetwork(chainId);\n }\n\n /**\n * Handles switching between EVM and non-EVM networks when an account is changed\n *\n * @param account - The account that was changed\n */\n #handleOnSelectedAccountChange(account: InternalAccount) {\n const { type: accountType, address: accountAddress, scopes } = account;\n const isEvmAccount = isEvmAccountType(accountType);\n\n // Handle switching to EVM network\n if (isEvmAccount) {\n if (this.state.isEvmSelected) {\n // No need to update if already on evm network\n return;\n }\n\n // Make EVM network active\n this.update((state) => {\n state.isEvmSelected = true;\n });\n\n return;\n }\n\n // Handle switching to non-EVM network\n if (scopes.includes(this.state.selectedMultichainNetworkChainId)) {\n // No need to update if the account's scope includes the active network\n this.update((state) => {\n state.isEvmSelected = false;\n });\n return;\n }\n\n const nonEvmChainId = getChainIdForNonEvmAddress(accountAddress);\n this.update((state) => {\n state.selectedMultichainNetworkChainId = nonEvmChainId;\n state.isEvmSelected = false;\n });\n\n // No need to publish NetworkController:setActiveNetwork because EVM accounts falls back to use the last selected EVM network\n // DO NOT publish MultichainNetworkController:networkDidChange to prevent circular listener loops\n }\n\n /**\n * Subscribes to message events.\n */\n #subscribeToMessageEvents() {\n // Handle network switch when account is changed\n this.messagingSystem.subscribe(\n 'AccountsController:selectedAccountChange',\n (account) => this.#handleOnSelectedAccountChange(account),\n );\n }\n\n /**\n * Registers message handlers.\n */\n #registerMessageHandlers() {\n this.messagingSystem.registerActionHandler(\n 'MultichainNetworkController:setActiveNetwork',\n this.setActiveNetwork.bind(this),\n );\n }\n}\n"]}
|
package/dist/constants.cjs
CHANGED
|
@@ -1,27 +1,66 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MULTICHAIN_NETWORK_CONTROLLER_METADATA = exports.getDefaultMultichainNetworkControllerState = exports.NETWORKS_METADATA = exports.AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS = exports.SOL_NATIVE_ASSET = exports.BTC_NATIVE_ASSET = void 0;
|
|
3
|
+
exports.MULTICHAIN_NETWORK_DECIMAL_PLACES = exports.MULTICHAIN_NETWORK_TICKER = exports.MULTICHAIN_NETWORK_CONTROLLER_METADATA = exports.getDefaultMultichainNetworkControllerState = exports.NETWORKS_METADATA = exports.NON_EVM_TESTNET_IDS = exports.AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS = exports.SOL_DEVNET_NATIVE_ASSET = exports.SOL_TESTNET_NATIVE_ASSET = exports.SOL_NATIVE_ASSET = exports.BTC_SIGNET_NATIVE_ASSET = exports.BTC_TESTNET_NATIVE_ASSET = exports.BTC_NATIVE_ASSET = void 0;
|
|
4
4
|
const keyring_api_1 = require("@metamask/keyring-api");
|
|
5
5
|
const network_controller_1 = require("@metamask/network-controller");
|
|
6
6
|
exports.BTC_NATIVE_ASSET = `${keyring_api_1.BtcScope.Mainnet}/slip44:0`;
|
|
7
|
-
exports.
|
|
7
|
+
exports.BTC_TESTNET_NATIVE_ASSET = `${keyring_api_1.BtcScope.Testnet}/slip44:0`;
|
|
8
|
+
exports.BTC_SIGNET_NATIVE_ASSET = `${keyring_api_1.BtcScope.Signet}/slip44:0`;
|
|
9
|
+
exports.SOL_NATIVE_ASSET = `${keyring_api_1.SolScope.Mainnet}/slip44:501`;
|
|
10
|
+
exports.SOL_TESTNET_NATIVE_ASSET = `${keyring_api_1.SolScope.Testnet}/slip44:501`;
|
|
11
|
+
exports.SOL_DEVNET_NATIVE_ASSET = `${keyring_api_1.SolScope.Devnet}/slip44:501`;
|
|
8
12
|
/**
|
|
9
13
|
* Supported networks by the MultichainNetworkController
|
|
10
14
|
*/
|
|
11
15
|
exports.AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS = {
|
|
12
16
|
[keyring_api_1.BtcScope.Mainnet]: {
|
|
13
17
|
chainId: keyring_api_1.BtcScope.Mainnet,
|
|
14
|
-
name: 'Bitcoin
|
|
18
|
+
name: 'Bitcoin',
|
|
15
19
|
nativeCurrency: exports.BTC_NATIVE_ASSET,
|
|
16
20
|
isEvm: false,
|
|
17
21
|
},
|
|
22
|
+
[keyring_api_1.BtcScope.Testnet]: {
|
|
23
|
+
chainId: keyring_api_1.BtcScope.Testnet,
|
|
24
|
+
name: 'Bitcoin Testnet',
|
|
25
|
+
nativeCurrency: exports.BTC_TESTNET_NATIVE_ASSET,
|
|
26
|
+
isEvm: false,
|
|
27
|
+
},
|
|
28
|
+
[keyring_api_1.BtcScope.Signet]: {
|
|
29
|
+
chainId: keyring_api_1.BtcScope.Signet,
|
|
30
|
+
name: 'Bitcoin Signet',
|
|
31
|
+
nativeCurrency: exports.BTC_SIGNET_NATIVE_ASSET,
|
|
32
|
+
isEvm: false,
|
|
33
|
+
},
|
|
18
34
|
[keyring_api_1.SolScope.Mainnet]: {
|
|
19
35
|
chainId: keyring_api_1.SolScope.Mainnet,
|
|
20
|
-
name: 'Solana
|
|
36
|
+
name: 'Solana',
|
|
21
37
|
nativeCurrency: exports.SOL_NATIVE_ASSET,
|
|
22
38
|
isEvm: false,
|
|
23
39
|
},
|
|
40
|
+
[keyring_api_1.SolScope.Testnet]: {
|
|
41
|
+
chainId: keyring_api_1.SolScope.Testnet,
|
|
42
|
+
name: 'Solana Testnet',
|
|
43
|
+
nativeCurrency: exports.SOL_TESTNET_NATIVE_ASSET,
|
|
44
|
+
isEvm: false,
|
|
45
|
+
},
|
|
46
|
+
[keyring_api_1.SolScope.Devnet]: {
|
|
47
|
+
chainId: keyring_api_1.SolScope.Devnet,
|
|
48
|
+
name: 'Solana Devnet',
|
|
49
|
+
nativeCurrency: exports.SOL_DEVNET_NATIVE_ASSET,
|
|
50
|
+
isEvm: false,
|
|
51
|
+
},
|
|
24
52
|
};
|
|
53
|
+
/**
|
|
54
|
+
* Array of all the Non-EVM chain IDs.
|
|
55
|
+
* This is a temporary mention until we develop
|
|
56
|
+
* a more robust solution to identify testnet networks.
|
|
57
|
+
*/
|
|
58
|
+
exports.NON_EVM_TESTNET_IDS = [
|
|
59
|
+
keyring_api_1.BtcScope.Testnet,
|
|
60
|
+
keyring_api_1.BtcScope.Signet,
|
|
61
|
+
keyring_api_1.SolScope.Testnet,
|
|
62
|
+
keyring_api_1.SolScope.Devnet,
|
|
63
|
+
];
|
|
25
64
|
/**
|
|
26
65
|
* Metadata for the supported networks.
|
|
27
66
|
*/
|
|
@@ -58,4 +97,28 @@ exports.MULTICHAIN_NETWORK_CONTROLLER_METADATA = {
|
|
|
58
97
|
selectedMultichainNetworkChainId: { persist: true, anonymous: true },
|
|
59
98
|
isEvmSelected: { persist: true, anonymous: true },
|
|
60
99
|
};
|
|
100
|
+
/**
|
|
101
|
+
* Multichain network ticker for the supported networks.
|
|
102
|
+
* TODO: This should be part of the assets-controllers or the snap itself.
|
|
103
|
+
*/
|
|
104
|
+
exports.MULTICHAIN_NETWORK_TICKER = {
|
|
105
|
+
[keyring_api_1.BtcScope.Mainnet]: 'BTC',
|
|
106
|
+
[keyring_api_1.BtcScope.Testnet]: 'tBTC',
|
|
107
|
+
[keyring_api_1.BtcScope.Signet]: 'sBTC',
|
|
108
|
+
[keyring_api_1.SolScope.Mainnet]: 'SOL',
|
|
109
|
+
[keyring_api_1.SolScope.Testnet]: 'tSOL',
|
|
110
|
+
[keyring_api_1.SolScope.Devnet]: 'dSOL',
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Multichain network asset decimals for the supported networks.
|
|
114
|
+
* TODO: This should be part of the assets-controllers or the snap itself.
|
|
115
|
+
*/
|
|
116
|
+
exports.MULTICHAIN_NETWORK_DECIMAL_PLACES = {
|
|
117
|
+
[keyring_api_1.BtcScope.Mainnet]: 8,
|
|
118
|
+
[keyring_api_1.BtcScope.Testnet]: 8,
|
|
119
|
+
[keyring_api_1.BtcScope.Signet]: 8,
|
|
120
|
+
[keyring_api_1.SolScope.Mainnet]: 5,
|
|
121
|
+
[keyring_api_1.SolScope.Testnet]: 5,
|
|
122
|
+
[keyring_api_1.SolScope.Devnet]: 5,
|
|
123
|
+
};
|
|
61
124
|
//# sourceMappingURL=constants.cjs.map
|
package/dist/constants.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"constants.cjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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","sourcesContent":["import { type StateMetadata } from '@metamask/base-controller';\nimport { type CaipChainId, BtcScope, SolScope } from '@metamask/keyring-api';\nimport { NetworkStatus } from '@metamask/network-controller';\n\nimport type {\n MultichainNetworkConfiguration,\n MultichainNetworkControllerState,\n MultichainNetworkMetadata,\n SupportedCaipChainId,\n} from './types';\n\nexport const BTC_NATIVE_ASSET = `${BtcScope.Mainnet}/slip44:0`;\nexport const BTC_TESTNET_NATIVE_ASSET = `${BtcScope.Testnet}/slip44:0`;\nexport const BTC_SIGNET_NATIVE_ASSET = `${BtcScope.Signet}/slip44:0`;\nexport const SOL_NATIVE_ASSET = `${SolScope.Mainnet}/slip44:501`;\nexport const SOL_TESTNET_NATIVE_ASSET = `${SolScope.Testnet}/slip44:501`;\nexport const SOL_DEVNET_NATIVE_ASSET = `${SolScope.Devnet}/slip44:501`;\n\n/**\n * Supported networks by the MultichainNetworkController\n */\nexport const AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS: Record<\n SupportedCaipChainId,\n MultichainNetworkConfiguration\n> = {\n [BtcScope.Mainnet]: {\n chainId: BtcScope.Mainnet,\n name: 'Bitcoin',\n nativeCurrency: BTC_NATIVE_ASSET,\n isEvm: false,\n },\n [BtcScope.Testnet]: {\n chainId: BtcScope.Testnet,\n name: 'Bitcoin Testnet',\n nativeCurrency: BTC_TESTNET_NATIVE_ASSET,\n isEvm: false,\n },\n [BtcScope.Signet]: {\n chainId: BtcScope.Signet,\n name: 'Bitcoin Signet',\n nativeCurrency: BTC_SIGNET_NATIVE_ASSET,\n isEvm: false,\n },\n [SolScope.Mainnet]: {\n chainId: SolScope.Mainnet,\n name: 'Solana',\n nativeCurrency: SOL_NATIVE_ASSET,\n isEvm: false,\n },\n [SolScope.Testnet]: {\n chainId: SolScope.Testnet,\n name: 'Solana Testnet',\n nativeCurrency: SOL_TESTNET_NATIVE_ASSET,\n isEvm: false,\n },\n [SolScope.Devnet]: {\n chainId: SolScope.Devnet,\n name: 'Solana Devnet',\n nativeCurrency: SOL_DEVNET_NATIVE_ASSET,\n isEvm: false,\n },\n};\n\n/**\n * Array of all the Non-EVM chain IDs.\n * This is a temporary mention until we develop\n * a more robust solution to identify testnet networks.\n */\nexport const NON_EVM_TESTNET_IDS: CaipChainId[] = [\n BtcScope.Testnet,\n BtcScope.Signet,\n SolScope.Testnet,\n SolScope.Devnet,\n];\n\n/**\n * Metadata for the supported networks.\n */\nexport const NETWORKS_METADATA: Record<string, MultichainNetworkMetadata> = {\n [BtcScope.Mainnet]: {\n features: [],\n status: NetworkStatus.Available,\n },\n [SolScope.Mainnet]: {\n features: [],\n status: NetworkStatus.Available,\n },\n};\n\n/**\n * Default state of the {@link MultichainNetworkController}.\n *\n * @returns The default state of the {@link MultichainNetworkController}.\n */\nexport const getDefaultMultichainNetworkControllerState =\n (): MultichainNetworkControllerState => ({\n multichainNetworkConfigurationsByChainId:\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n selectedMultichainNetworkChainId: SolScope.Mainnet,\n isEvmSelected: true,\n });\n\n/**\n * {@link MultichainNetworkController}'s metadata.\n *\n * This allows us to choose if fields of the state should be persisted or not\n * using the `persist` flag; and if they can be sent to Sentry or not, using\n * the `anonymous` flag.\n */\nexport const MULTICHAIN_NETWORK_CONTROLLER_METADATA = {\n multichainNetworkConfigurationsByChainId: { persist: true, anonymous: true },\n selectedMultichainNetworkChainId: { persist: true, anonymous: true },\n isEvmSelected: { persist: true, anonymous: true },\n} satisfies StateMetadata<MultichainNetworkControllerState>;\n\n/**\n * Multichain network ticker for the supported networks.\n * TODO: This should be part of the assets-controllers or the snap itself.\n */\nexport const MULTICHAIN_NETWORK_TICKER: Record<CaipChainId, string> = {\n [BtcScope.Mainnet]: 'BTC',\n [BtcScope.Testnet]: 'tBTC',\n [BtcScope.Signet]: 'sBTC',\n [SolScope.Mainnet]: 'SOL',\n [SolScope.Testnet]: 'tSOL',\n [SolScope.Devnet]: 'dSOL',\n} as const;\n\n/**\n * Multichain network asset decimals for the supported networks.\n * TODO: This should be part of the assets-controllers or the snap itself.\n */\nexport const MULTICHAIN_NETWORK_DECIMAL_PLACES: Record<CaipChainId, number> = {\n [BtcScope.Mainnet]: 8,\n [BtcScope.Testnet]: 8,\n [BtcScope.Signet]: 8,\n [SolScope.Mainnet]: 5,\n [SolScope.Testnet]: 5,\n [SolScope.Devnet]: 5,\n} as const;\n"]}
|
package/dist/constants.d.cts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
|
+
import { type CaipChainId } from "@metamask/keyring-api";
|
|
1
2
|
import type { MultichainNetworkConfiguration, MultichainNetworkControllerState, MultichainNetworkMetadata, SupportedCaipChainId } from "./types.cjs";
|
|
2
3
|
export declare const BTC_NATIVE_ASSET = "bip122:000000000019d6689c085ae165831e93/slip44:0";
|
|
3
|
-
export declare const
|
|
4
|
+
export declare const BTC_TESTNET_NATIVE_ASSET = "bip122:000000000933ea01ad0ee984209779ba/slip44:0";
|
|
5
|
+
export declare const BTC_SIGNET_NATIVE_ASSET = "bip122:00000008819873e925422c1ff0f99f7c/slip44:0";
|
|
6
|
+
export declare const SOL_NATIVE_ASSET = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501";
|
|
7
|
+
export declare const SOL_TESTNET_NATIVE_ASSET = "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z/slip44:501";
|
|
8
|
+
export declare const SOL_DEVNET_NATIVE_ASSET = "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1/slip44:501";
|
|
4
9
|
/**
|
|
5
10
|
* Supported networks by the MultichainNetworkController
|
|
6
11
|
*/
|
|
7
12
|
export declare const AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS: Record<SupportedCaipChainId, MultichainNetworkConfiguration>;
|
|
13
|
+
/**
|
|
14
|
+
* Array of all the Non-EVM chain IDs.
|
|
15
|
+
* This is a temporary mention until we develop
|
|
16
|
+
* a more robust solution to identify testnet networks.
|
|
17
|
+
*/
|
|
18
|
+
export declare const NON_EVM_TESTNET_IDS: CaipChainId[];
|
|
8
19
|
/**
|
|
9
20
|
* Metadata for the supported networks.
|
|
10
21
|
*/
|
|
@@ -36,4 +47,14 @@ export declare const MULTICHAIN_NETWORK_CONTROLLER_METADATA: {
|
|
|
36
47
|
anonymous: true;
|
|
37
48
|
};
|
|
38
49
|
};
|
|
50
|
+
/**
|
|
51
|
+
* Multichain network ticker for the supported networks.
|
|
52
|
+
* TODO: This should be part of the assets-controllers or the snap itself.
|
|
53
|
+
*/
|
|
54
|
+
export declare const MULTICHAIN_NETWORK_TICKER: Record<CaipChainId, string>;
|
|
55
|
+
/**
|
|
56
|
+
* Multichain network asset decimals for the supported networks.
|
|
57
|
+
* TODO: This should be part of the assets-controllers or the snap itself.
|
|
58
|
+
*/
|
|
59
|
+
export declare const MULTICHAIN_NETWORK_DECIMAL_PLACES: Record<CaipChainId, number>;
|
|
39
60
|
//# sourceMappingURL=constants.d.cts.map
|
package/dist/constants.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.cts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAsB,8BAA8B;AAG7E,OAAO,KAAK,EACV,8BAA8B,EAC9B,gCAAgC,EAChC,yBAAyB,EACzB,oBAAoB,EACrB,oBAAgB;AAEjB,eAAO,MAAM,gBAAgB,qDAAiC,CAAC;AAC/D,eAAO,MAAM,wBAAwB,qDAAiC,CAAC;AACvE,eAAO,MAAM,uBAAuB,qDAAgC,CAAC;AACrE,eAAO,MAAM,gBAAgB,uDAAmC,CAAC;AACjE,eAAO,MAAM,wBAAwB,uDAAmC,CAAC;AACzE,eAAO,MAAM,uBAAuB,uDAAkC,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,2CAA2C,EAAE,MAAM,CAC9D,oBAAoB,EACpB,8BAA8B,CAsC/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,EAK5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CASvE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0CAA0C,QACjD,gCAKF,CAAC;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;CAIQ,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAOxD,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAOhE,CAAC"}
|
package/dist/constants.d.mts
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
|
+
import { type CaipChainId } from "@metamask/keyring-api";
|
|
1
2
|
import type { MultichainNetworkConfiguration, MultichainNetworkControllerState, MultichainNetworkMetadata, SupportedCaipChainId } from "./types.mjs";
|
|
2
3
|
export declare const BTC_NATIVE_ASSET = "bip122:000000000019d6689c085ae165831e93/slip44:0";
|
|
3
|
-
export declare const
|
|
4
|
+
export declare const BTC_TESTNET_NATIVE_ASSET = "bip122:000000000933ea01ad0ee984209779ba/slip44:0";
|
|
5
|
+
export declare const BTC_SIGNET_NATIVE_ASSET = "bip122:00000008819873e925422c1ff0f99f7c/slip44:0";
|
|
6
|
+
export declare const SOL_NATIVE_ASSET = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501";
|
|
7
|
+
export declare const SOL_TESTNET_NATIVE_ASSET = "solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z/slip44:501";
|
|
8
|
+
export declare const SOL_DEVNET_NATIVE_ASSET = "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1/slip44:501";
|
|
4
9
|
/**
|
|
5
10
|
* Supported networks by the MultichainNetworkController
|
|
6
11
|
*/
|
|
7
12
|
export declare const AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS: Record<SupportedCaipChainId, MultichainNetworkConfiguration>;
|
|
13
|
+
/**
|
|
14
|
+
* Array of all the Non-EVM chain IDs.
|
|
15
|
+
* This is a temporary mention until we develop
|
|
16
|
+
* a more robust solution to identify testnet networks.
|
|
17
|
+
*/
|
|
18
|
+
export declare const NON_EVM_TESTNET_IDS: CaipChainId[];
|
|
8
19
|
/**
|
|
9
20
|
* Metadata for the supported networks.
|
|
10
21
|
*/
|
|
@@ -36,4 +47,14 @@ export declare const MULTICHAIN_NETWORK_CONTROLLER_METADATA: {
|
|
|
36
47
|
anonymous: true;
|
|
37
48
|
};
|
|
38
49
|
};
|
|
50
|
+
/**
|
|
51
|
+
* Multichain network ticker for the supported networks.
|
|
52
|
+
* TODO: This should be part of the assets-controllers or the snap itself.
|
|
53
|
+
*/
|
|
54
|
+
export declare const MULTICHAIN_NETWORK_TICKER: Record<CaipChainId, string>;
|
|
55
|
+
/**
|
|
56
|
+
* Multichain network asset decimals for the supported networks.
|
|
57
|
+
* TODO: This should be part of the assets-controllers or the snap itself.
|
|
58
|
+
*/
|
|
59
|
+
export declare const MULTICHAIN_NETWORK_DECIMAL_PLACES: Record<CaipChainId, number>;
|
|
39
60
|
//# sourceMappingURL=constants.d.mts.map
|
package/dist/constants.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.mts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAsB,8BAA8B;AAG7E,OAAO,KAAK,EACV,8BAA8B,EAC9B,gCAAgC,EAChC,yBAAyB,EACzB,oBAAoB,EACrB,oBAAgB;AAEjB,eAAO,MAAM,gBAAgB,qDAAiC,CAAC;AAC/D,eAAO,MAAM,wBAAwB,qDAAiC,CAAC;AACvE,eAAO,MAAM,uBAAuB,qDAAgC,CAAC;AACrE,eAAO,MAAM,gBAAgB,uDAAmC,CAAC;AACjE,eAAO,MAAM,wBAAwB,uDAAmC,CAAC;AACzE,eAAO,MAAM,uBAAuB,uDAAkC,CAAC;AAEvE;;GAEG;AACH,eAAO,MAAM,2CAA2C,EAAE,MAAM,CAC9D,oBAAoB,EACpB,8BAA8B,CAsC/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAAW,EAK5C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CASvE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0CAA0C,QACjD,gCAKF,CAAC;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;CAIQ,CAAC;AAE5D;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAOxD,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,iCAAiC,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAOhE,CAAC"}
|
package/dist/constants.mjs
CHANGED
|
@@ -1,24 +1,63 @@
|
|
|
1
1
|
import { BtcScope, SolScope } from "@metamask/keyring-api";
|
|
2
2
|
import { NetworkStatus } from "@metamask/network-controller";
|
|
3
3
|
export const BTC_NATIVE_ASSET = `${BtcScope.Mainnet}/slip44:0`;
|
|
4
|
-
export const
|
|
4
|
+
export const BTC_TESTNET_NATIVE_ASSET = `${BtcScope.Testnet}/slip44:0`;
|
|
5
|
+
export const BTC_SIGNET_NATIVE_ASSET = `${BtcScope.Signet}/slip44:0`;
|
|
6
|
+
export const SOL_NATIVE_ASSET = `${SolScope.Mainnet}/slip44:501`;
|
|
7
|
+
export const SOL_TESTNET_NATIVE_ASSET = `${SolScope.Testnet}/slip44:501`;
|
|
8
|
+
export const SOL_DEVNET_NATIVE_ASSET = `${SolScope.Devnet}/slip44:501`;
|
|
5
9
|
/**
|
|
6
10
|
* Supported networks by the MultichainNetworkController
|
|
7
11
|
*/
|
|
8
12
|
export const AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS = {
|
|
9
13
|
[BtcScope.Mainnet]: {
|
|
10
14
|
chainId: BtcScope.Mainnet,
|
|
11
|
-
name: 'Bitcoin
|
|
15
|
+
name: 'Bitcoin',
|
|
12
16
|
nativeCurrency: BTC_NATIVE_ASSET,
|
|
13
17
|
isEvm: false,
|
|
14
18
|
},
|
|
19
|
+
[BtcScope.Testnet]: {
|
|
20
|
+
chainId: BtcScope.Testnet,
|
|
21
|
+
name: 'Bitcoin Testnet',
|
|
22
|
+
nativeCurrency: BTC_TESTNET_NATIVE_ASSET,
|
|
23
|
+
isEvm: false,
|
|
24
|
+
},
|
|
25
|
+
[BtcScope.Signet]: {
|
|
26
|
+
chainId: BtcScope.Signet,
|
|
27
|
+
name: 'Bitcoin Signet',
|
|
28
|
+
nativeCurrency: BTC_SIGNET_NATIVE_ASSET,
|
|
29
|
+
isEvm: false,
|
|
30
|
+
},
|
|
15
31
|
[SolScope.Mainnet]: {
|
|
16
32
|
chainId: SolScope.Mainnet,
|
|
17
|
-
name: 'Solana
|
|
33
|
+
name: 'Solana',
|
|
18
34
|
nativeCurrency: SOL_NATIVE_ASSET,
|
|
19
35
|
isEvm: false,
|
|
20
36
|
},
|
|
37
|
+
[SolScope.Testnet]: {
|
|
38
|
+
chainId: SolScope.Testnet,
|
|
39
|
+
name: 'Solana Testnet',
|
|
40
|
+
nativeCurrency: SOL_TESTNET_NATIVE_ASSET,
|
|
41
|
+
isEvm: false,
|
|
42
|
+
},
|
|
43
|
+
[SolScope.Devnet]: {
|
|
44
|
+
chainId: SolScope.Devnet,
|
|
45
|
+
name: 'Solana Devnet',
|
|
46
|
+
nativeCurrency: SOL_DEVNET_NATIVE_ASSET,
|
|
47
|
+
isEvm: false,
|
|
48
|
+
},
|
|
21
49
|
};
|
|
50
|
+
/**
|
|
51
|
+
* Array of all the Non-EVM chain IDs.
|
|
52
|
+
* This is a temporary mention until we develop
|
|
53
|
+
* a more robust solution to identify testnet networks.
|
|
54
|
+
*/
|
|
55
|
+
export const NON_EVM_TESTNET_IDS = [
|
|
56
|
+
BtcScope.Testnet,
|
|
57
|
+
BtcScope.Signet,
|
|
58
|
+
SolScope.Testnet,
|
|
59
|
+
SolScope.Devnet,
|
|
60
|
+
];
|
|
22
61
|
/**
|
|
23
62
|
* Metadata for the supported networks.
|
|
24
63
|
*/
|
|
@@ -54,4 +93,28 @@ export const MULTICHAIN_NETWORK_CONTROLLER_METADATA = {
|
|
|
54
93
|
selectedMultichainNetworkChainId: { persist: true, anonymous: true },
|
|
55
94
|
isEvmSelected: { persist: true, anonymous: true },
|
|
56
95
|
};
|
|
96
|
+
/**
|
|
97
|
+
* Multichain network ticker for the supported networks.
|
|
98
|
+
* TODO: This should be part of the assets-controllers or the snap itself.
|
|
99
|
+
*/
|
|
100
|
+
export const MULTICHAIN_NETWORK_TICKER = {
|
|
101
|
+
[BtcScope.Mainnet]: 'BTC',
|
|
102
|
+
[BtcScope.Testnet]: 'tBTC',
|
|
103
|
+
[BtcScope.Signet]: 'sBTC',
|
|
104
|
+
[SolScope.Mainnet]: 'SOL',
|
|
105
|
+
[SolScope.Testnet]: 'tSOL',
|
|
106
|
+
[SolScope.Devnet]: 'dSOL',
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Multichain network asset decimals for the supported networks.
|
|
110
|
+
* TODO: This should be part of the assets-controllers or the snap itself.
|
|
111
|
+
*/
|
|
112
|
+
export const MULTICHAIN_NETWORK_DECIMAL_PLACES = {
|
|
113
|
+
[BtcScope.Mainnet]: 8,
|
|
114
|
+
[BtcScope.Testnet]: 8,
|
|
115
|
+
[BtcScope.Signet]: 8,
|
|
116
|
+
[SolScope.Mainnet]: 5,
|
|
117
|
+
[SolScope.Testnet]: 5,
|
|
118
|
+
[SolScope.Devnet]: 5,
|
|
119
|
+
};
|
|
57
120
|
//# sourceMappingURL=constants.mjs.map
|
package/dist/constants.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"constants.mjs","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,QAAQ,EAAE,QAAQ,EAAE,8BAA8B;AAC7E,OAAO,EAAE,aAAa,EAAE,qCAAqC;AAS7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC;AAC/D,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,QAAQ,CAAC,OAAO,WAAW,CAAC;AACvE,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,QAAQ,CAAC,MAAM,WAAW,CAAC;AACrE,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC;AACjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,QAAQ,CAAC,OAAO,aAAa,CAAC;AACzE,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,QAAQ,CAAC,MAAM,aAAa,CAAC;AAEvE;;GAEG;AACH,MAAM,CAAC,MAAM,2CAA2C,GAGpD;IACF,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,SAAS;QACf,cAAc,EAAE,gBAAgB;QAChC,KAAK,EAAE,KAAK;KACb;IACD,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,iBAAiB;QACvB,cAAc,EAAE,wBAAwB;QACxC,KAAK,EAAE,KAAK;KACb;IACD,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACjB,OAAO,EAAE,QAAQ,CAAC,MAAM;QACxB,IAAI,EAAE,gBAAgB;QACtB,cAAc,EAAE,uBAAuB;QACvC,KAAK,EAAE,KAAK;KACb;IACD,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,QAAQ;QACd,cAAc,EAAE,gBAAgB;QAChC,KAAK,EAAE,KAAK;KACb;IACD,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAClB,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,gBAAgB;QACtB,cAAc,EAAE,wBAAwB;QACxC,KAAK,EAAE,KAAK;KACb;IACD,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;QACjB,OAAO,EAAE,QAAQ,CAAC,MAAM;QACxB,IAAI,EAAE,eAAe;QACrB,cAAc,EAAE,uBAAuB;QACvC,KAAK,EAAE,KAAK;KACb;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAkB;IAChD,QAAQ,CAAC,OAAO;IAChB,QAAQ,CAAC,MAAM;IACf,QAAQ,CAAC,OAAO;IAChB,QAAQ,CAAC,MAAM;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA8C;IAC1E,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAClB,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,aAAa,CAAC,SAAS;KAChC;IACD,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAClB,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,aAAa,CAAC,SAAS;KAChC;CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0CAA0C,GACrD,GAAqC,EAAE,CAAC,CAAC;IACvC,wCAAwC,EACtC,2CAA2C;IAC7C,gCAAgC,EAAE,QAAQ,CAAC,OAAO;IAClD,aAAa,EAAE,IAAI;CACpB,CAAC,CAAC;AAEL;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sCAAsC,GAAG;IACpD,wCAAwC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;IAC5E,gCAAgC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;IACpE,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;CACQ,CAAC;AAE5D;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAgC;IACpE,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK;IACzB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;IAC1B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;IACzB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK;IACzB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM;IAC1B,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM;CACjB,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAgC;IAC5E,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACrB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACrB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACrB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;IACrB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;CACZ,CAAC","sourcesContent":["import { type StateMetadata } from '@metamask/base-controller';\nimport { type CaipChainId, BtcScope, SolScope } from '@metamask/keyring-api';\nimport { NetworkStatus } from '@metamask/network-controller';\n\nimport type {\n MultichainNetworkConfiguration,\n MultichainNetworkControllerState,\n MultichainNetworkMetadata,\n SupportedCaipChainId,\n} from './types';\n\nexport const BTC_NATIVE_ASSET = `${BtcScope.Mainnet}/slip44:0`;\nexport const BTC_TESTNET_NATIVE_ASSET = `${BtcScope.Testnet}/slip44:0`;\nexport const BTC_SIGNET_NATIVE_ASSET = `${BtcScope.Signet}/slip44:0`;\nexport const SOL_NATIVE_ASSET = `${SolScope.Mainnet}/slip44:501`;\nexport const SOL_TESTNET_NATIVE_ASSET = `${SolScope.Testnet}/slip44:501`;\nexport const SOL_DEVNET_NATIVE_ASSET = `${SolScope.Devnet}/slip44:501`;\n\n/**\n * Supported networks by the MultichainNetworkController\n */\nexport const AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS: Record<\n SupportedCaipChainId,\n MultichainNetworkConfiguration\n> = {\n [BtcScope.Mainnet]: {\n chainId: BtcScope.Mainnet,\n name: 'Bitcoin',\n nativeCurrency: BTC_NATIVE_ASSET,\n isEvm: false,\n },\n [BtcScope.Testnet]: {\n chainId: BtcScope.Testnet,\n name: 'Bitcoin Testnet',\n nativeCurrency: BTC_TESTNET_NATIVE_ASSET,\n isEvm: false,\n },\n [BtcScope.Signet]: {\n chainId: BtcScope.Signet,\n name: 'Bitcoin Signet',\n nativeCurrency: BTC_SIGNET_NATIVE_ASSET,\n isEvm: false,\n },\n [SolScope.Mainnet]: {\n chainId: SolScope.Mainnet,\n name: 'Solana',\n nativeCurrency: SOL_NATIVE_ASSET,\n isEvm: false,\n },\n [SolScope.Testnet]: {\n chainId: SolScope.Testnet,\n name: 'Solana Testnet',\n nativeCurrency: SOL_TESTNET_NATIVE_ASSET,\n isEvm: false,\n },\n [SolScope.Devnet]: {\n chainId: SolScope.Devnet,\n name: 'Solana Devnet',\n nativeCurrency: SOL_DEVNET_NATIVE_ASSET,\n isEvm: false,\n },\n};\n\n/**\n * Array of all the Non-EVM chain IDs.\n * This is a temporary mention until we develop\n * a more robust solution to identify testnet networks.\n */\nexport const NON_EVM_TESTNET_IDS: CaipChainId[] = [\n BtcScope.Testnet,\n BtcScope.Signet,\n SolScope.Testnet,\n SolScope.Devnet,\n];\n\n/**\n * Metadata for the supported networks.\n */\nexport const NETWORKS_METADATA: Record<string, MultichainNetworkMetadata> = {\n [BtcScope.Mainnet]: {\n features: [],\n status: NetworkStatus.Available,\n },\n [SolScope.Mainnet]: {\n features: [],\n status: NetworkStatus.Available,\n },\n};\n\n/**\n * Default state of the {@link MultichainNetworkController}.\n *\n * @returns The default state of the {@link MultichainNetworkController}.\n */\nexport const getDefaultMultichainNetworkControllerState =\n (): MultichainNetworkControllerState => ({\n multichainNetworkConfigurationsByChainId:\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n selectedMultichainNetworkChainId: SolScope.Mainnet,\n isEvmSelected: true,\n });\n\n/**\n * {@link MultichainNetworkController}'s metadata.\n *\n * This allows us to choose if fields of the state should be persisted or not\n * using the `persist` flag; and if they can be sent to Sentry or not, using\n * the `anonymous` flag.\n */\nexport const MULTICHAIN_NETWORK_CONTROLLER_METADATA = {\n multichainNetworkConfigurationsByChainId: { persist: true, anonymous: true },\n selectedMultichainNetworkChainId: { persist: true, anonymous: true },\n isEvmSelected: { persist: true, anonymous: true },\n} satisfies StateMetadata<MultichainNetworkControllerState>;\n\n/**\n * Multichain network ticker for the supported networks.\n * TODO: This should be part of the assets-controllers or the snap itself.\n */\nexport const MULTICHAIN_NETWORK_TICKER: Record<CaipChainId, string> = {\n [BtcScope.Mainnet]: 'BTC',\n [BtcScope.Testnet]: 'tBTC',\n [BtcScope.Signet]: 'sBTC',\n [SolScope.Mainnet]: 'SOL',\n [SolScope.Testnet]: 'tSOL',\n [SolScope.Devnet]: 'dSOL',\n} as const;\n\n/**\n * Multichain network asset decimals for the supported networks.\n * TODO: This should be part of the assets-controllers or the snap itself.\n */\nexport const MULTICHAIN_NETWORK_DECIMAL_PLACES: Record<CaipChainId, number> = {\n [BtcScope.Mainnet]: 8,\n [BtcScope.Testnet]: 8,\n [BtcScope.Signet]: 8,\n [SolScope.Mainnet]: 5,\n [SolScope.Testnet]: 5,\n [SolScope.Devnet]: 5,\n} as const;\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.toEvmCaipChainId = exports.toMultichainNetworkConfigurationsByChainId = exports.toMultichainNetworkConfiguration = exports.checkIfSupportedCaipChainId = exports.AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS = exports.getDefaultMultichainNetworkControllerState = exports.MultichainNetworkController = void 0;
|
|
3
|
+
exports.toEvmCaipChainId = exports.toMultichainNetworkConfigurationsByChainId = exports.toMultichainNetworkConfiguration = exports.checkIfSupportedCaipChainId = exports.AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS = exports.MULTICHAIN_NETWORK_DECIMAL_PLACES = exports.MULTICHAIN_NETWORK_TICKER = exports.NON_EVM_TESTNET_IDS = exports.getDefaultMultichainNetworkControllerState = exports.MultichainNetworkController = void 0;
|
|
4
4
|
var MultichainNetworkController_1 = require("./MultichainNetworkController.cjs");
|
|
5
5
|
Object.defineProperty(exports, "MultichainNetworkController", { enumerable: true, get: function () { return MultichainNetworkController_1.MultichainNetworkController; } });
|
|
6
6
|
var constants_1 = require("./constants.cjs");
|
|
7
7
|
Object.defineProperty(exports, "getDefaultMultichainNetworkControllerState", { enumerable: true, get: function () { return constants_1.getDefaultMultichainNetworkControllerState; } });
|
|
8
|
+
Object.defineProperty(exports, "NON_EVM_TESTNET_IDS", { enumerable: true, get: function () { return constants_1.NON_EVM_TESTNET_IDS; } });
|
|
9
|
+
Object.defineProperty(exports, "MULTICHAIN_NETWORK_TICKER", { enumerable: true, get: function () { return constants_1.MULTICHAIN_NETWORK_TICKER; } });
|
|
10
|
+
Object.defineProperty(exports, "MULTICHAIN_NETWORK_DECIMAL_PLACES", { enumerable: true, get: function () { return constants_1.MULTICHAIN_NETWORK_DECIMAL_PLACES; } });
|
|
8
11
|
Object.defineProperty(exports, "AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS", { enumerable: true, get: function () { return constants_1.AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS; } });
|
|
9
12
|
var utils_1 = require("./utils.cjs");
|
|
10
13
|
Object.defineProperty(exports, "checkIfSupportedCaipChainId", { enumerable: true, get: function () { return utils_1.checkIfSupportedCaipChainId; } });
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iFAA4E;AAAnE,0IAAA,2BAA2B,OAAA;AACpC,
|
|
1
|
+
{"version":3,"file":"index.cjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,iFAA4E;AAAnE,0IAAA,2BAA2B,OAAA;AACpC,6CAMqB;AALnB,uIAAA,0CAA0C,OAAA;AAC1C,gHAAA,mBAAmB,OAAA;AACnB,sHAAA,yBAAyB,OAAA;AACzB,8HAAA,iCAAiC,OAAA;AACjC,wIAAA,2CAA2C,OAAA;AAkB7C,qCAKiB;AAJf,oHAAA,2BAA2B,OAAA;AAC3B,yHAAA,gCAAgC,OAAA;AAChC,mIAAA,0CAA0C,OAAA;AAC1C,yGAAA,gBAAgB,OAAA","sourcesContent":["export { MultichainNetworkController } from './MultichainNetworkController';\nexport {\n getDefaultMultichainNetworkControllerState,\n NON_EVM_TESTNET_IDS,\n MULTICHAIN_NETWORK_TICKER,\n MULTICHAIN_NETWORK_DECIMAL_PLACES,\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n} from './constants';\nexport type {\n MultichainNetworkMetadata,\n SupportedCaipChainId,\n CommonNetworkConfiguration,\n NonEvmNetworkConfiguration,\n EvmNetworkConfiguration,\n MultichainNetworkConfiguration,\n MultichainNetworkControllerState,\n MultichainNetworkControllerGetStateAction,\n MultichainNetworkControllerSetActiveNetworkAction,\n MultichainNetworkControllerStateChange,\n MultichainNetworkControllerNetworkDidChangeEvent,\n MultichainNetworkControllerActions,\n MultichainNetworkControllerEvents,\n MultichainNetworkControllerMessenger,\n} from './types';\nexport {\n checkIfSupportedCaipChainId,\n toMultichainNetworkConfiguration,\n toMultichainNetworkConfigurationsByChainId,\n toEvmCaipChainId,\n} from './utils';\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { MultichainNetworkController } from "./MultichainNetworkController.cjs";
|
|
2
|
-
export { getDefaultMultichainNetworkControllerState, AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS, } from "./constants.cjs";
|
|
2
|
+
export { getDefaultMultichainNetworkControllerState, NON_EVM_TESTNET_IDS, MULTICHAIN_NETWORK_TICKER, MULTICHAIN_NETWORK_DECIMAL_PLACES, AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS, } from "./constants.cjs";
|
|
3
3
|
export type { MultichainNetworkMetadata, SupportedCaipChainId, CommonNetworkConfiguration, NonEvmNetworkConfiguration, EvmNetworkConfiguration, MultichainNetworkConfiguration, MultichainNetworkControllerState, MultichainNetworkControllerGetStateAction, MultichainNetworkControllerSetActiveNetworkAction, MultichainNetworkControllerStateChange, MultichainNetworkControllerNetworkDidChangeEvent, MultichainNetworkControllerActions, MultichainNetworkControllerEvents, MultichainNetworkControllerMessenger, } from "./types.cjs";
|
|
4
4
|
export { checkIfSupportedCaipChainId, toMultichainNetworkConfiguration, toMultichainNetworkConfigurationsByChainId, toEvmCaipChainId, } from "./utils.cjs";
|
|
5
5
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,0CAAsC;AAC5E,OAAO,EACL,0CAA0C,EAC1C,2CAA2C,GAC5C,wBAAoB;AACrB,YAAY,EACV,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,yCAAyC,EACzC,iDAAiD,EACjD,sCAAsC,EACtC,gDAAgD,EAChD,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,GACrC,oBAAgB;AACjB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,0CAA0C,EAC1C,gBAAgB,GACjB,oBAAgB"}
|
|
1
|
+
{"version":3,"file":"index.d.cts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,0CAAsC;AAC5E,OAAO,EACL,0CAA0C,EAC1C,mBAAmB,EACnB,yBAAyB,EACzB,iCAAiC,EACjC,2CAA2C,GAC5C,wBAAoB;AACrB,YAAY,EACV,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,yCAAyC,EACzC,iDAAiD,EACjD,sCAAsC,EACtC,gDAAgD,EAChD,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,GACrC,oBAAgB;AACjB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,0CAA0C,EAC1C,gBAAgB,GACjB,oBAAgB"}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { MultichainNetworkController } from "./MultichainNetworkController.mjs";
|
|
2
|
-
export { getDefaultMultichainNetworkControllerState, AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS, } from "./constants.mjs";
|
|
2
|
+
export { getDefaultMultichainNetworkControllerState, NON_EVM_TESTNET_IDS, MULTICHAIN_NETWORK_TICKER, MULTICHAIN_NETWORK_DECIMAL_PLACES, AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS, } from "./constants.mjs";
|
|
3
3
|
export type { MultichainNetworkMetadata, SupportedCaipChainId, CommonNetworkConfiguration, NonEvmNetworkConfiguration, EvmNetworkConfiguration, MultichainNetworkConfiguration, MultichainNetworkControllerState, MultichainNetworkControllerGetStateAction, MultichainNetworkControllerSetActiveNetworkAction, MultichainNetworkControllerStateChange, MultichainNetworkControllerNetworkDidChangeEvent, MultichainNetworkControllerActions, MultichainNetworkControllerEvents, MultichainNetworkControllerMessenger, } from "./types.mjs";
|
|
4
4
|
export { checkIfSupportedCaipChainId, toMultichainNetworkConfiguration, toMultichainNetworkConfigurationsByChainId, toEvmCaipChainId, } from "./utils.mjs";
|
|
5
5
|
//# sourceMappingURL=index.d.mts.map
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,0CAAsC;AAC5E,OAAO,EACL,0CAA0C,EAC1C,2CAA2C,GAC5C,wBAAoB;AACrB,YAAY,EACV,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,yCAAyC,EACzC,iDAAiD,EACjD,sCAAsC,EACtC,gDAAgD,EAChD,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,GACrC,oBAAgB;AACjB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,0CAA0C,EAC1C,gBAAgB,GACjB,oBAAgB"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,0CAAsC;AAC5E,OAAO,EACL,0CAA0C,EAC1C,mBAAmB,EACnB,yBAAyB,EACzB,iCAAiC,EACjC,2CAA2C,GAC5C,wBAAoB;AACrB,YAAY,EACV,yBAAyB,EACzB,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,yCAAyC,EACzC,iDAAiD,EACjD,sCAAsC,EACtC,gDAAgD,EAChD,kCAAkC,EAClC,iCAAiC,EACjC,oCAAoC,GACrC,oBAAgB;AACjB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,0CAA0C,EAC1C,gBAAgB,GACjB,oBAAgB"}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { MultichainNetworkController } from "./MultichainNetworkController.mjs";
|
|
2
|
-
export { getDefaultMultichainNetworkControllerState, AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS } from "./constants.mjs";
|
|
2
|
+
export { getDefaultMultichainNetworkControllerState, NON_EVM_TESTNET_IDS, MULTICHAIN_NETWORK_TICKER, MULTICHAIN_NETWORK_DECIMAL_PLACES, AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS } from "./constants.mjs";
|
|
3
3
|
export { checkIfSupportedCaipChainId, toMultichainNetworkConfiguration, toMultichainNetworkConfigurationsByChainId, toEvmCaipChainId } from "./utils.mjs";
|
|
4
4
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,0CAAsC;AAC5E,OAAO,EACL,0CAA0C,EAC1C,2CAA2C,EAC5C,wBAAoB;AAiBrB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,0CAA0C,EAC1C,gBAAgB,EACjB,oBAAgB","sourcesContent":["export { MultichainNetworkController } from './MultichainNetworkController';\nexport {\n getDefaultMultichainNetworkControllerState,\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n} from './constants';\nexport type {\n MultichainNetworkMetadata,\n SupportedCaipChainId,\n CommonNetworkConfiguration,\n NonEvmNetworkConfiguration,\n EvmNetworkConfiguration,\n MultichainNetworkConfiguration,\n MultichainNetworkControllerState,\n MultichainNetworkControllerGetStateAction,\n MultichainNetworkControllerSetActiveNetworkAction,\n MultichainNetworkControllerStateChange,\n MultichainNetworkControllerNetworkDidChangeEvent,\n MultichainNetworkControllerActions,\n MultichainNetworkControllerEvents,\n MultichainNetworkControllerMessenger,\n} from './types';\nexport {\n checkIfSupportedCaipChainId,\n toMultichainNetworkConfiguration,\n toMultichainNetworkConfigurationsByChainId,\n toEvmCaipChainId,\n} from './utils';\n"]}
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,0CAAsC;AAC5E,OAAO,EACL,0CAA0C,EAC1C,mBAAmB,EACnB,yBAAyB,EACzB,iCAAiC,EACjC,2CAA2C,EAC5C,wBAAoB;AAiBrB,OAAO,EACL,2BAA2B,EAC3B,gCAAgC,EAChC,0CAA0C,EAC1C,gBAAgB,EACjB,oBAAgB","sourcesContent":["export { MultichainNetworkController } from './MultichainNetworkController';\nexport {\n getDefaultMultichainNetworkControllerState,\n NON_EVM_TESTNET_IDS,\n MULTICHAIN_NETWORK_TICKER,\n MULTICHAIN_NETWORK_DECIMAL_PLACES,\n AVAILABLE_MULTICHAIN_NETWORK_CONFIGURATIONS,\n} from './constants';\nexport type {\n MultichainNetworkMetadata,\n SupportedCaipChainId,\n CommonNetworkConfiguration,\n NonEvmNetworkConfiguration,\n EvmNetworkConfiguration,\n MultichainNetworkConfiguration,\n MultichainNetworkControllerState,\n MultichainNetworkControllerGetStateAction,\n MultichainNetworkControllerSetActiveNetworkAction,\n MultichainNetworkControllerStateChange,\n MultichainNetworkControllerNetworkDidChangeEvent,\n MultichainNetworkControllerActions,\n MultichainNetworkControllerEvents,\n MultichainNetworkControllerMessenger,\n} from './types';\nexport {\n checkIfSupportedCaipChainId,\n toMultichainNetworkConfiguration,\n toMultichainNetworkConfigurationsByChainId,\n toEvmCaipChainId,\n} from './utils';\n"]}
|
package/dist/types.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAkBa,QAAA,kCAAkC,GAAG,6BAA6B,CAAC","sourcesContent":["import {\n type ControllerGetStateAction,\n type ControllerStateChangeEvent,\n type RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type { BtcScope, CaipChainId, SolScope } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type {\n NetworkStatus,\n NetworkControllerSetActiveNetworkAction,\n NetworkControllerGetStateAction,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerGetSelectedChainIdAction,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkClientId,\n} from '@metamask/network-controller';\nimport { type CaipAssetType } from '@metamask/utils';\n\nexport const MULTICHAIN_NETWORK_CONTROLLER_NAME = 'MultichainNetworkController';\n\nexport type MultichainNetworkMetadata = {\n features: string[];\n status: NetworkStatus;\n};\n\nexport type SupportedCaipChainId
|
|
1
|
+
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAkBa,QAAA,kCAAkC,GAAG,6BAA6B,CAAC","sourcesContent":["import {\n type ControllerGetStateAction,\n type ControllerStateChangeEvent,\n type RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type { BtcScope, CaipChainId, SolScope } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type {\n NetworkStatus,\n NetworkControllerSetActiveNetworkAction,\n NetworkControllerGetStateAction,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerGetSelectedChainIdAction,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkClientId,\n} from '@metamask/network-controller';\nimport { type CaipAssetType } from '@metamask/utils';\n\nexport const MULTICHAIN_NETWORK_CONTROLLER_NAME = 'MultichainNetworkController';\n\nexport type MultichainNetworkMetadata = {\n features: string[];\n status: NetworkStatus;\n};\n\nexport type SupportedCaipChainId =\n | BtcScope.Mainnet\n | BtcScope.Testnet\n | BtcScope.Signet\n | SolScope.Mainnet\n | SolScope.Testnet\n | SolScope.Devnet;\n\nexport type CommonNetworkConfiguration = {\n /**\n * EVM network flag.\n */\n isEvm: boolean;\n /**\n * The chain ID of the network.\n */\n chainId: CaipChainId;\n /**\n * The name of the network.\n */\n name: string;\n};\n\nexport type NonEvmNetworkConfiguration = CommonNetworkConfiguration & {\n /**\n * EVM network flag.\n */\n isEvm: false;\n /**\n * The native asset type of the network.\n */\n nativeCurrency: CaipAssetType;\n};\n\n// TODO: The controller only supports non-EVM network configurations at the moment\n// Once we support Caip chain IDs for EVM networks, we can re-enable EVM network configurations\nexport type EvmNetworkConfiguration = CommonNetworkConfiguration & {\n /**\n * EVM network flag.\n */\n isEvm: true;\n /**\n * The native asset type of the network.\n * For EVM, this is the network ticker since there is no standard between\n * tickers and Caip IDs.\n */\n nativeCurrency: string;\n /**\n * The block explorers of the network.\n */\n blockExplorerUrls: string[];\n /**\n * The index of the default block explorer URL.\n */\n defaultBlockExplorerUrlIndex: number;\n};\n\nexport type MultichainNetworkConfiguration =\n | EvmNetworkConfiguration\n | NonEvmNetworkConfiguration;\n\n/**\n * State used by the {@link MultichainNetworkController} to cache network configurations.\n */\nexport type MultichainNetworkControllerState = {\n /**\n * The network configurations by chain ID.\n */\n multichainNetworkConfigurationsByChainId: Record<\n CaipChainId,\n MultichainNetworkConfiguration\n >;\n /**\n * The chain ID of the selected network.\n */\n selectedMultichainNetworkChainId: SupportedCaipChainId;\n /**\n * Whether EVM or non-EVM network is selected\n */\n isEvmSelected: boolean;\n};\n\n/**\n * Returns the state of the {@link MultichainNetworkController}.\n */\nexport type MultichainNetworkControllerGetStateAction =\n ControllerGetStateAction<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerState\n >;\n\nexport type SetActiveNetworkMethod = (\n id: SupportedCaipChainId | NetworkClientId,\n) => Promise<void>;\n\nexport type MultichainNetworkControllerSetActiveNetworkAction = {\n type: `${typeof MULTICHAIN_NETWORK_CONTROLLER_NAME}:setActiveNetwork`;\n handler: SetActiveNetworkMethod;\n};\n\n/**\n * Event emitted when the state of the {@link MultichainNetworkController} changes.\n */\nexport type MultichainNetworkControllerStateChange = ControllerStateChangeEvent<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerState\n>;\n\nexport type MultichainNetworkControllerNetworkDidChangeEvent = {\n type: `${typeof MULTICHAIN_NETWORK_CONTROLLER_NAME}:networkDidChange`;\n payload: [NetworkClientId | SupportedCaipChainId];\n};\n\n/**\n * Actions exposed by the {@link MultichainNetworkController}.\n */\nexport type MultichainNetworkControllerActions =\n | MultichainNetworkControllerGetStateAction\n | MultichainNetworkControllerSetActiveNetworkAction;\n\n/**\n * Events emitted by {@link MultichainNetworkController}.\n */\nexport type MultichainNetworkControllerEvents =\n | MultichainNetworkControllerStateChange\n | MultichainNetworkControllerNetworkDidChangeEvent;\n\n/**\n * Actions that this controller is allowed to call.\n */\nexport type AllowedActions =\n | NetworkControllerGetStateAction\n | NetworkControllerSetActiveNetworkAction\n | NetworkControllerRemoveNetworkAction\n | NetworkControllerGetSelectedChainIdAction\n | NetworkControllerFindNetworkClientIdByChainIdAction;\n\n// Re-define event here to avoid circular dependency with AccountsController\nexport type AccountsControllerSelectedAccountChangeEvent = {\n type: `AccountsController:selectedAccountChange`;\n payload: [InternalAccount];\n};\n\n/**\n * Events that this controller is allowed to subscribe.\n */\nexport type AllowedEvents = AccountsControllerSelectedAccountChangeEvent;\n\nexport type MultichainNetworkControllerAllowedActions =\n | MultichainNetworkControllerActions\n | AllowedActions;\n\nexport type MultichainNetworkControllerAllowedEvents =\n | MultichainNetworkControllerEvents\n | AllowedEvents;\n\n/**\n * Messenger type for the MultichainNetworkController.\n */\nexport type MultichainNetworkControllerMessenger = RestrictedMessenger<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerAllowedActions,\n MultichainNetworkControllerAllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
|
package/dist/types.d.cts
CHANGED
|
@@ -8,7 +8,7 @@ export type MultichainNetworkMetadata = {
|
|
|
8
8
|
features: string[];
|
|
9
9
|
status: NetworkStatus;
|
|
10
10
|
};
|
|
11
|
-
export type SupportedCaipChainId = BtcScope.Mainnet | SolScope.Mainnet;
|
|
11
|
+
export type SupportedCaipChainId = BtcScope.Mainnet | BtcScope.Testnet | BtcScope.Signet | SolScope.Mainnet | SolScope.Testnet | SolScope.Devnet;
|
|
12
12
|
export type CommonNetworkConfiguration = {
|
|
13
13
|
/**
|
|
14
14
|
* EVM network flag.
|
package/dist/types.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,8BAA8B;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EACV,aAAa,EACb,uCAAuC,EACvC,+BAA+B,EAC/B,oCAAoC,EACpC,yCAAyC,EACzC,mDAAmD,EACnD,eAAe,EAChB,qCAAqC;AACtC,OAAO,EAAE,KAAK,aAAa,EAAE,wBAAwB;AAErD,eAAO,MAAM,kCAAkC,gCAAgC,CAAC;AAEhF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.mts
CHANGED
|
@@ -8,7 +8,7 @@ export type MultichainNetworkMetadata = {
|
|
|
8
8
|
features: string[];
|
|
9
9
|
status: NetworkStatus;
|
|
10
10
|
};
|
|
11
|
-
export type SupportedCaipChainId = BtcScope.Mainnet | SolScope.Mainnet;
|
|
11
|
+
export type SupportedCaipChainId = BtcScope.Mainnet | BtcScope.Testnet | BtcScope.Signet | SolScope.Mainnet | SolScope.Testnet | SolScope.Devnet;
|
|
12
12
|
export type CommonNetworkConfiguration = {
|
|
13
13
|
/**
|
|
14
14
|
* EVM network flag.
|
package/dist/types.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACzB,kCAAkC;AACnC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,8BAA8B;AAC7E,OAAO,KAAK,EAAE,eAAe,EAAE,uCAAuC;AACtE,OAAO,KAAK,EACV,aAAa,EACb,uCAAuC,EACvC,+BAA+B,EAC/B,oCAAoC,EACpC,yCAAyC,EACzC,mDAAmD,EACnD,eAAe,EAChB,qCAAqC;AACtC,OAAO,EAAE,KAAK,aAAa,EAAE,wBAAwB;AAErD,eAAO,MAAM,kCAAkC,gCAAgC,CAAC;AAEhF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,kCAAkC,GAAG,6BAA6B,CAAC","sourcesContent":["import {\n type ControllerGetStateAction,\n type ControllerStateChangeEvent,\n type RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type { BtcScope, CaipChainId, SolScope } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type {\n NetworkStatus,\n NetworkControllerSetActiveNetworkAction,\n NetworkControllerGetStateAction,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerGetSelectedChainIdAction,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkClientId,\n} from '@metamask/network-controller';\nimport { type CaipAssetType } from '@metamask/utils';\n\nexport const MULTICHAIN_NETWORK_CONTROLLER_NAME = 'MultichainNetworkController';\n\nexport type MultichainNetworkMetadata = {\n features: string[];\n status: NetworkStatus;\n};\n\nexport type SupportedCaipChainId
|
|
1
|
+
{"version":3,"file":"types.mjs","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,kCAAkC,GAAG,6BAA6B,CAAC","sourcesContent":["import {\n type ControllerGetStateAction,\n type ControllerStateChangeEvent,\n type RestrictedMessenger,\n} from '@metamask/base-controller';\nimport type { BtcScope, CaipChainId, SolScope } from '@metamask/keyring-api';\nimport type { InternalAccount } from '@metamask/keyring-internal-api';\nimport type {\n NetworkStatus,\n NetworkControllerSetActiveNetworkAction,\n NetworkControllerGetStateAction,\n NetworkControllerRemoveNetworkAction,\n NetworkControllerGetSelectedChainIdAction,\n NetworkControllerFindNetworkClientIdByChainIdAction,\n NetworkClientId,\n} from '@metamask/network-controller';\nimport { type CaipAssetType } from '@metamask/utils';\n\nexport const MULTICHAIN_NETWORK_CONTROLLER_NAME = 'MultichainNetworkController';\n\nexport type MultichainNetworkMetadata = {\n features: string[];\n status: NetworkStatus;\n};\n\nexport type SupportedCaipChainId =\n | BtcScope.Mainnet\n | BtcScope.Testnet\n | BtcScope.Signet\n | SolScope.Mainnet\n | SolScope.Testnet\n | SolScope.Devnet;\n\nexport type CommonNetworkConfiguration = {\n /**\n * EVM network flag.\n */\n isEvm: boolean;\n /**\n * The chain ID of the network.\n */\n chainId: CaipChainId;\n /**\n * The name of the network.\n */\n name: string;\n};\n\nexport type NonEvmNetworkConfiguration = CommonNetworkConfiguration & {\n /**\n * EVM network flag.\n */\n isEvm: false;\n /**\n * The native asset type of the network.\n */\n nativeCurrency: CaipAssetType;\n};\n\n// TODO: The controller only supports non-EVM network configurations at the moment\n// Once we support Caip chain IDs for EVM networks, we can re-enable EVM network configurations\nexport type EvmNetworkConfiguration = CommonNetworkConfiguration & {\n /**\n * EVM network flag.\n */\n isEvm: true;\n /**\n * The native asset type of the network.\n * For EVM, this is the network ticker since there is no standard between\n * tickers and Caip IDs.\n */\n nativeCurrency: string;\n /**\n * The block explorers of the network.\n */\n blockExplorerUrls: string[];\n /**\n * The index of the default block explorer URL.\n */\n defaultBlockExplorerUrlIndex: number;\n};\n\nexport type MultichainNetworkConfiguration =\n | EvmNetworkConfiguration\n | NonEvmNetworkConfiguration;\n\n/**\n * State used by the {@link MultichainNetworkController} to cache network configurations.\n */\nexport type MultichainNetworkControllerState = {\n /**\n * The network configurations by chain ID.\n */\n multichainNetworkConfigurationsByChainId: Record<\n CaipChainId,\n MultichainNetworkConfiguration\n >;\n /**\n * The chain ID of the selected network.\n */\n selectedMultichainNetworkChainId: SupportedCaipChainId;\n /**\n * Whether EVM or non-EVM network is selected\n */\n isEvmSelected: boolean;\n};\n\n/**\n * Returns the state of the {@link MultichainNetworkController}.\n */\nexport type MultichainNetworkControllerGetStateAction =\n ControllerGetStateAction<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerState\n >;\n\nexport type SetActiveNetworkMethod = (\n id: SupportedCaipChainId | NetworkClientId,\n) => Promise<void>;\n\nexport type MultichainNetworkControllerSetActiveNetworkAction = {\n type: `${typeof MULTICHAIN_NETWORK_CONTROLLER_NAME}:setActiveNetwork`;\n handler: SetActiveNetworkMethod;\n};\n\n/**\n * Event emitted when the state of the {@link MultichainNetworkController} changes.\n */\nexport type MultichainNetworkControllerStateChange = ControllerStateChangeEvent<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerState\n>;\n\nexport type MultichainNetworkControllerNetworkDidChangeEvent = {\n type: `${typeof MULTICHAIN_NETWORK_CONTROLLER_NAME}:networkDidChange`;\n payload: [NetworkClientId | SupportedCaipChainId];\n};\n\n/**\n * Actions exposed by the {@link MultichainNetworkController}.\n */\nexport type MultichainNetworkControllerActions =\n | MultichainNetworkControllerGetStateAction\n | MultichainNetworkControllerSetActiveNetworkAction;\n\n/**\n * Events emitted by {@link MultichainNetworkController}.\n */\nexport type MultichainNetworkControllerEvents =\n | MultichainNetworkControllerStateChange\n | MultichainNetworkControllerNetworkDidChangeEvent;\n\n/**\n * Actions that this controller is allowed to call.\n */\nexport type AllowedActions =\n | NetworkControllerGetStateAction\n | NetworkControllerSetActiveNetworkAction\n | NetworkControllerRemoveNetworkAction\n | NetworkControllerGetSelectedChainIdAction\n | NetworkControllerFindNetworkClientIdByChainIdAction;\n\n// Re-define event here to avoid circular dependency with AccountsController\nexport type AccountsControllerSelectedAccountChangeEvent = {\n type: `AccountsController:selectedAccountChange`;\n payload: [InternalAccount];\n};\n\n/**\n * Events that this controller is allowed to subscribe.\n */\nexport type AllowedEvents = AccountsControllerSelectedAccountChangeEvent;\n\nexport type MultichainNetworkControllerAllowedActions =\n | MultichainNetworkControllerActions\n | AllowedActions;\n\nexport type MultichainNetworkControllerAllowedEvents =\n | MultichainNetworkControllerEvents\n | AllowedEvents;\n\n/**\n * Messenger type for the MultichainNetworkController.\n */\nexport type MultichainNetworkControllerMessenger = RestrictedMessenger<\n typeof MULTICHAIN_NETWORK_CONTROLLER_NAME,\n MultichainNetworkControllerAllowedActions,\n MultichainNetworkControllerAllowedEvents,\n AllowedActions['type'],\n AllowedEvents['type']\n>;\n"]}
|