@metamask-previews/transaction-controller 25.1.0-preview-d4ae797 → 25.1.0-preview-da8ff5ef

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 (100) hide show
  1. package/dist/TransactionController.js +11 -11
  2. package/dist/TransactionController.mjs +10 -10
  3. package/dist/{chunk-O7H2MC7R.js → chunk-2MMWLJXS.js} +4 -4
  4. package/dist/{chunk-XOLEIJ4W.js → chunk-2MUK5JWA.js} +13 -8
  5. package/dist/chunk-2MUK5JWA.js.map +1 -0
  6. package/dist/{chunk-HXE4JCEK.mjs → chunk-3JYZDVNJ.mjs} +3 -3
  7. package/dist/{chunk-UXGKS6VI.mjs → chunk-6FF5JJVB.mjs} +5 -5
  8. package/dist/chunk-6FF5JJVB.mjs.map +1 -0
  9. package/dist/{chunk-2YXA3K67.mjs → chunk-6KYPLIXG.mjs} +2 -2
  10. package/dist/{chunk-NRWEI43Q.js → chunk-7C6ERJJC.js} +43 -18
  11. package/dist/chunk-7C6ERJJC.js.map +1 -0
  12. package/dist/{chunk-DTONMSFW.mjs → chunk-ARB3VRKV.mjs} +2 -2
  13. package/dist/{chunk-SJHACWAJ.js → chunk-CBKVKDFC.js} +5 -5
  14. package/dist/chunk-CBKVKDFC.js.map +1 -0
  15. package/dist/{chunk-WERIBZRG.mjs → chunk-DX4NUE4H.mjs} +4 -4
  16. package/dist/{chunk-WERIBZRG.mjs.map → chunk-DX4NUE4H.mjs.map} +1 -1
  17. package/dist/{chunk-KQTMDKO5.js → chunk-EXFVMWXE.js} +29 -17
  18. package/dist/chunk-EXFVMWXE.js.map +1 -0
  19. package/dist/{chunk-FPLIHYSA.js → chunk-GGFFYP6D.js} +7 -7
  20. package/dist/{chunk-KZBDAX2Z.js → chunk-GKCF2RYY.js} +5 -5
  21. package/dist/chunk-GKCF2RYY.js.map +1 -0
  22. package/dist/{chunk-ILCQ262Y.mjs → chunk-QQKWUHXX.mjs} +3 -3
  23. package/dist/{chunk-P57CVQWK.js → chunk-RBMBBUW3.js} +6 -6
  24. package/dist/{chunk-B7ODKZQR.mjs → chunk-SBZB2FLU.mjs} +22 -10
  25. package/dist/chunk-SBZB2FLU.mjs.map +1 -0
  26. package/dist/{chunk-W3GAOR7Y.js → chunk-TUW3M44L.js} +1 -1
  27. package/dist/chunk-TUW3M44L.js.map +1 -0
  28. package/dist/{chunk-QPNEFZB3.js → chunk-VHFPV3A3.js} +3 -3
  29. package/dist/{chunk-S2OXIMIM.mjs → chunk-WCJ7I43R.mjs} +11 -6
  30. package/dist/chunk-WCJ7I43R.mjs.map +1 -0
  31. package/dist/{chunk-NM4LTWRU.mjs → chunk-XOIPXDGX.mjs} +1 -1
  32. package/dist/chunk-XOIPXDGX.mjs.map +1 -0
  33. package/dist/{chunk-ZQFMTLZJ.mjs → chunk-Z6HYOGNR.mjs} +43 -18
  34. package/dist/chunk-Z6HYOGNR.mjs.map +1 -0
  35. package/dist/gas-flows/DefaultGasFeeFlow.js +5 -5
  36. package/dist/gas-flows/DefaultGasFeeFlow.mjs +4 -4
  37. package/dist/gas-flows/LineaGasFeeFlow.js +6 -6
  38. package/dist/gas-flows/LineaGasFeeFlow.mjs +5 -5
  39. package/dist/gas-flows/OptimismLayer1GasFeeFlow.js +3 -3
  40. package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs +2 -2
  41. package/dist/helpers/EtherscanRemoteTransactionSource.js +1 -1
  42. package/dist/helpers/EtherscanRemoteTransactionSource.mjs +1 -1
  43. package/dist/helpers/GasFeePoller.js +5 -5
  44. package/dist/helpers/GasFeePoller.mjs +4 -4
  45. package/dist/helpers/MultichainTrackingHelper.js +3 -3
  46. package/dist/helpers/MultichainTrackingHelper.mjs +2 -2
  47. package/dist/helpers/PendingTransactionTracker.js +1 -1
  48. package/dist/helpers/PendingTransactionTracker.mjs +1 -1
  49. package/dist/index.js +11 -11
  50. package/dist/index.mjs +10 -10
  51. package/dist/tsconfig.build.tsbuildinfo +1 -1
  52. package/dist/types/TransactionController.d.ts.map +1 -1
  53. package/dist/types/helpers/GasFeePoller.d.ts +4 -2
  54. package/dist/types/helpers/GasFeePoller.d.ts.map +1 -1
  55. package/dist/types/helpers/MultichainTrackingHelper.d.ts +4 -0
  56. package/dist/types/helpers/MultichainTrackingHelper.d.ts.map +1 -1
  57. package/dist/types/types.d.ts +3 -3
  58. package/dist/types/types.d.ts.map +1 -1
  59. package/dist/types/utils/layer1-gas-fee-flow.d.ts +2 -2
  60. package/dist/types/utils/layer1-gas-fee-flow.d.ts.map +1 -1
  61. package/dist/types.js +2 -2
  62. package/dist/types.mjs +1 -1
  63. package/dist/utils/external-transactions.js +1 -1
  64. package/dist/utils/external-transactions.mjs +1 -1
  65. package/dist/utils/gas-fees.js +4 -4
  66. package/dist/utils/gas-fees.mjs +3 -3
  67. package/dist/utils/gas-flow.js +3 -3
  68. package/dist/utils/gas-flow.mjs +2 -2
  69. package/dist/utils/layer1-gas-fee-flow.js +2 -2
  70. package/dist/utils/layer1-gas-fee-flow.mjs +1 -1
  71. package/dist/utils/simulation.js +1 -1
  72. package/dist/utils/simulation.mjs +1 -1
  73. package/dist/utils/swaps.js +1 -1
  74. package/dist/utils/swaps.mjs +1 -1
  75. package/dist/utils/transaction-type.js +1 -1
  76. package/dist/utils/transaction-type.mjs +1 -1
  77. package/dist/utils/utils.js +1 -1
  78. package/dist/utils/utils.mjs +1 -1
  79. package/dist/utils/validation.js +1 -1
  80. package/dist/utils/validation.mjs +1 -1
  81. package/package.json +1 -1
  82. package/dist/chunk-B7ODKZQR.mjs.map +0 -1
  83. package/dist/chunk-KQTMDKO5.js.map +0 -1
  84. package/dist/chunk-KZBDAX2Z.js.map +0 -1
  85. package/dist/chunk-NM4LTWRU.mjs.map +0 -1
  86. package/dist/chunk-NRWEI43Q.js.map +0 -1
  87. package/dist/chunk-S2OXIMIM.mjs.map +0 -1
  88. package/dist/chunk-SJHACWAJ.js.map +0 -1
  89. package/dist/chunk-UXGKS6VI.mjs.map +0 -1
  90. package/dist/chunk-W3GAOR7Y.js.map +0 -1
  91. package/dist/chunk-XOLEIJ4W.js.map +0 -1
  92. package/dist/chunk-ZQFMTLZJ.mjs.map +0 -1
  93. /package/dist/{chunk-O7H2MC7R.js.map → chunk-2MMWLJXS.js.map} +0 -0
  94. /package/dist/{chunk-HXE4JCEK.mjs.map → chunk-3JYZDVNJ.mjs.map} +0 -0
  95. /package/dist/{chunk-2YXA3K67.mjs.map → chunk-6KYPLIXG.mjs.map} +0 -0
  96. /package/dist/{chunk-DTONMSFW.mjs.map → chunk-ARB3VRKV.mjs.map} +0 -0
  97. /package/dist/{chunk-FPLIHYSA.js.map → chunk-GGFFYP6D.js.map} +0 -0
  98. /package/dist/{chunk-ILCQ262Y.mjs.map → chunk-QQKWUHXX.mjs.map} +0 -0
  99. /package/dist/{chunk-P57CVQWK.js.map → chunk-RBMBBUW3.js.map} +0 -0
  100. /package/dist/{chunk-QPNEFZB3.js.map → chunk-VHFPV3A3.js.map} +0 -0
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- var _chunkKQTMDKO5js = require('./chunk-KQTMDKO5.js');
7
+ var _chunkEXFVMWXEjs = require('./chunk-EXFVMWXE.js');
8
8
  require('./chunk-HS277C77.js');
9
9
  require('./chunk-VH47Q6TS.js');
10
10
  require('./chunk-RQKICZYP.js');
@@ -12,22 +12,22 @@ require('./chunk-QP75SWIQ.js');
12
12
  require('./chunk-ZNZEJDOE.js');
13
13
  require('./chunk-WXQZIUNW.js');
14
14
  require('./chunk-4S25HUCL.js');
15
- require('./chunk-XOLEIJ4W.js');
15
+ require('./chunk-2MUK5JWA.js');
16
16
  require('./chunk-DTDTOMTB.js');
17
- require('./chunk-NRWEI43Q.js');
17
+ require('./chunk-7C6ERJJC.js');
18
18
  require('./chunk-F3CMU2DM.js');
19
19
  require('./chunk-5XBULBP2.js');
20
20
  require('./chunk-CXXGL43K.js');
21
21
  require('./chunk-7LXE4KHV.js');
22
- require('./chunk-P57CVQWK.js');
23
- require('./chunk-FPLIHYSA.js');
24
- require('./chunk-QPNEFZB3.js');
22
+ require('./chunk-RBMBBUW3.js');
23
+ require('./chunk-GGFFYP6D.js');
24
+ require('./chunk-VHFPV3A3.js');
25
25
  require('./chunk-5OQ373JS.js');
26
26
  require('./chunk-UGFBA4GV.js');
27
- require('./chunk-O7H2MC7R.js');
28
- require('./chunk-W3GAOR7Y.js');
29
- require('./chunk-KZBDAX2Z.js');
30
- require('./chunk-SJHACWAJ.js');
27
+ require('./chunk-2MMWLJXS.js');
28
+ require('./chunk-TUW3M44L.js');
29
+ require('./chunk-GKCF2RYY.js');
30
+ require('./chunk-CBKVKDFC.js');
31
31
  require('./chunk-ITDY6AIZ.js');
32
32
  require('./chunk-S6VGOPUY.js');
33
33
  require('./chunk-Z4BLTVTB.js');
@@ -37,5 +37,5 @@ require('./chunk-Z4BLTVTB.js');
37
37
 
38
38
 
39
39
 
40
- exports.ApprovalState = _chunkKQTMDKO5js.ApprovalState; exports.CANCEL_RATE = _chunkKQTMDKO5js.CANCEL_RATE; exports.HARDFORK = _chunkKQTMDKO5js.HARDFORK; exports.SPEED_UP_RATE = _chunkKQTMDKO5js.SPEED_UP_RATE; exports.TransactionController = _chunkKQTMDKO5js.TransactionController;
40
+ exports.ApprovalState = _chunkEXFVMWXEjs.ApprovalState; exports.CANCEL_RATE = _chunkEXFVMWXEjs.CANCEL_RATE; exports.HARDFORK = _chunkEXFVMWXEjs.HARDFORK; exports.SPEED_UP_RATE = _chunkEXFVMWXEjs.SPEED_UP_RATE; exports.TransactionController = _chunkEXFVMWXEjs.TransactionController;
41
41
  //# sourceMappingURL=TransactionController.js.map
@@ -4,7 +4,7 @@ import {
4
4
  HARDFORK,
5
5
  SPEED_UP_RATE,
6
6
  TransactionController
7
- } from "./chunk-B7ODKZQR.mjs";
7
+ } from "./chunk-SBZB2FLU.mjs";
8
8
  import "./chunk-JRBREX22.mjs";
9
9
  import "./chunk-NM6OYEPP.mjs";
10
10
  import "./chunk-XKNFL657.mjs";
@@ -12,22 +12,22 @@ import "./chunk-XGRAHX6T.mjs";
12
12
  import "./chunk-NHRBO3LU.mjs";
13
13
  import "./chunk-QSBIXUMB.mjs";
14
14
  import "./chunk-7XPI7KU5.mjs";
15
- import "./chunk-S2OXIMIM.mjs";
15
+ import "./chunk-WCJ7I43R.mjs";
16
16
  import "./chunk-Y7ENNK7L.mjs";
17
- import "./chunk-ZQFMTLZJ.mjs";
17
+ import "./chunk-Z6HYOGNR.mjs";
18
18
  import "./chunk-IZI7FQIN.mjs";
19
19
  import "./chunk-JRQHIBG5.mjs";
20
20
  import "./chunk-VEREDMI2.mjs";
21
21
  import "./chunk-FRKQ3Z2L.mjs";
22
- import "./chunk-HXE4JCEK.mjs";
23
- import "./chunk-ILCQ262Y.mjs";
24
- import "./chunk-DTONMSFW.mjs";
22
+ import "./chunk-3JYZDVNJ.mjs";
23
+ import "./chunk-QQKWUHXX.mjs";
24
+ import "./chunk-ARB3VRKV.mjs";
25
25
  import "./chunk-3D3SA6PY.mjs";
26
26
  import "./chunk-J56A7UCK.mjs";
27
- import "./chunk-2YXA3K67.mjs";
28
- import "./chunk-NM4LTWRU.mjs";
29
- import "./chunk-WERIBZRG.mjs";
30
- import "./chunk-UXGKS6VI.mjs";
27
+ import "./chunk-6KYPLIXG.mjs";
28
+ import "./chunk-XOIPXDGX.mjs";
29
+ import "./chunk-DX4NUE4H.mjs";
30
+ import "./chunk-6FF5JJVB.mjs";
31
31
  import "./chunk-Z3HHSD5I.mjs";
32
32
  import "./chunk-UQQWZT6C.mjs";
33
33
  import "./chunk-XUI43LEZ.mjs";
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkW3GAOR7Yjs = require('./chunk-W3GAOR7Y.js');
3
+ var _chunkTUW3M44Ljs = require('./chunk-TUW3M44L.js');
4
4
 
5
5
  // src/utils/gas-flow.ts
6
6
  var _controllerutils = require('@metamask/controller-utils');
@@ -18,7 +18,7 @@ function mergeGasFeeEstimates({
18
18
  transactionGasFeeEstimates
19
19
  }) {
20
20
  if (gasFeeControllerEstimateType === _gasfeecontroller.GAS_ESTIMATE_TYPES.FEE_MARKET) {
21
- return Object.values(_chunkW3GAOR7Yjs.GasFeeEstimateLevel).reduce(
21
+ return Object.values(_chunkTUW3M44Ljs.GasFeeEstimateLevel).reduce(
22
22
  (result, level) => ({
23
23
  ...result,
24
24
  [level]: mergeFeeMarketEstimate(
@@ -30,7 +30,7 @@ function mergeGasFeeEstimates({
30
30
  );
31
31
  }
32
32
  if (gasFeeControllerEstimateType === _gasfeecontroller.GAS_ESTIMATE_TYPES.LEGACY) {
33
- return Object.values(_chunkW3GAOR7Yjs.GasFeeEstimateLevel).reduce(
33
+ return Object.values(_chunkTUW3M44Ljs.GasFeeEstimateLevel).reduce(
34
34
  (result, level) => ({
35
35
  ...result,
36
36
  [level]: getLegacyEstimate(transactionGasFeeEstimates[level])
@@ -59,4 +59,4 @@ function getLegacyEstimate(transactionGasFeeEstimate) {
59
59
 
60
60
 
61
61
  exports.getGasFeeFlow = getGasFeeFlow; exports.mergeGasFeeEstimates = mergeGasFeeEstimates;
62
- //# sourceMappingURL=chunk-O7H2MC7R.js.map
62
+ //# sourceMappingURL=chunk-2MMWLJXS.js.map
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
2
2
 
3
- var _chunkO7H2MC7Rjs = require('./chunk-O7H2MC7R.js');
3
+ var _chunk2MMWLJXSjs = require('./chunk-2MMWLJXS.js');
4
4
 
5
5
 
6
- var _chunkSJHACWAJjs = require('./chunk-SJHACWAJ.js');
6
+ var _chunkCBKVKDFCjs = require('./chunk-CBKVKDFC.js');
7
7
 
8
8
 
9
9
  var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js');
@@ -19,7 +19,7 @@ var _utils = require('@metamask/utils');
19
19
  var _events = require('events'); var _events2 = _interopRequireDefault(_events);
20
20
  var log = _utils.createModuleLogger.call(void 0, _chunkS6VGOPUYjs.projectLogger, "gas-fee-poller");
21
21
  var INTERVAL_MILLISECONDS = 1e4;
22
- var _gasFeeFlows, _getEthQuery, _getGasFeeControllerEstimates, _getTransactions, _layer1GasFeeFlows, _timeout, _running, _start, start_fn, _stop, stop_fn, _onTimeout, onTimeout_fn, _updateTransactionGasFeeEstimates, updateTransactionGasFeeEstimates_fn, _updateTransactionSuggestedFees, updateTransactionSuggestedFees_fn, _updateTransactionLayer1GasFee, updateTransactionLayer1GasFee_fn, _getUnapprovedTransactions, getUnapprovedTransactions_fn;
22
+ var _gasFeeFlows, _getEthQuery, _getGasFeeControllerEstimates, _getProvider, _getTransactions, _layer1GasFeeFlows, _timeout, _running, _start, start_fn, _stop, stop_fn, _onTimeout, onTimeout_fn, _updateTransactionGasFeeEstimates, updateTransactionGasFeeEstimates_fn, _updateTransactionSuggestedFees, updateTransactionSuggestedFees_fn, _updateTransactionLayer1GasFee, updateTransactionLayer1GasFee_fn, _getUnapprovedTransactions, getUnapprovedTransactions_fn;
23
23
  var GasFeePoller = class {
24
24
  /**
25
25
  * Constructs a new instance of the GasFeePoller.
@@ -27,6 +27,7 @@ var GasFeePoller = class {
27
27
  * @param options.gasFeeFlows - The gas fee flows to use to obtain suitable gas fees.
28
28
  * @param options.getEthQuery - Callback to obtain an EthQuery instance.
29
29
  * @param options.getGasFeeControllerEstimates - Callback to obtain the default fee estimates.
30
+ * @param options.getProvider - Callback to obtain a provider instance.
30
31
  * @param options.getTransactions - Callback to obtain the transaction data.
31
32
  * @param options.layer1GasFeeFlows - The layer 1 gas fee flows to use to obtain suitable layer 1 gas fees.
32
33
  * @param options.onStateChange - Callback to register a listener for controller state changes.
@@ -35,6 +36,7 @@ var GasFeePoller = class {
35
36
  gasFeeFlows,
36
37
  getEthQuery,
37
38
  getGasFeeControllerEstimates,
39
+ getProvider,
38
40
  getTransactions,
39
41
  layer1GasFeeFlows,
40
42
  onStateChange
@@ -50,6 +52,7 @@ var GasFeePoller = class {
50
52
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _gasFeeFlows, void 0);
51
53
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getEthQuery, void 0);
52
54
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getGasFeeControllerEstimates, void 0);
55
+ _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getProvider, void 0);
53
56
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getTransactions, void 0);
54
57
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _layer1GasFeeFlows, void 0);
55
58
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _timeout, void 0);
@@ -58,6 +61,7 @@ var GasFeePoller = class {
58
61
  _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _layer1GasFeeFlows, layer1GasFeeFlows);
59
62
  _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _getEthQuery, getEthQuery);
60
63
  _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _getGasFeeControllerEstimates, getGasFeeControllerEstimates);
64
+ _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _getProvider, getProvider);
61
65
  _chunkZ4BLTVTBjs.__privateSet.call(void 0, this, _getTransactions, getTransactions);
62
66
  onStateChange(() => {
63
67
  const unapprovedTransactions = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getUnapprovedTransactions, getUnapprovedTransactions_fn).call(this);
@@ -72,6 +76,7 @@ var GasFeePoller = class {
72
76
  _gasFeeFlows = new WeakMap();
73
77
  _getEthQuery = new WeakMap();
74
78
  _getGasFeeControllerEstimates = new WeakMap();
79
+ _getProvider = new WeakMap();
75
80
  _getTransactions = new WeakMap();
76
81
  _layer1GasFeeFlows = new WeakMap();
77
82
  _timeout = new WeakMap();
@@ -117,7 +122,7 @@ _updateTransactionSuggestedFees = new WeakSet();
117
122
  updateTransactionSuggestedFees_fn = async function(transactionMeta) {
118
123
  const { chainId, networkClientId } = transactionMeta;
119
124
  const ethQuery = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getEthQuery).call(this, chainId, networkClientId);
120
- const gasFeeFlow = _chunkO7H2MC7Rjs.getGasFeeFlow.call(void 0, transactionMeta, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _gasFeeFlows));
125
+ const gasFeeFlow = _chunk2MMWLJXSjs.getGasFeeFlow.call(void 0, transactionMeta, _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _gasFeeFlows));
121
126
  if (!gasFeeFlow) {
122
127
  log("No gas fee flow found", transactionMeta.id);
123
128
  } else {
@@ -158,9 +163,9 @@ updateTransactionSuggestedFees_fn = async function(transactionMeta) {
158
163
  _updateTransactionLayer1GasFee = new WeakSet();
159
164
  updateTransactionLayer1GasFee_fn = async function(transactionMeta) {
160
165
  const { chainId, networkClientId } = transactionMeta;
161
- const ethQuery = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getEthQuery).call(this, chainId, networkClientId);
162
- await _chunkSJHACWAJjs.updateTransactionLayer1GasFee.call(void 0, {
163
- ethQuery,
166
+ const provider = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getProvider).call(this, chainId, networkClientId);
167
+ await _chunkCBKVKDFCjs.updateTransactionLayer1GasFee.call(void 0, {
168
+ provider,
164
169
  layer1GasFeeFlows: _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _layer1GasFeeFlows),
165
170
  transactionMeta
166
171
  });
@@ -179,4 +184,4 @@ getUnapprovedTransactions_fn = function() {
179
184
 
180
185
 
181
186
  exports.GasFeePoller = GasFeePoller;
182
- //# sourceMappingURL=chunk-XOLEIJ4W.js.map
187
+ //# sourceMappingURL=chunk-2MUK5JWA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/helpers/GasFeePoller.ts"],"names":[],"mappings":"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","sourcesContent":["import type EthQuery from '@metamask/eth-query';\nimport type { GasFeeState } from '@metamask/gas-fee-controller';\nimport type { NetworkClientId, Provider } from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\nimport EventEmitter from 'events';\n\nimport { projectLogger } from '../logger';\nimport type {\n GasFeeEstimates,\n GasFeeFlow,\n GasFeeFlowRequest,\n Layer1GasFeeFlow,\n} from '../types';\nimport { TransactionStatus, type TransactionMeta } from '../types';\nimport { getGasFeeFlow } from '../utils/gas-flow';\nimport { updateTransactionLayer1GasFee } from '../utils/layer1-gas-fee-flow';\n\nconst log = createModuleLogger(projectLogger, 'gas-fee-poller');\n\nconst INTERVAL_MILLISECONDS = 10000;\n\n/**\n * Automatically polls and updates suggested gas fees on unapproved transactions.\n */\nexport class GasFeePoller {\n hub: EventEmitter = new EventEmitter();\n\n #gasFeeFlows: GasFeeFlow[];\n\n #getEthQuery: (chainId: Hex, networkClientId?: NetworkClientId) => EthQuery;\n\n #getGasFeeControllerEstimates: () => Promise<GasFeeState>;\n\n #getProvider: (chainId: Hex, networkClientId?: NetworkClientId) => Provider;\n\n #getTransactions: () => TransactionMeta[];\n\n #layer1GasFeeFlows: Layer1GasFeeFlow[];\n\n #timeout: ReturnType<typeof setTimeout> | undefined;\n\n #running = false;\n\n /**\n * Constructs a new instance of the GasFeePoller.\n * @param options - The options for this instance.\n * @param options.gasFeeFlows - The gas fee flows to use to obtain suitable gas fees.\n * @param options.getEthQuery - Callback to obtain an EthQuery instance.\n * @param options.getGasFeeControllerEstimates - Callback to obtain the default fee estimates.\n * @param options.getProvider - Callback to obtain a provider instance.\n * @param options.getTransactions - Callback to obtain the transaction data.\n * @param options.layer1GasFeeFlows - The layer 1 gas fee flows to use to obtain suitable layer 1 gas fees.\n * @param options.onStateChange - Callback to register a listener for controller state changes.\n */\n constructor({\n gasFeeFlows,\n getEthQuery,\n getGasFeeControllerEstimates,\n getProvider,\n getTransactions,\n layer1GasFeeFlows,\n onStateChange,\n }: {\n gasFeeFlows: GasFeeFlow[];\n getEthQuery: (chainId: Hex, networkClientId?: NetworkClientId) => EthQuery;\n getGasFeeControllerEstimates: () => Promise<GasFeeState>;\n getProvider: (chainId: Hex, networkClientId?: NetworkClientId) => Provider;\n getTransactions: () => TransactionMeta[];\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n onStateChange: (listener: () => void) => void;\n }) {\n this.#gasFeeFlows = gasFeeFlows;\n this.#layer1GasFeeFlows = layer1GasFeeFlows;\n this.#getEthQuery = getEthQuery;\n this.#getGasFeeControllerEstimates = getGasFeeControllerEstimates;\n this.#getProvider = getProvider;\n this.#getTransactions = getTransactions;\n\n onStateChange(() => {\n const unapprovedTransactions = this.#getUnapprovedTransactions();\n\n if (unapprovedTransactions.length) {\n this.#start();\n } else {\n this.#stop();\n }\n });\n }\n\n #start() {\n if (this.#running) {\n return;\n }\n\n // Intentionally not awaiting since this starts the timeout chain.\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.#onTimeout();\n\n this.#running = true;\n\n log('Started polling');\n }\n\n #stop() {\n if (!this.#running) {\n return;\n }\n\n clearTimeout(this.#timeout);\n\n this.#timeout = undefined;\n this.#running = false;\n\n log('Stopped polling');\n }\n\n async #onTimeout() {\n await this.#updateTransactionGasFeeEstimates();\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#timeout = setTimeout(() => this.#onTimeout(), INTERVAL_MILLISECONDS);\n }\n\n async #updateTransactionGasFeeEstimates() {\n const unapprovedTransactions = this.#getUnapprovedTransactions();\n\n log('Found unapproved transactions', {\n count: unapprovedTransactions.length,\n });\n\n await Promise.all(\n unapprovedTransactions.flatMap((tx) => [\n this.#updateTransactionSuggestedFees(tx),\n this.#updateTransactionLayer1GasFee(tx),\n ]),\n );\n }\n\n async #updateTransactionSuggestedFees(transactionMeta: TransactionMeta) {\n const { chainId, networkClientId } = transactionMeta;\n\n const ethQuery = this.#getEthQuery(chainId, networkClientId);\n const gasFeeFlow = getGasFeeFlow(transactionMeta, this.#gasFeeFlows);\n\n if (!gasFeeFlow) {\n log('No gas fee flow found', transactionMeta.id);\n } else {\n log(\n 'Found gas fee flow',\n gasFeeFlow.constructor.name,\n transactionMeta.id,\n );\n }\n\n const request: GasFeeFlowRequest = {\n ethQuery,\n getGasFeeControllerEstimates: this.#getGasFeeControllerEstimates,\n transactionMeta,\n };\n\n let gasFeeEstimates: GasFeeEstimates | undefined;\n\n if (gasFeeFlow) {\n try {\n const response = await gasFeeFlow.getGasFees(request);\n gasFeeEstimates = response.estimates;\n } catch (error) {\n log('Failed to get suggested gas fees', transactionMeta.id, error);\n }\n }\n\n if (!gasFeeEstimates && transactionMeta.gasFeeEstimatesLoaded) {\n return;\n }\n\n const updatedTransactionMeta: TransactionMeta = {\n ...transactionMeta,\n gasFeeEstimates,\n gasFeeEstimatesLoaded: true,\n };\n\n this.hub.emit('transaction-updated', updatedTransactionMeta);\n\n log('Updated suggested gas fees', {\n gasFeeEstimates: updatedTransactionMeta.gasFeeEstimates,\n transaction: updatedTransactionMeta.id,\n });\n }\n\n async #updateTransactionLayer1GasFee(transactionMeta: TransactionMeta) {\n const { chainId, networkClientId } = transactionMeta;\n const provider = this.#getProvider(chainId, networkClientId);\n\n await updateTransactionLayer1GasFee({\n provider,\n layer1GasFeeFlows: this.#layer1GasFeeFlows,\n transactionMeta,\n });\n\n if (transactionMeta.layer1GasFee === undefined) {\n return;\n }\n\n this.hub.emit('transaction-updated', transactionMeta);\n }\n\n #getUnapprovedTransactions() {\n return this.#getTransactions().filter(\n (tx) => tx.status === TransactionStatus.unapproved,\n );\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  DefaultGasFeeFlow
3
- } from "./chunk-ILCQ262Y.mjs";
3
+ } from "./chunk-QQKWUHXX.mjs";
4
4
  import {
5
5
  GasFeeEstimateLevel
6
- } from "./chunk-NM4LTWRU.mjs";
6
+ } from "./chunk-XOIPXDGX.mjs";
7
7
  import {
8
8
  projectLogger
9
9
  } from "./chunk-UQQWZT6C.mjs";
@@ -118,4 +118,4 @@ feesToString_fn = function(fees) {
118
118
  export {
119
119
  LineaGasFeeFlow
120
120
  };
121
- //# sourceMappingURL=chunk-HXE4JCEK.mjs.map
121
+ //# sourceMappingURL=chunk-3JYZDVNJ.mjs.map
@@ -22,9 +22,9 @@ function getLayer1GasFeeFlow(transactionMeta, layer1GasFeeFlows) {
22
22
  );
23
23
  }
24
24
  async function getTransactionLayer1GasFee({
25
- ethQuery,
26
- transactionMeta,
27
- layer1GasFeeFlows
25
+ layer1GasFeeFlows,
26
+ provider,
27
+ transactionMeta
28
28
  }) {
29
29
  const layer1GasFeeFlow = getLayer1GasFeeFlow(
30
30
  transactionMeta,
@@ -36,7 +36,7 @@ async function getTransactionLayer1GasFee({
36
36
  }
37
37
  try {
38
38
  const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({
39
- ethQuery,
39
+ provider,
40
40
  transactionMeta
41
41
  });
42
42
  return layer1Fee;
@@ -70,4 +70,4 @@ export {
70
70
  updateTransactionLayer1GasFee,
71
71
  buildUnserializedTransaction
72
72
  };
73
- //# sourceMappingURL=chunk-UXGKS6VI.mjs.map
73
+ //# sourceMappingURL=chunk-6FF5JJVB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/layer1-gas-fee-flow.ts"],"sourcesContent":["import { Common, Hardfork } from '@ethereumjs/common';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport type { Provider } from '@metamask/network-controller';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\nimport BN from 'bn.js';\nimport { omit } from 'lodash';\n\nimport { projectLogger } from '../logger';\nimport type { Layer1GasFeeFlow, TransactionMeta } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'layer-1-gas-fee-flow');\n\nexport type UpdateLayer1GasFeeRequest = {\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n provider: Provider;\n transactionMeta: TransactionMeta;\n};\n\n/**\n * Updates the given transactionMeta with the layer 1 gas fee.\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.provider - Provider used to create a new underlying EthQuery instance\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n */\nexport async function updateTransactionLayer1GasFee(\n request: UpdateLayer1GasFeeRequest,\n) {\n const layer1GasFee = await getTransactionLayer1GasFee(request);\n\n if (layer1GasFee) {\n const { transactionMeta } = request;\n transactionMeta.layer1GasFee = layer1GasFee;\n }\n}\n\n/**\n * Get the layer 1 gas fee flow for a transaction.\n * @param transactionMeta - The transaction to get the layer 1 gas fee flow for.\n * @param layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @returns The layer 1 gas fee flow for the transaction, or undefined if none match.\n */\nfunction getLayer1GasFeeFlow(\n transactionMeta: TransactionMeta,\n layer1GasFeeFlows: Layer1GasFeeFlow[],\n): Layer1GasFeeFlow | undefined {\n return layer1GasFeeFlows.find((layer1GasFeeFlow) =>\n layer1GasFeeFlow.matchesTransaction(transactionMeta),\n );\n}\n\n/**\n * Get the layer 1 gas fee for a transaction and return the layer1Fee.\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.provider - The provider to use to get the layer 1 gas fee.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n */\nasync function getTransactionLayer1GasFee({\n layer1GasFeeFlows,\n provider,\n transactionMeta,\n}: UpdateLayer1GasFeeRequest): Promise<Hex | undefined> {\n const layer1GasFeeFlow = getLayer1GasFeeFlow(\n transactionMeta,\n layer1GasFeeFlows,\n );\n if (!layer1GasFeeFlow) {\n log('Layer 1 gas fee flow not found', transactionMeta.id);\n return undefined;\n }\n\n try {\n const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({\n provider,\n transactionMeta,\n });\n return layer1Fee;\n } catch (error) {\n log('Failed to get layer 1 gas fee', transactionMeta.id, error);\n return undefined;\n }\n}\n\n/**\n * Build transactionParams to be used in the unserialized transaction.\n *\n * @param transactionMeta - The transaction to build transactionParams.\n * @returns The transactionParams for the unserialized transaction.\n */\nfunction buildTransactionParams(\n transactionMeta: TransactionMeta,\n): TransactionMeta['txParams'] {\n return {\n ...omit(transactionMeta.txParams, 'gas'),\n gasLimit: transactionMeta.txParams.gas,\n };\n}\n\n/**\n * This produces a transaction whose information does not completely match an\n * Optimism transaction — for instance, DEFAULT_CHAIN is still 'mainnet' and\n * genesis points to the mainnet genesis, not the Optimism genesis — but\n * considering that all we want to do is serialize a transaction, this works\n * fine for our use case.\n *\n * @param transactionMeta - The transaction to build an unserialized transaction for.\n * @returns The unserialized transaction.\n */\nfunction buildTransactionCommon(transactionMeta: TransactionMeta) {\n return Common.custom({\n chainId: new BN(transactionMeta.chainId, 16) as unknown as number,\n // Optimism only supports type-0 transactions; it does not support any of\n // the newer EIPs since EIP-155. Source:\n // <https://github.com/ethereum-optimism/optimism/blob/develop/specs/l2geth/transaction-types.md>\n defaultHardfork: Hardfork.London,\n });\n}\n\n/**\n * Build an unserialized transaction for a transaction.\n *\n * @param transactionMeta - The transaction to build an unserialized transaction for.\n * @returns The unserialized transaction.\n */\nexport function buildUnserializedTransaction(transactionMeta: TransactionMeta) {\n const txParams = buildTransactionParams(transactionMeta);\n const common = buildTransactionCommon(transactionMeta);\n return TransactionFactory.fromTxData(txParams, { common });\n}\n"],"mappings":";;;;;AAAA,SAAS,QAAQ,gBAAgB;AACjC,SAAS,0BAA0B;AAEnC,SAAS,0BAAoC;AAC7C,OAAO,QAAQ;AACf,SAAS,YAAY;AAKrB,IAAM,MAAM,mBAAmB,eAAe,sBAAsB;AAepE,eAAsB,8BACpB,SACA;AACA,QAAM,eAAe,MAAM,2BAA2B,OAAO;AAE7D,MAAI,cAAc;AAChB,UAAM,EAAE,gBAAgB,IAAI;AAC5B,oBAAgB,eAAe;AAAA,EACjC;AACF;AAQA,SAAS,oBACP,iBACA,mBAC8B;AAC9B,SAAO,kBAAkB;AAAA,IAAK,CAAC,qBAC7B,iBAAiB,mBAAmB,eAAe;AAAA,EACrD;AACF;AASA,eAAe,2BAA2B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,GAAwD;AACtD,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AACA,MAAI,CAAC,kBAAkB;AACrB,QAAI,kCAAkC,gBAAgB,EAAE;AACxD,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,EAAE,UAAU,IAAI,MAAM,iBAAiB,aAAa;AAAA,MACxD;AAAA,MACA;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iCAAiC,gBAAgB,IAAI,KAAK;AAC9D,WAAO;AAAA,EACT;AACF;AAQA,SAAS,uBACP,iBAC6B;AAC7B,SAAO;AAAA,IACL,GAAG,KAAK,gBAAgB,UAAU,KAAK;AAAA,IACvC,UAAU,gBAAgB,SAAS;AAAA,EACrC;AACF;AAYA,SAAS,uBAAuB,iBAAkC;AAChE,SAAO,OAAO,OAAO;AAAA,IACnB,SAAS,IAAI,GAAG,gBAAgB,SAAS,EAAE;AAAA;AAAA;AAAA;AAAA,IAI3C,iBAAiB,SAAS;AAAA,EAC5B,CAAC;AACH;AAQO,SAAS,6BAA6B,iBAAkC;AAC7E,QAAM,WAAW,uBAAuB,eAAe;AACvD,QAAM,SAAS,uBAAuB,eAAe;AACrD,SAAO,mBAAmB,WAAW,UAAU,EAAE,OAAO,CAAC;AAC3D;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  GasFeeEstimateLevel
3
- } from "./chunk-NM4LTWRU.mjs";
3
+ } from "./chunk-XOIPXDGX.mjs";
4
4
 
5
5
  // src/utils/gas-flow.ts
6
6
  import { weiHexToGweiDec } from "@metamask/controller-utils";
@@ -59,4 +59,4 @@ export {
59
59
  getGasFeeFlow,
60
60
  mergeGasFeeEstimates
61
61
  };
62
- //# sourceMappingURL=chunk-2YXA3K67.mjs.map
62
+ //# sourceMappingURL=chunk-6KYPLIXG.mjs.map
@@ -14,7 +14,7 @@ var _chunkZ4BLTVTBjs = require('./chunk-Z4BLTVTB.js');
14
14
  // src/helpers/MultichainTrackingHelper.ts
15
15
  var _ethquery = require('@metamask/eth-query'); var _ethquery2 = _interopRequireDefault(_ethquery);
16
16
  var _asyncmutex = require('async-mutex');
17
- var _isMultichainEnabled, _provider, _nonceTracker, _incomingTransactionOptions, _findNetworkClientIdByChainId, _getNetworkClientById, _getNetworkClientRegistry, _removeIncomingTransactionHelperListeners, _removePendingTransactionTrackerListeners, _createNonceTracker, _createIncomingTransactionHelper, _createPendingTransactionTracker, _nonceMutexesByChainId, _trackingMap, _etherscanRemoteTransactionSourcesMap, _refreshTrackingMap, _stopTrackingByNetworkClientId, stopTrackingByNetworkClientId_fn, _startTrackingByNetworkClientId, startTrackingByNetworkClientId_fn, _refreshEtherscanRemoteTransactionSources;
17
+ var _isMultichainEnabled, _provider, _nonceTracker, _incomingTransactionOptions, _findNetworkClientIdByChainId, _getNetworkClientById, _getNetworkClientRegistry, _removeIncomingTransactionHelperListeners, _removePendingTransactionTrackerListeners, _createNonceTracker, _createIncomingTransactionHelper, _createPendingTransactionTracker, _nonceMutexesByChainId, _trackingMap, _etherscanRemoteTransactionSourcesMap, _refreshTrackingMap, _stopTrackingByNetworkClientId, stopTrackingByNetworkClientId_fn, _startTrackingByNetworkClientId, startTrackingByNetworkClientId_fn, _refreshEtherscanRemoteTransactionSources, _getNetworkClient, getNetworkClient_fn;
18
18
  var MultichainTrackingHelper = class {
19
19
  constructor({
20
20
  isMultichainEnabled,
@@ -33,6 +33,7 @@ var MultichainTrackingHelper = class {
33
33
  }) {
34
34
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _stopTrackingByNetworkClientId);
35
35
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _startTrackingByNetworkClientId);
36
+ _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getNetworkClient);
36
37
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _isMultichainEnabled, void 0);
37
38
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _provider, void 0);
38
39
  _chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _nonceTracker, void 0);
@@ -127,27 +128,28 @@ var MultichainTrackingHelper = class {
127
128
  if (!_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _isMultichainEnabled)) {
128
129
  return new (0, _ethquery2.default)(_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _provider));
129
130
  }
130
- let networkClient;
131
- if (networkClientId) {
132
- try {
133
- networkClient = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getNetworkClientById).call(this, networkClientId);
134
- } catch (err) {
135
- _chunkS6VGOPUYjs.incomingTransactionsLogger.call(void 0, "failed to get network client by networkClientId");
136
- }
137
- }
138
- if (!networkClient && chainId) {
139
- try {
140
- networkClientId = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _findNetworkClientIdByChainId).call(this, chainId);
141
- networkClient = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getNetworkClientById).call(this, networkClientId);
142
- } catch (err) {
143
- _chunkS6VGOPUYjs.incomingTransactionsLogger.call(void 0, "failed to get network client by chainId");
144
- }
145
- }
131
+ const networkClient = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getNetworkClient, getNetworkClient_fn).call(this, {
132
+ networkClientId,
133
+ chainId
134
+ });
146
135
  if (networkClient) {
147
136
  return new (0, _ethquery2.default)(networkClient.provider);
148
137
  }
149
138
  return new (0, _ethquery2.default)(_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _provider));
150
139
  }
140
+ getProvider({
141
+ networkClientId,
142
+ chainId
143
+ } = {}) {
144
+ if (!_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _isMultichainEnabled)) {
145
+ return _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _provider);
146
+ }
147
+ const networkClient = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getNetworkClient, getNetworkClient_fn).call(this, {
148
+ networkClientId,
149
+ chainId
150
+ });
151
+ return networkClient?.provider || _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _provider);
152
+ }
151
153
  /**
152
154
  * Gets the mutex intended to guard the nonceTracker for a particular chainId and key .
153
155
  *
@@ -313,8 +315,31 @@ startTrackingByNetworkClientId_fn = function(networkClientId) {
313
315
  });
314
316
  };
315
317
  _refreshEtherscanRemoteTransactionSources = new WeakMap();
318
+ _getNetworkClient = new WeakSet();
319
+ getNetworkClient_fn = function({
320
+ networkClientId,
321
+ chainId
322
+ } = {}) {
323
+ let networkClient;
324
+ if (networkClientId) {
325
+ try {
326
+ networkClient = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getNetworkClientById).call(this, networkClientId);
327
+ } catch (err) {
328
+ _chunkS6VGOPUYjs.incomingTransactionsLogger.call(void 0, "failed to get network client by networkClientId");
329
+ }
330
+ }
331
+ if (!networkClient && chainId) {
332
+ try {
333
+ networkClientId = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _findNetworkClientIdByChainId).call(this, chainId);
334
+ networkClient = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getNetworkClientById).call(this, networkClientId);
335
+ } catch (err) {
336
+ _chunkS6VGOPUYjs.incomingTransactionsLogger.call(void 0, "failed to get network client by chainId");
337
+ }
338
+ }
339
+ return networkClient;
340
+ };
316
341
 
317
342
 
318
343
 
319
344
  exports.MultichainTrackingHelper = MultichainTrackingHelper;
320
- //# sourceMappingURL=chunk-NRWEI43Q.js.map
345
+ //# sourceMappingURL=chunk-7C6ERJJC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/helpers/MultichainTrackingHelper.ts"],"names":[],"mappings":"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","sourcesContent":["import EthQuery from '@metamask/eth-query';\nimport type {\n NetworkClientId,\n NetworkController,\n NetworkClient,\n BlockTracker,\n Provider,\n NetworkControllerStateChangeEvent,\n} from '@metamask/network-controller';\nimport type { Hex } from '@metamask/utils';\nimport { Mutex } from 'async-mutex';\nimport type { NonceLock, NonceTracker } from 'nonce-tracker';\n\nimport { incomingTransactionsLogger as log } from '../logger';\nimport { EtherscanRemoteTransactionSource } from './EtherscanRemoteTransactionSource';\nimport type {\n IncomingTransactionHelper,\n IncomingTransactionOptions,\n} from './IncomingTransactionHelper';\nimport type { PendingTransactionTracker } from './PendingTransactionTracker';\n\n/**\n * Registry of network clients provided by the NetworkController\n */\ntype NetworkClientRegistry = ReturnType<\n NetworkController['getNetworkClientRegistry']\n>;\n\nexport type MultichainTrackingHelperOptions = {\n isMultichainEnabled: boolean;\n provider: Provider;\n nonceTracker: NonceTracker;\n incomingTransactionOptions: IncomingTransactionOptions;\n\n findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n getNetworkClientById: NetworkController['getNetworkClientById'];\n getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n\n removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => NonceTracker;\n createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n chainId?: Hex;\n }) => IncomingTransactionHelper;\n createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => PendingTransactionTracker;\n onNetworkStateChange: (\n listener: (\n ...payload: NetworkControllerStateChangeEvent['payload']\n ) => void,\n ) => void;\n};\n\nexport class MultichainTrackingHelper {\n #isMultichainEnabled: boolean;\n\n readonly #provider: Provider;\n\n readonly #nonceTracker: NonceTracker;\n\n readonly #incomingTransactionOptions: IncomingTransactionOptions;\n\n readonly #findNetworkClientIdByChainId: NetworkController['findNetworkClientIdByChainId'];\n\n readonly #getNetworkClientById: NetworkController['getNetworkClientById'];\n\n readonly #getNetworkClientRegistry: NetworkController['getNetworkClientRegistry'];\n\n readonly #removeIncomingTransactionHelperListeners: (\n IncomingTransactionHelper: IncomingTransactionHelper,\n ) => void;\n\n readonly #removePendingTransactionTrackerListeners: (\n pendingTransactionTracker: PendingTransactionTracker,\n ) => void;\n\n readonly #createNonceTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => NonceTracker;\n\n readonly #createIncomingTransactionHelper: (opts: {\n blockTracker: BlockTracker;\n chainId?: Hex;\n etherscanRemoteTransactionSource: EtherscanRemoteTransactionSource;\n }) => IncomingTransactionHelper;\n\n readonly #createPendingTransactionTracker: (opts: {\n provider: Provider;\n blockTracker: BlockTracker;\n chainId?: Hex;\n }) => PendingTransactionTracker;\n\n readonly #nonceMutexesByChainId = new Map<Hex, Map<string, Mutex>>();\n\n readonly #trackingMap: Map<\n NetworkClientId,\n {\n nonceTracker: NonceTracker;\n pendingTransactionTracker: PendingTransactionTracker;\n incomingTransactionHelper: IncomingTransactionHelper;\n }\n > = new Map();\n\n readonly #etherscanRemoteTransactionSourcesMap: Map<\n Hex,\n EtherscanRemoteTransactionSource\n > = new Map();\n\n constructor({\n isMultichainEnabled,\n provider,\n nonceTracker,\n incomingTransactionOptions,\n findNetworkClientIdByChainId,\n getNetworkClientById,\n getNetworkClientRegistry,\n removeIncomingTransactionHelperListeners,\n removePendingTransactionTrackerListeners,\n createNonceTracker,\n createIncomingTransactionHelper,\n createPendingTransactionTracker,\n onNetworkStateChange,\n }: MultichainTrackingHelperOptions) {\n this.#isMultichainEnabled = isMultichainEnabled;\n this.#provider = provider;\n this.#nonceTracker = nonceTracker;\n this.#incomingTransactionOptions = incomingTransactionOptions;\n\n this.#findNetworkClientIdByChainId = findNetworkClientIdByChainId;\n this.#getNetworkClientById = getNetworkClientById;\n this.#getNetworkClientRegistry = getNetworkClientRegistry;\n\n this.#removeIncomingTransactionHelperListeners =\n removeIncomingTransactionHelperListeners;\n this.#removePendingTransactionTrackerListeners =\n removePendingTransactionTrackerListeners;\n this.#createNonceTracker = createNonceTracker;\n this.#createIncomingTransactionHelper = createIncomingTransactionHelper;\n this.#createPendingTransactionTracker = createPendingTransactionTracker;\n\n onNetworkStateChange((_, patches) => {\n if (this.#isMultichainEnabled) {\n const networkClients = this.#getNetworkClientRegistry();\n patches.forEach(({ op, path }) => {\n if (op === 'remove' && path[0] === 'networkConfigurations') {\n const networkClientId = path[1] as NetworkClientId;\n delete networkClients[networkClientId];\n }\n });\n\n this.#refreshTrackingMap(networkClients);\n }\n });\n }\n\n initialize() {\n if (!this.#isMultichainEnabled) {\n return;\n }\n const networkClients = this.#getNetworkClientRegistry();\n this.#refreshTrackingMap(networkClients);\n }\n\n has(networkClientId: NetworkClientId) {\n return this.#trackingMap.has(networkClientId);\n }\n\n getEthQuery({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): EthQuery {\n if (!this.#isMultichainEnabled) {\n return new EthQuery(this.#provider);\n }\n\n const networkClient = this.#getNetworkClient({\n networkClientId,\n chainId,\n });\n\n if (networkClient) {\n return new EthQuery(networkClient.provider);\n }\n\n // NOTE(JL): we're not ready to drop globally selected ethQuery yet.\n // Some calls to getEthQuery only have access to optional networkClientId\n // throw new Error('failed to get eth query instance');\n return new EthQuery(this.#provider);\n }\n\n getProvider({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): Provider {\n if (!this.#isMultichainEnabled) {\n return this.#provider;\n }\n\n const networkClient = this.#getNetworkClient({\n networkClientId,\n chainId,\n });\n\n return networkClient?.provider || this.#provider;\n }\n\n /**\n * Gets the mutex intended to guard the nonceTracker for a particular chainId and key .\n *\n * @param opts - The options object.\n * @param opts.chainId - The hex chainId.\n * @param opts.key - The hex address (or constant) pertaining to the chainId\n * @returns Mutex instance for the given chainId and key pair\n */\n async acquireNonceLockForChainIdKey({\n chainId,\n key = 'global',\n }: {\n chainId: Hex;\n key?: string;\n }): Promise<() => void> {\n let nonceMutexesForChainId = this.#nonceMutexesByChainId.get(chainId);\n if (!nonceMutexesForChainId) {\n nonceMutexesForChainId = new Map<string, Mutex>();\n this.#nonceMutexesByChainId.set(chainId, nonceMutexesForChainId);\n }\n let nonceMutexForKey = nonceMutexesForChainId.get(key);\n if (!nonceMutexForKey) {\n nonceMutexForKey = new Mutex();\n nonceMutexesForChainId.set(key, nonceMutexForKey);\n }\n\n return await nonceMutexForKey.acquire();\n }\n\n /**\n * Gets the next nonce according to the nonce-tracker.\n * Ensure `releaseLock` is called once processing of the `nonce` value is complete.\n *\n * @param address - The hex string address for the transaction.\n * @param networkClientId - The network client ID for the transaction, used to fetch the correct nonce tracker.\n * @returns object with the `nextNonce` `nonceDetails`, and the releaseLock.\n */\n async getNonceLock(\n address: string,\n networkClientId?: NetworkClientId,\n ): Promise<NonceLock> {\n let releaseLockForChainIdKey: (() => void) | undefined;\n let nonceTracker = this.#nonceTracker;\n if (networkClientId && this.#isMultichainEnabled) {\n const networkClient = this.#getNetworkClientById(networkClientId);\n releaseLockForChainIdKey = await this.acquireNonceLockForChainIdKey({\n chainId: networkClient.configuration.chainId,\n key: address,\n });\n const trackers = this.#trackingMap.get(networkClientId);\n if (!trackers) {\n throw new Error('missing nonceTracker for networkClientId');\n }\n nonceTracker = trackers.nonceTracker;\n }\n\n // Acquires the lock for the chainId + address and the nonceLock from the nonceTracker, then\n // couples them together by replacing the nonceLock's releaseLock method with\n // an anonymous function that calls releases both the original nonceLock and the\n // lock for the chainId.\n try {\n const nonceLock = await nonceTracker.getNonceLock(address);\n return {\n ...nonceLock,\n releaseLock: () => {\n nonceLock.releaseLock();\n releaseLockForChainIdKey?.();\n },\n };\n } catch (err) {\n releaseLockForChainIdKey?.();\n throw err;\n }\n }\n\n startIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n networkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.start();\n });\n }\n\n stopIncomingTransactionPolling(networkClientIds: NetworkClientId[] = []) {\n networkClientIds.forEach((networkClientId) => {\n this.#trackingMap.get(networkClientId)?.incomingTransactionHelper.stop();\n });\n }\n\n stopAllIncomingTransactionPolling() {\n for (const [, trackers] of this.#trackingMap) {\n trackers.incomingTransactionHelper.stop();\n }\n }\n\n async updateIncomingTransactions(networkClientIds: NetworkClientId[] = []) {\n const promises = await Promise.allSettled(\n networkClientIds.map(async (networkClientId) => {\n return await this.#trackingMap\n .get(networkClientId)\n ?.incomingTransactionHelper.update();\n }),\n );\n\n promises\n .filter((result) => result.status === 'rejected')\n .forEach((result) => {\n log(\n 'failed to update incoming transactions',\n (result as PromiseRejectedResult).reason,\n );\n });\n }\n\n checkForPendingTransactionAndStartPolling = () => {\n for (const [, trackers] of this.#trackingMap) {\n trackers.pendingTransactionTracker.startIfPendingTransactions();\n }\n };\n\n stopAllTracking() {\n for (const [networkClientId] of this.#trackingMap) {\n this.#stopTrackingByNetworkClientId(networkClientId);\n }\n }\n\n #refreshTrackingMap = (networkClients: NetworkClientRegistry) => {\n this.#refreshEtherscanRemoteTransactionSources(networkClients);\n\n const networkClientIds = Object.keys(networkClients);\n const existingNetworkClientIds = Array.from(this.#trackingMap.keys());\n\n // Remove tracking for NetworkClientIds that no longer exist\n const networkClientIdsToRemove = existingNetworkClientIds.filter(\n (id) => !networkClientIds.includes(id),\n );\n networkClientIdsToRemove.forEach((id) => {\n this.#stopTrackingByNetworkClientId(id);\n });\n\n // Start tracking new NetworkClientIds from the registry\n const networkClientIdsToAdd = networkClientIds.filter(\n (id) => !existingNetworkClientIds.includes(id),\n );\n networkClientIdsToAdd.forEach((id) => {\n this.#startTrackingByNetworkClientId(id);\n });\n };\n\n #stopTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n trackers.pendingTransactionTracker.stop();\n this.#removePendingTransactionTrackerListeners(\n trackers.pendingTransactionTracker,\n );\n trackers.incomingTransactionHelper.stop();\n this.#removeIncomingTransactionHelperListeners(\n trackers.incomingTransactionHelper,\n );\n this.#trackingMap.delete(networkClientId);\n }\n }\n\n #startTrackingByNetworkClientId(networkClientId: NetworkClientId) {\n const trackers = this.#trackingMap.get(networkClientId);\n if (trackers) {\n return;\n }\n\n const {\n provider,\n blockTracker,\n configuration: { chainId },\n } = this.#getNetworkClientById(networkClientId);\n\n let etherscanRemoteTransactionSource =\n this.#etherscanRemoteTransactionSourcesMap.get(chainId);\n if (!etherscanRemoteTransactionSource) {\n etherscanRemoteTransactionSource = new EtherscanRemoteTransactionSource({\n includeTokenTransfers:\n this.#incomingTransactionOptions.includeTokenTransfers,\n });\n this.#etherscanRemoteTransactionSourcesMap.set(\n chainId,\n etherscanRemoteTransactionSource,\n );\n }\n\n const nonceTracker = this.#createNonceTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n const incomingTransactionHelper = this.#createIncomingTransactionHelper({\n blockTracker,\n etherscanRemoteTransactionSource,\n chainId,\n });\n\n const pendingTransactionTracker = this.#createPendingTransactionTracker({\n provider,\n blockTracker,\n chainId,\n });\n\n this.#trackingMap.set(networkClientId, {\n nonceTracker,\n incomingTransactionHelper,\n pendingTransactionTracker,\n });\n }\n\n #refreshEtherscanRemoteTransactionSources = (\n networkClients: NetworkClientRegistry,\n ) => {\n // this will be prettier when we have consolidated network clients with a single chainId:\n // check if there are still other network clients using the same chainId\n // if not remove the etherscanRemoteTransaction source from the map\n const chainIdsInRegistry = new Set();\n Object.values(networkClients).forEach((networkClient) =>\n chainIdsInRegistry.add(networkClient.configuration.chainId),\n );\n const existingChainIds = Array.from(\n this.#etherscanRemoteTransactionSourcesMap.keys(),\n );\n const chainIdsToRemove = existingChainIds.filter(\n (chainId) => !chainIdsInRegistry.has(chainId),\n );\n\n chainIdsToRemove.forEach((chainId) => {\n this.#etherscanRemoteTransactionSourcesMap.delete(chainId);\n });\n };\n\n #getNetworkClient({\n networkClientId,\n chainId,\n }: {\n networkClientId?: NetworkClientId;\n chainId?: Hex;\n } = {}): NetworkClient | undefined {\n let networkClient: NetworkClient | undefined;\n\n if (networkClientId) {\n try {\n networkClient = this.#getNetworkClientById(networkClientId);\n } catch (err) {\n log('failed to get network client by networkClientId');\n }\n }\n if (!networkClient && chainId) {\n try {\n networkClientId = this.#findNetworkClientIdByChainId(chainId);\n networkClient = this.#getNetworkClientById(networkClientId);\n } catch (err) {\n log('failed to get network client by chainId');\n }\n }\n return networkClient;\n }\n}\n"]}
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-3D3SA6PY.mjs";
4
4
  import {
5
5
  getGasFeeFlow
6
- } from "./chunk-2YXA3K67.mjs";
6
+ } from "./chunk-6KYPLIXG.mjs";
7
7
  import {
8
8
  projectLogger
9
9
  } from "./chunk-UQQWZT6C.mjs";
@@ -205,4 +205,4 @@ export {
205
205
  updateGasFees,
206
206
  gweiDecimalToWeiHex
207
207
  };
208
- //# sourceMappingURL=chunk-DTONMSFW.mjs.map
208
+ //# sourceMappingURL=chunk-ARB3VRKV.mjs.map
@@ -22,9 +22,9 @@ function getLayer1GasFeeFlow(transactionMeta, layer1GasFeeFlows) {
22
22
  );
23
23
  }
24
24
  async function getTransactionLayer1GasFee({
25
- ethQuery,
26
- transactionMeta,
27
- layer1GasFeeFlows
25
+ layer1GasFeeFlows,
26
+ provider,
27
+ transactionMeta
28
28
  }) {
29
29
  const layer1GasFeeFlow = getLayer1GasFeeFlow(
30
30
  transactionMeta,
@@ -36,7 +36,7 @@ async function getTransactionLayer1GasFee({
36
36
  }
37
37
  try {
38
38
  const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({
39
- ethQuery,
39
+ provider,
40
40
  transactionMeta
41
41
  });
42
42
  return layer1Fee;
@@ -70,4 +70,4 @@ function buildUnserializedTransaction(transactionMeta) {
70
70
 
71
71
 
72
72
  exports.updateTransactionLayer1GasFee = updateTransactionLayer1GasFee; exports.buildUnserializedTransaction = buildUnserializedTransaction;
73
- //# sourceMappingURL=chunk-SJHACWAJ.js.map
73
+ //# sourceMappingURL=chunk-CBKVKDFC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/layer1-gas-fee-flow.ts"],"names":[],"mappings":";;;;;AAAA,SAAS,QAAQ,gBAAgB;AACjC,SAAS,0BAA0B;AAEnC,SAAS,0BAAoC;AAC7C,OAAO,QAAQ;AACf,SAAS,YAAY;AAKrB,IAAM,MAAM,mBAAmB,eAAe,sBAAsB;AAepE,eAAsB,8BACpB,SACA;AACA,QAAM,eAAe,MAAM,2BAA2B,OAAO;AAE7D,MAAI,cAAc;AAChB,UAAM,EAAE,gBAAgB,IAAI;AAC5B,oBAAgB,eAAe;AAAA,EACjC;AACF;AAQA,SAAS,oBACP,iBACA,mBAC8B;AAC9B,SAAO,kBAAkB;AAAA,IAAK,CAAC,qBAC7B,iBAAiB,mBAAmB,eAAe;AAAA,EACrD;AACF;AASA,eAAe,2BAA2B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,GAAwD;AACtD,QAAM,mBAAmB;AAAA,IACvB;AAAA,IACA;AAAA,EACF;AACA,MAAI,CAAC,kBAAkB;AACrB,QAAI,kCAAkC,gBAAgB,EAAE;AACxD,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,EAAE,UAAU,IAAI,MAAM,iBAAiB,aAAa;AAAA,MACxD;AAAA,MACA;AAAA,IACF,CAAC;AACD,WAAO;AAAA,EACT,SAAS,OAAO;AACd,QAAI,iCAAiC,gBAAgB,IAAI,KAAK;AAC9D,WAAO;AAAA,EACT;AACF;AAQA,SAAS,uBACP,iBAC6B;AAC7B,SAAO;AAAA,IACL,GAAG,KAAK,gBAAgB,UAAU,KAAK;AAAA,IACvC,UAAU,gBAAgB,SAAS;AAAA,EACrC;AACF;AAYA,SAAS,uBAAuB,iBAAkC;AAChE,SAAO,OAAO,OAAO;AAAA,IACnB,SAAS,IAAI,GAAG,gBAAgB,SAAS,EAAE;AAAA;AAAA;AAAA;AAAA,IAI3C,iBAAiB,SAAS;AAAA,EAC5B,CAAC;AACH;AAQO,SAAS,6BAA6B,iBAAkC;AAC7E,QAAM,WAAW,uBAAuB,eAAe;AACvD,QAAM,SAAS,uBAAuB,eAAe;AACrD,SAAO,mBAAmB,WAAW,UAAU,EAAE,OAAO,CAAC;AAC3D","sourcesContent":["import { Common, Hardfork } from '@ethereumjs/common';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport type { Provider } from '@metamask/network-controller';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\nimport BN from 'bn.js';\nimport { omit } from 'lodash';\n\nimport { projectLogger } from '../logger';\nimport type { Layer1GasFeeFlow, TransactionMeta } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'layer-1-gas-fee-flow');\n\nexport type UpdateLayer1GasFeeRequest = {\n layer1GasFeeFlows: Layer1GasFeeFlow[];\n provider: Provider;\n transactionMeta: TransactionMeta;\n};\n\n/**\n * Updates the given transactionMeta with the layer 1 gas fee.\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.provider - Provider used to create a new underlying EthQuery instance\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n */\nexport async function updateTransactionLayer1GasFee(\n request: UpdateLayer1GasFeeRequest,\n) {\n const layer1GasFee = await getTransactionLayer1GasFee(request);\n\n if (layer1GasFee) {\n const { transactionMeta } = request;\n transactionMeta.layer1GasFee = layer1GasFee;\n }\n}\n\n/**\n * Get the layer 1 gas fee flow for a transaction.\n * @param transactionMeta - The transaction to get the layer 1 gas fee flow for.\n * @param layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @returns The layer 1 gas fee flow for the transaction, or undefined if none match.\n */\nfunction getLayer1GasFeeFlow(\n transactionMeta: TransactionMeta,\n layer1GasFeeFlows: Layer1GasFeeFlow[],\n): Layer1GasFeeFlow | undefined {\n return layer1GasFeeFlows.find((layer1GasFeeFlow) =>\n layer1GasFeeFlow.matchesTransaction(transactionMeta),\n );\n}\n\n/**\n * Get the layer 1 gas fee for a transaction and return the layer1Fee.\n * @param request - The request to use when getting the layer 1 gas fee.\n * @param request.layer1GasFeeFlows - The layer 1 gas fee flows to search.\n * @param request.provider - The provider to use to get the layer 1 gas fee.\n * @param request.transactionMeta - The transaction to get the layer 1 gas fee for.\n */\nasync function getTransactionLayer1GasFee({\n layer1GasFeeFlows,\n provider,\n transactionMeta,\n}: UpdateLayer1GasFeeRequest): Promise<Hex | undefined> {\n const layer1GasFeeFlow = getLayer1GasFeeFlow(\n transactionMeta,\n layer1GasFeeFlows,\n );\n if (!layer1GasFeeFlow) {\n log('Layer 1 gas fee flow not found', transactionMeta.id);\n return undefined;\n }\n\n try {\n const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({\n provider,\n transactionMeta,\n });\n return layer1Fee;\n } catch (error) {\n log('Failed to get layer 1 gas fee', transactionMeta.id, error);\n return undefined;\n }\n}\n\n/**\n * Build transactionParams to be used in the unserialized transaction.\n *\n * @param transactionMeta - The transaction to build transactionParams.\n * @returns The transactionParams for the unserialized transaction.\n */\nfunction buildTransactionParams(\n transactionMeta: TransactionMeta,\n): TransactionMeta['txParams'] {\n return {\n ...omit(transactionMeta.txParams, 'gas'),\n gasLimit: transactionMeta.txParams.gas,\n };\n}\n\n/**\n * This produces a transaction whose information does not completely match an\n * Optimism transaction — for instance, DEFAULT_CHAIN is still 'mainnet' and\n * genesis points to the mainnet genesis, not the Optimism genesis — but\n * considering that all we want to do is serialize a transaction, this works\n * fine for our use case.\n *\n * @param transactionMeta - The transaction to build an unserialized transaction for.\n * @returns The unserialized transaction.\n */\nfunction buildTransactionCommon(transactionMeta: TransactionMeta) {\n return Common.custom({\n chainId: new BN(transactionMeta.chainId, 16) as unknown as number,\n // Optimism only supports type-0 transactions; it does not support any of\n // the newer EIPs since EIP-155. Source:\n // <https://github.com/ethereum-optimism/optimism/blob/develop/specs/l2geth/transaction-types.md>\n defaultHardfork: Hardfork.London,\n });\n}\n\n/**\n * Build an unserialized transaction for a transaction.\n *\n * @param transactionMeta - The transaction to build an unserialized transaction for.\n * @returns The unserialized transaction.\n */\nexport function buildUnserializedTransaction(transactionMeta: TransactionMeta) {\n const txParams = buildTransactionParams(transactionMeta);\n const common = buildTransactionCommon(transactionMeta);\n return TransactionFactory.fromTxData(txParams, { common });\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  buildUnserializedTransaction
3
- } from "./chunk-UXGKS6VI.mjs";
3
+ } from "./chunk-6FF5JJVB.mjs";
4
4
  import {
5
5
  CHAIN_IDS
6
6
  } from "./chunk-Z3HHSD5I.mjs";
@@ -49,12 +49,12 @@ var OptimismLayer1GasFeeFlow = class {
49
49
  };
50
50
  _getOptimisimLayer1GasFee = new WeakSet();
51
51
  getOptimisimLayer1GasFee_fn = async function(request) {
52
- const { ethQuery, transactionMeta } = request;
52
+ const { provider, transactionMeta } = request;
53
53
  const contract = new Contract(
54
54
  OPTIMISM_GAS_PRICE_ORACLE_ADDRESS,
55
55
  OPTIMISM_GAS_PRICE_ORACLE_ABI,
56
56
  // Network controller provider type is uncompatible with ethers provider
57
- ethQuery.currentProvider
57
+ provider
58
58
  );
59
59
  const serializedTransaction = buildUnserializedTransaction(transactionMeta).serialize();
60
60
  const result = await contract.getL1Fee(serializedTransaction);
@@ -66,4 +66,4 @@ getOptimisimLayer1GasFee_fn = async function(request) {
66
66
  export {
67
67
  OptimismLayer1GasFeeFlow
68
68
  };
69
- //# sourceMappingURL=chunk-WERIBZRG.mjs.map
69
+ //# sourceMappingURL=chunk-DX4NUE4H.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"sourcesContent":["import { Contract } from '@ethersproject/contracts';\nimport type { Web3Provider } from '@ethersproject/providers';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from '../constants';\nimport { projectLogger } from '../logger';\nimport type {\n Layer1GasFeeFlow,\n Layer1GasFeeFlowRequest,\n Layer1GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\nimport { buildUnserializedTransaction } from '../utils/layer1-gas-fee-flow';\n\nconst OPTIMISIM_CHAIN_IDS: Hex[] = [\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.OPTIMISM_TESTNET,\n];\n\nconst log = createModuleLogger(projectLogger, 'optimisim-layer1-gas-fee-flow');\n\n// Snippet of the ABI that we need\n// Should we need more of it at some point, the full ABI can be found here:\n// https://github.com/ethereum-optimism/optimism/blob/develop/gas-oracle/abis/OVM_GasPriceOracle.json\nconst OPTIMISM_GAS_PRICE_ORACLE_ABI = [\n {\n inputs: [{ internalType: 'bytes', name: '_data', type: 'bytes' }],\n name: 'getL1Fee',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\n// BlockExplorer link: https://optimistic.etherscan.io/address/0x420000000000000000000000000000000000000f#code\nconst OPTIMISM_GAS_PRICE_ORACLE_ADDRESS =\n '0x420000000000000000000000000000000000000F';\n\n/**\n * Optimism layer 1 gas fee flow that obtains gas fee estimate using Optimisim oracle contract.\n */\nexport class OptimismLayer1GasFeeFlow implements Layer1GasFeeFlow {\n matchesTransaction(transactionMeta: TransactionMeta): boolean {\n return OPTIMISIM_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n async #getOptimisimLayer1GasFee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<Layer1GasFeeFlowResponse> {\n const { ethQuery, transactionMeta } = request;\n\n const contract = new Contract(\n OPTIMISM_GAS_PRICE_ORACLE_ADDRESS,\n OPTIMISM_GAS_PRICE_ORACLE_ABI,\n // Network controller provider type is uncompatible with ethers provider\n ethQuery.currentProvider as unknown as Web3Provider,\n );\n\n const serializedTransaction =\n buildUnserializedTransaction(transactionMeta).serialize();\n const result = await contract.getL1Fee(serializedTransaction);\n\n return {\n layer1Fee: result?.toHexString(),\n };\n }\n\n async getLayer1Fee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<Layer1GasFeeFlowResponse> {\n try {\n return await this.#getOptimisimLayer1GasFee(request);\n } catch (error) {\n log('Failed to get Optimism layer 1 gas fee due to error', error);\n throw new Error(`Failed to get Optimism layer 1 gas fee`);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,gBAAgB;AAEzB,SAAS,0BAAoC;AAY7C,IAAM,sBAA6B;AAAA,EACjC,UAAU;AAAA,EACV,UAAU;AACZ;AAEA,IAAM,MAAM,mBAAmB,eAAe,+BAA+B;AAK7E,IAAM,gCAAgC;AAAA,EACpC;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,SAAS,MAAM,QAAQ,CAAC;AAAA,IAChE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;AAGA,IAAM,oCACJ;AApCF;AAyCO,IAAM,2BAAN,MAA2D;AAAA,EAA3D;AAKL,uBAAM;AAAA;AAAA,EAJN,mBAAmB,iBAA2C;AAC5D,WAAO,oBAAoB,SAAS,gBAAgB,OAAO;AAAA,EAC7D;AAAA,EAuBA,MAAM,aACJ,SACmC;AACnC,QAAI;AACF,aAAO,MAAM,sBAAK,wDAAL,WAA+B;AAAA,IAC9C,SAAS,OAAO;AACd,UAAI,uDAAuD,KAAK;AAChE,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAAA,EACF;AACF;AA/BQ;AAAA,8BAAyB,eAC7B,SACmC;AACnC,QAAM,EAAE,UAAU,gBAAgB,IAAI;AAEtC,QAAM,WAAW,IAAI;AAAA,IACnB;AAAA,IACA;AAAA;AAAA,IAEA,SAAS;AAAA,EACX;AAEA,QAAM,wBACJ,6BAA6B,eAAe,EAAE,UAAU;AAC1D,QAAM,SAAS,MAAM,SAAS,SAAS,qBAAqB;AAE5D,SAAO;AAAA,IACL,WAAW,QAAQ,YAAY;AAAA,EACjC;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"sourcesContent":["import { Contract } from '@ethersproject/contracts';\nimport type { Web3Provider } from '@ethersproject/providers';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { CHAIN_IDS } from '../constants';\nimport { projectLogger } from '../logger';\nimport type {\n Layer1GasFeeFlow,\n Layer1GasFeeFlowRequest,\n Layer1GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\nimport { buildUnserializedTransaction } from '../utils/layer1-gas-fee-flow';\n\nconst OPTIMISIM_CHAIN_IDS: Hex[] = [\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.OPTIMISM_TESTNET,\n];\n\nconst log = createModuleLogger(projectLogger, 'optimisim-layer1-gas-fee-flow');\n\n// Snippet of the ABI that we need\n// Should we need more of it at some point, the full ABI can be found here:\n// https://github.com/ethereum-optimism/optimism/blob/develop/gas-oracle/abis/OVM_GasPriceOracle.json\nconst OPTIMISM_GAS_PRICE_ORACLE_ABI = [\n {\n inputs: [{ internalType: 'bytes', name: '_data', type: 'bytes' }],\n name: 'getL1Fee',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n];\n\n// BlockExplorer link: https://optimistic.etherscan.io/address/0x420000000000000000000000000000000000000f#code\nconst OPTIMISM_GAS_PRICE_ORACLE_ADDRESS =\n '0x420000000000000000000000000000000000000F';\n\n/**\n * Optimism layer 1 gas fee flow that obtains gas fee estimate using Optimisim oracle contract.\n */\nexport class OptimismLayer1GasFeeFlow implements Layer1GasFeeFlow {\n matchesTransaction(transactionMeta: TransactionMeta): boolean {\n return OPTIMISIM_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n async #getOptimisimLayer1GasFee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<Layer1GasFeeFlowResponse> {\n const { provider, transactionMeta } = request;\n\n const contract = new Contract(\n OPTIMISM_GAS_PRICE_ORACLE_ADDRESS,\n OPTIMISM_GAS_PRICE_ORACLE_ABI,\n // Network controller provider type is uncompatible with ethers provider\n provider as unknown as Web3Provider,\n );\n\n const serializedTransaction =\n buildUnserializedTransaction(transactionMeta).serialize();\n const result = await contract.getL1Fee(serializedTransaction);\n\n return {\n layer1Fee: result?.toHexString(),\n };\n }\n\n async getLayer1Fee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<Layer1GasFeeFlowResponse> {\n try {\n return await this.#getOptimisimLayer1GasFee(request);\n } catch (error) {\n log('Failed to get Optimism layer 1 gas fee due to error', error);\n throw new Error(`Failed to get Optimism layer 1 gas fee`);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,gBAAgB;AAEzB,SAAS,0BAAoC;AAY7C,IAAM,sBAA6B;AAAA,EACjC,UAAU;AAAA,EACV,UAAU;AACZ;AAEA,IAAM,MAAM,mBAAmB,eAAe,+BAA+B;AAK7E,IAAM,gCAAgC;AAAA,EACpC;AAAA,IACE,QAAQ,CAAC,EAAE,cAAc,SAAS,MAAM,SAAS,MAAM,QAAQ,CAAC;AAAA,IAChE,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AACF;AAGA,IAAM,oCACJ;AApCF;AAyCO,IAAM,2BAAN,MAA2D;AAAA,EAA3D;AAKL,uBAAM;AAAA;AAAA,EAJN,mBAAmB,iBAA2C;AAC5D,WAAO,oBAAoB,SAAS,gBAAgB,OAAO;AAAA,EAC7D;AAAA,EAuBA,MAAM,aACJ,SACmC;AACnC,QAAI;AACF,aAAO,MAAM,sBAAK,wDAAL,WAA+B;AAAA,IAC9C,SAAS,OAAO;AACd,UAAI,uDAAuD,KAAK;AAChE,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAAA,EACF;AACF;AA/BQ;AAAA,8BAAyB,eAC7B,SACmC;AACnC,QAAM,EAAE,UAAU,gBAAgB,IAAI;AAEtC,QAAM,WAAW,IAAI;AAAA,IACnB;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,EACF;AAEA,QAAM,wBACJ,6BAA6B,eAAe,EAAE,UAAU;AAC1D,QAAM,SAAS,MAAM,SAAS,SAAS,qBAAqB;AAE5D,SAAO;AAAA,IACL,WAAW,QAAQ,YAAY;AAAA,EACjC;AACF;","names":[]}