Skip to content

Commit b0c8f59

Browse files
committed
feat: Add transaction emulation actions
These will be used indirectly by the UserOperationController to emulate adding and updating a transaction, in response to user operations.
1 parent 7305664 commit b0c8f59

File tree

2 files changed

+89
-1
lines changed

2 files changed

+89
-1
lines changed

packages/transaction-controller/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- Add actions `TranasctionController:emulateNewTransaction` and `TranasctionController:emulateTransactionUpdate` ([#6935](https://github.com/MetaMask/core/pull/6935))
13+
1014
### Changed
1115

1216
- Bump `@metamask/base-controller` from `^8.4.1` to `^8.4.2` ([#6917](https://github.com/MetaMask/core/pull/6917))

packages/transaction-controller/src/TransactionController.ts

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,26 @@ export type TransactionControllerAddTransactionBatchAction = {
357357
handler: TransactionController['addTransactionBatch'];
358358
};
359359

360+
/**
361+
* Emulate a new transaction.
362+
*
363+
* @param transactionId - The transaction ID.
364+
*/
365+
export type TransactionControllerEmulateNewTransaction = {
366+
type: `${typeof controllerName}:emulateNewTransaction`;
367+
handler: TransactionController['emulateNewTransaction'];
368+
};
369+
370+
/**
371+
* Emmulate a transaction update.
372+
*
373+
* @param transactionMeta - Transaction metadata.
374+
*/
375+
export type TransactionControllerEmulateTransactionUpdate = {
376+
type: `${typeof controllerName}:emulateTransactionUpdate`;
377+
handler: TransactionController['emulateTransactionUpdate'];
378+
};
379+
360380
/**
361381
* The internal actions available to the TransactionController.
362382
*/
@@ -369,7 +389,9 @@ export type TransactionControllerActions =
369389
| TransactionControllerGetStateAction
370390
| TransactionControllerGetTransactionsAction
371391
| TransactionControllerUpdateCustodialTransactionAction
372-
| TransactionControllerUpdateTransactionAction;
392+
| TransactionControllerUpdateTransactionAction
393+
| TransactionControllerEmulateNewTransaction
394+
| TransactionControllerEmulateTransactionUpdate;
373395

374396
/**
375397
* Configuration options for the PendingTransactionTracker
@@ -4552,4 +4574,66 @@ export class TransactionController extends BaseController<
45524574

45534575
return { transactionHash };
45544576
}
4577+
4578+
/**
4579+
* Emulate a new transaction.
4580+
*
4581+
* @param transactionId - The transaction ID.
4582+
*/
4583+
emulateNewTransaction(transactionId: string) {
4584+
const transactionMeta = this.state.transactions.find(
4585+
(tx) => tx.id === transactionId,
4586+
);
4587+
4588+
if (!transactionMeta) {
4589+
return;
4590+
}
4591+
4592+
if (transactionMeta.type === TransactionType.swap) {
4593+
this.messagingSystem.publish('TransactionController:transactionNewSwap', {
4594+
transactionMeta,
4595+
});
4596+
} else if (transactionMeta.type === TransactionType.swapApproval) {
4597+
this.messagingSystem.publish(
4598+
'TransactionController:transactionNewSwapApproval',
4599+
{ transactionMeta },
4600+
);
4601+
}
4602+
}
4603+
4604+
/**
4605+
* Emmulate a transaction update.
4606+
*
4607+
* @param transactionMeta - Transaction metadata.
4608+
*/
4609+
emulateTransactionUpdate(transactionMeta: TransactionMeta) {
4610+
const updatedTransactionMeta = {
4611+
...transactionMeta,
4612+
txParams: {
4613+
...transactionMeta.txParams,
4614+
from: this.messagingSystem.call('AccountsController:getSelectedAccount')
4615+
.address,
4616+
},
4617+
};
4618+
4619+
const transactionExists = this.state.transactions.some(
4620+
(tx) => tx.id === updatedTransactionMeta.id,
4621+
);
4622+
4623+
if (!transactionExists) {
4624+
this.update((state) => {
4625+
state.transactions.push(updatedTransactionMeta);
4626+
});
4627+
}
4628+
4629+
this.updateTransaction(
4630+
updatedTransactionMeta,
4631+
'Generated from user operation',
4632+
);
4633+
4634+
this.messagingSystem.publish(
4635+
'TransactionController:transactionStatusUpdated',
4636+
{ transactionMeta: updatedTransactionMeta },
4637+
);
4638+
}
45554639
}

0 commit comments

Comments
 (0)