@metamask/transaction-controller 52.1.0 → 52.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -4
- package/dist/TransactionController.cjs +89 -24
- package/dist/TransactionController.cjs.map +1 -1
- package/dist/TransactionController.d.cts +35 -5
- package/dist/TransactionController.d.cts.map +1 -1
- package/dist/TransactionController.d.mts +35 -5
- package/dist/TransactionController.d.mts.map +1 -1
- package/dist/TransactionController.mjs +89 -24
- package/dist/TransactionController.mjs.map +1 -1
- package/dist/hooks/CollectPublishHook.cjs +84 -0
- package/dist/hooks/CollectPublishHook.cjs.map +1 -0
- package/dist/hooks/CollectPublishHook.d.cts +29 -0
- package/dist/hooks/CollectPublishHook.d.cts.map +1 -0
- package/dist/hooks/CollectPublishHook.d.mts +29 -0
- package/dist/hooks/CollectPublishHook.d.mts.map +1 -0
- package/dist/hooks/CollectPublishHook.mjs +80 -0
- package/dist/hooks/CollectPublishHook.mjs.map +1 -0
- package/dist/hooks/ExtraTransactionsPublishHook.cjs +90 -0
- package/dist/hooks/ExtraTransactionsPublishHook.cjs.map +1 -0
- package/dist/hooks/ExtraTransactionsPublishHook.d.cts +18 -0
- package/dist/hooks/ExtraTransactionsPublishHook.d.cts.map +1 -0
- package/dist/hooks/ExtraTransactionsPublishHook.d.mts +18 -0
- package/dist/hooks/ExtraTransactionsPublishHook.d.mts.map +1 -0
- package/dist/hooks/ExtraTransactionsPublishHook.mjs +86 -0
- package/dist/hooks/ExtraTransactionsPublishHook.mjs.map +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +143 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +143 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/batch.cjs +142 -1
- package/dist/utils/batch.cjs.map +1 -1
- package/dist/utils/batch.d.cts +7 -1
- package/dist/utils/batch.d.cts.map +1 -1
- package/dist/utils/batch.d.mts +7 -1
- package/dist/utils/batch.d.mts.map +1 -1
- package/dist/utils/batch.mjs +142 -1
- package/dist/utils/batch.mjs.map +1 -1
- package/dist/utils/eip7702.cjs +12 -0
- package/dist/utils/eip7702.cjs.map +1 -1
- package/dist/utils/eip7702.d.cts.map +1 -1
- package/dist/utils/eip7702.d.mts.map +1 -1
- package/dist/utils/eip7702.mjs +12 -0
- package/dist/utils/eip7702.mjs.map +1 -1
- package/dist/utils/gas.cjs +7 -3
- package/dist/utils/gas.cjs.map +1 -1
- package/dist/utils/gas.mjs +7 -3
- package/dist/utils/gas.mjs.map +1 -1
- package/dist/utils/nonce.cjs +3 -3
- package/dist/utils/nonce.cjs.map +1 -1
- package/dist/utils/nonce.d.cts +2 -2
- package/dist/utils/nonce.d.cts.map +1 -1
- package/dist/utils/nonce.d.mts +2 -2
- package/dist/utils/nonce.d.mts.map +1 -1
- package/dist/utils/nonce.mjs +3 -3
- package/dist/utils/nonce.mjs.map +1 -1
- package/dist/utils/simulation-api.cjs.map +1 -1
- package/dist/utils/simulation-api.d.cts +37 -0
- package/dist/utils/simulation-api.d.cts.map +1 -1
- package/dist/utils/simulation-api.d.mts +37 -0
- package/dist/utils/simulation-api.d.mts.map +1 -1
- package/dist/utils/simulation-api.mjs.map +1 -1
- package/dist/utils/simulation.cjs +46 -7
- package/dist/utils/simulation.cjs.map +1 -1
- package/dist/utils/simulation.d.cts +6 -2
- package/dist/utils/simulation.d.cts.map +1 -1
- package/dist/utils/simulation.d.mts +6 -2
- package/dist/utils/simulation.d.mts.map +1 -1
- package/dist/utils/simulation.mjs +46 -7
- package/dist/utils/simulation.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [52.2.0]
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add `gasFeeTokens` to `TransactionMeta` ([#5524](https://github.com/MetaMask/core/pull/5524))
|
|
15
|
+
- Add `GasFeeToken` type.
|
|
16
|
+
- Add `selectedGasFeeToken` to `TransactionMeta`.
|
|
17
|
+
- Add `updateSelectedGasFeeToken` method.
|
|
18
|
+
- Support security validation of transaction batches ([#5526](https://github.com/MetaMask/core/pull/5526))
|
|
19
|
+
- Add `ValidateSecurityRequest` type.
|
|
20
|
+
- Add optional `securityAlertId` to `SecurityAlertResponse`.
|
|
21
|
+
- Add optional `securityAlertId` to `TransactionBatchRequest`.
|
|
22
|
+
- Add optional `validateSecurity` callback to `TransactionBatchRequest`.
|
|
23
|
+
- Support publish batch hook ([#5401](https://github.com/MetaMask/core/pull/5401))
|
|
24
|
+
- Add `hooks.publishBatch` option to constructor.
|
|
25
|
+
- Add `updateBatchTransactions` method.
|
|
26
|
+
- Add `maxFeePerGas` and `maxPriorityFeePerGas` to `updateEditableParams` options.
|
|
27
|
+
- Add types.
|
|
28
|
+
- `PublishBatchHook`
|
|
29
|
+
- `PublishBatchHookRequest`
|
|
30
|
+
- `PublishBatchHookResult`
|
|
31
|
+
- `PublishBatchHookTransaction`
|
|
32
|
+
- `PublishHook`
|
|
33
|
+
- `PublishHookResult`
|
|
34
|
+
- Add optional properties to `TransactionMeta`.
|
|
35
|
+
- `batchTransactions`
|
|
36
|
+
- `disableGasBuffer`
|
|
37
|
+
- Add optional properties to `BatchTransactionParams`.
|
|
38
|
+
- `gas`
|
|
39
|
+
- `maxFeePerGas`
|
|
40
|
+
- `maxPriorityFeePerGas`
|
|
41
|
+
- Add optional `existingTransaction` property to `TransactionBatchSingleRequest`.
|
|
42
|
+
- Add optional `useHook` property to `TransactionBatchRequest`.
|
|
43
|
+
|
|
10
44
|
## [52.1.0]
|
|
11
45
|
|
|
12
46
|
### Added
|
|
@@ -41,7 +75,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
41
75
|
### Added
|
|
42
76
|
|
|
43
77
|
- Add additional metadata for batch metrics ([#5488](https://github.com/MetaMask/core/pull/5488))
|
|
44
|
-
- Add `delegationAddress` to `
|
|
78
|
+
- Add `delegationAddress` to `TransactionMeta`.
|
|
45
79
|
- Add `NestedTransactionMetadata` type containing `BatchTransactionParams` and `type`.
|
|
46
80
|
- Add optional `type` to `TransactionBatchSingleRequest`.
|
|
47
81
|
- Verify EIP-7702 contract address using signatures ([#5472](https://github.com/MetaMask/core/pull/5472))
|
|
@@ -52,8 +86,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
52
86
|
|
|
53
87
|
- **BREAKING:** Bump `@metamask/accounts-controller` peer dependency to `^26.1.0` ([#5481](https://github.com/MetaMask/core/pull/5481))
|
|
54
88
|
- **BREAKING:** Add additional metadata for batch metrics ([#5488](https://github.com/MetaMask/core/pull/5488))
|
|
55
|
-
- Change `error` in `
|
|
56
|
-
- Change `nestedTransactions` in `
|
|
89
|
+
- Change `error` in `TransactionMeta` to optional for all statuses.
|
|
90
|
+
- Change `nestedTransactions` in `TransactionMeta` to array of `NestedTransactionMetadata`.
|
|
57
91
|
- Throw if `addTransactionBatch` called with external origin and size limit exceeded ([#5489](https://github.com/MetaMask/core/pull/5489))
|
|
58
92
|
- Verify EIP-7702 contract address using signatures ([#5472](https://github.com/MetaMask/core/pull/5472))
|
|
59
93
|
- Use new `contracts` property from feature flags instead of `contractAddresses`.
|
|
@@ -1409,7 +1443,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1409
1443
|
|
|
1410
1444
|
All changes listed after this point were applied to this package following the monorepo conversion.
|
|
1411
1445
|
|
|
1412
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.
|
|
1446
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.2.0...HEAD
|
|
1447
|
+
[52.2.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.1.0...@metamask/transaction-controller@52.2.0
|
|
1413
1448
|
[52.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.0.0...@metamask/transaction-controller@52.1.0
|
|
1414
1449
|
[52.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@51.0.0...@metamask/transaction-controller@52.0.0
|
|
1415
1450
|
[51.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@50.0.0...@metamask/transaction-controller@51.0.0
|
|
@@ -13,7 +13,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
13
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
|
-
var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_publicKeyEIP7702, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_rejectTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate, _TransactionController_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow;
|
|
16
|
+
var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_publishBatchHook, _TransactionController_publicKeyEIP7702, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_rejectTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_getInternalAccounts, _TransactionController_updateSubmitHistory, _TransactionController_updateGasEstimate, _TransactionController_deleteTransaction, _TransactionController_isRejectError, _TransactionController_rejectTransactionAndThrow;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.TransactionController = exports.ApprovalState = exports.SPEED_UP_RATE = exports.CANCEL_RATE = void 0;
|
|
19
19
|
const base_controller_1 = require("@metamask/base-controller");
|
|
@@ -23,7 +23,6 @@ const network_controller_1 = require("@metamask/network-controller");
|
|
|
23
23
|
const nonce_tracker_1 = require("@metamask/nonce-tracker");
|
|
24
24
|
const rpc_errors_1 = require("@metamask/rpc-errors");
|
|
25
25
|
const utils_1 = require("@metamask/utils");
|
|
26
|
-
const async_mutex_1 = require("async-mutex");
|
|
27
26
|
// This package purposefully relies on Node's EventEmitter module.
|
|
28
27
|
// eslint-disable-next-line import-x/no-nodejs-modules
|
|
29
28
|
const events_1 = require("events");
|
|
@@ -42,6 +41,7 @@ const MethodDataHelper_1 = require("./helpers/MethodDataHelper.cjs");
|
|
|
42
41
|
const MultichainTrackingHelper_1 = require("./helpers/MultichainTrackingHelper.cjs");
|
|
43
42
|
const PendingTransactionTracker_1 = require("./helpers/PendingTransactionTracker.cjs");
|
|
44
43
|
const ResimulateHelper_1 = require("./helpers/ResimulateHelper.cjs");
|
|
44
|
+
const ExtraTransactionsPublishHook_1 = require("./hooks/ExtraTransactionsPublishHook.cjs");
|
|
45
45
|
const logger_1 = require("./logger.cjs");
|
|
46
46
|
const types_1 = require("./types.cjs");
|
|
47
47
|
const batch_1 = require("./utils/batch.cjs");
|
|
@@ -170,10 +170,10 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
170
170
|
_TransactionController_internalEvents.set(this, new events_1.EventEmitter());
|
|
171
171
|
this.approvingTransactionIds = new Set();
|
|
172
172
|
_TransactionController_methodDataHelper.set(this, void 0);
|
|
173
|
-
this.mutex = new async_mutex_1.Mutex();
|
|
174
173
|
_TransactionController_incomingTransactionHelper.set(this, void 0);
|
|
175
174
|
_TransactionController_incomingTransactionOptions.set(this, void 0);
|
|
176
175
|
_TransactionController_pendingTransactionOptions.set(this, void 0);
|
|
176
|
+
_TransactionController_publishBatchHook.set(this, void 0);
|
|
177
177
|
_TransactionController_publicKeyEIP7702.set(this, void 0);
|
|
178
178
|
this.signAbortCallbacks = new Map();
|
|
179
179
|
_TransactionController_trace.set(this, void 0);
|
|
@@ -206,6 +206,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
206
206
|
this.securityProviderRequest = securityProviderRequest;
|
|
207
207
|
__classPrivateFieldSet(this, _TransactionController_incomingTransactionOptions, incomingTransactions, "f");
|
|
208
208
|
__classPrivateFieldSet(this, _TransactionController_pendingTransactionOptions, pendingTransactions, "f");
|
|
209
|
+
__classPrivateFieldSet(this, _TransactionController_publishBatchHook, hooks?.publishBatch, "f");
|
|
209
210
|
__classPrivateFieldSet(this, _TransactionController_publicKeyEIP7702, publicKeyEIP7702, "f");
|
|
210
211
|
__classPrivateFieldSet(this, _TransactionController_transactionHistoryLimit, transactionHistoryLimit, "f");
|
|
211
212
|
this.sign = sign;
|
|
@@ -320,9 +321,12 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
320
321
|
getChainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).bind(this),
|
|
321
322
|
getEthQuery: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId }),
|
|
322
323
|
getInternalAccounts: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).bind(this),
|
|
324
|
+
getTransaction: (transactionId) => this.getTransactionOrThrow(transactionId),
|
|
323
325
|
messenger: this.messagingSystem,
|
|
326
|
+
publishBatchHook: __classPrivateFieldGet(this, _TransactionController_publishBatchHook, "f"),
|
|
324
327
|
publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
|
|
325
328
|
request,
|
|
329
|
+
updateTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).bind(this),
|
|
326
330
|
});
|
|
327
331
|
}
|
|
328
332
|
/**
|
|
@@ -349,9 +353,11 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
349
353
|
* @param options.actionId - Unique ID to prevent duplicate requests.
|
|
350
354
|
* @param options.batchId - A custom ID for the batch this transaction belongs to.
|
|
351
355
|
* @param options.deviceConfirmedOn - An enum to indicate what device confirmed the transaction.
|
|
356
|
+
* @param options.disableGasBuffer - Whether to disable the gas estimation buffer.
|
|
352
357
|
* @param options.method - RPC method that requested the transaction.
|
|
353
358
|
* @param options.nestedTransactions - Params for any nested transactions encoded in the data.
|
|
354
359
|
* @param options.origin - The origin of the transaction request, such as a dApp hostname.
|
|
360
|
+
* @param options.publishHook - Custom logic to publish the transaction.
|
|
355
361
|
* @param options.requireApproval - Whether the transaction requires approval by the user, defaults to true unless explicitly disabled.
|
|
356
362
|
* @param options.securityAlertResponse - Response from security validator.
|
|
357
363
|
* @param options.sendFlowHistory - The sendFlowHistory entries to add.
|
|
@@ -365,7 +371,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
365
371
|
*/
|
|
366
372
|
async addTransaction(txParams, options) {
|
|
367
373
|
(0, logger_1.projectLogger)('Adding transaction', txParams, options);
|
|
368
|
-
const { actionId, batchId, deviceConfirmedOn, method, nestedTransactions, networkClientId, origin, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
|
|
374
|
+
const { actionId, batchId, deviceConfirmedOn, disableGasBuffer, method, nestedTransactions, networkClientId, origin, publishHook, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
|
|
369
375
|
txParams = (0, utils_2.normalizeTransactionParams)(txParams);
|
|
370
376
|
if (!__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").has(networkClientId)) {
|
|
371
377
|
throw new Error(`Network client not found - ${networkClientId}`);
|
|
@@ -394,7 +400,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
394
400
|
(0, validation_1.validateTxParams)(txParams, isEIP1559Compatible);
|
|
395
401
|
const isDuplicateBatchId = batchId?.length &&
|
|
396
402
|
this.state.transactions.some((tx) => tx.batchId?.toLowerCase() === batchId?.toLowerCase());
|
|
397
|
-
if (isDuplicateBatchId) {
|
|
403
|
+
if (isDuplicateBatchId && origin && origin !== controller_utils_1.ORIGIN_METAMASK) {
|
|
398
404
|
throw rpc_errors_1.rpcErrors.invalidInput('Batch ID already exists');
|
|
399
405
|
}
|
|
400
406
|
const dappSuggestedGasFees = this.generateDappSuggestedGasFees(txParams, origin);
|
|
@@ -412,6 +418,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
412
418
|
dappSuggestedGasFees,
|
|
413
419
|
delegationAddress,
|
|
414
420
|
deviceConfirmedOn,
|
|
421
|
+
disableGasBuffer,
|
|
415
422
|
id: (0, uuid_1.v1)(),
|
|
416
423
|
isFirstTimeInteraction: undefined,
|
|
417
424
|
nestedTransactions,
|
|
@@ -469,9 +476,10 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
469
476
|
}
|
|
470
477
|
return {
|
|
471
478
|
result: this.processApproval(addedTransactionMeta, {
|
|
479
|
+
actionId,
|
|
472
480
|
isExisting: Boolean(existingTransactionMeta),
|
|
481
|
+
publishHook,
|
|
473
482
|
requireApproval,
|
|
474
|
-
actionId,
|
|
475
483
|
traceContext,
|
|
476
484
|
}),
|
|
477
485
|
transactionMeta: addedTransactionMeta,
|
|
@@ -794,14 +802,16 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
794
802
|
* @param txId - The ID of the transaction to update.
|
|
795
803
|
* @param params - The editable parameters to update.
|
|
796
804
|
* @param params.data - Data to pass with the transaction.
|
|
805
|
+
* @param params.from - Address to send the transaction from.
|
|
797
806
|
* @param params.gas - Maximum number of units of gas to use for the transaction.
|
|
798
807
|
* @param params.gasPrice - Price per gas for legacy transactions.
|
|
799
|
-
* @param params.
|
|
808
|
+
* @param params.maxFeePerGas - Maximum amount per gas to pay for the transaction, including the priority fee.
|
|
809
|
+
* @param params.maxPriorityFeePerGas - Maximum amount per gas to give to validator as incentive.
|
|
800
810
|
* @param params.to - Address to send the transaction to.
|
|
801
811
|
* @param params.value - Value associated with the transaction.
|
|
802
812
|
* @returns The updated transaction metadata.
|
|
803
813
|
*/
|
|
804
|
-
async updateEditableParams(txId, { data, gas, gasPrice,
|
|
814
|
+
async updateEditableParams(txId, { data, from, gas, gasPrice, maxFeePerGas, maxPriorityFeePerGas, to, value, }) {
|
|
805
815
|
const transactionMeta = this.getTransaction(txId);
|
|
806
816
|
if (!transactionMeta) {
|
|
807
817
|
throw new Error(`Cannot update editable params as no transaction metadata found`);
|
|
@@ -815,6 +825,8 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
815
825
|
value,
|
|
816
826
|
gas,
|
|
817
827
|
gasPrice,
|
|
828
|
+
maxFeePerGas,
|
|
829
|
+
maxPriorityFeePerGas,
|
|
818
830
|
},
|
|
819
831
|
};
|
|
820
832
|
editableParams.txParams = (0, lodash_1.pickBy)(editableParams.txParams);
|
|
@@ -1167,6 +1179,38 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1167
1179
|
});
|
|
1168
1180
|
return updatedTransactionMeta.txParams.data;
|
|
1169
1181
|
}
|
|
1182
|
+
/**
|
|
1183
|
+
* Update the batch transactions associated with a transaction.
|
|
1184
|
+
* These transactions will be submitted with the main transaction as a batch.
|
|
1185
|
+
*
|
|
1186
|
+
* @param request - The request object.
|
|
1187
|
+
* @param request.transactionId - The ID of the transaction to update.
|
|
1188
|
+
* @param request.batchTransactions - The new batch transactions.
|
|
1189
|
+
*/
|
|
1190
|
+
updateBatchTransactions({ transactionId, batchTransactions, }) {
|
|
1191
|
+
(0, logger_1.projectLogger)('Updating batch transactions', { transactionId, batchTransactions });
|
|
1192
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
|
|
1193
|
+
transactionId,
|
|
1194
|
+
note: 'TransactionController#updateBatchTransactions - Batch transactions updated',
|
|
1195
|
+
}, (transactionMeta) => {
|
|
1196
|
+
transactionMeta.batchTransactions = batchTransactions;
|
|
1197
|
+
});
|
|
1198
|
+
}
|
|
1199
|
+
/**
|
|
1200
|
+
* Update the selected gas fee token for a transaction.
|
|
1201
|
+
*
|
|
1202
|
+
* @param transactionId - The ID of the transaction to update.
|
|
1203
|
+
* @param contractAddress - The contract address of the selected gas fee token.
|
|
1204
|
+
*/
|
|
1205
|
+
updateSelectedGasFeeToken(transactionId, contractAddress) {
|
|
1206
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId }, (transactionMeta) => {
|
|
1207
|
+
const hasMatchingGasFeeToken = transactionMeta.gasFeeTokens?.some((token) => token.tokenAddress.toLowerCase() === contractAddress?.toLowerCase());
|
|
1208
|
+
if (contractAddress && !hasMatchingGasFeeToken) {
|
|
1209
|
+
throw new Error(`No matching gas fee token found with address - ${contractAddress}`);
|
|
1210
|
+
}
|
|
1211
|
+
transactionMeta.selectedGasFeeToken = contractAddress;
|
|
1212
|
+
});
|
|
1213
|
+
}
|
|
1170
1214
|
addMetadata(transactionMeta) {
|
|
1171
1215
|
(0, validation_1.validateTxParams)(transactionMeta.txParams);
|
|
1172
1216
|
this.update((state) => {
|
|
@@ -1209,7 +1253,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1209
1253
|
this.failTransaction(transactionMeta, new Error('Transaction incomplete at startup'));
|
|
1210
1254
|
}
|
|
1211
1255
|
}
|
|
1212
|
-
async processApproval(transactionMeta, { isExisting = false, requireApproval, shouldShowRequest = true,
|
|
1256
|
+
async processApproval(transactionMeta, { actionId, isExisting = false, publishHook, requireApproval, shouldShowRequest = true, traceContext, }) {
|
|
1213
1257
|
const transactionId = transactionMeta.id;
|
|
1214
1258
|
let resultCallbacks;
|
|
1215
1259
|
const { meta, isCompleted } = this.isTransactionCompleted(transactionId);
|
|
@@ -1236,7 +1280,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1236
1280
|
}
|
|
1237
1281
|
const { isCompleted: isTxCompleted } = this.isTransactionCompleted(transactionId);
|
|
1238
1282
|
if (!isTxCompleted) {
|
|
1239
|
-
const approvalResult = await this.approveTransaction(transactionId, traceContext);
|
|
1283
|
+
const approvalResult = await this.approveTransaction(transactionId, traceContext, publishHook);
|
|
1240
1284
|
if (approvalResult === ApprovalState.SkippedViaBeforePublishHook &&
|
|
1241
1285
|
resultCallbacks) {
|
|
1242
1286
|
resultCallbacks.success();
|
|
@@ -1284,12 +1328,14 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1284
1328
|
*
|
|
1285
1329
|
* @param transactionId - The ID of the transaction to approve.
|
|
1286
1330
|
* @param traceContext - The parent context for any new traces.
|
|
1331
|
+
* @param publishHookOverride - Custom logic to publish the transaction.
|
|
1287
1332
|
* @returns The state of the approval.
|
|
1288
1333
|
*/
|
|
1289
|
-
async approveTransaction(transactionId, traceContext) {
|
|
1290
|
-
|
|
1291
|
-
|
|
1334
|
+
async approveTransaction(transactionId, traceContext, publishHookOverride) {
|
|
1335
|
+
let clearApprovingTransactionId;
|
|
1336
|
+
let clearNonceLock;
|
|
1292
1337
|
let transactionMeta = this.getTransactionOrThrow(transactionId);
|
|
1338
|
+
(0, logger_1.projectLogger)('Approving transaction', transactionMeta);
|
|
1293
1339
|
try {
|
|
1294
1340
|
if (!this.sign) {
|
|
1295
1341
|
this.failTransaction(transactionMeta, new Error('No sign method defined.'));
|
|
@@ -1304,10 +1350,9 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1304
1350
|
return ApprovalState.NotApproved;
|
|
1305
1351
|
}
|
|
1306
1352
|
this.approvingTransactionIds.add(transactionId);
|
|
1307
|
-
|
|
1353
|
+
clearApprovingTransactionId = () => this.approvingTransactionIds.delete(transactionId);
|
|
1308
1354
|
const [nonce, releaseNonce] = await (0, nonce_1.getNextNonce)(transactionMeta, (address) => __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNonceLock(address, transactionMeta.networkClientId));
|
|
1309
|
-
|
|
1310
|
-
releaseNonce && cleanupTasks.push(releaseNonce);
|
|
1355
|
+
clearNonceLock = releaseNonce;
|
|
1311
1356
|
transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
|
|
1312
1357
|
transactionId,
|
|
1313
1358
|
note: 'TransactionController#approveTransaction - Transaction approved',
|
|
@@ -1344,8 +1389,19 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1344
1389
|
}
|
|
1345
1390
|
(0, logger_1.projectLogger)('Publishing transaction', transactionMeta.txParams);
|
|
1346
1391
|
let hash;
|
|
1392
|
+
clearNonceLock?.();
|
|
1393
|
+
clearNonceLock = undefined;
|
|
1394
|
+
if (transactionMeta.batchTransactions?.length) {
|
|
1395
|
+
(0, logger_1.projectLogger)('Found batch transactions', transactionMeta.batchTransactions);
|
|
1396
|
+
const extraTransactionsPublishHook = new ExtraTransactionsPublishHook_1.ExtraTransactionsPublishHook({
|
|
1397
|
+
addTransactionBatch: this.addTransactionBatch.bind(this),
|
|
1398
|
+
transactions: transactionMeta.batchTransactions,
|
|
1399
|
+
});
|
|
1400
|
+
publishHookOverride = extraTransactionsPublishHook.getHook();
|
|
1401
|
+
}
|
|
1347
1402
|
await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Publish', parentContext: traceContext }, async () => {
|
|
1348
|
-
|
|
1403
|
+
const publishHook = publishHookOverride ?? this.publish;
|
|
1404
|
+
({ transactionHash: hash } = await publishHook(transactionMeta, rawTx));
|
|
1349
1405
|
if (hash === undefined) {
|
|
1350
1406
|
hash = await this.publishTransaction(ethQuery, {
|
|
1351
1407
|
...transactionMeta,
|
|
@@ -1381,7 +1437,8 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1381
1437
|
return ApprovalState.NotApproved;
|
|
1382
1438
|
}
|
|
1383
1439
|
finally {
|
|
1384
|
-
|
|
1440
|
+
clearApprovingTransactionId?.();
|
|
1441
|
+
clearNonceLock?.();
|
|
1385
1442
|
}
|
|
1386
1443
|
}
|
|
1387
1444
|
async publishTransaction(ethQuery, transactionMeta, { skipSubmitHistory } = {}) {
|
|
@@ -1708,8 +1765,8 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1708
1765
|
transactionMeta,
|
|
1709
1766
|
});
|
|
1710
1767
|
}
|
|
1711
|
-
getNonceTrackerTransactions(
|
|
1712
|
-
return (0, nonce_1.getAndFormatTransactionsForNonceTracker)(chainId, address,
|
|
1768
|
+
getNonceTrackerTransactions(statuses, address, chainId) {
|
|
1769
|
+
return (0, nonce_1.getAndFormatTransactionsForNonceTracker)(chainId, address, statuses, this.state.transactions);
|
|
1713
1770
|
}
|
|
1714
1771
|
onConfirmedTransaction(transactionMeta) {
|
|
1715
1772
|
(0, logger_1.projectLogger)('Processing confirmed transaction', transactionMeta.id);
|
|
@@ -1770,7 +1827,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1770
1827
|
}
|
|
1771
1828
|
}
|
|
1772
1829
|
exports.TransactionController = TransactionController;
|
|
1773
|
-
_TransactionController_internalEvents = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_publicKeyEIP7702 = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_isFirstTimeInteractionEnabled = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_multichainTrackingHelper = new WeakMap(), _TransactionController_checkForPendingTransactionAndStartPolling = new WeakMap(), _TransactionController_instances = new WeakSet(), _TransactionController_retryTransaction = async function _TransactionController_retryTransaction({ actionId, afterSubmit, estimatedBaseFee, gasValues, label, prepareTransactionParams, rate, transactionId, transactionType, }) {
|
|
1830
|
+
_TransactionController_internalEvents = new WeakMap(), _TransactionController_methodDataHelper = new WeakMap(), _TransactionController_incomingTransactionHelper = new WeakMap(), _TransactionController_incomingTransactionOptions = new WeakMap(), _TransactionController_pendingTransactionOptions = new WeakMap(), _TransactionController_publishBatchHook = new WeakMap(), _TransactionController_publicKeyEIP7702 = new WeakMap(), _TransactionController_trace = new WeakMap(), _TransactionController_transactionHistoryLimit = new WeakMap(), _TransactionController_isFirstTimeInteractionEnabled = new WeakMap(), _TransactionController_isSimulationEnabled = new WeakMap(), _TransactionController_testGasFeeFlows = new WeakMap(), _TransactionController_multichainTrackingHelper = new WeakMap(), _TransactionController_checkForPendingTransactionAndStartPolling = new WeakMap(), _TransactionController_instances = new WeakSet(), _TransactionController_retryTransaction = async function _TransactionController_retryTransaction({ actionId, afterSubmit, estimatedBaseFee, gasValues, label, prepareTransactionParams, rate, transactionId, transactionType, }) {
|
|
1774
1831
|
// If transaction is found for same action id, do not create a new transaction.
|
|
1775
1832
|
if (this.getTransactionWithActionId(actionId)) {
|
|
1776
1833
|
return;
|
|
@@ -1878,7 +1935,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
1878
1935
|
// TODO: Fix types
|
|
1879
1936
|
blockTracker,
|
|
1880
1937
|
getPendingTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerPendingTransactions).bind(this, chainId),
|
|
1881
|
-
getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, types_1.TransactionStatus.confirmed, chainId),
|
|
1938
|
+
getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, [types_1.TransactionStatus.confirmed], chainId),
|
|
1882
1939
|
});
|
|
1883
1940
|
}, _TransactionController_createPendingTransactionTracker = function _TransactionController_createPendingTransactionTracker({ provider, blockTracker, chainId, networkClientId, }) {
|
|
1884
1941
|
const ethQuery = new eth_query_1.default(provider);
|
|
@@ -1917,7 +1974,11 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
1917
1974
|
pendingTransactionTracker.hub.on('transaction-failed', this.failTransaction.bind(this));
|
|
1918
1975
|
pendingTransactionTracker.hub.on('transaction-updated', this.updateTransaction.bind(this));
|
|
1919
1976
|
}, _TransactionController_getNonceTrackerPendingTransactions = function _TransactionController_getNonceTrackerPendingTransactions(chainId, address) {
|
|
1920
|
-
const standardPendingTransactions = this.getNonceTrackerTransactions(
|
|
1977
|
+
const standardPendingTransactions = this.getNonceTrackerTransactions([
|
|
1978
|
+
types_1.TransactionStatus.approved,
|
|
1979
|
+
types_1.TransactionStatus.signed,
|
|
1980
|
+
types_1.TransactionStatus.submitted,
|
|
1981
|
+
], address, chainId);
|
|
1921
1982
|
const externalPendingTransactions = this.getExternalPendingTransactions(address, chainId);
|
|
1922
1983
|
return [...standardPendingTransactions, ...externalPendingTransactions];
|
|
1923
1984
|
}, _TransactionController_getGasFeeFlows = function _TransactionController_getGasFeeFlows() {
|
|
@@ -2012,8 +2073,9 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
2012
2073
|
},
|
|
2013
2074
|
tokenBalanceChanges: [],
|
|
2014
2075
|
};
|
|
2076
|
+
let gasFeeTokens = [];
|
|
2015
2077
|
if (__classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this)) {
|
|
2016
|
-
|
|
2078
|
+
const result = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Simulate', parentContext: traceContext }, () => (0, simulation_1.getSimulationData)({
|
|
2017
2079
|
chainId,
|
|
2018
2080
|
from: from,
|
|
2019
2081
|
to: to,
|
|
@@ -2022,6 +2084,8 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
2022
2084
|
}, {
|
|
2023
2085
|
blockTime,
|
|
2024
2086
|
}));
|
|
2087
|
+
gasFeeTokens = result?.gasFeeTokens;
|
|
2088
|
+
simulationData = result?.simulationData;
|
|
2025
2089
|
if (blockTime &&
|
|
2026
2090
|
prevSimulationData &&
|
|
2027
2091
|
(0, ResimulateHelper_1.hasSimulationDataChanged)(prevSimulationData, simulationData)) {
|
|
@@ -2042,6 +2106,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
2042
2106
|
note: 'TransactionController#updateSimulationData - Update simulation data',
|
|
2043
2107
|
skipResimulateCheck: Boolean(blockTime),
|
|
2044
2108
|
}, (txMeta) => {
|
|
2109
|
+
txMeta.gasFeeTokens = gasFeeTokens;
|
|
2045
2110
|
txMeta.simulationData = simulationData;
|
|
2046
2111
|
});
|
|
2047
2112
|
(0, logger_1.projectLogger)('Updated simulation data', transactionId, simulationData);
|