@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
|
@@ -9,7 +9,7 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
9
9
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
10
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
11
|
};
|
|
12
|
-
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;
|
|
12
|
+
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;
|
|
13
13
|
function $importDefault(module) {
|
|
14
14
|
if (module?.__esModule) {
|
|
15
15
|
return module.default;
|
|
@@ -24,7 +24,6 @@ import { NetworkClientType } from "@metamask/network-controller";
|
|
|
24
24
|
import { NonceTracker } from "@metamask/nonce-tracker";
|
|
25
25
|
import { errorCodes, rpcErrors, providerErrors } from "@metamask/rpc-errors";
|
|
26
26
|
import { add0x, hexToNumber } from "@metamask/utils";
|
|
27
|
-
import { Mutex } from "async-mutex";
|
|
28
27
|
// This package purposefully relies on Node's EventEmitter module.
|
|
29
28
|
// eslint-disable-next-line import-x/no-nodejs-modules
|
|
30
29
|
import { EventEmitter } from "events";
|
|
@@ -44,6 +43,7 @@ import { MethodDataHelper } from "./helpers/MethodDataHelper.mjs";
|
|
|
44
43
|
import { MultichainTrackingHelper } from "./helpers/MultichainTrackingHelper.mjs";
|
|
45
44
|
import { PendingTransactionTracker } from "./helpers/PendingTransactionTracker.mjs";
|
|
46
45
|
import { ResimulateHelper, hasSimulationDataChanged, shouldResimulate } from "./helpers/ResimulateHelper.mjs";
|
|
46
|
+
import { ExtraTransactionsPublishHook } from "./hooks/ExtraTransactionsPublishHook.mjs";
|
|
47
47
|
import { projectLogger as log } from "./logger.mjs";
|
|
48
48
|
import { TransactionEnvelopeType, TransactionType, TransactionStatus, SimulationErrorCode } from "./types.mjs";
|
|
49
49
|
import { addTransactionBatch, isAtomicBatchSupported } from "./utils/batch.mjs";
|
|
@@ -172,10 +172,10 @@ export class TransactionController extends BaseController {
|
|
|
172
172
|
_TransactionController_internalEvents.set(this, new EventEmitter());
|
|
173
173
|
this.approvingTransactionIds = new Set();
|
|
174
174
|
_TransactionController_methodDataHelper.set(this, void 0);
|
|
175
|
-
this.mutex = new Mutex();
|
|
176
175
|
_TransactionController_incomingTransactionHelper.set(this, void 0);
|
|
177
176
|
_TransactionController_incomingTransactionOptions.set(this, void 0);
|
|
178
177
|
_TransactionController_pendingTransactionOptions.set(this, void 0);
|
|
178
|
+
_TransactionController_publishBatchHook.set(this, void 0);
|
|
179
179
|
_TransactionController_publicKeyEIP7702.set(this, void 0);
|
|
180
180
|
this.signAbortCallbacks = new Map();
|
|
181
181
|
_TransactionController_trace.set(this, void 0);
|
|
@@ -208,6 +208,7 @@ export class TransactionController extends BaseController {
|
|
|
208
208
|
this.securityProviderRequest = securityProviderRequest;
|
|
209
209
|
__classPrivateFieldSet(this, _TransactionController_incomingTransactionOptions, incomingTransactions, "f");
|
|
210
210
|
__classPrivateFieldSet(this, _TransactionController_pendingTransactionOptions, pendingTransactions, "f");
|
|
211
|
+
__classPrivateFieldSet(this, _TransactionController_publishBatchHook, hooks?.publishBatch, "f");
|
|
211
212
|
__classPrivateFieldSet(this, _TransactionController_publicKeyEIP7702, publicKeyEIP7702, "f");
|
|
212
213
|
__classPrivateFieldSet(this, _TransactionController_transactionHistoryLimit, transactionHistoryLimit, "f");
|
|
213
214
|
this.sign = sign;
|
|
@@ -322,9 +323,12 @@ export class TransactionController extends BaseController {
|
|
|
322
323
|
getChainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).bind(this),
|
|
323
324
|
getEthQuery: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId }),
|
|
324
325
|
getInternalAccounts: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).bind(this),
|
|
326
|
+
getTransaction: (transactionId) => this.getTransactionOrThrow(transactionId),
|
|
325
327
|
messenger: this.messagingSystem,
|
|
328
|
+
publishBatchHook: __classPrivateFieldGet(this, _TransactionController_publishBatchHook, "f"),
|
|
326
329
|
publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
|
|
327
330
|
request,
|
|
331
|
+
updateTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).bind(this),
|
|
328
332
|
});
|
|
329
333
|
}
|
|
330
334
|
/**
|
|
@@ -351,9 +355,11 @@ export class TransactionController extends BaseController {
|
|
|
351
355
|
* @param options.actionId - Unique ID to prevent duplicate requests.
|
|
352
356
|
* @param options.batchId - A custom ID for the batch this transaction belongs to.
|
|
353
357
|
* @param options.deviceConfirmedOn - An enum to indicate what device confirmed the transaction.
|
|
358
|
+
* @param options.disableGasBuffer - Whether to disable the gas estimation buffer.
|
|
354
359
|
* @param options.method - RPC method that requested the transaction.
|
|
355
360
|
* @param options.nestedTransactions - Params for any nested transactions encoded in the data.
|
|
356
361
|
* @param options.origin - The origin of the transaction request, such as a dApp hostname.
|
|
362
|
+
* @param options.publishHook - Custom logic to publish the transaction.
|
|
357
363
|
* @param options.requireApproval - Whether the transaction requires approval by the user, defaults to true unless explicitly disabled.
|
|
358
364
|
* @param options.securityAlertResponse - Response from security validator.
|
|
359
365
|
* @param options.sendFlowHistory - The sendFlowHistory entries to add.
|
|
@@ -367,7 +373,7 @@ export class TransactionController extends BaseController {
|
|
|
367
373
|
*/
|
|
368
374
|
async addTransaction(txParams, options) {
|
|
369
375
|
log('Adding transaction', txParams, options);
|
|
370
|
-
const { actionId, batchId, deviceConfirmedOn, method, nestedTransactions, networkClientId, origin, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
|
|
376
|
+
const { actionId, batchId, deviceConfirmedOn, disableGasBuffer, method, nestedTransactions, networkClientId, origin, publishHook, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
|
|
371
377
|
txParams = normalizeTransactionParams(txParams);
|
|
372
378
|
if (!__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").has(networkClientId)) {
|
|
373
379
|
throw new Error(`Network client not found - ${networkClientId}`);
|
|
@@ -396,7 +402,7 @@ export class TransactionController extends BaseController {
|
|
|
396
402
|
validateTxParams(txParams, isEIP1559Compatible);
|
|
397
403
|
const isDuplicateBatchId = batchId?.length &&
|
|
398
404
|
this.state.transactions.some((tx) => tx.batchId?.toLowerCase() === batchId?.toLowerCase());
|
|
399
|
-
if (isDuplicateBatchId) {
|
|
405
|
+
if (isDuplicateBatchId && origin && origin !== ORIGIN_METAMASK) {
|
|
400
406
|
throw rpcErrors.invalidInput('Batch ID already exists');
|
|
401
407
|
}
|
|
402
408
|
const dappSuggestedGasFees = this.generateDappSuggestedGasFees(txParams, origin);
|
|
@@ -414,6 +420,7 @@ export class TransactionController extends BaseController {
|
|
|
414
420
|
dappSuggestedGasFees,
|
|
415
421
|
delegationAddress,
|
|
416
422
|
deviceConfirmedOn,
|
|
423
|
+
disableGasBuffer,
|
|
417
424
|
id: random(),
|
|
418
425
|
isFirstTimeInteraction: undefined,
|
|
419
426
|
nestedTransactions,
|
|
@@ -471,9 +478,10 @@ export class TransactionController extends BaseController {
|
|
|
471
478
|
}
|
|
472
479
|
return {
|
|
473
480
|
result: this.processApproval(addedTransactionMeta, {
|
|
481
|
+
actionId,
|
|
474
482
|
isExisting: Boolean(existingTransactionMeta),
|
|
483
|
+
publishHook,
|
|
475
484
|
requireApproval,
|
|
476
|
-
actionId,
|
|
477
485
|
traceContext,
|
|
478
486
|
}),
|
|
479
487
|
transactionMeta: addedTransactionMeta,
|
|
@@ -796,14 +804,16 @@ export class TransactionController extends BaseController {
|
|
|
796
804
|
* @param txId - The ID of the transaction to update.
|
|
797
805
|
* @param params - The editable parameters to update.
|
|
798
806
|
* @param params.data - Data to pass with the transaction.
|
|
807
|
+
* @param params.from - Address to send the transaction from.
|
|
799
808
|
* @param params.gas - Maximum number of units of gas to use for the transaction.
|
|
800
809
|
* @param params.gasPrice - Price per gas for legacy transactions.
|
|
801
|
-
* @param params.
|
|
810
|
+
* @param params.maxFeePerGas - Maximum amount per gas to pay for the transaction, including the priority fee.
|
|
811
|
+
* @param params.maxPriorityFeePerGas - Maximum amount per gas to give to validator as incentive.
|
|
802
812
|
* @param params.to - Address to send the transaction to.
|
|
803
813
|
* @param params.value - Value associated with the transaction.
|
|
804
814
|
* @returns The updated transaction metadata.
|
|
805
815
|
*/
|
|
806
|
-
async updateEditableParams(txId, { data, gas, gasPrice,
|
|
816
|
+
async updateEditableParams(txId, { data, from, gas, gasPrice, maxFeePerGas, maxPriorityFeePerGas, to, value, }) {
|
|
807
817
|
const transactionMeta = this.getTransaction(txId);
|
|
808
818
|
if (!transactionMeta) {
|
|
809
819
|
throw new Error(`Cannot update editable params as no transaction metadata found`);
|
|
@@ -817,6 +827,8 @@ export class TransactionController extends BaseController {
|
|
|
817
827
|
value,
|
|
818
828
|
gas,
|
|
819
829
|
gasPrice,
|
|
830
|
+
maxFeePerGas,
|
|
831
|
+
maxPriorityFeePerGas,
|
|
820
832
|
},
|
|
821
833
|
};
|
|
822
834
|
editableParams.txParams = pickBy(editableParams.txParams);
|
|
@@ -1169,6 +1181,38 @@ export class TransactionController extends BaseController {
|
|
|
1169
1181
|
});
|
|
1170
1182
|
return updatedTransactionMeta.txParams.data;
|
|
1171
1183
|
}
|
|
1184
|
+
/**
|
|
1185
|
+
* Update the batch transactions associated with a transaction.
|
|
1186
|
+
* These transactions will be submitted with the main transaction as a batch.
|
|
1187
|
+
*
|
|
1188
|
+
* @param request - The request object.
|
|
1189
|
+
* @param request.transactionId - The ID of the transaction to update.
|
|
1190
|
+
* @param request.batchTransactions - The new batch transactions.
|
|
1191
|
+
*/
|
|
1192
|
+
updateBatchTransactions({ transactionId, batchTransactions, }) {
|
|
1193
|
+
log('Updating batch transactions', { transactionId, batchTransactions });
|
|
1194
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
|
|
1195
|
+
transactionId,
|
|
1196
|
+
note: 'TransactionController#updateBatchTransactions - Batch transactions updated',
|
|
1197
|
+
}, (transactionMeta) => {
|
|
1198
|
+
transactionMeta.batchTransactions = batchTransactions;
|
|
1199
|
+
});
|
|
1200
|
+
}
|
|
1201
|
+
/**
|
|
1202
|
+
* Update the selected gas fee token for a transaction.
|
|
1203
|
+
*
|
|
1204
|
+
* @param transactionId - The ID of the transaction to update.
|
|
1205
|
+
* @param contractAddress - The contract address of the selected gas fee token.
|
|
1206
|
+
*/
|
|
1207
|
+
updateSelectedGasFeeToken(transactionId, contractAddress) {
|
|
1208
|
+
__classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId }, (transactionMeta) => {
|
|
1209
|
+
const hasMatchingGasFeeToken = transactionMeta.gasFeeTokens?.some((token) => token.tokenAddress.toLowerCase() === contractAddress?.toLowerCase());
|
|
1210
|
+
if (contractAddress && !hasMatchingGasFeeToken) {
|
|
1211
|
+
throw new Error(`No matching gas fee token found with address - ${contractAddress}`);
|
|
1212
|
+
}
|
|
1213
|
+
transactionMeta.selectedGasFeeToken = contractAddress;
|
|
1214
|
+
});
|
|
1215
|
+
}
|
|
1172
1216
|
addMetadata(transactionMeta) {
|
|
1173
1217
|
validateTxParams(transactionMeta.txParams);
|
|
1174
1218
|
this.update((state) => {
|
|
@@ -1211,7 +1255,7 @@ export class TransactionController extends BaseController {
|
|
|
1211
1255
|
this.failTransaction(transactionMeta, new Error('Transaction incomplete at startup'));
|
|
1212
1256
|
}
|
|
1213
1257
|
}
|
|
1214
|
-
async processApproval(transactionMeta, { isExisting = false, requireApproval, shouldShowRequest = true,
|
|
1258
|
+
async processApproval(transactionMeta, { actionId, isExisting = false, publishHook, requireApproval, shouldShowRequest = true, traceContext, }) {
|
|
1215
1259
|
const transactionId = transactionMeta.id;
|
|
1216
1260
|
let resultCallbacks;
|
|
1217
1261
|
const { meta, isCompleted } = this.isTransactionCompleted(transactionId);
|
|
@@ -1238,7 +1282,7 @@ export class TransactionController extends BaseController {
|
|
|
1238
1282
|
}
|
|
1239
1283
|
const { isCompleted: isTxCompleted } = this.isTransactionCompleted(transactionId);
|
|
1240
1284
|
if (!isTxCompleted) {
|
|
1241
|
-
const approvalResult = await this.approveTransaction(transactionId, traceContext);
|
|
1285
|
+
const approvalResult = await this.approveTransaction(transactionId, traceContext, publishHook);
|
|
1242
1286
|
if (approvalResult === ApprovalState.SkippedViaBeforePublishHook &&
|
|
1243
1287
|
resultCallbacks) {
|
|
1244
1288
|
resultCallbacks.success();
|
|
@@ -1286,12 +1330,14 @@ export class TransactionController extends BaseController {
|
|
|
1286
1330
|
*
|
|
1287
1331
|
* @param transactionId - The ID of the transaction to approve.
|
|
1288
1332
|
* @param traceContext - The parent context for any new traces.
|
|
1333
|
+
* @param publishHookOverride - Custom logic to publish the transaction.
|
|
1289
1334
|
* @returns The state of the approval.
|
|
1290
1335
|
*/
|
|
1291
|
-
async approveTransaction(transactionId, traceContext) {
|
|
1292
|
-
|
|
1293
|
-
|
|
1336
|
+
async approveTransaction(transactionId, traceContext, publishHookOverride) {
|
|
1337
|
+
let clearApprovingTransactionId;
|
|
1338
|
+
let clearNonceLock;
|
|
1294
1339
|
let transactionMeta = this.getTransactionOrThrow(transactionId);
|
|
1340
|
+
log('Approving transaction', transactionMeta);
|
|
1295
1341
|
try {
|
|
1296
1342
|
if (!this.sign) {
|
|
1297
1343
|
this.failTransaction(transactionMeta, new Error('No sign method defined.'));
|
|
@@ -1306,10 +1352,9 @@ export class TransactionController extends BaseController {
|
|
|
1306
1352
|
return ApprovalState.NotApproved;
|
|
1307
1353
|
}
|
|
1308
1354
|
this.approvingTransactionIds.add(transactionId);
|
|
1309
|
-
|
|
1355
|
+
clearApprovingTransactionId = () => this.approvingTransactionIds.delete(transactionId);
|
|
1310
1356
|
const [nonce, releaseNonce] = await getNextNonce(transactionMeta, (address) => __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNonceLock(address, transactionMeta.networkClientId));
|
|
1311
|
-
|
|
1312
|
-
releaseNonce && cleanupTasks.push(releaseNonce);
|
|
1357
|
+
clearNonceLock = releaseNonce;
|
|
1313
1358
|
transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
|
|
1314
1359
|
transactionId,
|
|
1315
1360
|
note: 'TransactionController#approveTransaction - Transaction approved',
|
|
@@ -1346,8 +1391,19 @@ export class TransactionController extends BaseController {
|
|
|
1346
1391
|
}
|
|
1347
1392
|
log('Publishing transaction', transactionMeta.txParams);
|
|
1348
1393
|
let hash;
|
|
1394
|
+
clearNonceLock?.();
|
|
1395
|
+
clearNonceLock = undefined;
|
|
1396
|
+
if (transactionMeta.batchTransactions?.length) {
|
|
1397
|
+
log('Found batch transactions', transactionMeta.batchTransactions);
|
|
1398
|
+
const extraTransactionsPublishHook = new ExtraTransactionsPublishHook({
|
|
1399
|
+
addTransactionBatch: this.addTransactionBatch.bind(this),
|
|
1400
|
+
transactions: transactionMeta.batchTransactions,
|
|
1401
|
+
});
|
|
1402
|
+
publishHookOverride = extraTransactionsPublishHook.getHook();
|
|
1403
|
+
}
|
|
1349
1404
|
await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Publish', parentContext: traceContext }, async () => {
|
|
1350
|
-
|
|
1405
|
+
const publishHook = publishHookOverride ?? this.publish;
|
|
1406
|
+
({ transactionHash: hash } = await publishHook(transactionMeta, rawTx));
|
|
1351
1407
|
if (hash === undefined) {
|
|
1352
1408
|
hash = await this.publishTransaction(ethQuery, {
|
|
1353
1409
|
...transactionMeta,
|
|
@@ -1383,7 +1439,8 @@ export class TransactionController extends BaseController {
|
|
|
1383
1439
|
return ApprovalState.NotApproved;
|
|
1384
1440
|
}
|
|
1385
1441
|
finally {
|
|
1386
|
-
|
|
1442
|
+
clearApprovingTransactionId?.();
|
|
1443
|
+
clearNonceLock?.();
|
|
1387
1444
|
}
|
|
1388
1445
|
}
|
|
1389
1446
|
async publishTransaction(ethQuery, transactionMeta, { skipSubmitHistory } = {}) {
|
|
@@ -1710,8 +1767,8 @@ export class TransactionController extends BaseController {
|
|
|
1710
1767
|
transactionMeta,
|
|
1711
1768
|
});
|
|
1712
1769
|
}
|
|
1713
|
-
getNonceTrackerTransactions(
|
|
1714
|
-
return getAndFormatTransactionsForNonceTracker(chainId, address,
|
|
1770
|
+
getNonceTrackerTransactions(statuses, address, chainId) {
|
|
1771
|
+
return getAndFormatTransactionsForNonceTracker(chainId, address, statuses, this.state.transactions);
|
|
1715
1772
|
}
|
|
1716
1773
|
onConfirmedTransaction(transactionMeta) {
|
|
1717
1774
|
log('Processing confirmed transaction', transactionMeta.id);
|
|
@@ -1771,7 +1828,7 @@ export class TransactionController extends BaseController {
|
|
|
1771
1828
|
error?.data?.message?.includes('nonce too low'));
|
|
1772
1829
|
}
|
|
1773
1830
|
}
|
|
1774
|
-
_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, }) {
|
|
1831
|
+
_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, }) {
|
|
1775
1832
|
// If transaction is found for same action id, do not create a new transaction.
|
|
1776
1833
|
if (this.getTransactionWithActionId(actionId)) {
|
|
1777
1834
|
return;
|
|
@@ -1879,7 +1936,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
1879
1936
|
// TODO: Fix types
|
|
1880
1937
|
blockTracker,
|
|
1881
1938
|
getPendingTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerPendingTransactions).bind(this, chainId),
|
|
1882
|
-
getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, TransactionStatus.confirmed, chainId),
|
|
1939
|
+
getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, [TransactionStatus.confirmed], chainId),
|
|
1883
1940
|
});
|
|
1884
1941
|
}, _TransactionController_createPendingTransactionTracker = function _TransactionController_createPendingTransactionTracker({ provider, blockTracker, chainId, networkClientId, }) {
|
|
1885
1942
|
const ethQuery = new EthQuery(provider);
|
|
@@ -1918,7 +1975,11 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
1918
1975
|
pendingTransactionTracker.hub.on('transaction-failed', this.failTransaction.bind(this));
|
|
1919
1976
|
pendingTransactionTracker.hub.on('transaction-updated', this.updateTransaction.bind(this));
|
|
1920
1977
|
}, _TransactionController_getNonceTrackerPendingTransactions = function _TransactionController_getNonceTrackerPendingTransactions(chainId, address) {
|
|
1921
|
-
const standardPendingTransactions = this.getNonceTrackerTransactions(
|
|
1978
|
+
const standardPendingTransactions = this.getNonceTrackerTransactions([
|
|
1979
|
+
TransactionStatus.approved,
|
|
1980
|
+
TransactionStatus.signed,
|
|
1981
|
+
TransactionStatus.submitted,
|
|
1982
|
+
], address, chainId);
|
|
1922
1983
|
const externalPendingTransactions = this.getExternalPendingTransactions(address, chainId);
|
|
1923
1984
|
return [...standardPendingTransactions, ...externalPendingTransactions];
|
|
1924
1985
|
}, _TransactionController_getGasFeeFlows = function _TransactionController_getGasFeeFlows() {
|
|
@@ -2013,8 +2074,9 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
2013
2074
|
},
|
|
2014
2075
|
tokenBalanceChanges: [],
|
|
2015
2076
|
};
|
|
2077
|
+
let gasFeeTokens = [];
|
|
2016
2078
|
if (__classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this)) {
|
|
2017
|
-
|
|
2079
|
+
const result = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Simulate', parentContext: traceContext }, () => getSimulationData({
|
|
2018
2080
|
chainId,
|
|
2019
2081
|
from: from,
|
|
2020
2082
|
to: to,
|
|
@@ -2023,6 +2085,8 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
2023
2085
|
}, {
|
|
2024
2086
|
blockTime,
|
|
2025
2087
|
}));
|
|
2088
|
+
gasFeeTokens = result?.gasFeeTokens;
|
|
2089
|
+
simulationData = result?.simulationData;
|
|
2026
2090
|
if (blockTime &&
|
|
2027
2091
|
prevSimulationData &&
|
|
2028
2092
|
hasSimulationDataChanged(prevSimulationData, simulationData)) {
|
|
@@ -2043,6 +2107,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
2043
2107
|
note: 'TransactionController#updateSimulationData - Update simulation data',
|
|
2044
2108
|
skipResimulateCheck: Boolean(blockTime),
|
|
2045
2109
|
}, (txMeta) => {
|
|
2110
|
+
txMeta.gasFeeTokens = gasFeeTokens;
|
|
2046
2111
|
txMeta.simulationData = simulationData;
|
|
2047
2112
|
});
|
|
2048
2113
|
log('Updated simulation data', transactionId, simulationData);
|