@metamask/transaction-controller 24.0.0 → 25.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +129 -1
- package/dist/TransactionController.js +39 -1816
- package/dist/TransactionController.js.map +1 -1
- package/dist/TransactionController.mjs +40 -0
- package/dist/TransactionController.mjs.map +1 -0
- package/dist/chunk-2YXA3K67.mjs +62 -0
- package/dist/chunk-2YXA3K67.mjs.map +1 -0
- package/dist/chunk-3D3SA6PY.mjs +211 -0
- package/dist/chunk-3D3SA6PY.mjs.map +1 -0
- package/dist/chunk-4S25HUCL.js +46 -0
- package/dist/chunk-4S25HUCL.js.map +1 -0
- package/dist/chunk-5OQ373JS.js +211 -0
- package/dist/chunk-5OQ373JS.js.map +1 -0
- package/dist/chunk-5XBULBP2.js +399 -0
- package/dist/chunk-5XBULBP2.js.map +1 -0
- package/dist/chunk-72OTU5ZW.mjs +2332 -0
- package/dist/chunk-72OTU5ZW.mjs.map +1 -0
- package/dist/chunk-7LXE4KHV.js +40 -0
- package/dist/chunk-7LXE4KHV.js.map +1 -0
- package/dist/chunk-7XPI7KU5.mjs +46 -0
- package/dist/chunk-7XPI7KU5.mjs.map +1 -0
- package/dist/chunk-BILEZLAT.js +182 -0
- package/dist/chunk-BILEZLAT.js.map +1 -0
- package/dist/chunk-CQBXHAYR.js +121 -0
- package/dist/chunk-CQBXHAYR.js.map +1 -0
- package/dist/chunk-CXXGL43K.js +85 -0
- package/dist/chunk-CXXGL43K.js.map +1 -0
- package/dist/chunk-DTDTOMTB.js +238 -0
- package/dist/chunk-DTDTOMTB.js.map +1 -0
- package/dist/chunk-DTONMSFW.mjs +208 -0
- package/dist/chunk-DTONMSFW.mjs.map +1 -0
- package/dist/chunk-EEMJC7S7.mjs +182 -0
- package/dist/chunk-EEMJC7S7.mjs.map +1 -0
- package/dist/chunk-F3CMU2DM.js +170 -0
- package/dist/chunk-F3CMU2DM.js.map +1 -0
- package/dist/chunk-FRKQ3Z2L.mjs +40 -0
- package/dist/chunk-FRKQ3Z2L.mjs.map +1 -0
- package/dist/chunk-HS277C77.js +75 -0
- package/dist/chunk-HS277C77.js.map +1 -0
- package/dist/chunk-ITDY6AIZ.js +127 -0
- package/dist/chunk-ITDY6AIZ.js.map +1 -0
- package/dist/chunk-IZI7FQIN.mjs +170 -0
- package/dist/chunk-IZI7FQIN.mjs.map +1 -0
- package/dist/chunk-J56A7UCK.mjs +123 -0
- package/dist/chunk-J56A7UCK.mjs.map +1 -0
- package/dist/chunk-JRBREX22.mjs +75 -0
- package/dist/chunk-JRBREX22.mjs.map +1 -0
- package/dist/chunk-JRQHIBG5.mjs +399 -0
- package/dist/chunk-JRQHIBG5.mjs.map +1 -0
- package/dist/chunk-K26EBMGI.mjs +121 -0
- package/dist/chunk-K26EBMGI.mjs.map +1 -0
- package/dist/chunk-KFL2GGZC.mjs +48 -0
- package/dist/chunk-KFL2GGZC.mjs.map +1 -0
- package/dist/chunk-NHRBO3LU.mjs +50 -0
- package/dist/chunk-NHRBO3LU.mjs.map +1 -0
- package/dist/chunk-NM4LTWRU.mjs +76 -0
- package/dist/chunk-NM4LTWRU.mjs.map +1 -0
- package/dist/chunk-NM6OYEPP.mjs +182 -0
- package/dist/chunk-NM6OYEPP.mjs.map +1 -0
- package/dist/chunk-NRWEI43Q.js +320 -0
- package/dist/chunk-NRWEI43Q.js.map +1 -0
- package/dist/chunk-O7H2MC7R.js +62 -0
- package/dist/chunk-O7H2MC7R.js.map +1 -0
- package/dist/chunk-OF6NSLXF.mjs +90 -0
- package/dist/chunk-OF6NSLXF.mjs.map +1 -0
- package/dist/chunk-QDIYZX5V.js +2332 -0
- package/dist/chunk-QDIYZX5V.js.map +1 -0
- package/dist/chunk-QP75SWIQ.js +53 -0
- package/dist/chunk-QP75SWIQ.js.map +1 -0
- package/dist/chunk-QPNEFZB3.js +208 -0
- package/dist/chunk-QPNEFZB3.js.map +1 -0
- package/dist/chunk-QSBIXUMB.mjs +242 -0
- package/dist/chunk-QSBIXUMB.mjs.map +1 -0
- package/dist/chunk-R7NJVDWN.js +48 -0
- package/dist/chunk-R7NJVDWN.js.map +1 -0
- package/dist/chunk-RQKICZYP.js +137 -0
- package/dist/chunk-RQKICZYP.js.map +1 -0
- package/dist/chunk-S6VGOPUY.js +14 -0
- package/dist/chunk-S6VGOPUY.js.map +1 -0
- package/dist/chunk-TXVH44HM.js +90 -0
- package/dist/chunk-TXVH44HM.js.map +1 -0
- package/dist/chunk-UGFBA4GV.js +123 -0
- package/dist/chunk-UGFBA4GV.js.map +1 -0
- package/dist/chunk-UQQWZT6C.mjs +14 -0
- package/dist/chunk-UQQWZT6C.mjs.map +1 -0
- package/dist/chunk-VEREDMI2.mjs +85 -0
- package/dist/chunk-VEREDMI2.mjs.map +1 -0
- package/dist/chunk-VH47Q6TS.js +182 -0
- package/dist/chunk-VH47Q6TS.js.map +1 -0
- package/dist/chunk-W3GAOR7Y.js +76 -0
- package/dist/chunk-W3GAOR7Y.js.map +1 -0
- package/dist/chunk-WXQZIUNW.js +242 -0
- package/dist/chunk-WXQZIUNW.js.map +1 -0
- package/dist/chunk-XGRAHX6T.mjs +53 -0
- package/dist/chunk-XGRAHX6T.mjs.map +1 -0
- package/dist/chunk-XKNFL657.mjs +137 -0
- package/dist/chunk-XKNFL657.mjs.map +1 -0
- package/dist/chunk-XUI43LEZ.mjs +30 -0
- package/dist/chunk-XUI43LEZ.mjs.map +1 -0
- package/dist/chunk-Y7ENNK7L.mjs +238 -0
- package/dist/chunk-Y7ENNK7L.mjs.map +1 -0
- package/dist/chunk-Z3HHSD5I.mjs +127 -0
- package/dist/chunk-Z3HHSD5I.mjs.map +1 -0
- package/dist/chunk-Z4BLTVTB.js +30 -0
- package/dist/chunk-Z4BLTVTB.js.map +1 -0
- package/dist/chunk-ZNZEJDOE.js +50 -0
- package/dist/chunk-ZNZEJDOE.js.map +1 -0
- package/dist/chunk-ZQFMTLZJ.mjs +320 -0
- package/dist/chunk-ZQFMTLZJ.mjs.map +1 -0
- package/dist/constants.js +15 -110
- package/dist/constants.js.map +1 -1
- package/dist/constants.mjs +16 -0
- package/dist/constants.mjs.map +1 -0
- package/dist/gas-flows/DefaultGasFeeFlow.js +14 -77
- package/dist/gas-flows/DefaultGasFeeFlow.js.map +1 -1
- package/dist/gas-flows/DefaultGasFeeFlow.mjs +15 -0
- package/dist/gas-flows/DefaultGasFeeFlow.mjs.map +1 -0
- package/dist/gas-flows/LineaGasFeeFlow.js +15 -110
- package/dist/gas-flows/LineaGasFeeFlow.js.map +1 -1
- package/dist/gas-flows/LineaGasFeeFlow.mjs +16 -0
- package/dist/gas-flows/LineaGasFeeFlow.mjs.map +1 -0
- package/dist/helpers/EtherscanRemoteTransactionSource.js +11 -145
- package/dist/helpers/EtherscanRemoteTransactionSource.js.map +1 -1
- package/dist/helpers/EtherscanRemoteTransactionSource.mjs +12 -0
- package/dist/helpers/EtherscanRemoteTransactionSource.mjs.map +1 -0
- package/dist/helpers/GasFeePoller.js +11 -143
- package/dist/helpers/GasFeePoller.js.map +1 -1
- package/dist/helpers/GasFeePoller.mjs +12 -0
- package/dist/helpers/GasFeePoller.mjs.map +1 -0
- package/dist/helpers/IncomingTransactionHelper.js +8 -205
- package/dist/helpers/IncomingTransactionHelper.js.map +1 -1
- package/dist/helpers/IncomingTransactionHelper.mjs +9 -0
- package/dist/helpers/IncomingTransactionHelper.mjs.map +1 -0
- package/dist/helpers/MultichainTrackingHelper.js +12 -291
- package/dist/helpers/MultichainTrackingHelper.js.map +1 -1
- package/dist/helpers/MultichainTrackingHelper.mjs +13 -0
- package/dist/helpers/MultichainTrackingHelper.mjs.map +1 -0
- package/dist/helpers/PendingTransactionTracker.js +9 -360
- package/dist/helpers/PendingTransactionTracker.js.map +1 -1
- package/dist/helpers/PendingTransactionTracker.mjs +10 -0
- package/dist/helpers/PendingTransactionTracker.mjs.map +1 -0
- package/dist/index.js +57 -26
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +58 -0
- package/dist/index.mjs.map +1 -0
- package/dist/logger.js +11 -8
- package/dist/logger.js.map +1 -1
- package/dist/logger.mjs +12 -0
- package/dist/logger.mjs.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/{TransactionController.d.ts → types/TransactionController.d.ts} +236 -46
- package/dist/types/TransactionController.d.ts.map +1 -0
- package/dist/{constants.d.ts → types/constants.d.ts} +10 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/gas-flows/DefaultGasFeeFlow.d.ts.map +1 -0
- package/dist/types/gas-flows/LineaGasFeeFlow.d.ts.map +1 -0
- package/dist/types/helpers/EtherscanRemoteTransactionSource.d.ts.map +1 -0
- package/dist/{helpers → types/helpers}/GasFeePoller.d.ts +5 -3
- package/dist/types/helpers/GasFeePoller.d.ts.map +1 -0
- package/dist/types/helpers/IncomingTransactionHelper.d.ts.map +1 -0
- package/dist/types/helpers/MultichainTrackingHelper.d.ts.map +1 -0
- package/dist/types/helpers/PendingTransactionTracker.d.ts.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/{types.d.ts → types/types.d.ts} +94 -65
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils/etherscan.d.ts.map +1 -0
- package/dist/types/utils/external-transactions.d.ts.map +1 -0
- package/dist/types/utils/gas-fees.d.ts.map +1 -0
- package/dist/types/utils/gas-flow.d.ts.map +1 -0
- package/dist/types/utils/gas.d.ts.map +1 -0
- package/dist/types/utils/history.d.ts +20 -0
- package/dist/types/utils/history.d.ts.map +1 -0
- package/dist/types/utils/layer1-gas-fee-flow.d.ts +16 -0
- package/dist/types/utils/layer1-gas-fee-flow.d.ts.map +1 -0
- package/dist/types/utils/nonce.d.ts.map +1 -0
- package/dist/types/utils/simulation-api.d.ts +99 -0
- package/dist/types/utils/simulation-api.d.ts.map +1 -0
- package/dist/types/utils/simulation.d.ts +21 -0
- package/dist/types/utils/simulation.d.ts.map +1 -0
- package/dist/{utils → types/utils}/swaps.d.ts +8 -5
- package/dist/types/utils/swaps.d.ts.map +1 -0
- package/dist/types/utils/transaction-type.d.ts.map +1 -0
- package/dist/types/utils/utils.d.ts.map +1 -0
- package/dist/types/utils/validation.d.ts.map +1 -0
- package/dist/types.js +19 -170
- package/dist/types.js.map +1 -1
- package/dist/types.mjs +20 -0
- package/dist/types.mjs.map +1 -0
- package/dist/utils/etherscan.js +13 -118
- package/dist/utils/etherscan.js.map +1 -1
- package/dist/utils/etherscan.mjs +14 -0
- package/dist/utils/etherscan.mjs.map +1 -0
- package/dist/utils/external-transactions.js +8 -35
- package/dist/utils/external-transactions.js.map +1 -1
- package/dist/utils/external-transactions.mjs +9 -0
- package/dist/utils/external-transactions.mjs.map +1 -0
- package/dist/utils/gas-fees.js +15 -200
- package/dist/utils/gas-fees.js.map +1 -1
- package/dist/utils/gas-fees.mjs +16 -0
- package/dist/utils/gas-fees.mjs.map +1 -0
- package/dist/utils/gas-flow.js +10 -52
- package/dist/utils/gas-flow.js.map +1 -1
- package/dist/utils/gas-flow.mjs +11 -0
- package/dist/utils/gas-flow.mjs.map +1 -0
- package/dist/utils/gas.js +19 -133
- package/dist/utils/gas.js.map +1 -1
- package/dist/utils/gas.mjs +20 -0
- package/dist/utils/gas.mjs.map +1 -0
- package/dist/utils/history.js +9 -83
- package/dist/utils/history.js.map +1 -1
- package/dist/utils/history.mjs +10 -0
- package/dist/utils/history.mjs.map +1 -0
- package/dist/utils/layer1-gas-fee-flow.js +9 -0
- package/dist/utils/layer1-gas-fee-flow.js.map +1 -0
- package/dist/utils/layer1-gas-fee-flow.mjs +9 -0
- package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -0
- package/dist/utils/nonce.js +10 -76
- package/dist/utils/nonce.js.map +1 -1
- package/dist/utils/nonce.mjs +11 -0
- package/dist/utils/nonce.mjs.map +1 -0
- package/dist/utils/simulation-api.js +10 -0
- package/dist/utils/simulation-api.js.map +1 -0
- package/dist/utils/simulation-api.mjs +10 -0
- package/dist/utils/simulation-api.mjs.map +1 -0
- package/dist/utils/simulation.js +12 -0
- package/dist/utils/simulation.js.map +1 -0
- package/dist/utils/simulation.mjs +12 -0
- package/dist/utils/simulation.mjs.map +1 -0
- package/dist/utils/swaps.js +23 -256
- package/dist/utils/swaps.js.map +1 -1
- package/dist/utils/swaps.mjs +24 -0
- package/dist/utils/swaps.mjs.map +1 -0
- package/dist/utils/transaction-type.js +10 -120
- package/dist/utils/transaction-type.js.map +1 -1
- package/dist/utils/transaction-type.mjs +11 -0
- package/dist/utils/transaction-type.mjs.map +1 -0
- package/dist/utils/utils.js +32 -160
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/utils.mjs +33 -0
- package/dist/utils/utils.mjs.map +1 -0
- package/dist/utils/validation.js +11 -258
- package/dist/utils/validation.js.map +1 -1
- package/dist/utils/validation.mjs +12 -0
- package/dist/utils/validation.mjs.map +1 -0
- package/package.json +22 -10
- package/dist/TransactionController.d.ts.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/gas-flows/DefaultGasFeeFlow.d.ts.map +0 -1
- package/dist/gas-flows/LineaGasFeeFlow.d.ts.map +0 -1
- package/dist/helpers/EtherscanRemoteTransactionSource.d.ts.map +0 -1
- package/dist/helpers/GasFeePoller.d.ts.map +0 -1
- package/dist/helpers/IncomingTransactionHelper.d.ts.map +0 -1
- package/dist/helpers/MultichainTrackingHelper.d.ts.map +0 -1
- package/dist/helpers/PendingTransactionTracker.d.ts.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/logger.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/etherscan.d.ts.map +0 -1
- package/dist/utils/external-transactions.d.ts.map +0 -1
- package/dist/utils/gas-fees.d.ts.map +0 -1
- package/dist/utils/gas-flow.d.ts.map +0 -1
- package/dist/utils/gas.d.ts.map +0 -1
- package/dist/utils/history.d.ts +0 -15
- package/dist/utils/history.d.ts.map +0 -1
- package/dist/utils/nonce.d.ts.map +0 -1
- package/dist/utils/swaps.d.ts.map +0 -1
- package/dist/utils/transaction-type.d.ts.map +0 -1
- package/dist/utils/utils.d.ts.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
- /package/dist/{gas-flows → types/gas-flows}/DefaultGasFeeFlow.d.ts +0 -0
- /package/dist/{gas-flows → types/gas-flows}/LineaGasFeeFlow.d.ts +0 -0
- /package/dist/{helpers → types/helpers}/EtherscanRemoteTransactionSource.d.ts +0 -0
- /package/dist/{helpers → types/helpers}/IncomingTransactionHelper.d.ts +0 -0
- /package/dist/{helpers → types/helpers}/MultichainTrackingHelper.d.ts +0 -0
- /package/dist/{helpers → types/helpers}/PendingTransactionTracker.d.ts +0 -0
- /package/dist/{logger.d.ts → types/logger.d.ts} +0 -0
- /package/dist/{utils → types/utils}/etherscan.d.ts +0 -0
- /package/dist/{utils → types/utils}/external-transactions.d.ts +0 -0
- /package/dist/{utils → types/utils}/gas-fees.d.ts +0 -0
- /package/dist/{utils → types/utils}/gas-flow.d.ts +0 -0
- /package/dist/{utils → types/utils}/gas.d.ts +0 -0
- /package/dist/{utils → types/utils}/nonce.d.ts +0 -0
- /package/dist/{utils → types/utils}/transaction-type.d.ts +0 -0
- /package/dist/{utils → types/utils}/utils.d.ts +0 -0
- /package/dist/{utils → types/utils}/validation.d.ts +0 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var __accessCheck = (obj, member, msg) => {
|
|
2
|
+
if (!member.has(obj))
|
|
3
|
+
throw TypeError("Cannot " + msg);
|
|
4
|
+
};
|
|
5
|
+
var __privateGet = (obj, member, getter) => {
|
|
6
|
+
__accessCheck(obj, member, "read from private field");
|
|
7
|
+
return getter ? getter.call(obj) : member.get(obj);
|
|
8
|
+
};
|
|
9
|
+
var __privateAdd = (obj, member, value) => {
|
|
10
|
+
if (member.has(obj))
|
|
11
|
+
throw TypeError("Cannot add the same private member more than once");
|
|
12
|
+
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
13
|
+
};
|
|
14
|
+
var __privateSet = (obj, member, value, setter) => {
|
|
15
|
+
__accessCheck(obj, member, "write to private field");
|
|
16
|
+
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
var __privateMethod = (obj, member, method) => {
|
|
20
|
+
__accessCheck(obj, member, "access private method");
|
|
21
|
+
return method;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
exports.__privateGet = __privateGet; exports.__privateAdd = __privateAdd; exports.__privateSet = __privateSet; exports.__privateMethod = __privateMethod;
|
|
30
|
+
//# sourceMappingURL=chunk-Z4BLTVTB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js');
|
|
5
|
+
|
|
6
|
+
// src/utils/nonce.ts
|
|
7
|
+
var _controllerutils = require('@metamask/controller-utils');
|
|
8
|
+
var log = _chunkS6VGOPUYjs.createModuleLogger.call(void 0, _chunkS6VGOPUYjs.projectLogger, "nonce");
|
|
9
|
+
async function getNextNonce(txMeta, getNonceLock) {
|
|
10
|
+
const {
|
|
11
|
+
customNonceValue,
|
|
12
|
+
txParams: { from, nonce: existingNonce }
|
|
13
|
+
} = txMeta;
|
|
14
|
+
const customNonce = customNonceValue ? _controllerutils.toHex.call(void 0, customNonceValue) : void 0;
|
|
15
|
+
if (customNonce) {
|
|
16
|
+
log("Using custom nonce", customNonce);
|
|
17
|
+
return [customNonce, void 0];
|
|
18
|
+
}
|
|
19
|
+
if (existingNonce) {
|
|
20
|
+
log("Using existing nonce", existingNonce);
|
|
21
|
+
return [existingNonce, void 0];
|
|
22
|
+
}
|
|
23
|
+
const nonceLock = await getNonceLock(from);
|
|
24
|
+
const nonce = _controllerutils.toHex.call(void 0, nonceLock.nextNonce);
|
|
25
|
+
const releaseLock = nonceLock.releaseLock.bind(nonceLock);
|
|
26
|
+
log("Using nonce from nonce tracker", nonce, nonceLock.nonceDetails);
|
|
27
|
+
return [nonce, releaseLock];
|
|
28
|
+
}
|
|
29
|
+
function getAndFormatTransactionsForNonceTracker(currentChainId, fromAddress, transactionStatus, transactions) {
|
|
30
|
+
return transactions.filter(
|
|
31
|
+
({ chainId, isTransfer, isUserOperation, status, txParams: { from } }) => !isTransfer && !isUserOperation && chainId === currentChainId && status === transactionStatus && from.toLowerCase() === fromAddress.toLowerCase()
|
|
32
|
+
).map(({ status, txParams: { from, gas, value, nonce } }) => {
|
|
33
|
+
return {
|
|
34
|
+
status,
|
|
35
|
+
history: [{}],
|
|
36
|
+
txParams: {
|
|
37
|
+
from: from ?? "",
|
|
38
|
+
gas: gas ?? "",
|
|
39
|
+
value: value ?? "",
|
|
40
|
+
nonce: nonce ?? ""
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
exports.getNextNonce = getNextNonce; exports.getAndFormatTransactionsForNonceTracker = getAndFormatTransactionsForNonceTracker;
|
|
50
|
+
//# sourceMappingURL=chunk-ZNZEJDOE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/nonce.ts"],"names":[],"mappings":";;;;;;AAAA,SAAS,aAAa;AAStB,IAAM,MAAM,mBAAmB,eAAe,OAAO;AASrD,eAAsB,aACpB,QACA,cAC6C;AAC7C,QAAM;AAAA,IACJ;AAAA,IACA,UAAU,EAAE,MAAM,OAAO,cAAc;AAAA,EACzC,IAAI;AAEJ,QAAM,cAAc,mBAAmB,MAAM,gBAAgB,IAAI;AAEjE,MAAI,aAAa;AACf,QAAI,sBAAsB,WAAW;AACrC,WAAO,CAAC,aAAa,MAAS;AAAA,EAChC;AAEA,MAAI,eAAe;AACjB,QAAI,wBAAwB,aAAa;AACzC,WAAO,CAAC,eAAe,MAAS;AAAA,EAClC;AAEA,QAAM,YAAY,MAAM,aAAa,IAAI;AACzC,QAAM,QAAQ,MAAM,UAAU,SAAS;AACvC,QAAM,cAAc,UAAU,YAAY,KAAK,SAAS;AAExD,MAAI,kCAAkC,OAAO,UAAU,YAAY;AAEnE,SAAO,CAAC,OAAO,WAAW;AAC5B;AAWO,SAAS,wCACd,gBACA,aACA,mBACA,cAC2B;AAC3B,SAAO,aACJ;AAAA,IACC,CAAC,EAAE,SAAS,YAAY,iBAAiB,QAAQ,UAAU,EAAE,KAAK,EAAE,MAClE,CAAC,cACD,CAAC,mBACD,YAAY,kBACZ,WAAW,qBACX,KAAK,YAAY,MAAM,YAAY,YAAY;AAAA,EACnD,EACC,IAAI,CAAC,EAAE,QAAQ,UAAU,EAAE,MAAM,KAAK,OAAO,MAAM,EAAE,MAAM;AAK1D,WAAO;AAAA,MACL;AAAA,MACA,SAAS,CAAC,CAAC,CAAC;AAAA,MACZ,UAAU;AAAA,QACR,MAAM,QAAQ;AAAA,QACd,KAAK,OAAO;AAAA,QACZ,OAAO,SAAS;AAAA,QAChB,OAAO,SAAS;AAAA,MAClB;AAAA,IACF;AAAA,EACF,CAAC;AACL","sourcesContent":["import { toHex } from '@metamask/controller-utils';\nimport type {\n NonceLock,\n Transaction as NonceTrackerTransaction,\n} from 'nonce-tracker';\n\nimport { createModuleLogger, projectLogger } from '../logger';\nimport type { TransactionMeta, TransactionStatus } from '../types';\n\nconst log = createModuleLogger(projectLogger, 'nonce');\n\n/**\n * Determine the next nonce to be used for a transaction.\n *\n * @param txMeta - The transaction metadata.\n * @param getNonceLock - An anonymous function that acquires the nonce lock for an address\n * @returns The next hexadecimal nonce to be used for the given transaction, and optionally a function to release the nonce lock.\n */\nexport async function getNextNonce(\n txMeta: TransactionMeta,\n getNonceLock: (address: string) => Promise<NonceLock>,\n): Promise<[string, (() => void) | undefined]> {\n const {\n customNonceValue,\n txParams: { from, nonce: existingNonce },\n } = txMeta;\n\n const customNonce = customNonceValue ? toHex(customNonceValue) : undefined;\n\n if (customNonce) {\n log('Using custom nonce', customNonce);\n return [customNonce, undefined];\n }\n\n if (existingNonce) {\n log('Using existing nonce', existingNonce);\n return [existingNonce, undefined];\n }\n\n const nonceLock = await getNonceLock(from);\n const nonce = toHex(nonceLock.nextNonce);\n const releaseLock = nonceLock.releaseLock.bind(nonceLock);\n\n log('Using nonce from nonce tracker', nonce, nonceLock.nonceDetails);\n\n return [nonce, releaseLock];\n}\n\n/**\n * Filter and format transactions for the nonce tracker.\n *\n * @param currentChainId - Chain ID of the current network.\n * @param fromAddress - Address of the account from which the transactions to filter from are sent.\n * @param transactionStatus - Status of the transactions for which to filter.\n * @param transactions - Array of transactionMeta objects that have been prefiltered.\n * @returns Array of transactions formatted for the nonce tracker.\n */\nexport function getAndFormatTransactionsForNonceTracker(\n currentChainId: string,\n fromAddress: string,\n transactionStatus: TransactionStatus,\n transactions: TransactionMeta[],\n): NonceTrackerTransaction[] {\n return transactions\n .filter(\n ({ chainId, isTransfer, isUserOperation, status, txParams: { from } }) =>\n !isTransfer &&\n !isUserOperation &&\n chainId === currentChainId &&\n status === transactionStatus &&\n from.toLowerCase() === fromAddress.toLowerCase(),\n )\n .map(({ status, txParams: { from, gas, value, nonce } }) => {\n // the only value we care about is the nonce\n // but we need to return the other values to satisfy the type\n // TODO: refactor nonceTracker to not require this\n /* istanbul ignore next */\n return {\n status,\n history: [{}],\n txParams: {\n from: from ?? '',\n gas: gas ?? '',\n value: value ?? '',\n nonce: nonce ?? '',\n },\n };\n });\n}\n"]}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import {
|
|
2
|
+
EtherscanRemoteTransactionSource
|
|
3
|
+
} from "./chunk-IZI7FQIN.mjs";
|
|
4
|
+
import {
|
|
5
|
+
incomingTransactionsLogger
|
|
6
|
+
} from "./chunk-UQQWZT6C.mjs";
|
|
7
|
+
import {
|
|
8
|
+
__privateAdd,
|
|
9
|
+
__privateGet,
|
|
10
|
+
__privateMethod,
|
|
11
|
+
__privateSet
|
|
12
|
+
} from "./chunk-XUI43LEZ.mjs";
|
|
13
|
+
|
|
14
|
+
// src/helpers/MultichainTrackingHelper.ts
|
|
15
|
+
import EthQuery from "@metamask/eth-query";
|
|
16
|
+
import { Mutex } from "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;
|
|
18
|
+
var MultichainTrackingHelper = class {
|
|
19
|
+
constructor({
|
|
20
|
+
isMultichainEnabled,
|
|
21
|
+
provider,
|
|
22
|
+
nonceTracker,
|
|
23
|
+
incomingTransactionOptions,
|
|
24
|
+
findNetworkClientIdByChainId,
|
|
25
|
+
getNetworkClientById,
|
|
26
|
+
getNetworkClientRegistry,
|
|
27
|
+
removeIncomingTransactionHelperListeners,
|
|
28
|
+
removePendingTransactionTrackerListeners,
|
|
29
|
+
createNonceTracker,
|
|
30
|
+
createIncomingTransactionHelper,
|
|
31
|
+
createPendingTransactionTracker,
|
|
32
|
+
onNetworkStateChange
|
|
33
|
+
}) {
|
|
34
|
+
__privateAdd(this, _stopTrackingByNetworkClientId);
|
|
35
|
+
__privateAdd(this, _startTrackingByNetworkClientId);
|
|
36
|
+
__privateAdd(this, _isMultichainEnabled, void 0);
|
|
37
|
+
__privateAdd(this, _provider, void 0);
|
|
38
|
+
__privateAdd(this, _nonceTracker, void 0);
|
|
39
|
+
__privateAdd(this, _incomingTransactionOptions, void 0);
|
|
40
|
+
__privateAdd(this, _findNetworkClientIdByChainId, void 0);
|
|
41
|
+
__privateAdd(this, _getNetworkClientById, void 0);
|
|
42
|
+
__privateAdd(this, _getNetworkClientRegistry, void 0);
|
|
43
|
+
__privateAdd(this, _removeIncomingTransactionHelperListeners, void 0);
|
|
44
|
+
__privateAdd(this, _removePendingTransactionTrackerListeners, void 0);
|
|
45
|
+
__privateAdd(this, _createNonceTracker, void 0);
|
|
46
|
+
__privateAdd(this, _createIncomingTransactionHelper, void 0);
|
|
47
|
+
__privateAdd(this, _createPendingTransactionTracker, void 0);
|
|
48
|
+
__privateAdd(this, _nonceMutexesByChainId, /* @__PURE__ */ new Map());
|
|
49
|
+
__privateAdd(this, _trackingMap, /* @__PURE__ */ new Map());
|
|
50
|
+
__privateAdd(this, _etherscanRemoteTransactionSourcesMap, /* @__PURE__ */ new Map());
|
|
51
|
+
this.checkForPendingTransactionAndStartPolling = () => {
|
|
52
|
+
for (const [, trackers] of __privateGet(this, _trackingMap)) {
|
|
53
|
+
trackers.pendingTransactionTracker.startIfPendingTransactions();
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
__privateAdd(this, _refreshTrackingMap, (networkClients) => {
|
|
57
|
+
__privateGet(this, _refreshEtherscanRemoteTransactionSources).call(this, networkClients);
|
|
58
|
+
const networkClientIds = Object.keys(networkClients);
|
|
59
|
+
const existingNetworkClientIds = Array.from(__privateGet(this, _trackingMap).keys());
|
|
60
|
+
const networkClientIdsToRemove = existingNetworkClientIds.filter(
|
|
61
|
+
(id) => !networkClientIds.includes(id)
|
|
62
|
+
);
|
|
63
|
+
networkClientIdsToRemove.forEach((id) => {
|
|
64
|
+
__privateMethod(this, _stopTrackingByNetworkClientId, stopTrackingByNetworkClientId_fn).call(this, id);
|
|
65
|
+
});
|
|
66
|
+
const networkClientIdsToAdd = networkClientIds.filter(
|
|
67
|
+
(id) => !existingNetworkClientIds.includes(id)
|
|
68
|
+
);
|
|
69
|
+
networkClientIdsToAdd.forEach((id) => {
|
|
70
|
+
__privateMethod(this, _startTrackingByNetworkClientId, startTrackingByNetworkClientId_fn).call(this, id);
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
__privateAdd(this, _refreshEtherscanRemoteTransactionSources, (networkClients) => {
|
|
74
|
+
const chainIdsInRegistry = /* @__PURE__ */ new Set();
|
|
75
|
+
Object.values(networkClients).forEach(
|
|
76
|
+
(networkClient) => chainIdsInRegistry.add(networkClient.configuration.chainId)
|
|
77
|
+
);
|
|
78
|
+
const existingChainIds = Array.from(
|
|
79
|
+
__privateGet(this, _etherscanRemoteTransactionSourcesMap).keys()
|
|
80
|
+
);
|
|
81
|
+
const chainIdsToRemove = existingChainIds.filter(
|
|
82
|
+
(chainId) => !chainIdsInRegistry.has(chainId)
|
|
83
|
+
);
|
|
84
|
+
chainIdsToRemove.forEach((chainId) => {
|
|
85
|
+
__privateGet(this, _etherscanRemoteTransactionSourcesMap).delete(chainId);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
__privateSet(this, _isMultichainEnabled, isMultichainEnabled);
|
|
89
|
+
__privateSet(this, _provider, provider);
|
|
90
|
+
__privateSet(this, _nonceTracker, nonceTracker);
|
|
91
|
+
__privateSet(this, _incomingTransactionOptions, incomingTransactionOptions);
|
|
92
|
+
__privateSet(this, _findNetworkClientIdByChainId, findNetworkClientIdByChainId);
|
|
93
|
+
__privateSet(this, _getNetworkClientById, getNetworkClientById);
|
|
94
|
+
__privateSet(this, _getNetworkClientRegistry, getNetworkClientRegistry);
|
|
95
|
+
__privateSet(this, _removeIncomingTransactionHelperListeners, removeIncomingTransactionHelperListeners);
|
|
96
|
+
__privateSet(this, _removePendingTransactionTrackerListeners, removePendingTransactionTrackerListeners);
|
|
97
|
+
__privateSet(this, _createNonceTracker, createNonceTracker);
|
|
98
|
+
__privateSet(this, _createIncomingTransactionHelper, createIncomingTransactionHelper);
|
|
99
|
+
__privateSet(this, _createPendingTransactionTracker, createPendingTransactionTracker);
|
|
100
|
+
onNetworkStateChange((_, patches) => {
|
|
101
|
+
if (__privateGet(this, _isMultichainEnabled)) {
|
|
102
|
+
const networkClients = __privateGet(this, _getNetworkClientRegistry).call(this);
|
|
103
|
+
patches.forEach(({ op, path }) => {
|
|
104
|
+
if (op === "remove" && path[0] === "networkConfigurations") {
|
|
105
|
+
const networkClientId = path[1];
|
|
106
|
+
delete networkClients[networkClientId];
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
__privateGet(this, _refreshTrackingMap).call(this, networkClients);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
initialize() {
|
|
114
|
+
if (!__privateGet(this, _isMultichainEnabled)) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const networkClients = __privateGet(this, _getNetworkClientRegistry).call(this);
|
|
118
|
+
__privateGet(this, _refreshTrackingMap).call(this, networkClients);
|
|
119
|
+
}
|
|
120
|
+
has(networkClientId) {
|
|
121
|
+
return __privateGet(this, _trackingMap).has(networkClientId);
|
|
122
|
+
}
|
|
123
|
+
getEthQuery({
|
|
124
|
+
networkClientId,
|
|
125
|
+
chainId
|
|
126
|
+
} = {}) {
|
|
127
|
+
if (!__privateGet(this, _isMultichainEnabled)) {
|
|
128
|
+
return new EthQuery(__privateGet(this, _provider));
|
|
129
|
+
}
|
|
130
|
+
let networkClient;
|
|
131
|
+
if (networkClientId) {
|
|
132
|
+
try {
|
|
133
|
+
networkClient = __privateGet(this, _getNetworkClientById).call(this, networkClientId);
|
|
134
|
+
} catch (err) {
|
|
135
|
+
incomingTransactionsLogger("failed to get network client by networkClientId");
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (!networkClient && chainId) {
|
|
139
|
+
try {
|
|
140
|
+
networkClientId = __privateGet(this, _findNetworkClientIdByChainId).call(this, chainId);
|
|
141
|
+
networkClient = __privateGet(this, _getNetworkClientById).call(this, networkClientId);
|
|
142
|
+
} catch (err) {
|
|
143
|
+
incomingTransactionsLogger("failed to get network client by chainId");
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
if (networkClient) {
|
|
147
|
+
return new EthQuery(networkClient.provider);
|
|
148
|
+
}
|
|
149
|
+
return new EthQuery(__privateGet(this, _provider));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Gets the mutex intended to guard the nonceTracker for a particular chainId and key .
|
|
153
|
+
*
|
|
154
|
+
* @param opts - The options object.
|
|
155
|
+
* @param opts.chainId - The hex chainId.
|
|
156
|
+
* @param opts.key - The hex address (or constant) pertaining to the chainId
|
|
157
|
+
* @returns Mutex instance for the given chainId and key pair
|
|
158
|
+
*/
|
|
159
|
+
async acquireNonceLockForChainIdKey({
|
|
160
|
+
chainId,
|
|
161
|
+
key = "global"
|
|
162
|
+
}) {
|
|
163
|
+
let nonceMutexesForChainId = __privateGet(this, _nonceMutexesByChainId).get(chainId);
|
|
164
|
+
if (!nonceMutexesForChainId) {
|
|
165
|
+
nonceMutexesForChainId = /* @__PURE__ */ new Map();
|
|
166
|
+
__privateGet(this, _nonceMutexesByChainId).set(chainId, nonceMutexesForChainId);
|
|
167
|
+
}
|
|
168
|
+
let nonceMutexForKey = nonceMutexesForChainId.get(key);
|
|
169
|
+
if (!nonceMutexForKey) {
|
|
170
|
+
nonceMutexForKey = new Mutex();
|
|
171
|
+
nonceMutexesForChainId.set(key, nonceMutexForKey);
|
|
172
|
+
}
|
|
173
|
+
return await nonceMutexForKey.acquire();
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Gets the next nonce according to the nonce-tracker.
|
|
177
|
+
* Ensure `releaseLock` is called once processing of the `nonce` value is complete.
|
|
178
|
+
*
|
|
179
|
+
* @param address - The hex string address for the transaction.
|
|
180
|
+
* @param networkClientId - The network client ID for the transaction, used to fetch the correct nonce tracker.
|
|
181
|
+
* @returns object with the `nextNonce` `nonceDetails`, and the releaseLock.
|
|
182
|
+
*/
|
|
183
|
+
async getNonceLock(address, networkClientId) {
|
|
184
|
+
let releaseLockForChainIdKey;
|
|
185
|
+
let nonceTracker = __privateGet(this, _nonceTracker);
|
|
186
|
+
if (networkClientId && __privateGet(this, _isMultichainEnabled)) {
|
|
187
|
+
const networkClient = __privateGet(this, _getNetworkClientById).call(this, networkClientId);
|
|
188
|
+
releaseLockForChainIdKey = await this.acquireNonceLockForChainIdKey({
|
|
189
|
+
chainId: networkClient.configuration.chainId,
|
|
190
|
+
key: address
|
|
191
|
+
});
|
|
192
|
+
const trackers = __privateGet(this, _trackingMap).get(networkClientId);
|
|
193
|
+
if (!trackers) {
|
|
194
|
+
throw new Error("missing nonceTracker for networkClientId");
|
|
195
|
+
}
|
|
196
|
+
nonceTracker = trackers.nonceTracker;
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
const nonceLock = await nonceTracker.getNonceLock(address);
|
|
200
|
+
return {
|
|
201
|
+
...nonceLock,
|
|
202
|
+
releaseLock: () => {
|
|
203
|
+
nonceLock.releaseLock();
|
|
204
|
+
releaseLockForChainIdKey?.();
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
} catch (err) {
|
|
208
|
+
releaseLockForChainIdKey?.();
|
|
209
|
+
throw err;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
startIncomingTransactionPolling(networkClientIds = []) {
|
|
213
|
+
networkClientIds.forEach((networkClientId) => {
|
|
214
|
+
__privateGet(this, _trackingMap).get(networkClientId)?.incomingTransactionHelper.start();
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
stopIncomingTransactionPolling(networkClientIds = []) {
|
|
218
|
+
networkClientIds.forEach((networkClientId) => {
|
|
219
|
+
__privateGet(this, _trackingMap).get(networkClientId)?.incomingTransactionHelper.stop();
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
stopAllIncomingTransactionPolling() {
|
|
223
|
+
for (const [, trackers] of __privateGet(this, _trackingMap)) {
|
|
224
|
+
trackers.incomingTransactionHelper.stop();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
async updateIncomingTransactions(networkClientIds = []) {
|
|
228
|
+
const promises = await Promise.allSettled(
|
|
229
|
+
networkClientIds.map(async (networkClientId) => {
|
|
230
|
+
return await __privateGet(this, _trackingMap).get(networkClientId)?.incomingTransactionHelper.update();
|
|
231
|
+
})
|
|
232
|
+
);
|
|
233
|
+
promises.filter((result) => result.status === "rejected").forEach((result) => {
|
|
234
|
+
incomingTransactionsLogger(
|
|
235
|
+
"failed to update incoming transactions",
|
|
236
|
+
result.reason
|
|
237
|
+
);
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
stopAllTracking() {
|
|
241
|
+
for (const [networkClientId] of __privateGet(this, _trackingMap)) {
|
|
242
|
+
__privateMethod(this, _stopTrackingByNetworkClientId, stopTrackingByNetworkClientId_fn).call(this, networkClientId);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
_isMultichainEnabled = new WeakMap();
|
|
247
|
+
_provider = new WeakMap();
|
|
248
|
+
_nonceTracker = new WeakMap();
|
|
249
|
+
_incomingTransactionOptions = new WeakMap();
|
|
250
|
+
_findNetworkClientIdByChainId = new WeakMap();
|
|
251
|
+
_getNetworkClientById = new WeakMap();
|
|
252
|
+
_getNetworkClientRegistry = new WeakMap();
|
|
253
|
+
_removeIncomingTransactionHelperListeners = new WeakMap();
|
|
254
|
+
_removePendingTransactionTrackerListeners = new WeakMap();
|
|
255
|
+
_createNonceTracker = new WeakMap();
|
|
256
|
+
_createIncomingTransactionHelper = new WeakMap();
|
|
257
|
+
_createPendingTransactionTracker = new WeakMap();
|
|
258
|
+
_nonceMutexesByChainId = new WeakMap();
|
|
259
|
+
_trackingMap = new WeakMap();
|
|
260
|
+
_etherscanRemoteTransactionSourcesMap = new WeakMap();
|
|
261
|
+
_refreshTrackingMap = new WeakMap();
|
|
262
|
+
_stopTrackingByNetworkClientId = new WeakSet();
|
|
263
|
+
stopTrackingByNetworkClientId_fn = function(networkClientId) {
|
|
264
|
+
const trackers = __privateGet(this, _trackingMap).get(networkClientId);
|
|
265
|
+
if (trackers) {
|
|
266
|
+
trackers.pendingTransactionTracker.stop();
|
|
267
|
+
__privateGet(this, _removePendingTransactionTrackerListeners).call(this, trackers.pendingTransactionTracker);
|
|
268
|
+
trackers.incomingTransactionHelper.stop();
|
|
269
|
+
__privateGet(this, _removeIncomingTransactionHelperListeners).call(this, trackers.incomingTransactionHelper);
|
|
270
|
+
__privateGet(this, _trackingMap).delete(networkClientId);
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
_startTrackingByNetworkClientId = new WeakSet();
|
|
274
|
+
startTrackingByNetworkClientId_fn = function(networkClientId) {
|
|
275
|
+
const trackers = __privateGet(this, _trackingMap).get(networkClientId);
|
|
276
|
+
if (trackers) {
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
const {
|
|
280
|
+
provider,
|
|
281
|
+
blockTracker,
|
|
282
|
+
configuration: { chainId }
|
|
283
|
+
} = __privateGet(this, _getNetworkClientById).call(this, networkClientId);
|
|
284
|
+
let etherscanRemoteTransactionSource = __privateGet(this, _etherscanRemoteTransactionSourcesMap).get(chainId);
|
|
285
|
+
if (!etherscanRemoteTransactionSource) {
|
|
286
|
+
etherscanRemoteTransactionSource = new EtherscanRemoteTransactionSource({
|
|
287
|
+
includeTokenTransfers: __privateGet(this, _incomingTransactionOptions).includeTokenTransfers
|
|
288
|
+
});
|
|
289
|
+
__privateGet(this, _etherscanRemoteTransactionSourcesMap).set(
|
|
290
|
+
chainId,
|
|
291
|
+
etherscanRemoteTransactionSource
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
const nonceTracker = __privateGet(this, _createNonceTracker).call(this, {
|
|
295
|
+
provider,
|
|
296
|
+
blockTracker,
|
|
297
|
+
chainId
|
|
298
|
+
});
|
|
299
|
+
const incomingTransactionHelper = __privateGet(this, _createIncomingTransactionHelper).call(this, {
|
|
300
|
+
blockTracker,
|
|
301
|
+
etherscanRemoteTransactionSource,
|
|
302
|
+
chainId
|
|
303
|
+
});
|
|
304
|
+
const pendingTransactionTracker = __privateGet(this, _createPendingTransactionTracker).call(this, {
|
|
305
|
+
provider,
|
|
306
|
+
blockTracker,
|
|
307
|
+
chainId
|
|
308
|
+
});
|
|
309
|
+
__privateGet(this, _trackingMap).set(networkClientId, {
|
|
310
|
+
nonceTracker,
|
|
311
|
+
incomingTransactionHelper,
|
|
312
|
+
pendingTransactionTracker
|
|
313
|
+
});
|
|
314
|
+
};
|
|
315
|
+
_refreshEtherscanRemoteTransactionSources = new WeakMap();
|
|
316
|
+
|
|
317
|
+
export {
|
|
318
|
+
MultichainTrackingHelper
|
|
319
|
+
};
|
|
320
|
+
//# sourceMappingURL=chunk-ZQFMTLZJ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/helpers/MultichainTrackingHelper.ts"],"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 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\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 /**\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"],"mappings":"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","names":[]}
|
package/dist/constants.js
CHANGED
|
@@ -1,111 +1,16 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
FANTOM_TESTNET: '0xfa2',
|
|
17
|
-
SEPOLIA: '0xaa36a7',
|
|
18
|
-
LINEA_GOERLI: '0xe704',
|
|
19
|
-
LINEA_MAINNET: '0xe708',
|
|
20
|
-
MOONBEAM: '0x504',
|
|
21
|
-
MOONBEAM_TESTNET: '0x507',
|
|
22
|
-
MOONRIVER: '0x505',
|
|
23
|
-
GNOSIS: '0x64',
|
|
24
|
-
ARBITRUM: '0xa4b1',
|
|
25
|
-
ZKSYNC_ERA: '0x144',
|
|
26
|
-
};
|
|
27
|
-
exports.DEFAULT_ETHERSCAN_DOMAIN = 'etherscan.io';
|
|
28
|
-
exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = 'api';
|
|
29
|
-
exports.ETHERSCAN_SUPPORTED_NETWORKS = {
|
|
30
|
-
[exports.CHAIN_IDS.GOERLI]: {
|
|
31
|
-
domain: exports.DEFAULT_ETHERSCAN_DOMAIN,
|
|
32
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,
|
|
33
|
-
},
|
|
34
|
-
[exports.CHAIN_IDS.MAINNET]: {
|
|
35
|
-
domain: exports.DEFAULT_ETHERSCAN_DOMAIN,
|
|
36
|
-
subdomain: exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
|
|
37
|
-
},
|
|
38
|
-
[exports.CHAIN_IDS.SEPOLIA]: {
|
|
39
|
-
domain: exports.DEFAULT_ETHERSCAN_DOMAIN,
|
|
40
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,
|
|
41
|
-
},
|
|
42
|
-
[exports.CHAIN_IDS.LINEA_GOERLI]: {
|
|
43
|
-
domain: 'lineascan.build',
|
|
44
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,
|
|
45
|
-
},
|
|
46
|
-
[exports.CHAIN_IDS.LINEA_MAINNET]: {
|
|
47
|
-
domain: 'lineascan.build',
|
|
48
|
-
subdomain: exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
|
|
49
|
-
},
|
|
50
|
-
[exports.CHAIN_IDS.BSC]: {
|
|
51
|
-
domain: 'bscscan.com',
|
|
52
|
-
subdomain: exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
|
|
53
|
-
},
|
|
54
|
-
[exports.CHAIN_IDS.BSC_TESTNET]: {
|
|
55
|
-
domain: 'bscscan.com',
|
|
56
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,
|
|
57
|
-
},
|
|
58
|
-
[exports.CHAIN_IDS.OPTIMISM]: {
|
|
59
|
-
domain: exports.DEFAULT_ETHERSCAN_DOMAIN,
|
|
60
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-optimistic`,
|
|
61
|
-
},
|
|
62
|
-
[exports.CHAIN_IDS.OPTIMISM_SEPOLIA]: {
|
|
63
|
-
domain: exports.DEFAULT_ETHERSCAN_DOMAIN,
|
|
64
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia-optimistic`,
|
|
65
|
-
},
|
|
66
|
-
[exports.CHAIN_IDS.POLYGON]: {
|
|
67
|
-
domain: 'polygonscan.com',
|
|
68
|
-
subdomain: exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
|
|
69
|
-
},
|
|
70
|
-
[exports.CHAIN_IDS.POLYGON_TESTNET]: {
|
|
71
|
-
domain: 'polygonscan.com',
|
|
72
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-mumbai`,
|
|
73
|
-
},
|
|
74
|
-
[exports.CHAIN_IDS.AVALANCHE]: {
|
|
75
|
-
domain: 'snowtrace.io',
|
|
76
|
-
subdomain: exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
|
|
77
|
-
},
|
|
78
|
-
[exports.CHAIN_IDS.AVALANCHE_TESTNET]: {
|
|
79
|
-
domain: 'snowtrace.io',
|
|
80
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,
|
|
81
|
-
},
|
|
82
|
-
[exports.CHAIN_IDS.FANTOM]: {
|
|
83
|
-
domain: 'ftmscan.com',
|
|
84
|
-
subdomain: exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
|
|
85
|
-
},
|
|
86
|
-
[exports.CHAIN_IDS.FANTOM_TESTNET]: {
|
|
87
|
-
domain: 'ftmscan.com',
|
|
88
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,
|
|
89
|
-
},
|
|
90
|
-
[exports.CHAIN_IDS.MOONBEAM]: {
|
|
91
|
-
domain: 'moonscan.io',
|
|
92
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbeam`,
|
|
93
|
-
},
|
|
94
|
-
[exports.CHAIN_IDS.MOONBEAM_TESTNET]: {
|
|
95
|
-
domain: 'moonscan.io',
|
|
96
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbase`,
|
|
97
|
-
},
|
|
98
|
-
[exports.CHAIN_IDS.MOONRIVER]: {
|
|
99
|
-
domain: 'moonscan.io',
|
|
100
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonriver`,
|
|
101
|
-
},
|
|
102
|
-
[exports.CHAIN_IDS.GNOSIS]: {
|
|
103
|
-
domain: 'gnosisscan.io',
|
|
104
|
-
subdomain: `${exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-gnosis`,
|
|
105
|
-
},
|
|
106
|
-
};
|
|
107
|
-
exports.GAS_BUFFER_CHAIN_OVERRIDES = {
|
|
108
|
-
[exports.CHAIN_IDS.OPTIMISM]: 1,
|
|
109
|
-
[exports.CHAIN_IDS.OPTIMISM_SEPOLIA]: 1,
|
|
110
|
-
};
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkITDY6AIZjs = require('./chunk-ITDY6AIZ.js');
|
|
8
|
+
require('./chunk-Z4BLTVTB.js');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
exports.CHAIN_IDS = _chunkITDY6AIZjs.CHAIN_IDS; exports.DEFAULT_ETHERSCAN_DOMAIN = _chunkITDY6AIZjs.DEFAULT_ETHERSCAN_DOMAIN; exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = _chunkITDY6AIZjs.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX; exports.ETHERSCAN_SUPPORTED_NETWORKS = _chunkITDY6AIZjs.ETHERSCAN_SUPPORTED_NETWORKS; exports.GAS_BUFFER_CHAIN_OVERRIDES = _chunkITDY6AIZjs.GAS_BUFFER_CHAIN_OVERRIDES;
|
|
111
16
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CHAIN_IDS,
|
|
3
|
+
DEFAULT_ETHERSCAN_DOMAIN,
|
|
4
|
+
DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
|
|
5
|
+
ETHERSCAN_SUPPORTED_NETWORKS,
|
|
6
|
+
GAS_BUFFER_CHAIN_OVERRIDES
|
|
7
|
+
} from "./chunk-Z3HHSD5I.mjs";
|
|
8
|
+
import "./chunk-XUI43LEZ.mjs";
|
|
9
|
+
export {
|
|
10
|
+
CHAIN_IDS,
|
|
11
|
+
DEFAULT_ETHERSCAN_DOMAIN,
|
|
12
|
+
DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,
|
|
13
|
+
ETHERSCAN_SUPPORTED_NETWORKS,
|
|
14
|
+
GAS_BUFFER_CHAIN_OVERRIDES
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=constants.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|