Skip to content

Commit 0608851

Browse files
authored
Merge branch 'main' into SOL-225-disable-buttons-for-solana
2 parents 0f3c201 + ce2ce36 commit 0608851

15 files changed

+192
-93
lines changed

app/_locales/en/messages.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/_locales/en_GB/messages.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/scripts/background.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -1049,10 +1049,12 @@ export function setupController(
10491049
updateBadge,
10501050
);
10511051

1052-
controller.controllerMessenger.subscribe(
1053-
METAMASK_CONTROLLER_EVENTS.QUEUED_REQUEST_STATE_CHANGE,
1054-
updateBadge,
1055-
);
1052+
if (process.env.EVM_MULTICHAIN_ENABLED !== true) {
1053+
controller.controllerMessenger.subscribe(
1054+
METAMASK_CONTROLLER_EVENTS.QUEUED_REQUEST_STATE_CHANGE,
1055+
updateBadge,
1056+
);
1057+
}
10561058

10571059
controller.controllerMessenger.subscribe(
10581060
METAMASK_CONTROLLER_EVENTS.METAMASK_NOTIFICATIONS_LIST_UPDATED,

app/scripts/metamask-controller.js

+6-28
Original file line numberDiff line numberDiff line change
@@ -2863,22 +2863,11 @@ export default class MetamaskController extends EventEmitter {
28632863
this.controllerMessenger.subscribe(
28642864
'NetworkController:networkDidChange',
28652865
async () => {
2866-
const filteredChainIds = this.#getAllAddedNetworks().filter(
2867-
(networkId) =>
2868-
this.preferencesController.state.incomingTransactionsPreferences[
2869-
networkId
2870-
],
2871-
);
2872-
2873-
if (filteredChainIds.length > 0) {
2874-
await this.txController.stopIncomingTransactionPolling();
2866+
this.txController.stopIncomingTransactionPolling();
28752867

2876-
await this.txController.updateIncomingTransactions(filteredChainIds);
2868+
await this.txController.updateIncomingTransactions();
28772869

2878-
await this.txController.startIncomingTransactionPolling(
2879-
filteredChainIds,
2880-
);
2881-
}
2870+
this.txController.startIncomingTransactionPolling();
28822871
},
28832872
);
28842873

@@ -7621,9 +7610,7 @@ export default class MetamaskController extends EventEmitter {
76217610
}
76227611
}
76237612

7624-
await this.txController.updateIncomingTransactions([
7625-
this.#getGlobalChainId(),
7626-
]);
7613+
await this.txController.updateIncomingTransactions();
76277614
}
76287615

76297616
_notifyAccountsChange(origin, newAccounts) {
@@ -8090,17 +8077,8 @@ export default class MetamaskController extends EventEmitter {
80908077
}
80918078

80928079
#restartSmartTransactionPoller() {
8093-
const filteredChainIds = this.#getAllAddedNetworks().filter(
8094-
(networkId) =>
8095-
this.preferencesController.state.incomingTransactionsPreferences[
8096-
networkId
8097-
],
8098-
);
8099-
8100-
if (filteredChainIds.length > 0) {
8101-
this.txController.stopIncomingTransactionPolling();
8102-
this.txController.startIncomingTransactionPolling(filteredChainIds);
8103-
}
8080+
this.txController.stopIncomingTransactionPolling();
8081+
this.txController.startIncomingTransactionPolling();
81048082
}
81058083

81068084
/**

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@
325325
"@metamask/snaps-sdk": "^6.19.0",
326326
"@metamask/snaps-utils": "^9.0.1",
327327
"@metamask/solana-wallet-snap": "^1.14.0",
328-
"@metamask/transaction-controller": "^50.0.0",
328+
"@metamask/transaction-controller": "^52.0.0",
329329
"@metamask/user-operation-controller": "^24.0.1",
330330
"@metamask/utils": "^11.1.0",
331331
"@ngraveio/bc-ur": "^1.1.12",

test/e2e/tests/request-queuing/batch-txs-per-dapp-diff-network.spec.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ describe('Request Queuing for Multiple Dapps and Txs on different networks', fun
102102
By.xpath("//p[normalize-space(.)='1 of 2']"),
103103
);
104104

105-
await driver.clickElementAndWaitForWindowToClose({
105+
await driver.clickElement({
106106
text: 'Reject all',
107107
tag: 'button',
108108
});

test/e2e/tests/request-queuing/ui.spec.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,10 @@ describe('Request-queue UI changes', function () {
326326
});
327327

328328
// Reject this transaction, wait for second confirmation window to close, third to display
329-
await rejectTransactionRedesign(driver);
329+
await driver.clickElement({
330+
tag: 'button',
331+
text: 'Cancel',
332+
});
330333
await driver.delay(veryLargeDelayMs);
331334

332335
if (!IS_FIREFOX) {

ui/pages/confirmations/components/confirm/info/hooks/useSupportsEIP1559.test.ts

+28
Original file line numberDiff line numberDiff line change
@@ -40,4 +40,32 @@ describe('useSupportsEIP1559', () => {
4040

4141
expect(result.current.supportsEIP1559).toMatchInlineSnapshot(`false`);
4242
});
43+
44+
it('returns true if transation is on a network supporting EIP-1559 even if current network does not support it', () => {
45+
const transactionMeta = genUnapprovedContractInteractionConfirmation({
46+
chainId: 'DUMMY',
47+
}) as TransactionMeta;
48+
49+
const { result: legacyResult } = renderHookWithProvider(
50+
() => useSupportsEIP1559(transactionMeta),
51+
{
52+
...mockState,
53+
metamask: {
54+
...mockState.metamask,
55+
selectedNetworkClientId: 'DUMMY',
56+
},
57+
},
58+
);
59+
60+
expect(legacyResult.current.supportsEIP1559).toBe(false);
61+
62+
const { result: support1559Result } = renderHookWithProvider(
63+
() => useSupportsEIP1559(transactionMeta),
64+
mockState,
65+
);
66+
(transactionMeta.txParams as Record<string, unknown>).networkClientId =
67+
'0x1';
68+
69+
expect(support1559Result.current.supportsEIP1559).toBe(true);
70+
});
4371
});

ui/pages/confirmations/components/confirm/info/hooks/useSupportsEIP1559.ts

+4-5
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,16 @@ import {
55
import { useSelector } from 'react-redux';
66
import { isLegacyTransaction } from '../../../../../../helpers/utils/transactions.util';
77
import { checkNetworkAndAccountSupports1559 } from '../../../../../../selectors';
8-
import { getSelectedNetworkClientId } from '../../../../../../../shared/modules/selectors/networks';
98

109
export function useSupportsEIP1559(transactionMeta: TransactionMeta) {
10+
const { networkClientId, txParams } = transactionMeta ?? {};
11+
1112
const isLegacyTxn =
12-
transactionMeta?.txParams?.type === TransactionEnvelopeType.legacy ||
13+
txParams?.type === TransactionEnvelopeType.legacy ||
1314
isLegacyTransaction(transactionMeta);
1415

15-
const selectedNetworkClientId = useSelector(getSelectedNetworkClientId);
16-
1716
const networkAndAccountSupports1559 = useSelector((state) =>
18-
checkNetworkAndAccountSupports1559(state, selectedNetworkClientId),
17+
checkNetworkAndAccountSupports1559(state, networkClientId),
1918
);
2019

2120
const supportsEIP1559 = networkAndAccountSupports1559 && !isLegacyTxn;

ui/pages/confirmations/hooks/useCurrentConfirmation.test.ts

-9
Original file line numberDiff line numberDiff line change
@@ -158,15 +158,6 @@ describe('useCurrentConfirmation', () => {
158158
expect(currentConfirmation).toBeUndefined();
159159
});
160160

161-
it('returns undefined if transaction has incorrect chain ID', () => {
162-
const currentConfirmation = runHook({
163-
pendingApprovals: [{ ...APPROVAL_MOCK, type: ApprovalType.Transaction }],
164-
transaction: { ...TRANSACTION_MOCK, chainId: '0x123' },
165-
});
166-
167-
expect(currentConfirmation).toBeUndefined();
168-
});
169-
170161
it('returns undefined if transaction is not unapproved', () => {
171162
const currentConfirmation = runHook({
172163
pendingApprovals: [{ ...APPROVAL_MOCK, type: ApprovalType.Transaction }],

ui/selectors/confirm-transaction.js

+8-31
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@ import {
2525
subtractHexes,
2626
sumHexes,
2727
} from '../../shared/modules/conversion.utils';
28-
import {
29-
getProviderConfig,
30-
getCurrentChainId,
31-
} from '../../shared/modules/selectors/networks';
28+
import { getProviderConfig } from '../../shared/modules/selectors/networks';
3229
import { getAveragePriceEstimateInHexWEI } from './custom-gas';
3330
import {
3431
checkNetworkAndAccountSupports1559,
@@ -52,22 +49,19 @@ export const unconfirmedTransactionsListSelector = createSelector(
5249
unapprovedDecryptMsgsSelector,
5350
unapprovedEncryptionPublicKeyMsgsSelector,
5451
unapprovedTypedMessagesSelector,
55-
getCurrentChainId,
5652
(
5753
unapprovedTxs = {},
5854
unapprovedPersonalMsgs = {},
5955
unapprovedDecryptMsgs = {},
6056
unapprovedEncryptionPublicKeyMsgs = {},
6157
unapprovedTypedMessages = {},
62-
chainId,
6358
) =>
6459
txHelper(
6560
unapprovedTxs,
6661
unapprovedPersonalMsgs,
6762
unapprovedDecryptMsgs,
6863
unapprovedEncryptionPublicKeyMsgs,
6964
unapprovedTypedMessages,
70-
chainId,
7165
) || [],
7266
);
7367

@@ -77,36 +71,19 @@ export const unconfirmedTransactionsHashSelector = createSelector(
7771
unapprovedDecryptMsgsSelector,
7872
unapprovedEncryptionPublicKeyMsgsSelector,
7973
unapprovedTypedMessagesSelector,
80-
getCurrentChainId,
8174
(
8275
unapprovedTxs = {},
8376
unapprovedPersonalMsgs = {},
8477
unapprovedDecryptMsgs = {},
8578
unapprovedEncryptionPublicKeyMsgs = {},
8679
unapprovedTypedMessages = {},
87-
chainId,
88-
) => {
89-
const filteredUnapprovedTxs = Object.keys(unapprovedTxs).reduce(
90-
(acc, address) => {
91-
const transactions = { ...acc };
92-
93-
if (unapprovedTxs[address].chainId === chainId) {
94-
transactions[address] = unapprovedTxs[address];
95-
}
96-
97-
return transactions;
98-
},
99-
{},
100-
);
101-
102-
return {
103-
...filteredUnapprovedTxs,
104-
...unapprovedPersonalMsgs,
105-
...unapprovedDecryptMsgs,
106-
...unapprovedEncryptionPublicKeyMsgs,
107-
...unapprovedTypedMessages,
108-
};
109-
},
80+
) => ({
81+
...unapprovedTxs,
82+
...unapprovedPersonalMsgs,
83+
...unapprovedDecryptMsgs,
84+
...unapprovedEncryptionPublicKeyMsgs,
85+
...unapprovedTypedMessages,
86+
}),
11087
);
11188

11289
export const unconfirmedMessagesHashSelector = createSelector(

ui/selectors/confirm-transaction.test.js

+54-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1+
import {
2+
TransactionStatus,
3+
TransactionType,
4+
} from '@metamask/transaction-controller';
15
import { CHAIN_IDS } from '../../shared/constants/network';
26
import { mockNetworkState } from '../../test/stub/networks';
3-
import { conversionRateSelector } from './confirm-transaction';
7+
import {
8+
conversionRateSelector,
9+
unconfirmedTransactionsHashSelector,
10+
} from './confirm-transaction';
411

512
describe('Confirm Transaction Selector', () => {
613
describe('conversionRateSelector', () => {
@@ -18,4 +25,50 @@ describe('Confirm Transaction Selector', () => {
1825
expect(conversionRateSelector(state)).toStrictEqual(556.12);
1926
});
2027
});
28+
29+
describe('unconfirmedTransactionsHashSelector', () => {
30+
it('returns transactions from all networks', () => {
31+
const state = {
32+
metamask: {
33+
incomingTransactionsPreferences: true,
34+
transactions: [
35+
{
36+
id: 1,
37+
chainId: '0x1',
38+
status: TransactionStatus.unapproved,
39+
type: TransactionType.incoming,
40+
txParams: { to: '0xSelectedAddress' },
41+
},
42+
{
43+
id: 2,
44+
chainId: '0x2',
45+
status: TransactionStatus.unapproved,
46+
type: TransactionType.incoming,
47+
txParams: { to: '0xOtherAddress' },
48+
},
49+
{
50+
id: 3,
51+
chainId: '0x3',
52+
status: TransactionStatus.unapproved,
53+
type: TransactionType.outgoing,
54+
txParams: { to: '0xSelectedAddress' },
55+
},
56+
{
57+
id: 4,
58+
chainId: '0x1',
59+
status: TransactionStatus.unapproved,
60+
type: TransactionType.incoming,
61+
txParams: { to: '0xSelectedAddress' },
62+
},
63+
],
64+
},
65+
};
66+
expect(unconfirmedTransactionsHashSelector(state)).toStrictEqual({
67+
1: state.metamask.transactions[0],
68+
2: state.metamask.transactions[1],
69+
3: state.metamask.transactions[2],
70+
4: state.metamask.transactions[3],
71+
});
72+
});
73+
});
2174
});

ui/selectors/transactions.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ export const incomingTxListSelectorAllChains = createDeepEqualSelector(
107107

108108
export const getUnapprovedTransactions = createDeepEqualSelector(
109109
(state) => {
110-
const currentNetworkTransactions = getCurrentNetworkTransactions(state);
111-
return filterAndShapeUnapprovedTransactions(currentNetworkTransactions);
110+
const transactions = getTransactions(state);
111+
return filterAndShapeUnapprovedTransactions(transactions);
112112
},
113113
(transactions) => transactions,
114114
);

0 commit comments

Comments
 (0)