@metamask/transaction-controller 52.1.0 → 52.3.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.
Files changed (210) hide show
  1. package/CHANGELOG.md +55 -4
  2. package/dist/TransactionController.cjs +111 -28
  3. package/dist/TransactionController.cjs.map +1 -1
  4. package/dist/TransactionController.d.cts +33 -5
  5. package/dist/TransactionController.d.cts.map +1 -1
  6. package/dist/TransactionController.d.mts +33 -5
  7. package/dist/TransactionController.d.mts.map +1 -1
  8. package/dist/TransactionController.mjs +114 -31
  9. package/dist/TransactionController.mjs.map +1 -1
  10. package/dist/constants.cjs +1 -0
  11. package/dist/constants.cjs.map +1 -1
  12. package/dist/constants.d.cts +1 -0
  13. package/dist/constants.d.cts.map +1 -1
  14. package/dist/constants.d.mts +1 -0
  15. package/dist/constants.d.mts.map +1 -1
  16. package/dist/constants.mjs +1 -0
  17. package/dist/constants.mjs.map +1 -1
  18. package/dist/gas-flows/DefaultGasFeeFlow.cjs +1 -3
  19. package/dist/gas-flows/DefaultGasFeeFlow.cjs.map +1 -1
  20. package/dist/gas-flows/DefaultGasFeeFlow.d.cts +2 -2
  21. package/dist/gas-flows/DefaultGasFeeFlow.d.cts.map +1 -1
  22. package/dist/gas-flows/DefaultGasFeeFlow.d.mts +2 -2
  23. package/dist/gas-flows/DefaultGasFeeFlow.d.mts.map +1 -1
  24. package/dist/gas-flows/DefaultGasFeeFlow.mjs +1 -3
  25. package/dist/gas-flows/DefaultGasFeeFlow.mjs.map +1 -1
  26. package/dist/gas-flows/LineaGasFeeFlow.cjs +1 -1
  27. package/dist/gas-flows/LineaGasFeeFlow.cjs.map +1 -1
  28. package/dist/gas-flows/LineaGasFeeFlow.d.cts +5 -1
  29. package/dist/gas-flows/LineaGasFeeFlow.d.cts.map +1 -1
  30. package/dist/gas-flows/LineaGasFeeFlow.d.mts +5 -1
  31. package/dist/gas-flows/LineaGasFeeFlow.d.mts.map +1 -1
  32. package/dist/gas-flows/LineaGasFeeFlow.mjs +1 -1
  33. package/dist/gas-flows/LineaGasFeeFlow.mjs.map +1 -1
  34. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs +1 -1
  35. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs.map +1 -1
  36. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.cts +5 -1
  37. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.cts.map +1 -1
  38. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts +5 -1
  39. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts.map +1 -1
  40. package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs +1 -1
  41. package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs.map +1 -1
  42. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs.map +1 -1
  43. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts +5 -1
  44. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts.map +1 -1
  45. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts +5 -1
  46. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts.map +1 -1
  47. package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs.map +1 -1
  48. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.cjs +123 -0
  49. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.cjs.map +1 -0
  50. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.cts +28 -0
  51. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.cts.map +1 -0
  52. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.mts +28 -0
  53. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.mts.map +1 -0
  54. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.mjs +118 -0
  55. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.mjs.map +1 -0
  56. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs +1 -1
  57. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs.map +1 -1
  58. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.cts +5 -1
  59. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.cts.map +1 -1
  60. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts +5 -1
  61. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts.map +1 -1
  62. package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs +1 -1
  63. package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs.map +1 -1
  64. package/dist/gas-flows/TestGasFeeFlow.cjs +1 -1
  65. package/dist/gas-flows/TestGasFeeFlow.cjs.map +1 -1
  66. package/dist/gas-flows/TestGasFeeFlow.d.cts +2 -2
  67. package/dist/gas-flows/TestGasFeeFlow.d.cts.map +1 -1
  68. package/dist/gas-flows/TestGasFeeFlow.d.mts +2 -2
  69. package/dist/gas-flows/TestGasFeeFlow.d.mts.map +1 -1
  70. package/dist/gas-flows/TestGasFeeFlow.mjs +1 -1
  71. package/dist/gas-flows/TestGasFeeFlow.mjs.map +1 -1
  72. package/dist/helpers/GasFeePoller.cjs +11 -8
  73. package/dist/helpers/GasFeePoller.cjs.map +1 -1
  74. package/dist/helpers/GasFeePoller.d.cts +6 -5
  75. package/dist/helpers/GasFeePoller.d.cts.map +1 -1
  76. package/dist/helpers/GasFeePoller.d.mts +6 -5
  77. package/dist/helpers/GasFeePoller.d.mts.map +1 -1
  78. package/dist/helpers/GasFeePoller.mjs +11 -8
  79. package/dist/helpers/GasFeePoller.mjs.map +1 -1
  80. package/dist/helpers/IncomingTransactionHelper.cjs +2 -1
  81. package/dist/helpers/IncomingTransactionHelper.cjs.map +1 -1
  82. package/dist/helpers/IncomingTransactionHelper.d.cts.map +1 -1
  83. package/dist/helpers/IncomingTransactionHelper.d.mts.map +1 -1
  84. package/dist/helpers/IncomingTransactionHelper.mjs +2 -1
  85. package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -1
  86. package/dist/helpers/PendingTransactionTracker.cjs +6 -2
  87. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  88. package/dist/helpers/PendingTransactionTracker.d.cts +5 -2
  89. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  90. package/dist/helpers/PendingTransactionTracker.d.mts +5 -2
  91. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  92. package/dist/helpers/PendingTransactionTracker.mjs +6 -2
  93. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  94. package/dist/helpers/TransactionPoller.cjs +12 -8
  95. package/dist/helpers/TransactionPoller.cjs.map +1 -1
  96. package/dist/helpers/TransactionPoller.d.cts +7 -3
  97. package/dist/helpers/TransactionPoller.d.cts.map +1 -1
  98. package/dist/helpers/TransactionPoller.d.mts +7 -3
  99. package/dist/helpers/TransactionPoller.d.mts.map +1 -1
  100. package/dist/helpers/TransactionPoller.mjs +11 -7
  101. package/dist/helpers/TransactionPoller.mjs.map +1 -1
  102. package/dist/hooks/CollectPublishHook.cjs +84 -0
  103. package/dist/hooks/CollectPublishHook.cjs.map +1 -0
  104. package/dist/hooks/CollectPublishHook.d.cts +29 -0
  105. package/dist/hooks/CollectPublishHook.d.cts.map +1 -0
  106. package/dist/hooks/CollectPublishHook.d.mts +29 -0
  107. package/dist/hooks/CollectPublishHook.d.mts.map +1 -0
  108. package/dist/hooks/CollectPublishHook.mjs +80 -0
  109. package/dist/hooks/CollectPublishHook.mjs.map +1 -0
  110. package/dist/hooks/ExtraTransactionsPublishHook.cjs +90 -0
  111. package/dist/hooks/ExtraTransactionsPublishHook.cjs.map +1 -0
  112. package/dist/hooks/ExtraTransactionsPublishHook.d.cts +18 -0
  113. package/dist/hooks/ExtraTransactionsPublishHook.d.cts.map +1 -0
  114. package/dist/hooks/ExtraTransactionsPublishHook.d.mts +18 -0
  115. package/dist/hooks/ExtraTransactionsPublishHook.d.mts.map +1 -0
  116. package/dist/hooks/ExtraTransactionsPublishHook.mjs +86 -0
  117. package/dist/hooks/ExtraTransactionsPublishHook.mjs.map +1 -0
  118. package/dist/index.cjs.map +1 -1
  119. package/dist/index.d.cts +1 -1
  120. package/dist/index.d.cts.map +1 -1
  121. package/dist/index.d.mts +1 -1
  122. package/dist/index.d.mts.map +1 -1
  123. package/dist/index.mjs.map +1 -1
  124. package/dist/types.cjs.map +1 -1
  125. package/dist/types.d.cts +161 -7
  126. package/dist/types.d.cts.map +1 -1
  127. package/dist/types.d.mts +161 -7
  128. package/dist/types.d.mts.map +1 -1
  129. package/dist/types.mjs.map +1 -1
  130. package/dist/utils/batch.cjs +142 -1
  131. package/dist/utils/batch.cjs.map +1 -1
  132. package/dist/utils/batch.d.cts +7 -1
  133. package/dist/utils/batch.d.cts.map +1 -1
  134. package/dist/utils/batch.d.mts +7 -1
  135. package/dist/utils/batch.d.mts.map +1 -1
  136. package/dist/utils/batch.mjs +142 -1
  137. package/dist/utils/batch.mjs.map +1 -1
  138. package/dist/utils/eip7702.cjs +12 -0
  139. package/dist/utils/eip7702.cjs.map +1 -1
  140. package/dist/utils/eip7702.d.cts.map +1 -1
  141. package/dist/utils/eip7702.d.mts.map +1 -1
  142. package/dist/utils/eip7702.mjs +12 -0
  143. package/dist/utils/eip7702.mjs.map +1 -1
  144. package/dist/utils/feature-flags.cjs +39 -2
  145. package/dist/utils/feature-flags.cjs.map +1 -1
  146. package/dist/utils/feature-flags.d.cts +49 -0
  147. package/dist/utils/feature-flags.d.cts.map +1 -1
  148. package/dist/utils/feature-flags.d.mts +49 -0
  149. package/dist/utils/feature-flags.d.mts.map +1 -1
  150. package/dist/utils/feature-flags.mjs +36 -1
  151. package/dist/utils/feature-flags.mjs.map +1 -1
  152. package/dist/utils/gas-fees.cjs +21 -3
  153. package/dist/utils/gas-fees.cjs.map +1 -1
  154. package/dist/utils/gas-fees.d.cts +14 -0
  155. package/dist/utils/gas-fees.d.cts.map +1 -1
  156. package/dist/utils/gas-fees.d.mts +14 -0
  157. package/dist/utils/gas-fees.d.mts.map +1 -1
  158. package/dist/utils/gas-fees.mjs +19 -2
  159. package/dist/utils/gas-fees.mjs.map +1 -1
  160. package/dist/utils/gas-flow.cjs +3 -2
  161. package/dist/utils/gas-flow.cjs.map +1 -1
  162. package/dist/utils/gas-flow.d.cts +3 -1
  163. package/dist/utils/gas-flow.d.cts.map +1 -1
  164. package/dist/utils/gas-flow.d.mts +3 -1
  165. package/dist/utils/gas-flow.d.mts.map +1 -1
  166. package/dist/utils/gas-flow.mjs +3 -2
  167. package/dist/utils/gas-flow.mjs.map +1 -1
  168. package/dist/utils/gas.cjs +7 -3
  169. package/dist/utils/gas.cjs.map +1 -1
  170. package/dist/utils/gas.mjs +7 -3
  171. package/dist/utils/gas.mjs.map +1 -1
  172. package/dist/utils/layer1-gas-fee-flow.cjs +9 -4
  173. package/dist/utils/layer1-gas-fee-flow.cjs.map +1 -1
  174. package/dist/utils/layer1-gas-fee-flow.d.cts +4 -1
  175. package/dist/utils/layer1-gas-fee-flow.d.cts.map +1 -1
  176. package/dist/utils/layer1-gas-fee-flow.d.mts +4 -1
  177. package/dist/utils/layer1-gas-fee-flow.d.mts.map +1 -1
  178. package/dist/utils/layer1-gas-fee-flow.mjs +9 -4
  179. package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -1
  180. package/dist/utils/nonce.cjs +3 -3
  181. package/dist/utils/nonce.cjs.map +1 -1
  182. package/dist/utils/nonce.d.cts +2 -2
  183. package/dist/utils/nonce.d.cts.map +1 -1
  184. package/dist/utils/nonce.d.mts +2 -2
  185. package/dist/utils/nonce.d.mts.map +1 -1
  186. package/dist/utils/nonce.mjs +3 -3
  187. package/dist/utils/nonce.mjs.map +1 -1
  188. package/dist/utils/simulation-api.cjs.map +1 -1
  189. package/dist/utils/simulation-api.d.cts +37 -0
  190. package/dist/utils/simulation-api.d.cts.map +1 -1
  191. package/dist/utils/simulation-api.d.mts +37 -0
  192. package/dist/utils/simulation-api.d.mts.map +1 -1
  193. package/dist/utils/simulation-api.mjs.map +1 -1
  194. package/dist/utils/simulation.cjs +63 -9
  195. package/dist/utils/simulation.cjs.map +1 -1
  196. package/dist/utils/simulation.d.cts +7 -2
  197. package/dist/utils/simulation.d.cts.map +1 -1
  198. package/dist/utils/simulation.d.mts +7 -2
  199. package/dist/utils/simulation.d.mts.map +1 -1
  200. package/dist/utils/simulation.mjs +63 -9
  201. package/dist/utils/simulation.mjs.map +1 -1
  202. package/dist/utils/utils.cjs +23 -1
  203. package/dist/utils/utils.cjs.map +1 -1
  204. package/dist/utils/utils.d.cts +8 -0
  205. package/dist/utils/utils.d.cts.map +1 -1
  206. package/dist/utils/utils.d.mts +8 -0
  207. package/dist/utils/utils.d.mts.map +1 -1
  208. package/dist/utils/utils.mjs +22 -1
  209. package/dist/utils/utils.mjs.map +1 -1
  210. 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;
@@ -23,8 +23,7 @@ const EthQuery = $importDefault($EthQuery);
23
23
  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
- import { add0x, hexToNumber } from "@metamask/utils";
27
- import { Mutex } from "async-mutex";
26
+ import { add0x, hexToNumber, remove0x } from "@metamask/utils";
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";
@@ -35,6 +34,7 @@ import { getAccountAddressRelationship } from "./api/accounts-api.mjs";
35
34
  import { DefaultGasFeeFlow } from "./gas-flows/DefaultGasFeeFlow.mjs";
36
35
  import { LineaGasFeeFlow } from "./gas-flows/LineaGasFeeFlow.mjs";
37
36
  import { OptimismLayer1GasFeeFlow } from "./gas-flows/OptimismLayer1GasFeeFlow.mjs";
37
+ import { RandomisedEstimationsGasFeeFlow } from "./gas-flows/RandomisedEstimationsGasFeeFlow.mjs";
38
38
  import { ScrollLayer1GasFeeFlow } from "./gas-flows/ScrollLayer1GasFeeFlow.mjs";
39
39
  import { TestGasFeeFlow } from "./gas-flows/TestGasFeeFlow.mjs";
40
40
  import { AccountsApiRemoteTransactionSource } from "./helpers/AccountsApiRemoteTransactionSource.mjs";
@@ -44,10 +44,11 @@ import { MethodDataHelper } from "./helpers/MethodDataHelper.mjs";
44
44
  import { MultichainTrackingHelper } from "./helpers/MultichainTrackingHelper.mjs";
45
45
  import { PendingTransactionTracker } from "./helpers/PendingTransactionTracker.mjs";
46
46
  import { ResimulateHelper, hasSimulationDataChanged, shouldResimulate } from "./helpers/ResimulateHelper.mjs";
47
+ import { ExtraTransactionsPublishHook } from "./hooks/ExtraTransactionsPublishHook.mjs";
47
48
  import { projectLogger as log } from "./logger.mjs";
48
49
  import { TransactionEnvelopeType, TransactionType, TransactionStatus, SimulationErrorCode } from "./types.mjs";
49
50
  import { addTransactionBatch, isAtomicBatchSupported } from "./utils/batch.mjs";
50
- import { generateEIP7702BatchTransaction, getDelegationAddress, signAuthorizationList } from "./utils/eip7702.mjs";
51
+ import { DELEGATION_PREFIX, generateEIP7702BatchTransaction, getDelegationAddress, signAuthorizationList } from "./utils/eip7702.mjs";
51
52
  import { validateConfirmedExternalTransaction } from "./utils/external-transactions.mjs";
52
53
  import { addGasBuffer, estimateGas, updateGas } from "./utils/gas.mjs";
53
54
  import { updateGasFees } from "./utils/gas-fees.mjs";
@@ -60,7 +61,7 @@ import { getTransactionParamsWithIncreasedGasFee } from "./utils/retry.mjs";
60
61
  import { getSimulationData } from "./utils/simulation.mjs";
61
62
  import { updatePostTransactionBalance, updateSwapsTransaction } from "./utils/swaps.mjs";
62
63
  import { determineTransactionType } from "./utils/transaction-type.mjs";
63
- import { normalizeTransactionParams, isEIP1559Transaction, validateGasValues, validateIfTransactionUnapproved, normalizeTxError, normalizeGasFeeValues } from "./utils/utils.mjs";
64
+ import { normalizeTransactionParams, isEIP1559Transaction, validateGasValues, validateIfTransactionUnapproved, normalizeTxError, normalizeGasFeeValues, setEnvelopeType } from "./utils/utils.mjs";
64
65
  import { validateParamTo, validateTransactionOrigin, validateTxParams } from "./utils/validation.mjs";
65
66
  /**
66
67
  * Metadata for the TransactionController state, describing how to "anonymize"
@@ -172,10 +173,10 @@ export class TransactionController extends BaseController {
172
173
  _TransactionController_internalEvents.set(this, new EventEmitter());
173
174
  this.approvingTransactionIds = new Set();
174
175
  _TransactionController_methodDataHelper.set(this, void 0);
175
- this.mutex = new Mutex();
176
176
  _TransactionController_incomingTransactionHelper.set(this, void 0);
177
177
  _TransactionController_incomingTransactionOptions.set(this, void 0);
178
178
  _TransactionController_pendingTransactionOptions.set(this, void 0);
179
+ _TransactionController_publishBatchHook.set(this, void 0);
179
180
  _TransactionController_publicKeyEIP7702.set(this, void 0);
180
181
  this.signAbortCallbacks = new Map();
181
182
  _TransactionController_trace.set(this, void 0);
@@ -208,6 +209,7 @@ export class TransactionController extends BaseController {
208
209
  this.securityProviderRequest = securityProviderRequest;
209
210
  __classPrivateFieldSet(this, _TransactionController_incomingTransactionOptions, incomingTransactions, "f");
210
211
  __classPrivateFieldSet(this, _TransactionController_pendingTransactionOptions, pendingTransactions, "f");
212
+ __classPrivateFieldSet(this, _TransactionController_publishBatchHook, hooks?.publishBatch, "f");
211
213
  __classPrivateFieldSet(this, _TransactionController_publicKeyEIP7702, publicKeyEIP7702, "f");
212
214
  __classPrivateFieldSet(this, _TransactionController_transactionHistoryLimit, transactionHistoryLimit, "f");
213
215
  this.sign = sign;
@@ -249,6 +251,7 @@ export class TransactionController extends BaseController {
249
251
  getProvider: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getProvider).call(this, { networkClientId }),
250
252
  getTransactions: () => this.state.transactions,
251
253
  layer1GasFeeFlows: this.layer1GasFeeFlows,
254
+ messenger: this.messagingSystem,
252
255
  onStateChange: (listener) => {
253
256
  this.messagingSystem.subscribe('TransactionController:stateChange', listener);
254
257
  },
@@ -322,9 +325,12 @@ export class TransactionController extends BaseController {
322
325
  getChainId: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).bind(this),
323
326
  getEthQuery: (networkClientId) => __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, { networkClientId }),
324
327
  getInternalAccounts: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getInternalAccounts).bind(this),
328
+ getTransaction: (transactionId) => this.getTransactionOrThrow(transactionId),
325
329
  messenger: this.messagingSystem,
330
+ publishBatchHook: __classPrivateFieldGet(this, _TransactionController_publishBatchHook, "f"),
326
331
  publicKeyEIP7702: __classPrivateFieldGet(this, _TransactionController_publicKeyEIP7702, "f"),
327
332
  request,
333
+ updateTransaction: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).bind(this),
328
334
  });
329
335
  }
330
336
  /**
@@ -351,9 +357,11 @@ export class TransactionController extends BaseController {
351
357
  * @param options.actionId - Unique ID to prevent duplicate requests.
352
358
  * @param options.batchId - A custom ID for the batch this transaction belongs to.
353
359
  * @param options.deviceConfirmedOn - An enum to indicate what device confirmed the transaction.
360
+ * @param options.disableGasBuffer - Whether to disable the gas estimation buffer.
354
361
  * @param options.method - RPC method that requested the transaction.
355
362
  * @param options.nestedTransactions - Params for any nested transactions encoded in the data.
356
363
  * @param options.origin - The origin of the transaction request, such as a dApp hostname.
364
+ * @param options.publishHook - Custom logic to publish the transaction.
357
365
  * @param options.requireApproval - Whether the transaction requires approval by the user, defaults to true unless explicitly disabled.
358
366
  * @param options.securityAlertResponse - Response from security validator.
359
367
  * @param options.sendFlowHistory - The sendFlowHistory entries to add.
@@ -367,7 +375,7 @@ export class TransactionController extends BaseController {
367
375
  */
368
376
  async addTransaction(txParams, options) {
369
377
  log('Adding transaction', txParams, options);
370
- const { actionId, batchId, deviceConfirmedOn, method, nestedTransactions, networkClientId, origin, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
378
+ const { actionId, batchId, deviceConfirmedOn, disableGasBuffer, method, nestedTransactions, networkClientId, origin, publishHook, requireApproval, securityAlertResponse, sendFlowHistory, swaps = {}, traceContext, type, } = options;
371
379
  txParams = normalizeTransactionParams(txParams);
372
380
  if (!__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").has(networkClientId)) {
373
381
  throw new Error(`Network client not found - ${networkClientId}`);
@@ -394,9 +402,13 @@ export class TransactionController extends BaseController {
394
402
  const delegationAddressPromise = getDelegationAddress(txParams.from, ethQuery).catch(() => undefined);
395
403
  const isEIP1559Compatible = await this.getEIP1559Compatibility(networkClientId);
396
404
  validateTxParams(txParams, isEIP1559Compatible);
405
+ if (!txParams.type) {
406
+ // Determine transaction type based on transaction parameters and network compatibility
407
+ setEnvelopeType(txParams, isEIP1559Compatible);
408
+ }
397
409
  const isDuplicateBatchId = batchId?.length &&
398
410
  this.state.transactions.some((tx) => tx.batchId?.toLowerCase() === batchId?.toLowerCase());
399
- if (isDuplicateBatchId) {
411
+ if (isDuplicateBatchId && origin && origin !== ORIGIN_METAMASK) {
400
412
  throw rpcErrors.invalidInput('Batch ID already exists');
401
413
  }
402
414
  const dappSuggestedGasFees = this.generateDappSuggestedGasFees(txParams, origin);
@@ -414,6 +426,7 @@ export class TransactionController extends BaseController {
414
426
  dappSuggestedGasFees,
415
427
  delegationAddress,
416
428
  deviceConfirmedOn,
429
+ disableGasBuffer,
417
430
  id: random(),
418
431
  isFirstTimeInteraction: undefined,
419
432
  nestedTransactions,
@@ -471,9 +484,10 @@ export class TransactionController extends BaseController {
471
484
  }
472
485
  return {
473
486
  result: this.processApproval(addedTransactionMeta, {
487
+ actionId,
474
488
  isExisting: Boolean(existingTransactionMeta),
489
+ publishHook,
475
490
  requireApproval,
476
- actionId,
477
491
  traceContext,
478
492
  }),
479
493
  transactionMeta: addedTransactionMeta,
@@ -796,14 +810,16 @@ export class TransactionController extends BaseController {
796
810
  * @param txId - The ID of the transaction to update.
797
811
  * @param params - The editable parameters to update.
798
812
  * @param params.data - Data to pass with the transaction.
813
+ * @param params.from - Address to send the transaction from.
799
814
  * @param params.gas - Maximum number of units of gas to use for the transaction.
800
815
  * @param params.gasPrice - Price per gas for legacy transactions.
801
- * @param params.from - Address to send the transaction from.
816
+ * @param params.maxFeePerGas - Maximum amount per gas to pay for the transaction, including the priority fee.
817
+ * @param params.maxPriorityFeePerGas - Maximum amount per gas to give to validator as incentive.
802
818
  * @param params.to - Address to send the transaction to.
803
819
  * @param params.value - Value associated with the transaction.
804
820
  * @returns The updated transaction metadata.
805
821
  */
806
- async updateEditableParams(txId, { data, gas, gasPrice, from, to, value, }) {
822
+ async updateEditableParams(txId, { data, from, gas, gasPrice, maxFeePerGas, maxPriorityFeePerGas, to, value, }) {
807
823
  const transactionMeta = this.getTransaction(txId);
808
824
  if (!transactionMeta) {
809
825
  throw new Error(`Cannot update editable params as no transaction metadata found`);
@@ -817,6 +833,8 @@ export class TransactionController extends BaseController {
817
833
  value,
818
834
  gas,
819
835
  gasPrice,
836
+ maxFeePerGas,
837
+ maxPriorityFeePerGas,
820
838
  },
821
839
  };
822
840
  editableParams.txParams = pickBy(editableParams.txParams);
@@ -828,6 +846,7 @@ export class TransactionController extends BaseController {
828
846
  updatedTransaction.type = type;
829
847
  await updateTransactionLayer1GasFee({
830
848
  layer1GasFeeFlows: this.layer1GasFeeFlows,
849
+ messenger: this.messagingSystem,
831
850
  provider,
832
851
  transactionMeta: updatedTransaction,
833
852
  });
@@ -1040,7 +1059,7 @@ export class TransactionController extends BaseController {
1040
1059
  networkClientId,
1041
1060
  };
1042
1061
  // Guaranteed as the default gas fee flow matches all transactions.
1043
- const gasFeeFlow = getGasFeeFlow(transactionMeta, this.gasFeeFlows);
1062
+ const gasFeeFlow = getGasFeeFlow(transactionMeta, this.gasFeeFlows, this.messagingSystem);
1044
1063
  const ethQuery = new EthQuery(provider);
1045
1064
  const gasFeeControllerData = await this.getGasFeeEstimates({
1046
1065
  networkClientId,
@@ -1048,6 +1067,7 @@ export class TransactionController extends BaseController {
1048
1067
  return gasFeeFlow.getGasFees({
1049
1068
  ethQuery,
1050
1069
  gasFeeControllerData,
1070
+ messenger: this.messagingSystem,
1051
1071
  transactionMeta,
1052
1072
  });
1053
1073
  }
@@ -1067,6 +1087,7 @@ export class TransactionController extends BaseController {
1067
1087
  });
1068
1088
  return await getTransactionLayer1GasFee({
1069
1089
  layer1GasFeeFlows: this.layer1GasFeeFlows,
1090
+ messenger: this.messagingSystem,
1070
1091
  provider,
1071
1092
  transactionMeta: {
1072
1093
  txParams: transactionParams,
@@ -1169,6 +1190,38 @@ export class TransactionController extends BaseController {
1169
1190
  });
1170
1191
  return updatedTransactionMeta.txParams.data;
1171
1192
  }
1193
+ /**
1194
+ * Update the batch transactions associated with a transaction.
1195
+ * These transactions will be submitted with the main transaction as a batch.
1196
+ *
1197
+ * @param request - The request object.
1198
+ * @param request.transactionId - The ID of the transaction to update.
1199
+ * @param request.batchTransactions - The new batch transactions.
1200
+ */
1201
+ updateBatchTransactions({ transactionId, batchTransactions, }) {
1202
+ log('Updating batch transactions', { transactionId, batchTransactions });
1203
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1204
+ transactionId,
1205
+ note: 'TransactionController#updateBatchTransactions - Batch transactions updated',
1206
+ }, (transactionMeta) => {
1207
+ transactionMeta.batchTransactions = batchTransactions;
1208
+ });
1209
+ }
1210
+ /**
1211
+ * Update the selected gas fee token for a transaction.
1212
+ *
1213
+ * @param transactionId - The ID of the transaction to update.
1214
+ * @param contractAddress - The contract address of the selected gas fee token.
1215
+ */
1216
+ updateSelectedGasFeeToken(transactionId, contractAddress) {
1217
+ __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId }, (transactionMeta) => {
1218
+ const hasMatchingGasFeeToken = transactionMeta.gasFeeTokens?.some((token) => token.tokenAddress.toLowerCase() === contractAddress?.toLowerCase());
1219
+ if (contractAddress && !hasMatchingGasFeeToken) {
1220
+ throw new Error(`No matching gas fee token found with address - ${contractAddress}`);
1221
+ }
1222
+ transactionMeta.selectedGasFeeToken = contractAddress;
1223
+ });
1224
+ }
1172
1225
  addMetadata(transactionMeta) {
1173
1226
  validateTxParams(transactionMeta.txParams);
1174
1227
  this.update((state) => {
@@ -1193,10 +1246,12 @@ export class TransactionController extends BaseController {
1193
1246
  gasFeeFlows: this.gasFeeFlows,
1194
1247
  getGasFeeEstimates: this.getGasFeeEstimates,
1195
1248
  getSavedGasFees: this.getSavedGasFees.bind(this),
1249
+ messenger: this.messagingSystem,
1196
1250
  txMeta: transactionMeta,
1197
1251
  }));
1198
1252
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Update Layer 1 Gas Fees', parentContext: traceContext }, async () => await updateTransactionLayer1GasFee({
1199
1253
  layer1GasFeeFlows: this.layer1GasFeeFlows,
1254
+ messenger: this.messagingSystem,
1200
1255
  provider,
1201
1256
  transactionMeta,
1202
1257
  }));
@@ -1211,7 +1266,7 @@ export class TransactionController extends BaseController {
1211
1266
  this.failTransaction(transactionMeta, new Error('Transaction incomplete at startup'));
1212
1267
  }
1213
1268
  }
1214
- async processApproval(transactionMeta, { isExisting = false, requireApproval, shouldShowRequest = true, actionId, traceContext, }) {
1269
+ async processApproval(transactionMeta, { actionId, isExisting = false, publishHook, requireApproval, shouldShowRequest = true, traceContext, }) {
1215
1270
  const transactionId = transactionMeta.id;
1216
1271
  let resultCallbacks;
1217
1272
  const { meta, isCompleted } = this.isTransactionCompleted(transactionId);
@@ -1238,7 +1293,7 @@ export class TransactionController extends BaseController {
1238
1293
  }
1239
1294
  const { isCompleted: isTxCompleted } = this.isTransactionCompleted(transactionId);
1240
1295
  if (!isTxCompleted) {
1241
- const approvalResult = await this.approveTransaction(transactionId, traceContext);
1296
+ const approvalResult = await this.approveTransaction(transactionId, traceContext, publishHook);
1242
1297
  if (approvalResult === ApprovalState.SkippedViaBeforePublishHook &&
1243
1298
  resultCallbacks) {
1244
1299
  resultCallbacks.success();
@@ -1286,12 +1341,14 @@ export class TransactionController extends BaseController {
1286
1341
  *
1287
1342
  * @param transactionId - The ID of the transaction to approve.
1288
1343
  * @param traceContext - The parent context for any new traces.
1344
+ * @param publishHookOverride - Custom logic to publish the transaction.
1289
1345
  * @returns The state of the approval.
1290
1346
  */
1291
- async approveTransaction(transactionId, traceContext) {
1292
- const cleanupTasks = new Array();
1293
- cleanupTasks.push(await this.mutex.acquire());
1347
+ async approveTransaction(transactionId, traceContext, publishHookOverride) {
1348
+ let clearApprovingTransactionId;
1349
+ let clearNonceLock;
1294
1350
  let transactionMeta = this.getTransactionOrThrow(transactionId);
1351
+ log('Approving transaction', transactionMeta);
1295
1352
  try {
1296
1353
  if (!this.sign) {
1297
1354
  this.failTransaction(transactionMeta, new Error('No sign method defined.'));
@@ -1306,10 +1363,9 @@ export class TransactionController extends BaseController {
1306
1363
  return ApprovalState.NotApproved;
1307
1364
  }
1308
1365
  this.approvingTransactionIds.add(transactionId);
1309
- cleanupTasks.push(() => this.approvingTransactionIds.delete(transactionId));
1366
+ clearApprovingTransactionId = () => this.approvingTransactionIds.delete(transactionId);
1310
1367
  const [nonce, releaseNonce] = await getNextNonce(transactionMeta, (address) => __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").getNonceLock(address, transactionMeta.networkClientId));
1311
- // must set transaction to submitted/failed before releasing lock
1312
- releaseNonce && cleanupTasks.push(releaseNonce);
1368
+ clearNonceLock = releaseNonce;
1313
1369
  transactionMeta = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, {
1314
1370
  transactionId,
1315
1371
  note: 'TransactionController#approveTransaction - Transaction approved',
@@ -1346,8 +1402,19 @@ export class TransactionController extends BaseController {
1346
1402
  }
1347
1403
  log('Publishing transaction', transactionMeta.txParams);
1348
1404
  let hash;
1405
+ clearNonceLock?.();
1406
+ clearNonceLock = undefined;
1407
+ if (transactionMeta.batchTransactions?.length) {
1408
+ log('Found batch transactions', transactionMeta.batchTransactions);
1409
+ const extraTransactionsPublishHook = new ExtraTransactionsPublishHook({
1410
+ addTransactionBatch: this.addTransactionBatch.bind(this),
1411
+ transactions: transactionMeta.batchTransactions,
1412
+ });
1413
+ publishHookOverride = extraTransactionsPublishHook.getHook();
1414
+ }
1349
1415
  await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Publish', parentContext: traceContext }, async () => {
1350
- ({ transactionHash: hash } = await this.publish(transactionMeta, rawTx));
1416
+ const publishHook = publishHookOverride ?? this.publish;
1417
+ ({ transactionHash: hash } = await publishHook(transactionMeta, rawTx));
1351
1418
  if (hash === undefined) {
1352
1419
  hash = await this.publishTransaction(ethQuery, {
1353
1420
  ...transactionMeta,
@@ -1383,7 +1450,8 @@ export class TransactionController extends BaseController {
1383
1450
  return ApprovalState.NotApproved;
1384
1451
  }
1385
1452
  finally {
1386
- cleanupTasks.forEach((task) => task());
1453
+ clearApprovingTransactionId?.();
1454
+ clearNonceLock?.();
1387
1455
  }
1388
1456
  }
1389
1457
  async publishTransaction(ethQuery, transactionMeta, { skipSubmitHistory } = {}) {
@@ -1710,8 +1778,8 @@ export class TransactionController extends BaseController {
1710
1778
  transactionMeta,
1711
1779
  });
1712
1780
  }
1713
- getNonceTrackerTransactions(status, address, chainId) {
1714
- return getAndFormatTransactionsForNonceTracker(chainId, address, status, this.state.transactions);
1781
+ getNonceTrackerTransactions(statuses, address, chainId) {
1782
+ return getAndFormatTransactionsForNonceTracker(chainId, address, statuses, this.state.transactions);
1715
1783
  }
1716
1784
  onConfirmedTransaction(transactionMeta) {
1717
1785
  log('Processing confirmed transaction', transactionMeta.id);
@@ -1771,7 +1839,7 @@ export class TransactionController extends BaseController {
1771
1839
  error?.data?.message?.includes('nonce too low'));
1772
1840
  }
1773
1841
  }
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, }) {
1842
+ _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
1843
  // If transaction is found for same action id, do not create a new transaction.
1776
1844
  if (this.getTransactionWithActionId(actionId)) {
1777
1845
  return;
@@ -1879,7 +1947,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
1879
1947
  // TODO: Fix types
1880
1948
  blockTracker,
1881
1949
  getPendingTransactions: __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNonceTrackerPendingTransactions).bind(this, chainId),
1882
- getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, TransactionStatus.confirmed, chainId),
1950
+ getConfirmedTransactions: this.getNonceTrackerTransactions.bind(this, [TransactionStatus.confirmed], chainId),
1883
1951
  });
1884
1952
  }, _TransactionController_createPendingTransactionTracker = function _TransactionController_createPendingTransactionTracker({ provider, blockTracker, chainId, networkClientId, }) {
1885
1953
  const ethQuery = new EthQuery(provider);
@@ -1893,6 +1961,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
1893
1961
  getGlobalLock: () => __classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").acquireNonceLockForChainIdKey({
1894
1962
  chainId,
1895
1963
  }),
1964
+ messenger: this.messagingSystem,
1896
1965
  publishTransaction: (_ethQuery, transactionMeta) => this.publishTransaction(_ethQuery, transactionMeta, {
1897
1966
  skipSubmitHistory: true,
1898
1967
  }),
@@ -1918,14 +1987,22 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
1918
1987
  pendingTransactionTracker.hub.on('transaction-failed', this.failTransaction.bind(this));
1919
1988
  pendingTransactionTracker.hub.on('transaction-updated', this.updateTransaction.bind(this));
1920
1989
  }, _TransactionController_getNonceTrackerPendingTransactions = function _TransactionController_getNonceTrackerPendingTransactions(chainId, address) {
1921
- const standardPendingTransactions = this.getNonceTrackerTransactions(TransactionStatus.submitted, address, chainId);
1990
+ const standardPendingTransactions = this.getNonceTrackerTransactions([
1991
+ TransactionStatus.approved,
1992
+ TransactionStatus.signed,
1993
+ TransactionStatus.submitted,
1994
+ ], address, chainId);
1922
1995
  const externalPendingTransactions = this.getExternalPendingTransactions(address, chainId);
1923
1996
  return [...standardPendingTransactions, ...externalPendingTransactions];
1924
1997
  }, _TransactionController_getGasFeeFlows = function _TransactionController_getGasFeeFlows() {
1925
1998
  if (__classPrivateFieldGet(this, _TransactionController_testGasFeeFlows, "f")) {
1926
1999
  return [new TestGasFeeFlow()];
1927
2000
  }
1928
- return [new LineaGasFeeFlow(), new DefaultGasFeeFlow()];
2001
+ return [
2002
+ new RandomisedEstimationsGasFeeFlow(),
2003
+ new LineaGasFeeFlow(),
2004
+ new DefaultGasFeeFlow(),
2005
+ ];
1929
2006
  }, _TransactionController_getLayer1GasFeeFlows = function _TransactionController_getLayer1GasFeeFlows() {
1930
2007
  return [new OptimismLayer1GasFeeFlow(), new ScrollLayer1GasFeeFlow()];
1931
2008
  }, _TransactionController_updateTransactionInternal = function _TransactionController_updateTransactionInternal({ transactionId, note, skipHistory, skipValidation, skipResimulateCheck, }, callback) {
@@ -2013,8 +2090,12 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
2013
2090
  },
2014
2091
  tokenBalanceChanges: [],
2015
2092
  };
2093
+ let gasFeeTokens = [];
2016
2094
  if (__classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this)) {
2017
- simulationData = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Simulate', parentContext: traceContext }, () => getSimulationData({
2095
+ const authorizationAddress = txParams?.authorizationList?.[0]?.address;
2096
+ const senderCode = authorizationAddress &&
2097
+ (DELEGATION_PREFIX + remove0x(authorizationAddress));
2098
+ const result = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Simulate', parentContext: traceContext }, () => getSimulationData({
2018
2099
  chainId,
2019
2100
  from: from,
2020
2101
  to: to,
@@ -2022,7 +2103,10 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
2022
2103
  data: data,
2023
2104
  }, {
2024
2105
  blockTime,
2106
+ senderCode,
2025
2107
  }));
2108
+ gasFeeTokens = result?.gasFeeTokens;
2109
+ simulationData = result?.simulationData;
2026
2110
  if (blockTime &&
2027
2111
  prevSimulationData &&
2028
2112
  hasSimulationDataChanged(prevSimulationData, simulationData)) {
@@ -2043,17 +2127,16 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
2043
2127
  note: 'TransactionController#updateSimulationData - Update simulation data',
2044
2128
  skipResimulateCheck: Boolean(blockTime),
2045
2129
  }, (txMeta) => {
2130
+ txMeta.gasFeeTokens = gasFeeTokens;
2046
2131
  txMeta.simulationData = simulationData;
2047
2132
  });
2048
2133
  log('Updated simulation data', transactionId, simulationData);
2049
2134
  }, _TransactionController_onGasFeePollerTransactionUpdate = function _TransactionController_onGasFeePollerTransactionUpdate({ transactionId, gasFeeEstimates, gasFeeEstimatesLoaded, layer1GasFee, }) {
2050
2135
  __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_updateTransactionInternal).call(this, { transactionId, skipHistory: true }, (txMeta) => {
2051
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
2052
2136
  updateTransactionGasFees({
2053
2137
  txMeta,
2054
2138
  gasFeeEstimates,
2055
2139
  gasFeeEstimatesLoaded,
2056
- getEIP1559Compatibility: this.getEIP1559Compatibility.bind(this),
2057
2140
  isTxParamsGasFeeUpdatesEnabled: this.isTxParamsGasFeeUpdatesEnabled,
2058
2141
  layer1GasFee,
2059
2142
  });