Skip to content

Commit e9bb5ba

Browse files
committed
feat: replace getTransactionController instance with messenger mock
Instead of passing wallet.getInstance('TransactionController') through initialization.ts into the publish hooks, create a messenger-backed mock inside getTransactionControllerInstanceOptions — following the same pattern as getSmartTransactionsController. - Remove getTransactionController param from GetTransactionControllerInstanceOptionsRequest - Add private getTransactionController(messenger) that routes state, getNonceLock, isAtomicBatchSupported, and approveTransactionsWithSameNonce through the init messenger - Expose the three new TC actions on the init messenger (getNonceLock, isAtomicBatchSupported, approveTransactionsWithSameNonce)
1 parent 27aa809 commit e9bb5ba

4 files changed

Lines changed: 48 additions & 8 deletions

File tree

app/core/Engine/wallet-init/initialization.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ export function initializeWallet({
5454
storageService: getStorageServiceInstanceOptions(),
5555
transactionController: getTransactionControllerInstanceOptions({
5656
getState,
57-
getTransactionController: () =>
58-
wallet.getInstance('TransactionController'),
5957
initMessenger: transactionControllerInitMessenger,
6058
}),
6159
},

app/core/Engine/wallet-init/instance-options/transaction-controller.test.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ describe('TransactionController wallet instance options', () => {
9292

9393
return getTransactionControllerInstanceOptions({
9494
getState,
95-
getTransactionController: jest.fn(),
9695
initMessenger,
9796
});
9897
}

app/core/Engine/wallet-init/instance-options/transaction-controller.ts

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ type TransactionControllerInstanceOptions = NonNullable<
3939

4040
type GetTransactionControllerInstanceOptionsRequest = {
4141
getState: () => RootState;
42-
getTransactionController: () => TransactionController;
4342
initMessenger: TransactionControllerInitMessenger;
4443
};
4544

@@ -55,21 +54,20 @@ type SetupTransactionControllerListenersRequest = {
5554
*
5655
* @param request - The request bag.
5756
* @param request.getState - Returns the current Redux root state.
58-
* @param request.getTransactionController - Lazily returns the constructed
59-
* `TransactionController` instance (used by publish hooks).
6057
* @param request.initMessenger - The TransactionController init messenger.
6158
* @returns The TransactionController instance options.
6259
*/
6360
export function getTransactionControllerInstanceOptions({
6461
getState,
65-
getTransactionController,
6662
initMessenger,
6763
}: GetTransactionControllerInstanceOptionsRequest): TransactionControllerInstanceOptions {
64+
const transactionController = getTransactionController(initMessenger);
65+
6866
return {
6967
disableSwaps: true,
7068
hooks: getTransactionControllerHooks({
7169
getState,
72-
getTransactionController,
70+
getTransactionController: () => transactionController,
7371
initMessenger,
7472
}),
7573
isAutomaticGasFeeUpdateEnabled,
@@ -221,6 +219,42 @@ function getSmartTransactionsController(
221219
} as unknown as SmartTransactionsController;
222220
}
223221

222+
/**
223+
* Creates a messenger-based mock of `TransactionController` for use inside
224+
* the publish hooks. All calls are routed through the init messenger so that
225+
* no real controller instance is passed around.
226+
*
227+
* Follows the same pattern as `getSmartTransactionsController` above.
228+
*
229+
* @param messenger - The TransactionController init messenger.
230+
* @returns A TransactionController-shaped object backed by messenger actions.
231+
*/
232+
function getTransactionController(
233+
messenger: TransactionControllerInitMessenger,
234+
): TransactionController {
235+
return {
236+
get state() {
237+
return messenger.call('TransactionController:getState');
238+
},
239+
getNonceLock: (
240+
...args: Parameters<TransactionController['getNonceLock']>
241+
) => messenger.call('TransactionController:getNonceLock', ...args),
242+
isAtomicBatchSupported: (
243+
...args: Parameters<TransactionController['isAtomicBatchSupported']>
244+
) =>
245+
messenger.call('TransactionController:isAtomicBatchSupported', ...args),
246+
approveTransactionsWithSameNonce: (
247+
...args: Parameters<
248+
TransactionController['approveTransactionsWithSameNonce']
249+
>
250+
) =>
251+
messenger.call(
252+
'TransactionController:approveTransactionsWithSameNonce',
253+
...args,
254+
),
255+
} as unknown as TransactionController;
256+
}
257+
224258
async function isEIP7702GasFeeTokensEnabled(
225259
{
226260
getState,

app/core/Engine/wallet-init/messengers/transaction-controller-messenger.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,11 @@ import {
1414
import {
1515
TransactionControllerAddTransactionAction,
1616
TransactionControllerAddTransactionBatchAction,
17+
TransactionControllerApproveTransactionsWithSameNonceAction,
1718
TransactionControllerEstimateGasBatchAction,
19+
TransactionControllerGetNonceLockAction,
1820
TransactionControllerGetStateAction,
21+
TransactionControllerIsAtomicBatchSupportedAction,
1922
TransactionControllerStateChangeEvent,
2023
TransactionControllerTransactionApprovedEvent,
2124
TransactionControllerTransactionConfirmedEvent,
@@ -90,8 +93,11 @@ export type TransactionControllerInitMessengerActions =
9093
| SmartTransactionsControllerSubmitSignedTransactionsAction
9194
| TransactionControllerAddTransactionAction
9295
| TransactionControllerAddTransactionBatchAction
96+
| TransactionControllerApproveTransactionsWithSameNonceAction
9397
| TransactionControllerEstimateGasBatchAction
98+
| TransactionControllerGetNonceLockAction
9499
| TransactionControllerGetStateAction
100+
| TransactionControllerIsAtomicBatchSupportedAction
95101
| TransactionControllerUpdateTransactionAction
96102
| TransactionPayControllerActions
97103
| AnalyticsControllerActions
@@ -158,8 +164,11 @@ export function getTransactionControllerInitMessenger(
158164
'SmartTransactionsController:submitSignedTransactions',
159165
'TransactionController:addTransaction',
160166
'TransactionController:addTransactionBatch',
167+
'TransactionController:approveTransactionsWithSameNonce',
161168
'TransactionController:estimateGasBatch',
169+
'TransactionController:getNonceLock',
162170
'TransactionController:getState',
171+
'TransactionController:isAtomicBatchSupported',
163172
'TransactionController:updateTransaction',
164173
'TransactionPayController:getAmountData',
165174
'TransactionPayController:getDelegationTransaction',

0 commit comments

Comments
 (0)