Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,10 @@
"dependencies": {
"@ethersproject/contracts": "^5.7.0",
"@ethersproject/providers": "^5.7.0",
"@metamask/base-controller": "^8.0.3",
"@metamask/base-controller": "^8.0.4",
"@metamask/controller-utils": "^11.3.0",
"@metamask/eth-query": "^4.0.0",
"@metamask/messenger": "^0.3.0",
"@metamask/utils": "^10.0.0",
"async-mutex": "^0.5.0",
"bignumber.js": "^9.0.1",
Expand Down
95 changes: 64 additions & 31 deletions src/SwapsController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,29 @@ import {
SwapsControllerState,
} from './types';
import * as swapsUtil from './swapsUtil';
import {
NetworkClientId,
NetworkControllerGetNetworkClientByIdAction,
NetworkControllerNetworkDidChangeEvent,
} from '@metamask/network-controller';
import { NetworkClientId } from '@metamask/network-controller';
import { FakeProvider } from './fake-provider.test';
import { Hex } from '@metamask/utils';
import { deriveStateFromMetadata, Messenger } from '@metamask/base-controller';
import { deriveStateFromMetadata } from '@metamask/base-controller/next';
import * as ethQueryModule from '@metamask/eth-query';
import {
Messenger,
MessengerActions,
MessengerEvents,
MOCK_ANY_NAMESPACE,
MockAnyNamespace,
} from '@metamask/messenger';
import * as ethersContracts from '@ethersproject/contracts';
import * as ethersProviders from '@ethersproject/providers';
import { Interface } from '@ethersproject/abi';
import abiERC20 from 'human-standard-token-abi';

type AllActions = MessengerActions<SwapsControllerMessenger>;

type AllEvents = MessengerEvents<SwapsControllerMessenger>;

type RootMessenger = Messenger<MockAnyNamespace, AllActions, AllEvents>;

// Override this module so that its members can be spied on
jest.mock('@metamask/eth-query', () => {
return {
Expand Down Expand Up @@ -524,10 +533,9 @@ describe('SwapsController', () => {
topAssetsLastFetched: 2,
tokensLastFetched: 3,
};
const rootMessenger = new Messenger<
NetworkControllerGetNetworkClientByIdAction,
NetworkControllerNetworkDidChangeEvent
>();
const rootMessenger: RootMessenger = new Messenger({
namespace: MOCK_ANY_NAMESPACE,
});
rootMessenger.registerActionHandler(
'NetworkController:getNetworkClientById',
// @ts-expect-error Intentionally not providing a full
Expand All @@ -545,10 +553,19 @@ describe('SwapsController', () => {
);
},
);
const swapsControllerMessenger = rootMessenger.getRestricted({
name: 'SwapsController',
allowedActions: ['NetworkController:getNetworkClientById'],
allowedEvents: ['NetworkController:networkDidChange'],
const swapsControllerMessenger = new Messenger<
'SwapsController',
AllActions,
AllEvents,
RootMessenger
>({
namespace: 'SwapsController',
parent: rootMessenger,
});
rootMessenger.delegate({
messenger: swapsControllerMessenger,
actions: ['NetworkController:getNetworkClientById'],
events: ['NetworkController:networkDidChange'],
});
const controller = getSwapsController({
options: {
Expand All @@ -575,10 +592,9 @@ describe('SwapsController', () => {
it('clears the main part of state and initializes the cached data for the new chain ID if none previously existed', async () => {
const networkClientId = 'AAAA-BBBB-CCCC-DDDD';
const chainId = BSC_CHAIN_ID;
const rootMessenger = new Messenger<
NetworkControllerGetNetworkClientByIdAction,
NetworkControllerNetworkDidChangeEvent
>();
const rootMessenger: RootMessenger = new Messenger({
namespace: MOCK_ANY_NAMESPACE,
});
rootMessenger.registerActionHandler(
'NetworkController:getNetworkClientById',
// @ts-expect-error Intentionally not providing a full
Expand All @@ -596,10 +612,19 @@ describe('SwapsController', () => {
);
},
);
const swapsControllerMessenger = rootMessenger.getRestricted({
name: 'SwapsController',
allowedActions: ['NetworkController:getNetworkClientById'],
allowedEvents: ['NetworkController:networkDidChange'],
const swapsControllerMessenger = new Messenger<
'SwapsController',
AllActions,
AllEvents,
RootMessenger
>({
namespace: 'SwapsController',
parent: rootMessenger,
});
rootMessenger.delegate({
messenger: swapsControllerMessenger,
actions: ['NetworkController:getNetworkClientById'],
events: ['NetworkController:networkDidChange'],
});
const controller = getSwapsController({
options: {
Expand Down Expand Up @@ -637,10 +662,9 @@ describe('SwapsController', () => {
it('does not change state if the new chain ID is not among the list of supported chain IDs', async () => {
const networkClientId = 'AAAA-BBBB-CCCC-DDDD';
const chainId = '0x99999999';
const rootMessenger = new Messenger<
NetworkControllerGetNetworkClientByIdAction,
NetworkControllerNetworkDidChangeEvent
>();
const rootMessenger: RootMessenger = new Messenger({
namespace: MOCK_ANY_NAMESPACE,
});
rootMessenger.registerActionHandler(
'NetworkController:getNetworkClientById',
// @ts-expect-error Intentionally not providing a full
Expand All @@ -658,10 +682,19 @@ describe('SwapsController', () => {
);
},
);
const swapsControllerMessenger = rootMessenger.getRestricted({
name: 'SwapsController',
allowedActions: ['NetworkController:getNetworkClientById'],
allowedEvents: ['NetworkController:networkDidChange'],
const swapsControllerMessenger = new Messenger<
'SwapsController',
AllActions,
AllEvents,
RootMessenger
>({
namespace: 'SwapsController',
parent: rootMessenger,
});
rootMessenger.delegate({
messenger: swapsControllerMessenger,
actions: ['NetworkController:getNetworkClientById'],
events: ['NetworkController:networkDidChange'],
});
const controller = getSwapsController({
options: {
Expand Down Expand Up @@ -5307,7 +5340,7 @@ describe('SwapsController', () => {
deriveStateFromMetadata(
controller.state,
controller.metadata,
'anonymous',
'includeInDebugSnapshot',
),
).toMatchInlineSnapshot(`
{
Expand Down
66 changes: 34 additions & 32 deletions src/SwapsController.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { Contract } from '@ethersproject/contracts';
import { Web3Provider } from '@ethersproject/providers';
import type { StateMetadata } from '@metamask/base-controller';
import { BaseController } from '@metamask/base-controller';
import {
BaseController,
type StateMetadata,
} from '@metamask/base-controller/next';
import {
gweiDecToWEIBN,
query,
Expand Down Expand Up @@ -75,121 +77,121 @@ const metadata: StateMetadata<SwapsControllerState> = {
quotes: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
quoteValues: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
fetchParams: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
fetchParamsMetaData: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
topAggSavings: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
aggregatorMetadata: {
includeInStateLogs: false,
persist: false,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
tokens: {
includeInStateLogs: false,
persist: false,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
topAssets: {
includeInStateLogs: false,
persist: false,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
approvalTransaction: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
aggregatorMetadataLastFetched: {
includeInStateLogs: true,
persist: false,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
quotesLastFetched: {
includeInStateLogs: true,
persist: false,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
error: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
topAggId: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
tokensLastFetched: {
includeInStateLogs: true,
persist: false,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
isInPolling: {
includeInStateLogs: true,
persist: false,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
pollingCyclesLeft: {
includeInStateLogs: true,
persist: false,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
quoteRefreshSeconds: {
includeInStateLogs: true,
persist: false,
anonymous: true,
includeInDebugSnapshot: true,
usedInUi: true,
},
usedGasEstimate: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
usedCustomGas: {
includeInStateLogs: true,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
chainCache: {
includeInStateLogs: false,
persist: false,
anonymous: false,
includeInDebugSnapshot: false,
usedInUi: true,
},
};
Expand Down Expand Up @@ -670,42 +672,42 @@ export default class SwapsController extends BaseController<
this.#pollCountLimit = pollCountLimit;
this.#supportedChainIds = supportedChainIds;

this.messagingSystem.registerActionHandler(
this.messenger.registerActionHandler(
`SwapsController:updateQuotesWithGasPrice`,
this.updateQuotesWithGasPrice.bind(this),
);

this.messagingSystem.registerActionHandler(
this.messenger.registerActionHandler(
`SwapsController:updateSelectedQuoteWithGasLimit`,
this.updateSelectedQuoteWithGasLimit.bind(this),
);

this.messagingSystem.registerActionHandler(
this.messenger.registerActionHandler(
`SwapsController:startFetchAndSetQuotes`,
this.startFetchAndSetQuotes.bind(this),
);

this.messagingSystem.registerActionHandler(
this.messenger.registerActionHandler(
`SwapsController:fetchTokenWithCache`,
this.fetchTokenWithCache.bind(this),
);

this.messagingSystem.registerActionHandler(
this.messenger.registerActionHandler(
`SwapsController:fetchTopAssetsWithCache`,
this.fetchTopAssetsWithCache.bind(this),
);

this.messagingSystem.registerActionHandler(
this.messenger.registerActionHandler(
`SwapsController:fetchAggregatorMetadataWithCache`,
this.fetchAggregatorMetadataWithCache.bind(this),
);

this.messagingSystem.registerActionHandler(
this.messenger.registerActionHandler(
`SwapsController:stopPollingAndResetState`,
this.stopPollingAndResetState.bind(this),
);

this.messagingSystem.subscribe(
this.messenger.subscribe(
'NetworkController:networkDidChange',
(networkControllerState) => {
const chainId = this.#getChainId(
Expand Down Expand Up @@ -1328,7 +1330,7 @@ export default class SwapsController extends BaseController<
};

#setNetwork(networkClientId: NetworkClientId) {
const networkClient = this.messagingSystem.call(
const networkClient = this.messenger.call(
'NetworkController:getNetworkClientById',
networkClientId,
);
Expand All @@ -1351,7 +1353,7 @@ export default class SwapsController extends BaseController<
}

#getChainId(networkClientId: NetworkClientId) {
const networkClient = this.messagingSystem.call(
const networkClient = this.messenger.call(
'NetworkController:getNetworkClientById',
networkClientId,
);
Expand Down
Loading
Loading