@metamask-previews/transaction-controller 24.0.0-preview.eb2135e → 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.
- package/CHANGELOG.md +129 -1
- package/dist/TransactionController.js +19 -17
- package/dist/TransactionController.mjs +18 -16
- package/dist/{chunk-H4M66BA3.js → chunk-2MMWLJXS.js} +4 -4
- package/dist/{chunk-7APMBUKB.js → chunk-2MUK5JWA.js} +40 -11
- package/dist/chunk-2MUK5JWA.js.map +1 -0
- package/dist/{chunk-EQ3RRHB7.mjs → chunk-3D3SA6PY.mjs} +2 -2
- package/dist/{chunk-UM4ORJ5B.mjs → chunk-3JYZDVNJ.mjs} +5 -5
- package/dist/{chunk-FDJPXQTF.js → chunk-4S25HUCL.js} +12 -12
- package/dist/{chunk-IC233ZQS.js → chunk-5OQ373JS.js} +10 -10
- package/dist/chunk-6FF5JJVB.mjs +73 -0
- package/dist/chunk-6FF5JJVB.mjs.map +1 -0
- package/dist/{chunk-7MZ57ILQ.mjs → chunk-6KYPLIXG.mjs} +2 -2
- package/dist/{chunk-M7455RU7.js → chunk-7C6ERJJC.js} +45 -20
- package/dist/chunk-7C6ERJJC.js.map +1 -0
- package/dist/{chunk-DEKM6PVG.mjs → chunk-7XPI7KU5.mjs} +2 -2
- package/dist/{chunk-DQP6X25N.mjs → chunk-ARB3VRKV.mjs} +3 -3
- package/dist/chunk-CBKVKDFC.js +73 -0
- package/dist/chunk-CBKVKDFC.js.map +1 -0
- package/dist/{chunk-NUOBUW7C.js → chunk-CXXGL43K.js} +3 -3
- package/dist/chunk-DX4NUE4H.mjs +69 -0
- package/dist/chunk-DX4NUE4H.mjs.map +1 -0
- package/dist/{chunk-BJEESIBE.js → chunk-EXFVMWXE.js} +71 -37
- package/dist/chunk-EXFVMWXE.js.map +1 -0
- package/dist/{chunk-GKTIFXPN.js → chunk-F3CMU2DM.js} +6 -6
- package/dist/{chunk-ZJLZSFOZ.js → chunk-GGFFYP6D.js} +8 -8
- package/dist/chunk-GKCF2RYY.js +69 -0
- package/dist/chunk-GKCF2RYY.js.map +1 -0
- package/dist/{chunk-RI6MVJJN.js → chunk-ITDY6AIZ.js} +6 -1
- package/dist/chunk-ITDY6AIZ.js.map +1 -0
- package/dist/{chunk-2K7J3EY3.mjs → chunk-IZI7FQIN.mjs} +3 -3
- package/dist/{chunk-FS7FRO7B.mjs → chunk-QQKWUHXX.mjs} +5 -5
- package/dist/{chunk-JR6HDRNV.mjs → chunk-QSBIXUMB.mjs} +2 -2
- package/dist/{chunk-I5YZ7QUK.js → chunk-RBMBBUW3.js} +7 -7
- package/dist/{chunk-IUBAETUH.js → chunk-RQKICZYP.js} +3 -3
- package/dist/{chunk-DE3MZYVY.mjs → chunk-SBZB2FLU.mjs} +61 -27
- package/dist/chunk-SBZB2FLU.mjs.map +1 -0
- package/dist/{chunk-HPNXIKFY.js → chunk-TUW3M44L.js} +1 -1
- package/dist/chunk-TUW3M44L.js.map +1 -0
- package/dist/{chunk-Y734U4V6.mjs → chunk-VEREDMI2.mjs} +2 -2
- package/dist/{chunk-ZCQRDZ36.js → chunk-VHFPV3A3.js} +5 -5
- package/dist/{chunk-6MYNWYJK.mjs → chunk-WCJ7I43R.mjs} +39 -10
- package/dist/chunk-WCJ7I43R.mjs.map +1 -0
- package/dist/{chunk-DTEDYRTL.js → chunk-WXQZIUNW.js} +4 -4
- package/dist/{chunk-UKYY2RVS.mjs → chunk-XKNFL657.mjs} +2 -2
- package/dist/{chunk-LM4NUNMT.mjs → chunk-XOIPXDGX.mjs} +1 -1
- package/dist/chunk-XOIPXDGX.mjs.map +1 -0
- package/dist/{chunk-MHM5LRRF.mjs → chunk-Z3HHSD5I.mjs} +6 -1
- package/dist/chunk-Z3HHSD5I.mjs.map +1 -0
- package/dist/{chunk-C67QD5PV.mjs → chunk-Z6HYOGNR.mjs} +44 -19
- package/dist/chunk-Z6HYOGNR.mjs.map +1 -0
- package/dist/constants.js +2 -2
- package/dist/constants.mjs +1 -1
- package/dist/gas-flows/DefaultGasFeeFlow.js +7 -7
- package/dist/gas-flows/DefaultGasFeeFlow.mjs +6 -6
- package/dist/gas-flows/LineaGasFeeFlow.js +8 -8
- package/dist/gas-flows/LineaGasFeeFlow.mjs +7 -7
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.js +11 -0
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.js.map +1 -0
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs +11 -0
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs.map +1 -0
- package/dist/helpers/EtherscanRemoteTransactionSource.js +5 -5
- package/dist/helpers/EtherscanRemoteTransactionSource.mjs +4 -4
- package/dist/helpers/GasFeePoller.js +5 -4
- package/dist/helpers/GasFeePoller.mjs +4 -3
- package/dist/helpers/MultichainTrackingHelper.js +6 -6
- package/dist/helpers/MultichainTrackingHelper.mjs +5 -5
- package/dist/helpers/PendingTransactionTracker.js +1 -1
- package/dist/helpers/PendingTransactionTracker.mjs +1 -1
- package/dist/index.js +22 -20
- package/dist/index.mjs +21 -19
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/TransactionController.d.ts +1 -0
- package/dist/types/TransactionController.d.ts.map +1 -1
- package/dist/types/constants.d.ts +5 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/gas-flows/OptimismLayer1GasFeeFlow.d.ts +10 -0
- package/dist/types/gas-flows/OptimismLayer1GasFeeFlow.d.ts.map +1 -0
- package/dist/types/helpers/GasFeePoller.d.ts +7 -3
- package/dist/types/helpers/GasFeePoller.d.ts.map +1 -1
- package/dist/types/helpers/MultichainTrackingHelper.d.ts +4 -0
- package/dist/types/helpers/MultichainTrackingHelper.d.ts.map +1 -1
- package/dist/types/types.d.ts +32 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/layer1-gas-fee-flow.d.ts +23 -0
- package/dist/types/utils/layer1-gas-fee-flow.d.ts.map +1 -0
- package/dist/types.js +2 -2
- package/dist/types.mjs +1 -1
- package/dist/utils/etherscan.js +3 -3
- package/dist/utils/etherscan.mjs +2 -2
- package/dist/utils/external-transactions.js +1 -1
- package/dist/utils/external-transactions.mjs +1 -1
- package/dist/utils/gas-fees.js +6 -6
- package/dist/utils/gas-fees.mjs +5 -5
- package/dist/utils/gas-flow.js +3 -3
- package/dist/utils/gas-flow.mjs +2 -2
- package/dist/utils/gas.js +3 -3
- package/dist/utils/gas.mjs +2 -2
- package/dist/utils/layer1-gas-fee-flow.js +11 -0
- package/dist/utils/layer1-gas-fee-flow.js.map +1 -0
- package/dist/utils/layer1-gas-fee-flow.mjs +11 -0
- package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -0
- package/dist/utils/simulation-api.js +3 -3
- package/dist/utils/simulation-api.mjs +2 -2
- package/dist/utils/simulation.js +5 -5
- package/dist/utils/simulation.mjs +4 -4
- package/dist/utils/swaps.js +4 -4
- package/dist/utils/swaps.mjs +3 -3
- package/dist/utils/transaction-type.js +1 -1
- package/dist/utils/transaction-type.mjs +1 -1
- package/dist/utils/utils.js +1 -1
- package/dist/utils/utils.mjs +1 -1
- package/dist/utils/validation.js +1 -1
- package/dist/utils/validation.mjs +1 -1
- package/package.json +11 -10
- package/dist/chunk-6MYNWYJK.mjs.map +0 -1
- package/dist/chunk-7APMBUKB.js.map +0 -1
- package/dist/chunk-BJEESIBE.js.map +0 -1
- package/dist/chunk-C67QD5PV.mjs.map +0 -1
- package/dist/chunk-DE3MZYVY.mjs.map +0 -1
- package/dist/chunk-HPNXIKFY.js.map +0 -1
- package/dist/chunk-LM4NUNMT.mjs.map +0 -1
- package/dist/chunk-M7455RU7.js.map +0 -1
- package/dist/chunk-MHM5LRRF.mjs.map +0 -1
- package/dist/chunk-RI6MVJJN.js.map +0 -1
- /package/dist/{chunk-H4M66BA3.js.map → chunk-2MMWLJXS.js.map} +0 -0
- /package/dist/{chunk-EQ3RRHB7.mjs.map → chunk-3D3SA6PY.mjs.map} +0 -0
- /package/dist/{chunk-UM4ORJ5B.mjs.map → chunk-3JYZDVNJ.mjs.map} +0 -0
- /package/dist/{chunk-FDJPXQTF.js.map → chunk-4S25HUCL.js.map} +0 -0
- /package/dist/{chunk-IC233ZQS.js.map → chunk-5OQ373JS.js.map} +0 -0
- /package/dist/{chunk-7MZ57ILQ.mjs.map → chunk-6KYPLIXG.mjs.map} +0 -0
- /package/dist/{chunk-DEKM6PVG.mjs.map → chunk-7XPI7KU5.mjs.map} +0 -0
- /package/dist/{chunk-DQP6X25N.mjs.map → chunk-ARB3VRKV.mjs.map} +0 -0
- /package/dist/{chunk-NUOBUW7C.js.map → chunk-CXXGL43K.js.map} +0 -0
- /package/dist/{chunk-GKTIFXPN.js.map → chunk-F3CMU2DM.js.map} +0 -0
- /package/dist/{chunk-ZJLZSFOZ.js.map → chunk-GGFFYP6D.js.map} +0 -0
- /package/dist/{chunk-2K7J3EY3.mjs.map → chunk-IZI7FQIN.mjs.map} +0 -0
- /package/dist/{chunk-FS7FRO7B.mjs.map → chunk-QQKWUHXX.mjs.map} +0 -0
- /package/dist/{chunk-JR6HDRNV.mjs.map → chunk-QSBIXUMB.mjs.map} +0 -0
- /package/dist/{chunk-I5YZ7QUK.js.map → chunk-RBMBBUW3.js.map} +0 -0
- /package/dist/{chunk-IUBAETUH.js.map → chunk-RQKICZYP.js.map} +0 -0
- /package/dist/{chunk-Y734U4V6.mjs.map → chunk-VEREDMI2.mjs.map} +0 -0
- /package/dist/{chunk-ZCQRDZ36.js.map → chunk-VHFPV3A3.js.map} +0 -0
- /package/dist/{chunk-DTEDYRTL.js.map → chunk-WXQZIUNW.js.map} +0 -0
- /package/dist/{chunk-UKYY2RVS.mjs.map → chunk-XKNFL657.mjs.map} +0 -0
|
@@ -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-
|
|
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-
|
|
62
|
+
//# sourceMappingURL=chunk-6KYPLIXG.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkF3CMU2DMjs = require('./chunk-F3CMU2DM.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js');
|
|
@@ -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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
*
|
|
@@ -283,7 +285,7 @@ startTrackingByNetworkClientId_fn = function(networkClientId) {
|
|
|
283
285
|
} = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _getNetworkClientById).call(this, networkClientId);
|
|
284
286
|
let etherscanRemoteTransactionSource = _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _etherscanRemoteTransactionSourcesMap).get(chainId);
|
|
285
287
|
if (!etherscanRemoteTransactionSource) {
|
|
286
|
-
etherscanRemoteTransactionSource = new (0,
|
|
288
|
+
etherscanRemoteTransactionSource = new (0, _chunkF3CMU2DMjs.EtherscanRemoteTransactionSource)({
|
|
287
289
|
includeTokenTransfers: _chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _incomingTransactionOptions).includeTokenTransfers
|
|
288
290
|
});
|
|
289
291
|
_chunkZ4BLTVTBjs.__privateGet.call(void 0, this, _etherscanRemoteTransactionSourcesMap).set(
|
|
@@ -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-
|
|
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"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CHAIN_IDS
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-Z3HHSD5I.mjs";
|
|
4
4
|
import {
|
|
5
5
|
projectLogger
|
|
6
6
|
} from "./chunk-UQQWZT6C.mjs";
|
|
@@ -43,4 +43,4 @@ function getUrl(chainId) {
|
|
|
43
43
|
export {
|
|
44
44
|
simulateTransactions
|
|
45
45
|
};
|
|
46
|
-
//# sourceMappingURL=chunk-
|
|
46
|
+
//# sourceMappingURL=chunk-7XPI7KU5.mjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SWAP_TRANSACTION_TYPES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3D3SA6PY.mjs";
|
|
4
4
|
import {
|
|
5
5
|
getGasFeeFlow
|
|
6
|
-
} from "./chunk-
|
|
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-
|
|
208
|
+
//# sourceMappingURL=chunk-ARB3VRKV.mjs.map
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
+
|
|
3
|
+
var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js');
|
|
4
|
+
|
|
5
|
+
// src/utils/layer1-gas-fee-flow.ts
|
|
6
|
+
var _common = require('@ethereumjs/common');
|
|
7
|
+
var _tx = require('@ethereumjs/tx');
|
|
8
|
+
var _utils = require('@metamask/utils');
|
|
9
|
+
var _bnjs = require('bn.js'); var _bnjs2 = _interopRequireDefault(_bnjs);
|
|
10
|
+
var _lodash = require('lodash');
|
|
11
|
+
var log = _utils.createModuleLogger.call(void 0, _chunkS6VGOPUYjs.projectLogger, "layer-1-gas-fee-flow");
|
|
12
|
+
async function updateTransactionLayer1GasFee(request) {
|
|
13
|
+
const layer1GasFee = await getTransactionLayer1GasFee(request);
|
|
14
|
+
if (layer1GasFee) {
|
|
15
|
+
const { transactionMeta } = request;
|
|
16
|
+
transactionMeta.layer1GasFee = layer1GasFee;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function getLayer1GasFeeFlow(transactionMeta, layer1GasFeeFlows) {
|
|
20
|
+
return layer1GasFeeFlows.find(
|
|
21
|
+
(layer1GasFeeFlow) => layer1GasFeeFlow.matchesTransaction(transactionMeta)
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
async function getTransactionLayer1GasFee({
|
|
25
|
+
layer1GasFeeFlows,
|
|
26
|
+
provider,
|
|
27
|
+
transactionMeta
|
|
28
|
+
}) {
|
|
29
|
+
const layer1GasFeeFlow = getLayer1GasFeeFlow(
|
|
30
|
+
transactionMeta,
|
|
31
|
+
layer1GasFeeFlows
|
|
32
|
+
);
|
|
33
|
+
if (!layer1GasFeeFlow) {
|
|
34
|
+
log("Layer 1 gas fee flow not found", transactionMeta.id);
|
|
35
|
+
return void 0;
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({
|
|
39
|
+
provider,
|
|
40
|
+
transactionMeta
|
|
41
|
+
});
|
|
42
|
+
return layer1Fee;
|
|
43
|
+
} catch (error) {
|
|
44
|
+
log("Failed to get layer 1 gas fee", transactionMeta.id, error);
|
|
45
|
+
return void 0;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function buildTransactionParams(transactionMeta) {
|
|
49
|
+
return {
|
|
50
|
+
..._lodash.omit.call(void 0, transactionMeta.txParams, "gas"),
|
|
51
|
+
gasLimit: transactionMeta.txParams.gas
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function buildTransactionCommon(transactionMeta) {
|
|
55
|
+
return _common.Common.custom({
|
|
56
|
+
chainId: new (0, _bnjs2.default)(transactionMeta.chainId, 16),
|
|
57
|
+
// Optimism only supports type-0 transactions; it does not support any of
|
|
58
|
+
// the newer EIPs since EIP-155. Source:
|
|
59
|
+
// <https://github.com/ethereum-optimism/optimism/blob/develop/specs/l2geth/transaction-types.md>
|
|
60
|
+
defaultHardfork: _common.Hardfork.London
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
function buildUnserializedTransaction(transactionMeta) {
|
|
64
|
+
const txParams = buildTransactionParams(transactionMeta);
|
|
65
|
+
const common = buildTransactionCommon(transactionMeta);
|
|
66
|
+
return _tx.TransactionFactory.fromTxData(txParams, { common });
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
exports.updateTransactionLayer1GasFee = updateTransactionLayer1GasFee; exports.buildUnserializedTransaction = buildUnserializedTransaction;
|
|
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
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkITDY6AIZjs = require('./chunk-ITDY6AIZ.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js');
|
|
@@ -70,7 +70,7 @@ function getEtherscanApiUrl(chainId, urlParams) {
|
|
|
70
70
|
return url;
|
|
71
71
|
}
|
|
72
72
|
function getEtherscanApiHost(chainId) {
|
|
73
|
-
const networkInfo =
|
|
73
|
+
const networkInfo = _chunkITDY6AIZjs.ETHERSCAN_SUPPORTED_NETWORKS[chainId];
|
|
74
74
|
if (!networkInfo) {
|
|
75
75
|
throw new Error(`Etherscan does not support chain with ID: ${chainId}`);
|
|
76
76
|
}
|
|
@@ -82,4 +82,4 @@ function getEtherscanApiHost(chainId) {
|
|
|
82
82
|
|
|
83
83
|
|
|
84
84
|
exports.fetchEtherscanTransactions = fetchEtherscanTransactions; exports.fetchEtherscanTokenTransactions = fetchEtherscanTokenTransactions; exports.getEtherscanApiHost = getEtherscanApiHost;
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
85
|
+
//# sourceMappingURL=chunk-CXXGL43K.js.map
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import {
|
|
2
|
+
buildUnserializedTransaction
|
|
3
|
+
} from "./chunk-6FF5JJVB.mjs";
|
|
4
|
+
import {
|
|
5
|
+
CHAIN_IDS
|
|
6
|
+
} from "./chunk-Z3HHSD5I.mjs";
|
|
7
|
+
import {
|
|
8
|
+
projectLogger
|
|
9
|
+
} from "./chunk-UQQWZT6C.mjs";
|
|
10
|
+
import {
|
|
11
|
+
__privateAdd,
|
|
12
|
+
__privateMethod
|
|
13
|
+
} from "./chunk-XUI43LEZ.mjs";
|
|
14
|
+
|
|
15
|
+
// src/gas-flows/OptimismLayer1GasFeeFlow.ts
|
|
16
|
+
import { Contract } from "@ethersproject/contracts";
|
|
17
|
+
import { createModuleLogger } from "@metamask/utils";
|
|
18
|
+
var OPTIMISIM_CHAIN_IDS = [
|
|
19
|
+
CHAIN_IDS.OPTIMISM,
|
|
20
|
+
CHAIN_IDS.OPTIMISM_TESTNET
|
|
21
|
+
];
|
|
22
|
+
var log = createModuleLogger(projectLogger, "optimisim-layer1-gas-fee-flow");
|
|
23
|
+
var OPTIMISM_GAS_PRICE_ORACLE_ABI = [
|
|
24
|
+
{
|
|
25
|
+
inputs: [{ internalType: "bytes", name: "_data", type: "bytes" }],
|
|
26
|
+
name: "getL1Fee",
|
|
27
|
+
outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
|
|
28
|
+
stateMutability: "view",
|
|
29
|
+
type: "function"
|
|
30
|
+
}
|
|
31
|
+
];
|
|
32
|
+
var OPTIMISM_GAS_PRICE_ORACLE_ADDRESS = "0x420000000000000000000000000000000000000F";
|
|
33
|
+
var _getOptimisimLayer1GasFee, getOptimisimLayer1GasFee_fn;
|
|
34
|
+
var OptimismLayer1GasFeeFlow = class {
|
|
35
|
+
constructor() {
|
|
36
|
+
__privateAdd(this, _getOptimisimLayer1GasFee);
|
|
37
|
+
}
|
|
38
|
+
matchesTransaction(transactionMeta) {
|
|
39
|
+
return OPTIMISIM_CHAIN_IDS.includes(transactionMeta.chainId);
|
|
40
|
+
}
|
|
41
|
+
async getLayer1Fee(request) {
|
|
42
|
+
try {
|
|
43
|
+
return await __privateMethod(this, _getOptimisimLayer1GasFee, getOptimisimLayer1GasFee_fn).call(this, request);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
log("Failed to get Optimism layer 1 gas fee due to error", error);
|
|
46
|
+
throw new Error(`Failed to get Optimism layer 1 gas fee`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
_getOptimisimLayer1GasFee = new WeakSet();
|
|
51
|
+
getOptimisimLayer1GasFee_fn = async function(request) {
|
|
52
|
+
const { provider, transactionMeta } = request;
|
|
53
|
+
const contract = new Contract(
|
|
54
|
+
OPTIMISM_GAS_PRICE_ORACLE_ADDRESS,
|
|
55
|
+
OPTIMISM_GAS_PRICE_ORACLE_ABI,
|
|
56
|
+
// Network controller provider type is uncompatible with ethers provider
|
|
57
|
+
provider
|
|
58
|
+
);
|
|
59
|
+
const serializedTransaction = buildUnserializedTransaction(transactionMeta).serialize();
|
|
60
|
+
const result = await contract.getL1Fee(serializedTransaction);
|
|
61
|
+
return {
|
|
62
|
+
layer1Fee: result?.toHexString()
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export {
|
|
67
|
+
OptimismLayer1GasFeeFlow
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=chunk-DX4NUE4H.mjs.map
|
|
@@ -0,0 +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 { 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":[]}
|