@metamask-previews/transaction-controller 69.2.1-preview-064aea96d → 69.2.1-preview-ec4680201

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 (229) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/TransactionController-method-action-types.cjs.map +1 -1
  3. package/dist/TransactionController-method-action-types.d.cts.map +1 -1
  4. package/dist/TransactionController-method-action-types.d.mts.map +1 -1
  5. package/dist/TransactionController-method-action-types.mjs.map +1 -1
  6. package/dist/TransactionController.cjs +205 -205
  7. package/dist/TransactionController.cjs.map +1 -1
  8. package/dist/TransactionController.d.cts.map +1 -1
  9. package/dist/TransactionController.d.mts.map +1 -1
  10. package/dist/TransactionController.mjs +1 -1
  11. package/dist/TransactionController.mjs.map +1 -1
  12. package/dist/api/accounts-api.cjs +5 -5
  13. package/dist/api/accounts-api.cjs.map +1 -1
  14. package/dist/api/accounts-api.mjs.map +1 -1
  15. package/dist/api/simulation-api.cjs +8 -8
  16. package/dist/api/simulation-api.cjs.map +1 -1
  17. package/dist/api/simulation-api.d.cts.map +1 -1
  18. package/dist/api/simulation-api.d.mts.map +1 -1
  19. package/dist/api/simulation-api.mjs.map +1 -1
  20. package/dist/errors.cjs +4 -4
  21. package/dist/errors.cjs.map +1 -1
  22. package/dist/errors.mjs.map +1 -1
  23. package/dist/gas-flows/DefaultGasFeeFlow.cjs +13 -13
  24. package/dist/gas-flows/DefaultGasFeeFlow.cjs.map +1 -1
  25. package/dist/gas-flows/DefaultGasFeeFlow.d.cts.map +1 -1
  26. package/dist/gas-flows/DefaultGasFeeFlow.d.mts.map +1 -1
  27. package/dist/gas-flows/DefaultGasFeeFlow.mjs.map +1 -1
  28. package/dist/gas-flows/LineaGasFeeFlow.cjs +10 -10
  29. package/dist/gas-flows/LineaGasFeeFlow.cjs.map +1 -1
  30. package/dist/gas-flows/LineaGasFeeFlow.d.cts.map +1 -1
  31. package/dist/gas-flows/LineaGasFeeFlow.d.mts.map +1 -1
  32. package/dist/gas-flows/LineaGasFeeFlow.mjs.map +1 -1
  33. package/dist/gas-flows/MantleLayer1GasFeeFlow.cjs +8 -8
  34. package/dist/gas-flows/MantleLayer1GasFeeFlow.cjs.map +1 -1
  35. package/dist/gas-flows/MantleLayer1GasFeeFlow.d.cts.map +1 -1
  36. package/dist/gas-flows/MantleLayer1GasFeeFlow.d.mts.map +1 -1
  37. package/dist/gas-flows/MantleLayer1GasFeeFlow.mjs.map +1 -1
  38. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs +10 -10
  39. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs.map +1 -1
  40. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.cts.map +1 -1
  41. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts.map +1 -1
  42. package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs.map +1 -1
  43. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs +10 -10
  44. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs.map +1 -1
  45. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts.map +1 -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 +13 -13
  49. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.cjs.map +1 -1
  50. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.cts.map +1 -1
  51. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.mts.map +1 -1
  52. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.mjs.map +1 -1
  53. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs +4 -4
  54. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs.map +1 -1
  55. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.cts.map +1 -1
  56. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts.map +1 -1
  57. package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs.map +1 -1
  58. package/dist/gas-flows/TestGasFeeFlow.cjs +2 -2
  59. package/dist/gas-flows/TestGasFeeFlow.cjs.map +1 -1
  60. package/dist/gas-flows/TestGasFeeFlow.d.cts.map +1 -1
  61. package/dist/gas-flows/TestGasFeeFlow.d.mts.map +1 -1
  62. package/dist/gas-flows/TestGasFeeFlow.mjs.map +1 -1
  63. package/dist/helpers/GasFeePoller.cjs +22 -22
  64. package/dist/helpers/GasFeePoller.cjs.map +1 -1
  65. package/dist/helpers/GasFeePoller.d.cts +2 -2
  66. package/dist/helpers/GasFeePoller.d.cts.map +1 -1
  67. package/dist/helpers/GasFeePoller.d.mts +2 -2
  68. package/dist/helpers/GasFeePoller.d.mts.map +1 -1
  69. package/dist/helpers/GasFeePoller.mjs.map +1 -1
  70. package/dist/helpers/MethodDataHelper.cjs +4 -4
  71. package/dist/helpers/MethodDataHelper.cjs.map +1 -1
  72. package/dist/helpers/MethodDataHelper.d.cts +2 -2
  73. package/dist/helpers/MethodDataHelper.d.cts.map +1 -1
  74. package/dist/helpers/MethodDataHelper.d.mts +2 -2
  75. package/dist/helpers/MethodDataHelper.d.mts.map +1 -1
  76. package/dist/helpers/MethodDataHelper.mjs.map +1 -1
  77. package/dist/helpers/MultichainTrackingHelper.cjs +2 -2
  78. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -1
  79. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -1
  80. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -1
  81. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -1
  82. package/dist/helpers/PendingTransactionTracker.cjs +22 -22
  83. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
  84. package/dist/helpers/PendingTransactionTracker.d.cts +2 -2
  85. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
  86. package/dist/helpers/PendingTransactionTracker.d.mts +2 -2
  87. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
  88. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
  89. package/dist/helpers/ResimulateHelper.cjs +6 -6
  90. package/dist/helpers/ResimulateHelper.cjs.map +1 -1
  91. package/dist/helpers/ResimulateHelper.d.cts.map +1 -1
  92. package/dist/helpers/ResimulateHelper.d.mts.map +1 -1
  93. package/dist/helpers/ResimulateHelper.mjs.map +1 -1
  94. package/dist/helpers/TransactionPoller.cjs +4 -4
  95. package/dist/helpers/TransactionPoller.cjs.map +1 -1
  96. package/dist/helpers/TransactionPoller.d.cts.map +1 -1
  97. package/dist/helpers/TransactionPoller.d.mts.map +1 -1
  98. package/dist/helpers/TransactionPoller.mjs.map +1 -1
  99. package/dist/hooks/CollectPublishHook.cjs +2 -2
  100. package/dist/hooks/CollectPublishHook.cjs.map +1 -1
  101. package/dist/hooks/CollectPublishHook.d.cts.map +1 -1
  102. package/dist/hooks/CollectPublishHook.d.mts.map +1 -1
  103. package/dist/hooks/CollectPublishHook.mjs.map +1 -1
  104. package/dist/hooks/ExtraTransactionsPublishHook.cjs +2 -2
  105. package/dist/hooks/ExtraTransactionsPublishHook.cjs.map +1 -1
  106. package/dist/hooks/ExtraTransactionsPublishHook.d.cts.map +1 -1
  107. package/dist/hooks/ExtraTransactionsPublishHook.d.mts.map +1 -1
  108. package/dist/hooks/ExtraTransactionsPublishHook.mjs.map +1 -1
  109. package/dist/hooks/SequentialPublishBatchHook.cjs +2 -2
  110. package/dist/hooks/SequentialPublishBatchHook.cjs.map +1 -1
  111. package/dist/hooks/SequentialPublishBatchHook.d.cts.map +1 -1
  112. package/dist/hooks/SequentialPublishBatchHook.d.mts.map +1 -1
  113. package/dist/hooks/SequentialPublishBatchHook.mjs.map +1 -1
  114. package/dist/index.cjs +33 -33
  115. package/dist/index.cjs.map +1 -1
  116. package/dist/index.d.cts.map +1 -1
  117. package/dist/index.d.mts.map +1 -1
  118. package/dist/index.mjs.map +1 -1
  119. package/dist/types.cjs.map +1 -1
  120. package/dist/types.d.cts.map +1 -1
  121. package/dist/types.d.mts.map +1 -1
  122. package/dist/types.mjs.map +1 -1
  123. package/dist/utils/balance-changes.cjs +31 -31
  124. package/dist/utils/balance-changes.cjs.map +1 -1
  125. package/dist/utils/balance-changes.d.cts.map +1 -1
  126. package/dist/utils/balance-changes.d.mts.map +1 -1
  127. package/dist/utils/balance-changes.mjs.map +1 -1
  128. package/dist/utils/balance.cjs +2 -2
  129. package/dist/utils/balance.cjs.map +1 -1
  130. package/dist/utils/balance.d.cts.map +1 -1
  131. package/dist/utils/balance.d.mts.map +1 -1
  132. package/dist/utils/balance.mjs.map +1 -1
  133. package/dist/utils/batch.cjs +45 -45
  134. package/dist/utils/batch.cjs.map +1 -1
  135. package/dist/utils/batch.d.cts +1 -1
  136. package/dist/utils/batch.d.cts.map +1 -1
  137. package/dist/utils/batch.d.mts +1 -1
  138. package/dist/utils/batch.d.mts.map +1 -1
  139. package/dist/utils/batch.mjs +1 -1
  140. package/dist/utils/batch.mjs.map +1 -1
  141. package/dist/utils/eip7702.cjs +9 -9
  142. package/dist/utils/eip7702.cjs.map +1 -1
  143. package/dist/utils/eip7702.d.cts.map +1 -1
  144. package/dist/utils/eip7702.d.mts.map +1 -1
  145. package/dist/utils/eip7702.mjs.map +1 -1
  146. package/dist/utils/external-transactions.cjs +2 -2
  147. package/dist/utils/external-transactions.cjs.map +1 -1
  148. package/dist/utils/external-transactions.d.cts.map +1 -1
  149. package/dist/utils/external-transactions.d.mts.map +1 -1
  150. package/dist/utils/external-transactions.mjs.map +1 -1
  151. package/dist/utils/feature-flags.cjs +5 -5
  152. package/dist/utils/feature-flags.cjs.map +1 -1
  153. package/dist/utils/feature-flags.d.cts.map +1 -1
  154. package/dist/utils/feature-flags.d.mts.map +1 -1
  155. package/dist/utils/feature-flags.mjs.map +1 -1
  156. package/dist/utils/first-time-interaction.cjs +14 -14
  157. package/dist/utils/first-time-interaction.cjs.map +1 -1
  158. package/dist/utils/first-time-interaction.d.cts.map +1 -1
  159. package/dist/utils/first-time-interaction.d.mts.map +1 -1
  160. package/dist/utils/first-time-interaction.mjs.map +1 -1
  161. package/dist/utils/gas-fee-tokens.cjs +13 -13
  162. package/dist/utils/gas-fee-tokens.cjs.map +1 -1
  163. package/dist/utils/gas-fee-tokens.d.cts.map +1 -1
  164. package/dist/utils/gas-fee-tokens.d.mts.map +1 -1
  165. package/dist/utils/gas-fee-tokens.mjs.map +1 -1
  166. package/dist/utils/gas-fees.cjs +19 -19
  167. package/dist/utils/gas-fees.cjs.map +1 -1
  168. package/dist/utils/gas-fees.d.cts.map +1 -1
  169. package/dist/utils/gas-fees.d.mts.map +1 -1
  170. package/dist/utils/gas-fees.mjs.map +1 -1
  171. package/dist/utils/gas-flow.cjs +6 -6
  172. package/dist/utils/gas-flow.cjs.map +1 -1
  173. package/dist/utils/gas-flow.d.cts.map +1 -1
  174. package/dist/utils/gas-flow.d.mts.map +1 -1
  175. package/dist/utils/gas-flow.mjs.map +1 -1
  176. package/dist/utils/gas.cjs +27 -27
  177. package/dist/utils/gas.cjs.map +1 -1
  178. package/dist/utils/gas.d.cts.map +1 -1
  179. package/dist/utils/gas.d.mts.map +1 -1
  180. package/dist/utils/gas.mjs.map +1 -1
  181. package/dist/utils/layer1-gas-fee-flow.cjs +2 -2
  182. package/dist/utils/layer1-gas-fee-flow.cjs.map +1 -1
  183. package/dist/utils/layer1-gas-fee-flow.d.cts.map +1 -1
  184. package/dist/utils/layer1-gas-fee-flow.d.mts.map +1 -1
  185. package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -1
  186. package/dist/utils/nonce.cjs +2 -2
  187. package/dist/utils/nonce.cjs.map +1 -1
  188. package/dist/utils/nonce.d.cts.map +1 -1
  189. package/dist/utils/nonce.d.mts.map +1 -1
  190. package/dist/utils/nonce.mjs.map +1 -1
  191. package/dist/utils/prepare.cjs.map +1 -1
  192. package/dist/utils/prepare.d.cts.map +1 -1
  193. package/dist/utils/prepare.d.mts.map +1 -1
  194. package/dist/utils/prepare.mjs.map +1 -1
  195. package/dist/utils/provider.cjs +2 -2
  196. package/dist/utils/provider.cjs.map +1 -1
  197. package/dist/utils/provider.d.cts.map +1 -1
  198. package/dist/utils/provider.d.mts.map +1 -1
  199. package/dist/utils/provider.mjs.map +1 -1
  200. package/dist/utils/retry.cjs.map +1 -1
  201. package/dist/utils/retry.d.cts.map +1 -1
  202. package/dist/utils/retry.d.mts.map +1 -1
  203. package/dist/utils/retry.mjs.map +1 -1
  204. package/dist/utils/revert-reason.cjs +4 -4
  205. package/dist/utils/revert-reason.cjs.map +1 -1
  206. package/dist/utils/revert-reason.d.cts.map +1 -1
  207. package/dist/utils/revert-reason.d.mts.map +1 -1
  208. package/dist/utils/revert-reason.mjs.map +1 -1
  209. package/dist/utils/swaps.cjs +28 -28
  210. package/dist/utils/swaps.cjs.map +1 -1
  211. package/dist/utils/swaps.d.cts.map +1 -1
  212. package/dist/utils/swaps.d.mts.map +1 -1
  213. package/dist/utils/swaps.mjs.map +1 -1
  214. package/dist/utils/transaction-type.cjs +14 -14
  215. package/dist/utils/transaction-type.cjs.map +1 -1
  216. package/dist/utils/transaction-type.d.cts.map +1 -1
  217. package/dist/utils/transaction-type.d.mts.map +1 -1
  218. package/dist/utils/transaction-type.mjs.map +1 -1
  219. package/dist/utils/utils.cjs +8 -8
  220. package/dist/utils/utils.cjs.map +1 -1
  221. package/dist/utils/utils.d.cts.map +1 -1
  222. package/dist/utils/utils.d.mts.map +1 -1
  223. package/dist/utils/utils.mjs.map +1 -1
  224. package/dist/utils/validation.cjs +11 -11
  225. package/dist/utils/validation.cjs.map +1 -1
  226. package/dist/utils/validation.d.cts.map +1 -1
  227. package/dist/utils/validation.d.mts.map +1 -1
  228. package/dist/utils/validation.mjs.map +1 -1
  229. package/package.json +4 -4
@@ -4,14 +4,14 @@ exports.simulateGasBatch = exports.addGasBuffer = exports.estimateGasBatch = exp
4
4
  const controller_utils_1 = require("@metamask/controller-utils");
5
5
  const utils_1 = require("@metamask/utils");
6
6
  const bignumber_js_1 = require("bignumber.js");
7
- const simulation_api_1 = require("../api/simulation-api.cjs");
8
- const logger_1 = require("../logger.cjs");
9
- const types_1 = require("../types.cjs");
10
- const eip7702_1 = require("./eip7702.cjs");
11
- const feature_flags_1 = require("./feature-flags.cjs");
12
- const provider_1 = require("./provider.cjs");
13
- const revert_reason_1 = require("./revert-reason.cjs");
14
- exports.log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'gas');
7
+ const simulation_api_js_1 = require("../api/simulation-api.cjs");
8
+ const logger_js_1 = require("../logger.cjs");
9
+ const types_js_1 = require("../types.cjs");
10
+ const eip7702_js_1 = require("./eip7702.cjs");
11
+ const feature_flags_js_1 = require("./feature-flags.cjs");
12
+ const provider_js_1 = require("./provider.cjs");
13
+ const revert_reason_js_1 = require("./revert-reason.cjs");
14
+ exports.log = (0, utils_1.createModuleLogger)(logger_js_1.projectLogger, 'gas');
15
15
  exports.FIXED_GAS = '0x5208';
16
16
  exports.DEFAULT_GAS_MULTIPLIER = 1.5;
17
17
  exports.MAX_GAS_BLOCK_PERCENT = 90;
@@ -55,13 +55,13 @@ exports.updateGas = updateGas;
55
55
  async function estimateGas({ ignoreDelegationSignatures, isSimulationEnabled, getSimulationConfig, messenger, networkClientId, txParams, }) {
56
56
  const request = { ...txParams };
57
57
  const { authorizationList, data, value } = request;
58
- const chainId = (0, provider_1.getChainId)({ messenger, networkClientId });
58
+ const chainId = (0, provider_js_1.getChainId)({ messenger, networkClientId });
59
59
  if (ignoreDelegationSignatures && !isSimulationEnabled) {
60
60
  throw new Error('Gas estimation with ignored delegation signatures is not supported as simulation disabled');
61
61
  }
62
62
  const { gasLimit: blockGasLimit, number: blockNumber } = await getLatestBlock(messenger, networkClientId);
63
63
  const blockGasLimitBN = (0, controller_utils_1.hexToBN)(blockGasLimit);
64
- const { percentage, fixed, maxGasLimit } = (0, feature_flags_1.getGasEstimateFallback)(chainId, messenger);
64
+ const { percentage, fixed, maxGasLimit } = (0, feature_flags_js_1.getGasEstimateFallback)(chainId, messenger);
65
65
  const uncappedFallback = fixed
66
66
  ? (0, controller_utils_1.toHex)(fixed)
67
67
  : (0, controller_utils_1.BNToHex)((0, controller_utils_1.fractionBN)(blockGasLimitBN, percentage, 100));
@@ -84,7 +84,7 @@ async function estimateGas({ ignoreDelegationSignatures, isSimulationEnabled, ge
84
84
  let estimatedGas = fallback;
85
85
  let simulationFails;
86
86
  let gasRevert;
87
- const isUpgradeWithData = txParams.type === types_1.TransactionEnvelopeType.setCode &&
87
+ const isUpgradeWithData = txParams.type === types_js_1.TransactionEnvelopeType.setCode &&
88
88
  Boolean(authorizationList?.length) &&
89
89
  Boolean(data) &&
90
90
  data !== '0x';
@@ -113,7 +113,7 @@ async function estimateGas({ ignoreDelegationSignatures, isSimulationEnabled, ge
113
113
  blockGasLimit,
114
114
  },
115
115
  };
116
- gasRevert = (0, revert_reason_1.decodeRevert)(error, 'gas');
116
+ gasRevert = (0, revert_reason_js_1.decodeRevert)(error, 'gas');
117
117
  (0, exports.log)('Estimation failed', { ...simulationFails, fallback, gasRevert });
118
118
  }
119
119
  return {
@@ -153,12 +153,12 @@ function getProvidedBatchGasLimits(transactions) {
153
153
  }
154
154
  exports.getProvidedBatchGasLimits = getProvidedBatchGasLimits;
155
155
  async function estimateGasBatch({ from, getSimulationConfig, isAtomicBatchSupported, messenger, networkClientId, transactions, }) {
156
- const chainId = (0, provider_1.getChainId)({ messenger, networkClientId });
156
+ const chainId = (0, provider_js_1.getChainId)({ messenger, networkClientId });
157
157
  const is7702Result = await isAtomicBatchSupported({
158
158
  address: from,
159
159
  chainIds: [chainId],
160
160
  });
161
- const accountSupports7702 = (0, eip7702_1.doesAccountSupportEIP7702)(messenger, from);
161
+ const accountSupports7702 = (0, eip7702_js_1.doesAccountSupportEIP7702)(messenger, from);
162
162
  const chainResult = accountSupports7702
163
163
  ? is7702Result.find((result) => result.chainId === chainId)
164
164
  : undefined;
@@ -172,10 +172,10 @@ async function estimateGasBatch({ from, getSimulationConfig, isAtomicBatchSuppor
172
172
  ? [{ address: chainResult.upgradeContractAddress }]
173
173
  : undefined;
174
174
  const type = isUpgradeRequired
175
- ? types_1.TransactionEnvelopeType.setCode
175
+ ? types_js_1.TransactionEnvelopeType.setCode
176
176
  : undefined;
177
177
  const params = {
178
- ...(0, eip7702_1.generateEIP7702BatchTransaction)(from, transactions),
178
+ ...(0, eip7702_js_1.generateEIP7702BatchTransaction)(from, transactions),
179
179
  authorizationList,
180
180
  from,
181
181
  type,
@@ -269,7 +269,7 @@ exports.addGasBuffer = addGasBuffer;
269
269
  */
270
270
  async function simulateGasBatch({ chainId, from, getSimulationConfig, transactions, }) {
271
271
  try {
272
- const response = await (0, simulation_api_1.simulateTransactions)(chainId, {
272
+ const response = await (0, simulation_api_js_1.simulateTransactions)(chainId, {
273
273
  getSimulationConfig,
274
274
  transactions: transactions.map((transaction) => ({
275
275
  ...transaction.params,
@@ -307,7 +307,7 @@ exports.simulateGasBatch = simulateGasBatch;
307
307
  async function getGas(request) {
308
308
  const { isCustomNetwork, isSimulationEnabled, getSimulationConfig, messenger, txMeta, } = request;
309
309
  const { networkClientId } = txMeta;
310
- const chainId = (0, provider_1.getChainId)({ messenger, networkClientId });
310
+ const chainId = (0, provider_js_1.getChainId)({ messenger, networkClientId });
311
311
  const { disableGasBuffer } = txMeta;
312
312
  if (txMeta.txParams.gas) {
313
313
  (0, exports.log)('Using value from request', txMeta.txParams.gas);
@@ -334,7 +334,7 @@ async function getGas(request) {
334
334
  if (simulationFails || disableGasBuffer) {
335
335
  return [estimatedGas, simulationFails, estimatedGas, gasRevert];
336
336
  }
337
- const bufferMultiplier = (0, feature_flags_1.getGasEstimateBuffer)({
337
+ const bufferMultiplier = (0, feature_flags_js_1.getGasEstimateBuffer)({
338
338
  chainId,
339
339
  isCustomRPC: isCustomNetwork,
340
340
  isUpgradeWithData,
@@ -359,7 +359,7 @@ async function requiresFixedGas({ messenger, txMeta, isCustomNetwork, }) {
359
359
  if (isCustomNetwork ||
360
360
  !to ||
361
361
  data ||
362
- type === types_1.TransactionEnvelopeType.setCode) {
362
+ type === types_js_1.TransactionEnvelopeType.setCode) {
363
363
  return false;
364
364
  }
365
365
  const code = await getCode(messenger, networkClientId, to);
@@ -374,7 +374,7 @@ async function requiresFixedGas({ messenger, txMeta, isCustomNetwork, }) {
374
374
  * @returns The contract code.
375
375
  */
376
376
  async function getCode(messenger, networkClientId, address) {
377
- return (await (0, provider_1.rpcRequest)({
377
+ return (await (0, provider_js_1.rpcRequest)({
378
378
  messenger,
379
379
  networkClientId,
380
380
  method: 'eth_getCode',
@@ -389,7 +389,7 @@ async function getCode(messenger, networkClientId, address) {
389
389
  * @returns The latest block number.
390
390
  */
391
391
  async function getLatestBlock(messenger, networkClientId) {
392
- return (await (0, provider_1.rpcRequest)({
392
+ return (await (0, provider_js_1.rpcRequest)({
393
393
  messenger,
394
394
  networkClientId,
395
395
  method: 'eth_getBlockByNumber',
@@ -407,7 +407,7 @@ async function getLatestBlock(messenger, networkClientId) {
407
407
  * @returns The estimated gas.
408
408
  */
409
409
  async function estimateGasUpgradeWithDataToSelf(txParams, messenger, networkClientId, chainId, getSimulationConfig) {
410
- const upgradeGas = (await (0, provider_1.rpcRequest)({
410
+ const upgradeGas = (await (0, provider_js_1.rpcRequest)({
411
411
  messenger,
412
412
  networkClientId,
413
413
  method: 'eth_estimateGas',
@@ -459,7 +459,7 @@ async function estimateGasUpgradeWithDataToSelf(txParams, messenger, networkClie
459
459
  * @returns The simulated gas.
460
460
  */
461
461
  async function simulateGas({ chainId, delegationAddress, getSimulationConfig, transaction, }) {
462
- const response = await (0, simulation_api_1.simulateTransactions)(chainId, {
462
+ const response = await (0, simulation_api_js_1.simulateTransactions)(chainId, {
463
463
  getSimulationConfig,
464
464
  transactions: [
465
465
  {
@@ -472,7 +472,7 @@ async function simulateGas({ chainId, delegationAddress, getSimulationConfig, tr
472
472
  overrides: {
473
473
  [transaction.from]: {
474
474
  code: delegationAddress &&
475
- (eip7702_1.DELEGATION_PREFIX + (0, utils_1.remove0x)(delegationAddress)),
475
+ (eip7702_js_1.DELEGATION_PREFIX + (0, utils_1.remove0x)(delegationAddress)),
476
476
  },
477
477
  },
478
478
  });
@@ -515,11 +515,11 @@ async function estimateGasNode(messenger, networkClientId, txParams, delegationA
515
515
  params.push('latest');
516
516
  params.push({
517
517
  [from]: {
518
- code: eip7702_1.DELEGATION_PREFIX + (0, utils_1.remove0x)(delegationAddress),
518
+ code: eip7702_js_1.DELEGATION_PREFIX + (0, utils_1.remove0x)(delegationAddress),
519
519
  },
520
520
  });
521
521
  }
522
- return (await (0, provider_1.rpcRequest)({
522
+ return (await (0, provider_js_1.rpcRequest)({
523
523
  messenger,
524
524
  networkClientId,
525
525
  method: 'eth_estimateGas',
@@ -1 +1 @@
1
- {"version":3,"file":"gas.cjs","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BNToHex,\n fractionBN,\n hexToBN,\n toHex,\n} from '@metamask/controller-utils';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport { add0x, createModuleLogger, remove0x } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { simulateTransactions } from '../api/simulation-api';\nimport { projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport { TransactionEnvelopeType } from '../types';\nimport type {\n AuthorizationList,\n BatchTransactionParams,\n GetSimulationConfig,\n IsAtomicBatchSupportedRequest,\n IsAtomicBatchSupportedResult,\n Revert,\n TransactionBatchSingleRequest,\n TransactionMeta,\n TransactionParams,\n} from '../types';\nimport {\n DELEGATION_PREFIX,\n doesAccountSupportEIP7702,\n generateEIP7702BatchTransaction,\n} from './eip7702';\nimport { getGasEstimateBuffer, getGasEstimateFallback } from './feature-flags';\nimport { getChainId, rpcRequest } from './provider';\nimport { decodeRevert } from './revert-reason';\n\nexport type UpdateGasRequest = {\n isCustomNetwork: boolean;\n isSimulationEnabled: boolean;\n getSimulationConfig: GetSimulationConfig;\n messenger: TransactionControllerMessenger;\n txMeta: TransactionMeta;\n};\n\nexport type EstimateGasBatchResult = {\n gasLimits: number[];\n requiresAuthorizationList?: true;\n totalGasLimit: number;\n};\n\nexport const log = createModuleLogger(projectLogger, 'gas');\n\nexport const FIXED_GAS = '0x5208';\nexport const DEFAULT_GAS_MULTIPLIER = 1.5;\nexport const MAX_GAS_BLOCK_PERCENT = 90;\nexport const INTRINSIC_GAS = 21000;\n\nexport const DUMMY_AUTHORIZATION_SIGNATURE =\n '0x1111111111111111111111111111111111111111111111111111111111111111';\n\n/**\n * Populate the gas properties of the provided transaction meta.\n *\n * @param request - The request object including the necessary parameters.\n */\nexport async function updateGas(request: UpdateGasRequest): Promise<void> {\n const { txMeta } = request;\n const initialParams = { ...txMeta.txParams };\n\n const [gas, simulationFails, gasLimitNoBuffer, gasRevert] =\n await getGas(request);\n\n txMeta.txParams.gas = gas;\n txMeta.simulationFails = simulationFails;\n txMeta.gasLimitNoBuffer = gasLimitNoBuffer;\n\n if (gasRevert) {\n txMeta.revert = { ...txMeta.revert, gas: gasRevert };\n }\n\n if (!initialParams.gas) {\n txMeta.originalGasEstimate = txMeta.txParams.gas;\n }\n\n txMeta.defaultGasEstimates ??= {};\n txMeta.defaultGasEstimates.gas = txMeta.txParams.gas;\n}\n\n/**\n * Estimate the gas for the provided transaction parameters.\n * If the gas estimate fails, the fallback value is returned.\n *\n * @param options - The options object.\n * @param options.ignoreDelegationSignatures - Ignore signature errors if submitting delegations to the DelegationManager.\n * @param options.isSimulationEnabled - Whether the simulation is enabled.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.messenger - The messenger instance for communication.\n * @param options.networkClientId - The network client ID.\n * @param options.txParams - The transaction parameters.\n * @returns The estimated gas and related info.\n */\nexport async function estimateGas({\n ignoreDelegationSignatures,\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams,\n}: {\n ignoreDelegationSignatures?: boolean;\n isSimulationEnabled: boolean;\n getSimulationConfig: GetSimulationConfig;\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n txParams: TransactionParams;\n}): Promise<{\n blockGasLimit: string;\n estimatedGas: string;\n gasRevert?: Revert;\n isUpgradeWithData: boolean;\n simulationFails: TransactionMeta['simulationFails'];\n}> {\n const request = { ...txParams };\n const { authorizationList, data, value } = request;\n const chainId = getChainId({ messenger, networkClientId });\n\n if (ignoreDelegationSignatures && !isSimulationEnabled) {\n throw new Error(\n 'Gas estimation with ignored delegation signatures is not supported as simulation disabled',\n );\n }\n\n const { gasLimit: blockGasLimit, number: blockNumber } = await getLatestBlock(\n messenger,\n networkClientId,\n );\n\n const blockGasLimitBN = hexToBN(blockGasLimit);\n const { percentage, fixed, maxGasLimit } = getGasEstimateFallback(\n chainId,\n messenger,\n );\n\n const uncappedFallback = fixed\n ? toHex(fixed)\n : BNToHex(fractionBN(blockGasLimitBN, percentage, 100));\n\n // Clamp the fallback to the chain's per-transaction gas cap so it can never\n // exceed the gas limit the RPC will accept. Without this, a percentage of a\n // high block gas limit can overshoot the cap (e.g. 35% of Polygon's ~140M\n // block limit is ~49M, but the node caps a tx at ~33.5M and rejects it with\n // \"transaction gas limit too high\").\n const fallback =\n maxGasLimit !== undefined &&\n hexToBN(uncappedFallback).gt(hexToBN(toHex(maxGasLimit)))\n ? toHex(maxGasLimit)\n : uncappedFallback;\n\n log('Estimation fallback values', fallback);\n\n request.data = data ? add0x(data) : data;\n request.value = value ?? '0x0';\n\n request.authorizationList = normalizeAuthorizationList(\n request.authorizationList,\n chainId,\n );\n\n delete request.gasPrice;\n delete request.maxFeePerGas;\n delete request.maxPriorityFeePerGas;\n\n let estimatedGas = fallback;\n let simulationFails: TransactionMeta['simulationFails'];\n let gasRevert: Revert | undefined;\n\n const isUpgradeWithData =\n txParams.type === TransactionEnvelopeType.setCode &&\n Boolean(authorizationList?.length) &&\n Boolean(data) &&\n data !== '0x';\n\n try {\n if (isSimulationEnabled && isUpgradeWithData) {\n estimatedGas = await estimateGasUpgradeWithDataToSelf(\n request,\n messenger,\n networkClientId,\n chainId,\n getSimulationConfig,\n );\n } else if (ignoreDelegationSignatures && isSimulationEnabled) {\n estimatedGas = await simulateGas({\n chainId,\n getSimulationConfig,\n transaction: request,\n });\n } else {\n estimatedGas = await estimateGasNode(messenger, networkClientId, request);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n simulationFails = {\n reason: error.message,\n errorKey: error.errorKey,\n debug: {\n blockNumber,\n blockGasLimit,\n },\n };\n\n gasRevert = decodeRevert(error, 'gas');\n\n log('Estimation failed', { ...simulationFails, fallback, gasRevert });\n }\n\n return {\n blockGasLimit,\n estimatedGas,\n gasRevert,\n isUpgradeWithData,\n simulationFails,\n };\n}\n\n/**\n * Sum caller-provided gas limits across a batch.\n *\n * If every transaction in the batch already has a `gas` value, returns the\n * parsed per-tx limits and their sum. Otherwise returns `undefined`.\n *\n * Used by `estimateGasBatch`:\n * - non-7702 path: short-circuits simulation entirely when present.\n * - EIP-7702 path: used as a fallback when simulation fails — required for\n * callers that submit batches whose individual sub-calls cannot be simulated\n * standalone (e.g. predict-withdraw, where the batch's first sub-call\n * provides source-token balance to subsequent sub-calls). When 7702\n * simulation succeeds it is preferred since the bundled call has no per-tx\n * intrinsic gas cost and produces a tighter estimate.\n *\n * @param transactions - Batch transactions to inspect.\n * @returns Parsed gas limits and total when every transaction has gas; otherwise `undefined`.\n */\nexport function getProvidedBatchGasLimits(\n transactions: BatchTransactionParams[],\n): { gasLimits: number[]; totalGasLimit: number } | undefined {\n if (!transactions.every((transaction) => transaction.gas !== undefined)) {\n return undefined;\n }\n\n const gasLimits = transactions.map((transaction) =>\n new BigNumber(transaction.gas as Hex).toNumber(),\n );\n const totalGasLimit = gasLimits.reduce((acc, gasLimit) => acc + gasLimit, 0);\n\n return { gasLimits, totalGasLimit };\n}\n\nexport async function estimateGasBatch({\n from,\n getSimulationConfig,\n isAtomicBatchSupported,\n messenger,\n networkClientId,\n transactions,\n}: {\n from: Hex;\n getSimulationConfig: GetSimulationConfig;\n isAtomicBatchSupported: (\n request: IsAtomicBatchSupportedRequest,\n ) => Promise<IsAtomicBatchSupportedResult>;\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n transactions: BatchTransactionParams[];\n}): Promise<EstimateGasBatchResult> {\n const chainId = getChainId({ messenger, networkClientId });\n\n const is7702Result = await isAtomicBatchSupported({\n address: from,\n chainIds: [chainId],\n });\n\n const accountSupports7702 = doesAccountSupportEIP7702(messenger, from);\n\n const chainResult = accountSupports7702\n ? is7702Result.find((result) => result.chainId === chainId)\n : undefined;\n\n const isUpgradeRequired = Boolean(chainResult && !chainResult.isSupported);\n\n if (isUpgradeRequired && !chainResult?.upgradeContractAddress) {\n throw new Error('Upgrade contract address not found');\n }\n\n if (chainResult) {\n const providedBatchGasLimits = getProvidedBatchGasLimits(transactions);\n\n const authorizationList = isUpgradeRequired\n ? [{ address: chainResult.upgradeContractAddress as Hex }]\n : undefined;\n\n const type = isUpgradeRequired\n ? TransactionEnvelopeType.setCode\n : undefined;\n\n const params: TransactionParams = {\n ...generateEIP7702BatchTransaction(from, transactions),\n authorizationList,\n from,\n type,\n };\n\n // Prefer real EIP-7702 simulation when it succeeds — the bundled call has\n // no per-tx intrinsic gas cost so the estimate is typically lower than\n // summing per-tx provided limits. Fall back to the provided sum when the\n // node-level simulation fails (e.g. predict-withdraw, where the batch's\n // first sub-call provides source-token balance to subsequent sub-calls).\n const { estimatedGas: gasLimitHex, simulationFails } = await estimateGas({\n isSimulationEnabled: true,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams: params,\n });\n\n if (simulationFails && providedBatchGasLimits) {\n log(\n 'EIP-7702 estimation failed, using batch parameter gas limits',\n providedBatchGasLimits,\n simulationFails,\n );\n return {\n gasLimits: [providedBatchGasLimits.totalGasLimit],\n ...(isUpgradeRequired ? { requiresAuthorizationList: true } : {}),\n totalGasLimit: providedBatchGasLimits.totalGasLimit,\n };\n }\n\n const totalGasLimit = new BigNumber(gasLimitHex).toNumber();\n\n log('Estimated EIP-7702 gas limit', totalGasLimit);\n\n return {\n gasLimits: [totalGasLimit],\n ...(isUpgradeRequired ? { requiresAuthorizationList: true } : {}),\n totalGasLimit,\n };\n }\n\n const providedBatchGasLimits = getProvidedBatchGasLimits(transactions);\n if (providedBatchGasLimits) {\n log('Using batch parameter gas limits', providedBatchGasLimits);\n return providedBatchGasLimits;\n }\n\n const { gasLimits: gasLimitsHex } = await simulateGasBatch({\n chainId,\n from,\n getSimulationConfig,\n transactions: transactions.map((transaction) => ({\n params: transaction,\n })),\n });\n\n const gasLimits = transactions.map((transaction, index) =>\n transaction.gas\n ? new BigNumber(transaction.gas).toNumber()\n : new BigNumber(gasLimitsHex[index]).toNumber(),\n );\n\n const totalGasLimit = gasLimits.reduce((acc, gasLimit) => acc + gasLimit, 0);\n\n log('Simulated batch gas limits', { totalGasLimit, gasLimits });\n\n return { totalGasLimit, gasLimits };\n}\n\n/**\n * Add a buffer to the provided estimated gas.\n * The buffer is calculated based on the block gas limit and a multiplier.\n *\n * @param estimatedGas - The estimated gas.\n * @param blockGasLimit - The block gas limit.\n * @param multiplier - The multiplier to apply to the estimated gas.\n * @returns The gas with the buffer applied.\n */\nexport function addGasBuffer(\n estimatedGas: string,\n blockGasLimit: string,\n multiplier: number,\n): string {\n const estimatedGasBN = hexToBN(estimatedGas);\n\n const maxGasBN = fractionBN(\n hexToBN(blockGasLimit),\n MAX_GAS_BLOCK_PERCENT,\n 100,\n );\n\n const paddedGasBN = fractionBN(estimatedGasBN, multiplier * 100, 100);\n\n if (estimatedGasBN.gt(maxGasBN)) {\n const estimatedGasHex = add0x(estimatedGas);\n log('Using estimated value', estimatedGasHex);\n return estimatedGasHex;\n }\n\n if (paddedGasBN.lt(maxGasBN)) {\n const paddedHex = add0x(BNToHex(paddedGasBN));\n log('Using padded estimate', paddedHex, multiplier);\n return paddedHex;\n }\n\n const maxHex = add0x(BNToHex(maxGasBN));\n log('Using 90% of block gas limit', maxHex);\n return maxHex;\n}\n\n/**\n * Simulate the required gas for a batch of transactions using the simulation API.\n *\n * @param options - The options object.\n * @param options.chainId - The chain ID of the transactions.\n * @param options.from - The address of the sender.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.transactions - The array of transactions within a batch request.\n * @returns An object containing the transactions with their gas limits and the total gas limit.\n */\nexport async function simulateGasBatch({\n chainId,\n from,\n getSimulationConfig,\n transactions,\n}: {\n chainId: Hex;\n from: Hex;\n getSimulationConfig: GetSimulationConfig;\n transactions: TransactionBatchSingleRequest[];\n}): Promise<{ totalGasLimit: Hex; gasLimits: Hex[] }> {\n try {\n const response = await simulateTransactions(chainId, {\n getSimulationConfig,\n transactions: transactions.map((transaction) => ({\n ...transaction.params,\n from,\n })),\n });\n\n if (response?.transactions?.length !== transactions.length) {\n throw new Error('Simulation response does not match transaction count');\n }\n\n return response.transactions.reduce<{\n totalGasLimit: Hex;\n gasLimits: Hex[];\n }>(\n (acc, transaction) => {\n const gasLimit = transaction?.gasLimit;\n\n if (!gasLimit) {\n throw new Error(\n 'No simulated gas returned for one of the transactions',\n );\n }\n\n acc.gasLimits.push(gasLimit);\n\n acc.totalGasLimit = BNToHex(\n hexToBN(acc.totalGasLimit).add(hexToBN(gasLimit)),\n );\n\n return acc;\n },\n {\n totalGasLimit: '0x0',\n gasLimits: [],\n },\n );\n } catch (error: unknown) {\n log('Error while simulating gas batch', error);\n throw new Error(\n 'Cannot estimate transaction batch total gas as simulation failed',\n );\n }\n}\n\n/**\n * Determine the gas for the provided request.\n *\n * @param request - The request object including the necessary parameters.\n * @returns The final gas value and the estimate used.\n */\nasync function getGas(\n request: UpdateGasRequest,\n): Promise<[string, TransactionMeta['simulationFails']?, string?, Revert?]> {\n const {\n isCustomNetwork,\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n txMeta,\n } = request;\n const { networkClientId } = txMeta;\n const chainId = getChainId({ messenger, networkClientId });\n const { disableGasBuffer } = txMeta;\n\n if (txMeta.txParams.gas) {\n log('Using value from request', txMeta.txParams.gas);\n return [txMeta.txParams.gas, undefined, txMeta.txParams.gas];\n }\n\n if (await requiresFixedGas(request)) {\n log('Using fixed value', FIXED_GAS);\n return [FIXED_GAS, undefined, FIXED_GAS];\n }\n\n const {\n blockGasLimit,\n estimatedGas,\n gasRevert,\n isUpgradeWithData,\n simulationFails,\n } = await estimateGas({\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams: txMeta.txParams,\n });\n\n log('Original estimated gas', estimatedGas);\n\n if (simulationFails) {\n log('Using original fallback estimate as simulation failed');\n }\n\n if (disableGasBuffer) {\n log('Gas buffer disabled');\n }\n\n if (simulationFails || disableGasBuffer) {\n return [estimatedGas, simulationFails, estimatedGas, gasRevert];\n }\n\n const bufferMultiplier = getGasEstimateBuffer({\n chainId,\n isCustomRPC: isCustomNetwork,\n isUpgradeWithData,\n messenger,\n });\n\n log('Buffer', bufferMultiplier);\n\n const bufferedGas = addGasBuffer(\n estimatedGas,\n blockGasLimit,\n bufferMultiplier,\n );\n\n log('Buffered gas', bufferedGas);\n\n return [bufferedGas, simulationFails, estimatedGas, gasRevert];\n}\n\n/**\n * Determine if the gas for the provided request should be fixed.\n *\n * @param options - The options object.\n * @param options.messenger - The messenger instance for communication.\n * @param options.txMeta - The transaction meta object.\n * @param options.isCustomNetwork - Whether the network is a custom network.\n * @returns Whether the gas should be fixed.\n */\nasync function requiresFixedGas({\n messenger,\n txMeta,\n isCustomNetwork,\n}: UpdateGasRequest): Promise<boolean> {\n const {\n networkClientId,\n txParams: { to, data, type },\n } = txMeta;\n\n if (\n isCustomNetwork ||\n !to ||\n data ||\n type === TransactionEnvelopeType.setCode\n ) {\n return false;\n }\n\n const code = await getCode(messenger, networkClientId, to);\n\n return !code || code === '0x';\n}\n\n/**\n * Get the contract code for the provided address.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param address - The address to get the code for.\n * @returns The contract code.\n */\nasync function getCode(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n address: string,\n): Promise<string | undefined> {\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_getCode',\n params: [address, 'latest'],\n })) as string | undefined;\n}\n\n/**\n * Get the latest block from the network.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @returns The latest block number.\n */\nasync function getLatestBlock(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): Promise<{ gasLimit: string; number: string }> {\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_getBlockByNumber',\n params: ['latest', false],\n })) as { gasLimit: string; number: string };\n}\n\n/**\n * Estimate the gas for a type 4 transaction.\n *\n * @param txParams - The transaction parameters.\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param chainId - The chain ID of the transaction.\n * @param getSimulationConfig - The function to get the simulation configuration.\n * @returns The estimated gas.\n */\nasync function estimateGasUpgradeWithDataToSelf(\n txParams: TransactionParams,\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n chainId: Hex,\n getSimulationConfig: GetSimulationConfig,\n): Promise<Hex> {\n const upgradeGas = (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_estimateGas',\n params: [\n {\n ...txParams,\n to: txParams.from,\n data: '0x',\n },\n ],\n })) as Hex;\n\n log('Upgrade only gas', upgradeGas);\n\n const delegationAddress = txParams.authorizationList?.[0].address as Hex;\n\n let executeGas: Hex | undefined;\n\n try {\n executeGas = await simulateGas({\n chainId,\n delegationAddress,\n getSimulationConfig,\n transaction: txParams,\n });\n } catch (error: unknown) {\n log('Error while simulating data portion of upgrade', error);\n }\n\n if (executeGas === undefined) {\n try {\n executeGas = await estimateGasNode(\n messenger,\n networkClientId,\n { ...txParams, authorizationList: undefined, type: undefined },\n delegationAddress,\n );\n } catch (error: unknown) {\n log('Error while estimating data portion of upgrade', error);\n throw error;\n }\n\n log('Success estimating data portion of upgrade', executeGas);\n }\n\n log('Execute gas', executeGas);\n\n const total = BNToHex(\n hexToBN(upgradeGas).add(hexToBN(executeGas)).subn(INTRINSIC_GAS),\n );\n\n log('Total type 4 gas', total);\n\n return total;\n}\n\n/**\n * Simulate the required gas using the simulation API.\n *\n * @param options - The options object.\n * @param options.chainId - The chain ID of the transaction.\n * @param options.delegationAddress - The delegation address of the sender to mock.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.transaction - The transaction parameters.\n * @returns The simulated gas.\n */\nasync function simulateGas({\n chainId,\n delegationAddress,\n getSimulationConfig,\n transaction,\n}: {\n chainId: Hex;\n delegationAddress?: Hex;\n getSimulationConfig: GetSimulationConfig;\n transaction: TransactionParams;\n}): Promise<Hex> {\n const response = await simulateTransactions(chainId, {\n getSimulationConfig,\n transactions: [\n {\n to: transaction.to as Hex,\n from: transaction.from as Hex,\n data: transaction.data as Hex,\n value: transaction.value as Hex,\n },\n ],\n overrides: {\n [transaction.from]: {\n code:\n delegationAddress &&\n ((DELEGATION_PREFIX + remove0x(delegationAddress)) as Hex),\n },\n },\n });\n\n const gasLimit = response?.transactions?.[0].gasLimit;\n\n if (!gasLimit) {\n throw new Error('No simulated gas returned');\n }\n\n return gasLimit;\n}\n\n/**\n * Populate the authorization list with dummy values.\n *\n * @param authorizationList - The authorization list to prepare.\n * @param chainId - The chain ID to use.\n * @returns The authorization list with dummy values.\n */\nfunction normalizeAuthorizationList(\n authorizationList: AuthorizationList | undefined,\n chainId: Hex,\n): AuthorizationList | undefined {\n return authorizationList?.map((authorization) => ({\n ...authorization,\n chainId: authorization.chainId ?? chainId,\n nonce: authorization.nonce ?? '0x1',\n r: authorization.r ?? DUMMY_AUTHORIZATION_SIGNATURE,\n s: authorization.s ?? DUMMY_AUTHORIZATION_SIGNATURE,\n yParity: authorization.yParity ?? '0x1',\n }));\n}\n\n/**\n * Estimate the gas for a transaction using the `eth_estimateGas` method.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param txParams - The transaction parameters.\n * @param delegationAddress - The delegation address of the sender to mock.\n * @returns The estimated gas as a hex string.\n */\nasync function estimateGasNode(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n txParams: TransactionParams,\n delegationAddress?: Hex,\n): Promise<Hex> {\n const { from } = txParams;\n const params = [txParams] as Json[];\n\n if (delegationAddress) {\n params.push('latest');\n\n params.push({\n [from]: {\n code: DELEGATION_PREFIX + remove0x(delegationAddress),\n },\n });\n }\n\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_estimateGas',\n params,\n })) as Hex;\n}\n"]}
1
+ {"version":3,"file":"gas.cjs","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BNToHex,\n fractionBN,\n hexToBN,\n toHex,\n} from '@metamask/controller-utils';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport { add0x, createModuleLogger, remove0x } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { simulateTransactions } from '../api/simulation-api.js';\nimport { projectLogger } from '../logger.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport { TransactionEnvelopeType } from '../types.js';\nimport type {\n AuthorizationList,\n BatchTransactionParams,\n GetSimulationConfig,\n IsAtomicBatchSupportedRequest,\n IsAtomicBatchSupportedResult,\n Revert,\n TransactionBatchSingleRequest,\n TransactionMeta,\n TransactionParams,\n} from '../types.js';\nimport {\n DELEGATION_PREFIX,\n doesAccountSupportEIP7702,\n generateEIP7702BatchTransaction,\n} from './eip7702.js';\nimport {\n getGasEstimateBuffer,\n getGasEstimateFallback,\n} from './feature-flags.js';\nimport { getChainId, rpcRequest } from './provider.js';\nimport { decodeRevert } from './revert-reason.js';\n\nexport type UpdateGasRequest = {\n isCustomNetwork: boolean;\n isSimulationEnabled: boolean;\n getSimulationConfig: GetSimulationConfig;\n messenger: TransactionControllerMessenger;\n txMeta: TransactionMeta;\n};\n\nexport type EstimateGasBatchResult = {\n gasLimits: number[];\n requiresAuthorizationList?: true;\n totalGasLimit: number;\n};\n\nexport const log = createModuleLogger(projectLogger, 'gas');\n\nexport const FIXED_GAS = '0x5208';\nexport const DEFAULT_GAS_MULTIPLIER = 1.5;\nexport const MAX_GAS_BLOCK_PERCENT = 90;\nexport const INTRINSIC_GAS = 21000;\n\nexport const DUMMY_AUTHORIZATION_SIGNATURE =\n '0x1111111111111111111111111111111111111111111111111111111111111111';\n\n/**\n * Populate the gas properties of the provided transaction meta.\n *\n * @param request - The request object including the necessary parameters.\n */\nexport async function updateGas(request: UpdateGasRequest): Promise<void> {\n const { txMeta } = request;\n const initialParams = { ...txMeta.txParams };\n\n const [gas, simulationFails, gasLimitNoBuffer, gasRevert] =\n await getGas(request);\n\n txMeta.txParams.gas = gas;\n txMeta.simulationFails = simulationFails;\n txMeta.gasLimitNoBuffer = gasLimitNoBuffer;\n\n if (gasRevert) {\n txMeta.revert = { ...txMeta.revert, gas: gasRevert };\n }\n\n if (!initialParams.gas) {\n txMeta.originalGasEstimate = txMeta.txParams.gas;\n }\n\n txMeta.defaultGasEstimates ??= {};\n txMeta.defaultGasEstimates.gas = txMeta.txParams.gas;\n}\n\n/**\n * Estimate the gas for the provided transaction parameters.\n * If the gas estimate fails, the fallback value is returned.\n *\n * @param options - The options object.\n * @param options.ignoreDelegationSignatures - Ignore signature errors if submitting delegations to the DelegationManager.\n * @param options.isSimulationEnabled - Whether the simulation is enabled.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.messenger - The messenger instance for communication.\n * @param options.networkClientId - The network client ID.\n * @param options.txParams - The transaction parameters.\n * @returns The estimated gas and related info.\n */\nexport async function estimateGas({\n ignoreDelegationSignatures,\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams,\n}: {\n ignoreDelegationSignatures?: boolean;\n isSimulationEnabled: boolean;\n getSimulationConfig: GetSimulationConfig;\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n txParams: TransactionParams;\n}): Promise<{\n blockGasLimit: string;\n estimatedGas: string;\n gasRevert?: Revert;\n isUpgradeWithData: boolean;\n simulationFails: TransactionMeta['simulationFails'];\n}> {\n const request = { ...txParams };\n const { authorizationList, data, value } = request;\n const chainId = getChainId({ messenger, networkClientId });\n\n if (ignoreDelegationSignatures && !isSimulationEnabled) {\n throw new Error(\n 'Gas estimation with ignored delegation signatures is not supported as simulation disabled',\n );\n }\n\n const { gasLimit: blockGasLimit, number: blockNumber } = await getLatestBlock(\n messenger,\n networkClientId,\n );\n\n const blockGasLimitBN = hexToBN(blockGasLimit);\n const { percentage, fixed, maxGasLimit } = getGasEstimateFallback(\n chainId,\n messenger,\n );\n\n const uncappedFallback = fixed\n ? toHex(fixed)\n : BNToHex(fractionBN(blockGasLimitBN, percentage, 100));\n\n // Clamp the fallback to the chain's per-transaction gas cap so it can never\n // exceed the gas limit the RPC will accept. Without this, a percentage of a\n // high block gas limit can overshoot the cap (e.g. 35% of Polygon's ~140M\n // block limit is ~49M, but the node caps a tx at ~33.5M and rejects it with\n // \"transaction gas limit too high\").\n const fallback =\n maxGasLimit !== undefined &&\n hexToBN(uncappedFallback).gt(hexToBN(toHex(maxGasLimit)))\n ? toHex(maxGasLimit)\n : uncappedFallback;\n\n log('Estimation fallback values', fallback);\n\n request.data = data ? add0x(data) : data;\n request.value = value ?? '0x0';\n\n request.authorizationList = normalizeAuthorizationList(\n request.authorizationList,\n chainId,\n );\n\n delete request.gasPrice;\n delete request.maxFeePerGas;\n delete request.maxPriorityFeePerGas;\n\n let estimatedGas = fallback;\n let simulationFails: TransactionMeta['simulationFails'];\n let gasRevert: Revert | undefined;\n\n const isUpgradeWithData =\n txParams.type === TransactionEnvelopeType.setCode &&\n Boolean(authorizationList?.length) &&\n Boolean(data) &&\n data !== '0x';\n\n try {\n if (isSimulationEnabled && isUpgradeWithData) {\n estimatedGas = await estimateGasUpgradeWithDataToSelf(\n request,\n messenger,\n networkClientId,\n chainId,\n getSimulationConfig,\n );\n } else if (ignoreDelegationSignatures && isSimulationEnabled) {\n estimatedGas = await simulateGas({\n chainId,\n getSimulationConfig,\n transaction: request,\n });\n } else {\n estimatedGas = await estimateGasNode(messenger, networkClientId, request);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n simulationFails = {\n reason: error.message,\n errorKey: error.errorKey,\n debug: {\n blockNumber,\n blockGasLimit,\n },\n };\n\n gasRevert = decodeRevert(error, 'gas');\n\n log('Estimation failed', { ...simulationFails, fallback, gasRevert });\n }\n\n return {\n blockGasLimit,\n estimatedGas,\n gasRevert,\n isUpgradeWithData,\n simulationFails,\n };\n}\n\n/**\n * Sum caller-provided gas limits across a batch.\n *\n * If every transaction in the batch already has a `gas` value, returns the\n * parsed per-tx limits and their sum. Otherwise returns `undefined`.\n *\n * Used by `estimateGasBatch`:\n * - non-7702 path: short-circuits simulation entirely when present.\n * - EIP-7702 path: used as a fallback when simulation fails — required for\n * callers that submit batches whose individual sub-calls cannot be simulated\n * standalone (e.g. predict-withdraw, where the batch's first sub-call\n * provides source-token balance to subsequent sub-calls). When 7702\n * simulation succeeds it is preferred since the bundled call has no per-tx\n * intrinsic gas cost and produces a tighter estimate.\n *\n * @param transactions - Batch transactions to inspect.\n * @returns Parsed gas limits and total when every transaction has gas; otherwise `undefined`.\n */\nexport function getProvidedBatchGasLimits(\n transactions: BatchTransactionParams[],\n): { gasLimits: number[]; totalGasLimit: number } | undefined {\n if (!transactions.every((transaction) => transaction.gas !== undefined)) {\n return undefined;\n }\n\n const gasLimits = transactions.map((transaction) =>\n new BigNumber(transaction.gas as Hex).toNumber(),\n );\n const totalGasLimit = gasLimits.reduce((acc, gasLimit) => acc + gasLimit, 0);\n\n return { gasLimits, totalGasLimit };\n}\n\nexport async function estimateGasBatch({\n from,\n getSimulationConfig,\n isAtomicBatchSupported,\n messenger,\n networkClientId,\n transactions,\n}: {\n from: Hex;\n getSimulationConfig: GetSimulationConfig;\n isAtomicBatchSupported: (\n request: IsAtomicBatchSupportedRequest,\n ) => Promise<IsAtomicBatchSupportedResult>;\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n transactions: BatchTransactionParams[];\n}): Promise<EstimateGasBatchResult> {\n const chainId = getChainId({ messenger, networkClientId });\n\n const is7702Result = await isAtomicBatchSupported({\n address: from,\n chainIds: [chainId],\n });\n\n const accountSupports7702 = doesAccountSupportEIP7702(messenger, from);\n\n const chainResult = accountSupports7702\n ? is7702Result.find((result) => result.chainId === chainId)\n : undefined;\n\n const isUpgradeRequired = Boolean(chainResult && !chainResult.isSupported);\n\n if (isUpgradeRequired && !chainResult?.upgradeContractAddress) {\n throw new Error('Upgrade contract address not found');\n }\n\n if (chainResult) {\n const providedBatchGasLimits = getProvidedBatchGasLimits(transactions);\n\n const authorizationList = isUpgradeRequired\n ? [{ address: chainResult.upgradeContractAddress as Hex }]\n : undefined;\n\n const type = isUpgradeRequired\n ? TransactionEnvelopeType.setCode\n : undefined;\n\n const params: TransactionParams = {\n ...generateEIP7702BatchTransaction(from, transactions),\n authorizationList,\n from,\n type,\n };\n\n // Prefer real EIP-7702 simulation when it succeeds — the bundled call has\n // no per-tx intrinsic gas cost so the estimate is typically lower than\n // summing per-tx provided limits. Fall back to the provided sum when the\n // node-level simulation fails (e.g. predict-withdraw, where the batch's\n // first sub-call provides source-token balance to subsequent sub-calls).\n const { estimatedGas: gasLimitHex, simulationFails } = await estimateGas({\n isSimulationEnabled: true,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams: params,\n });\n\n if (simulationFails && providedBatchGasLimits) {\n log(\n 'EIP-7702 estimation failed, using batch parameter gas limits',\n providedBatchGasLimits,\n simulationFails,\n );\n return {\n gasLimits: [providedBatchGasLimits.totalGasLimit],\n ...(isUpgradeRequired ? { requiresAuthorizationList: true } : {}),\n totalGasLimit: providedBatchGasLimits.totalGasLimit,\n };\n }\n\n const totalGasLimit = new BigNumber(gasLimitHex).toNumber();\n\n log('Estimated EIP-7702 gas limit', totalGasLimit);\n\n return {\n gasLimits: [totalGasLimit],\n ...(isUpgradeRequired ? { requiresAuthorizationList: true } : {}),\n totalGasLimit,\n };\n }\n\n const providedBatchGasLimits = getProvidedBatchGasLimits(transactions);\n if (providedBatchGasLimits) {\n log('Using batch parameter gas limits', providedBatchGasLimits);\n return providedBatchGasLimits;\n }\n\n const { gasLimits: gasLimitsHex } = await simulateGasBatch({\n chainId,\n from,\n getSimulationConfig,\n transactions: transactions.map((transaction) => ({\n params: transaction,\n })),\n });\n\n const gasLimits = transactions.map((transaction, index) =>\n transaction.gas\n ? new BigNumber(transaction.gas).toNumber()\n : new BigNumber(gasLimitsHex[index]).toNumber(),\n );\n\n const totalGasLimit = gasLimits.reduce((acc, gasLimit) => acc + gasLimit, 0);\n\n log('Simulated batch gas limits', { totalGasLimit, gasLimits });\n\n return { totalGasLimit, gasLimits };\n}\n\n/**\n * Add a buffer to the provided estimated gas.\n * The buffer is calculated based on the block gas limit and a multiplier.\n *\n * @param estimatedGas - The estimated gas.\n * @param blockGasLimit - The block gas limit.\n * @param multiplier - The multiplier to apply to the estimated gas.\n * @returns The gas with the buffer applied.\n */\nexport function addGasBuffer(\n estimatedGas: string,\n blockGasLimit: string,\n multiplier: number,\n): string {\n const estimatedGasBN = hexToBN(estimatedGas);\n\n const maxGasBN = fractionBN(\n hexToBN(blockGasLimit),\n MAX_GAS_BLOCK_PERCENT,\n 100,\n );\n\n const paddedGasBN = fractionBN(estimatedGasBN, multiplier * 100, 100);\n\n if (estimatedGasBN.gt(maxGasBN)) {\n const estimatedGasHex = add0x(estimatedGas);\n log('Using estimated value', estimatedGasHex);\n return estimatedGasHex;\n }\n\n if (paddedGasBN.lt(maxGasBN)) {\n const paddedHex = add0x(BNToHex(paddedGasBN));\n log('Using padded estimate', paddedHex, multiplier);\n return paddedHex;\n }\n\n const maxHex = add0x(BNToHex(maxGasBN));\n log('Using 90% of block gas limit', maxHex);\n return maxHex;\n}\n\n/**\n * Simulate the required gas for a batch of transactions using the simulation API.\n *\n * @param options - The options object.\n * @param options.chainId - The chain ID of the transactions.\n * @param options.from - The address of the sender.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.transactions - The array of transactions within a batch request.\n * @returns An object containing the transactions with their gas limits and the total gas limit.\n */\nexport async function simulateGasBatch({\n chainId,\n from,\n getSimulationConfig,\n transactions,\n}: {\n chainId: Hex;\n from: Hex;\n getSimulationConfig: GetSimulationConfig;\n transactions: TransactionBatchSingleRequest[];\n}): Promise<{ totalGasLimit: Hex; gasLimits: Hex[] }> {\n try {\n const response = await simulateTransactions(chainId, {\n getSimulationConfig,\n transactions: transactions.map((transaction) => ({\n ...transaction.params,\n from,\n })),\n });\n\n if (response?.transactions?.length !== transactions.length) {\n throw new Error('Simulation response does not match transaction count');\n }\n\n return response.transactions.reduce<{\n totalGasLimit: Hex;\n gasLimits: Hex[];\n }>(\n (acc, transaction) => {\n const gasLimit = transaction?.gasLimit;\n\n if (!gasLimit) {\n throw new Error(\n 'No simulated gas returned for one of the transactions',\n );\n }\n\n acc.gasLimits.push(gasLimit);\n\n acc.totalGasLimit = BNToHex(\n hexToBN(acc.totalGasLimit).add(hexToBN(gasLimit)),\n );\n\n return acc;\n },\n {\n totalGasLimit: '0x0',\n gasLimits: [],\n },\n );\n } catch (error: unknown) {\n log('Error while simulating gas batch', error);\n throw new Error(\n 'Cannot estimate transaction batch total gas as simulation failed',\n );\n }\n}\n\n/**\n * Determine the gas for the provided request.\n *\n * @param request - The request object including the necessary parameters.\n * @returns The final gas value and the estimate used.\n */\nasync function getGas(\n request: UpdateGasRequest,\n): Promise<[string, TransactionMeta['simulationFails']?, string?, Revert?]> {\n const {\n isCustomNetwork,\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n txMeta,\n } = request;\n const { networkClientId } = txMeta;\n const chainId = getChainId({ messenger, networkClientId });\n const { disableGasBuffer } = txMeta;\n\n if (txMeta.txParams.gas) {\n log('Using value from request', txMeta.txParams.gas);\n return [txMeta.txParams.gas, undefined, txMeta.txParams.gas];\n }\n\n if (await requiresFixedGas(request)) {\n log('Using fixed value', FIXED_GAS);\n return [FIXED_GAS, undefined, FIXED_GAS];\n }\n\n const {\n blockGasLimit,\n estimatedGas,\n gasRevert,\n isUpgradeWithData,\n simulationFails,\n } = await estimateGas({\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams: txMeta.txParams,\n });\n\n log('Original estimated gas', estimatedGas);\n\n if (simulationFails) {\n log('Using original fallback estimate as simulation failed');\n }\n\n if (disableGasBuffer) {\n log('Gas buffer disabled');\n }\n\n if (simulationFails || disableGasBuffer) {\n return [estimatedGas, simulationFails, estimatedGas, gasRevert];\n }\n\n const bufferMultiplier = getGasEstimateBuffer({\n chainId,\n isCustomRPC: isCustomNetwork,\n isUpgradeWithData,\n messenger,\n });\n\n log('Buffer', bufferMultiplier);\n\n const bufferedGas = addGasBuffer(\n estimatedGas,\n blockGasLimit,\n bufferMultiplier,\n );\n\n log('Buffered gas', bufferedGas);\n\n return [bufferedGas, simulationFails, estimatedGas, gasRevert];\n}\n\n/**\n * Determine if the gas for the provided request should be fixed.\n *\n * @param options - The options object.\n * @param options.messenger - The messenger instance for communication.\n * @param options.txMeta - The transaction meta object.\n * @param options.isCustomNetwork - Whether the network is a custom network.\n * @returns Whether the gas should be fixed.\n */\nasync function requiresFixedGas({\n messenger,\n txMeta,\n isCustomNetwork,\n}: UpdateGasRequest): Promise<boolean> {\n const {\n networkClientId,\n txParams: { to, data, type },\n } = txMeta;\n\n if (\n isCustomNetwork ||\n !to ||\n data ||\n type === TransactionEnvelopeType.setCode\n ) {\n return false;\n }\n\n const code = await getCode(messenger, networkClientId, to);\n\n return !code || code === '0x';\n}\n\n/**\n * Get the contract code for the provided address.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param address - The address to get the code for.\n * @returns The contract code.\n */\nasync function getCode(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n address: string,\n): Promise<string | undefined> {\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_getCode',\n params: [address, 'latest'],\n })) as string | undefined;\n}\n\n/**\n * Get the latest block from the network.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @returns The latest block number.\n */\nasync function getLatestBlock(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): Promise<{ gasLimit: string; number: string }> {\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_getBlockByNumber',\n params: ['latest', false],\n })) as { gasLimit: string; number: string };\n}\n\n/**\n * Estimate the gas for a type 4 transaction.\n *\n * @param txParams - The transaction parameters.\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param chainId - The chain ID of the transaction.\n * @param getSimulationConfig - The function to get the simulation configuration.\n * @returns The estimated gas.\n */\nasync function estimateGasUpgradeWithDataToSelf(\n txParams: TransactionParams,\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n chainId: Hex,\n getSimulationConfig: GetSimulationConfig,\n): Promise<Hex> {\n const upgradeGas = (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_estimateGas',\n params: [\n {\n ...txParams,\n to: txParams.from,\n data: '0x',\n },\n ],\n })) as Hex;\n\n log('Upgrade only gas', upgradeGas);\n\n const delegationAddress = txParams.authorizationList?.[0].address as Hex;\n\n let executeGas: Hex | undefined;\n\n try {\n executeGas = await simulateGas({\n chainId,\n delegationAddress,\n getSimulationConfig,\n transaction: txParams,\n });\n } catch (error: unknown) {\n log('Error while simulating data portion of upgrade', error);\n }\n\n if (executeGas === undefined) {\n try {\n executeGas = await estimateGasNode(\n messenger,\n networkClientId,\n { ...txParams, authorizationList: undefined, type: undefined },\n delegationAddress,\n );\n } catch (error: unknown) {\n log('Error while estimating data portion of upgrade', error);\n throw error;\n }\n\n log('Success estimating data portion of upgrade', executeGas);\n }\n\n log('Execute gas', executeGas);\n\n const total = BNToHex(\n hexToBN(upgradeGas).add(hexToBN(executeGas)).subn(INTRINSIC_GAS),\n );\n\n log('Total type 4 gas', total);\n\n return total;\n}\n\n/**\n * Simulate the required gas using the simulation API.\n *\n * @param options - The options object.\n * @param options.chainId - The chain ID of the transaction.\n * @param options.delegationAddress - The delegation address of the sender to mock.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.transaction - The transaction parameters.\n * @returns The simulated gas.\n */\nasync function simulateGas({\n chainId,\n delegationAddress,\n getSimulationConfig,\n transaction,\n}: {\n chainId: Hex;\n delegationAddress?: Hex;\n getSimulationConfig: GetSimulationConfig;\n transaction: TransactionParams;\n}): Promise<Hex> {\n const response = await simulateTransactions(chainId, {\n getSimulationConfig,\n transactions: [\n {\n to: transaction.to as Hex,\n from: transaction.from as Hex,\n data: transaction.data as Hex,\n value: transaction.value as Hex,\n },\n ],\n overrides: {\n [transaction.from]: {\n code:\n delegationAddress &&\n ((DELEGATION_PREFIX + remove0x(delegationAddress)) as Hex),\n },\n },\n });\n\n const gasLimit = response?.transactions?.[0].gasLimit;\n\n if (!gasLimit) {\n throw new Error('No simulated gas returned');\n }\n\n return gasLimit;\n}\n\n/**\n * Populate the authorization list with dummy values.\n *\n * @param authorizationList - The authorization list to prepare.\n * @param chainId - The chain ID to use.\n * @returns The authorization list with dummy values.\n */\nfunction normalizeAuthorizationList(\n authorizationList: AuthorizationList | undefined,\n chainId: Hex,\n): AuthorizationList | undefined {\n return authorizationList?.map((authorization) => ({\n ...authorization,\n chainId: authorization.chainId ?? chainId,\n nonce: authorization.nonce ?? '0x1',\n r: authorization.r ?? DUMMY_AUTHORIZATION_SIGNATURE,\n s: authorization.s ?? DUMMY_AUTHORIZATION_SIGNATURE,\n yParity: authorization.yParity ?? '0x1',\n }));\n}\n\n/**\n * Estimate the gas for a transaction using the `eth_estimateGas` method.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param txParams - The transaction parameters.\n * @param delegationAddress - The delegation address of the sender to mock.\n * @returns The estimated gas as a hex string.\n */\nasync function estimateGasNode(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n txParams: TransactionParams,\n delegationAddress?: Hex,\n): Promise<Hex> {\n const { from } = txParams;\n const params = [txParams] as Json[];\n\n if (delegationAddress) {\n params.push('latest');\n\n params.push({\n [from]: {\n code: DELEGATION_PREFIX + remove0x(delegationAddress),\n },\n });\n }\n\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_estimateGas',\n params,\n })) as Hex;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"gas.d.cts","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gas.d.cts","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gas.d.mts","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gas.d.mts","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gas.mjs","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BNToHex,\n fractionBN,\n hexToBN,\n toHex,\n} from '@metamask/controller-utils';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport { add0x, createModuleLogger, remove0x } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { simulateTransactions } from '../api/simulation-api';\nimport { projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport { TransactionEnvelopeType } from '../types';\nimport type {\n AuthorizationList,\n BatchTransactionParams,\n GetSimulationConfig,\n IsAtomicBatchSupportedRequest,\n IsAtomicBatchSupportedResult,\n Revert,\n TransactionBatchSingleRequest,\n TransactionMeta,\n TransactionParams,\n} from '../types';\nimport {\n DELEGATION_PREFIX,\n doesAccountSupportEIP7702,\n generateEIP7702BatchTransaction,\n} from './eip7702';\nimport { getGasEstimateBuffer, getGasEstimateFallback } from './feature-flags';\nimport { getChainId, rpcRequest } from './provider';\nimport { decodeRevert } from './revert-reason';\n\nexport type UpdateGasRequest = {\n isCustomNetwork: boolean;\n isSimulationEnabled: boolean;\n getSimulationConfig: GetSimulationConfig;\n messenger: TransactionControllerMessenger;\n txMeta: TransactionMeta;\n};\n\nexport type EstimateGasBatchResult = {\n gasLimits: number[];\n requiresAuthorizationList?: true;\n totalGasLimit: number;\n};\n\nexport const log = createModuleLogger(projectLogger, 'gas');\n\nexport const FIXED_GAS = '0x5208';\nexport const DEFAULT_GAS_MULTIPLIER = 1.5;\nexport const MAX_GAS_BLOCK_PERCENT = 90;\nexport const INTRINSIC_GAS = 21000;\n\nexport const DUMMY_AUTHORIZATION_SIGNATURE =\n '0x1111111111111111111111111111111111111111111111111111111111111111';\n\n/**\n * Populate the gas properties of the provided transaction meta.\n *\n * @param request - The request object including the necessary parameters.\n */\nexport async function updateGas(request: UpdateGasRequest): Promise<void> {\n const { txMeta } = request;\n const initialParams = { ...txMeta.txParams };\n\n const [gas, simulationFails, gasLimitNoBuffer, gasRevert] =\n await getGas(request);\n\n txMeta.txParams.gas = gas;\n txMeta.simulationFails = simulationFails;\n txMeta.gasLimitNoBuffer = gasLimitNoBuffer;\n\n if (gasRevert) {\n txMeta.revert = { ...txMeta.revert, gas: gasRevert };\n }\n\n if (!initialParams.gas) {\n txMeta.originalGasEstimate = txMeta.txParams.gas;\n }\n\n txMeta.defaultGasEstimates ??= {};\n txMeta.defaultGasEstimates.gas = txMeta.txParams.gas;\n}\n\n/**\n * Estimate the gas for the provided transaction parameters.\n * If the gas estimate fails, the fallback value is returned.\n *\n * @param options - The options object.\n * @param options.ignoreDelegationSignatures - Ignore signature errors if submitting delegations to the DelegationManager.\n * @param options.isSimulationEnabled - Whether the simulation is enabled.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.messenger - The messenger instance for communication.\n * @param options.networkClientId - The network client ID.\n * @param options.txParams - The transaction parameters.\n * @returns The estimated gas and related info.\n */\nexport async function estimateGas({\n ignoreDelegationSignatures,\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams,\n}: {\n ignoreDelegationSignatures?: boolean;\n isSimulationEnabled: boolean;\n getSimulationConfig: GetSimulationConfig;\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n txParams: TransactionParams;\n}): Promise<{\n blockGasLimit: string;\n estimatedGas: string;\n gasRevert?: Revert;\n isUpgradeWithData: boolean;\n simulationFails: TransactionMeta['simulationFails'];\n}> {\n const request = { ...txParams };\n const { authorizationList, data, value } = request;\n const chainId = getChainId({ messenger, networkClientId });\n\n if (ignoreDelegationSignatures && !isSimulationEnabled) {\n throw new Error(\n 'Gas estimation with ignored delegation signatures is not supported as simulation disabled',\n );\n }\n\n const { gasLimit: blockGasLimit, number: blockNumber } = await getLatestBlock(\n messenger,\n networkClientId,\n );\n\n const blockGasLimitBN = hexToBN(blockGasLimit);\n const { percentage, fixed, maxGasLimit } = getGasEstimateFallback(\n chainId,\n messenger,\n );\n\n const uncappedFallback = fixed\n ? toHex(fixed)\n : BNToHex(fractionBN(blockGasLimitBN, percentage, 100));\n\n // Clamp the fallback to the chain's per-transaction gas cap so it can never\n // exceed the gas limit the RPC will accept. Without this, a percentage of a\n // high block gas limit can overshoot the cap (e.g. 35% of Polygon's ~140M\n // block limit is ~49M, but the node caps a tx at ~33.5M and rejects it with\n // \"transaction gas limit too high\").\n const fallback =\n maxGasLimit !== undefined &&\n hexToBN(uncappedFallback).gt(hexToBN(toHex(maxGasLimit)))\n ? toHex(maxGasLimit)\n : uncappedFallback;\n\n log('Estimation fallback values', fallback);\n\n request.data = data ? add0x(data) : data;\n request.value = value ?? '0x0';\n\n request.authorizationList = normalizeAuthorizationList(\n request.authorizationList,\n chainId,\n );\n\n delete request.gasPrice;\n delete request.maxFeePerGas;\n delete request.maxPriorityFeePerGas;\n\n let estimatedGas = fallback;\n let simulationFails: TransactionMeta['simulationFails'];\n let gasRevert: Revert | undefined;\n\n const isUpgradeWithData =\n txParams.type === TransactionEnvelopeType.setCode &&\n Boolean(authorizationList?.length) &&\n Boolean(data) &&\n data !== '0x';\n\n try {\n if (isSimulationEnabled && isUpgradeWithData) {\n estimatedGas = await estimateGasUpgradeWithDataToSelf(\n request,\n messenger,\n networkClientId,\n chainId,\n getSimulationConfig,\n );\n } else if (ignoreDelegationSignatures && isSimulationEnabled) {\n estimatedGas = await simulateGas({\n chainId,\n getSimulationConfig,\n transaction: request,\n });\n } else {\n estimatedGas = await estimateGasNode(messenger, networkClientId, request);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n simulationFails = {\n reason: error.message,\n errorKey: error.errorKey,\n debug: {\n blockNumber,\n blockGasLimit,\n },\n };\n\n gasRevert = decodeRevert(error, 'gas');\n\n log('Estimation failed', { ...simulationFails, fallback, gasRevert });\n }\n\n return {\n blockGasLimit,\n estimatedGas,\n gasRevert,\n isUpgradeWithData,\n simulationFails,\n };\n}\n\n/**\n * Sum caller-provided gas limits across a batch.\n *\n * If every transaction in the batch already has a `gas` value, returns the\n * parsed per-tx limits and their sum. Otherwise returns `undefined`.\n *\n * Used by `estimateGasBatch`:\n * - non-7702 path: short-circuits simulation entirely when present.\n * - EIP-7702 path: used as a fallback when simulation fails — required for\n * callers that submit batches whose individual sub-calls cannot be simulated\n * standalone (e.g. predict-withdraw, where the batch's first sub-call\n * provides source-token balance to subsequent sub-calls). When 7702\n * simulation succeeds it is preferred since the bundled call has no per-tx\n * intrinsic gas cost and produces a tighter estimate.\n *\n * @param transactions - Batch transactions to inspect.\n * @returns Parsed gas limits and total when every transaction has gas; otherwise `undefined`.\n */\nexport function getProvidedBatchGasLimits(\n transactions: BatchTransactionParams[],\n): { gasLimits: number[]; totalGasLimit: number } | undefined {\n if (!transactions.every((transaction) => transaction.gas !== undefined)) {\n return undefined;\n }\n\n const gasLimits = transactions.map((transaction) =>\n new BigNumber(transaction.gas as Hex).toNumber(),\n );\n const totalGasLimit = gasLimits.reduce((acc, gasLimit) => acc + gasLimit, 0);\n\n return { gasLimits, totalGasLimit };\n}\n\nexport async function estimateGasBatch({\n from,\n getSimulationConfig,\n isAtomicBatchSupported,\n messenger,\n networkClientId,\n transactions,\n}: {\n from: Hex;\n getSimulationConfig: GetSimulationConfig;\n isAtomicBatchSupported: (\n request: IsAtomicBatchSupportedRequest,\n ) => Promise<IsAtomicBatchSupportedResult>;\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n transactions: BatchTransactionParams[];\n}): Promise<EstimateGasBatchResult> {\n const chainId = getChainId({ messenger, networkClientId });\n\n const is7702Result = await isAtomicBatchSupported({\n address: from,\n chainIds: [chainId],\n });\n\n const accountSupports7702 = doesAccountSupportEIP7702(messenger, from);\n\n const chainResult = accountSupports7702\n ? is7702Result.find((result) => result.chainId === chainId)\n : undefined;\n\n const isUpgradeRequired = Boolean(chainResult && !chainResult.isSupported);\n\n if (isUpgradeRequired && !chainResult?.upgradeContractAddress) {\n throw new Error('Upgrade contract address not found');\n }\n\n if (chainResult) {\n const providedBatchGasLimits = getProvidedBatchGasLimits(transactions);\n\n const authorizationList = isUpgradeRequired\n ? [{ address: chainResult.upgradeContractAddress as Hex }]\n : undefined;\n\n const type = isUpgradeRequired\n ? TransactionEnvelopeType.setCode\n : undefined;\n\n const params: TransactionParams = {\n ...generateEIP7702BatchTransaction(from, transactions),\n authorizationList,\n from,\n type,\n };\n\n // Prefer real EIP-7702 simulation when it succeeds — the bundled call has\n // no per-tx intrinsic gas cost so the estimate is typically lower than\n // summing per-tx provided limits. Fall back to the provided sum when the\n // node-level simulation fails (e.g. predict-withdraw, where the batch's\n // first sub-call provides source-token balance to subsequent sub-calls).\n const { estimatedGas: gasLimitHex, simulationFails } = await estimateGas({\n isSimulationEnabled: true,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams: params,\n });\n\n if (simulationFails && providedBatchGasLimits) {\n log(\n 'EIP-7702 estimation failed, using batch parameter gas limits',\n providedBatchGasLimits,\n simulationFails,\n );\n return {\n gasLimits: [providedBatchGasLimits.totalGasLimit],\n ...(isUpgradeRequired ? { requiresAuthorizationList: true } : {}),\n totalGasLimit: providedBatchGasLimits.totalGasLimit,\n };\n }\n\n const totalGasLimit = new BigNumber(gasLimitHex).toNumber();\n\n log('Estimated EIP-7702 gas limit', totalGasLimit);\n\n return {\n gasLimits: [totalGasLimit],\n ...(isUpgradeRequired ? { requiresAuthorizationList: true } : {}),\n totalGasLimit,\n };\n }\n\n const providedBatchGasLimits = getProvidedBatchGasLimits(transactions);\n if (providedBatchGasLimits) {\n log('Using batch parameter gas limits', providedBatchGasLimits);\n return providedBatchGasLimits;\n }\n\n const { gasLimits: gasLimitsHex } = await simulateGasBatch({\n chainId,\n from,\n getSimulationConfig,\n transactions: transactions.map((transaction) => ({\n params: transaction,\n })),\n });\n\n const gasLimits = transactions.map((transaction, index) =>\n transaction.gas\n ? new BigNumber(transaction.gas).toNumber()\n : new BigNumber(gasLimitsHex[index]).toNumber(),\n );\n\n const totalGasLimit = gasLimits.reduce((acc, gasLimit) => acc + gasLimit, 0);\n\n log('Simulated batch gas limits', { totalGasLimit, gasLimits });\n\n return { totalGasLimit, gasLimits };\n}\n\n/**\n * Add a buffer to the provided estimated gas.\n * The buffer is calculated based on the block gas limit and a multiplier.\n *\n * @param estimatedGas - The estimated gas.\n * @param blockGasLimit - The block gas limit.\n * @param multiplier - The multiplier to apply to the estimated gas.\n * @returns The gas with the buffer applied.\n */\nexport function addGasBuffer(\n estimatedGas: string,\n blockGasLimit: string,\n multiplier: number,\n): string {\n const estimatedGasBN = hexToBN(estimatedGas);\n\n const maxGasBN = fractionBN(\n hexToBN(blockGasLimit),\n MAX_GAS_BLOCK_PERCENT,\n 100,\n );\n\n const paddedGasBN = fractionBN(estimatedGasBN, multiplier * 100, 100);\n\n if (estimatedGasBN.gt(maxGasBN)) {\n const estimatedGasHex = add0x(estimatedGas);\n log('Using estimated value', estimatedGasHex);\n return estimatedGasHex;\n }\n\n if (paddedGasBN.lt(maxGasBN)) {\n const paddedHex = add0x(BNToHex(paddedGasBN));\n log('Using padded estimate', paddedHex, multiplier);\n return paddedHex;\n }\n\n const maxHex = add0x(BNToHex(maxGasBN));\n log('Using 90% of block gas limit', maxHex);\n return maxHex;\n}\n\n/**\n * Simulate the required gas for a batch of transactions using the simulation API.\n *\n * @param options - The options object.\n * @param options.chainId - The chain ID of the transactions.\n * @param options.from - The address of the sender.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.transactions - The array of transactions within a batch request.\n * @returns An object containing the transactions with their gas limits and the total gas limit.\n */\nexport async function simulateGasBatch({\n chainId,\n from,\n getSimulationConfig,\n transactions,\n}: {\n chainId: Hex;\n from: Hex;\n getSimulationConfig: GetSimulationConfig;\n transactions: TransactionBatchSingleRequest[];\n}): Promise<{ totalGasLimit: Hex; gasLimits: Hex[] }> {\n try {\n const response = await simulateTransactions(chainId, {\n getSimulationConfig,\n transactions: transactions.map((transaction) => ({\n ...transaction.params,\n from,\n })),\n });\n\n if (response?.transactions?.length !== transactions.length) {\n throw new Error('Simulation response does not match transaction count');\n }\n\n return response.transactions.reduce<{\n totalGasLimit: Hex;\n gasLimits: Hex[];\n }>(\n (acc, transaction) => {\n const gasLimit = transaction?.gasLimit;\n\n if (!gasLimit) {\n throw new Error(\n 'No simulated gas returned for one of the transactions',\n );\n }\n\n acc.gasLimits.push(gasLimit);\n\n acc.totalGasLimit = BNToHex(\n hexToBN(acc.totalGasLimit).add(hexToBN(gasLimit)),\n );\n\n return acc;\n },\n {\n totalGasLimit: '0x0',\n gasLimits: [],\n },\n );\n } catch (error: unknown) {\n log('Error while simulating gas batch', error);\n throw new Error(\n 'Cannot estimate transaction batch total gas as simulation failed',\n );\n }\n}\n\n/**\n * Determine the gas for the provided request.\n *\n * @param request - The request object including the necessary parameters.\n * @returns The final gas value and the estimate used.\n */\nasync function getGas(\n request: UpdateGasRequest,\n): Promise<[string, TransactionMeta['simulationFails']?, string?, Revert?]> {\n const {\n isCustomNetwork,\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n txMeta,\n } = request;\n const { networkClientId } = txMeta;\n const chainId = getChainId({ messenger, networkClientId });\n const { disableGasBuffer } = txMeta;\n\n if (txMeta.txParams.gas) {\n log('Using value from request', txMeta.txParams.gas);\n return [txMeta.txParams.gas, undefined, txMeta.txParams.gas];\n }\n\n if (await requiresFixedGas(request)) {\n log('Using fixed value', FIXED_GAS);\n return [FIXED_GAS, undefined, FIXED_GAS];\n }\n\n const {\n blockGasLimit,\n estimatedGas,\n gasRevert,\n isUpgradeWithData,\n simulationFails,\n } = await estimateGas({\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams: txMeta.txParams,\n });\n\n log('Original estimated gas', estimatedGas);\n\n if (simulationFails) {\n log('Using original fallback estimate as simulation failed');\n }\n\n if (disableGasBuffer) {\n log('Gas buffer disabled');\n }\n\n if (simulationFails || disableGasBuffer) {\n return [estimatedGas, simulationFails, estimatedGas, gasRevert];\n }\n\n const bufferMultiplier = getGasEstimateBuffer({\n chainId,\n isCustomRPC: isCustomNetwork,\n isUpgradeWithData,\n messenger,\n });\n\n log('Buffer', bufferMultiplier);\n\n const bufferedGas = addGasBuffer(\n estimatedGas,\n blockGasLimit,\n bufferMultiplier,\n );\n\n log('Buffered gas', bufferedGas);\n\n return [bufferedGas, simulationFails, estimatedGas, gasRevert];\n}\n\n/**\n * Determine if the gas for the provided request should be fixed.\n *\n * @param options - The options object.\n * @param options.messenger - The messenger instance for communication.\n * @param options.txMeta - The transaction meta object.\n * @param options.isCustomNetwork - Whether the network is a custom network.\n * @returns Whether the gas should be fixed.\n */\nasync function requiresFixedGas({\n messenger,\n txMeta,\n isCustomNetwork,\n}: UpdateGasRequest): Promise<boolean> {\n const {\n networkClientId,\n txParams: { to, data, type },\n } = txMeta;\n\n if (\n isCustomNetwork ||\n !to ||\n data ||\n type === TransactionEnvelopeType.setCode\n ) {\n return false;\n }\n\n const code = await getCode(messenger, networkClientId, to);\n\n return !code || code === '0x';\n}\n\n/**\n * Get the contract code for the provided address.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param address - The address to get the code for.\n * @returns The contract code.\n */\nasync function getCode(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n address: string,\n): Promise<string | undefined> {\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_getCode',\n params: [address, 'latest'],\n })) as string | undefined;\n}\n\n/**\n * Get the latest block from the network.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @returns The latest block number.\n */\nasync function getLatestBlock(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): Promise<{ gasLimit: string; number: string }> {\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_getBlockByNumber',\n params: ['latest', false],\n })) as { gasLimit: string; number: string };\n}\n\n/**\n * Estimate the gas for a type 4 transaction.\n *\n * @param txParams - The transaction parameters.\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param chainId - The chain ID of the transaction.\n * @param getSimulationConfig - The function to get the simulation configuration.\n * @returns The estimated gas.\n */\nasync function estimateGasUpgradeWithDataToSelf(\n txParams: TransactionParams,\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n chainId: Hex,\n getSimulationConfig: GetSimulationConfig,\n): Promise<Hex> {\n const upgradeGas = (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_estimateGas',\n params: [\n {\n ...txParams,\n to: txParams.from,\n data: '0x',\n },\n ],\n })) as Hex;\n\n log('Upgrade only gas', upgradeGas);\n\n const delegationAddress = txParams.authorizationList?.[0].address as Hex;\n\n let executeGas: Hex | undefined;\n\n try {\n executeGas = await simulateGas({\n chainId,\n delegationAddress,\n getSimulationConfig,\n transaction: txParams,\n });\n } catch (error: unknown) {\n log('Error while simulating data portion of upgrade', error);\n }\n\n if (executeGas === undefined) {\n try {\n executeGas = await estimateGasNode(\n messenger,\n networkClientId,\n { ...txParams, authorizationList: undefined, type: undefined },\n delegationAddress,\n );\n } catch (error: unknown) {\n log('Error while estimating data portion of upgrade', error);\n throw error;\n }\n\n log('Success estimating data portion of upgrade', executeGas);\n }\n\n log('Execute gas', executeGas);\n\n const total = BNToHex(\n hexToBN(upgradeGas).add(hexToBN(executeGas)).subn(INTRINSIC_GAS),\n );\n\n log('Total type 4 gas', total);\n\n return total;\n}\n\n/**\n * Simulate the required gas using the simulation API.\n *\n * @param options - The options object.\n * @param options.chainId - The chain ID of the transaction.\n * @param options.delegationAddress - The delegation address of the sender to mock.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.transaction - The transaction parameters.\n * @returns The simulated gas.\n */\nasync function simulateGas({\n chainId,\n delegationAddress,\n getSimulationConfig,\n transaction,\n}: {\n chainId: Hex;\n delegationAddress?: Hex;\n getSimulationConfig: GetSimulationConfig;\n transaction: TransactionParams;\n}): Promise<Hex> {\n const response = await simulateTransactions(chainId, {\n getSimulationConfig,\n transactions: [\n {\n to: transaction.to as Hex,\n from: transaction.from as Hex,\n data: transaction.data as Hex,\n value: transaction.value as Hex,\n },\n ],\n overrides: {\n [transaction.from]: {\n code:\n delegationAddress &&\n ((DELEGATION_PREFIX + remove0x(delegationAddress)) as Hex),\n },\n },\n });\n\n const gasLimit = response?.transactions?.[0].gasLimit;\n\n if (!gasLimit) {\n throw new Error('No simulated gas returned');\n }\n\n return gasLimit;\n}\n\n/**\n * Populate the authorization list with dummy values.\n *\n * @param authorizationList - The authorization list to prepare.\n * @param chainId - The chain ID to use.\n * @returns The authorization list with dummy values.\n */\nfunction normalizeAuthorizationList(\n authorizationList: AuthorizationList | undefined,\n chainId: Hex,\n): AuthorizationList | undefined {\n return authorizationList?.map((authorization) => ({\n ...authorization,\n chainId: authorization.chainId ?? chainId,\n nonce: authorization.nonce ?? '0x1',\n r: authorization.r ?? DUMMY_AUTHORIZATION_SIGNATURE,\n s: authorization.s ?? DUMMY_AUTHORIZATION_SIGNATURE,\n yParity: authorization.yParity ?? '0x1',\n }));\n}\n\n/**\n * Estimate the gas for a transaction using the `eth_estimateGas` method.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param txParams - The transaction parameters.\n * @param delegationAddress - The delegation address of the sender to mock.\n * @returns The estimated gas as a hex string.\n */\nasync function estimateGasNode(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n txParams: TransactionParams,\n delegationAddress?: Hex,\n): Promise<Hex> {\n const { from } = txParams;\n const params = [txParams] as Json[];\n\n if (delegationAddress) {\n params.push('latest');\n\n params.push({\n [from]: {\n code: DELEGATION_PREFIX + remove0x(delegationAddress),\n },\n });\n }\n\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_estimateGas',\n params,\n })) as Hex;\n}\n"]}
1
+ {"version":3,"file":"gas.mjs","sourceRoot":"","sources":["../../src/utils/gas.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BNToHex,\n fractionBN,\n hexToBN,\n toHex,\n} from '@metamask/controller-utils';\nimport type { NetworkClientId } from '@metamask/network-controller';\nimport type { Hex, Json } from '@metamask/utils';\nimport { add0x, createModuleLogger, remove0x } from '@metamask/utils';\nimport { BigNumber } from 'bignumber.js';\n\nimport { simulateTransactions } from '../api/simulation-api.js';\nimport { projectLogger } from '../logger.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport { TransactionEnvelopeType } from '../types.js';\nimport type {\n AuthorizationList,\n BatchTransactionParams,\n GetSimulationConfig,\n IsAtomicBatchSupportedRequest,\n IsAtomicBatchSupportedResult,\n Revert,\n TransactionBatchSingleRequest,\n TransactionMeta,\n TransactionParams,\n} from '../types.js';\nimport {\n DELEGATION_PREFIX,\n doesAccountSupportEIP7702,\n generateEIP7702BatchTransaction,\n} from './eip7702.js';\nimport {\n getGasEstimateBuffer,\n getGasEstimateFallback,\n} from './feature-flags.js';\nimport { getChainId, rpcRequest } from './provider.js';\nimport { decodeRevert } from './revert-reason.js';\n\nexport type UpdateGasRequest = {\n isCustomNetwork: boolean;\n isSimulationEnabled: boolean;\n getSimulationConfig: GetSimulationConfig;\n messenger: TransactionControllerMessenger;\n txMeta: TransactionMeta;\n};\n\nexport type EstimateGasBatchResult = {\n gasLimits: number[];\n requiresAuthorizationList?: true;\n totalGasLimit: number;\n};\n\nexport const log = createModuleLogger(projectLogger, 'gas');\n\nexport const FIXED_GAS = '0x5208';\nexport const DEFAULT_GAS_MULTIPLIER = 1.5;\nexport const MAX_GAS_BLOCK_PERCENT = 90;\nexport const INTRINSIC_GAS = 21000;\n\nexport const DUMMY_AUTHORIZATION_SIGNATURE =\n '0x1111111111111111111111111111111111111111111111111111111111111111';\n\n/**\n * Populate the gas properties of the provided transaction meta.\n *\n * @param request - The request object including the necessary parameters.\n */\nexport async function updateGas(request: UpdateGasRequest): Promise<void> {\n const { txMeta } = request;\n const initialParams = { ...txMeta.txParams };\n\n const [gas, simulationFails, gasLimitNoBuffer, gasRevert] =\n await getGas(request);\n\n txMeta.txParams.gas = gas;\n txMeta.simulationFails = simulationFails;\n txMeta.gasLimitNoBuffer = gasLimitNoBuffer;\n\n if (gasRevert) {\n txMeta.revert = { ...txMeta.revert, gas: gasRevert };\n }\n\n if (!initialParams.gas) {\n txMeta.originalGasEstimate = txMeta.txParams.gas;\n }\n\n txMeta.defaultGasEstimates ??= {};\n txMeta.defaultGasEstimates.gas = txMeta.txParams.gas;\n}\n\n/**\n * Estimate the gas for the provided transaction parameters.\n * If the gas estimate fails, the fallback value is returned.\n *\n * @param options - The options object.\n * @param options.ignoreDelegationSignatures - Ignore signature errors if submitting delegations to the DelegationManager.\n * @param options.isSimulationEnabled - Whether the simulation is enabled.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.messenger - The messenger instance for communication.\n * @param options.networkClientId - The network client ID.\n * @param options.txParams - The transaction parameters.\n * @returns The estimated gas and related info.\n */\nexport async function estimateGas({\n ignoreDelegationSignatures,\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams,\n}: {\n ignoreDelegationSignatures?: boolean;\n isSimulationEnabled: boolean;\n getSimulationConfig: GetSimulationConfig;\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n txParams: TransactionParams;\n}): Promise<{\n blockGasLimit: string;\n estimatedGas: string;\n gasRevert?: Revert;\n isUpgradeWithData: boolean;\n simulationFails: TransactionMeta['simulationFails'];\n}> {\n const request = { ...txParams };\n const { authorizationList, data, value } = request;\n const chainId = getChainId({ messenger, networkClientId });\n\n if (ignoreDelegationSignatures && !isSimulationEnabled) {\n throw new Error(\n 'Gas estimation with ignored delegation signatures is not supported as simulation disabled',\n );\n }\n\n const { gasLimit: blockGasLimit, number: blockNumber } = await getLatestBlock(\n messenger,\n networkClientId,\n );\n\n const blockGasLimitBN = hexToBN(blockGasLimit);\n const { percentage, fixed, maxGasLimit } = getGasEstimateFallback(\n chainId,\n messenger,\n );\n\n const uncappedFallback = fixed\n ? toHex(fixed)\n : BNToHex(fractionBN(blockGasLimitBN, percentage, 100));\n\n // Clamp the fallback to the chain's per-transaction gas cap so it can never\n // exceed the gas limit the RPC will accept. Without this, a percentage of a\n // high block gas limit can overshoot the cap (e.g. 35% of Polygon's ~140M\n // block limit is ~49M, but the node caps a tx at ~33.5M and rejects it with\n // \"transaction gas limit too high\").\n const fallback =\n maxGasLimit !== undefined &&\n hexToBN(uncappedFallback).gt(hexToBN(toHex(maxGasLimit)))\n ? toHex(maxGasLimit)\n : uncappedFallback;\n\n log('Estimation fallback values', fallback);\n\n request.data = data ? add0x(data) : data;\n request.value = value ?? '0x0';\n\n request.authorizationList = normalizeAuthorizationList(\n request.authorizationList,\n chainId,\n );\n\n delete request.gasPrice;\n delete request.maxFeePerGas;\n delete request.maxPriorityFeePerGas;\n\n let estimatedGas = fallback;\n let simulationFails: TransactionMeta['simulationFails'];\n let gasRevert: Revert | undefined;\n\n const isUpgradeWithData =\n txParams.type === TransactionEnvelopeType.setCode &&\n Boolean(authorizationList?.length) &&\n Boolean(data) &&\n data !== '0x';\n\n try {\n if (isSimulationEnabled && isUpgradeWithData) {\n estimatedGas = await estimateGasUpgradeWithDataToSelf(\n request,\n messenger,\n networkClientId,\n chainId,\n getSimulationConfig,\n );\n } else if (ignoreDelegationSignatures && isSimulationEnabled) {\n estimatedGas = await simulateGas({\n chainId,\n getSimulationConfig,\n transaction: request,\n });\n } else {\n estimatedGas = await estimateGasNode(messenger, networkClientId, request);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } catch (error: any) {\n simulationFails = {\n reason: error.message,\n errorKey: error.errorKey,\n debug: {\n blockNumber,\n blockGasLimit,\n },\n };\n\n gasRevert = decodeRevert(error, 'gas');\n\n log('Estimation failed', { ...simulationFails, fallback, gasRevert });\n }\n\n return {\n blockGasLimit,\n estimatedGas,\n gasRevert,\n isUpgradeWithData,\n simulationFails,\n };\n}\n\n/**\n * Sum caller-provided gas limits across a batch.\n *\n * If every transaction in the batch already has a `gas` value, returns the\n * parsed per-tx limits and their sum. Otherwise returns `undefined`.\n *\n * Used by `estimateGasBatch`:\n * - non-7702 path: short-circuits simulation entirely when present.\n * - EIP-7702 path: used as a fallback when simulation fails — required for\n * callers that submit batches whose individual sub-calls cannot be simulated\n * standalone (e.g. predict-withdraw, where the batch's first sub-call\n * provides source-token balance to subsequent sub-calls). When 7702\n * simulation succeeds it is preferred since the bundled call has no per-tx\n * intrinsic gas cost and produces a tighter estimate.\n *\n * @param transactions - Batch transactions to inspect.\n * @returns Parsed gas limits and total when every transaction has gas; otherwise `undefined`.\n */\nexport function getProvidedBatchGasLimits(\n transactions: BatchTransactionParams[],\n): { gasLimits: number[]; totalGasLimit: number } | undefined {\n if (!transactions.every((transaction) => transaction.gas !== undefined)) {\n return undefined;\n }\n\n const gasLimits = transactions.map((transaction) =>\n new BigNumber(transaction.gas as Hex).toNumber(),\n );\n const totalGasLimit = gasLimits.reduce((acc, gasLimit) => acc + gasLimit, 0);\n\n return { gasLimits, totalGasLimit };\n}\n\nexport async function estimateGasBatch({\n from,\n getSimulationConfig,\n isAtomicBatchSupported,\n messenger,\n networkClientId,\n transactions,\n}: {\n from: Hex;\n getSimulationConfig: GetSimulationConfig;\n isAtomicBatchSupported: (\n request: IsAtomicBatchSupportedRequest,\n ) => Promise<IsAtomicBatchSupportedResult>;\n messenger: TransactionControllerMessenger;\n networkClientId: NetworkClientId;\n transactions: BatchTransactionParams[];\n}): Promise<EstimateGasBatchResult> {\n const chainId = getChainId({ messenger, networkClientId });\n\n const is7702Result = await isAtomicBatchSupported({\n address: from,\n chainIds: [chainId],\n });\n\n const accountSupports7702 = doesAccountSupportEIP7702(messenger, from);\n\n const chainResult = accountSupports7702\n ? is7702Result.find((result) => result.chainId === chainId)\n : undefined;\n\n const isUpgradeRequired = Boolean(chainResult && !chainResult.isSupported);\n\n if (isUpgradeRequired && !chainResult?.upgradeContractAddress) {\n throw new Error('Upgrade contract address not found');\n }\n\n if (chainResult) {\n const providedBatchGasLimits = getProvidedBatchGasLimits(transactions);\n\n const authorizationList = isUpgradeRequired\n ? [{ address: chainResult.upgradeContractAddress as Hex }]\n : undefined;\n\n const type = isUpgradeRequired\n ? TransactionEnvelopeType.setCode\n : undefined;\n\n const params: TransactionParams = {\n ...generateEIP7702BatchTransaction(from, transactions),\n authorizationList,\n from,\n type,\n };\n\n // Prefer real EIP-7702 simulation when it succeeds — the bundled call has\n // no per-tx intrinsic gas cost so the estimate is typically lower than\n // summing per-tx provided limits. Fall back to the provided sum when the\n // node-level simulation fails (e.g. predict-withdraw, where the batch's\n // first sub-call provides source-token balance to subsequent sub-calls).\n const { estimatedGas: gasLimitHex, simulationFails } = await estimateGas({\n isSimulationEnabled: true,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams: params,\n });\n\n if (simulationFails && providedBatchGasLimits) {\n log(\n 'EIP-7702 estimation failed, using batch parameter gas limits',\n providedBatchGasLimits,\n simulationFails,\n );\n return {\n gasLimits: [providedBatchGasLimits.totalGasLimit],\n ...(isUpgradeRequired ? { requiresAuthorizationList: true } : {}),\n totalGasLimit: providedBatchGasLimits.totalGasLimit,\n };\n }\n\n const totalGasLimit = new BigNumber(gasLimitHex).toNumber();\n\n log('Estimated EIP-7702 gas limit', totalGasLimit);\n\n return {\n gasLimits: [totalGasLimit],\n ...(isUpgradeRequired ? { requiresAuthorizationList: true } : {}),\n totalGasLimit,\n };\n }\n\n const providedBatchGasLimits = getProvidedBatchGasLimits(transactions);\n if (providedBatchGasLimits) {\n log('Using batch parameter gas limits', providedBatchGasLimits);\n return providedBatchGasLimits;\n }\n\n const { gasLimits: gasLimitsHex } = await simulateGasBatch({\n chainId,\n from,\n getSimulationConfig,\n transactions: transactions.map((transaction) => ({\n params: transaction,\n })),\n });\n\n const gasLimits = transactions.map((transaction, index) =>\n transaction.gas\n ? new BigNumber(transaction.gas).toNumber()\n : new BigNumber(gasLimitsHex[index]).toNumber(),\n );\n\n const totalGasLimit = gasLimits.reduce((acc, gasLimit) => acc + gasLimit, 0);\n\n log('Simulated batch gas limits', { totalGasLimit, gasLimits });\n\n return { totalGasLimit, gasLimits };\n}\n\n/**\n * Add a buffer to the provided estimated gas.\n * The buffer is calculated based on the block gas limit and a multiplier.\n *\n * @param estimatedGas - The estimated gas.\n * @param blockGasLimit - The block gas limit.\n * @param multiplier - The multiplier to apply to the estimated gas.\n * @returns The gas with the buffer applied.\n */\nexport function addGasBuffer(\n estimatedGas: string,\n blockGasLimit: string,\n multiplier: number,\n): string {\n const estimatedGasBN = hexToBN(estimatedGas);\n\n const maxGasBN = fractionBN(\n hexToBN(blockGasLimit),\n MAX_GAS_BLOCK_PERCENT,\n 100,\n );\n\n const paddedGasBN = fractionBN(estimatedGasBN, multiplier * 100, 100);\n\n if (estimatedGasBN.gt(maxGasBN)) {\n const estimatedGasHex = add0x(estimatedGas);\n log('Using estimated value', estimatedGasHex);\n return estimatedGasHex;\n }\n\n if (paddedGasBN.lt(maxGasBN)) {\n const paddedHex = add0x(BNToHex(paddedGasBN));\n log('Using padded estimate', paddedHex, multiplier);\n return paddedHex;\n }\n\n const maxHex = add0x(BNToHex(maxGasBN));\n log('Using 90% of block gas limit', maxHex);\n return maxHex;\n}\n\n/**\n * Simulate the required gas for a batch of transactions using the simulation API.\n *\n * @param options - The options object.\n * @param options.chainId - The chain ID of the transactions.\n * @param options.from - The address of the sender.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.transactions - The array of transactions within a batch request.\n * @returns An object containing the transactions with their gas limits and the total gas limit.\n */\nexport async function simulateGasBatch({\n chainId,\n from,\n getSimulationConfig,\n transactions,\n}: {\n chainId: Hex;\n from: Hex;\n getSimulationConfig: GetSimulationConfig;\n transactions: TransactionBatchSingleRequest[];\n}): Promise<{ totalGasLimit: Hex; gasLimits: Hex[] }> {\n try {\n const response = await simulateTransactions(chainId, {\n getSimulationConfig,\n transactions: transactions.map((transaction) => ({\n ...transaction.params,\n from,\n })),\n });\n\n if (response?.transactions?.length !== transactions.length) {\n throw new Error('Simulation response does not match transaction count');\n }\n\n return response.transactions.reduce<{\n totalGasLimit: Hex;\n gasLimits: Hex[];\n }>(\n (acc, transaction) => {\n const gasLimit = transaction?.gasLimit;\n\n if (!gasLimit) {\n throw new Error(\n 'No simulated gas returned for one of the transactions',\n );\n }\n\n acc.gasLimits.push(gasLimit);\n\n acc.totalGasLimit = BNToHex(\n hexToBN(acc.totalGasLimit).add(hexToBN(gasLimit)),\n );\n\n return acc;\n },\n {\n totalGasLimit: '0x0',\n gasLimits: [],\n },\n );\n } catch (error: unknown) {\n log('Error while simulating gas batch', error);\n throw new Error(\n 'Cannot estimate transaction batch total gas as simulation failed',\n );\n }\n}\n\n/**\n * Determine the gas for the provided request.\n *\n * @param request - The request object including the necessary parameters.\n * @returns The final gas value and the estimate used.\n */\nasync function getGas(\n request: UpdateGasRequest,\n): Promise<[string, TransactionMeta['simulationFails']?, string?, Revert?]> {\n const {\n isCustomNetwork,\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n txMeta,\n } = request;\n const { networkClientId } = txMeta;\n const chainId = getChainId({ messenger, networkClientId });\n const { disableGasBuffer } = txMeta;\n\n if (txMeta.txParams.gas) {\n log('Using value from request', txMeta.txParams.gas);\n return [txMeta.txParams.gas, undefined, txMeta.txParams.gas];\n }\n\n if (await requiresFixedGas(request)) {\n log('Using fixed value', FIXED_GAS);\n return [FIXED_GAS, undefined, FIXED_GAS];\n }\n\n const {\n blockGasLimit,\n estimatedGas,\n gasRevert,\n isUpgradeWithData,\n simulationFails,\n } = await estimateGas({\n isSimulationEnabled,\n getSimulationConfig,\n messenger,\n networkClientId,\n txParams: txMeta.txParams,\n });\n\n log('Original estimated gas', estimatedGas);\n\n if (simulationFails) {\n log('Using original fallback estimate as simulation failed');\n }\n\n if (disableGasBuffer) {\n log('Gas buffer disabled');\n }\n\n if (simulationFails || disableGasBuffer) {\n return [estimatedGas, simulationFails, estimatedGas, gasRevert];\n }\n\n const bufferMultiplier = getGasEstimateBuffer({\n chainId,\n isCustomRPC: isCustomNetwork,\n isUpgradeWithData,\n messenger,\n });\n\n log('Buffer', bufferMultiplier);\n\n const bufferedGas = addGasBuffer(\n estimatedGas,\n blockGasLimit,\n bufferMultiplier,\n );\n\n log('Buffered gas', bufferedGas);\n\n return [bufferedGas, simulationFails, estimatedGas, gasRevert];\n}\n\n/**\n * Determine if the gas for the provided request should be fixed.\n *\n * @param options - The options object.\n * @param options.messenger - The messenger instance for communication.\n * @param options.txMeta - The transaction meta object.\n * @param options.isCustomNetwork - Whether the network is a custom network.\n * @returns Whether the gas should be fixed.\n */\nasync function requiresFixedGas({\n messenger,\n txMeta,\n isCustomNetwork,\n}: UpdateGasRequest): Promise<boolean> {\n const {\n networkClientId,\n txParams: { to, data, type },\n } = txMeta;\n\n if (\n isCustomNetwork ||\n !to ||\n data ||\n type === TransactionEnvelopeType.setCode\n ) {\n return false;\n }\n\n const code = await getCode(messenger, networkClientId, to);\n\n return !code || code === '0x';\n}\n\n/**\n * Get the contract code for the provided address.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param address - The address to get the code for.\n * @returns The contract code.\n */\nasync function getCode(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n address: string,\n): Promise<string | undefined> {\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_getCode',\n params: [address, 'latest'],\n })) as string | undefined;\n}\n\n/**\n * Get the latest block from the network.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @returns The latest block number.\n */\nasync function getLatestBlock(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n): Promise<{ gasLimit: string; number: string }> {\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_getBlockByNumber',\n params: ['latest', false],\n })) as { gasLimit: string; number: string };\n}\n\n/**\n * Estimate the gas for a type 4 transaction.\n *\n * @param txParams - The transaction parameters.\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param chainId - The chain ID of the transaction.\n * @param getSimulationConfig - The function to get the simulation configuration.\n * @returns The estimated gas.\n */\nasync function estimateGasUpgradeWithDataToSelf(\n txParams: TransactionParams,\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n chainId: Hex,\n getSimulationConfig: GetSimulationConfig,\n): Promise<Hex> {\n const upgradeGas = (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_estimateGas',\n params: [\n {\n ...txParams,\n to: txParams.from,\n data: '0x',\n },\n ],\n })) as Hex;\n\n log('Upgrade only gas', upgradeGas);\n\n const delegationAddress = txParams.authorizationList?.[0].address as Hex;\n\n let executeGas: Hex | undefined;\n\n try {\n executeGas = await simulateGas({\n chainId,\n delegationAddress,\n getSimulationConfig,\n transaction: txParams,\n });\n } catch (error: unknown) {\n log('Error while simulating data portion of upgrade', error);\n }\n\n if (executeGas === undefined) {\n try {\n executeGas = await estimateGasNode(\n messenger,\n networkClientId,\n { ...txParams, authorizationList: undefined, type: undefined },\n delegationAddress,\n );\n } catch (error: unknown) {\n log('Error while estimating data portion of upgrade', error);\n throw error;\n }\n\n log('Success estimating data portion of upgrade', executeGas);\n }\n\n log('Execute gas', executeGas);\n\n const total = BNToHex(\n hexToBN(upgradeGas).add(hexToBN(executeGas)).subn(INTRINSIC_GAS),\n );\n\n log('Total type 4 gas', total);\n\n return total;\n}\n\n/**\n * Simulate the required gas using the simulation API.\n *\n * @param options - The options object.\n * @param options.chainId - The chain ID of the transaction.\n * @param options.delegationAddress - The delegation address of the sender to mock.\n * @param options.getSimulationConfig - The function to get the simulation configuration.\n * @param options.transaction - The transaction parameters.\n * @returns The simulated gas.\n */\nasync function simulateGas({\n chainId,\n delegationAddress,\n getSimulationConfig,\n transaction,\n}: {\n chainId: Hex;\n delegationAddress?: Hex;\n getSimulationConfig: GetSimulationConfig;\n transaction: TransactionParams;\n}): Promise<Hex> {\n const response = await simulateTransactions(chainId, {\n getSimulationConfig,\n transactions: [\n {\n to: transaction.to as Hex,\n from: transaction.from as Hex,\n data: transaction.data as Hex,\n value: transaction.value as Hex,\n },\n ],\n overrides: {\n [transaction.from]: {\n code:\n delegationAddress &&\n ((DELEGATION_PREFIX + remove0x(delegationAddress)) as Hex),\n },\n },\n });\n\n const gasLimit = response?.transactions?.[0].gasLimit;\n\n if (!gasLimit) {\n throw new Error('No simulated gas returned');\n }\n\n return gasLimit;\n}\n\n/**\n * Populate the authorization list with dummy values.\n *\n * @param authorizationList - The authorization list to prepare.\n * @param chainId - The chain ID to use.\n * @returns The authorization list with dummy values.\n */\nfunction normalizeAuthorizationList(\n authorizationList: AuthorizationList | undefined,\n chainId: Hex,\n): AuthorizationList | undefined {\n return authorizationList?.map((authorization) => ({\n ...authorization,\n chainId: authorization.chainId ?? chainId,\n nonce: authorization.nonce ?? '0x1',\n r: authorization.r ?? DUMMY_AUTHORIZATION_SIGNATURE,\n s: authorization.s ?? DUMMY_AUTHORIZATION_SIGNATURE,\n yParity: authorization.yParity ?? '0x1',\n }));\n}\n\n/**\n * Estimate the gas for a transaction using the `eth_estimateGas` method.\n *\n * @param messenger - The messenger instance for communication.\n * @param networkClientId - The network client ID.\n * @param txParams - The transaction parameters.\n * @param delegationAddress - The delegation address of the sender to mock.\n * @returns The estimated gas as a hex string.\n */\nasync function estimateGasNode(\n messenger: TransactionControllerMessenger,\n networkClientId: NetworkClientId,\n txParams: TransactionParams,\n delegationAddress?: Hex,\n): Promise<Hex> {\n const { from } = txParams;\n const params = [txParams] as Json[];\n\n if (delegationAddress) {\n params.push('latest');\n\n params.push({\n [from]: {\n code: DELEGATION_PREFIX + remove0x(delegationAddress),\n },\n });\n }\n\n return (await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_estimateGas',\n params,\n })) as Hex;\n}\n"]}
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTransactionLayer1GasFee = exports.updateTransactionLayer1GasFee = void 0;
4
4
  const utils_1 = require("@metamask/utils");
5
- const logger_1 = require("../logger.cjs");
6
- const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'layer-1-gas-fee-flow');
5
+ const logger_js_1 = require("../logger.cjs");
6
+ const log = (0, utils_1.createModuleLogger)(logger_js_1.projectLogger, 'layer-1-gas-fee-flow');
7
7
  /**
8
8
  * Updates the given transactionMeta with the layer 1 gas fee.
9
9
  *