@metamask-previews/transaction-controller 69.6.1-preview-4f4c98e → 69.6.1-preview-eb263b0ee

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 (492) hide show
  1. package/CHANGELOG.md +0 -5
  2. package/dist/TransactionController-method-action-types.cjs +7 -0
  3. package/dist/TransactionController-method-action-types.cjs.map +1 -0
  4. package/dist/{TransactionController-method-action-types.d.ts → TransactionController-method-action-types.d.cts} +2 -2
  5. package/dist/TransactionController-method-action-types.d.cts.map +1 -0
  6. package/dist/TransactionController-method-action-types.d.mts +413 -0
  7. package/dist/TransactionController-method-action-types.d.mts.map +1 -0
  8. package/dist/{TransactionController-method-action-types.js → TransactionController-method-action-types.mjs} +1 -1
  9. package/dist/TransactionController-method-action-types.mjs.map +1 -0
  10. package/dist/TransactionController.cjs +2444 -0
  11. package/dist/TransactionController.cjs.map +1 -0
  12. package/dist/{TransactionController.d.ts → TransactionController.d.cts} +18 -18
  13. package/dist/TransactionController.d.cts.map +1 -0
  14. package/dist/TransactionController.d.mts +751 -0
  15. package/dist/TransactionController.d.mts.map +1 -0
  16. package/dist/{TransactionController.js → TransactionController.mjs} +50 -49
  17. package/dist/TransactionController.mjs.map +1 -0
  18. package/dist/api/accounts-api.cjs +57 -0
  19. package/dist/api/accounts-api.cjs.map +1 -0
  20. package/dist/api/{accounts-api.d.ts → accounts-api.d.cts} +1 -1
  21. package/dist/api/accounts-api.d.cts.map +1 -0
  22. package/dist/api/accounts-api.d.mts +44 -0
  23. package/dist/api/accounts-api.d.mts.map +1 -0
  24. package/dist/api/{accounts-api.js → accounts-api.mjs} +5 -5
  25. package/dist/api/accounts-api.mjs.map +1 -0
  26. package/dist/api/simulation-api.cjs +116 -0
  27. package/dist/api/simulation-api.cjs.map +1 -0
  28. package/dist/api/{simulation-api.d.ts → simulation-api.d.cts} +3 -3
  29. package/dist/api/simulation-api.d.cts.map +1 -0
  30. package/dist/api/simulation-api.d.mts +196 -0
  31. package/dist/api/simulation-api.d.mts.map +1 -0
  32. package/dist/api/{simulation-api.js → simulation-api.mjs} +8 -7
  33. package/dist/api/simulation-api.mjs.map +1 -0
  34. package/dist/constants.cjs +111 -0
  35. package/dist/constants.cjs.map +1 -0
  36. package/dist/{constants.d.ts → constants.d.cts} +37 -37
  37. package/dist/constants.d.cts.map +1 -0
  38. package/dist/constants.d.mts +78 -0
  39. package/dist/constants.d.mts.map +1 -0
  40. package/dist/{constants.js → constants.mjs} +1 -1
  41. package/dist/constants.mjs.map +1 -0
  42. package/dist/errors.cjs +37 -0
  43. package/dist/errors.cjs.map +1 -0
  44. package/dist/{errors.d.ts → errors.d.cts} +2 -2
  45. package/dist/errors.d.cts.map +1 -0
  46. package/dist/errors.d.mts +19 -0
  47. package/dist/errors.d.mts.map +1 -0
  48. package/dist/{errors.js → errors.mjs} +2 -2
  49. package/dist/errors.mjs.map +1 -0
  50. package/dist/gas-flows/DefaultGasFeeFlow.cjs +85 -0
  51. package/dist/gas-flows/{DefaultGasFeeFlow.js.map → DefaultGasFeeFlow.cjs.map} +1 -1
  52. package/dist/gas-flows/{DefaultGasFeeFlow.d.ts → DefaultGasFeeFlow.d.cts} +2 -2
  53. package/dist/gas-flows/DefaultGasFeeFlow.d.cts.map +1 -0
  54. package/dist/gas-flows/DefaultGasFeeFlow.d.mts +10 -0
  55. package/dist/gas-flows/DefaultGasFeeFlow.d.mts.map +1 -0
  56. package/dist/gas-flows/{DefaultGasFeeFlow.js → DefaultGasFeeFlow.mjs} +6 -6
  57. package/dist/gas-flows/DefaultGasFeeFlow.mjs.map +1 -0
  58. package/dist/gas-flows/LineaGasFeeFlow.cjs +111 -0
  59. package/dist/gas-flows/LineaGasFeeFlow.cjs.map +1 -0
  60. package/dist/gas-flows/{LineaGasFeeFlow.d.ts → LineaGasFeeFlow.d.cts} +3 -3
  61. package/dist/gas-flows/LineaGasFeeFlow.d.cts.map +1 -0
  62. package/dist/gas-flows/LineaGasFeeFlow.d.mts +16 -0
  63. package/dist/gas-flows/LineaGasFeeFlow.d.mts.map +1 -0
  64. package/dist/gas-flows/{LineaGasFeeFlow.js → LineaGasFeeFlow.mjs} +7 -7
  65. package/dist/gas-flows/LineaGasFeeFlow.mjs.map +1 -0
  66. package/dist/gas-flows/MantleLayer1GasFeeFlow.cjs +66 -0
  67. package/dist/gas-flows/MantleLayer1GasFeeFlow.cjs.map +1 -0
  68. package/dist/gas-flows/{MantleLayer1GasFeeFlow.d.ts → MantleLayer1GasFeeFlow.d.cts} +5 -5
  69. package/dist/gas-flows/MantleLayer1GasFeeFlow.d.cts.map +1 -0
  70. package/dist/gas-flows/MantleLayer1GasFeeFlow.d.mts +21 -0
  71. package/dist/gas-flows/MantleLayer1GasFeeFlow.d.mts.map +1 -0
  72. package/dist/gas-flows/{MantleLayer1GasFeeFlow.js → MantleLayer1GasFeeFlow.mjs} +6 -6
  73. package/dist/gas-flows/MantleLayer1GasFeeFlow.mjs.map +1 -0
  74. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs +59 -0
  75. package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs.map +1 -0
  76. package/dist/gas-flows/{OptimismLayer1GasFeeFlow.d.ts → OptimismLayer1GasFeeFlow.d.cts} +4 -4
  77. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.cts.map +1 -0
  78. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts +14 -0
  79. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts.map +1 -0
  80. package/dist/gas-flows/{OptimismLayer1GasFeeFlow.js → OptimismLayer1GasFeeFlow.mjs} +5 -5
  81. package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs.map +1 -0
  82. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs +201 -0
  83. package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs.map +1 -0
  84. package/dist/gas-flows/{OracleLayer1GasFeeFlow.d.ts → OracleLayer1GasFeeFlow.d.cts} +5 -5
  85. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts.map +1 -0
  86. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts +57 -0
  87. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts.map +1 -0
  88. package/dist/gas-flows/{OracleLayer1GasFeeFlow.js → OracleLayer1GasFeeFlow.mjs} +15 -8
  89. package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs.map +1 -0
  90. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.cjs +123 -0
  91. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.cjs.map +1 -0
  92. package/dist/gas-flows/{RandomisedEstimationsGasFeeFlow.d.ts → RandomisedEstimationsGasFeeFlow.d.cts} +4 -4
  93. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.cts.map +1 -0
  94. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.mts +28 -0
  95. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.mts.map +1 -0
  96. package/dist/gas-flows/{RandomisedEstimationsGasFeeFlow.js → RandomisedEstimationsGasFeeFlow.mjs} +8 -8
  97. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.mjs.map +1 -0
  98. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs +24 -0
  99. package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs.map +1 -0
  100. package/dist/gas-flows/{ScrollLayer1GasFeeFlow.d.ts → ScrollLayer1GasFeeFlow.d.cts} +5 -5
  101. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.cts.map +1 -0
  102. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts +16 -0
  103. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts.map +1 -0
  104. package/dist/gas-flows/{ScrollLayer1GasFeeFlow.js → ScrollLayer1GasFeeFlow.mjs} +3 -3
  105. package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs.map +1 -0
  106. package/dist/gas-flows/TestGasFeeFlow.cjs +73 -0
  107. package/dist/gas-flows/TestGasFeeFlow.cjs.map +1 -0
  108. package/dist/gas-flows/{TestGasFeeFlow.d.ts → TestGasFeeFlow.d.cts} +2 -2
  109. package/dist/gas-flows/TestGasFeeFlow.d.cts.map +1 -0
  110. package/dist/gas-flows/TestGasFeeFlow.d.mts +12 -0
  111. package/dist/gas-flows/TestGasFeeFlow.d.mts.map +1 -0
  112. package/dist/gas-flows/{TestGasFeeFlow.js → TestGasFeeFlow.mjs} +3 -3
  113. package/dist/gas-flows/TestGasFeeFlow.mjs.map +1 -0
  114. package/dist/helpers/GasFeePoller.cjs +334 -0
  115. package/dist/helpers/GasFeePoller.cjs.map +1 -0
  116. package/dist/helpers/{GasFeePoller.d.ts → GasFeePoller.d.cts} +10 -7
  117. package/dist/helpers/GasFeePoller.d.cts.map +1 -0
  118. package/dist/helpers/GasFeePoller.d.mts +66 -0
  119. package/dist/helpers/GasFeePoller.d.mts.map +1 -0
  120. package/dist/helpers/{GasFeePoller.js → GasFeePoller.mjs} +9 -9
  121. package/dist/helpers/GasFeePoller.mjs.map +1 -0
  122. package/dist/helpers/MethodDataHelper.cjs +84 -0
  123. package/dist/helpers/MethodDataHelper.cjs.map +1 -0
  124. package/dist/helpers/{MethodDataHelper.d.ts → MethodDataHelper.d.cts} +7 -4
  125. package/dist/helpers/MethodDataHelper.d.cts.map +1 -0
  126. package/dist/helpers/MethodDataHelper.d.mts +16 -0
  127. package/dist/helpers/MethodDataHelper.d.mts.map +1 -0
  128. package/dist/helpers/{MethodDataHelper.js → MethodDataHelper.mjs} +7 -7
  129. package/dist/helpers/MethodDataHelper.mjs.map +1 -0
  130. package/dist/helpers/MultichainTrackingHelper.cjs +231 -0
  131. package/dist/helpers/MultichainTrackingHelper.cjs.map +1 -0
  132. package/dist/helpers/{MultichainTrackingHelper.d.ts → MultichainTrackingHelper.d.cts} +5 -5
  133. package/dist/helpers/MultichainTrackingHelper.d.cts.map +1 -0
  134. package/dist/helpers/MultichainTrackingHelper.d.mts +56 -0
  135. package/dist/helpers/MultichainTrackingHelper.d.mts.map +1 -0
  136. package/dist/helpers/{MultichainTrackingHelper.js → MultichainTrackingHelper.mjs} +8 -8
  137. package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -0
  138. package/dist/helpers/PendingTransactionTracker.cjs +407 -0
  139. package/dist/helpers/PendingTransactionTracker.cjs.map +1 -0
  140. package/dist/helpers/{PendingTransactionTracker.d.ts → PendingTransactionTracker.d.cts} +8 -5
  141. package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -0
  142. package/dist/helpers/PendingTransactionTracker.d.mts +54 -0
  143. package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -0
  144. package/dist/helpers/{PendingTransactionTracker.js → PendingTransactionTracker.mjs} +15 -14
  145. package/dist/helpers/PendingTransactionTracker.mjs.map +1 -0
  146. package/dist/helpers/ResimulateHelper.cjs +274 -0
  147. package/dist/helpers/ResimulateHelper.cjs.map +1 -0
  148. package/dist/helpers/{ResimulateHelper.d.ts → ResimulateHelper.d.cts} +3 -3
  149. package/dist/helpers/ResimulateHelper.d.cts.map +1 -0
  150. package/dist/helpers/ResimulateHelper.d.mts +36 -0
  151. package/dist/helpers/ResimulateHelper.d.mts.map +1 -0
  152. package/dist/helpers/{ResimulateHelper.js → ResimulateHelper.mjs} +8 -7
  153. package/dist/helpers/ResimulateHelper.mjs.map +1 -0
  154. package/dist/helpers/TransactionPoller.cjs +175 -0
  155. package/dist/helpers/TransactionPoller.cjs.map +1 -0
  156. package/dist/helpers/{TransactionPoller.d.ts → TransactionPoller.d.cts} +5 -5
  157. package/dist/helpers/TransactionPoller.d.cts.map +1 -0
  158. package/dist/helpers/TransactionPoller.d.mts +37 -0
  159. package/dist/helpers/TransactionPoller.d.mts.map +1 -0
  160. package/dist/helpers/{TransactionPoller.js → TransactionPoller.mjs} +11 -10
  161. package/dist/helpers/TransactionPoller.mjs.map +1 -0
  162. package/dist/hooks/CollectPublishHook.cjs +94 -0
  163. package/dist/hooks/CollectPublishHook.cjs.map +1 -0
  164. package/dist/hooks/{CollectPublishHook.d.ts → CollectPublishHook.d.cts} +3 -3
  165. package/dist/hooks/CollectPublishHook.d.cts.map +1 -0
  166. package/dist/hooks/CollectPublishHook.d.mts +29 -0
  167. package/dist/hooks/CollectPublishHook.d.mts.map +1 -0
  168. package/dist/hooks/{CollectPublishHook.js → CollectPublishHook.mjs} +5 -4
  169. package/dist/hooks/CollectPublishHook.mjs.map +1 -0
  170. package/dist/hooks/ExtraTransactionsPublishHook.cjs +126 -0
  171. package/dist/hooks/ExtraTransactionsPublishHook.cjs.map +1 -0
  172. package/dist/hooks/{ExtraTransactionsPublishHook.d.ts → ExtraTransactionsPublishHook.d.cts} +3 -3
  173. package/dist/hooks/ExtraTransactionsPublishHook.d.cts.map +1 -0
  174. package/dist/hooks/ExtraTransactionsPublishHook.d.mts +19 -0
  175. package/dist/hooks/ExtraTransactionsPublishHook.d.mts.map +1 -0
  176. package/dist/hooks/{ExtraTransactionsPublishHook.js → ExtraTransactionsPublishHook.mjs} +3 -3
  177. package/dist/hooks/ExtraTransactionsPublishHook.mjs.map +1 -0
  178. package/dist/hooks/SequentialPublishBatchHook.cjs +112 -0
  179. package/dist/hooks/SequentialPublishBatchHook.cjs.map +1 -0
  180. package/dist/hooks/{SequentialPublishBatchHook.d.ts → SequentialPublishBatchHook.d.cts} +4 -4
  181. package/dist/hooks/SequentialPublishBatchHook.d.cts.map +1 -0
  182. package/dist/hooks/SequentialPublishBatchHook.d.mts +22 -0
  183. package/dist/hooks/SequentialPublishBatchHook.d.mts.map +1 -0
  184. package/dist/hooks/{SequentialPublishBatchHook.js → SequentialPublishBatchHook.mjs} +4 -4
  185. package/dist/hooks/SequentialPublishBatchHook.mjs.map +1 -0
  186. package/dist/index.cjs +40 -0
  187. package/dist/index.cjs.map +1 -0
  188. package/dist/{index.d.ts → index.d.cts} +16 -16
  189. package/dist/index.d.cts.map +1 -0
  190. package/dist/index.d.mts +16 -0
  191. package/dist/index.d.mts.map +1 -0
  192. package/dist/index.mjs +12 -0
  193. package/dist/index.mjs.map +1 -0
  194. package/dist/logger.cjs +9 -0
  195. package/dist/logger.cjs.map +1 -0
  196. package/dist/{logger.d.ts → logger.d.cts} +3 -2
  197. package/dist/logger.d.cts.map +1 -0
  198. package/dist/logger.d.mts +6 -0
  199. package/dist/logger.d.mts.map +1 -0
  200. package/dist/{logger.js → logger.mjs} +2 -2
  201. package/dist/logger.mjs.map +1 -0
  202. package/dist/types.cjs +382 -0
  203. package/dist/types.cjs.map +1 -0
  204. package/dist/{types.d.ts → types.d.cts} +8 -8
  205. package/dist/types.d.cts.map +1 -0
  206. package/dist/types.d.mts +1887 -0
  207. package/dist/types.d.mts.map +1 -0
  208. package/dist/{types.js → types.mjs} +1 -1
  209. package/dist/types.mjs.map +1 -0
  210. package/dist/utils/balance-changes.cjs +592 -0
  211. package/dist/utils/balance-changes.cjs.map +1 -0
  212. package/dist/utils/{balance-changes.d.ts → balance-changes.d.cts} +5 -5
  213. package/dist/utils/balance-changes.d.cts.map +1 -0
  214. package/dist/utils/balance-changes.d.mts +38 -0
  215. package/dist/utils/balance-changes.d.mts.map +1 -0
  216. package/dist/utils/{balance-changes.js → balance-changes.mjs} +20 -13
  217. package/dist/utils/balance-changes.mjs.map +1 -0
  218. package/dist/utils/balance.cjs +44 -0
  219. package/dist/utils/balance.cjs.map +1 -0
  220. package/dist/utils/{balance.d.ts → balance.d.cts} +5 -5
  221. package/dist/utils/balance.d.cts.map +1 -0
  222. package/dist/utils/balance.d.mts +26 -0
  223. package/dist/utils/balance.d.mts.map +1 -0
  224. package/dist/utils/{balance.js → balance.mjs} +3 -3
  225. package/dist/utils/balance.mjs.map +1 -0
  226. package/dist/utils/batch.cjs +712 -0
  227. package/dist/utils/batch.cjs.map +1 -0
  228. package/dist/utils/{batch.d.ts → batch.d.cts} +8 -8
  229. package/dist/utils/batch.d.cts.map +1 -0
  230. package/dist/utils/batch.d.mts +58 -0
  231. package/dist/utils/batch.d.mts.map +1 -0
  232. package/dist/utils/{batch.js → batch.mjs} +18 -18
  233. package/dist/utils/batch.mjs.map +1 -0
  234. package/dist/utils/eip7702.cjs +354 -0
  235. package/dist/utils/eip7702.cjs.map +1 -0
  236. package/dist/utils/{eip7702.d.ts → eip7702.d.cts} +5 -5
  237. package/dist/utils/eip7702.d.cts.map +1 -0
  238. package/dist/utils/eip7702.d.mts +137 -0
  239. package/dist/utils/eip7702.d.mts.map +1 -0
  240. package/dist/utils/{eip7702.js → eip7702.mjs} +12 -12
  241. package/dist/utils/eip7702.mjs.map +1 -0
  242. package/dist/utils/external-transactions.cjs +36 -0
  243. package/dist/utils/external-transactions.cjs.map +1 -0
  244. package/dist/utils/{external-transactions.d.ts → external-transactions.d.cts} +2 -2
  245. package/dist/utils/external-transactions.d.cts.map +1 -0
  246. package/dist/utils/external-transactions.d.mts +10 -0
  247. package/dist/utils/external-transactions.d.mts.map +1 -0
  248. package/dist/utils/{external-transactions.js → external-transactions.mjs} +3 -3
  249. package/dist/utils/external-transactions.mjs.map +1 -0
  250. package/dist/utils/feature-flags.cjs +255 -0
  251. package/dist/utils/feature-flags.cjs.map +1 -0
  252. package/dist/utils/{feature-flags.d.ts → feature-flags.d.cts} +3 -3
  253. package/dist/utils/feature-flags.d.cts.map +1 -0
  254. package/dist/utils/feature-flags.d.mts +313 -0
  255. package/dist/utils/feature-flags.d.mts.map +1 -0
  256. package/dist/utils/{feature-flags.js → feature-flags.mjs} +5 -5
  257. package/dist/utils/feature-flags.mjs.map +1 -0
  258. package/dist/utils/first-time-interaction.cjs +69 -0
  259. package/dist/utils/first-time-interaction.cjs.map +1 -0
  260. package/dist/utils/{first-time-interaction.d.ts → first-time-interaction.d.cts} +3 -3
  261. package/dist/utils/first-time-interaction.d.cts.map +1 -0
  262. package/dist/utils/first-time-interaction.d.mts +30 -0
  263. package/dist/utils/first-time-interaction.d.mts.map +1 -0
  264. package/dist/utils/{first-time-interaction.js → first-time-interaction.mjs} +6 -6
  265. package/dist/utils/first-time-interaction.mjs.map +1 -0
  266. package/dist/utils/gas-fee-tokens.cjs +174 -0
  267. package/dist/utils/gas-fee-tokens.cjs.map +1 -0
  268. package/dist/utils/{gas-fee-tokens.d.ts → gas-fee-tokens.d.cts} +5 -5
  269. package/dist/utils/gas-fee-tokens.d.cts.map +1 -0
  270. package/dist/utils/gas-fee-tokens.d.mts +46 -0
  271. package/dist/utils/gas-fee-tokens.d.mts.map +1 -0
  272. package/dist/utils/{gas-fee-tokens.js → gas-fee-tokens.mjs} +9 -9
  273. package/dist/utils/gas-fee-tokens.mjs.map +1 -0
  274. package/dist/utils/gas-fees.cjs +424 -0
  275. package/dist/utils/gas-fees.cjs.map +1 -0
  276. package/dist/utils/{gas-fees.d.ts → gas-fees.d.cts} +5 -5
  277. package/dist/utils/gas-fees.d.cts.map +1 -0
  278. package/dist/utils/gas-fees.d.mts +57 -0
  279. package/dist/utils/gas-fees.d.mts.map +1 -0
  280. package/dist/utils/{gas-fees.js → gas-fees.mjs} +9 -9
  281. package/dist/utils/gas-fees.mjs.map +1 -0
  282. package/dist/utils/gas-flow.cjs +81 -0
  283. package/dist/utils/gas-flow.cjs.map +1 -0
  284. package/dist/utils/{gas-flow.d.ts → gas-flow.d.cts} +6 -6
  285. package/dist/utils/gas-flow.d.cts.map +1 -0
  286. package/dist/utils/gas-flow.d.mts +29 -0
  287. package/dist/utils/gas-flow.d.mts.map +1 -0
  288. package/dist/utils/{gas-flow.js → gas-flow.mjs} +3 -3
  289. package/dist/utils/gas-flow.mjs.map +1 -0
  290. package/dist/utils/gas.cjs +545 -0
  291. package/dist/utils/gas.cjs.map +1 -0
  292. package/dist/utils/{gas.d.ts → gas.d.cts} +6 -5
  293. package/dist/utils/gas.d.cts.map +1 -0
  294. package/dist/utils/gas.d.mts +116 -0
  295. package/dist/utils/gas.d.mts.map +1 -0
  296. package/dist/utils/{gas.js → gas.mjs} +11 -11
  297. package/dist/utils/gas.mjs.map +1 -0
  298. package/dist/utils/layer1-gas-fee-flow.cjs +73 -0
  299. package/dist/utils/layer1-gas-fee-flow.cjs.map +1 -0
  300. package/dist/utils/{layer1-gas-fee-flow.d.ts → layer1-gas-fee-flow.d.cts} +4 -4
  301. package/dist/utils/layer1-gas-fee-flow.d.cts.map +1 -0
  302. package/dist/utils/layer1-gas-fee-flow.d.mts +28 -0
  303. package/dist/utils/layer1-gas-fee-flow.d.mts.map +1 -0
  304. package/dist/utils/{layer1-gas-fee-flow.js → layer1-gas-fee-flow.mjs} +3 -3
  305. package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -0
  306. package/dist/utils/nonce.cjs +93 -0
  307. package/dist/utils/nonce.cjs.map +1 -0
  308. package/dist/utils/{nonce.d.ts → nonce.d.cts} +3 -3
  309. package/dist/utils/nonce.d.cts.map +1 -0
  310. package/dist/utils/nonce.d.mts +26 -0
  311. package/dist/utils/nonce.d.mts.map +1 -0
  312. package/dist/utils/{nonce.js → nonce.mjs} +4 -4
  313. package/dist/utils/nonce.mjs.map +1 -0
  314. package/dist/utils/prepare.cjs +97 -0
  315. package/dist/utils/prepare.cjs.map +1 -0
  316. package/dist/utils/{prepare.d.ts → prepare.d.cts} +5 -5
  317. package/dist/utils/prepare.d.cts.map +1 -0
  318. package/dist/utils/prepare.d.mts +22 -0
  319. package/dist/utils/prepare.d.mts.map +1 -0
  320. package/dist/utils/{prepare.js → prepare.mjs} +6 -5
  321. package/dist/utils/prepare.mjs.map +1 -0
  322. package/dist/utils/provider.cjs +106 -0
  323. package/dist/utils/provider.cjs.map +1 -0
  324. package/dist/utils/{provider.d.ts → provider.d.cts} +4 -4
  325. package/dist/utils/provider.d.cts.map +1 -0
  326. package/dist/utils/provider.d.mts +65 -0
  327. package/dist/utils/provider.d.mts.map +1 -0
  328. package/dist/utils/{provider.js → provider.mjs} +3 -3
  329. package/dist/utils/provider.mjs.map +1 -0
  330. package/dist/utils/recipient.cjs +31 -0
  331. package/dist/utils/recipient.cjs.map +1 -0
  332. package/dist/utils/{recipient.d.ts → recipient.d.cts} +2 -2
  333. package/dist/utils/recipient.d.cts.map +1 -0
  334. package/dist/utils/recipient.d.mts +13 -0
  335. package/dist/utils/recipient.d.mts.map +1 -0
  336. package/dist/utils/{recipient.js → recipient.mjs} +3 -3
  337. package/dist/utils/recipient.mjs.map +1 -0
  338. package/dist/utils/retry.cjs +93 -0
  339. package/dist/utils/retry.cjs.map +1 -0
  340. package/dist/utils/{retry.d.ts → retry.d.cts} +2 -2
  341. package/dist/utils/retry.d.cts.map +1 -0
  342. package/dist/utils/retry.d.mts +11 -0
  343. package/dist/utils/retry.d.mts.map +1 -0
  344. package/dist/utils/{retry.js → retry.mjs} +3 -3
  345. package/dist/utils/retry.mjs.map +1 -0
  346. package/dist/utils/revert-reason.cjs +192 -0
  347. package/dist/utils/revert-reason.cjs.map +1 -0
  348. package/dist/utils/{revert-reason.d.ts → revert-reason.d.cts} +5 -5
  349. package/dist/utils/revert-reason.d.cts.map +1 -0
  350. package/dist/utils/revert-reason.d.mts +57 -0
  351. package/dist/utils/revert-reason.d.mts.map +1 -0
  352. package/dist/utils/{revert-reason.js → revert-reason.mjs} +4 -4
  353. package/dist/utils/revert-reason.mjs.map +1 -0
  354. package/dist/utils/signature.cjs +26 -0
  355. package/dist/utils/signature.cjs.map +1 -0
  356. package/dist/utils/{signature.d.ts → signature.d.cts} +2 -2
  357. package/dist/utils/signature.d.cts.map +1 -0
  358. package/dist/utils/signature.d.mts +11 -0
  359. package/dist/utils/signature.d.mts.map +1 -0
  360. package/dist/utils/{signature.js → signature.mjs} +3 -3
  361. package/dist/utils/signature.mjs.map +1 -0
  362. package/dist/utils/swaps.cjs +332 -0
  363. package/dist/utils/swaps.cjs.map +1 -0
  364. package/dist/utils/{swaps.d.ts → swaps.d.cts} +5 -5
  365. package/dist/utils/swaps.d.cts.map +1 -0
  366. package/dist/utils/swaps.d.mts +90 -0
  367. package/dist/utils/swaps.d.mts.map +1 -0
  368. package/dist/utils/{swaps.js → swaps.mjs} +8 -7
  369. package/dist/utils/swaps.mjs.map +1 -0
  370. package/dist/utils/transaction-type.cjs +159 -0
  371. package/dist/utils/transaction-type.cjs.map +1 -0
  372. package/dist/utils/{transaction-type.d.ts → transaction-type.d.cts} +6 -6
  373. package/dist/utils/transaction-type.d.cts.map +1 -0
  374. package/dist/utils/transaction-type.d.mts +44 -0
  375. package/dist/utils/transaction-type.d.mts.map +1 -0
  376. package/dist/utils/{transaction-type.js → transaction-type.mjs} +6 -6
  377. package/dist/utils/transaction-type.mjs.map +1 -0
  378. package/dist/utils/utils.cjs +287 -0
  379. package/dist/utils/utils.cjs.map +1 -0
  380. package/dist/utils/{utils.d.ts → utils.d.cts} +4 -4
  381. package/dist/utils/utils.d.cts.map +1 -0
  382. package/dist/utils/utils.d.mts +101 -0
  383. package/dist/utils/utils.d.mts.map +1 -0
  384. package/dist/utils/{utils.js → utils.mjs} +12 -5
  385. package/dist/utils/utils.mjs.map +1 -0
  386. package/dist/utils/validation.cjs +389 -0
  387. package/dist/utils/validation.cjs.map +1 -0
  388. package/dist/utils/{validation.d.ts → validation.d.cts} +4 -4
  389. package/dist/utils/validation.d.cts.map +1 -0
  390. package/dist/utils/validation.d.mts +66 -0
  391. package/dist/utils/validation.d.mts.map +1 -0
  392. package/dist/utils/{validation.js → validation.mjs} +8 -8
  393. package/dist/utils/validation.mjs.map +1 -0
  394. package/package.json +19 -15
  395. package/dist/TransactionController-method-action-types.d.ts.map +0 -1
  396. package/dist/TransactionController-method-action-types.js.map +0 -1
  397. package/dist/TransactionController.d.ts.map +0 -1
  398. package/dist/TransactionController.js.map +0 -1
  399. package/dist/api/accounts-api.d.ts.map +0 -1
  400. package/dist/api/accounts-api.js.map +0 -1
  401. package/dist/api/simulation-api.d.ts.map +0 -1
  402. package/dist/api/simulation-api.js.map +0 -1
  403. package/dist/constants.d.ts.map +0 -1
  404. package/dist/constants.js.map +0 -1
  405. package/dist/errors.d.ts.map +0 -1
  406. package/dist/errors.js.map +0 -1
  407. package/dist/gas-flows/DefaultGasFeeFlow.d.ts.map +0 -1
  408. package/dist/gas-flows/LineaGasFeeFlow.d.ts.map +0 -1
  409. package/dist/gas-flows/LineaGasFeeFlow.js.map +0 -1
  410. package/dist/gas-flows/MantleLayer1GasFeeFlow.d.ts.map +0 -1
  411. package/dist/gas-flows/MantleLayer1GasFeeFlow.js.map +0 -1
  412. package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.ts.map +0 -1
  413. package/dist/gas-flows/OptimismLayer1GasFeeFlow.js.map +0 -1
  414. package/dist/gas-flows/OracleLayer1GasFeeFlow.d.ts.map +0 -1
  415. package/dist/gas-flows/OracleLayer1GasFeeFlow.js.map +0 -1
  416. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.d.ts.map +0 -1
  417. package/dist/gas-flows/RandomisedEstimationsGasFeeFlow.js.map +0 -1
  418. package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.ts.map +0 -1
  419. package/dist/gas-flows/ScrollLayer1GasFeeFlow.js.map +0 -1
  420. package/dist/gas-flows/TestGasFeeFlow.d.ts.map +0 -1
  421. package/dist/gas-flows/TestGasFeeFlow.js.map +0 -1
  422. package/dist/helpers/GasFeePoller.d.ts.map +0 -1
  423. package/dist/helpers/GasFeePoller.js.map +0 -1
  424. package/dist/helpers/MethodDataHelper.d.ts.map +0 -1
  425. package/dist/helpers/MethodDataHelper.js.map +0 -1
  426. package/dist/helpers/MultichainTrackingHelper.d.ts.map +0 -1
  427. package/dist/helpers/MultichainTrackingHelper.js.map +0 -1
  428. package/dist/helpers/PendingTransactionTracker.d.ts.map +0 -1
  429. package/dist/helpers/PendingTransactionTracker.js.map +0 -1
  430. package/dist/helpers/ResimulateHelper.d.ts.map +0 -1
  431. package/dist/helpers/ResimulateHelper.js.map +0 -1
  432. package/dist/helpers/TransactionPoller.d.ts.map +0 -1
  433. package/dist/helpers/TransactionPoller.js.map +0 -1
  434. package/dist/hooks/CollectPublishHook.d.ts.map +0 -1
  435. package/dist/hooks/CollectPublishHook.js.map +0 -1
  436. package/dist/hooks/ExtraTransactionsPublishHook.d.ts.map +0 -1
  437. package/dist/hooks/ExtraTransactionsPublishHook.js.map +0 -1
  438. package/dist/hooks/SequentialPublishBatchHook.d.ts.map +0 -1
  439. package/dist/hooks/SequentialPublishBatchHook.js.map +0 -1
  440. package/dist/index.d.ts.map +0 -1
  441. package/dist/index.js +0 -12
  442. package/dist/index.js.map +0 -1
  443. package/dist/logger.d.ts.map +0 -1
  444. package/dist/logger.js.map +0 -1
  445. package/dist/types.d.ts.map +0 -1
  446. package/dist/types.js.map +0 -1
  447. package/dist/utils/balance-changes.d.ts.map +0 -1
  448. package/dist/utils/balance-changes.js.map +0 -1
  449. package/dist/utils/balance.d.ts.map +0 -1
  450. package/dist/utils/balance.js.map +0 -1
  451. package/dist/utils/batch.d.ts.map +0 -1
  452. package/dist/utils/batch.js.map +0 -1
  453. package/dist/utils/eip7702.d.ts.map +0 -1
  454. package/dist/utils/eip7702.js.map +0 -1
  455. package/dist/utils/external-transactions.d.ts.map +0 -1
  456. package/dist/utils/external-transactions.js.map +0 -1
  457. package/dist/utils/feature-flags.d.ts.map +0 -1
  458. package/dist/utils/feature-flags.js.map +0 -1
  459. package/dist/utils/first-time-interaction.d.ts.map +0 -1
  460. package/dist/utils/first-time-interaction.js.map +0 -1
  461. package/dist/utils/gas-fee-tokens.d.ts.map +0 -1
  462. package/dist/utils/gas-fee-tokens.js.map +0 -1
  463. package/dist/utils/gas-fees.d.ts.map +0 -1
  464. package/dist/utils/gas-fees.js.map +0 -1
  465. package/dist/utils/gas-flow.d.ts.map +0 -1
  466. package/dist/utils/gas-flow.js.map +0 -1
  467. package/dist/utils/gas.d.ts.map +0 -1
  468. package/dist/utils/gas.js.map +0 -1
  469. package/dist/utils/layer1-gas-fee-flow.d.ts.map +0 -1
  470. package/dist/utils/layer1-gas-fee-flow.js.map +0 -1
  471. package/dist/utils/nonce.d.ts.map +0 -1
  472. package/dist/utils/nonce.js.map +0 -1
  473. package/dist/utils/prepare.d.ts.map +0 -1
  474. package/dist/utils/prepare.js.map +0 -1
  475. package/dist/utils/provider.d.ts.map +0 -1
  476. package/dist/utils/provider.js.map +0 -1
  477. package/dist/utils/recipient.d.ts.map +0 -1
  478. package/dist/utils/recipient.js.map +0 -1
  479. package/dist/utils/retry.d.ts.map +0 -1
  480. package/dist/utils/retry.js.map +0 -1
  481. package/dist/utils/revert-reason.d.ts.map +0 -1
  482. package/dist/utils/revert-reason.js.map +0 -1
  483. package/dist/utils/signature.d.ts.map +0 -1
  484. package/dist/utils/signature.js.map +0 -1
  485. package/dist/utils/swaps.d.ts.map +0 -1
  486. package/dist/utils/swaps.js.map +0 -1
  487. package/dist/utils/transaction-type.d.ts.map +0 -1
  488. package/dist/utils/transaction-type.js.map +0 -1
  489. package/dist/utils/utils.d.ts.map +0 -1
  490. package/dist/utils/utils.js.map +0 -1
  491. package/dist/utils/validation.d.ts.map +0 -1
  492. package/dist/utils/validation.js.map +0 -1
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MantleLayer1GasFeeFlow = void 0;
4
+ const abi_1 = require("@ethersproject/abi");
5
+ const constants_js_1 = require("../constants.cjs");
6
+ const provider_js_1 = require("../utils/provider.cjs");
7
+ const utils_js_1 = require("../utils/utils.cjs");
8
+ const OracleLayer1GasFeeFlow_js_1 = require("./OracleLayer1GasFeeFlow.cjs");
9
+ const MANTLE_CHAIN_IDS = [constants_js_1.CHAIN_IDS.MANTLE, constants_js_1.CHAIN_IDS.MANTLE_SEPOLIA];
10
+ const TOKEN_RATIO_ABI = [
11
+ {
12
+ inputs: [],
13
+ name: 'tokenRatio',
14
+ outputs: [
15
+ {
16
+ internalType: 'uint256',
17
+ name: '',
18
+ type: 'uint256',
19
+ },
20
+ ],
21
+ stateMutability: 'view',
22
+ type: 'function',
23
+ },
24
+ ];
25
+ const TOKEN_RATIO_INTERFACE = new abi_1.Interface(TOKEN_RATIO_ABI);
26
+ /**
27
+ * Mantle layer 1 gas fee flow.
28
+ *
29
+ * Mantle uses MNT as its native gas token, but the oracle's getL1Fee returns
30
+ * values denominated in ETH. This subclass multiplies the L1 fee by the
31
+ * tokenRatio (ETH/MNT exchange rate) from the oracle contract to convert
32
+ * the fee to MNT.
33
+ */
34
+ class MantleLayer1GasFeeFlow extends OracleLayer1GasFeeFlow_js_1.OracleLayer1GasFeeFlow {
35
+ async matchesTransaction({ transactionMeta, }) {
36
+ return MANTLE_CHAIN_IDS.includes(transactionMeta.chainId);
37
+ }
38
+ getOperatorFeeGas(transactionMeta) {
39
+ return (transactionMeta.gasUsed ??
40
+ transactionMeta.txParams.gas ??
41
+ transactionMeta.txParams.gasLimit);
42
+ }
43
+ async transformOracleFee(oracleFee, request) {
44
+ const { messenger, transactionMeta } = request;
45
+ const { chainId, networkClientId } = transactionMeta;
46
+ const to = this.getOracleAddressForChain(chainId);
47
+ const data = TOKEN_RATIO_INTERFACE.encodeFunctionData('tokenRatio', []);
48
+ // Direct `eth_call` RPC request rather than an ethers `Contract` with
49
+ // `Web3Provider`, whose `setTimeout`-based dispatch never fires on React
50
+ // Native when the timer pump is starved (e.g. iOS display link freeze).
51
+ // See https://github.com/MetaMask/metamask-mobile/issues/32863
52
+ const result = await (0, provider_js_1.rpcRequest)({
53
+ messenger,
54
+ networkClientId,
55
+ method: 'eth_call',
56
+ params: [{ to, data }, 'latest'],
57
+ });
58
+ if (typeof result !== 'string' || result === '0x') {
59
+ throw new Error('No value returned from token ratio contract');
60
+ }
61
+ const tokenRatio = (0, utils_js_1.toBN)(result);
62
+ return oracleFee.mul(tokenRatio);
63
+ }
64
+ }
65
+ exports.MantleLayer1GasFeeFlow = MantleLayer1GasFeeFlow;
66
+ //# sourceMappingURL=MantleLayer1GasFeeFlow.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MantleLayer1GasFeeFlow.cjs","sourceRoot":"","sources":["../../src/gas-flows/MantleLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;AAAA,4CAA+C;AAI/C,mDAA4C;AAG5C,uDAAkD;AAClD,iDAAyC;AACzC,4EAAqE;AAErE,MAAM,gBAAgB,GAAU,CAAC,wBAAS,CAAC,MAAM,EAAE,wBAAS,CAAC,cAAc,CAAC,CAAC;AAE7E,MAAM,eAAe,GAAG;IACtB;QACE,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP;gBACE,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,SAAS;aAChB;SACF;QACD,eAAe,EAAE,MAAM;QACvB,IAAI,EAAE,UAAU;KACjB;CACF,CAAC;AAEF,MAAM,qBAAqB,GAAG,IAAI,eAAS,CAAC,eAAe,CAAC,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAa,sBAAuB,SAAQ,kDAAsB;IAChE,KAAK,CAAC,kBAAkB,CAAC,EACvB,eAAe,GAIhB;QACC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEkB,iBAAiB,CAClC,eAAgC;QAEhC,OAAO,CACL,eAAe,CAAC,OAAO;YACvB,eAAe,CAAC,QAAQ,CAAC,GAAG;YAC5B,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAClC,CAAC;IACJ,CAAC;IAEkB,KAAK,CAAC,kBAAkB,CACzC,SAAa,EACb,OAAgC;QAEhC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;QAC/C,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC;QAErD,MAAM,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,qBAAqB,CAAC,kBAAkB,CACnD,YAAY,EACZ,EAAE,CACI,CAAC;QAET,sEAAsE;QACtE,yEAAyE;QACzE,wEAAwE;QACxE,+DAA+D;QAC/D,MAAM,MAAM,GAAG,MAAM,IAAA,wBAAU,EAAC;YAC9B,SAAS;YACT,eAAe;YACf,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC;SACjC,CAAC,CAAC;QAEH,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,UAAU,GAAG,IAAA,eAAI,EAAC,MAAM,CAAC,CAAC;QAChC,OAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;CACF;AAnDD,wDAmDC","sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport type { Hex } from '@metamask/utils';\nimport type BN from 'bn.js';\n\nimport { CHAIN_IDS } from '../constants.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport type { Layer1GasFeeFlowRequest, TransactionMeta } from '../types.js';\nimport { rpcRequest } from '../utils/provider.js';\nimport { toBN } from '../utils/utils.js';\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';\n\nconst MANTLE_CHAIN_IDS: Hex[] = [CHAIN_IDS.MANTLE, CHAIN_IDS.MANTLE_SEPOLIA];\n\nconst TOKEN_RATIO_ABI = [\n {\n inputs: [],\n name: 'tokenRatio',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\nconst TOKEN_RATIO_INTERFACE = new Interface(TOKEN_RATIO_ABI);\n\n/**\n * Mantle layer 1 gas fee flow.\n *\n * Mantle uses MNT as its native gas token, but the oracle's getL1Fee returns\n * values denominated in ETH. This subclass multiplies the L1 fee by the\n * tokenRatio (ETH/MNT exchange rate) from the oracle contract to convert\n * the fee to MNT.\n */\nexport class MantleLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n async matchesTransaction({\n transactionMeta,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean> {\n return MANTLE_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n protected override getOperatorFeeGas(\n transactionMeta: TransactionMeta,\n ): string | undefined {\n return (\n transactionMeta.gasUsed ??\n transactionMeta.txParams.gas ??\n transactionMeta.txParams.gasLimit\n );\n }\n\n protected override async transformOracleFee(\n oracleFee: BN,\n request: Layer1GasFeeFlowRequest,\n ): Promise<BN> {\n const { messenger, transactionMeta } = request;\n const { chainId, networkClientId } = transactionMeta;\n\n const to = this.getOracleAddressForChain(chainId);\n const data = TOKEN_RATIO_INTERFACE.encodeFunctionData(\n 'tokenRatio',\n [],\n ) as Hex;\n\n // Direct `eth_call` RPC request rather than an ethers `Contract` with\n // `Web3Provider`, whose `setTimeout`-based dispatch never fires on React\n // Native when the timer pump is starved (e.g. iOS display link freeze).\n // See https://github.com/MetaMask/metamask-mobile/issues/32863\n const result = await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_call',\n params: [{ to, data }, 'latest'],\n });\n\n if (typeof result !== 'string' || result === '0x') {\n throw new Error('No value returned from token ratio contract');\n }\n\n const tokenRatio = toBN(result);\n return oracleFee.mul(tokenRatio);\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import type BN from 'bn.js';
2
- import type { TransactionControllerMessenger } from '../TransactionController.js';
3
- import type { Layer1GasFeeFlowRequest, TransactionMeta } from '../types.js';
4
- import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';
1
+ import type BN from "bn.js";
2
+ import type { TransactionControllerMessenger } from "../TransactionController.cjs";
3
+ import type { Layer1GasFeeFlowRequest, TransactionMeta } from "../types.cjs";
4
+ import { OracleLayer1GasFeeFlow } from "./OracleLayer1GasFeeFlow.cjs";
5
5
  /**
6
6
  * Mantle layer 1 gas fee flow.
7
7
  *
@@ -18,4 +18,4 @@ export declare class MantleLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
18
18
  protected getOperatorFeeGas(transactionMeta: TransactionMeta): string | undefined;
19
19
  protected transformOracleFee(oracleFee: BN, request: Layer1GasFeeFlowRequest): Promise<BN>;
20
20
  }
21
- //# sourceMappingURL=MantleLayer1GasFeeFlow.d.ts.map
21
+ //# sourceMappingURL=MantleLayer1GasFeeFlow.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MantleLayer1GasFeeFlow.d.cts","sourceRoot":"","sources":["../../src/gas-flows/MantleLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc;AAG5B,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,qBAAoB;AAG5E,OAAO,EAAE,sBAAsB,EAAE,qCAAoC;AAsBrE;;;;;;;GAOG;AACH,qBAAa,sBAAuB,SAAQ,sBAAsB;IAC1D,kBAAkB,CAAC,EACvB,eAAe,GAChB,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;cAID,iBAAiB,CAClC,eAAe,EAAE,eAAe,GAC/B,MAAM,GAAG,SAAS;cAQI,kBAAkB,CACzC,SAAS,EAAE,EAAE,EACb,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,EAAE,CAAC;CA4Bf"}
@@ -0,0 +1,21 @@
1
+ import type BN from "bn.js";
2
+ import type { TransactionControllerMessenger } from "../TransactionController.mjs";
3
+ import type { Layer1GasFeeFlowRequest, TransactionMeta } from "../types.mjs";
4
+ import { OracleLayer1GasFeeFlow } from "./OracleLayer1GasFeeFlow.mjs";
5
+ /**
6
+ * Mantle layer 1 gas fee flow.
7
+ *
8
+ * Mantle uses MNT as its native gas token, but the oracle's getL1Fee returns
9
+ * values denominated in ETH. This subclass multiplies the L1 fee by the
10
+ * tokenRatio (ETH/MNT exchange rate) from the oracle contract to convert
11
+ * the fee to MNT.
12
+ */
13
+ export declare class MantleLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
14
+ matchesTransaction({ transactionMeta, }: {
15
+ transactionMeta: TransactionMeta;
16
+ messenger: TransactionControllerMessenger;
17
+ }): Promise<boolean>;
18
+ protected getOperatorFeeGas(transactionMeta: TransactionMeta): string | undefined;
19
+ protected transformOracleFee(oracleFee: BN, request: Layer1GasFeeFlowRequest): Promise<BN>;
20
+ }
21
+ //# sourceMappingURL=MantleLayer1GasFeeFlow.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MantleLayer1GasFeeFlow.d.mts","sourceRoot":"","sources":["../../src/gas-flows/MantleLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc;AAG5B,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,qBAAoB;AAG5E,OAAO,EAAE,sBAAsB,EAAE,qCAAoC;AAsBrE;;;;;;;GAOG;AACH,qBAAa,sBAAuB,SAAQ,sBAAsB;IAC1D,kBAAkB,CAAC,EACvB,eAAe,GAChB,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;cAID,iBAAiB,CAClC,eAAe,EAAE,eAAe,GAC/B,MAAM,GAAG,SAAS;cAQI,kBAAkB,CACzC,SAAS,EAAE,EAAE,EACb,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,EAAE,CAAC;CA4Bf"}
@@ -1,8 +1,8 @@
1
- import { Interface } from '@ethersproject/abi';
2
- import { CHAIN_IDS } from '../constants.js';
3
- import { rpcRequest } from '../utils/provider.js';
4
- import { toBN } from '../utils/utils.js';
5
- import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';
1
+ import { Interface } from "@ethersproject/abi";
2
+ import { CHAIN_IDS } from "../constants.mjs";
3
+ import { rpcRequest } from "../utils/provider.mjs";
4
+ import { toBN } from "../utils/utils.mjs";
5
+ import { OracleLayer1GasFeeFlow } from "./OracleLayer1GasFeeFlow.mjs";
6
6
  const MANTLE_CHAIN_IDS = [CHAIN_IDS.MANTLE, CHAIN_IDS.MANTLE_SEPOLIA];
7
7
  const TOKEN_RATIO_ABI = [
8
8
  {
@@ -59,4 +59,4 @@ export class MantleLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
59
59
  return oracleFee.mul(tokenRatio);
60
60
  }
61
61
  }
62
- //# sourceMappingURL=MantleLayer1GasFeeFlow.js.map
62
+ //# sourceMappingURL=MantleLayer1GasFeeFlow.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MantleLayer1GasFeeFlow.mjs","sourceRoot":"","sources":["../../src/gas-flows/MantleLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,2BAA2B;AAI/C,OAAO,EAAE,SAAS,EAAE,yBAAwB;AAG5C,OAAO,EAAE,UAAU,EAAE,8BAA6B;AAClD,OAAO,EAAE,IAAI,EAAE,2BAA0B;AACzC,OAAO,EAAE,sBAAsB,EAAE,qCAAoC;AAErE,MAAM,gBAAgB,GAAU,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;AAE7E,MAAM,eAAe,GAAG;IACtB;QACE,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE;YACP;gBACE,YAAY,EAAE,SAAS;gBACvB,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,SAAS;aAChB;SACF;QACD,eAAe,EAAE,MAAM;QACvB,IAAI,EAAE,UAAU;KACjB;CACF,CAAC;AAEF,MAAM,qBAAqB,GAAG,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,OAAO,sBAAuB,SAAQ,sBAAsB;IAChE,KAAK,CAAC,kBAAkB,CAAC,EACvB,eAAe,GAIhB;QACC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;IAEkB,iBAAiB,CAClC,eAAgC;QAEhC,OAAO,CACL,eAAe,CAAC,OAAO;YACvB,eAAe,CAAC,QAAQ,CAAC,GAAG;YAC5B,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAClC,CAAC;IACJ,CAAC;IAEkB,KAAK,CAAC,kBAAkB,CACzC,SAAa,EACb,OAAgC;QAEhC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;QAC/C,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,eAAe,CAAC;QAErD,MAAM,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,IAAI,GAAG,qBAAqB,CAAC,kBAAkB,CACnD,YAAY,EACZ,EAAE,CACI,CAAC;QAET,sEAAsE;QACtE,yEAAyE;QACzE,wEAAwE;QACxE,+DAA+D;QAC/D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC;YAC9B,SAAS;YACT,eAAe;YACf,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,CAAC;SACjC,CAAC,CAAC;QAEH,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACnC,CAAC;CACF","sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport type { Hex } from '@metamask/utils';\nimport type BN from 'bn.js';\n\nimport { CHAIN_IDS } from '../constants.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport type { Layer1GasFeeFlowRequest, TransactionMeta } from '../types.js';\nimport { rpcRequest } from '../utils/provider.js';\nimport { toBN } from '../utils/utils.js';\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';\n\nconst MANTLE_CHAIN_IDS: Hex[] = [CHAIN_IDS.MANTLE, CHAIN_IDS.MANTLE_SEPOLIA];\n\nconst TOKEN_RATIO_ABI = [\n {\n inputs: [],\n name: 'tokenRatio',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\nconst TOKEN_RATIO_INTERFACE = new Interface(TOKEN_RATIO_ABI);\n\n/**\n * Mantle layer 1 gas fee flow.\n *\n * Mantle uses MNT as its native gas token, but the oracle's getL1Fee returns\n * values denominated in ETH. This subclass multiplies the L1 fee by the\n * tokenRatio (ETH/MNT exchange rate) from the oracle contract to convert\n * the fee to MNT.\n */\nexport class MantleLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n async matchesTransaction({\n transactionMeta,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean> {\n return MANTLE_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n protected override getOperatorFeeGas(\n transactionMeta: TransactionMeta,\n ): string | undefined {\n return (\n transactionMeta.gasUsed ??\n transactionMeta.txParams.gas ??\n transactionMeta.txParams.gasLimit\n );\n }\n\n protected override async transformOracleFee(\n oracleFee: BN,\n request: Layer1GasFeeFlowRequest,\n ): Promise<BN> {\n const { messenger, transactionMeta } = request;\n const { chainId, networkClientId } = transactionMeta;\n\n const to = this.getOracleAddressForChain(chainId);\n const data = TOKEN_RATIO_INTERFACE.encodeFunctionData(\n 'tokenRatio',\n [],\n ) as Hex;\n\n // Direct `eth_call` RPC request rather than an ethers `Contract` with\n // `Web3Provider`, whose `setTimeout`-based dispatch never fires on React\n // Native when the timer pump is starved (e.g. iOS display link freeze).\n // See https://github.com/MetaMask/metamask-mobile/issues/32863\n const result = await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_call',\n params: [{ to, data }, 'latest'],\n });\n\n if (typeof result !== 'string' || result === '0x') {\n throw new Error('No value returned from token ratio contract');\n }\n\n const tokenRatio = toBN(result);\n return oracleFee.mul(tokenRatio);\n }\n}\n"]}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var _OptimismLayer1GasFeeFlow_instances, _OptimismLayer1GasFeeFlow_fetchOptimismSupportedChains;
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.OptimismLayer1GasFeeFlow = void 0;
10
+ const controller_utils_1 = require("@metamask/controller-utils");
11
+ const utils_1 = require("@metamask/utils");
12
+ const constants_js_1 = require("../constants.cjs");
13
+ const OracleLayer1GasFeeFlow_js_1 = require("./OracleLayer1GasFeeFlow.cjs");
14
+ const FALLBACK_OPTIMISM_STACK_CHAIN_IDS = [
15
+ constants_js_1.CHAIN_IDS.OPTIMISM,
16
+ constants_js_1.CHAIN_IDS.OPTIMISM_TESTNET,
17
+ constants_js_1.CHAIN_IDS.BASE,
18
+ constants_js_1.CHAIN_IDS.BASE_TESTNET,
19
+ constants_js_1.CHAIN_IDS.OPBNB,
20
+ constants_js_1.CHAIN_IDS.OPBNB_TESTNET,
21
+ constants_js_1.CHAIN_IDS.ZORA,
22
+ ];
23
+ const GAS_SUPPORTED_NETWORKS_ENDPOINT = 'https://gas.api.cx.metamask.io/v1/supportedNetworks';
24
+ /**
25
+ * Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
26
+ */
27
+ class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow_js_1.OracleLayer1GasFeeFlow {
28
+ constructor() {
29
+ super(...arguments);
30
+ _OptimismLayer1GasFeeFlow_instances.add(this);
31
+ }
32
+ async matchesTransaction({ transactionMeta, }) {
33
+ const chainIdAsNumber = (0, utils_1.hexToNumber)(transactionMeta.chainId);
34
+ const supportedChains = await __classPrivateFieldGet(this, _OptimismLayer1GasFeeFlow_instances, "m", _OptimismLayer1GasFeeFlow_fetchOptimismSupportedChains).call(this);
35
+ if (supportedChains?.has(chainIdAsNumber)) {
36
+ return true;
37
+ }
38
+ return FALLBACK_OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);
39
+ }
40
+ }
41
+ exports.OptimismLayer1GasFeeFlow = OptimismLayer1GasFeeFlow;
42
+ _OptimismLayer1GasFeeFlow_instances = new WeakSet(), _OptimismLayer1GasFeeFlow_fetchOptimismSupportedChains =
43
+ // Uses default oracle address from base class
44
+ /**
45
+ * Fetch remote OP-stack support list; fall back to local list when unavailable.
46
+ *
47
+ * @returns A set of supported OP-stack chain IDs or null on failure.
48
+ */
49
+ async function _OptimismLayer1GasFeeFlow_fetchOptimismSupportedChains() {
50
+ try {
51
+ const res = await (0, controller_utils_1.handleFetch)(GAS_SUPPORTED_NETWORKS_ENDPOINT);
52
+ const list = res?.partialSupport?.optimism ?? [];
53
+ return new Set(list);
54
+ }
55
+ catch {
56
+ return null;
57
+ }
58
+ };
59
+ //# sourceMappingURL=OptimismLayer1GasFeeFlow.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptimismLayer1GasFeeFlow.cjs","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;;;;;;;AAAA,iEAAyD;AACzD,2CAA8C;AAG9C,mDAA4C;AAG5C,4EAAqE;AAErE,MAAM,iCAAiC,GAAU;IAC/C,wBAAS,CAAC,QAAQ;IAClB,wBAAS,CAAC,gBAAgB;IAC1B,wBAAS,CAAC,IAAI;IACd,wBAAS,CAAC,YAAY;IACtB,wBAAS,CAAC,KAAK;IACf,wBAAS,CAAC,aAAa;IACvB,wBAAS,CAAC,IAAI;CACf,CAAC;AAWF,MAAM,+BAA+B,GACnC,qDAAqD,CAAC;AAExD;;GAEG;AACH,MAAa,wBAAyB,SAAQ,kDAAsB;IAApE;;;IAoCA,CAAC;IAnCC,KAAK,CAAC,kBAAkB,CAAC,EACvB,eAAe,GAIhB;QACC,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE7D,MAAM,eAAe,GAAG,MAAM,uBAAA,IAAI,mGAA8B,MAAlC,IAAI,CAAgC,CAAC;QAEnE,IAAI,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,iCAAiC,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;CAoBF;AApCD,4DAoCC;;AAlBC,8CAA8C;AAE9C;;;;GAIG;AACH,KAAK;IACH,IAAI,CAAC;QACH,MAAM,GAAG,GAA8B,MAAM,IAAA,8BAAW,EACtD,+BAA+B,CAChC,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,EAAE,cAAc,EAAE,QAAQ,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,GAAG,CAAS,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\nimport { hexToNumber } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from '../constants.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport type { TransactionMeta } from '../types.js';\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';\n\nconst FALLBACK_OPTIMISM_STACK_CHAIN_IDS: Hex[] = [\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.OPTIMISM_TESTNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.BASE_TESTNET,\n CHAIN_IDS.OPBNB,\n CHAIN_IDS.OPBNB_TESTNET,\n CHAIN_IDS.ZORA,\n];\n\n// Default oracle address now provided by base class\n\ntype SupportedNetworksResponse = {\n readonly fullSupport: readonly number[];\n readonly partialSupport: {\n readonly optimism: readonly number[];\n };\n};\n\nconst GAS_SUPPORTED_NETWORKS_ENDPOINT =\n 'https://gas.api.cx.metamask.io/v1/supportedNetworks';\n\n/**\n * Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.\n */\nexport class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n async matchesTransaction({\n transactionMeta,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean> {\n const chainIdAsNumber = hexToNumber(transactionMeta.chainId);\n\n const supportedChains = await this.#fetchOptimismSupportedChains();\n\n if (supportedChains?.has(chainIdAsNumber)) {\n return true;\n }\n\n return FALLBACK_OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n // Uses default oracle address from base class\n\n /**\n * Fetch remote OP-stack support list; fall back to local list when unavailable.\n *\n * @returns A set of supported OP-stack chain IDs or null on failure.\n */\n async #fetchOptimismSupportedChains(): Promise<Set<number> | null> {\n try {\n const res: SupportedNetworksResponse = await handleFetch(\n GAS_SUPPORTED_NETWORKS_ENDPOINT,\n );\n const list = res?.partialSupport?.optimism ?? [];\n return new Set<number>(list);\n } catch {\n return null;\n }\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import type { TransactionControllerMessenger } from '../TransactionController.js';
2
- import type { TransactionMeta } from '../types.js';
3
- import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';
1
+ import type { TransactionControllerMessenger } from "../TransactionController.cjs";
2
+ import type { TransactionMeta } from "../types.cjs";
3
+ import { OracleLayer1GasFeeFlow } from "./OracleLayer1GasFeeFlow.cjs";
4
4
  /**
5
5
  * Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
6
6
  */
@@ -11,4 +11,4 @@ export declare class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
11
11
  messenger: TransactionControllerMessenger;
12
12
  }): Promise<boolean>;
13
13
  }
14
- //# sourceMappingURL=OptimismLayer1GasFeeFlow.d.ts.map
14
+ //# sourceMappingURL=OptimismLayer1GasFeeFlow.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptimismLayer1GasFeeFlow.d.cts","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAoB;AACnD,OAAO,EAAE,sBAAsB,EAAE,qCAAoC;AAwBrE;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,sBAAsB;;IAC5D,kBAAkB,CAAC,EACvB,eAAe,GAChB,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;CA8BrB"}
@@ -0,0 +1,14 @@
1
+ import type { TransactionControllerMessenger } from "../TransactionController.mjs";
2
+ import type { TransactionMeta } from "../types.mjs";
3
+ import { OracleLayer1GasFeeFlow } from "./OracleLayer1GasFeeFlow.mjs";
4
+ /**
5
+ * Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
6
+ */
7
+ export declare class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
8
+ #private;
9
+ matchesTransaction({ transactionMeta, }: {
10
+ transactionMeta: TransactionMeta;
11
+ messenger: TransactionControllerMessenger;
12
+ }): Promise<boolean>;
13
+ }
14
+ //# sourceMappingURL=OptimismLayer1GasFeeFlow.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptimismLayer1GasFeeFlow.d.mts","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAoB;AACnD,OAAO,EAAE,sBAAsB,EAAE,qCAAoC;AAwBrE;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,sBAAsB;;IAC5D,kBAAkB,CAAC,EACvB,eAAe,GAChB,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;CA8BrB"}
@@ -4,10 +4,10 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
4
4
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
5
5
  };
6
6
  var _OptimismLayer1GasFeeFlow_instances, _OptimismLayer1GasFeeFlow_fetchOptimismSupportedChains;
7
- import { handleFetch } from '@metamask/controller-utils';
8
- import { hexToNumber } from '@metamask/utils';
9
- import { CHAIN_IDS } from '../constants.js';
10
- import { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';
7
+ import { handleFetch } from "@metamask/controller-utils";
8
+ import { hexToNumber } from "@metamask/utils";
9
+ import { CHAIN_IDS } from "../constants.mjs";
10
+ import { OracleLayer1GasFeeFlow } from "./OracleLayer1GasFeeFlow.mjs";
11
11
  const FALLBACK_OPTIMISM_STACK_CHAIN_IDS = [
12
12
  CHAIN_IDS.OPTIMISM,
13
13
  CHAIN_IDS.OPTIMISM_TESTNET,
@@ -52,4 +52,4 @@ async function _OptimismLayer1GasFeeFlow_fetchOptimismSupportedChains() {
52
52
  return null;
53
53
  }
54
54
  };
55
- //# sourceMappingURL=OptimismLayer1GasFeeFlow.js.map
55
+ //# sourceMappingURL=OptimismLayer1GasFeeFlow.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OptimismLayer1GasFeeFlow.mjs","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,mCAAmC;AACzD,OAAO,EAAE,WAAW,EAAE,wBAAwB;AAG9C,OAAO,EAAE,SAAS,EAAE,yBAAwB;AAG5C,OAAO,EAAE,sBAAsB,EAAE,qCAAoC;AAErE,MAAM,iCAAiC,GAAU;IAC/C,SAAS,CAAC,QAAQ;IAClB,SAAS,CAAC,gBAAgB;IAC1B,SAAS,CAAC,IAAI;IACd,SAAS,CAAC,YAAY;IACtB,SAAS,CAAC,KAAK;IACf,SAAS,CAAC,aAAa;IACvB,SAAS,CAAC,IAAI;CACf,CAAC;AAWF,MAAM,+BAA+B,GACnC,qDAAqD,CAAC;AAExD;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,sBAAsB;IAApE;;;IAoCA,CAAC;IAnCC,KAAK,CAAC,kBAAkB,CAAC,EACvB,eAAe,GAIhB;QACC,MAAM,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE7D,MAAM,eAAe,GAAG,MAAM,uBAAA,IAAI,mGAA8B,MAAlC,IAAI,CAAgC,CAAC;QAEnE,IAAI,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,iCAAiC,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;CAoBF;;AAlBC,8CAA8C;AAE9C;;;;GAIG;AACH,KAAK;IACH,IAAI,CAAC;QACH,MAAM,GAAG,GAA8B,MAAM,WAAW,CACtD,+BAA+B,CAChC,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,EAAE,cAAc,EAAE,QAAQ,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,GAAG,CAAS,IAAI,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\nimport { hexToNumber } from '@metamask/utils';\nimport type { Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from '../constants.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport type { TransactionMeta } from '../types.js';\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow.js';\n\nconst FALLBACK_OPTIMISM_STACK_CHAIN_IDS: Hex[] = [\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.OPTIMISM_TESTNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.BASE_TESTNET,\n CHAIN_IDS.OPBNB,\n CHAIN_IDS.OPBNB_TESTNET,\n CHAIN_IDS.ZORA,\n];\n\n// Default oracle address now provided by base class\n\ntype SupportedNetworksResponse = {\n readonly fullSupport: readonly number[];\n readonly partialSupport: {\n readonly optimism: readonly number[];\n };\n};\n\nconst GAS_SUPPORTED_NETWORKS_ENDPOINT =\n 'https://gas.api.cx.metamask.io/v1/supportedNetworks';\n\n/**\n * Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.\n */\nexport class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n async matchesTransaction({\n transactionMeta,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean> {\n const chainIdAsNumber = hexToNumber(transactionMeta.chainId);\n\n const supportedChains = await this.#fetchOptimismSupportedChains();\n\n if (supportedChains?.has(chainIdAsNumber)) {\n return true;\n }\n\n return FALLBACK_OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n // Uses default oracle address from base class\n\n /**\n * Fetch remote OP-stack support list; fall back to local list when unavailable.\n *\n * @returns A set of supported OP-stack chain IDs or null on failure.\n */\n async #fetchOptimismSupportedChains(): Promise<Set<number> | null> {\n try {\n const res: SupportedNetworksResponse = await handleFetch(\n GAS_SUPPORTED_NETWORKS_ENDPOINT,\n );\n const list = res?.partialSupport?.optimism ?? [];\n return new Set<number>(list);\n } catch {\n return null;\n }\n }\n}\n"]}
@@ -0,0 +1,201 @@
1
+ "use strict";
2
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
3
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
4
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
5
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
6
+ };
7
+ var __importDefault = (this && this.__importDefault) || function (mod) {
8
+ return (mod && mod.__esModule) ? mod : { "default": mod };
9
+ };
10
+ var _OracleLayer1GasFeeFlow_instances, _OracleLayer1GasFeeFlow_getOracleLayer1GasFee, _OracleLayer1GasFeeFlow_getOperatorLayer1GasFee, _OracleLayer1GasFeeFlow_buildUnserializedTransaction, _OracleLayer1GasFeeFlow_buildTransactionParams, _OracleLayer1GasFeeFlow_callGasPriceOracle;
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.OracleLayer1GasFeeFlow = void 0;
13
+ const abi_1 = require("@ethersproject/abi");
14
+ const utils_1 = require("@metamask/utils");
15
+ const bn_js_1 = __importDefault(require("bn.js"));
16
+ const logger_js_1 = require("../logger.cjs");
17
+ const prepare_js_1 = require("../utils/prepare.cjs");
18
+ const provider_js_1 = require("../utils/provider.cjs");
19
+ const utils_js_1 = require("../utils/utils.cjs");
20
+ const log = (0, utils_1.createModuleLogger)(logger_js_1.projectLogger, 'oracle-layer1-gas-fee-flow');
21
+ const ZERO = new bn_js_1.default(0);
22
+ const DUMMY_KEY = 'abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789';
23
+ const GAS_PRICE_ORACLE_ABI = [
24
+ {
25
+ inputs: [
26
+ {
27
+ internalType: 'bytes',
28
+ name: '_data',
29
+ type: 'bytes',
30
+ },
31
+ ],
32
+ name: 'getL1Fee',
33
+ outputs: [
34
+ {
35
+ internalType: 'uint256',
36
+ name: '',
37
+ type: 'uint256',
38
+ },
39
+ ],
40
+ stateMutability: 'view',
41
+ type: 'function',
42
+ },
43
+ // only available post Isthmus
44
+ {
45
+ inputs: [
46
+ {
47
+ internalType: 'uint256',
48
+ name: '_gasUsed',
49
+ type: 'uint256',
50
+ },
51
+ ],
52
+ name: 'getOperatorFee',
53
+ outputs: [
54
+ {
55
+ internalType: 'uint256',
56
+ name: '',
57
+ type: 'uint256',
58
+ },
59
+ ],
60
+ stateMutability: 'view',
61
+ type: 'function',
62
+ },
63
+ ];
64
+ // Default OP Stack gas price oracle address used across supported networks
65
+ const DEFAULT_GAS_PRICE_ORACLE_ADDRESS = '0x420000000000000000000000000000000000000F';
66
+ const GAS_PRICE_ORACLE_INTERFACE = new abi_1.Interface(GAS_PRICE_ORACLE_ABI);
67
+ /**
68
+ * Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.
69
+ */
70
+ class OracleLayer1GasFeeFlow {
71
+ constructor() {
72
+ _OracleLayer1GasFeeFlow_instances.add(this);
73
+ }
74
+ /**
75
+ * Resolves the oracle address for the given chain. Subclasses can override
76
+ * this method to provide chain-specific oracle addresses. By default, this
77
+ * returns the standard OP Stack gas price oracle address.
78
+ *
79
+ * @param _chainId - The chain ID to resolve the oracle address for.
80
+ * @returns The oracle address for the given chain.
81
+ */
82
+ getOracleAddressForChain(_chainId) {
83
+ return DEFAULT_GAS_PRICE_ORACLE_ADDRESS;
84
+ }
85
+ /**
86
+ * Whether to sign the transaction with a dummy key prior to calling the
87
+ * oracle contract. Some oracle contracts require a signed payload even for
88
+ * read-only methods.
89
+ *
90
+ * Subclasses can override to enable signing when needed. Defaults to false.
91
+ *
92
+ * @returns Whether the transaction should be signed prior to the oracle call.
93
+ */
94
+ shouldSignTransaction() {
95
+ return false;
96
+ }
97
+ /**
98
+ * Transforms the raw oracle L1 fee before it is combined with the operator
99
+ * fee. Subclasses can override this to apply chain-specific conversions
100
+ * (e.g. currency conversion via an on-chain exchange rate).
101
+ *
102
+ * Defaults to returning the fee unchanged.
103
+ *
104
+ * @param oracleFee - The raw L1 fee returned by the oracle contract.
105
+ * @param _request - The original fee flow request (messenger + transaction).
106
+ * @returns The transformed fee.
107
+ */
108
+ async transformOracleFee(oracleFee, _request) {
109
+ return oracleFee;
110
+ }
111
+ async getLayer1Fee(request) {
112
+ try {
113
+ const oracleFee = await __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_getOracleLayer1GasFee).call(this, request);
114
+ const transformedFee = await this.transformOracleFee(oracleFee, request);
115
+ const operatorFee = await __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_getOperatorLayer1GasFee).call(this, request);
116
+ return {
117
+ layer1Fee: (0, utils_1.add0x)((0, utils_js_1.padHexToEvenLength)(transformedFee.add(operatorFee).toString(16))),
118
+ };
119
+ }
120
+ catch (error) {
121
+ log('Failed to get oracle layer 1 gas fee', error);
122
+ throw new Error(`Failed to get oracle layer 1 gas fee`);
123
+ }
124
+ }
125
+ /**
126
+ * Returns the gas value to pass to the operator-fee oracle, or undefined
127
+ * to skip the operator-fee call entirely. Defaults to the simulated
128
+ * `gasUsed` on the transaction. Subclasses can override to supply a
129
+ * fallback (e.g. estimated gas limit) when `gasUsed` is unavailable.
130
+ *
131
+ * @param transactionMeta - The transaction metadata.
132
+ * @returns The gas value, or undefined to skip the operator-fee call.
133
+ */
134
+ getOperatorFeeGas(transactionMeta) {
135
+ return transactionMeta.gasUsed;
136
+ }
137
+ }
138
+ exports.OracleLayer1GasFeeFlow = OracleLayer1GasFeeFlow;
139
+ _OracleLayer1GasFeeFlow_instances = new WeakSet(), _OracleLayer1GasFeeFlow_getOracleLayer1GasFee = async function _OracleLayer1GasFeeFlow_getOracleLayer1GasFee(request) {
140
+ const serializedTransaction = __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_buildUnserializedTransaction).call(this, request.transactionMeta, this.shouldSignTransaction()).serialize();
141
+ const result = await __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_callGasPriceOracle).call(this, request, 'getL1Fee', [
142
+ serializedTransaction,
143
+ ]);
144
+ if (typeof result !== 'string' || result === '0x') {
145
+ throw new Error('No value returned from oracle contract');
146
+ }
147
+ return (0, utils_js_1.toBN)(result);
148
+ }, _OracleLayer1GasFeeFlow_getOperatorLayer1GasFee = async function _OracleLayer1GasFeeFlow_getOperatorLayer1GasFee(request) {
149
+ const gas = this.getOperatorFeeGas(request.transactionMeta);
150
+ if (!gas) {
151
+ return ZERO;
152
+ }
153
+ try {
154
+ const result = await __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_callGasPriceOracle).call(this, request, 'getOperatorFee', [
155
+ gas,
156
+ ]);
157
+ if (typeof result !== 'string' || result === '0x') {
158
+ return ZERO;
159
+ }
160
+ return (0, utils_js_1.toBN)(result);
161
+ }
162
+ catch (error) {
163
+ log('Failed to get operator layer 1 gas fee', error);
164
+ return ZERO;
165
+ }
166
+ }, _OracleLayer1GasFeeFlow_buildUnserializedTransaction = function _OracleLayer1GasFeeFlow_buildUnserializedTransaction(transactionMeta, sign) {
167
+ const txParams = __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_buildTransactionParams).call(this, transactionMeta);
168
+ const { chainId } = transactionMeta;
169
+ let unserializedTransaction = (0, prepare_js_1.prepareTransaction)(chainId, txParams);
170
+ if (sign) {
171
+ // eslint-disable-next-line no-restricted-globals
172
+ const keyBuffer = Buffer.from(DUMMY_KEY, 'hex');
173
+ const keyBytes = Uint8Array.from(keyBuffer);
174
+ unserializedTransaction = unserializedTransaction.sign(keyBytes);
175
+ }
176
+ return unserializedTransaction;
177
+ }, _OracleLayer1GasFeeFlow_buildTransactionParams = function _OracleLayer1GasFeeFlow_buildTransactionParams(transactionMeta) {
178
+ return {
179
+ ...transactionMeta.txParams,
180
+ gasLimit: transactionMeta.txParams.gas,
181
+ };
182
+ }, _OracleLayer1GasFeeFlow_callGasPriceOracle =
183
+ // The oracle is called via a direct `eth_call` RPC request rather than an
184
+ // ethers `Contract` with `Web3Provider`, as `Web3Provider` schedules its
185
+ // JSON-RPC dispatch with `setTimeout`, which never fires on React Native
186
+ // when the timer pump is starved (e.g. iOS display link freeze), blocking
187
+ // `addTransaction` indefinitely.
188
+ // See https://github.com/MetaMask/metamask-mobile/issues/32863
189
+ async function _OracleLayer1GasFeeFlow_callGasPriceOracle(request, functionName, args) {
190
+ const { messenger, transactionMeta } = request;
191
+ const { chainId, networkClientId } = transactionMeta;
192
+ const to = this.getOracleAddressForChain(chainId);
193
+ const data = GAS_PRICE_ORACLE_INTERFACE.encodeFunctionData(functionName, args);
194
+ return await (0, provider_js_1.rpcRequest)({
195
+ messenger,
196
+ networkClientId,
197
+ method: 'eth_call',
198
+ params: [{ to, data }, 'latest'],
199
+ });
200
+ };
201
+ //# sourceMappingURL=OracleLayer1GasFeeFlow.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OracleLayer1GasFeeFlow.cjs","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"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","sourcesContent":["import { Interface } from '@ethersproject/abi';\nimport type { Hex } from '@metamask/utils';\nimport { add0x, createModuleLogger } from '@metamask/utils';\nimport BN from 'bn.js';\n\nimport { projectLogger } from '../logger.js';\nimport type { TransactionControllerMessenger } from '../TransactionController.js';\nimport type {\n Layer1GasFeeFlow,\n Layer1GasFeeFlowRequest,\n Layer1GasFeeFlowResponse,\n TransactionMeta,\n} from '../types.js';\nimport { prepareTransaction } from '../utils/prepare.js';\nimport { rpcRequest } from '../utils/provider.js';\nimport { padHexToEvenLength, toBN } from '../utils/utils.js';\n\nconst log = createModuleLogger(projectLogger, 'oracle-layer1-gas-fee-flow');\n\nconst ZERO = new BN(0);\n\nconst DUMMY_KEY =\n 'abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789';\n\nconst GAS_PRICE_ORACLE_ABI = [\n {\n inputs: [\n {\n internalType: 'bytes',\n name: '_data',\n type: 'bytes',\n },\n ],\n name: 'getL1Fee',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n // only available post Isthmus\n {\n inputs: [\n {\n internalType: 'uint256',\n name: '_gasUsed',\n type: 'uint256',\n },\n ],\n name: 'getOperatorFee',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\n// Default OP Stack gas price oracle address used across supported networks\nconst DEFAULT_GAS_PRICE_ORACLE_ADDRESS =\n '0x420000000000000000000000000000000000000F' as Hex;\n\nconst GAS_PRICE_ORACLE_INTERFACE = new Interface(GAS_PRICE_ORACLE_ABI);\n\n/**\n * Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.\n */\nexport abstract class OracleLayer1GasFeeFlow implements Layer1GasFeeFlow {\n /**\n * Resolves the oracle address for the given chain. Subclasses can override\n * this method to provide chain-specific oracle addresses. By default, this\n * returns the standard OP Stack gas price oracle address.\n *\n * @param _chainId - The chain ID to resolve the oracle address for.\n * @returns The oracle address for the given chain.\n */\n protected getOracleAddressForChain(_chainId: Hex): Hex {\n return DEFAULT_GAS_PRICE_ORACLE_ADDRESS;\n }\n\n /**\n * Whether to sign the transaction with a dummy key prior to calling the\n * oracle contract. Some oracle contracts require a signed payload even for\n * read-only methods.\n *\n * Subclasses can override to enable signing when needed. Defaults to false.\n *\n * @returns Whether the transaction should be signed prior to the oracle call.\n */\n protected shouldSignTransaction(): boolean {\n return false;\n }\n\n abstract matchesTransaction({\n transactionMeta,\n messenger,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean>;\n\n /**\n * Transforms the raw oracle L1 fee before it is combined with the operator\n * fee. Subclasses can override this to apply chain-specific conversions\n * (e.g. currency conversion via an on-chain exchange rate).\n *\n * Defaults to returning the fee unchanged.\n *\n * @param oracleFee - The raw L1 fee returned by the oracle contract.\n * @param _request - The original fee flow request (messenger + transaction).\n * @returns The transformed fee.\n */\n protected async transformOracleFee(\n oracleFee: BN,\n _request: Layer1GasFeeFlowRequest,\n ): Promise<BN> {\n return oracleFee;\n }\n\n async getLayer1Fee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<Layer1GasFeeFlowResponse> {\n try {\n const oracleFee = await this.#getOracleLayer1GasFee(request);\n const transformedFee = await this.transformOracleFee(oracleFee, request);\n const operatorFee = await this.#getOperatorLayer1GasFee(request);\n\n return {\n layer1Fee: add0x(\n padHexToEvenLength(transformedFee.add(operatorFee).toString(16)),\n ),\n };\n } catch (error) {\n log('Failed to get oracle layer 1 gas fee', error);\n throw new Error(`Failed to get oracle layer 1 gas fee`);\n }\n }\n\n async #getOracleLayer1GasFee(request: Layer1GasFeeFlowRequest): Promise<BN> {\n const serializedTransaction = this.#buildUnserializedTransaction(\n request.transactionMeta,\n this.shouldSignTransaction(),\n ).serialize();\n\n const result = await this.#callGasPriceOracle(request, 'getL1Fee', [\n serializedTransaction,\n ]);\n\n if (typeof result !== 'string' || result === '0x') {\n throw new Error('No value returned from oracle contract');\n }\n\n return toBN(result);\n }\n\n /**\n * Returns the gas value to pass to the operator-fee oracle, or undefined\n * to skip the operator-fee call entirely. Defaults to the simulated\n * `gasUsed` on the transaction. Subclasses can override to supply a\n * fallback (e.g. estimated gas limit) when `gasUsed` is unavailable.\n *\n * @param transactionMeta - The transaction metadata.\n * @returns The gas value, or undefined to skip the operator-fee call.\n */\n protected getOperatorFeeGas(\n transactionMeta: TransactionMeta,\n ): string | undefined {\n return transactionMeta.gasUsed;\n }\n\n async #getOperatorLayer1GasFee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<BN> {\n const gas = this.getOperatorFeeGas(request.transactionMeta);\n\n if (!gas) {\n return ZERO;\n }\n\n try {\n const result = await this.#callGasPriceOracle(request, 'getOperatorFee', [\n gas,\n ]);\n\n if (typeof result !== 'string' || result === '0x') {\n return ZERO;\n }\n\n return toBN(result);\n } catch (error) {\n log('Failed to get operator layer 1 gas fee', error);\n return ZERO;\n }\n }\n\n #buildUnserializedTransaction(\n transactionMeta: TransactionMeta,\n sign: boolean,\n ): ReturnType<typeof prepareTransaction> {\n const txParams = this.#buildTransactionParams(transactionMeta);\n const { chainId } = transactionMeta;\n\n let unserializedTransaction = prepareTransaction(chainId, txParams);\n\n if (sign) {\n // eslint-disable-next-line no-restricted-globals\n const keyBuffer = Buffer.from(DUMMY_KEY, 'hex');\n const keyBytes = Uint8Array.from(keyBuffer);\n unserializedTransaction = unserializedTransaction.sign(keyBytes);\n }\n\n return unserializedTransaction;\n }\n\n #buildTransactionParams(\n transactionMeta: TransactionMeta,\n ): TransactionMeta['txParams'] {\n return {\n ...transactionMeta.txParams,\n gasLimit: transactionMeta.txParams.gas,\n };\n }\n\n // The oracle is called via a direct `eth_call` RPC request rather than an\n // ethers `Contract` with `Web3Provider`, as `Web3Provider` schedules its\n // JSON-RPC dispatch with `setTimeout`, which never fires on React Native\n // when the timer pump is starved (e.g. iOS display link freeze), blocking\n // `addTransaction` indefinitely.\n // See https://github.com/MetaMask/metamask-mobile/issues/32863\n async #callGasPriceOracle(\n request: Layer1GasFeeFlowRequest,\n functionName: string,\n args: readonly unknown[],\n ): Promise<unknown> {\n const { messenger, transactionMeta } = request;\n const { chainId, networkClientId } = transactionMeta;\n\n const to = this.getOracleAddressForChain(chainId);\n const data = GAS_PRICE_ORACLE_INTERFACE.encodeFunctionData(\n functionName,\n args,\n ) as Hex;\n\n return await rpcRequest({\n messenger,\n networkClientId,\n method: 'eth_call',\n params: [{ to, data }, 'latest'],\n });\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
- import type { Hex } from '@metamask/utils';
2
- import BN from 'bn.js';
3
- import type { TransactionControllerMessenger } from '../TransactionController.js';
4
- import type { Layer1GasFeeFlow, Layer1GasFeeFlowRequest, Layer1GasFeeFlowResponse, TransactionMeta } from '../types.js';
1
+ import type { Hex } from "@metamask/utils";
2
+ import BN from "bn.js";
3
+ import type { TransactionControllerMessenger } from "../TransactionController.cjs";
4
+ import type { Layer1GasFeeFlow, Layer1GasFeeFlowRequest, Layer1GasFeeFlowResponse, TransactionMeta } from "../types.cjs";
5
5
  /**
6
6
  * Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.
7
7
  */
@@ -54,4 +54,4 @@ export declare abstract class OracleLayer1GasFeeFlow implements Layer1GasFeeFlow
54
54
  */
55
55
  protected getOperatorFeeGas(transactionMeta: TransactionMeta): string | undefined;
56
56
  }
57
- //# sourceMappingURL=OracleLayer1GasFeeFlow.d.ts.map
57
+ //# sourceMappingURL=OracleLayer1GasFeeFlow.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OracleLayer1GasFeeFlow.d.cts","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,OAAO,EAAE,cAAc;AAGvB,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EAChB,qBAAoB;AA4DrB;;GAEG;AACH,8BAAsB,sBAAuB,YAAW,gBAAgB;;IACtE;;;;;;;OAOG;IACH,SAAS,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG;IAItD;;;;;;;;OAQG;IACH,SAAS,CAAC,qBAAqB,IAAI,OAAO;IAI1C,QAAQ,CAAC,kBAAkB,CAAC,EAC1B,eAAe,EACf,SAAS,GACV,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpB;;;;;;;;;;OAUG;cACa,kBAAkB,CAChC,SAAS,EAAE,EAAE,EACb,QAAQ,EAAE,uBAAuB,GAChC,OAAO,CAAC,EAAE,CAAC;IAIR,YAAY,CAChB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,wBAAwB,CAAC;IAkCpC;;;;;;;;OAQG;IACH,SAAS,CAAC,iBAAiB,CACzB,eAAe,EAAE,eAAe,GAC/B,MAAM,GAAG,SAAS;CAoFtB"}
@@ -0,0 +1,57 @@
1
+ import type { Hex } from "@metamask/utils";
2
+ import BN from "bn.js";
3
+ import type { TransactionControllerMessenger } from "../TransactionController.mjs";
4
+ import type { Layer1GasFeeFlow, Layer1GasFeeFlowRequest, Layer1GasFeeFlowResponse, TransactionMeta } from "../types.mjs";
5
+ /**
6
+ * Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.
7
+ */
8
+ export declare abstract class OracleLayer1GasFeeFlow implements Layer1GasFeeFlow {
9
+ #private;
10
+ /**
11
+ * Resolves the oracle address for the given chain. Subclasses can override
12
+ * this method to provide chain-specific oracle addresses. By default, this
13
+ * returns the standard OP Stack gas price oracle address.
14
+ *
15
+ * @param _chainId - The chain ID to resolve the oracle address for.
16
+ * @returns The oracle address for the given chain.
17
+ */
18
+ protected getOracleAddressForChain(_chainId: Hex): Hex;
19
+ /**
20
+ * Whether to sign the transaction with a dummy key prior to calling the
21
+ * oracle contract. Some oracle contracts require a signed payload even for
22
+ * read-only methods.
23
+ *
24
+ * Subclasses can override to enable signing when needed. Defaults to false.
25
+ *
26
+ * @returns Whether the transaction should be signed prior to the oracle call.
27
+ */
28
+ protected shouldSignTransaction(): boolean;
29
+ abstract matchesTransaction({ transactionMeta, messenger, }: {
30
+ transactionMeta: TransactionMeta;
31
+ messenger: TransactionControllerMessenger;
32
+ }): Promise<boolean>;
33
+ /**
34
+ * Transforms the raw oracle L1 fee before it is combined with the operator
35
+ * fee. Subclasses can override this to apply chain-specific conversions
36
+ * (e.g. currency conversion via an on-chain exchange rate).
37
+ *
38
+ * Defaults to returning the fee unchanged.
39
+ *
40
+ * @param oracleFee - The raw L1 fee returned by the oracle contract.
41
+ * @param _request - The original fee flow request (messenger + transaction).
42
+ * @returns The transformed fee.
43
+ */
44
+ protected transformOracleFee(oracleFee: BN, _request: Layer1GasFeeFlowRequest): Promise<BN>;
45
+ getLayer1Fee(request: Layer1GasFeeFlowRequest): Promise<Layer1GasFeeFlowResponse>;
46
+ /**
47
+ * Returns the gas value to pass to the operator-fee oracle, or undefined
48
+ * to skip the operator-fee call entirely. Defaults to the simulated
49
+ * `gasUsed` on the transaction. Subclasses can override to supply a
50
+ * fallback (e.g. estimated gas limit) when `gasUsed` is unavailable.
51
+ *
52
+ * @param transactionMeta - The transaction metadata.
53
+ * @returns The gas value, or undefined to skip the operator-fee call.
54
+ */
55
+ protected getOperatorFeeGas(transactionMeta: TransactionMeta): string | undefined;
56
+ }
57
+ //# sourceMappingURL=OracleLayer1GasFeeFlow.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OracleLayer1GasFeeFlow.d.mts","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAE3C,OAAO,EAAE,cAAc;AAGvB,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAoC;AAClF,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EAChB,qBAAoB;AA4DrB;;GAEG;AACH,8BAAsB,sBAAuB,YAAW,gBAAgB;;IACtE;;;;;;;OAOG;IACH,SAAS,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG;IAItD;;;;;;;;OAQG;IACH,SAAS,CAAC,qBAAqB,IAAI,OAAO;IAI1C,QAAQ,CAAC,kBAAkB,CAAC,EAC1B,eAAe,EACf,SAAS,GACV,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpB;;;;;;;;;;OAUG;cACa,kBAAkB,CAChC,SAAS,EAAE,EAAE,EACb,QAAQ,EAAE,uBAAuB,GAChC,OAAO,CAAC,EAAE,CAAC;IAIR,YAAY,CAChB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,wBAAwB,CAAC;IAkCpC;;;;;;;;OAQG;IACH,SAAS,CAAC,iBAAiB,CACzB,eAAe,EAAE,eAAe,GAC/B,MAAM,GAAG,SAAS;CAoFtB"}