diff --git a/packages/preferences-controller/src/PreferencesController.test.ts b/packages/preferences-controller/src/PreferencesController.test.ts index 28cb622a53..986d103397 100644 --- a/packages/preferences-controller/src/PreferencesController.test.ts +++ b/packages/preferences-controller/src/PreferencesController.test.ts @@ -28,6 +28,8 @@ describe('PreferencesController', () => { showTestNetworks: false, isIpfsGatewayEnabled: true, useTransactionSimulations: true, + useSafeChainsListValidation: true, + useMultiRpcMigration: true, showIncomingTransactions: Object.values( ETHERSCAN_SUPPORTED_CHAIN_IDS, ).reduce((acc, curr) => { @@ -368,6 +370,18 @@ describe('PreferencesController', () => { ); }); + it('should set useSafeChainsListValidation', () => { + const controller = setupPreferencesController(); + controller.setUseSafeChainsListValidation(true); + expect(controller.state.useSafeChainsListValidation).toBe(true); + }); + + it('should set useMultiRpcMigration', () => { + const controller = setupPreferencesController(); + controller.setUseMultiRpcMigration(true); + expect(controller.state.useMultiRpcMigration).toBe(true); + }); + it('should set featureFlags', () => { const controller = setupPreferencesController(); controller.setFeatureFlag('Feature A', true); diff --git a/packages/preferences-controller/src/PreferencesController.ts b/packages/preferences-controller/src/PreferencesController.ts index a59452e47d..854b491502 100644 --- a/packages/preferences-controller/src/PreferencesController.ts +++ b/packages/preferences-controller/src/PreferencesController.ts @@ -110,6 +110,14 @@ export type PreferencesState = { * Controls whether transaction simulations are enabled */ useTransactionSimulations: boolean; + /** + * Controls whether Multi rpc modal is displayed or not + */ + useMultiRpcMigration: boolean; + /** + * Controls whether chain validation is enabled or not + */ + useSafeChainsListValidation: boolean; }; const metadata = { @@ -128,6 +136,8 @@ const metadata = { useTokenDetection: { persist: true, anonymous: true }, smartTransactionsOptInStatus: { persist: true, anonymous: false }, useTransactionSimulations: { persist: true, anonymous: true }, + useMultiRpcMigration: { persist: true, anonymous: true }, + useSafeChainsListValidation: { persist: true, anonymous: true }, }; const name = 'PreferencesController'; @@ -197,6 +207,8 @@ export function getDefaultPreferencesState() { showTestNetworks: false, useNftDetection: false, useTokenDetection: true, + useMultiRpcMigration: true, + useSafeChainsListValidation: true, smartTransactionsOptInStatus: false, useTransactionSimulations: true, }; @@ -483,6 +495,34 @@ export class PreferencesController extends BaseController< } } + /** + * Toggle the use safe chains list validation. + * + * @param useSafeChainsListValidation - Boolean indicating user preference on using chainid.network third part to check safe networks. + */ + setUseSafeChainsListValidation(useSafeChainsListValidation: boolean) { + this.update((state) => { + state.useSafeChainsListValidation = useSafeChainsListValidation; + if (!useSafeChainsListValidation) { + state.useSafeChainsListValidation = false; + } + }); + } + + /** + * Toggle multi rpc migration modal. + * + * @param useMultiRpcMigration - Boolean indicating if the multi rpc modal will be displayed or not. + */ + setUseMultiRpcMigration(useMultiRpcMigration: boolean) { + this.update((state) => { + state.useMultiRpcMigration = useMultiRpcMigration; + if (!useMultiRpcMigration) { + state.useMultiRpcMigration = false; + } + }); + } + /** * A setter for the user to opt into smart transactions *