Skip to content

Commit 3e9ea7b

Browse files
authored
Merge branch 'main' into fix/remove-supported-chains-check-ppom
2 parents 282af7c + 9f6f506 commit 3e9ea7b

22 files changed

+294
-114
lines changed

app/images/unichain.svg

+10
Loading

app/scripts/constants/sentry-state.ts

+3
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ export const SENTRY_BACKGROUND_STATE = {
105105
accountsAssets: false,
106106
assetsMetadata: false,
107107
},
108+
MultiChainAssetsRatesController: {
109+
assetsRates: false,
110+
},
108111
BridgeController: {
109112
bridgeState: {
110113
bridgeFeatureFlags: {

app/scripts/controller-init/controller-list.ts

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { TransactionUpdateController } from '@metamask-institutional/transaction
1313
import { AccountsController } from '@metamask/accounts-controller';
1414
import {
1515
MultichainAssetsController,
16+
MultiChainAssetsRatesController,
1617
MultichainBalancesController,
1718
} from '@metamask/assets-controllers';
1819
import { MultichainTransactionsController } from '@metamask/multichain-transactions-controller';
@@ -42,6 +43,7 @@ export type Controller =
4243
| JsonSnapsRegistry
4344
| KeyringController
4445
| MultichainAssetsController
46+
| MultiChainAssetsRatesController
4547
| MultichainBalancesController
4648
| MultichainTransactionsController
4749
| NetworkController
@@ -73,6 +75,7 @@ export type ControllerFlatState = AccountsController['state'] &
7375
JsonSnapsRegistry['state'] &
7476
KeyringController['state'] &
7577
MultichainAssetsController['state'] &
78+
MultiChainAssetsRatesController['state'] &
7679
MultichainBalancesController['state'] &
7780
MultichainTransactionsController['state'] &
7881
NetworkController['state'] &

app/scripts/controller-init/messengers/index.ts

+5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
getMultichainBalancesControllerMessenger,
2323
getMultichainTransactionsControllerMessenger,
2424
getMultichainAssetsControllerMessenger,
25+
getMultiChainAssetsRatesControllerMessenger,
2526
} from './multichain';
2627

2728
export const CONTROLLER_MESSENGERS = {
@@ -37,6 +38,10 @@ export const CONTROLLER_MESSENGERS = {
3738
getMessenger: getMultichainAssetsControllerMessenger,
3839
getInitMessenger: noop,
3940
},
41+
MultiChainAssetsRatesController: {
42+
getMessenger: getMultiChainAssetsRatesControllerMessenger,
43+
getInitMessenger: noop,
44+
},
4045
MultichainBalancesController: {
4146
getMessenger: getMultichainBalancesControllerMessenger,
4247
getInitMessenger: noop,
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
export { getMultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger';
2+
export { getMultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger';
23
export { getMultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger';
34
export { getMultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger';
45

56
export type { MultichainAssetsControllerMessenger } from './multichain-assets-controller-messenger';
7+
export type { MultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger';
68
export type { MultichainBalancesControllerMessenger } from './multichain-balances-controller-messenger';
79
export type { MultichainTransactionsControllerMessenger } from './multichain-transactions-controller-messenger';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Messenger, RestrictedMessenger } from '@metamask/base-controller';
2+
import { getMultiChainAssetsRatesControllerMessenger } from './multichain-assets-rates-controller-messenger';
3+
4+
describe('getMultiChainAssetsRatesControllerMessenger', () => {
5+
it('returns a restricted messenger', () => {
6+
const messenger = new Messenger<never, never>();
7+
const multichainAssetsRatesControllerMessenger =
8+
getMultiChainAssetsRatesControllerMessenger(messenger);
9+
10+
expect(multichainAssetsRatesControllerMessenger).toBeInstanceOf(
11+
RestrictedMessenger,
12+
);
13+
});
14+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
import { Messenger } from '@metamask/base-controller';
2+
import {
3+
AccountsControllerAccountAddedEvent,
4+
AccountsControllerListMultichainAccountsAction,
5+
} from '@metamask/accounts-controller';
6+
import {
7+
CurrencyRateStateChange,
8+
GetCurrencyRateState,
9+
MultichainAssetsControllerStateChangeEvent,
10+
MultichainAssetsControllerGetStateAction,
11+
} from '@metamask/assets-controllers';
12+
import {
13+
KeyringControllerLockEvent,
14+
KeyringControllerUnlockEvent,
15+
} from '@metamask/keyring-controller';
16+
import { HandleSnapRequest } from '@metamask/snaps-controllers';
17+
18+
type Actions =
19+
| HandleSnapRequest
20+
| AccountsControllerListMultichainAccountsAction
21+
| GetCurrencyRateState
22+
| MultichainAssetsControllerGetStateAction;
23+
24+
type Events =
25+
| KeyringControllerLockEvent
26+
| KeyringControllerUnlockEvent
27+
| AccountsControllerAccountAddedEvent
28+
| CurrencyRateStateChange
29+
| MultichainAssetsControllerStateChangeEvent;
30+
31+
export type MultiChainAssetsRatesControllerMessenger = ReturnType<
32+
typeof getMultiChainAssetsRatesControllerMessenger
33+
>;
34+
35+
/**
36+
* Get a restricted messenger for the Multichain Assets Rate controller. This is scoped to the
37+
* actions and events that the multichain Assets Rate controller is allowed to handle.
38+
*
39+
* @param messenger - The controller messenger to restrict.
40+
* @returns The restricted controller messenger.
41+
*/
42+
export function getMultiChainAssetsRatesControllerMessenger(
43+
messenger: Messenger<Actions, Events>,
44+
) {
45+
return messenger.getRestricted({
46+
name: 'MultiChainAssetsRatesController',
47+
allowedEvents: [
48+
'AccountsController:accountAdded',
49+
'KeyringController:lock',
50+
'KeyringController:unlock',
51+
'CurrencyRateController:stateChange',
52+
'MultichainAssetsController:stateChange',
53+
],
54+
allowedActions: [
55+
'AccountsController:listMultichainAccounts',
56+
'SnapController:handleRequest',
57+
'CurrencyRateController:getState',
58+
'MultichainAssetsController:getState',
59+
],
60+
});
61+
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export { MultichainAssetsControllerInit } from './multichain-assets-controller-init';
22
export { MultichainBalancesControllerInit } from './multichain-balances-controller-init';
33
export { MultichainTransactionsControllerInit } from './multichain-transactions-controller-init';
4+
export { MultiChainAssetsRatesControllerInit } from './multichain-rates-assets-controller-init';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import { MultiChainAssetsRatesController } from '@metamask/assets-controllers';
2+
import { Messenger } from '@metamask/base-controller';
3+
import { buildControllerInitRequestMock } from '../test/utils';
4+
import { ControllerInitRequest } from '../types';
5+
import {
6+
getMultiChainAssetsRatesControllerMessenger,
7+
MultiChainAssetsRatesControllerMessenger,
8+
} from '../messengers/multichain';
9+
import { MultiChainAssetsRatesControllerInit } from './multichain-rates-assets-controller-init';
10+
11+
jest.mock('@metamask/assets-controllers');
12+
13+
function buildInitRequestMock(): jest.Mocked<
14+
ControllerInitRequest<MultiChainAssetsRatesControllerMessenger>
15+
> {
16+
const baseControllerMessenger = new Messenger();
17+
18+
return {
19+
...buildControllerInitRequestMock(),
20+
controllerMessenger: getMultiChainAssetsRatesControllerMessenger(
21+
baseControllerMessenger,
22+
),
23+
initMessenger: undefined,
24+
};
25+
}
26+
27+
describe('MultiChainAssetsRatesControllerInit', () => {
28+
const multiChainAssetsRatesControllerClassMock = jest.mocked(
29+
MultiChainAssetsRatesController,
30+
);
31+
32+
beforeEach(() => {
33+
jest.resetAllMocks();
34+
});
35+
36+
it('returns controller instance', () => {
37+
const requestMock = buildInitRequestMock();
38+
expect(
39+
MultiChainAssetsRatesControllerInit(requestMock).controller,
40+
).toBeInstanceOf(MultiChainAssetsRatesController);
41+
});
42+
43+
it('initializes with correct messenger and state', () => {
44+
const requestMock = buildInitRequestMock();
45+
MultiChainAssetsRatesControllerInit(requestMock);
46+
47+
expect(multiChainAssetsRatesControllerClassMock).toHaveBeenCalledWith({
48+
messenger: requestMock.controllerMessenger,
49+
state: requestMock.persistedState.MultiChainAssetsRatesController,
50+
});
51+
});
52+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { MultiChainAssetsRatesController } from '@metamask/assets-controllers';
2+
import { ControllerInitFunction } from '../types';
3+
import { MultiChainAssetsRatesControllerMessenger } from '../messengers/multichain';
4+
5+
/**
6+
* Initialize the Multichain Assets Rate controller.
7+
*
8+
* @param request - The request object.
9+
* @param request.controllerMessenger - The messenger to use for the controller.
10+
* @param request.persistedState - The persisted state of the extension.
11+
* @returns The initialized controller.
12+
*/
13+
export const MultiChainAssetsRatesControllerInit: ControllerInitFunction<
14+
MultiChainAssetsRatesController,
15+
MultiChainAssetsRatesControllerMessenger
16+
> = ({ controllerMessenger, persistedState }) => {
17+
const controller = new MultiChainAssetsRatesController({
18+
messenger: controllerMessenger,
19+
state: persistedState.MultiChainAssetsRatesController,
20+
});
21+
22+
return {
23+
controller,
24+
};
25+
};

app/scripts/controller-init/utils.ts

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ export type ControllersToInitialize =
4040
| 'CronjobController'
4141
| 'ExecutionService'
4242
| 'MultichainAssetsController'
43+
| 'MultiChainAssetsRatesController'
4344
| 'MultichainBalancesController'
4445
| 'MultichainTransactionsController'
4546
| 'RateLimitController'

app/scripts/metamask-controller.js

+5
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,7 @@ import {
363363
MultichainAssetsControllerInit,
364364
MultichainTransactionsControllerInit,
365365
MultichainBalancesControllerInit,
366+
MultiChainAssetsRatesControllerInit,
366367
} from './controller-init/multichain';
367368
///: END:ONLY_INCLUDE_IF
368369
import { TransactionControllerInit } from './controller-init/confirmations/transaction-controller-init';
@@ -2054,6 +2055,7 @@ export default class MetamaskController extends EventEmitter {
20542055
TransactionController: TransactionControllerInit,
20552056
///: BEGIN:ONLY_INCLUDE_IF(build-flask)
20562057
MultichainAssetsController: MultichainAssetsControllerInit,
2058+
MultiChainAssetsRatesController: MultiChainAssetsRatesControllerInit,
20572059
MultichainBalancesController: MultichainBalancesControllerInit,
20582060
MultichainTransactionsController: MultichainTransactionsControllerInit,
20592061
///: END:ONLY_INCLUDE_IF
@@ -2091,6 +2093,8 @@ export default class MetamaskController extends EventEmitter {
20912093
controllersByName.MultichainBalancesController;
20922094
this.multichainTransactionsController =
20932095
controllersByName.MultichainTransactionsController;
2096+
this.multiChainAssetsRatesController =
2097+
controllersByName.MultiChainAssetsRatesController;
20942098
///: END:ONLY_INCLUDE_IF
20952099

20962100
this.controllerMessenger.subscribe(
@@ -2266,6 +2270,7 @@ export default class MetamaskController extends EventEmitter {
22662270
MultichainAssetsController: this.multichainAssetsController,
22672271
MultichainBalancesController: this.multichainBalancesController,
22682272
MultichainTransactionsController: this.multichainTransactionsController,
2273+
MultiChainAssetsRatesController: this.multiChainAssetsRatesController,
22692274
///: END:ONLY_INCLUDE_IF
22702275
NetworkController: this.networkController,
22712276
KeyringController: this.keyringController,

lavamoat/browserify/beta/policy.json

+2-24
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@
412412
"@ethersproject/bytes": true,
413413
"ethers>@ethersproject/logger": true,
414414
"ethers>@ethersproject/properties": true,
415-
"ethers>@ethersproject/signing-key>elliptic": true
415+
"@metamask/ppom-validator>elliptic": true
416416
}
417417
},
418418
"ethers>@ethersproject/solidity": {
@@ -3916,17 +3916,6 @@
39163916
"stream-browserify": true
39173917
}
39183918
},
3919-
"ethers>@ethersproject/signing-key>elliptic": {
3920-
"packages": {
3921-
"bn.js": true,
3922-
"@metamask/ppom-validator>elliptic>brorand": true,
3923-
"ethers>@ethersproject/sha2>hash.js": true,
3924-
"@metamask/ppom-validator>elliptic>hmac-drbg": true,
3925-
"pumpify>inherits": true,
3926-
"@metamask/ppom-validator>elliptic>minimalistic-assert": true,
3927-
"@metamask/ppom-validator>elliptic>minimalistic-crypto-utils": true
3928-
}
3929-
},
39303919
"@metamask/ppom-validator>elliptic": {
39313920
"packages": {
39323921
"bn.js": true,
@@ -3938,17 +3927,6 @@
39383927
"@metamask/ppom-validator>elliptic>minimalistic-crypto-utils": true
39393928
}
39403929
},
3941-
"eth-lattice-keyring>gridplus-sdk>elliptic": {
3942-
"packages": {
3943-
"bn.js": true,
3944-
"@metamask/ppom-validator>elliptic>brorand": true,
3945-
"ethers>@ethersproject/sha2>hash.js": true,
3946-
"@metamask/ppom-validator>elliptic>hmac-drbg": true,
3947-
"pumpify>inherits": true,
3948-
"@metamask/ppom-validator>elliptic>minimalistic-assert": true,
3949-
"@metamask/ppom-validator>elliptic>minimalistic-crypto-utils": true
3950-
}
3951-
},
39523930
"@metamask/eth-token-tracker>deep-equal>es-get-iterator": {
39533931
"packages": {
39543932
"string.prototype.matchall>call-bind": true,
@@ -4266,7 +4244,7 @@
42664244
"ethereumjs-util>ethereum-cryptography>bs58check": true,
42674245
"browserify>buffer": true,
42684246
"@ethereumjs/tx>@ethereumjs/common>crc-32": true,
4269-
"eth-lattice-keyring>gridplus-sdk>elliptic": true,
4247+
"@metamask/ppom-validator>elliptic": true,
42704248
"eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser": true,
42714249
"ethers>@ethersproject/sha2>hash.js": true,
42724250
"eth-ens-namehash>js-sha3": true,

lavamoat/browserify/flask/policy.json

+2-24
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,7 @@
412412
"@ethersproject/bytes": true,
413413
"ethers>@ethersproject/logger": true,
414414
"ethers>@ethersproject/properties": true,
415-
"ethers>@ethersproject/signing-key>elliptic": true
415+
"@metamask/ppom-validator>elliptic": true
416416
}
417417
},
418418
"ethers>@ethersproject/solidity": {
@@ -3959,17 +3959,6 @@
39593959
"stream-browserify": true
39603960
}
39613961
},
3962-
"ethers>@ethersproject/signing-key>elliptic": {
3963-
"packages": {
3964-
"bn.js": true,
3965-
"@metamask/ppom-validator>elliptic>brorand": true,
3966-
"ethers>@ethersproject/sha2>hash.js": true,
3967-
"@metamask/ppom-validator>elliptic>hmac-drbg": true,
3968-
"pumpify>inherits": true,
3969-
"@metamask/ppom-validator>elliptic>minimalistic-assert": true,
3970-
"@metamask/ppom-validator>elliptic>minimalistic-crypto-utils": true
3971-
}
3972-
},
39733962
"@metamask/ppom-validator>elliptic": {
39743963
"packages": {
39753964
"bn.js": true,
@@ -3981,17 +3970,6 @@
39813970
"@metamask/ppom-validator>elliptic>minimalistic-crypto-utils": true
39823971
}
39833972
},
3984-
"eth-lattice-keyring>gridplus-sdk>elliptic": {
3985-
"packages": {
3986-
"bn.js": true,
3987-
"@metamask/ppom-validator>elliptic>brorand": true,
3988-
"ethers>@ethersproject/sha2>hash.js": true,
3989-
"@metamask/ppom-validator>elliptic>hmac-drbg": true,
3990-
"pumpify>inherits": true,
3991-
"@metamask/ppom-validator>elliptic>minimalistic-assert": true,
3992-
"@metamask/ppom-validator>elliptic>minimalistic-crypto-utils": true
3993-
}
3994-
},
39953973
"@metamask/eth-token-tracker>deep-equal>es-get-iterator": {
39963974
"packages": {
39973975
"string.prototype.matchall>call-bind": true,
@@ -4309,7 +4287,7 @@
43094287
"ethereumjs-util>ethereum-cryptography>bs58check": true,
43104288
"browserify>buffer": true,
43114289
"@ethereumjs/tx>@ethereumjs/common>crc-32": true,
4312-
"eth-lattice-keyring>gridplus-sdk>elliptic": true,
4290+
"@metamask/ppom-validator>elliptic": true,
43134291
"eth-lattice-keyring>gridplus-sdk>eth-eip712-util-browser": true,
43144292
"ethers>@ethersproject/sha2>hash.js": true,
43154293
"eth-ens-namehash>js-sha3": true,

0 commit comments

Comments
 (0)