diff --git a/packages/assets-controllers/src/AssetsContractController.test.ts b/packages/assets-controllers/src/AssetsContractController.test.ts index b4ab482c4a1..5526ed3cb02 100644 --- a/packages/assets-controllers/src/AssetsContractController.test.ts +++ b/packages/assets-controllers/src/AssetsContractController.test.ts @@ -1,5 +1,6 @@ import HttpProvider from 'ethjs-provider-http'; import { + ChainId, IPFS_DEFAULT_GATEWAY_URL, NetworkType, } from '@metamask/controller-utils'; @@ -45,6 +46,7 @@ const setupControllers = () => { }); const preferences = new PreferencesController(); const assetsContract = new AssetsContractController({ + chainId: ChainId.mainnet, onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => messenger.subscribe('NetworkController:stateChange', listener), diff --git a/packages/assets-controllers/src/AssetsContractController.ts b/packages/assets-controllers/src/AssetsContractController.ts index 056c6030e71..47e55492d41 100644 --- a/packages/assets-controllers/src/AssetsContractController.ts +++ b/packages/assets-controllers/src/AssetsContractController.ts @@ -83,6 +83,7 @@ export class AssetsContractController extends BaseController< * Creates a AssetsContractController instance. * * @param options - The controller options. + * @param options.chainId - The chain ID of the current network. * @param options.onPreferencesStateChange - Allows subscribing to preference controller state changes. * @param options.onNetworkStateChange - Allows subscribing to network controller state changes. * @param config - Initial options used to configure this controller. @@ -90,9 +91,11 @@ export class AssetsContractController extends BaseController< */ constructor( { + chainId: initialChainId, onPreferencesStateChange, onNetworkStateChange, }: { + chainId: string; onPreferencesStateChange: ( listener: (preferencesState: PreferencesState) => void, ) => void; @@ -107,7 +110,7 @@ export class AssetsContractController extends BaseController< this.defaultConfig = { provider: undefined, ipfsGateway: IPFS_DEFAULT_GATEWAY_URL, - chainId: SupportedTokenDetectionNetworks.mainnet, + chainId: initialChainId, }; this.initialize(); diff --git a/packages/assets-controllers/src/NftController.test.ts b/packages/assets-controllers/src/NftController.test.ts index 9b8ae9a71f9..908c0a09785 100644 --- a/packages/assets-controllers/src/NftController.test.ts +++ b/packages/assets-controllers/src/NftController.test.ts @@ -89,6 +89,7 @@ function setupController({ }; const assetsContract = new AssetsContractController({ + chainId: ChainId.mainnet, onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => onNetworkStateChangeListeners.push(listener), @@ -96,6 +97,7 @@ function setupController({ const onNftAddedSpy = includeOnNftAdded ? jest.fn() : undefined; const nftController = new NftController({ + chainId: ChainId.mainnet, onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => onNetworkStateChangeListeners.push(listener), diff --git a/packages/assets-controllers/src/NftController.ts b/packages/assets-controllers/src/NftController.ts index 86c52cf2c41..045345fd30a 100644 --- a/packages/assets-controllers/src/NftController.ts +++ b/packages/assets-controllers/src/NftController.ts @@ -857,6 +857,7 @@ export class NftController extends BaseController { * Creates an NftController instance. * * @param options - The controller options. + * @param options.chainId - The chain ID of the current network. * @param options.onPreferencesStateChange - Allows subscribing to preference controller state changes. * @param options.onNetworkStateChange - Allows subscribing to network controller state changes. * @param options.getERC721AssetName - Gets the name of the asset at the given address. @@ -872,6 +873,7 @@ export class NftController extends BaseController { */ constructor( { + chainId: initialChainId, onPreferencesStateChange, onNetworkStateChange, getERC721AssetName, @@ -882,6 +884,7 @@ export class NftController extends BaseController { getERC1155TokenURI, onNftAdded, }: { + chainId: string; onPreferencesStateChange: ( listener: (preferencesState: PreferencesState) => void, ) => void; @@ -908,7 +911,7 @@ export class NftController extends BaseController { super(config, state); this.defaultConfig = { selectedAddress: '', - chainId: '', + chainId: initialChainId, ipfsGateway: IPFS_DEFAULT_GATEWAY_URL, openSeaEnabled: false, useIPFSSubdomains: true, diff --git a/packages/assets-controllers/src/NftDetectionController.test.ts b/packages/assets-controllers/src/NftDetectionController.test.ts index bba6d22096e..664c5fa5e88 100644 --- a/packages/assets-controllers/src/NftDetectionController.test.ts +++ b/packages/assets-controllers/src/NftDetectionController.test.ts @@ -26,11 +26,13 @@ describe('NftDetectionController', () => { beforeEach(async () => { preferences = new PreferencesController(); assetsContract = new AssetsContractController({ + chainId: ChainId.mainnet, onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: networkStateChangeNoop, }); nftController = new NftController({ + chainId: ChainId.mainnet, onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: networkStateChangeNoop, getERC721AssetName: @@ -47,6 +49,7 @@ describe('NftDetectionController', () => { }); nftDetection = new NftDetectionController({ + chainId: ChainId.mainnet, onNftsStateChange: (listener) => nftController.subscribe(listener), onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: networkStateChangeNoop, @@ -55,7 +58,7 @@ describe('NftDetectionController', () => { getNftState: () => nftController.state, }); - nftController.configure({ chainId: '1', selectedAddress: '0x1' }); + nftController.configure({ selectedAddress: '0x1' }); preferences.setOpenSeaEnabled(true); preferences.setUseNftDetection(true); @@ -212,6 +215,7 @@ describe('NftDetectionController', () => { ); const nftsDetectionController = new NftDetectionController( { + chainId: ChainId.mainnet, onNftsStateChange: (listener) => nftController.subscribe(listener), onPreferencesStateChange: (listener) => preferences.subscribe(listener), @@ -247,6 +251,7 @@ describe('NftDetectionController', () => { ); new NftDetectionController( { + chainId: ChainId.goerli, onNftsStateChange: (listener) => nftController.subscribe(listener), onPreferencesStateChange: (listener) => preferences.subscribe(listener), diff --git a/packages/assets-controllers/src/NftDetectionController.ts b/packages/assets-controllers/src/NftDetectionController.ts index f8654b500ff..e7da3b82ec4 100644 --- a/packages/assets-controllers/src/NftDetectionController.ts +++ b/packages/assets-controllers/src/NftDetectionController.ts @@ -122,7 +122,7 @@ export interface ApiNftCreator { */ export interface NftDetectionConfig extends BaseConfig { interval: number; - chainId: `0x${string}` | `${number}` | number; + chainId: string; selectedAddress: string; } @@ -204,6 +204,7 @@ export class NftDetectionController extends BaseController< * Creates an NftDetectionController instance. * * @param options - The controller options. + * @param options.chainId - The chain ID of the current network. * @param options.onNftsStateChange - Allows subscribing to assets controller state changes. * @param options.onPreferencesStateChange - Allows subscribing to preferences controller state changes. * @param options.onNetworkStateChange - Allows subscribing to network controller state changes. @@ -215,12 +216,14 @@ export class NftDetectionController extends BaseController< */ constructor( { + chainId: initialChainId, onPreferencesStateChange, onNetworkStateChange, getOpenSeaApiKey, addNft, getNftState, }: { + chainId: string; onNftsStateChange: (listener: (nftsState: NftState) => void) => void; onPreferencesStateChange: ( listener: (preferencesState: PreferencesState) => void, @@ -238,7 +241,7 @@ export class NftDetectionController extends BaseController< super(config, state); this.defaultConfig = { interval: DEFAULT_INTERVAL, - chainId: '1', + chainId: initialChainId, selectedAddress: '', disabled: true, }; @@ -266,7 +269,7 @@ export class NftDetectionController extends BaseController< onNetworkStateChange(({ providerConfig }) => { this.configure({ - chainId: providerConfig.chainId as NftDetectionConfig['chainId'], + chainId: providerConfig.chainId, }); }); this.getOpenSeaApiKey = getOpenSeaApiKey; diff --git a/packages/assets-controllers/src/TokenBalancesController.test.ts b/packages/assets-controllers/src/TokenBalancesController.test.ts index f29af29a15b..a1cbfdb7631 100644 --- a/packages/assets-controllers/src/TokenBalancesController.test.ts +++ b/packages/assets-controllers/src/TokenBalancesController.test.ts @@ -142,6 +142,7 @@ describe('TokenBalancesController', () => { it('should update all balances', async () => { const { messenger, preferences } = setupControllers(); const assets = new TokensController({ + chainId: '1', onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => messenger.subscribe('NetworkController:stateChange', listener), @@ -178,6 +179,7 @@ describe('TokenBalancesController', () => { it('should handle `getERC20BalanceOf` error case', async () => { const { messenger, preferences } = setupControllers(); const assets = new TokensController({ + chainId: '1', onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => messenger.subscribe('NetworkController:stateChange', listener), @@ -226,11 +228,13 @@ describe('TokenBalancesController', () => { it('should subscribe to new sibling assets controllers', async () => { const { messenger, preferences } = setupControllers(); const assetsContract = new AssetsContractController({ + chainId: '1', onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => messenger.subscribe('NetworkController:stateChange', listener), }); const tokensController = new TokensController({ + chainId: '1', onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => messenger.subscribe('NetworkController:stateChange', listener), diff --git a/packages/assets-controllers/src/TokenDetectionController.test.ts b/packages/assets-controllers/src/TokenDetectionController.test.ts index b676dc4abdb..d92eea29613 100644 --- a/packages/assets-controllers/src/TokenDetectionController.test.ts +++ b/packages/assets-controllers/src/TokenDetectionController.test.ts @@ -158,6 +158,7 @@ describe('TokenDetectionController', () => { .callsFake(() => null); tokensController = new TokensController({ + chainId: '1', onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => onNetworkStateChangeListeners.push(listener), diff --git a/packages/assets-controllers/src/TokenRatesController.test.ts b/packages/assets-controllers/src/TokenRatesController.test.ts index 8f08ec376f0..1932d7b21ff 100644 --- a/packages/assets-controllers/src/TokenRatesController.test.ts +++ b/packages/assets-controllers/src/TokenRatesController.test.ts @@ -118,6 +118,7 @@ describe('TokenRatesController', () => { it('should set default state', () => { const controller = new TokenRatesController({ + chainId: '1', onTokensStateChange: sinon.stub(), onCurrencyRateStateChange: sinon.stub(), onNetworkStateChange: sinon.stub(), @@ -129,6 +130,7 @@ describe('TokenRatesController', () => { it('should initialize with the default config', () => { const controller = new TokenRatesController({ + chainId: '1', onTokensStateChange: sinon.stub(), onCurrencyRateStateChange: sinon.stub(), onNetworkStateChange: sinon.stub(), @@ -137,7 +139,7 @@ describe('TokenRatesController', () => { disabled: false, interval: 180000, nativeCurrency: 'eth', - chainId: '', + chainId: '1', tokens: [], threshold: 21600000, }); @@ -145,6 +147,7 @@ describe('TokenRatesController', () => { it('should throw when tokens property is accessed', () => { const controller = new TokenRatesController({ + chainId: '1', onTokensStateChange: sinon.stub(), onCurrencyRateStateChange: sinon.stub(), onNetworkStateChange: sinon.stub(), @@ -160,6 +163,7 @@ describe('TokenRatesController', () => { const times = 5; new TokenRatesController( { + chainId: '1', onTokensStateChange: jest.fn(), onCurrencyRateStateChange: jest.fn(), onNetworkStateChange: jest.fn(), @@ -182,6 +186,7 @@ describe('TokenRatesController', () => { it('should not update rates if disabled', async () => { const controller = new TokenRatesController( { + chainId: '1', onTokensStateChange: sinon.stub(), onCurrencyRateStateChange: sinon.stub(), onNetworkStateChange: sinon.stub(), @@ -200,6 +205,7 @@ describe('TokenRatesController', () => { const mock = sinon.stub(global, 'clearTimeout'); const controller = new TokenRatesController( { + chainId: '1', onTokensStateChange: sinon.stub(), onCurrencyRateStateChange: sinon.stub(), onNetworkStateChange: sinon.stub(), @@ -223,6 +229,7 @@ describe('TokenRatesController', () => { }); const preferences = new PreferencesController(); const tokensController = new TokensController({ + chainId: '1', onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => messenger.subscribe('NetworkController:stateChange', listener), @@ -230,12 +237,13 @@ describe('TokenRatesController', () => { }); const controller = new TokenRatesController( { + chainId: '1', onTokensStateChange: (listener) => tokensController.subscribe(listener), onCurrencyRateStateChange: sinon.stub(), onNetworkStateChange: (listener) => messenger.subscribe('NetworkController:stateChange', listener), }, - { interval: 10, chainId: '1' }, + { interval: 10 }, ); const address = '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359'; expect(controller.state.contractExchangeRates).toStrictEqual({}); @@ -257,6 +265,7 @@ describe('TokenRatesController', () => { it('should handle balance not found in API', async () => { const controller = new TokenRatesController( { + chainId: '1', onTokensStateChange: sinon.stub(), onCurrencyRateStateChange: sinon.stub(), onNetworkStateChange: sinon.stub(), @@ -285,6 +294,7 @@ describe('TokenRatesController', () => { const onNetworkStateChange = sinon.stub(); const controller = new TokenRatesController( { + chainId: '1', onTokensStateChange, onCurrencyRateStateChange, onNetworkStateChange, @@ -311,6 +321,7 @@ describe('TokenRatesController', () => { const onNetworkStateChange = sinon.stub(); const controller = new TokenRatesController( { + chainId: '1', onTokensStateChange, onCurrencyRateStateChange, onNetworkStateChange, @@ -360,13 +371,14 @@ describe('TokenRatesController', () => { const onNetworkStateChange = sinon.stub(); const controller = new TokenRatesController( { + chainId: '137', onTokensStateChange, onCurrencyRateStateChange: sinon.stub(), onNetworkStateChange, }, { interval: 10 }, ); - await controller.configure({ chainId: '137', nativeCurrency: 'MATIC' }); + await controller.configure({ nativeCurrency: 'MATIC' }); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion await tokenStateChangeListener!({ @@ -422,6 +434,7 @@ describe('TokenRatesController', () => { const controller = new TokenRatesController( { + chainId: '1', onTokensStateChange, onNetworkStateChange, onCurrencyRateStateChange: sinon.stub(), @@ -429,7 +442,7 @@ describe('TokenRatesController', () => { { interval: 10 }, ); - await controller.configure({ chainId: '1', nativeCurrency: 'ETH' }); + await controller.configure({ nativeCurrency: 'ETH' }); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion await tokenStateChangeListener!({ @@ -494,11 +507,12 @@ describe('TokenRatesController', () => { const controller = new TokenRatesController( { + chainId: '1', onTokensStateChange, onNetworkStateChange: sinon.stub(), onCurrencyRateStateChange: sinon.stub(), }, - { interval: 10, chainId: '1', nativeCurrency: 'ETH' }, + { interval: 10, nativeCurrency: 'ETH' }, ); expect(controller.state.contractExchangeRates).toStrictEqual({}); diff --git a/packages/assets-controllers/src/TokenRatesController.ts b/packages/assets-controllers/src/TokenRatesController.ts index 90f1bce112f..7a07bfc51cd 100644 --- a/packages/assets-controllers/src/TokenRatesController.ts +++ b/packages/assets-controllers/src/TokenRatesController.ts @@ -164,6 +164,7 @@ export class TokenRatesController extends BaseController< * Creates a TokenRatesController instance. * * @param options - The controller options. + * @param options.chainId - The chain ID of the current network. * @param options.onTokensStateChange - Allows subscribing to token controller state changes. * @param options.onCurrencyRateStateChange - Allows subscribing to currency rate controller state changes. * @param options.onNetworkStateChange - Allows subscribing to network state changes. @@ -172,10 +173,12 @@ export class TokenRatesController extends BaseController< */ constructor( { + chainId: initialChainId, onTokensStateChange, onCurrencyRateStateChange, onNetworkStateChange, }: { + chainId: string; onTokensStateChange: ( listener: (tokensState: TokensState) => void, ) => void; @@ -194,7 +197,7 @@ export class TokenRatesController extends BaseController< disabled: false, interval: 3 * 60 * 1000, nativeCurrency: 'eth', - chainId: '', + chainId: initialChainId, tokens: [], threshold: 6 * 60 * 60 * 1000, }; diff --git a/packages/assets-controllers/src/TokensController.test.ts b/packages/assets-controllers/src/TokensController.test.ts index 49f77776912..9b6e51acee3 100644 --- a/packages/assets-controllers/src/TokensController.test.ts +++ b/packages/assets-controllers/src/TokensController.test.ts @@ -68,11 +68,11 @@ describe('TokensController', () => { const defaultSelectedAddress = '0x1'; preferences = new PreferencesController(); tokensController = new TokensController({ + chainId: ChainId.mainnet, onPreferencesStateChange: (listener) => preferences.subscribe(listener), onNetworkStateChange: (listener) => (onNetworkStateChangeListener = listener), config: { - chainId: ChainId.mainnet, selectedAddress: defaultSelectedAddress, }, messenger, diff --git a/packages/assets-controllers/src/TokensController.ts b/packages/assets-controllers/src/TokensController.ts index abc8ce67b91..d97b0c1cad0 100644 --- a/packages/assets-controllers/src/TokensController.ts +++ b/packages/assets-controllers/src/TokensController.ts @@ -208,6 +208,7 @@ export class TokensController extends BaseController< * Creates a TokensController instance. * * @param options - The controller options. + * @param options.chainId - The chain ID of the current network. * @param options.onPreferencesStateChange - Allows subscribing to preference controller state changes. * @param options.onNetworkStateChange - Allows subscribing to network controller state changes. * @param options.config - Initial options used to configure this controller. @@ -215,12 +216,14 @@ export class TokensController extends BaseController< * @param options.messenger - The controller messenger. */ constructor({ + chainId: initialChainId, onPreferencesStateChange, onNetworkStateChange, config, state, messenger, }: { + chainId: string; onPreferencesStateChange: ( listener: (preferencesState: PreferencesState) => void, ) => void; @@ -235,7 +238,7 @@ export class TokensController extends BaseController< this.defaultConfig = { selectedAddress: '', - chainId: '', + chainId: initialChainId, provider: undefined, ...config, };