From b2fa352e86d06f739388391949e83d12e81ac3f8 Mon Sep 17 00:00:00 2001 From: Matthew Walsh Date: Tue, 17 Sep 2024 11:56:13 +0100 Subject: [PATCH 1/4] fix: incomplete transactions on startup (#26963) Upgrade the `TransactionController` to `37.0.0`. Prevent various scenarios triggering the `signed or submitted` alert . Remove unapproved transaction fixtures as no longer supported. --- .storybook/main.js | 1 + app/scripts/lib/ppom/ppom-middleware.test.ts | 1 + app/scripts/metamask-controller.js | 8 +- lavamoat/browserify/beta/policy.json | 10 +-- lavamoat/browserify/flask/policy.json | 10 +-- lavamoat/browserify/main/policy.json | 10 +-- lavamoat/browserify/mmi/policy.json | 10 +-- package.json | 2 +- test/e2e/page-objects/flows/transaction.ts | 40 ++++++++++ .../pages/confirmations/legacy/navigation.ts | 57 +++++++++++++ test/e2e/page-objects/pages/test-dapp.ts | 37 +++++++++ .../contract-interaction-redesign.spec.ts | 15 ++-- .../tests/transaction/edit-gas-fee.spec.js | 4 + .../transaction/navigate-transactions.spec.js | 79 ++++++++----------- test/e2e/tests/transaction/send-edit.spec.js | 8 +- yarn.lock | 24 +++--- 16 files changed, 211 insertions(+), 105 deletions(-) create mode 100644 test/e2e/page-objects/flows/transaction.ts create mode 100644 test/e2e/page-objects/pages/confirmations/legacy/navigation.ts create mode 100644 test/e2e/page-objects/pages/test-dapp.ts diff --git a/.storybook/main.js b/.storybook/main.js index 7f38a53a733f..d63d924aa2e2 100644 --- a/.storybook/main.js +++ b/.storybook/main.js @@ -48,6 +48,7 @@ module.exports = { config.resolve.alias['../../../../../../store/actions'] = require.resolve( '../ui/__mocks__/actions.js', ); + // Import within controller-utils crashes storybook. config.resolve.alias['@ethereumjs/util'] = require.resolve( '../ui/__mocks__/ethereumjs-util.js', ); diff --git a/app/scripts/lib/ppom/ppom-middleware.test.ts b/app/scripts/lib/ppom/ppom-middleware.test.ts index 4adfeb3b8a6c..780d6eb9f5e2 100644 --- a/app/scripts/lib/ppom/ppom-middleware.test.ts +++ b/app/scripts/lib/ppom/ppom-middleware.test.ts @@ -17,6 +17,7 @@ import { import { SecurityAlertResponse } from './types'; jest.mock('./ppom-util'); +jest.mock('@metamask/controller-utils'); const SECURITY_ALERT_ID_MOCK = '123'; const INTERNAL_ACCOUNT_ADDRESS = '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b'; diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index cfaf0474d872..dcea6dfdc876 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -4845,11 +4845,11 @@ export default class MetamaskController extends EventEmitter { * by creating a new transaction. * * @param {number} originalTxId - the id of the txMeta that you want to - * attempt to cancel + * attempt to cancel * @param {import( * './controllers/transactions' * ).CustomGasSettings} [customGasSettings] - overrides to use for gas params - * instead of allowing this method to generate them + * instead of allowing this method to generate them * @param options * @returns {object} MetaMask state */ @@ -4868,11 +4868,11 @@ export default class MetamaskController extends EventEmitter { * by creating a new transaction. * * @param {number} originalTxId - the id of the txMeta that you want to - * attempt to speed up + * attempt to speed up * @param {import( * './controllers/transactions' * ).CustomGasSettings} [customGasSettings] - overrides to use for gas params - * instead of allowing this method to generate them + * instead of allowing this method to generate them * @param options * @returns {object} MetaMask state */ diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 8558b0b01b56..665e3077055f 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -3256,6 +3256,7 @@ "@ethersproject/abi": true, "@ethersproject/contracts": true, "@ethersproject/providers": true, + "@metamask/base-controller": true, "@metamask/controller-utils": true, "@metamask/eth-query": true, "@metamask/gas-fee-controller": true, @@ -3263,7 +3264,6 @@ "@metamask/name-controller>async-mutex": true, "@metamask/network-controller": true, "@metamask/rpc-errors": true, - "@metamask/transaction-controller>@metamask/base-controller": true, "@metamask/transaction-controller>@metamask/nonce-tracker": true, "@metamask/transaction-controller>@metamask/utils": true, "bn.js": true, @@ -3275,14 +3275,6 @@ "webpack>events": true } }, - "@metamask/transaction-controller>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/transaction-controller>@metamask/nonce-tracker": { "packages": { "@ethersproject/providers": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 8558b0b01b56..665e3077055f 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -3256,6 +3256,7 @@ "@ethersproject/abi": true, "@ethersproject/contracts": true, "@ethersproject/providers": true, + "@metamask/base-controller": true, "@metamask/controller-utils": true, "@metamask/eth-query": true, "@metamask/gas-fee-controller": true, @@ -3263,7 +3264,6 @@ "@metamask/name-controller>async-mutex": true, "@metamask/network-controller": true, "@metamask/rpc-errors": true, - "@metamask/transaction-controller>@metamask/base-controller": true, "@metamask/transaction-controller>@metamask/nonce-tracker": true, "@metamask/transaction-controller>@metamask/utils": true, "bn.js": true, @@ -3275,14 +3275,6 @@ "webpack>events": true } }, - "@metamask/transaction-controller>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/transaction-controller>@metamask/nonce-tracker": { "packages": { "@ethersproject/providers": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 8558b0b01b56..665e3077055f 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -3256,6 +3256,7 @@ "@ethersproject/abi": true, "@ethersproject/contracts": true, "@ethersproject/providers": true, + "@metamask/base-controller": true, "@metamask/controller-utils": true, "@metamask/eth-query": true, "@metamask/gas-fee-controller": true, @@ -3263,7 +3264,6 @@ "@metamask/name-controller>async-mutex": true, "@metamask/network-controller": true, "@metamask/rpc-errors": true, - "@metamask/transaction-controller>@metamask/base-controller": true, "@metamask/transaction-controller>@metamask/nonce-tracker": true, "@metamask/transaction-controller>@metamask/utils": true, "bn.js": true, @@ -3275,14 +3275,6 @@ "webpack>events": true } }, - "@metamask/transaction-controller>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/transaction-controller>@metamask/nonce-tracker": { "packages": { "@ethersproject/providers": true, diff --git a/lavamoat/browserify/mmi/policy.json b/lavamoat/browserify/mmi/policy.json index 2021f5491abf..e953c9b1c410 100644 --- a/lavamoat/browserify/mmi/policy.json +++ b/lavamoat/browserify/mmi/policy.json @@ -3348,6 +3348,7 @@ "@ethersproject/abi": true, "@ethersproject/contracts": true, "@ethersproject/providers": true, + "@metamask/base-controller": true, "@metamask/controller-utils": true, "@metamask/eth-query": true, "@metamask/gas-fee-controller": true, @@ -3355,7 +3356,6 @@ "@metamask/name-controller>async-mutex": true, "@metamask/network-controller": true, "@metamask/rpc-errors": true, - "@metamask/transaction-controller>@metamask/base-controller": true, "@metamask/transaction-controller>@metamask/nonce-tracker": true, "@metamask/transaction-controller>@metamask/utils": true, "bn.js": true, @@ -3367,14 +3367,6 @@ "webpack>events": true } }, - "@metamask/transaction-controller>@metamask/base-controller": { - "globals": { - "setTimeout": true - }, - "packages": { - "immer": true - } - }, "@metamask/transaction-controller>@metamask/nonce-tracker": { "packages": { "@ethersproject/providers": true, diff --git a/package.json b/package.json index 307ad60c06ea..d8fece95d0c0 100644 --- a/package.json +++ b/package.json @@ -356,7 +356,7 @@ "@metamask/snaps-rpc-methods": "^11.0.0", "@metamask/snaps-sdk": "6.3.0", "@metamask/snaps-utils": "^8.0.1", - "@metamask/transaction-controller": "^35.2.0", + "@metamask/transaction-controller": "^37.0.0", "@metamask/user-operation-controller": "^13.0.0", "@metamask/utils": "^8.2.1", "@ngraveio/bc-ur": "^1.1.12", diff --git a/test/e2e/page-objects/flows/transaction.ts b/test/e2e/page-objects/flows/transaction.ts new file mode 100644 index 000000000000..e2fdbd652034 --- /dev/null +++ b/test/e2e/page-objects/flows/transaction.ts @@ -0,0 +1,40 @@ +import { TransactionParams } from '@metamask/transaction-controller'; +import { DEFAULT_FIXTURE_ACCOUNT } from '../../constants'; +import { Driver } from '../../webdriver/driver'; +import HomePage from '../pages/homepage'; +import SendTokenPage from '../pages/send/send-token-page'; +import TestDapp from '../pages/test-dapp'; + +export const createInternalTransaction = async (driver: Driver) => { + // Firefox has incorrect balance if send flow started too quickly. + await driver.delay(1000); + + const homePage = new HomePage(driver); + await homePage.startSendFlow(); + + const sendToPage = new SendTokenPage(driver); + await sendToPage.check_pageIsLoaded(); + await sendToPage.fillRecipient('0x2f318C334780961FB129D2a6c30D0763d9a5C970'); + await sendToPage.fillAmount('1'); + await sendToPage.goToNextScreen(); +}; + +export const createDappTransaction = async ( + driver: Driver, + override?: Partial, +) => { + const testDapp = new TestDapp(driver); + + await testDapp.request('eth_sendTransaction', [ + { + data: '0x', + from: DEFAULT_FIXTURE_ACCOUNT, + maxFeePerGas: '0x0', + maxPriorityFeePerGas: '0x0', + to: '0x2f318C334780961FB129D2a6c30D0763d9a5C970', + value: '0x38d7ea4c68000', + type: '0x2', + ...override, + }, + ]); +}; diff --git a/test/e2e/page-objects/pages/confirmations/legacy/navigation.ts b/test/e2e/page-objects/pages/confirmations/legacy/navigation.ts new file mode 100644 index 000000000000..ab04f85a4a2e --- /dev/null +++ b/test/e2e/page-objects/pages/confirmations/legacy/navigation.ts @@ -0,0 +1,57 @@ +import { Driver } from '../../../../webdriver/driver'; + +class ConfirmationNavigation { + private driver: Driver; + + private nextPageButton: string; + + private previousPageButton: string; + + private firstPageButton: string; + + private lastPageButton: string; + + private navigationTitle: string; + + constructor(driver: Driver) { + this.driver = driver; + this.nextPageButton = '[data-testid="next-page"]'; + this.previousPageButton = '[data-testid="previous-page"]'; + this.firstPageButton = '[data-testid="first-page"]'; + this.lastPageButton = '[data-testid="last-page"]'; + this.navigationTitle = '.confirm-page-container-navigation'; + } + + async clickNextPage(): Promise { + await this.driver.clickElement(this.nextPageButton); + } + + async clickPreviousPage(): Promise { + await this.driver.clickElement(this.previousPageButton); + } + + async clickFirstPage(): Promise { + await this.driver.clickElement(this.firstPageButton); + } + + async clickLastPage(): Promise { + await this.driver.clickElement(this.lastPageButton); + } + + async check_pageNumbers( + currentPage: number, + totalPages: number, + ): Promise { + try { + await this.driver.findElement({ + css: this.navigationTitle, + text: `${currentPage} of ${totalPages}`, + }); + } catch (e) { + console.log('Timeout while waiting for navigation page numbers', e); + throw e; + } + } +} + +export default ConfirmationNavigation; diff --git a/test/e2e/page-objects/pages/test-dapp.ts b/test/e2e/page-objects/pages/test-dapp.ts new file mode 100644 index 000000000000..8c2fe513ca10 --- /dev/null +++ b/test/e2e/page-objects/pages/test-dapp.ts @@ -0,0 +1,37 @@ +import { Driver } from '../../webdriver/driver'; + +const DAPP_HOST_ADDRESS = '127.0.0.1:8080'; +const DAPP_URL = `http://${DAPP_HOST_ADDRESS}`; + +class TestDapp { + private driver: Driver; + + constructor(driver: Driver) { + this.driver = driver; + } + + async open({ + contractAddress, + url = DAPP_URL, + }: { + contractAddress?: string; + url?: string; + }) { + const dappUrl = contractAddress + ? `${url}/?contract=${contractAddress}` + : url; + + return await this.driver.openNewPage(dappUrl); + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + async request(method: string, params: any[]) { + await this.open({ + url: `${DAPP_URL}/request?method=${method}¶ms=${JSON.stringify( + params, + )}`, + }); + } +} + +export default TestDapp; diff --git a/test/e2e/tests/confirmations/transactions/contract-interaction-redesign.spec.ts b/test/e2e/tests/confirmations/transactions/contract-interaction-redesign.spec.ts index fc6ca9e2ff4e..5861cfc7a34e 100644 --- a/test/e2e/tests/confirmations/transactions/contract-interaction-redesign.spec.ts +++ b/test/e2e/tests/confirmations/transactions/contract-interaction-redesign.spec.ts @@ -1,9 +1,10 @@ /* eslint-disable @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */ import { Mockttp } from 'mockttp'; -import { createDappTransaction, unlockWallet } from '../../../helpers'; +import { openDapp, unlockWallet } from '../../../helpers'; +import { createDappTransaction } from '../../../page-objects/flows/transaction'; +import GanacheContractAddressRegistry from '../../../seeder/ganache-contract-address-registry'; import { Driver } from '../../../webdriver/driver'; import { MockedEndpoint } from '../../../mock-e2e'; -import { DEFAULT_FIXTURE_ACCOUNT } from '../../../constants'; import { assertAdvancedGasDetails, confirmDepositTransaction, @@ -110,6 +111,12 @@ describe('Confirmation Redesign Contract Interaction Component', function () { await unlockWallet(driver); await createLayer2Transaction(driver); + const contractAddress = await ( + contractRegistry as GanacheContractAddressRegistry + ).getContractAddress(smartContract); + + await openDapp(driver, contractAddress); + await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); await toggleAdvancedDetails(driver); @@ -281,11 +288,7 @@ describe('Confirmation Redesign Contract Interaction Component', function () { async function createLayer2Transaction(driver: Driver) { await createDappTransaction(driver, { data: '0x1234', - from: DEFAULT_FIXTURE_ACCOUNT, to: '0x581c3C1A2A4EBDE2A0Df29B5cf4c116E42945947', - gas: '0x31f10', - maxFeePerGas: '0x3b014b3', - maxPriorityFeePerGas: '0x3b014b3', }); } diff --git a/test/e2e/tests/transaction/edit-gas-fee.spec.js b/test/e2e/tests/transaction/edit-gas-fee.spec.js index 07944e0e973c..56236bf5bd9b 100644 --- a/test/e2e/tests/transaction/edit-gas-fee.spec.js +++ b/test/e2e/tests/transaction/edit-gas-fee.spec.js @@ -1,4 +1,8 @@ const { strict: assert } = require('assert'); +const { + createInternalTransaction, +} = require('../../page-objects/flows/transaction'); + const { withFixtures, openDapp, diff --git a/test/e2e/tests/transaction/navigate-transactions.spec.js b/test/e2e/tests/transaction/navigate-transactions.spec.js index 151e22ba55b9..45c27d11e76e 100644 --- a/test/e2e/tests/transaction/navigate-transactions.spec.js +++ b/test/e2e/tests/transaction/navigate-transactions.spec.js @@ -1,3 +1,11 @@ +const { + createDappTransaction, +} = require('../../page-objects/flows/transaction'); + +const { + default: ConfirmationNavigation, +} = require('../../page-objects/pages/confirmations/legacy/navigation'); + const { withFixtures, openDapp, @@ -5,7 +13,6 @@ const { unlockWallet, generateGanacheOptions, WINDOW_TITLES, - createDappTransactionTypeTwo, } = require('../../helpers'); const FixtureBuilder = require('../../fixture-builder'); @@ -27,26 +34,28 @@ describe('Navigate transactions', function () { await unlockWallet(driver); await createMultipleTransactions(driver, TRANSACTION_COUNT); - await clickNextPage(driver); - await expectPageNumber(driver, 2, 4); + const navigation = new ConfirmationNavigation(driver); + + await navigation.clickNextPage(); + await navigation.check_pageNumbers(2, 4); - await clickNextPage(driver); - await expectPageNumber(driver, 3, 4); + await navigation.clickNextPage(); + await navigation.check_pageNumbers(3, 4); - await clickNextPage(driver); - await expectPageNumber(driver, 4, 4); + await navigation.clickNextPage(); + await navigation.check_pageNumbers(4, 4); - await clickFirstPage(driver); - await expectPageNumber(driver, 1, 4); + await navigation.clickFirstPage(); + await navigation.check_pageNumbers(1, 4); - await clickLastPage(driver); - await expectPageNumber(driver, 4, 4); + await navigation.clickLastPage(); + await navigation.check_pageNumbers(4, 4); - await clickPreviousPage(driver); - await expectPageNumber(driver, 3, 4); + await navigation.clickPreviousPage(); + await navigation.check_pageNumbers(3, 4); - await clickPreviousPage(driver); - await expectPageNumber(driver, 2, 4); + await navigation.clickPreviousPage(); + await navigation.check_pageNumbers(2, 4); }, ); }); @@ -66,8 +75,10 @@ describe('Navigate transactions', function () { await unlockWallet(driver); await createMultipleTransactions(driver, TRANSACTION_COUNT); - await clickNextPage(driver); - await expectPageNumber(driver, 2, 4); + const navigation = new ConfirmationNavigation(driver); + + await navigation.clickNextPage(); + await navigation.check_pageNumbers(2, 4); await driver.switchToWindowWithTitle( WINDOW_TITLES.ExtensionInFullScreenView, @@ -77,7 +88,7 @@ describe('Navigate transactions', function () { await driver.clickElement({ text: 'Send', tag: 'button' }); await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); - await expectPageNumber(driver, 2, 5); + await navigation.check_pageNumbers(2, 5); }, ); }); @@ -100,7 +111,8 @@ describe('Navigate transactions', function () { // reject transaction await driver.clickElement({ text: 'Reject', tag: 'button' }); - await expectPageNumber(driver, 1, 3); + const navigation = new ConfirmationNavigation(driver); + await navigation.check_pageNumbers(1, 3); }, ); }); @@ -123,7 +135,8 @@ describe('Navigate transactions', function () { // confirm transaction await driver.clickElement({ text: 'Confirm', tag: 'button' }); - await expectPageNumber(driver, 1, 3); + const navigation = new ConfirmationNavigation(driver); + await navigation.check_pageNumbers(1, 3); }, ); }); @@ -146,6 +159,7 @@ describe('Navigate transactions', function () { // reject transactions await driver.clickElement({ text: 'Reject 4', tag: 'a' }); await driver.clickElement({ text: 'Reject all', tag: 'button' }); + await driver.switchToWindowWithTitle( WINDOW_TITLES.ExtensionInFullScreenView, ); @@ -157,7 +171,7 @@ describe('Navigate transactions', function () { async function createMultipleTransactions(driver, count) { for (let i = 0; i < count; i++) { - await createDappTransactionTypeTwo(driver); + await createDappTransaction(driver); } await driver.switchToWindowWithTitle(WINDOW_TITLES.Dialog); @@ -168,26 +182,3 @@ async function createMultipleTransactions(driver, count) { text: '0.001', }); } - -async function clickFirstPage(driver) { - await driver.clickElement('[data-testid="first-page"]'); -} - -async function clickLastPage(driver) { - await driver.clickElement('[data-testid="last-page"]'); -} - -async function clickNextPage(driver) { - await driver.clickElement('[data-testid="next-page"]'); -} - -async function clickPreviousPage(driver) { - await driver.clickElement('[data-testid="previous-page"]'); -} - -async function expectPageNumber(driver, current, total) { - await driver.findElement({ - css: '.confirm-page-container-navigation', - text: `${current} of ${total}`, - }); -} diff --git a/test/e2e/tests/transaction/send-edit.spec.js b/test/e2e/tests/transaction/send-edit.spec.js index 6e372ad2d64a..9137cbd6d257 100644 --- a/test/e2e/tests/transaction/send-edit.spec.js +++ b/test/e2e/tests/transaction/send-edit.spec.js @@ -1,4 +1,8 @@ const { strict: assert } = require('assert'); +const { + createInternalTransaction, +} = require('../../page-objects/flows/transaction'); + const { defaultGanacheOptions, withFixtures, @@ -12,7 +16,7 @@ describe('Editing Confirm Transaction', function () { it('goes back from confirm page to edit eth value, gas price and gas limit', async function () { await withFixtures( { - fixtures: new FixtureBuilder().build(), + fixtures: new FixtureBuilder().withConversionRateDisabled().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), }, @@ -87,7 +91,7 @@ describe('Editing Confirm Transaction', function () { it('goes back from confirm page to edit eth value, baseFee, priorityFee and gas limit - 1559 V2', async function () { await withFixtures( { - fixtures: new FixtureBuilder().build(), + fixtures: new FixtureBuilder().withConversionRateDisabled().build(), ganacheOptions: generateGanacheOptions({ hardfork: 'london' }), title: this.test.fullTitle(), }, diff --git a/yarn.lock b/yarn.lock index f9e5b6420ed7..45955e9af5a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4897,7 +4897,7 @@ __metadata: languageName: node linkType: hard -"@metamask/base-controller@npm:^6.0.0, @metamask/base-controller@npm:^6.0.1, @metamask/base-controller@npm:^6.0.2, @metamask/base-controller@npm:^6.0.3": +"@metamask/base-controller@npm:^6.0.0, @metamask/base-controller@npm:^6.0.1, @metamask/base-controller@npm:^6.0.2": version: 6.0.3 resolution: "@metamask/base-controller@npm:6.0.3" dependencies: @@ -4907,7 +4907,7 @@ __metadata: languageName: node linkType: hard -"@metamask/base-controller@npm:^7.0.1": +"@metamask/base-controller@npm:^7.0.0, @metamask/base-controller@npm:^7.0.1": version: 7.0.1 resolution: "@metamask/base-controller@npm:7.0.1" dependencies: @@ -4950,7 +4950,7 @@ __metadata: languageName: node linkType: hard -"@metamask/controller-utils@npm:^11.0.0, @metamask/controller-utils@npm:^11.0.1, @metamask/controller-utils@npm:^11.0.2, @metamask/controller-utils@npm:^11.1.0, @metamask/controller-utils@npm:^11.3.0": +"@metamask/controller-utils@npm:^11.0.0, @metamask/controller-utils@npm:^11.0.1, @metamask/controller-utils@npm:^11.0.2, @metamask/controller-utils@npm:^11.1.0, @metamask/controller-utils@npm:^11.2.0, @metamask/controller-utils@npm:^11.3.0": version: 11.3.0 resolution: "@metamask/controller-utils@npm:11.3.0" dependencies: @@ -6600,9 +6600,9 @@ __metadata: languageName: node linkType: hard -"@metamask/transaction-controller@npm:^35.2.0": - version: 35.2.0 - resolution: "@metamask/transaction-controller@npm:35.2.0" +"@metamask/transaction-controller@npm:^37.0.0": + version: 37.0.0 + resolution: "@metamask/transaction-controller@npm:37.0.0" dependencies: "@ethereumjs/common": "npm:^3.2.0" "@ethereumjs/tx": "npm:^4.2.0" @@ -6610,8 +6610,8 @@ __metadata: "@ethersproject/abi": "npm:^5.7.0" "@ethersproject/contracts": "npm:^5.7.0" "@ethersproject/providers": "npm:^5.7.0" - "@metamask/base-controller": "npm:^6.0.3" - "@metamask/controller-utils": "npm:^11.0.2" + "@metamask/base-controller": "npm:^7.0.1" + "@metamask/controller-utils": "npm:^11.3.0" "@metamask/eth-query": "npm:^4.0.0" "@metamask/metamask-eth-abis": "npm:^3.1.1" "@metamask/nonce-tracker": "npm:^6.0.0" @@ -6627,9 +6627,9 @@ __metadata: "@babel/runtime": ^7.23.9 "@metamask/accounts-controller": ^18.0.0 "@metamask/approval-controller": ^7.0.0 - "@metamask/gas-fee-controller": ^19.0.0 - "@metamask/network-controller": ^20.0.0 - checksum: 10/93af57d96860e4363b53ac1365742d77ca82689faf9ececca84309e15298a43a92e76a7ea3871b52b2a1785ff96e003db23e921ad6b4a4b65eddaa12d5edf570 + "@metamask/gas-fee-controller": ^20.0.0 + "@metamask/network-controller": ^21.0.0 + checksum: 10/b4608260cb86ad1a867926b983a21050a2be899f17af909ad2403b5148eada348b0fbb3f7ecef9ebc7cf8d28c040ce4d6f5009709328cda00fab61e10fa94de6 languageName: node linkType: hard @@ -26023,7 +26023,7 @@ __metadata: "@metamask/snaps-utils": "npm:^8.0.1" "@metamask/test-bundler": "npm:^1.0.0" "@metamask/test-dapp": "npm:^8.4.0" - "@metamask/transaction-controller": "npm:^35.2.0" + "@metamask/transaction-controller": "npm:^37.0.0" "@metamask/user-operation-controller": "npm:^13.0.0" "@metamask/utils": "npm:^8.2.1" "@ngraveio/bc-ur": "npm:^1.1.12" From 2cedf7142461118590885b2558f12b3fa0f56df9 Mon Sep 17 00:00:00 2001 From: Vinicius Stevam Date: Tue, 1 Oct 2024 14:27:05 +0100 Subject: [PATCH 2/4] fix yarn.lock and unit tests --- app/scripts/lib/ppom/ppom-middleware.test.ts | 1 - yarn.lock | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/app/scripts/lib/ppom/ppom-middleware.test.ts b/app/scripts/lib/ppom/ppom-middleware.test.ts index 780d6eb9f5e2..4adfeb3b8a6c 100644 --- a/app/scripts/lib/ppom/ppom-middleware.test.ts +++ b/app/scripts/lib/ppom/ppom-middleware.test.ts @@ -17,7 +17,6 @@ import { import { SecurityAlertResponse } from './types'; jest.mock('./ppom-util'); -jest.mock('@metamask/controller-utils'); const SECURITY_ALERT_ID_MOCK = '123'; const INTERNAL_ACCOUNT_ADDRESS = '0xec1adf982415d2ef5ec55899b9bfb8bc0f29251b'; diff --git a/yarn.lock b/yarn.lock index 45955e9af5a3..cc4f7fd6149d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4897,7 +4897,7 @@ __metadata: languageName: node linkType: hard -"@metamask/base-controller@npm:^6.0.0, @metamask/base-controller@npm:^6.0.1, @metamask/base-controller@npm:^6.0.2": +"@metamask/base-controller@npm:^6.0.0, @metamask/base-controller@npm:^6.0.1, @metamask/base-controller@npm:^6.0.2, @metamask/base-controller@npm:^6.0.3": version: 6.0.3 resolution: "@metamask/base-controller@npm:6.0.3" dependencies: @@ -4907,7 +4907,7 @@ __metadata: languageName: node linkType: hard -"@metamask/base-controller@npm:^7.0.0, @metamask/base-controller@npm:^7.0.1": +"@metamask/base-controller@npm:^7.0.1": version: 7.0.1 resolution: "@metamask/base-controller@npm:7.0.1" dependencies: @@ -4950,7 +4950,7 @@ __metadata: languageName: node linkType: hard -"@metamask/controller-utils@npm:^11.0.0, @metamask/controller-utils@npm:^11.0.1, @metamask/controller-utils@npm:^11.0.2, @metamask/controller-utils@npm:^11.1.0, @metamask/controller-utils@npm:^11.2.0, @metamask/controller-utils@npm:^11.3.0": +"@metamask/controller-utils@npm:^11.0.0, @metamask/controller-utils@npm:^11.0.1, @metamask/controller-utils@npm:^11.0.2, @metamask/controller-utils@npm:^11.1.0, @metamask/controller-utils@npm:^11.3.0": version: 11.3.0 resolution: "@metamask/controller-utils@npm:11.3.0" dependencies: From 224ce27d7c82dde543b398e8a64137a67b68b4d2 Mon Sep 17 00:00:00 2001 From: MetaMask Bot Date: Tue, 1 Oct 2024 13:50:56 +0000 Subject: [PATCH 3/4] Update LavaMoat policies --- lavamoat/browserify/beta/policy.json | 10 +++++++++- lavamoat/browserify/flask/policy.json | 10 +++++++++- lavamoat/browserify/main/policy.json | 10 +++++++++- lavamoat/browserify/mmi/policy.json | 10 +++++++++- 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/lavamoat/browserify/beta/policy.json b/lavamoat/browserify/beta/policy.json index 665e3077055f..8558b0b01b56 100644 --- a/lavamoat/browserify/beta/policy.json +++ b/lavamoat/browserify/beta/policy.json @@ -3256,7 +3256,6 @@ "@ethersproject/abi": true, "@ethersproject/contracts": true, "@ethersproject/providers": true, - "@metamask/base-controller": true, "@metamask/controller-utils": true, "@metamask/eth-query": true, "@metamask/gas-fee-controller": true, @@ -3264,6 +3263,7 @@ "@metamask/name-controller>async-mutex": true, "@metamask/network-controller": true, "@metamask/rpc-errors": true, + "@metamask/transaction-controller>@metamask/base-controller": true, "@metamask/transaction-controller>@metamask/nonce-tracker": true, "@metamask/transaction-controller>@metamask/utils": true, "bn.js": true, @@ -3275,6 +3275,14 @@ "webpack>events": true } }, + "@metamask/transaction-controller>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/transaction-controller>@metamask/nonce-tracker": { "packages": { "@ethersproject/providers": true, diff --git a/lavamoat/browserify/flask/policy.json b/lavamoat/browserify/flask/policy.json index 665e3077055f..8558b0b01b56 100644 --- a/lavamoat/browserify/flask/policy.json +++ b/lavamoat/browserify/flask/policy.json @@ -3256,7 +3256,6 @@ "@ethersproject/abi": true, "@ethersproject/contracts": true, "@ethersproject/providers": true, - "@metamask/base-controller": true, "@metamask/controller-utils": true, "@metamask/eth-query": true, "@metamask/gas-fee-controller": true, @@ -3264,6 +3263,7 @@ "@metamask/name-controller>async-mutex": true, "@metamask/network-controller": true, "@metamask/rpc-errors": true, + "@metamask/transaction-controller>@metamask/base-controller": true, "@metamask/transaction-controller>@metamask/nonce-tracker": true, "@metamask/transaction-controller>@metamask/utils": true, "bn.js": true, @@ -3275,6 +3275,14 @@ "webpack>events": true } }, + "@metamask/transaction-controller>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/transaction-controller>@metamask/nonce-tracker": { "packages": { "@ethersproject/providers": true, diff --git a/lavamoat/browserify/main/policy.json b/lavamoat/browserify/main/policy.json index 665e3077055f..8558b0b01b56 100644 --- a/lavamoat/browserify/main/policy.json +++ b/lavamoat/browserify/main/policy.json @@ -3256,7 +3256,6 @@ "@ethersproject/abi": true, "@ethersproject/contracts": true, "@ethersproject/providers": true, - "@metamask/base-controller": true, "@metamask/controller-utils": true, "@metamask/eth-query": true, "@metamask/gas-fee-controller": true, @@ -3264,6 +3263,7 @@ "@metamask/name-controller>async-mutex": true, "@metamask/network-controller": true, "@metamask/rpc-errors": true, + "@metamask/transaction-controller>@metamask/base-controller": true, "@metamask/transaction-controller>@metamask/nonce-tracker": true, "@metamask/transaction-controller>@metamask/utils": true, "bn.js": true, @@ -3275,6 +3275,14 @@ "webpack>events": true } }, + "@metamask/transaction-controller>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/transaction-controller>@metamask/nonce-tracker": { "packages": { "@ethersproject/providers": true, diff --git a/lavamoat/browserify/mmi/policy.json b/lavamoat/browserify/mmi/policy.json index e953c9b1c410..2021f5491abf 100644 --- a/lavamoat/browserify/mmi/policy.json +++ b/lavamoat/browserify/mmi/policy.json @@ -3348,7 +3348,6 @@ "@ethersproject/abi": true, "@ethersproject/contracts": true, "@ethersproject/providers": true, - "@metamask/base-controller": true, "@metamask/controller-utils": true, "@metamask/eth-query": true, "@metamask/gas-fee-controller": true, @@ -3356,6 +3355,7 @@ "@metamask/name-controller>async-mutex": true, "@metamask/network-controller": true, "@metamask/rpc-errors": true, + "@metamask/transaction-controller>@metamask/base-controller": true, "@metamask/transaction-controller>@metamask/nonce-tracker": true, "@metamask/transaction-controller>@metamask/utils": true, "bn.js": true, @@ -3367,6 +3367,14 @@ "webpack>events": true } }, + "@metamask/transaction-controller>@metamask/base-controller": { + "globals": { + "setTimeout": true + }, + "packages": { + "immer": true + } + }, "@metamask/transaction-controller>@metamask/nonce-tracker": { "packages": { "@ethersproject/providers": true, From ba775786c697b3510ce4a03c16dca3e3982b74f6 Mon Sep 17 00:00:00 2001 From: Vinicius Stevam Date: Tue, 1 Oct 2024 16:01:49 +0100 Subject: [PATCH 4/4] fix merge conflicts --- .../transactions/contract-interaction-redesign.spec.ts | 2 +- test/e2e/tests/transaction/edit-gas-fee.spec.js | 1 - test/e2e/tests/transaction/send-edit.spec.js | 7 ++----- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/test/e2e/tests/confirmations/transactions/contract-interaction-redesign.spec.ts b/test/e2e/tests/confirmations/transactions/contract-interaction-redesign.spec.ts index 5861cfc7a34e..2a815a025d18 100644 --- a/test/e2e/tests/confirmations/transactions/contract-interaction-redesign.spec.ts +++ b/test/e2e/tests/confirmations/transactions/contract-interaction-redesign.spec.ts @@ -107,7 +107,7 @@ describe('Confirmation Redesign Contract Interaction Component', function () { title: this.test?.fullTitle(), testSpecificMock: mockOptimismOracle, }, - async ({ driver }: TestSuiteArguments) => { + async ({ driver, contractRegistry }: TestSuiteArguments) => { await unlockWallet(driver); await createLayer2Transaction(driver); diff --git a/test/e2e/tests/transaction/edit-gas-fee.spec.js b/test/e2e/tests/transaction/edit-gas-fee.spec.js index 56236bf5bd9b..85ae4da3a31f 100644 --- a/test/e2e/tests/transaction/edit-gas-fee.spec.js +++ b/test/e2e/tests/transaction/edit-gas-fee.spec.js @@ -9,7 +9,6 @@ const { unlockWallet, generateGanacheOptions, WINDOW_TITLES, - createInternalTransaction, } = require('../../helpers'); const FixtureBuilder = require('../../fixture-builder'); diff --git a/test/e2e/tests/transaction/send-edit.spec.js b/test/e2e/tests/transaction/send-edit.spec.js index 9137cbd6d257..6fffe1d6b300 100644 --- a/test/e2e/tests/transaction/send-edit.spec.js +++ b/test/e2e/tests/transaction/send-edit.spec.js @@ -1,7 +1,4 @@ const { strict: assert } = require('assert'); -const { - createInternalTransaction, -} = require('../../page-objects/flows/transaction'); const { defaultGanacheOptions, @@ -16,7 +13,7 @@ describe('Editing Confirm Transaction', function () { it('goes back from confirm page to edit eth value, gas price and gas limit', async function () { await withFixtures( { - fixtures: new FixtureBuilder().withConversionRateDisabled().build(), + fixtures: new FixtureBuilder().build(), ganacheOptions: defaultGanacheOptions, title: this.test.fullTitle(), }, @@ -91,7 +88,7 @@ describe('Editing Confirm Transaction', function () { it('goes back from confirm page to edit eth value, baseFee, priorityFee and gas limit - 1559 V2', async function () { await withFixtures( { - fixtures: new FixtureBuilder().withConversionRateDisabled().build(), + fixtures: new FixtureBuilder().build(), ganacheOptions: generateGanacheOptions({ hardfork: 'london' }), title: this.test.fullTitle(), },