@metamask/transaction-controller 53.0.0 → 54.1.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 -1
- package/dist/TransactionController.cjs +100 -103
- package/dist/TransactionController.cjs.map +1 -1
- package/dist/TransactionController.d.cts +9 -15
- package/dist/TransactionController.d.cts.map +1 -1
- package/dist/TransactionController.d.mts +9 -15
- package/dist/TransactionController.d.mts.map +1 -1
- package/dist/TransactionController.mjs +102 -105
- package/dist/TransactionController.mjs.map +1 -1
- package/dist/constants.cjs +1 -5
- package/dist/constants.cjs.map +1 -1
- package/dist/constants.d.cts +0 -4
- package/dist/constants.d.cts.map +1 -1
- package/dist/constants.d.mts +0 -4
- package/dist/constants.d.mts.map +1 -1
- package/dist/constants.mjs +0 -4
- package/dist/constants.mjs.map +1 -1
- package/dist/helpers/AccountsApiRemoteTransactionSource.cjs +60 -17
- package/dist/helpers/AccountsApiRemoteTransactionSource.cjs.map +1 -1
- package/dist/helpers/AccountsApiRemoteTransactionSource.d.cts.map +1 -1
- package/dist/helpers/AccountsApiRemoteTransactionSource.d.mts.map +1 -1
- package/dist/helpers/AccountsApiRemoteTransactionSource.mjs +60 -17
- package/dist/helpers/AccountsApiRemoteTransactionSource.mjs.map +1 -1
- package/dist/helpers/GasFeePoller.cjs +2 -1
- package/dist/helpers/GasFeePoller.cjs.map +1 -1
- package/dist/helpers/GasFeePoller.d.cts +1 -1
- package/dist/helpers/GasFeePoller.d.cts.map +1 -1
- package/dist/helpers/GasFeePoller.d.mts +1 -1
- package/dist/helpers/GasFeePoller.d.mts.map +1 -1
- package/dist/helpers/GasFeePoller.mjs +2 -1
- package/dist/helpers/GasFeePoller.mjs.map +1 -1
- package/dist/helpers/PendingTransactionTracker.cjs +1 -0
- package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
- package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
- package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
- package/dist/helpers/PendingTransactionTracker.mjs +1 -0
- package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
- 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 +29 -1
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +29 -1
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/batch.cjs +15 -10
- package/dist/utils/batch.cjs.map +1 -1
- package/dist/utils/batch.d.cts +4 -3
- package/dist/utils/batch.d.cts.map +1 -1
- package/dist/utils/batch.d.mts +4 -3
- package/dist/utils/batch.d.mts.map +1 -1
- package/dist/utils/batch.mjs +15 -10
- package/dist/utils/batch.mjs.map +1 -1
- package/dist/utils/feature-flags.cjs +46 -9
- package/dist/utils/feature-flags.cjs.map +1 -1
- package/dist/utils/feature-flags.d.cts +67 -9
- package/dist/utils/feature-flags.d.cts.map +1 -1
- package/dist/utils/feature-flags.d.mts +67 -9
- package/dist/utils/feature-flags.d.mts.map +1 -1
- package/dist/utils/feature-flags.mjs +44 -8
- package/dist/utils/feature-flags.mjs.map +1 -1
- package/dist/utils/gas.cjs +29 -18
- package/dist/utils/gas.cjs.map +1 -1
- package/dist/utils/gas.d.cts +1 -0
- package/dist/utils/gas.d.cts.map +1 -1
- package/dist/utils/gas.d.mts +1 -0
- package/dist/utils/gas.d.mts.map +1 -1
- package/dist/utils/gas.mjs +30 -19
- package/dist/utils/gas.mjs.map +1 -1
- package/dist/utils/nonce.cjs +4 -1
- package/dist/utils/nonce.cjs.map +1 -1
- package/dist/utils/nonce.d.cts +1 -1
- package/dist/utils/nonce.d.cts.map +1 -1
- package/dist/utils/nonce.d.mts +1 -1
- package/dist/utils/nonce.d.mts.map +1 -1
- package/dist/utils/nonce.mjs +4 -1
- package/dist/utils/nonce.mjs.map +1 -1
- package/dist/utils/validation.cjs +19 -7
- package/dist/utils/validation.cjs.map +1 -1
- package/dist/utils/validation.d.cts +4 -0
- package/dist/utils/validation.d.cts.map +1 -1
- package/dist/utils/validation.d.mts +4 -0
- package/dist/utils/validation.d.mts.map +1 -1
- package/dist/utils/validation.mjs +19 -7
- package/dist/utils/validation.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,42 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [54.1.0]
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Configure gas estimation buffers using feature flags ([#5637](https://github.com/MetaMask/core/pull/5637))
|
|
15
|
+
- Update error codes for duplicate batch ID and batch size limit errors ([#5635](https://github.com/MetaMask/core/pull/5635))
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Do not use fixed gas for type 4 transactions ([#5646](https://github.com/MetaMask/core/pull/5646))
|
|
20
|
+
- Throw if `addTransactionBatch` is called with any nested transaction with `to` matching internal account and including `data` ([#5635](https://github.com/MetaMask/core/pull/5635))
|
|
21
|
+
- Fix incoming transaction support with `queryEntireHistory` set to `false` ([#5582](https://github.com/MetaMask/core/pull/5582))
|
|
22
|
+
|
|
23
|
+
## [54.0.0]
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- Add `isExternalSign` property to `TransactionMeta` to disable nonce generation and signing ([#5604](https://github.com/MetaMask/core/pull/5604))
|
|
28
|
+
- Add types for `isAtomicBatchSupported` method ([#5600](https://github.com/MetaMask/core/pull/5600))
|
|
29
|
+
- `IsAtomicBatchSupportedRequest`
|
|
30
|
+
- `IsAtomicBatchSupportedResult`
|
|
31
|
+
- `IsAtomicBatchSupportedResultEntry`
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- **BREAKING:** Update signature of `isAtomicBatchSupported` method ([#5600](https://github.com/MetaMask/core/pull/5600))
|
|
36
|
+
- Replace `address` argument with `request` object containing `address` and optional `chainIds`.
|
|
37
|
+
- Return array of `IsAtomicBatchSupportedResultEntry` objects.
|
|
38
|
+
- Skip `origin` validation for `batch` transaction type ([#5586](https://github.com/MetaMask/core/pull/5586))
|
|
39
|
+
|
|
40
|
+
### Fixed
|
|
41
|
+
|
|
42
|
+
- **BREAKING:** `enableTxParamsGasFeeUpdates` is renamed to `isAutomaticGasFeeUpdateEnabled` now expects a callback function instead of a boolean. ([#5602](https://github.com/MetaMask/core/pull/5602))
|
|
43
|
+
- This callback is invoked before performing `txParams` gas fee updates. The update will proceed only if the callback returns a truthy value.
|
|
44
|
+
- If not set it will default to return `false`.
|
|
45
|
+
|
|
10
46
|
## [53.0.0]
|
|
11
47
|
|
|
12
48
|
### Added
|
|
@@ -1484,7 +1520,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
1484
1520
|
|
|
1485
1521
|
All changes listed after this point were applied to this package following the monorepo conversion.
|
|
1486
1522
|
|
|
1487
|
-
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@
|
|
1523
|
+
[Unreleased]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@54.1.0...HEAD
|
|
1524
|
+
[54.1.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@54.0.0...@metamask/transaction-controller@54.1.0
|
|
1525
|
+
[54.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@53.0.0...@metamask/transaction-controller@54.0.0
|
|
1488
1526
|
[53.0.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.3.0...@metamask/transaction-controller@53.0.0
|
|
1489
1527
|
[52.3.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.2.0...@metamask/transaction-controller@52.3.0
|
|
1490
1528
|
[52.2.0]: https://github.com/MetaMask/core/compare/@metamask/transaction-controller@52.1.0...@metamask/transaction-controller@52.2.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_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_registerActionHandlers, _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_markNonceDuplicatesDropped, _TransactionController_signTransaction, _TransactionController_onConfirmedTransaction, _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_registerActionHandlers, _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");
|
|
@@ -157,7 +157,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
157
157
|
* @param options - The controller options.
|
|
158
158
|
*/
|
|
159
159
|
constructor(options) {
|
|
160
|
-
const { disableHistory, disableSendFlowHistory, disableSwaps,
|
|
160
|
+
const { disableHistory, disableSendFlowHistory, disableSwaps, isAutomaticGasFeeUpdateEnabled, getCurrentAccountEIP1559Compatibility, getCurrentNetworkEIP1559Compatibility, getExternalPendingTransactions, getGasFeeEstimates, getNetworkClientRegistry, getNetworkState, getPermittedAccounts, getSavedGasFees, incomingTransactions = {}, isFirstTimeInteractionEnabled, isSimulationEnabled, messenger, pendingTransactions = {}, publicKeyEIP7702, securityProviderRequest, sign, state, testGasFeeFlows, trace, transactionHistoryLimit = 40, hooks, } = options;
|
|
161
161
|
super({
|
|
162
162
|
name: controllerName,
|
|
163
163
|
metadata,
|
|
@@ -187,7 +187,8 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
187
187
|
__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").checkForPendingTransactionAndStartPolling();
|
|
188
188
|
});
|
|
189
189
|
this.messagingSystem = messenger;
|
|
190
|
-
this.isTxParamsGasFeeUpdatesEnabled =
|
|
190
|
+
this.isTxParamsGasFeeUpdatesEnabled =
|
|
191
|
+
isAutomaticGasFeeUpdateEnabled ?? ((_txMeta) => false);
|
|
191
192
|
this.getNetworkState = getNetworkState;
|
|
192
193
|
this.isSendFlowHistoryDisabled = disableSendFlowHistory ?? false;
|
|
193
194
|
this.isHistoryDisabled = disableHistory ?? false;
|
|
@@ -334,12 +335,12 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
334
335
|
/**
|
|
335
336
|
* Determine which chains support atomic batch transactions with the given account address.
|
|
336
337
|
*
|
|
337
|
-
* @param
|
|
338
|
-
* @returns
|
|
338
|
+
* @param request - Request object containing the account address and other parameters.
|
|
339
|
+
* @returns Result object containing the supported chains and related information.
|
|
339
340
|
*/
|
|
340
|
-
async isAtomicBatchSupported(
|
|
341
|
+
async isAtomicBatchSupported(request) {
|
|
341
342
|
return (0, batch_1.isAtomicBatchSupported)({
|
|
342
|
-
|
|
343
|
+
...request,
|
|
343
344
|
getEthQuery: (chainId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { chainId }),
|
|
344
345
|
messenger: this.messagingSystem,
|
|
345
346
|
publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
|
|
@@ -407,7 +408,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
407
408
|
const isDuplicateBatchId = batchId?.length &&
|
|
408
409
|
this.state.transactions.some((tx) => tx.batchId?.toLowerCase() === batchId?.toLowerCase());
|
|
409
410
|
if (isDuplicateBatchId && origin && origin !== controller_utils_1.ORIGIN_METAMASK) {
|
|
410
|
-
throw rpc_errors_1.
|
|
411
|
+
throw new rpc_errors_1.JsonRpcError(validation_1.ErrorCode.DuplicateBundleId, 'Batch ID already exists');
|
|
411
412
|
}
|
|
412
413
|
const dappSuggestedGasFees = this.generateDappSuggestedGasFees(txParams, origin);
|
|
413
414
|
const transactionType = type ?? (await (0, transaction_type_1.determineTransactionType)(txParams, ethQuery)).type;
|
|
@@ -678,7 +679,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
678
679
|
updatedTransactionMeta.baseFeePerGas = baseFeePerGas;
|
|
679
680
|
}
|
|
680
681
|
// Update same nonce local transactions as dropped and define replacedBy properties.
|
|
681
|
-
this.
|
|
682
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_markNonceDuplicatesDropped).call(this, transactionId);
|
|
682
683
|
// Update external provided transaction with updated gas values and confirmed status.
|
|
683
684
|
this.updateTransaction(updatedTransactionMeta, `${controllerName}:confirmExternalTransaction - Add external transaction`);
|
|
684
685
|
this.onTransactionStatusChange(updatedTransactionMeta);
|
|
@@ -1394,13 +1395,13 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1394
1395
|
}
|
|
1395
1396
|
});
|
|
1396
1397
|
this.onTransactionStatusChange(transactionMeta);
|
|
1397
|
-
const rawTx = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => this.
|
|
1398
|
+
const rawTx = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_signTransaction).call(this, transactionMeta));
|
|
1398
1399
|
if (!(await this.beforePublish(transactionMeta))) {
|
|
1399
1400
|
(0, logger_1.projectLogger)('Skipping publishing transaction based on hook');
|
|
1400
1401
|
this.messagingSystem.publish(`${controllerName}:transactionPublishingSkipped`, transactionMeta);
|
|
1401
1402
|
return ApprovalState.SkippedViaBeforePublishHook;
|
|
1402
1403
|
}
|
|
1403
|
-
if (!rawTx) {
|
|
1404
|
+
if (!rawTx && !transactionMeta.isExternalSign) {
|
|
1404
1405
|
return ApprovalState.NotApproved;
|
|
1405
1406
|
}
|
|
1406
1407
|
const { networkClientId } = transactionMeta;
|
|
@@ -1427,7 +1428,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1427
1428
|
}
|
|
1428
1429
|
await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Publish', parentContext: traceContext }, async () => {
|
|
1429
1430
|
const publishHook = publishHookOverride ?? this.publish;
|
|
1430
|
-
({ transactionHash: hash } = await publishHook(transactionMeta, rawTx));
|
|
1431
|
+
({ transactionHash: hash } = await publishHook(transactionMeta, rawTx ?? '0x'));
|
|
1431
1432
|
if (hash === undefined) {
|
|
1432
1433
|
hash = await this.publishTransaction(ethQuery, {
|
|
1433
1434
|
...transactionMeta,
|
|
@@ -1651,44 +1652,6 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1651
1652
|
});
|
|
1652
1653
|
return newTransactionMeta;
|
|
1653
1654
|
}
|
|
1654
|
-
/**
|
|
1655
|
-
* Sets other txMeta statuses to dropped if the txMeta that has been confirmed has other transactions
|
|
1656
|
-
* in the transactions have the same nonce.
|
|
1657
|
-
*
|
|
1658
|
-
* @param transactionId - Used to identify original transaction.
|
|
1659
|
-
*/
|
|
1660
|
-
markNonceDuplicatesDropped(transactionId) {
|
|
1661
|
-
const transactionMeta = this.getTransaction(transactionId);
|
|
1662
|
-
if (!transactionMeta) {
|
|
1663
|
-
return;
|
|
1664
|
-
}
|
|
1665
|
-
const nonce = transactionMeta.txParams?.nonce;
|
|
1666
|
-
const from = transactionMeta.txParams?.from;
|
|
1667
|
-
const { chainId } = transactionMeta;
|
|
1668
|
-
const sameNonceTransactions = this.state.transactions.filter((transaction) => transaction.id !== transactionId &&
|
|
1669
|
-
transaction.txParams.from === from &&
|
|
1670
|
-
transaction.txParams.nonce === nonce &&
|
|
1671
|
-
transaction.chainId === chainId &&
|
|
1672
|
-
transaction.type !== types_1.TransactionType.incoming);
|
|
1673
|
-
const sameNonceTransactionIds = sameNonceTransactions.map((transaction) => transaction.id);
|
|
1674
|
-
if (sameNonceTransactions.length === 0) {
|
|
1675
|
-
return;
|
|
1676
|
-
}
|
|
1677
|
-
this.update((state) => {
|
|
1678
|
-
for (const transaction of state.transactions) {
|
|
1679
|
-
if (sameNonceTransactionIds.includes(transaction.id)) {
|
|
1680
|
-
transaction.replacedBy = transactionMeta?.hash;
|
|
1681
|
-
transaction.replacedById = transactionMeta?.id;
|
|
1682
|
-
}
|
|
1683
|
-
}
|
|
1684
|
-
});
|
|
1685
|
-
for (const transaction of this.state.transactions) {
|
|
1686
|
-
if (sameNonceTransactionIds.includes(transaction.id) &&
|
|
1687
|
-
transaction.status !== types_1.TransactionStatus.failed) {
|
|
1688
|
-
this.setTransactionStatusDropped(transaction);
|
|
1689
|
-
}
|
|
1690
|
-
}
|
|
1691
|
-
}
|
|
1692
1655
|
/**
|
|
1693
1656
|
* Method to set transaction status to dropped.
|
|
1694
1657
|
*
|
|
@@ -1745,47 +1708,6 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1745
1708
|
const currentAccountIsEIP1559Compatible = await this.getCurrentAccountEIP1559Compatibility();
|
|
1746
1709
|
return (currentNetworkIsEIP1559Compatible && currentAccountIsEIP1559Compatible);
|
|
1747
1710
|
}
|
|
1748
|
-
async signTransaction(transactionMeta) {
|
|
1749
|
-
const { txParams } = transactionMeta;
|
|
1750
|
-
(0, logger_1.projectLogger)('Signing transaction', txParams);
|
|
1751
|
-
const { authorizationList, from } = txParams;
|
|
1752
|
-
const finalTxParams = { ...txParams };
|
|
1753
|
-
finalTxParams.authorizationList = await (0, eip7702_1.signAuthorizationList)({
|
|
1754
|
-
authorizationList,
|
|
1755
|
-
messenger: this.messagingSystem,
|
|
1756
|
-
transactionMeta,
|
|
1757
|
-
});
|
|
1758
|
-
const unsignedEthTx = (0, prepare_1.prepareTransaction)(transactionMeta.chainId, finalTxParams);
|
|
1759
|
-
this.approvingTransactionIds.add(transactionMeta.id);
|
|
1760
|
-
const signedTx = await new Promise((resolve, reject) => {
|
|
1761
|
-
this.sign?.(unsignedEthTx, from, ...this.getAdditionalSignArguments(transactionMeta)).then(resolve, reject);
|
|
1762
|
-
this.signAbortCallbacks.set(transactionMeta.id, () => reject(new Error('Signing aborted by user')));
|
|
1763
|
-
});
|
|
1764
|
-
this.signAbortCallbacks.delete(transactionMeta.id);
|
|
1765
|
-
if (!signedTx) {
|
|
1766
|
-
(0, logger_1.projectLogger)('Skipping signed status as no signed transaction');
|
|
1767
|
-
return undefined;
|
|
1768
|
-
}
|
|
1769
|
-
const transactionMetaFromHook = (0, lodash_1.cloneDeep)(transactionMeta);
|
|
1770
|
-
if (!this.afterSign(transactionMetaFromHook, signedTx)) {
|
|
1771
|
-
this.updateTransaction(transactionMetaFromHook, 'TransactionController#signTransaction - Update after sign');
|
|
1772
|
-
(0, logger_1.projectLogger)('Skipping signed status based on hook');
|
|
1773
|
-
return undefined;
|
|
1774
|
-
}
|
|
1775
|
-
const transactionMetaWithRsv = {
|
|
1776
|
-
...this.updateTransactionMetaRSV(transactionMetaFromHook, signedTx),
|
|
1777
|
-
status: types_1.TransactionStatus.signed,
|
|
1778
|
-
txParams: finalTxParams,
|
|
1779
|
-
};
|
|
1780
|
-
this.updateTransaction(transactionMetaWithRsv, 'TransactionController#approveTransaction - Transaction signed');
|
|
1781
|
-
this.onTransactionStatusChange(transactionMetaWithRsv);
|
|
1782
|
-
const rawTx = (0, prepare_1.serializeTransaction)(signedTx);
|
|
1783
|
-
const transactionMetaWithRawTx = (0, lodash_1.merge)({}, transactionMetaWithRsv, {
|
|
1784
|
-
rawTx,
|
|
1785
|
-
});
|
|
1786
|
-
this.updateTransaction(transactionMetaWithRawTx, 'TransactionController#approveTransaction - RawTransaction added');
|
|
1787
|
-
return rawTx;
|
|
1788
|
-
}
|
|
1789
1711
|
onTransactionStatusChange(transactionMeta) {
|
|
1790
1712
|
this.messagingSystem.publish(`${controllerName}:transactionStatusUpdated`, {
|
|
1791
1713
|
transactionMeta,
|
|
@@ -1794,17 +1716,6 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1794
1716
|
getNonceTrackerTransactions(statuses, address, chainId) {
|
|
1795
1717
|
return (0, nonce_1.getAndFormatTransactionsForNonceTracker)(chainId, address, statuses, this.state.transactions);
|
|
1796
1718
|
}
|
|
1797
|
-
onConfirmedTransaction(transactionMeta) {
|
|
1798
|
-
(0, logger_1.projectLogger)('Processing confirmed transaction', transactionMeta.id);
|
|
1799
|
-
this.markNonceDuplicatesDropped(transactionMeta.id);
|
|
1800
|
-
this.messagingSystem.publish(`${controllerName}:transactionConfirmed`, transactionMeta);
|
|
1801
|
-
this.onTransactionStatusChange(transactionMeta);
|
|
1802
|
-
// Intentional given potential duration of process.
|
|
1803
|
-
this.updatePostBalance(transactionMeta).catch((error) => {
|
|
1804
|
-
(0, logger_1.projectLogger)('Error while updating post balance', error);
|
|
1805
|
-
throw error;
|
|
1806
|
-
});
|
|
1807
|
-
}
|
|
1808
1719
|
async updatePostBalance(transactionMeta) {
|
|
1809
1720
|
try {
|
|
1810
1721
|
const { networkClientId, type } = transactionMeta;
|
|
@@ -1953,6 +1864,92 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
1953
1864
|
chainId,
|
|
1954
1865
|
networkClientId,
|
|
1955
1866
|
}).provider;
|
|
1867
|
+
}, _TransactionController_markNonceDuplicatesDropped = function _TransactionController_markNonceDuplicatesDropped(transactionId) {
|
|
1868
|
+
const transactionMeta = this.getTransaction(transactionId);
|
|
1869
|
+
if (!transactionMeta) {
|
|
1870
|
+
return;
|
|
1871
|
+
}
|
|
1872
|
+
const nonce = transactionMeta.txParams?.nonce;
|
|
1873
|
+
const from = transactionMeta.txParams?.from;
|
|
1874
|
+
const { chainId } = transactionMeta;
|
|
1875
|
+
const sameNonceTransactions = this.state.transactions.filter((transaction) => transaction.id !== transactionId &&
|
|
1876
|
+
transaction.txParams.from === from &&
|
|
1877
|
+
nonce &&
|
|
1878
|
+
transaction.txParams.nonce === nonce &&
|
|
1879
|
+
transaction.chainId === chainId &&
|
|
1880
|
+
transaction.type !== types_1.TransactionType.incoming);
|
|
1881
|
+
const sameNonceTransactionIds = sameNonceTransactions.map((transaction) => transaction.id);
|
|
1882
|
+
if (sameNonceTransactions.length === 0) {
|
|
1883
|
+
return;
|
|
1884
|
+
}
|
|
1885
|
+
this.update((state) => {
|
|
1886
|
+
for (const transaction of state.transactions) {
|
|
1887
|
+
if (sameNonceTransactionIds.includes(transaction.id)) {
|
|
1888
|
+
transaction.replacedBy = transactionMeta?.hash;
|
|
1889
|
+
transaction.replacedById = transactionMeta?.id;
|
|
1890
|
+
}
|
|
1891
|
+
}
|
|
1892
|
+
});
|
|
1893
|
+
for (const transaction of this.state.transactions) {
|
|
1894
|
+
if (sameNonceTransactionIds.includes(transaction.id) &&
|
|
1895
|
+
transaction.status !== types_1.TransactionStatus.failed) {
|
|
1896
|
+
this.setTransactionStatusDropped(transaction);
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1899
|
+
}, _TransactionController_signTransaction = async function _TransactionController_signTransaction(transactionMeta) {
|
|
1900
|
+
const { isExternalSign, txParams } = transactionMeta;
|
|
1901
|
+
if (isExternalSign) {
|
|
1902
|
+
(0, logger_1.projectLogger)('Skipping sign as signed externally');
|
|
1903
|
+
return undefined;
|
|
1904
|
+
}
|
|
1905
|
+
(0, logger_1.projectLogger)('Signing transaction', txParams);
|
|
1906
|
+
const { authorizationList, from } = txParams;
|
|
1907
|
+
const finalTxParams = { ...txParams };
|
|
1908
|
+
finalTxParams.authorizationList = await (0, eip7702_1.signAuthorizationList)({
|
|
1909
|
+
authorizationList,
|
|
1910
|
+
messenger: this.messagingSystem,
|
|
1911
|
+
transactionMeta,
|
|
1912
|
+
});
|
|
1913
|
+
const unsignedEthTx = (0, prepare_1.prepareTransaction)(transactionMeta.chainId, finalTxParams);
|
|
1914
|
+
this.approvingTransactionIds.add(transactionMeta.id);
|
|
1915
|
+
const signedTx = await new Promise((resolve, reject) => {
|
|
1916
|
+
this.sign?.(unsignedEthTx, from, ...this.getAdditionalSignArguments(transactionMeta)).then(resolve, reject);
|
|
1917
|
+
this.signAbortCallbacks.set(transactionMeta.id, () => reject(new Error('Signing aborted by user')));
|
|
1918
|
+
});
|
|
1919
|
+
this.signAbortCallbacks.delete(transactionMeta.id);
|
|
1920
|
+
if (!signedTx) {
|
|
1921
|
+
(0, logger_1.projectLogger)('Skipping signed status as no signed transaction');
|
|
1922
|
+
return undefined;
|
|
1923
|
+
}
|
|
1924
|
+
const transactionMetaFromHook = (0, lodash_1.cloneDeep)(transactionMeta);
|
|
1925
|
+
if (!this.afterSign(transactionMetaFromHook, signedTx)) {
|
|
1926
|
+
this.updateTransaction(transactionMetaFromHook, 'TransactionController#signTransaction - Update after sign');
|
|
1927
|
+
(0, logger_1.projectLogger)('Skipping signed status based on hook');
|
|
1928
|
+
return undefined;
|
|
1929
|
+
}
|
|
1930
|
+
const transactionMetaWithRsv = {
|
|
1931
|
+
...this.updateTransactionMetaRSV(transactionMetaFromHook, signedTx),
|
|
1932
|
+
status: types_1.TransactionStatus.signed,
|
|
1933
|
+
txParams: finalTxParams,
|
|
1934
|
+
};
|
|
1935
|
+
this.updateTransaction(transactionMetaWithRsv, 'TransactionController#approveTransaction - Transaction signed');
|
|
1936
|
+
this.onTransactionStatusChange(transactionMetaWithRsv);
|
|
1937
|
+
const rawTx = (0, prepare_1.serializeTransaction)(signedTx);
|
|
1938
|
+
const transactionMetaWithRawTx = (0, lodash_1.merge)({}, transactionMetaWithRsv, {
|
|
1939
|
+
rawTx,
|
|
1940
|
+
});
|
|
1941
|
+
this.updateTransaction(transactionMetaWithRawTx, 'TransactionController#approveTransaction - RawTransaction added');
|
|
1942
|
+
return rawTx;
|
|
1943
|
+
}, _TransactionController_onConfirmedTransaction = function _TransactionController_onConfirmedTransaction(transactionMeta) {
|
|
1944
|
+
(0, logger_1.projectLogger)('Processing confirmed transaction', transactionMeta.id);
|
|
1945
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_markNonceDuplicatesDropped).call(this, transactionMeta.id);
|
|
1946
|
+
this.messagingSystem.publish(`${controllerName}:transactionConfirmed`, transactionMeta);
|
|
1947
|
+
this.onTransactionStatusChange(transactionMeta);
|
|
1948
|
+
// Intentional given potential duration of process.
|
|
1949
|
+
this.updatePostBalance(transactionMeta).catch((error) => {
|
|
1950
|
+
(0, logger_1.projectLogger)('Error while updating post balance', error);
|
|
1951
|
+
throw error;
|
|
1952
|
+
});
|
|
1956
1953
|
}, _TransactionController_createNonceTracker = function _TransactionController_createNonceTracker({ provider, blockTracker, chainId, }) {
|
|
1957
1954
|
return new nonce_tracker_1.NonceTracker({
|
|
1958
1955
|
// TODO: Fix types
|
|
@@ -1995,7 +1992,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
1995
1992
|
pendingTransactionTracker.hub.removeAllListeners('transaction-failed');
|
|
1996
1993
|
pendingTransactionTracker.hub.removeAllListeners('transaction-updated');
|
|
1997
1994
|
}, _TransactionController_addPendingTransactionTrackerListeners = function _TransactionController_addPendingTransactionTrackerListeners(pendingTransactionTracker) {
|
|
1998
|
-
pendingTransactionTracker.hub.on('transaction-confirmed', this.
|
|
1995
|
+
pendingTransactionTracker.hub.on('transaction-confirmed', __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_onConfirmedTransaction).bind(this));
|
|
1999
1996
|
pendingTransactionTracker.hub.on('transaction-dropped', this.setTransactionStatusDropped.bind(this));
|
|
2000
1997
|
pendingTransactionTracker.hub.on('transaction-failed', this.failTransaction.bind(this));
|
|
2001
1998
|
pendingTransactionTracker.hub.on('transaction-updated', this.updateTransaction.bind(this));
|