@metamask/transaction-controller 25.2.1 → 26.0.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 +39 -1
- package/dist/TransactionController.js +20 -18
- package/dist/TransactionController.mjs +19 -17
- package/dist/{chunk-5UL3VDFT.mjs → chunk-35MG26Y3.mjs} +13 -12
- package/dist/chunk-35MG26Y3.mjs.map +1 -0
- package/dist/{chunk-R7NJVDWN.js → chunk-5WFLNKCL.js} +7 -6
- package/dist/chunk-5WFLNKCL.js.map +1 -0
- package/dist/{chunk-PF3UOCRW.js → chunk-6V2LR6JL.js} +7 -7
- package/dist/{chunk-PGTV7236.mjs → chunk-7HNSDVVO.mjs} +3 -3
- package/dist/{chunk-BYBPZUHS.mjs → chunk-A4P4B3OF.mjs} +14 -6
- package/dist/chunk-A4P4B3OF.mjs.map +1 -0
- package/dist/{chunk-I6RY3XOG.mjs → chunk-APJWB5VY.mjs} +62 -27
- package/dist/chunk-APJWB5VY.mjs.map +1 -0
- package/dist/{chunk-F3CMU2DM.js → chunk-C3UHJPYJ.js} +6 -6
- package/dist/{chunk-Z3HHSD5I.mjs → chunk-DTMKGTYC.mjs} +3 -2
- package/dist/chunk-DTMKGTYC.mjs.map +1 -0
- package/dist/{chunk-VEJ3MIZG.js → chunk-FK7AP6SH.js} +11 -2
- package/dist/chunk-FK7AP6SH.js.map +1 -0
- package/dist/{chunk-ZQFMTLZJ.mjs → chunk-FTB6MCSH.mjs} +39 -24
- package/dist/chunk-FTB6MCSH.mjs.map +1 -0
- package/dist/{chunk-7BG5XOXJ.js → chunk-GASIS3QH.js} +77 -42
- package/dist/chunk-GASIS3QH.js.map +1 -0
- package/dist/{chunk-RQKICZYP.js → chunk-GRQB2ARK.js} +3 -3
- package/dist/{chunk-XKNFL657.mjs → chunk-HLG525BC.mjs} +2 -2
- package/dist/chunk-HMOSP33F.js +36 -0
- package/dist/chunk-HMOSP33F.js.map +1 -0
- package/dist/chunk-HQSNKCXI.mjs +36 -0
- package/dist/chunk-HQSNKCXI.mjs.map +1 -0
- package/dist/{chunk-QEX3QMSL.js → chunk-HUVOOFOM.js} +15 -14
- package/dist/chunk-HUVOOFOM.js.map +1 -0
- package/dist/{chunk-NRWEI43Q.js → chunk-I7VD6IET.js} +40 -25
- package/dist/chunk-I7VD6IET.js.map +1 -0
- package/dist/chunk-JW6P2G5A.mjs +132 -0
- package/dist/chunk-JW6P2G5A.mjs.map +1 -0
- package/dist/{chunk-6XMG522E.mjs → chunk-K4KOSAGM.mjs} +8 -3
- package/dist/chunk-K4KOSAGM.mjs.map +1 -0
- package/dist/{chunk-JRBREX22.mjs → chunk-KG4UW4K4.mjs} +17 -4
- package/dist/chunk-KG4UW4K4.mjs.map +1 -0
- package/dist/{chunk-QRSTF45Q.mjs → chunk-KKCD5UMP.mjs} +3 -3
- package/dist/{chunk-GE57YNGX.js → chunk-KT6UAKBB.js} +8 -3
- package/dist/chunk-KT6UAKBB.js.map +1 -0
- package/dist/chunk-QG2WVQE3.js +132 -0
- package/dist/chunk-QG2WVQE3.js.map +1 -0
- package/dist/{chunk-5OQ373JS.js → chunk-QTQSCTQA.js} +10 -10
- package/dist/{chunk-VEREDMI2.mjs → chunk-RIYIJTEU.mjs} +2 -2
- package/dist/{chunk-IZI7FQIN.mjs → chunk-RU6NJIUD.mjs} +3 -3
- package/dist/{chunk-HS277C77.js → chunk-SD6CWFDF.js} +16 -3
- package/dist/chunk-SD6CWFDF.js.map +1 -0
- package/dist/{chunk-3D3SA6PY.mjs → chunk-TJXPMOA6.mjs} +2 -2
- package/dist/{chunk-DWHMMJOW.mjs → chunk-TWND5SFD.mjs} +2 -2
- package/dist/{chunk-IK55QTGO.mjs → chunk-TZEAWUXE.mjs} +3 -3
- package/dist/{chunk-TZTP4JVA.js → chunk-UH7FNVKS.js} +4 -4
- package/dist/{chunk-5IHLDAOF.js → chunk-UUSYJGGQ.js} +5 -5
- package/dist/{chunk-GC77BSQZ.js → chunk-V5X6MZHN.js} +16 -8
- package/dist/chunk-V5X6MZHN.js.map +1 -0
- package/dist/{chunk-CXXGL43K.js → chunk-VP2DBWOT.js} +3 -3
- package/dist/{chunk-KFL2GGZC.mjs → chunk-W3CS5GRD.mjs} +7 -6
- package/dist/chunk-W3CS5GRD.mjs.map +1 -0
- package/dist/{chunk-ITDY6AIZ.js → chunk-WIZVJM2B.js} +3 -2
- package/dist/chunk-WIZVJM2B.js.map +1 -0
- package/dist/{chunk-FHG5GY6F.js → chunk-XZILQVNW.js} +6 -6
- package/dist/{chunk-W57BD6NX.mjs → chunk-YEJJKWT2.mjs} +11 -2
- package/dist/chunk-YEJJKWT2.mjs.map +1 -0
- package/dist/constants.js +2 -2
- package/dist/constants.mjs +1 -1
- package/dist/errors.js +15 -0
- package/dist/errors.js.map +1 -0
- package/dist/errors.mjs +15 -0
- package/dist/errors.mjs.map +1 -0
- 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 +10 -0
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.js.map +1 -0
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs +10 -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 -5
- package/dist/helpers/GasFeePoller.mjs +4 -4
- 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 +24 -20
- package/dist/index.mjs +23 -19
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/TransactionController.d.ts +8 -0
- package/dist/types/TransactionController.d.ts.map +1 -1
- package/dist/types/constants.d.ts +1 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- 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 +4 -5
- 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/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/types.d.ts +15 -7
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utils/layer1-gas-fee-flow.d.ts +11 -2
- package/dist/types/utils/layer1-gas-fee-flow.d.ts.map +1 -1
- package/dist/types/utils/simulation-api.d.ts.map +1 -1
- package/dist/types/utils/simulation.d.ts.map +1 -1
- package/dist/types/utils/transaction-type.d.ts.map +1 -1
- package/dist/types.js +4 -2
- package/dist/types.mjs +3 -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 +4 -2
- package/dist/utils/layer1-gas-fee-flow.mjs +3 -1
- package/dist/utils/simulation-api.js +4 -2
- package/dist/utils/simulation-api.mjs +3 -1
- package/dist/utils/simulation.js +5 -4
- package/dist/utils/simulation.mjs +4 -3
- package/dist/utils/swaps.js +4 -4
- package/dist/utils/swaps.mjs +3 -3
- package/dist/utils/transaction-type.js +3 -3
- package/dist/utils/transaction-type.mjs +2 -2
- 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 +7 -5
- package/dist/chunk-5UL3VDFT.mjs.map +0 -1
- package/dist/chunk-6XMG522E.mjs.map +0 -1
- package/dist/chunk-7BG5XOXJ.js.map +0 -1
- package/dist/chunk-BYBPZUHS.mjs.map +0 -1
- package/dist/chunk-GC77BSQZ.js.map +0 -1
- package/dist/chunk-GE57YNGX.js.map +0 -1
- package/dist/chunk-HS277C77.js.map +0 -1
- package/dist/chunk-I6RY3XOG.mjs.map +0 -1
- package/dist/chunk-ITDY6AIZ.js.map +0 -1
- package/dist/chunk-JRBREX22.mjs.map +0 -1
- package/dist/chunk-KFL2GGZC.mjs.map +0 -1
- package/dist/chunk-NRWEI43Q.js.map +0 -1
- package/dist/chunk-QEX3QMSL.js.map +0 -1
- package/dist/chunk-R7NJVDWN.js.map +0 -1
- package/dist/chunk-VEJ3MIZG.js.map +0 -1
- package/dist/chunk-W57BD6NX.mjs.map +0 -1
- package/dist/chunk-Z3HHSD5I.mjs.map +0 -1
- package/dist/chunk-ZQFMTLZJ.mjs.map +0 -1
- /package/dist/{chunk-PF3UOCRW.js.map → chunk-6V2LR6JL.js.map} +0 -0
- /package/dist/{chunk-PGTV7236.mjs.map → chunk-7HNSDVVO.mjs.map} +0 -0
- /package/dist/{chunk-F3CMU2DM.js.map → chunk-C3UHJPYJ.js.map} +0 -0
- /package/dist/{chunk-RQKICZYP.js.map → chunk-GRQB2ARK.js.map} +0 -0
- /package/dist/{chunk-XKNFL657.mjs.map → chunk-HLG525BC.mjs.map} +0 -0
- /package/dist/{chunk-QRSTF45Q.mjs.map → chunk-KKCD5UMP.mjs.map} +0 -0
- /package/dist/{chunk-5OQ373JS.js.map → chunk-QTQSCTQA.js.map} +0 -0
- /package/dist/{chunk-VEREDMI2.mjs.map → chunk-RIYIJTEU.mjs.map} +0 -0
- /package/dist/{chunk-IZI7FQIN.mjs.map → chunk-RU6NJIUD.mjs.map} +0 -0
- /package/dist/{chunk-3D3SA6PY.mjs.map → chunk-TJXPMOA6.mjs.map} +0 -0
- /package/dist/{chunk-DWHMMJOW.mjs.map → chunk-TWND5SFD.mjs.map} +0 -0
- /package/dist/{chunk-IK55QTGO.mjs.map → chunk-TZEAWUXE.mjs.map} +0 -0
- /package/dist/{chunk-TZTP4JVA.js.map → chunk-UH7FNVKS.js.map} +0 -0
- /package/dist/{chunk-5IHLDAOF.js.map → chunk-UUSYJGGQ.js.map} +0 -0
- /package/dist/{chunk-CXXGL43K.js.map → chunk-VP2DBWOT.js.map} +0 -0
- /package/dist/{chunk-FHG5GY6F.js.map → chunk-XZILQVNW.js.map} +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
+
|
|
3
|
+
var _chunkWIZVJM2Bjs = require('./chunk-WIZVJM2B.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
var _chunkZ4BLTVTBjs = require('./chunk-Z4BLTVTB.js');
|
|
11
|
+
|
|
12
|
+
// src/gas-flows/OptimismLayer1GasFeeFlow.ts
|
|
13
|
+
var _common = require('@ethereumjs/common');
|
|
14
|
+
var _tx = require('@ethereumjs/tx');
|
|
15
|
+
var _contracts = require('@ethersproject/contracts');
|
|
16
|
+
var _providers = require('@ethersproject/providers');
|
|
17
|
+
var _utils = require('@metamask/utils');
|
|
18
|
+
var _bnjs = require('bn.js'); var _bnjs2 = _interopRequireDefault(_bnjs);
|
|
19
|
+
var _lodash = require('lodash');
|
|
20
|
+
var OPTIMISM_STACK_CHAIN_IDS = [
|
|
21
|
+
_chunkWIZVJM2Bjs.CHAIN_IDS.OPTIMISM,
|
|
22
|
+
_chunkWIZVJM2Bjs.CHAIN_IDS.OPTIMISM_TESTNET,
|
|
23
|
+
_chunkWIZVJM2Bjs.CHAIN_IDS.BASE,
|
|
24
|
+
_chunkWIZVJM2Bjs.CHAIN_IDS.BASE_TESTNET,
|
|
25
|
+
_chunkWIZVJM2Bjs.CHAIN_IDS.OPBNB,
|
|
26
|
+
_chunkWIZVJM2Bjs.CHAIN_IDS.OPBNB_TESTNET,
|
|
27
|
+
_chunkWIZVJM2Bjs.CHAIN_IDS.ZORA
|
|
28
|
+
];
|
|
29
|
+
var log = _utils.createModuleLogger.call(void 0, _chunkS6VGOPUYjs.projectLogger, "optimisim-layer1-gas-fee-flow");
|
|
30
|
+
var OPTIMISM_GAS_PRICE_ORACLE_ABI = [
|
|
31
|
+
{
|
|
32
|
+
inputs: [{ internalType: "bytes", name: "_data", type: "bytes" }],
|
|
33
|
+
name: "getL1Fee",
|
|
34
|
+
outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
|
|
35
|
+
stateMutability: "view",
|
|
36
|
+
type: "function"
|
|
37
|
+
}
|
|
38
|
+
];
|
|
39
|
+
var OPTIMISM_GAS_PRICE_ORACLE_ADDRESS = "0x420000000000000000000000000000000000000F";
|
|
40
|
+
var _getOptimisimLayer1GasFee, getOptimisimLayer1GasFee_fn, _buildUnserializedTransaction, buildUnserializedTransaction_fn, _buildTransactionParams, buildTransactionParams_fn, _buildTransactionCommon, buildTransactionCommon_fn;
|
|
41
|
+
var OptimismLayer1GasFeeFlow = class {
|
|
42
|
+
constructor() {
|
|
43
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _getOptimisimLayer1GasFee);
|
|
44
|
+
/**
|
|
45
|
+
* Build an unserialized transaction for a transaction.
|
|
46
|
+
*
|
|
47
|
+
* @param transactionMeta - The transaction to build an unserialized transaction for.
|
|
48
|
+
* @returns The unserialized transaction.
|
|
49
|
+
*/
|
|
50
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _buildUnserializedTransaction);
|
|
51
|
+
/**
|
|
52
|
+
* Build transactionParams to be used in the unserialized transaction.
|
|
53
|
+
*
|
|
54
|
+
* @param transactionMeta - The transaction to build transactionParams.
|
|
55
|
+
* @returns The transactionParams for the unserialized transaction.
|
|
56
|
+
*/
|
|
57
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _buildTransactionParams);
|
|
58
|
+
/**
|
|
59
|
+
* This produces a transaction whose information does not completely match an
|
|
60
|
+
* Optimism transaction — for instance, DEFAULT_CHAIN is still 'mainnet' and
|
|
61
|
+
* genesis points to the mainnet genesis, not the Optimism genesis — but
|
|
62
|
+
* considering that all we want to do is serialize a transaction, this works
|
|
63
|
+
* fine for our use case.
|
|
64
|
+
*
|
|
65
|
+
* @param transactionMeta - The transaction to build an unserialized transaction for.
|
|
66
|
+
* @returns The unserialized transaction.
|
|
67
|
+
*/
|
|
68
|
+
_chunkZ4BLTVTBjs.__privateAdd.call(void 0, this, _buildTransactionCommon);
|
|
69
|
+
}
|
|
70
|
+
matchesTransaction(transactionMeta) {
|
|
71
|
+
return OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);
|
|
72
|
+
}
|
|
73
|
+
async getLayer1Fee(request) {
|
|
74
|
+
try {
|
|
75
|
+
return await _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _getOptimisimLayer1GasFee, getOptimisimLayer1GasFee_fn).call(this, request);
|
|
76
|
+
} catch (error) {
|
|
77
|
+
log("Failed to get Optimism layer 1 gas fee due to error", error);
|
|
78
|
+
throw new Error(`Failed to get Optimism layer 1 gas fee`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
_getOptimisimLayer1GasFee = new WeakSet();
|
|
83
|
+
getOptimisimLayer1GasFee_fn = async function(request) {
|
|
84
|
+
const { provider, transactionMeta } = request;
|
|
85
|
+
const contract = new (0, _contracts.Contract)(
|
|
86
|
+
OPTIMISM_GAS_PRICE_ORACLE_ADDRESS,
|
|
87
|
+
OPTIMISM_GAS_PRICE_ORACLE_ABI,
|
|
88
|
+
// Network controller provider type is uncompatible with ethers provider
|
|
89
|
+
new (0, _providers.Web3Provider)(provider)
|
|
90
|
+
);
|
|
91
|
+
const serializedTransaction = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _buildUnserializedTransaction, buildUnserializedTransaction_fn).call(this, transactionMeta).serialize();
|
|
92
|
+
const result = await contract.getL1Fee(serializedTransaction);
|
|
93
|
+
if (result === void 0) {
|
|
94
|
+
throw new Error(
|
|
95
|
+
"Failed to retrieve layer 1 gas fee from Optimism Gas Price Oracle."
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
layer1Fee: result.toHexString()
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
_buildUnserializedTransaction = new WeakSet();
|
|
103
|
+
buildUnserializedTransaction_fn = function(transactionMeta) {
|
|
104
|
+
const txParams = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _buildTransactionParams, buildTransactionParams_fn).call(this, transactionMeta);
|
|
105
|
+
const common = _chunkZ4BLTVTBjs.__privateMethod.call(void 0, this, _buildTransactionCommon, buildTransactionCommon_fn).call(this, transactionMeta);
|
|
106
|
+
return _tx.TransactionFactory.fromTxData(txParams, { common });
|
|
107
|
+
};
|
|
108
|
+
_buildTransactionParams = new WeakSet();
|
|
109
|
+
buildTransactionParams_fn = function(transactionMeta) {
|
|
110
|
+
return {
|
|
111
|
+
..._lodash.omit.call(void 0, transactionMeta.txParams, "gas"),
|
|
112
|
+
gasLimit: transactionMeta.txParams.gas
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
_buildTransactionCommon = new WeakSet();
|
|
116
|
+
buildTransactionCommon_fn = function(transactionMeta) {
|
|
117
|
+
return _common.Common.custom({
|
|
118
|
+
chainId: new (0, _bnjs2.default)(
|
|
119
|
+
_utils.remove0x.call(void 0, transactionMeta.chainId),
|
|
120
|
+
16
|
|
121
|
+
),
|
|
122
|
+
// Optimism only supports type-0 transactions; it does not support any of
|
|
123
|
+
// the newer EIPs since EIP-155. Source:
|
|
124
|
+
// <https://github.com/ethereum-optimism/optimism/blob/develop/specs/l2geth/transaction-types.md>
|
|
125
|
+
defaultHardfork: _common.Hardfork.London
|
|
126
|
+
});
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
exports.OptimismLayer1GasFeeFlow = OptimismLayer1GasFeeFlow;
|
|
132
|
+
//# sourceMappingURL=chunk-QG2WVQE3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,SAAS,QAAQ,gBAAgB;AACjC,SAAS,0BAA0B;AACnC,SAAS,gBAAgB;AACzB,SAAS,oBAA2C;AACpD,SAAS,oBAA8B,gBAAgB;AACvD,OAAO,QAAQ;AACf,SAAS,YAAY;AAYrB,IAAM,2BAAkC;AAAA,EACtC,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,UAAU;AAAA,EACV,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;AA7CF;AAkDO,IAAM,2BAAN,MAA2D;AAAA,EAA3D;AAgBL,uBAAM;AAkCN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAhFA,mBAAmB,iBAA2C;AAC5D,WAAO,yBAAyB,SAAS,gBAAgB,OAAO;AAAA,EAClE;AAAA,EAEA,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;AA+EF;AA7EQ;AAAA,8BAAyB,eAC7B,SACmC;AACnC,QAAM,EAAE,UAAU,gBAAgB,IAAI;AAEtC,QAAM,WAAW,IAAI;AAAA,IACnB;AAAA,IACA;AAAA;AAAA,IAEA,IAAI,aAAa,QAAuC;AAAA,EAC1D;AAEA,QAAM,wBACJ,sBAAK,gEAAL,WAAmC,iBAAiB,UAAU;AAEhE,QAAM,SAAS,MAAM,SAAS,SAAS,qBAAqB;AAE5D,MAAI,WAAW,QAAW;AACxB,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,WAAW,OAAO,YAAY;AAAA,EAChC;AACF;AAQA;AAAA,kCAA6B,SAAC,iBAAkC;AAC9D,QAAM,WAAW,sBAAK,oDAAL,WAA6B;AAC9C,QAAM,SAAS,sBAAK,oDAAL,WAA6B;AAC5C,SAAO,mBAAmB,WAAW,UAAU,EAAE,OAAO,CAAC;AAC3D;AAQA;AAAA,4BAAuB,SACrB,iBAC6B;AAC7B,SAAO;AAAA,IACL,GAAG,KAAK,gBAAgB,UAAU,KAAK;AAAA,IACvC,UAAU,gBAAgB,SAAS;AAAA,EACrC;AACF;AAYA;AAAA,4BAAuB,SAAC,iBAAkC;AACxD,SAAO,OAAO,OAAO;AAAA,IACnB,SAAS,IAAI;AAAA,MACX,SAAS,gBAAgB,OAAO;AAAA,MAChC;AAAA,IACF;AAAA;AAAA;AAAA;AAAA,IAIA,iBAAiB,SAAS;AAAA,EAC5B,CAAC;AACH","sourcesContent":["import { Common, Hardfork } from '@ethereumjs/common';\nimport { TransactionFactory } from '@ethereumjs/tx';\nimport { Contract } from '@ethersproject/contracts';\nimport { Web3Provider, type ExternalProvider } from '@ethersproject/providers';\nimport { createModuleLogger, type Hex, remove0x } from '@metamask/utils';\nimport BN from 'bn.js';\nimport { omit } from 'lodash';\n\nimport { CHAIN_IDS } from '../constants';\nimport { projectLogger } from '../logger';\nimport type {\n Layer1GasFeeFlow,\n Layer1GasFeeFlowRequest,\n Layer1GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\n\n// This gas flow to be used for the following OP stack chains\nconst OPTIMISM_STACK_CHAIN_IDS: Hex[] = [\n CHAIN_IDS.OPTIMISM,\n CHAIN_IDS.OPTIMISM_TESTNET,\n CHAIN_IDS.BASE,\n CHAIN_IDS.BASE_TESTNET,\n CHAIN_IDS.OPBNB,\n CHAIN_IDS.OPBNB_TESTNET,\n CHAIN_IDS.ZORA,\n];\n\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 OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);\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 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 new Web3Provider(provider as unknown as ExternalProvider),\n );\n\n const serializedTransaction =\n this.#buildUnserializedTransaction(transactionMeta).serialize();\n\n const result = await contract.getL1Fee(serializedTransaction);\n\n if (result === undefined) {\n throw new Error(\n 'Failed to retrieve layer 1 gas fee from Optimism Gas Price Oracle.',\n );\n }\n\n return {\n layer1Fee: result.toHexString(),\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 */\n #buildUnserializedTransaction(transactionMeta: TransactionMeta) {\n const txParams = this.#buildTransactionParams(transactionMeta);\n const common = this.#buildTransactionCommon(transactionMeta);\n return TransactionFactory.fromTxData(txParams, { common });\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 */\n #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 */\n #buildTransactionCommon(transactionMeta: TransactionMeta) {\n return Common.custom({\n chainId: new BN(\n remove0x(transactionMeta.chainId),\n 16,\n ) 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"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _chunkUGFBA4GVjs = require('./chunk-UGFBA4GV.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkWIZVJM2Bjs = require('./chunk-WIZVJM2B.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
@@ -57,15 +57,15 @@ var ZKSYNC_ERA_SWAPS_TOKEN_OBJECT = {
|
|
|
57
57
|
...ETH_SWAPS_TOKEN_OBJECT
|
|
58
58
|
};
|
|
59
59
|
var SWAPS_CHAINID_DEFAULT_TOKEN_MAP = {
|
|
60
|
-
[
|
|
60
|
+
[_chunkWIZVJM2Bjs.CHAIN_IDS.MAINNET]: ETH_SWAPS_TOKEN_OBJECT,
|
|
61
61
|
[SWAPS_TESTNET_CHAIN_ID]: TEST_ETH_SWAPS_TOKEN_OBJECT,
|
|
62
|
-
[
|
|
63
|
-
[
|
|
64
|
-
[
|
|
65
|
-
[
|
|
66
|
-
[
|
|
67
|
-
[
|
|
68
|
-
[
|
|
62
|
+
[_chunkWIZVJM2Bjs.CHAIN_IDS.BSC]: BNB_SWAPS_TOKEN_OBJECT,
|
|
63
|
+
[_chunkWIZVJM2Bjs.CHAIN_IDS.POLYGON]: MATIC_SWAPS_TOKEN_OBJECT,
|
|
64
|
+
[_chunkWIZVJM2Bjs.CHAIN_IDS.GOERLI]: GOERLI_SWAPS_TOKEN_OBJECT,
|
|
65
|
+
[_chunkWIZVJM2Bjs.CHAIN_IDS.AVALANCHE]: AVAX_SWAPS_TOKEN_OBJECT,
|
|
66
|
+
[_chunkWIZVJM2Bjs.CHAIN_IDS.OPTIMISM]: OPTIMISM_SWAPS_TOKEN_OBJECT,
|
|
67
|
+
[_chunkWIZVJM2Bjs.CHAIN_IDS.ARBITRUM]: ARBITRUM_SWAPS_TOKEN_OBJECT,
|
|
68
|
+
[_chunkWIZVJM2Bjs.CHAIN_IDS.ZKSYNC_ERA]: ZKSYNC_ERA_SWAPS_TOKEN_OBJECT
|
|
69
69
|
};
|
|
70
70
|
var SWAP_TRANSACTION_TYPES = [
|
|
71
71
|
"swap" /* swap */,
|
|
@@ -208,4 +208,4 @@ function sleep(ms) {
|
|
|
208
208
|
|
|
209
209
|
|
|
210
210
|
exports.UPDATE_POST_TX_BALANCE_TIMEOUT = UPDATE_POST_TX_BALANCE_TIMEOUT; exports.UPDATE_POST_TX_BALANCE_ATTEMPTS = UPDATE_POST_TX_BALANCE_ATTEMPTS; exports.DEFAULT_TOKEN_ADDRESS = DEFAULT_TOKEN_ADDRESS; exports.SWAPS_CHAINID_DEFAULT_TOKEN_MAP = SWAPS_CHAINID_DEFAULT_TOKEN_MAP; exports.SWAP_TRANSACTION_TYPES = SWAP_TRANSACTION_TYPES; exports.updateSwapsTransaction = updateSwapsTransaction; exports.updatePostTransactionBalance = updatePostTransactionBalance;
|
|
211
|
-
//# sourceMappingURL=chunk-
|
|
211
|
+
//# sourceMappingURL=chunk-QTQSCTQA.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ETHERSCAN_SUPPORTED_NETWORKS
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-DTMKGTYC.mjs";
|
|
4
4
|
import {
|
|
5
5
|
incomingTransactionsLogger
|
|
6
6
|
} from "./chunk-UQQWZT6C.mjs";
|
|
@@ -82,4 +82,4 @@ export {
|
|
|
82
82
|
fetchEtherscanTokenTransactions,
|
|
83
83
|
getEtherscanApiHost
|
|
84
84
|
};
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
85
|
+
//# sourceMappingURL=chunk-RIYIJTEU.mjs.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
fetchEtherscanTokenTransactions,
|
|
3
3
|
fetchEtherscanTransactions
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-RIYIJTEU.mjs";
|
|
5
5
|
import {
|
|
6
6
|
ETHERSCAN_SUPPORTED_NETWORKS
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-DTMKGTYC.mjs";
|
|
8
8
|
import {
|
|
9
9
|
incomingTransactionsLogger
|
|
10
10
|
} from "./chunk-UQQWZT6C.mjs";
|
|
@@ -167,4 +167,4 @@ normalizeTransactionBase_fn = function(txMeta, currentChainId) {
|
|
|
167
167
|
export {
|
|
168
168
|
EtherscanRemoteTransactionSource
|
|
169
169
|
};
|
|
170
|
-
//# sourceMappingURL=chunk-
|
|
170
|
+
//# sourceMappingURL=chunk-RU6NJIUD.mjs.map
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/utils/transaction-type.ts
|
|
2
2
|
var _abi = require('@ethersproject/abi');
|
|
3
3
|
var _controllerutils = require('@metamask/controller-utils');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
4
9
|
var _metamaskethabis = require('@metamask/metamask-eth-abis');
|
|
5
10
|
var ESTIMATE_GAS_ERROR = "eth_estimateGas rpc method error";
|
|
6
11
|
var ERC20Interface = new (0, _abi.Interface)(_metamaskethabis.abiERC20);
|
|
7
12
|
var ERC721Interface = new (0, _abi.Interface)(_metamaskethabis.abiERC721);
|
|
8
13
|
var ERC1155Interface = new (0, _abi.Interface)(_metamaskethabis.abiERC1155);
|
|
14
|
+
var USDCInterface = new (0, _abi.Interface)(_metamaskethabis.abiFiatTokenV2);
|
|
9
15
|
async function determineTransactionType(txParams, ethQuery) {
|
|
10
16
|
const { data, to } = txParams;
|
|
11
17
|
if (data && !to) {
|
|
@@ -32,8 +38,11 @@ async function determineTransactionType(txParams, ethQuery) {
|
|
|
32
38
|
"setapprovalforall" /* tokenMethodSetApprovalForAll */,
|
|
33
39
|
"transfer" /* tokenMethodTransfer */,
|
|
34
40
|
"transferfrom" /* tokenMethodTransferFrom */,
|
|
35
|
-
"safetransferfrom" /* tokenMethodSafeTransferFrom
|
|
36
|
-
|
|
41
|
+
"safetransferfrom" /* tokenMethodSafeTransferFrom */,
|
|
42
|
+
"increaseAllowance" /* tokenMethodIncreaseAllowance */
|
|
43
|
+
].find(
|
|
44
|
+
(methodName) => methodName.toLowerCase() === name.toLowerCase()
|
|
45
|
+
);
|
|
37
46
|
if (tokenMethodName) {
|
|
38
47
|
return { type: tokenMethodName, getCodeResponse };
|
|
39
48
|
}
|
|
@@ -55,6 +64,10 @@ function parseStandardTokenTransactionData(data) {
|
|
|
55
64
|
return ERC1155Interface.parseTransaction({ data });
|
|
56
65
|
} catch {
|
|
57
66
|
}
|
|
67
|
+
try {
|
|
68
|
+
return USDCInterface.parseTransaction({ data });
|
|
69
|
+
} catch {
|
|
70
|
+
}
|
|
58
71
|
return void 0;
|
|
59
72
|
}
|
|
60
73
|
async function readAddressAsContract(ethQuery, address) {
|
|
@@ -72,4 +85,4 @@ async function readAddressAsContract(ethQuery, address) {
|
|
|
72
85
|
|
|
73
86
|
|
|
74
87
|
exports.ESTIMATE_GAS_ERROR = ESTIMATE_GAS_ERROR; exports.determineTransactionType = determineTransactionType;
|
|
75
|
-
//# sourceMappingURL=chunk-
|
|
88
|
+
//# sourceMappingURL=chunk-SD6CWFDF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/transaction-type.ts"],"names":[],"mappings":";AACA,SAAS,iBAAiB;AAC1B,SAAS,aAAa;AAEtB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAKA,IAAM,qBAAqB;AAElC,IAAM,iBAAiB,IAAI,UAAU,QAAQ;AAC7C,IAAM,kBAAkB,IAAI,UAAU,SAAS;AAC/C,IAAM,mBAAmB,IAAI,UAAU,UAAU;AACjD,IAAM,gBAAgB,IAAI,UAAU,cAAc;AAWlD,eAAsB,yBACpB,UACA,UACqC;AACrC,QAAM,EAAE,MAAM,GAAG,IAAI;AAErB,MAAI,QAAQ,CAAC,IAAI;AACf,WAAO,EAAE,iDAAsC,iBAAiB,OAAU;AAAA,EAC5E;AAEA,QAAM,EAAE,cAAc,iBAAiB,kBAAkB,IACvD,MAAM,sBAAsB,UAAU,EAAE;AAE1C,MAAI,CAAC,mBAAmB;AACtB,WAAO,EAAE,qCAAkC,gBAAgB;AAAA,EAC7D;AAEA,QAAM,WAAW,OAAO,SAAS,SAAS,GAAG,MAAM;AAEnD,QAAM,4BAA4B;AAAA,IAChC;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,UAAU;AACrB,WAAO;AAAA,EACT;AAEA,QAAM,OAAO,kCAAkC,IAAI,GAAG;AAEtD,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,EAAE;AAAA,IACA,CAAC,eAAe,WAAW,YAAY,MAAO,KAAgB,YAAY;AAAA,EAC5E;AAEA,MAAI,iBAAiB;AACnB,WAAO,EAAE,MAAM,iBAAiB,gBAAgB;AAAA,EAClD;AAEA,SAAO;AACT;AAUA,SAAS,kCACP,MACoC;AACpC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,eAAe,iBAAiB,EAAE,KAAK,CAAC;AAAA,EACjD,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,WAAO,gBAAgB,iBAAiB,EAAE,KAAK,CAAC;AAAA,EAClD,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,WAAO,iBAAiB,iBAAiB,EAAE,KAAK,CAAC;AAAA,EACnD,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,WAAO,cAAc,iBAAiB,EAAE,KAAK,CAAC;AAAA,EAChD,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AASA,eAAe,sBACb,UACA,SAIC;AACD,MAAI;AACJ,MAAI;AACF,mBAAe,MAAM,MAAM,UAAU,WAAW,CAAC,OAAO,CAAC;AAAA,EAC3D,SAAS,GAAG;AACV,mBAAe;AAAA,EACjB;AAEA,QAAM,oBAAoB,eACtB,iBAAiB,QAAQ,iBAAiB,QAC1C;AACJ,SAAO,EAAE,cAAc,kBAAkB;AAC3C","sourcesContent":["import type { TransactionDescription } from '@ethersproject/abi';\nimport { Interface } from '@ethersproject/abi';\nimport { query } from '@metamask/controller-utils';\nimport type EthQuery from '@metamask/eth-query';\nimport {\n abiERC721,\n abiERC20,\n abiERC1155,\n abiFiatTokenV2,\n} from '@metamask/metamask-eth-abis';\n\nimport type { InferTransactionTypeResult, TransactionParams } from '../types';\nimport { TransactionType } from '../types';\n\nexport const ESTIMATE_GAS_ERROR = 'eth_estimateGas rpc method error';\n\nconst ERC20Interface = new Interface(abiERC20);\nconst ERC721Interface = new Interface(abiERC721);\nconst ERC1155Interface = new Interface(abiERC1155);\nconst USDCInterface = new Interface(abiFiatTokenV2);\n\n/**\n * Determines the type of the transaction by analyzing the txParams.\n * It will never return TRANSACTION_TYPE_CANCEL or TRANSACTION_TYPE_RETRY as these\n * represent specific events that we specify manually at transaction creation.\n *\n * @param txParams - Parameters for the transaction.\n * @param ethQuery - EthQuery instance.\n * @returns A object with the transaction type and the contract code response in Hex.\n */\nexport async function determineTransactionType(\n txParams: TransactionParams,\n ethQuery: EthQuery,\n): Promise<InferTransactionTypeResult> {\n const { data, to } = txParams;\n\n if (data && !to) {\n return { type: TransactionType.deployContract, getCodeResponse: undefined };\n }\n\n const { contractCode: getCodeResponse, isContractAddress } =\n await readAddressAsContract(ethQuery, to);\n\n if (!isContractAddress) {\n return { type: TransactionType.simpleSend, getCodeResponse };\n }\n\n const hasValue = Number(txParams.value ?? '0') !== 0;\n\n const contractInteractionResult = {\n type: TransactionType.contractInteraction,\n getCodeResponse,\n };\n\n if (!data || hasValue) {\n return contractInteractionResult;\n }\n\n const name = parseStandardTokenTransactionData(data)?.name;\n\n if (!name) {\n return contractInteractionResult;\n }\n\n const tokenMethodName = [\n TransactionType.tokenMethodApprove,\n TransactionType.tokenMethodSetApprovalForAll,\n TransactionType.tokenMethodTransfer,\n TransactionType.tokenMethodTransferFrom,\n TransactionType.tokenMethodSafeTransferFrom,\n TransactionType.tokenMethodIncreaseAllowance,\n ].find(\n (methodName) => methodName.toLowerCase() === (name as string).toLowerCase(),\n );\n\n if (tokenMethodName) {\n return { type: tokenMethodName, getCodeResponse };\n }\n\n return contractInteractionResult;\n}\n\n/**\n * Attempts to decode transaction data using ABIs for three different token standards: ERC20, ERC721, ERC1155.\n * The data will decode correctly if the transaction is an interaction with a contract that matches one of these\n * contract standards\n *\n * @param data - Encoded transaction data.\n * @returns A representation of an ethereum contract call.\n */\nfunction parseStandardTokenTransactionData(\n data?: string,\n): TransactionDescription | undefined {\n if (!data) {\n return undefined;\n }\n\n try {\n return ERC20Interface.parseTransaction({ data });\n } catch {\n // ignore and next try to parse with erc721 ABI\n }\n\n try {\n return ERC721Interface.parseTransaction({ data });\n } catch {\n // ignore and next try to parse with erc1155 ABI\n }\n\n try {\n return ERC1155Interface.parseTransaction({ data });\n } catch {\n // ignore and return undefined\n }\n\n try {\n return USDCInterface.parseTransaction({ data });\n } catch {\n // ignore and return undefined\n }\n\n return undefined;\n}\n\n/**\n * Reads an Ethereum address and determines if it is a contract address.\n *\n * @param ethQuery - The Ethereum query object used to interact with the Ethereum blockchain.\n * @param address - The Ethereum address.\n * @returns An object containing the contract code and a boolean indicating if it is a contract address.\n */\nasync function readAddressAsContract(\n ethQuery: EthQuery,\n address?: string,\n): Promise<{\n contractCode: string | null;\n isContractAddress: boolean;\n}> {\n let contractCode;\n try {\n contractCode = await query(ethQuery, 'getCode', [address]);\n } catch (e) {\n contractCode = null;\n }\n\n const isContractAddress = contractCode\n ? contractCode !== '0x' && contractCode !== '0x0'\n : false;\n return { contractCode, isContractAddress };\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-J56A7UCK.mjs";
|
|
4
4
|
import {
|
|
5
5
|
CHAIN_IDS
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-DTMKGTYC.mjs";
|
|
7
7
|
import {
|
|
8
8
|
createModuleLogger,
|
|
9
9
|
projectLogger
|
|
@@ -208,4 +208,4 @@ export {
|
|
|
208
208
|
updateSwapsTransaction,
|
|
209
209
|
updatePostTransactionBalance
|
|
210
210
|
};
|
|
211
|
-
//# sourceMappingURL=chunk-
|
|
211
|
+
//# sourceMappingURL=chunk-TJXPMOA6.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
GasFeeEstimateLevel
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YEJJKWT2.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-TWND5SFD.mjs.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SWAP_TRANSACTION_TYPES
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-TJXPMOA6.mjs";
|
|
4
4
|
import {
|
|
5
5
|
getGasFeeFlow
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-TWND5SFD.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-TZEAWUXE.mjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkFK7AP6SHjs = require('./chunk-FK7AP6SH.js');
|
|
4
4
|
|
|
5
5
|
// src/utils/gas-flow.ts
|
|
6
6
|
var _controllerutils = require('@metamask/controller-utils');
|
|
@@ -18,7 +18,7 @@ function mergeGasFeeEstimates({
|
|
|
18
18
|
transactionGasFeeEstimates
|
|
19
19
|
}) {
|
|
20
20
|
if (gasFeeControllerEstimateType === _gasfeecontroller.GAS_ESTIMATE_TYPES.FEE_MARKET) {
|
|
21
|
-
return Object.values(
|
|
21
|
+
return Object.values(_chunkFK7AP6SHjs.GasFeeEstimateLevel).reduce(
|
|
22
22
|
(result, level) => ({
|
|
23
23
|
...result,
|
|
24
24
|
[level]: mergeFeeMarketEstimate(
|
|
@@ -30,7 +30,7 @@ function mergeGasFeeEstimates({
|
|
|
30
30
|
);
|
|
31
31
|
}
|
|
32
32
|
if (gasFeeControllerEstimateType === _gasfeecontroller.GAS_ESTIMATE_TYPES.LEGACY) {
|
|
33
|
-
return Object.values(
|
|
33
|
+
return Object.values(_chunkFK7AP6SHjs.GasFeeEstimateLevel).reduce(
|
|
34
34
|
(result, level) => ({
|
|
35
35
|
...result,
|
|
36
36
|
[level]: getLegacyEstimate(transactionGasFeeEstimates[level])
|
|
@@ -59,4 +59,4 @@ function getLegacyEstimate(transactionGasFeeEstimate) {
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
exports.getGasFeeFlow = getGasFeeFlow; exports.mergeGasFeeEstimates = mergeGasFeeEstimates;
|
|
62
|
-
//# sourceMappingURL=chunk-
|
|
62
|
+
//# sourceMappingURL=chunk-UH7FNVKS.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkQTQSCTQAjs = require('./chunk-QTQSCTQA.js');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _chunkUH7FNVKSjs = require('./chunk-UH7FNVKS.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js');
|
|
@@ -20,7 +20,7 @@ var log = _utils.createModuleLogger.call(void 0, _chunkS6VGOPUYjs.projectLogger,
|
|
|
20
20
|
async function updateGasFees(request) {
|
|
21
21
|
const { txMeta } = request;
|
|
22
22
|
const initialParams = { ...txMeta.txParams };
|
|
23
|
-
const isSwap =
|
|
23
|
+
const isSwap = _chunkQTQSCTQAjs.SWAP_TRANSACTION_TYPES.includes(
|
|
24
24
|
txMeta.type
|
|
25
25
|
);
|
|
26
26
|
const savedGasFees = isSwap ? void 0 : request.getSavedGasFees(txMeta.chainId);
|
|
@@ -185,7 +185,7 @@ async function getSuggestedGasFees(request) {
|
|
|
185
185
|
if (!eip1559 && txMeta.txParams.gasPrice || eip1559 && txMeta.txParams.maxFeePerGas && txMeta.txParams.maxPriorityFeePerGas) {
|
|
186
186
|
return {};
|
|
187
187
|
}
|
|
188
|
-
const gasFeeFlow =
|
|
188
|
+
const gasFeeFlow = _chunkUH7FNVKSjs.getGasFeeFlow.call(void 0, txMeta, gasFeeFlows);
|
|
189
189
|
try {
|
|
190
190
|
const response = await gasFeeFlow.getGasFees({
|
|
191
191
|
ethQuery,
|
|
@@ -205,4 +205,4 @@ async function getSuggestedGasFees(request) {
|
|
|
205
205
|
|
|
206
206
|
|
|
207
207
|
exports.updateGasFees = updateGasFees; exports.gweiDecimalToWeiHex = gweiDecimalToWeiHex;
|
|
208
|
-
//# sourceMappingURL=chunk-
|
|
208
|
+
//# sourceMappingURL=chunk-UUSYJGGQ.js.map
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkKT6UAKBBjs = require('./chunk-KT6UAKBB.js');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkHMOSP33Fjs = require('./chunk-HMOSP33F.js');
|
|
4
9
|
|
|
5
10
|
|
|
6
11
|
var _chunkS6VGOPUYjs = require('./chunk-S6VGOPUY.js');
|
|
@@ -11,11 +16,12 @@ var _controllerutils = require('@metamask/controller-utils');
|
|
|
11
16
|
var _metamaskethabis = require('@metamask/metamask-eth-abis');
|
|
12
17
|
var _utils = require('@metamask/utils');
|
|
13
18
|
var log = _utils.createModuleLogger.call(void 0, _chunkS6VGOPUYjs.projectLogger, "simulation");
|
|
19
|
+
var REVERTED_ERRORS = ["execution reverted", "insufficient funds for gas"];
|
|
14
20
|
async function getSimulationData(request) {
|
|
15
21
|
const { chainId, from, to, value, data } = request;
|
|
16
22
|
log("Getting simulation data", request);
|
|
17
23
|
try {
|
|
18
|
-
const response = await
|
|
24
|
+
const response = await _chunkKT6UAKBBjs.simulateTransactions.call(void 0, chainId, {
|
|
19
25
|
transactions: [
|
|
20
26
|
{
|
|
21
27
|
data,
|
|
@@ -30,8 +36,11 @@ async function getSimulationData(request) {
|
|
|
30
36
|
withLogs: true
|
|
31
37
|
});
|
|
32
38
|
const transactionError = response.transactions?.[0]?.error;
|
|
39
|
+
if (REVERTED_ERRORS.some((error) => transactionError?.includes(error))) {
|
|
40
|
+
throw new (0, _chunkHMOSP33Fjs.SimulationRevertedError)();
|
|
41
|
+
}
|
|
33
42
|
if (transactionError) {
|
|
34
|
-
throw
|
|
43
|
+
throw new (0, _chunkHMOSP33Fjs.SimulationError)(transactionError);
|
|
35
44
|
}
|
|
36
45
|
const nativeBalanceChange = getNativeBalanceChange(request.from, response);
|
|
37
46
|
const events = getEvents(response);
|
|
@@ -48,8 +57,7 @@ async function getSimulationData(request) {
|
|
|
48
57
|
tokenBalanceChanges: [],
|
|
49
58
|
error: {
|
|
50
59
|
code: rawError.code,
|
|
51
|
-
message: rawError.message
|
|
52
|
-
isReverted: rawError.message?.includes("execution reverted") ?? false
|
|
60
|
+
message: rawError.message
|
|
53
61
|
}
|
|
54
62
|
};
|
|
55
63
|
}
|
|
@@ -125,12 +133,12 @@ async function getTokenBalanceChanges(request, events) {
|
|
|
125
133
|
if (!balanceTransactions.length) {
|
|
126
134
|
return [];
|
|
127
135
|
}
|
|
128
|
-
const response = await
|
|
136
|
+
const response = await _chunkKT6UAKBBjs.simulateTransactions.call(void 0, request.chainId, {
|
|
129
137
|
transactions: [...balanceTransactions, request, ...balanceTransactions]
|
|
130
138
|
});
|
|
131
139
|
log("Balance simulation response", response);
|
|
132
140
|
if (response.transactions.length !== balanceTransactions.length * 2 + 1) {
|
|
133
|
-
throw new
|
|
141
|
+
throw new (0, _chunkHMOSP33Fjs.SimulationInvalidResponseError)();
|
|
134
142
|
}
|
|
135
143
|
return [...balanceTransactionsByToken.keys()].map((token, index) => {
|
|
136
144
|
const previousBalance = normalizeReturnValue(
|
|
@@ -262,4 +270,4 @@ function normalizeReturnValue(value) {
|
|
|
262
270
|
|
|
263
271
|
|
|
264
272
|
exports.getSimulationData = getSimulationData;
|
|
265
|
-
//# sourceMappingURL=chunk-
|
|
273
|
+
//# sourceMappingURL=chunk-V5X6MZHN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/simulation.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Fragment, LogDescription, Result } from '@ethersproject/abi';\nimport { Interface } from '@ethersproject/abi';\nimport { hexToBN, toHex } from '@metamask/controller-utils';\nimport { abiERC20, abiERC721, abiERC1155 } from '@metamask/metamask-eth-abis';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport {\n SimulationError,\n SimulationInvalidResponseError,\n SimulationRevertedError,\n} from '../errors';\nimport { projectLogger } from '../logger';\nimport type {\n SimulationBalanceChange,\n SimulationData,\n SimulationTokenBalanceChange,\n SimulationToken,\n} from '../types';\nimport { SimulationTokenStandard } from '../types';\nimport { simulateTransactions } from './simulation-api';\nimport type {\n SimulationResponseLog,\n SimulationRequestTransaction,\n SimulationResponse,\n SimulationResponseCallTrace,\n} from './simulation-api';\n\nconst log = createModuleLogger(projectLogger, 'simulation');\n\nconst REVERTED_ERRORS = ['execution reverted', 'insufficient funds for gas'];\n\ntype ABI = Fragment[];\n\nexport type GetSimulationDataRequest = {\n chainId: Hex;\n from: Hex;\n to?: Hex;\n value?: Hex;\n data?: Hex;\n};\n\ntype ParsedEvent = {\n contractAddress: Hex;\n tokenStandard: SimulationTokenStandard;\n name: string;\n args: Record<string, Hex | Hex[]>;\n abi: ABI;\n};\n\n/**\n * Generate simulation data for a transaction.\n * @param request - The transaction to simulate.\n * @param request.chainId - The chain ID of the transaction.\n * @param request.from - The sender of the transaction.\n * @param request.to - The recipient of the transaction.\n * @param request.value - The value of the transaction.\n * @param request.data - The data of the transaction.\n * @returns The simulation data.\n */\nexport async function getSimulationData(\n request: GetSimulationDataRequest,\n): Promise<SimulationData> {\n const { chainId, from, to, value, data } = request;\n\n log('Getting simulation data', request);\n\n try {\n const response = await simulateTransactions(chainId, {\n transactions: [\n {\n data,\n from,\n maxFeePerGas: '0x0',\n maxPriorityFeePerGas: '0x0',\n to,\n value,\n },\n ],\n withCallTrace: true,\n withLogs: true,\n });\n\n const transactionError = response.transactions?.[0]?.error;\n\n if (REVERTED_ERRORS.some((error) => transactionError?.includes(error))) {\n throw new SimulationRevertedError();\n }\n\n if (transactionError) {\n throw new SimulationError(transactionError);\n }\n\n const nativeBalanceChange = getNativeBalanceChange(request.from, response);\n const events = getEvents(response);\n\n log('Parsed events', events);\n\n const tokenBalanceChanges = await getTokenBalanceChanges(request, events);\n\n return {\n nativeBalanceChange,\n tokenBalanceChanges,\n };\n } catch (error) {\n log('Failed to get simulation data', error, request);\n\n const rawError = error as { code?: number; message?: string };\n\n return {\n tokenBalanceChanges: [],\n error: {\n code: rawError.code,\n message: rawError.message,\n },\n };\n }\n}\n\n/**\n * Extract the native balance change from a simulation response.\n * @param userAddress - The user's account address.\n * @param response - The simulation response.\n * @returns The native balance change or undefined if unchanged.\n */\nfunction getNativeBalanceChange(\n userAddress: Hex,\n response: SimulationResponse,\n): SimulationBalanceChange | undefined {\n const transactionResponse = response.transactions[0];\n\n /* istanbul ignore next */\n if (!transactionResponse) {\n return undefined;\n }\n\n const { stateDiff } = transactionResponse;\n const previousBalance = stateDiff?.pre?.[userAddress]?.balance;\n const newBalance = stateDiff?.post?.[userAddress]?.balance;\n\n if (!previousBalance || !newBalance) {\n return undefined;\n }\n\n return getSimulationBalanceChange(previousBalance, newBalance);\n}\n\n/**\n * Extract events from a simulation response.\n * @param response - The simulation response.\n * @returns The parsed events.\n */\nfunction getEvents(response: SimulationResponse): ParsedEvent[] {\n /* istanbul ignore next */\n const logs = extractLogs(\n response.transactions[0]?.callTrace ?? ({} as SimulationResponseCallTrace),\n );\n\n log('Extracted logs', logs);\n\n const erc20Interface = new Interface(abiERC20);\n const erc721Interface = new Interface(abiERC721);\n const erc1155Interface = new Interface(abiERC1155);\n\n return logs\n .map((currentLog) => {\n const event = parseLog(\n currentLog,\n erc20Interface,\n erc721Interface,\n erc1155Interface,\n );\n\n if (!event) {\n log('Failed to parse log', currentLog);\n return undefined;\n }\n\n /* istanbul ignore next */\n const inputs = event.abi.find((e) => e.name === event.name)?.inputs;\n\n /* istanbul ignore if */\n if (!inputs) {\n log('Failed to find inputs for event', event);\n return undefined;\n }\n\n const args = parseEventArgs(event.args, inputs);\n\n return {\n contractAddress: currentLog.address,\n tokenStandard: event.standard,\n name: event.name,\n args,\n abi: event.abi,\n };\n })\n .filter((e) => e !== undefined) as ParsedEvent[];\n}\n\n/**\n * Parse event arguments using ABI input definitions.\n * @param args - The raw event arguments.\n * @param abiInputs - The ABI input definitions.\n * @returns The parsed event arguments.\n */\nfunction parseEventArgs(\n args: Result,\n abiInputs: { name: string }[],\n): Record<string, Hex | Hex[]> {\n return args.reduce((result, arg, index) => {\n const name = abiInputs[index].name.replace('_', '');\n const value = parseEventArgValue(arg);\n\n result[name] = value;\n\n return result;\n }, {});\n}\n\n/**\n * Parse an event argument value.\n * @param value - The event argument value.\n * @returns The parsed event argument value.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction parseEventArgValue(value: any): Hex | Hex[] {\n if (Array.isArray(value)) {\n return value.map(parseEventArgValue) as Hex[];\n }\n\n return (value.toHexString?.() ?? value).toLowerCase();\n}\n\n/**\n * Generate token balance changes from parsed events.\n * @param request - The transaction that was simulated.\n * @param events - The parsed events.\n * @returns An array of token balance changes.\n */\nasync function getTokenBalanceChanges(\n request: GetSimulationDataRequest,\n events: ParsedEvent[],\n): Promise<SimulationTokenBalanceChange[]> {\n const balanceTransactionsByToken = getTokenBalanceTransactions(\n request,\n events,\n );\n\n const balanceTransactions = [...balanceTransactionsByToken.values()];\n\n log('Generated balance transactions', balanceTransactions);\n\n if (!balanceTransactions.length) {\n return [];\n }\n\n const response = await simulateTransactions(request.chainId as Hex, {\n transactions: [...balanceTransactions, request, ...balanceTransactions],\n });\n\n log('Balance simulation response', response);\n\n if (response.transactions.length !== balanceTransactions.length * 2 + 1) {\n throw new SimulationInvalidResponseError();\n }\n\n return [...balanceTransactionsByToken.keys()]\n .map((token, index) => {\n const previousBalance = normalizeReturnValue(\n response.transactions[index].return,\n );\n\n const newBalance = normalizeReturnValue(\n response.transactions[index + balanceTransactions.length + 1].return,\n );\n\n const balanceChange = getSimulationBalanceChange(\n previousBalance,\n newBalance,\n );\n\n if (!balanceChange) {\n return undefined;\n }\n\n return {\n ...token,\n ...balanceChange,\n };\n })\n .filter((change) => change !== undefined) as SimulationTokenBalanceChange[];\n}\n\n/**\n * Generate transactions to check token balances.\n * @param request - The transaction that was simulated.\n * @param events - The parsed events.\n * @returns A map of token balance transactions keyed by token.\n */\nfunction getTokenBalanceTransactions(\n request: GetSimulationDataRequest,\n events: ParsedEvent[],\n): Map<SimulationToken, SimulationRequestTransaction> {\n const tokenKeys = new Set();\n\n return events.reduce((result, event) => {\n if (\n !['Transfer', 'TransferSingle', 'TransferBatch'].includes(event.name) ||\n ![event.args.from, event.args.to].includes(request.from)\n ) {\n log('Ignoring event', event);\n return result;\n }\n\n // ERC-20 does not have a token ID so default to undefined.\n let tokenIds: (Hex | undefined)[] = [undefined];\n\n if (event.tokenStandard === SimulationTokenStandard.erc721) {\n tokenIds = [event.args.tokenId as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferSingle'\n ) {\n tokenIds = [event.args.id as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferBatch'\n ) {\n tokenIds = event.args.ids as Hex[];\n }\n\n log('Extracted token ids', tokenIds);\n\n for (const tokenId of tokenIds) {\n const simulationToken: SimulationToken = {\n address: event.contractAddress,\n standard: event.tokenStandard,\n id: tokenId,\n };\n\n const tokenKey = JSON.stringify(simulationToken);\n\n if (tokenKeys.has(tokenKey)) {\n log(\n 'Ignoring additional event with same contract and token ID',\n simulationToken,\n );\n continue;\n }\n\n tokenKeys.add(tokenKey);\n\n const parameters = [request.from];\n\n if (event.tokenStandard === SimulationTokenStandard.erc1155) {\n parameters.push(tokenId as Hex);\n }\n\n result.set(simulationToken, {\n from: request.from,\n to: event.contractAddress,\n data: new Interface(event.abi).encodeFunctionData(\n 'balanceOf',\n parameters,\n ) as Hex,\n });\n }\n\n return result;\n }, new Map<SimulationToken, SimulationRequestTransaction>());\n}\n\n/**\n * Parse a raw event log using known ABIs.\n * @param eventLog - The raw event log.\n * @param erc20 - The ERC-20 ABI interface.\n * @param erc721 - The ERC-721 ABI interface.\n * @param erc1155 - The ERC-1155 ABI interface.\n * @returns The parsed event log or undefined if it could not be parsed.\n */\nfunction parseLog(\n eventLog: SimulationResponseLog,\n erc20: Interface,\n erc721: Interface,\n erc1155: Interface,\n):\n | (LogDescription & { abi: ABI; standard: SimulationTokenStandard })\n | undefined {\n const abisByStandard = [\n {\n abi: abiERC20,\n contractInterface: erc20,\n standard: SimulationTokenStandard.erc20,\n },\n {\n abi: abiERC721,\n contractInterface: erc721,\n standard: SimulationTokenStandard.erc721,\n },\n {\n abi: abiERC1155,\n contractInterface: erc1155,\n standard: SimulationTokenStandard.erc1155,\n },\n ];\n\n for (const { abi, contractInterface, standard } of abisByStandard) {\n try {\n return {\n ...contractInterface.parseLog(eventLog),\n abi,\n standard,\n };\n } catch (e) {\n continue;\n }\n }\n\n return undefined;\n}\n\n/**\n * Extract all logs from a call trace tree.\n * @param call - The root call trace.\n * @returns An array of logs.\n */\nfunction extractLogs(\n call: SimulationResponseCallTrace,\n): SimulationResponseLog[] {\n /* istanbul ignore next */\n const logs = call.logs ?? [];\n\n /* istanbul ignore next */\n const nestedCalls = call.calls ?? [];\n\n return [\n ...logs,\n ...nestedCalls.map((nestedCall) => extractLogs(nestedCall)).flat(),\n ];\n}\n\n/**\n * Generate balance change data from previous and new balances.\n * @param previousBalance - The previous balance.\n * @param newBalance - The new balance.\n * @returns The balance change data or undefined if unchanged.\n */\nfunction getSimulationBalanceChange(\n previousBalance: Hex,\n newBalance: Hex,\n): SimulationBalanceChange | undefined {\n const differenceBN = hexToBN(newBalance).sub(hexToBN(previousBalance));\n const isDecrease = differenceBN.isNeg();\n const difference = toHex(differenceBN.abs());\n\n if (differenceBN.isZero()) {\n log('Balance change is zero');\n return undefined;\n }\n\n return {\n previousBalance,\n newBalance,\n difference,\n isDecrease,\n };\n}\n\n/**\n * Normalize a return value.\n * @param value - The return value to normalize.\n * @returns The normalized return value.\n */\nfunction normalizeReturnValue(value: Hex): Hex {\n return toHex(hexToBN(value));\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkWIZVJM2Bjs = require('./chunk-WIZVJM2B.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 = _chunkWIZVJM2Bjs.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-VP2DBWOT.js.map
|
|
@@ -18,9 +18,9 @@ function getLayer1GasFeeFlow(transactionMeta, layer1GasFeeFlows) {
|
|
|
18
18
|
);
|
|
19
19
|
}
|
|
20
20
|
async function getTransactionLayer1GasFee({
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
layer1GasFeeFlows,
|
|
22
|
+
provider,
|
|
23
|
+
transactionMeta
|
|
24
24
|
}) {
|
|
25
25
|
const layer1GasFeeFlow = getLayer1GasFeeFlow(
|
|
26
26
|
transactionMeta,
|
|
@@ -32,7 +32,7 @@ async function getTransactionLayer1GasFee({
|
|
|
32
32
|
}
|
|
33
33
|
try {
|
|
34
34
|
const { layer1Fee } = await layer1GasFeeFlow.getLayer1Fee({
|
|
35
|
-
|
|
35
|
+
provider,
|
|
36
36
|
transactionMeta
|
|
37
37
|
});
|
|
38
38
|
return layer1Fee;
|
|
@@ -43,6 +43,7 @@ async function getTransactionLayer1GasFee({
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
export {
|
|
46
|
-
updateTransactionLayer1GasFee
|
|
46
|
+
updateTransactionLayer1GasFee,
|
|
47
|
+
getTransactionLayer1GasFee
|
|
47
48
|
};
|
|
48
|
-
//# sourceMappingURL=chunk-
|
|
49
|
+
//# sourceMappingURL=chunk-W3CS5GRD.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/layer1-gas-fee-flow.ts"],"sourcesContent":["import type { Provider } from '@metamask/network-controller';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\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 */\nexport async 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"],"mappings":";;;;;AACA,SAAS,0BAAoC;AAK7C,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,eAAsB,2BAA2B;AAAA,EAC/C;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;","names":[]}
|
|
@@ -26,7 +26,8 @@ var CHAIN_IDS = {
|
|
|
26
26
|
MOONRIVER: "0x505",
|
|
27
27
|
GNOSIS: "0x64",
|
|
28
28
|
ARBITRUM: "0xa4b1",
|
|
29
|
-
ZKSYNC_ERA: "0x144"
|
|
29
|
+
ZKSYNC_ERA: "0x144",
|
|
30
|
+
ZORA: "0x76adf1"
|
|
30
31
|
};
|
|
31
32
|
var DEFAULT_ETHERSCAN_DOMAIN = "etherscan.io";
|
|
32
33
|
var DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = "api";
|
|
@@ -124,4 +125,4 @@ var GAS_BUFFER_CHAIN_OVERRIDES = {
|
|
|
124
125
|
|
|
125
126
|
|
|
126
127
|
exports.CHAIN_IDS = CHAIN_IDS; exports.DEFAULT_ETHERSCAN_DOMAIN = DEFAULT_ETHERSCAN_DOMAIN; exports.DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX; exports.ETHERSCAN_SUPPORTED_NETWORKS = ETHERSCAN_SUPPORTED_NETWORKS; exports.GAS_BUFFER_CHAIN_OVERRIDES = GAS_BUFFER_CHAIN_OVERRIDES;
|
|
127
|
-
//# sourceMappingURL=chunk-
|
|
128
|
+
//# sourceMappingURL=chunk-WIZVJM2B.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/constants.ts"],"names":[],"mappings":"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","sourcesContent":["export const CHAIN_IDS = {\n MAINNET: '0x1',\n GOERLI: '0x5',\n BASE: '0x2105',\n BASE_TESTNET: '0x14a33',\n BSC: '0x38',\n BSC_TESTNET: '0x61',\n OPTIMISM: '0xa',\n OPTIMISM_TESTNET: '0x1a4',\n OPBNB: '0xcc',\n OPBNB_TESTNET: '0x15eb',\n OPTIMISM_SEPOLIA: '0xaa37dc',\n POLYGON: '0x89',\n POLYGON_TESTNET: '0x13881',\n AVALANCHE: '0xa86a',\n AVALANCHE_TESTNET: '0xa869',\n FANTOM: '0xfa',\n FANTOM_TESTNET: '0xfa2',\n SEPOLIA: '0xaa36a7',\n LINEA_GOERLI: '0xe704',\n LINEA_SEPOLIA: '0xe705',\n LINEA_MAINNET: '0xe708',\n MOONBEAM: '0x504',\n MOONBEAM_TESTNET: '0x507',\n MOONRIVER: '0x505',\n GNOSIS: '0x64',\n ARBITRUM: '0xa4b1',\n ZKSYNC_ERA: '0x144',\n ZORA: '0x76adf1',\n} as const;\n\nexport const DEFAULT_ETHERSCAN_DOMAIN = 'etherscan.io';\nexport const DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX = 'api';\n\nexport const ETHERSCAN_SUPPORTED_NETWORKS = {\n [CHAIN_IDS.GOERLI]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,\n },\n [CHAIN_IDS.MAINNET]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.SEPOLIA]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,\n },\n [CHAIN_IDS.LINEA_GOERLI]: {\n domain: 'lineascan.build',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-goerli`,\n },\n [CHAIN_IDS.LINEA_SEPOLIA]: {\n domain: 'lineascan.build',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia`,\n },\n [CHAIN_IDS.LINEA_MAINNET]: {\n domain: 'lineascan.build',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.BSC]: {\n domain: 'bscscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.BSC_TESTNET]: {\n domain: 'bscscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.OPTIMISM]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-optimistic`,\n },\n [CHAIN_IDS.OPTIMISM_SEPOLIA]: {\n domain: DEFAULT_ETHERSCAN_DOMAIN,\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-sepolia-optimistic`,\n },\n [CHAIN_IDS.POLYGON]: {\n domain: 'polygonscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.POLYGON_TESTNET]: {\n domain: 'polygonscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-mumbai`,\n },\n [CHAIN_IDS.AVALANCHE]: {\n domain: 'snowtrace.io',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.AVALANCHE_TESTNET]: {\n domain: 'snowtrace.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.FANTOM]: {\n domain: 'ftmscan.com',\n subdomain: DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX,\n },\n [CHAIN_IDS.FANTOM_TESTNET]: {\n domain: 'ftmscan.com',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-testnet`,\n },\n [CHAIN_IDS.MOONBEAM]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbeam`,\n },\n [CHAIN_IDS.MOONBEAM_TESTNET]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonbase`,\n },\n [CHAIN_IDS.MOONRIVER]: {\n domain: 'moonscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-moonriver`,\n },\n [CHAIN_IDS.GNOSIS]: {\n domain: 'gnosisscan.io',\n subdomain: `${DEFAULT_ETHERSCAN_SUBDOMAIN_PREFIX}-gnosis`,\n },\n};\n\nexport const GAS_BUFFER_CHAIN_OVERRIDES = {\n [CHAIN_IDS.OPTIMISM]: 1,\n [CHAIN_IDS.OPTIMISM_SEPOLIA]: 1,\n};\n"]}
|