@metamask/transaction-controller 28.0.0 → 28.1.1
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 +19 -1
- package/dist/TransactionController.js +17 -15
- package/dist/TransactionController.mjs +16 -14
- package/dist/{chunk-LYD4TEKH.js → chunk-4RJXBKSR.js} +5 -5
- package/dist/{chunk-DRSMLO7B.mjs → chunk-5G6OHAXI.mjs} +2 -2
- package/dist/{chunk-CPYXP2OC.js → chunk-5XQ2KRYL.js} +3 -3
- package/dist/{chunk-WLCFETHR.js → chunk-C2LNDHP4.js} +10 -10
- package/dist/{chunk-TKWTUPCQ.mjs → chunk-CPMTUMMZ.mjs} +3 -3
- package/dist/{chunk-L337FYVS.js → chunk-EQNKFFTM.js} +3 -3
- package/dist/{chunk-3JEUO765.js → chunk-EQT25RSP.js} +6 -6
- package/dist/{chunk-RXRJSBSF.mjs → chunk-F6E3TTR3.mjs} +2 -2
- package/dist/{chunk-F247MMTE.js → chunk-FDUCRHYT.js} +3 -3
- package/dist/chunk-FG74Z3F5.mjs +102 -0
- package/dist/chunk-FG74Z3F5.mjs.map +1 -0
- package/dist/{chunk-X5WPBDI5.js → chunk-FMCTVRU2.js} +28 -25
- package/dist/chunk-FMCTVRU2.js.map +1 -0
- package/dist/{chunk-H6NWVGHL.mjs → chunk-HQAADNXH.mjs} +19 -16
- package/dist/chunk-HQAADNXH.mjs.map +1 -0
- package/dist/{chunk-P74YLPJO.mjs → chunk-LDXTSESK.mjs} +2 -2
- package/dist/{chunk-UBXRAA6G.js → chunk-LNX4JTOL.js} +3 -3
- package/dist/{chunk-L7ZKSKEI.mjs → chunk-MDRMMUMS.mjs} +33 -19
- package/dist/chunk-MDRMMUMS.mjs.map +1 -0
- package/dist/{chunk-2XFBWPHD.mjs → chunk-NCRWKI6Y.mjs} +2 -2
- package/dist/{chunk-CWWZQZVR.mjs → chunk-NPEXNXSY.mjs} +2 -2
- package/dist/chunk-NYKRCWBG.js +31 -0
- package/dist/chunk-NYKRCWBG.js.map +1 -0
- package/dist/{chunk-4VLQV2GA.mjs → chunk-O6ZZVIFH.mjs} +4 -2
- package/dist/{chunk-LQS2M5QR.js.map → chunk-O6ZZVIFH.mjs.map} +1 -1
- package/dist/{chunk-DOX6H5UJ.mjs → chunk-QZLPYOGC.mjs} +2 -2
- package/dist/{chunk-LQS2M5QR.js → chunk-UGN7PBON.js} +4 -2
- package/dist/chunk-UGN7PBON.js.map +1 -0
- package/dist/{chunk-AO3AE3L7.js → chunk-V72C4MCR.js} +3 -3
- package/dist/chunk-VEVVBHP3.mjs +31 -0
- package/dist/chunk-VEVVBHP3.mjs.map +1 -0
- package/dist/chunk-WR5F34OW.js +23 -0
- package/dist/chunk-WR5F34OW.js.map +1 -0
- package/dist/{chunk-3VF7ZGRV.js → chunk-X3KACH5P.js} +35 -21
- package/dist/chunk-X3KACH5P.js.map +1 -0
- package/dist/chunk-YVCX6Z75.js +102 -0
- package/dist/chunk-YVCX6Z75.js.map +1 -0
- package/dist/chunk-Z4GV3YQQ.mjs +23 -0
- package/dist/chunk-Z4GV3YQQ.mjs.map +1 -0
- package/dist/{chunk-RBF6CW7D.mjs → chunk-ZGUNOEUQ.mjs} +2 -2
- package/dist/constants.js +2 -2
- package/dist/constants.mjs +1 -1
- package/dist/gas-flows/DefaultGasFeeFlow.js +5 -5
- package/dist/gas-flows/DefaultGasFeeFlow.mjs +4 -4
- package/dist/gas-flows/LineaGasFeeFlow.js +6 -6
- package/dist/gas-flows/LineaGasFeeFlow.mjs +5 -5
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.js +4 -3
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs +3 -2
- package/dist/gas-flows/OracleLayer1GasFeeFlow.js +9 -0
- package/dist/gas-flows/OracleLayer1GasFeeFlow.js.map +1 -0
- package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs +9 -0
- package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs.map +1 -0
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.js +11 -0
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.js.map +1 -0
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs +11 -0
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs.map +1 -0
- package/dist/helpers/EtherscanRemoteTransactionSource.js +4 -4
- package/dist/helpers/EtherscanRemoteTransactionSource.mjs +3 -3
- package/dist/helpers/MultichainTrackingHelper.js +5 -5
- package/dist/helpers/MultichainTrackingHelper.mjs +4 -4
- package/dist/index.js +17 -15
- package/dist/index.mjs +16 -14
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/types/TransactionController.d.ts.map +1 -1
- package/dist/types/constants.d.ts +2 -0
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/gas-flows/OptimismLayer1GasFeeFlow.d.ts +5 -5
- package/dist/types/gas-flows/OptimismLayer1GasFeeFlow.d.ts.map +1 -1
- package/dist/types/gas-flows/OracleLayer1GasFeeFlow.d.ts +12 -0
- package/dist/types/gas-flows/OracleLayer1GasFeeFlow.d.ts.map +1 -0
- package/dist/types/gas-flows/ScrollLayer1GasFeeFlow.d.ts +10 -0
- package/dist/types/gas-flows/ScrollLayer1GasFeeFlow.d.ts.map +1 -0
- package/dist/types/utils/simulation.d.ts +18 -0
- package/dist/types/utils/simulation.d.ts.map +1 -1
- package/dist/utils/etherscan.js +3 -3
- package/dist/utils/etherscan.mjs +2 -2
- package/dist/utils/gas-fees.js +4 -4
- package/dist/utils/gas-fees.mjs +3 -3
- package/dist/utils/gas.js +3 -3
- package/dist/utils/gas.mjs +2 -2
- package/dist/utils/simulation.js +5 -3
- package/dist/utils/simulation.mjs +4 -2
- package/dist/utils/swaps.js +3 -3
- package/dist/utils/swaps.mjs +2 -2
- package/package.json +2 -2
- package/dist/chunk-3VF7ZGRV.js.map +0 -1
- package/dist/chunk-4VLQV2GA.mjs.map +0 -1
- package/dist/chunk-53IYIDVS.mjs +0 -132
- package/dist/chunk-53IYIDVS.mjs.map +0 -1
- package/dist/chunk-ETMW527M.js +0 -132
- package/dist/chunk-ETMW527M.js.map +0 -1
- package/dist/chunk-H6NWVGHL.mjs.map +0 -1
- package/dist/chunk-L7ZKSKEI.mjs.map +0 -1
- package/dist/chunk-X5WPBDI5.js.map +0 -1
- /package/dist/{chunk-LYD4TEKH.js.map → chunk-4RJXBKSR.js.map} +0 -0
- /package/dist/{chunk-DRSMLO7B.mjs.map → chunk-5G6OHAXI.mjs.map} +0 -0
- /package/dist/{chunk-CPYXP2OC.js.map → chunk-5XQ2KRYL.js.map} +0 -0
- /package/dist/{chunk-WLCFETHR.js.map → chunk-C2LNDHP4.js.map} +0 -0
- /package/dist/{chunk-TKWTUPCQ.mjs.map → chunk-CPMTUMMZ.mjs.map} +0 -0
- /package/dist/{chunk-L337FYVS.js.map → chunk-EQNKFFTM.js.map} +0 -0
- /package/dist/{chunk-3JEUO765.js.map → chunk-EQT25RSP.js.map} +0 -0
- /package/dist/{chunk-RXRJSBSF.mjs.map → chunk-F6E3TTR3.mjs.map} +0 -0
- /package/dist/{chunk-F247MMTE.js.map → chunk-FDUCRHYT.js.map} +0 -0
- /package/dist/{chunk-P74YLPJO.mjs.map → chunk-LDXTSESK.mjs.map} +0 -0
- /package/dist/{chunk-UBXRAA6G.js.map → chunk-LNX4JTOL.js.map} +0 -0
- /package/dist/{chunk-2XFBWPHD.mjs.map → chunk-NCRWKI6Y.mjs.map} +0 -0
- /package/dist/{chunk-CWWZQZVR.mjs.map → chunk-NPEXNXSY.mjs.map} +0 -0
- /package/dist/{chunk-DOX6H5UJ.mjs.map → chunk-QZLPYOGC.mjs.map} +0 -0
- /package/dist/{chunk-AO3AE3L7.js.map → chunk-V72C4MCR.js.map} +0 -0
- /package/dist/{chunk-RBF6CW7D.mjs.map → chunk-ZGUNOEUQ.mjs.map} +0 -0
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import type { Fragment } from '@ethersproject/abi';
|
|
1
2
|
import { type Hex } from '@metamask/utils';
|
|
2
3
|
import type { SimulationData } from '../types';
|
|
4
|
+
import { SimulationTokenStandard } from '../types';
|
|
5
|
+
import type { SimulationResponse } from './simulation-api';
|
|
3
6
|
export declare enum SupportedToken {
|
|
4
7
|
ERC20 = "erc20",
|
|
5
8
|
ERC721 = "erc721",
|
|
@@ -7,6 +10,7 @@ export declare enum SupportedToken {
|
|
|
7
10
|
ERC20_WRAPPED = "erc20Wrapped",
|
|
8
11
|
ERC721_LEGACY = "erc721Legacy"
|
|
9
12
|
}
|
|
13
|
+
type ABI = Fragment[];
|
|
10
14
|
export type GetSimulationDataRequest = {
|
|
11
15
|
chainId: Hex;
|
|
12
16
|
from: Hex;
|
|
@@ -14,6 +18,13 @@ export type GetSimulationDataRequest = {
|
|
|
14
18
|
value?: Hex;
|
|
15
19
|
data?: Hex;
|
|
16
20
|
};
|
|
21
|
+
type ParsedEvent = {
|
|
22
|
+
contractAddress: Hex;
|
|
23
|
+
tokenStandard: SimulationTokenStandard;
|
|
24
|
+
name: string;
|
|
25
|
+
args: Record<string, Hex | Hex[]>;
|
|
26
|
+
abi: ABI;
|
|
27
|
+
};
|
|
17
28
|
/**
|
|
18
29
|
* Generate simulation data for a transaction.
|
|
19
30
|
* @param request - The transaction to simulate.
|
|
@@ -25,4 +36,11 @@ export type GetSimulationDataRequest = {
|
|
|
25
36
|
* @returns The simulation data.
|
|
26
37
|
*/
|
|
27
38
|
export declare function getSimulationData(request: GetSimulationDataRequest): Promise<SimulationData>;
|
|
39
|
+
/**
|
|
40
|
+
* Extract events from a simulation response.
|
|
41
|
+
* @param response - The simulation response.
|
|
42
|
+
* @returns The parsed events.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getEvents(response: SimulationResponse): ParsedEvent[];
|
|
45
|
+
export {};
|
|
28
46
|
//# sourceMappingURL=simulation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulation.d.ts","sourceRoot":"","sources":["../../../src/utils/simulation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"simulation.d.ts","sourceRoot":"","sources":["../../../src/utils/simulation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAA0B,MAAM,oBAAoB,CAAC;AAI3E,OAAO,EAAsB,KAAK,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAY/D,OAAO,KAAK,EAEV,cAAc,EAGf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,KAAK,EAGV,kBAAkB,EAGnB,MAAM,kBAAkB,CAAC;AAE1B,oBAAY,cAAc;IACxB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,aAAa,iBAAiB;IAC9B,aAAa,iBAAiB;CAC/B;AAED,KAAK,GAAG,GAAG,QAAQ,EAAE,CAAC;AAEtB,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,EAAE,GAAG,CAAC;IACV,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,eAAe,EAAE,GAAG,CAAC;IACrB,aAAa,EAAE,uBAAuB,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;IAClC,GAAG,EAAE,GAAG,CAAC;CACV,CAAC;AAuCF;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,cAAc,CAAC,CA6DzB;AA8BD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,WAAW,EAAE,CAuCrE"}
|
package/dist/utils/etherscan.js
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
6
|
-
require('../chunk-
|
|
5
|
+
var _chunkFDUCRHYTjs = require('../chunk-FDUCRHYT.js');
|
|
6
|
+
require('../chunk-UGN7PBON.js');
|
|
7
7
|
require('../chunk-S6VGOPUY.js');
|
|
8
8
|
require('../chunk-Z4BLTVTB.js');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
exports.fetchEtherscanTokenTransactions =
|
|
13
|
+
exports.fetchEtherscanTokenTransactions = _chunkFDUCRHYTjs.fetchEtherscanTokenTransactions; exports.fetchEtherscanTransactions = _chunkFDUCRHYTjs.fetchEtherscanTransactions; exports.getEtherscanApiHost = _chunkFDUCRHYTjs.getEtherscanApiHost;
|
|
14
14
|
//# sourceMappingURL=etherscan.js.map
|
package/dist/utils/etherscan.mjs
CHANGED
|
@@ -2,8 +2,8 @@ import {
|
|
|
2
2
|
fetchEtherscanTokenTransactions,
|
|
3
3
|
fetchEtherscanTransactions,
|
|
4
4
|
getEtherscanApiHost
|
|
5
|
-
} from "../chunk-
|
|
6
|
-
import "../chunk-
|
|
5
|
+
} from "../chunk-QZLPYOGC.mjs";
|
|
6
|
+
import "../chunk-O6ZZVIFH.mjs";
|
|
7
7
|
import "../chunk-UQQWZT6C.mjs";
|
|
8
8
|
import "../chunk-XUI43LEZ.mjs";
|
|
9
9
|
export {
|
package/dist/utils/gas-fees.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('../chunk-
|
|
4
|
+
var _chunkEQNKFFTMjs = require('../chunk-EQNKFFTM.js');
|
|
5
|
+
require('../chunk-C2LNDHP4.js');
|
|
6
6
|
require('../chunk-UGFBA4GV.js');
|
|
7
7
|
require('../chunk-UH7FNVKS.js');
|
|
8
|
-
require('../chunk-
|
|
8
|
+
require('../chunk-UGN7PBON.js');
|
|
9
9
|
require('../chunk-S6VGOPUY.js');
|
|
10
10
|
require('../chunk-FK7AP6SH.js');
|
|
11
11
|
require('../chunk-Z4BLTVTB.js');
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
exports.gweiDecimalToWeiHex =
|
|
15
|
+
exports.gweiDecimalToWeiHex = _chunkEQNKFFTMjs.gweiDecimalToWeiHex; exports.updateGasFees = _chunkEQNKFFTMjs.updateGasFees;
|
|
16
16
|
//# sourceMappingURL=gas-fees.js.map
|
package/dist/utils/gas-fees.mjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
gweiDecimalToWeiHex,
|
|
3
3
|
updateGasFees
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-LDXTSESK.mjs";
|
|
5
|
+
import "../chunk-ZGUNOEUQ.mjs";
|
|
6
6
|
import "../chunk-J56A7UCK.mjs";
|
|
7
7
|
import "../chunk-TWND5SFD.mjs";
|
|
8
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-O6ZZVIFH.mjs";
|
|
9
9
|
import "../chunk-UQQWZT6C.mjs";
|
|
10
10
|
import "../chunk-YEJJKWT2.mjs";
|
|
11
11
|
import "../chunk-XUI43LEZ.mjs";
|
package/dist/utils/gas.js
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var
|
|
9
|
-
require('../chunk-
|
|
8
|
+
var _chunkV72C4MCRjs = require('../chunk-V72C4MCR.js');
|
|
9
|
+
require('../chunk-UGN7PBON.js');
|
|
10
10
|
require('../chunk-S6VGOPUY.js');
|
|
11
11
|
require('../chunk-Z4BLTVTB.js');
|
|
12
12
|
|
|
@@ -16,5 +16,5 @@ require('../chunk-Z4BLTVTB.js');
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
exports.DEFAULT_GAS_MULTIPLIER =
|
|
19
|
+
exports.DEFAULT_GAS_MULTIPLIER = _chunkV72C4MCRjs.DEFAULT_GAS_MULTIPLIER; exports.FIXED_GAS = _chunkV72C4MCRjs.FIXED_GAS; exports.addGasBuffer = _chunkV72C4MCRjs.addGasBuffer; exports.estimateGas = _chunkV72C4MCRjs.estimateGas; exports.log = _chunkV72C4MCRjs.log; exports.updateGas = _chunkV72C4MCRjs.updateGas;
|
|
20
20
|
//# sourceMappingURL=gas.js.map
|
package/dist/utils/gas.mjs
CHANGED
package/dist/utils/simulation.js
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
var _chunkX3KACH5Pjs = require('../chunk-X3KACH5P.js');
|
|
5
6
|
require('../chunk-KT6UAKBB.js');
|
|
6
7
|
require('../chunk-HMOSP33F.js');
|
|
7
|
-
require('../chunk-
|
|
8
|
+
require('../chunk-UGN7PBON.js');
|
|
8
9
|
require('../chunk-S6VGOPUY.js');
|
|
9
10
|
require('../chunk-FK7AP6SH.js');
|
|
10
11
|
require('../chunk-Z4BLTVTB.js');
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
|
|
16
|
+
exports.SupportedToken = _chunkX3KACH5Pjs.SupportedToken; exports.getEvents = _chunkX3KACH5Pjs.getEvents; exports.getSimulationData = _chunkX3KACH5Pjs.getSimulationData;
|
|
15
17
|
//# sourceMappingURL=simulation.js.map
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SupportedToken,
|
|
3
|
+
getEvents,
|
|
3
4
|
getSimulationData
|
|
4
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-MDRMMUMS.mjs";
|
|
5
6
|
import "../chunk-K4KOSAGM.mjs";
|
|
6
7
|
import "../chunk-HQSNKCXI.mjs";
|
|
7
|
-
import "../chunk-
|
|
8
|
+
import "../chunk-O6ZZVIFH.mjs";
|
|
8
9
|
import "../chunk-UQQWZT6C.mjs";
|
|
9
10
|
import "../chunk-YEJJKWT2.mjs";
|
|
10
11
|
import "../chunk-XUI43LEZ.mjs";
|
|
11
12
|
export {
|
|
12
13
|
SupportedToken,
|
|
14
|
+
getEvents,
|
|
13
15
|
getSimulationData
|
|
14
16
|
};
|
|
15
17
|
//# sourceMappingURL=simulation.mjs.map
|
package/dist/utils/swaps.js
CHANGED
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _chunkC2LNDHP4js = require('../chunk-C2LNDHP4.js');
|
|
10
10
|
require('../chunk-UGFBA4GV.js');
|
|
11
|
-
require('../chunk-
|
|
11
|
+
require('../chunk-UGN7PBON.js');
|
|
12
12
|
require('../chunk-S6VGOPUY.js');
|
|
13
13
|
require('../chunk-FK7AP6SH.js');
|
|
14
14
|
require('../chunk-Z4BLTVTB.js');
|
|
@@ -20,5 +20,5 @@ require('../chunk-Z4BLTVTB.js');
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
exports.DEFAULT_TOKEN_ADDRESS =
|
|
23
|
+
exports.DEFAULT_TOKEN_ADDRESS = _chunkC2LNDHP4js.DEFAULT_TOKEN_ADDRESS; exports.SWAPS_CHAINID_DEFAULT_TOKEN_MAP = _chunkC2LNDHP4js.SWAPS_CHAINID_DEFAULT_TOKEN_MAP; exports.SWAP_TRANSACTION_TYPES = _chunkC2LNDHP4js.SWAP_TRANSACTION_TYPES; exports.UPDATE_POST_TX_BALANCE_ATTEMPTS = _chunkC2LNDHP4js.UPDATE_POST_TX_BALANCE_ATTEMPTS; exports.UPDATE_POST_TX_BALANCE_TIMEOUT = _chunkC2LNDHP4js.UPDATE_POST_TX_BALANCE_TIMEOUT; exports.updatePostTransactionBalance = _chunkC2LNDHP4js.updatePostTransactionBalance; exports.updateSwapsTransaction = _chunkC2LNDHP4js.updateSwapsTransaction;
|
|
24
24
|
//# sourceMappingURL=swaps.js.map
|
package/dist/utils/swaps.mjs
CHANGED
|
@@ -6,9 +6,9 @@ import {
|
|
|
6
6
|
UPDATE_POST_TX_BALANCE_TIMEOUT,
|
|
7
7
|
updatePostTransactionBalance,
|
|
8
8
|
updateSwapsTransaction
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-ZGUNOEUQ.mjs";
|
|
10
10
|
import "../chunk-J56A7UCK.mjs";
|
|
11
|
-
import "../chunk-
|
|
11
|
+
import "../chunk-O6ZZVIFH.mjs";
|
|
12
12
|
import "../chunk-UQQWZT6C.mjs";
|
|
13
13
|
import "../chunk-YEJJKWT2.mjs";
|
|
14
14
|
import "../chunk-XUI43LEZ.mjs";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamask/transaction-controller",
|
|
3
|
-
"version": "28.
|
|
3
|
+
"version": "28.1.1",
|
|
4
4
|
"description": "Stores transactions alongside their periodically updated statuses and manages interactions such as approval and cancellation",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"MetaMask",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"@metamask/base-controller": "^5.0.1",
|
|
52
52
|
"@metamask/controller-utils": "^9.1.0",
|
|
53
53
|
"@metamask/eth-query": "^4.0.0",
|
|
54
|
-
"@metamask/gas-fee-controller": "^15.
|
|
54
|
+
"@metamask/gas-fee-controller": "^15.1.0",
|
|
55
55
|
"@metamask/metamask-eth-abis": "^3.1.1",
|
|
56
56
|
"@metamask/network-controller": "^18.1.0",
|
|
57
57
|
"@metamask/rpc-errors": "^6.2.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/simulation.ts"],"names":["SupportedToken"],"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 ABI_SIMULATION_ERC20_WRAPPED,\n ABI_SIMULATION_ERC721_LEGACY,\n} from '../constants';\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 SimulationResponseTransaction,\n} from './simulation-api';\n\nexport enum SupportedToken {\n ERC20 = 'erc20',\n ERC721 = 'erc721',\n ERC1155 = 'erc1155',\n ERC20_WRAPPED = 'erc20Wrapped',\n ERC721_LEGACY = 'erc721Legacy',\n}\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\nconst log = createModuleLogger(projectLogger, 'simulation');\n\nconst SUPPORTED_EVENTS = [\n 'Transfer',\n 'TransferSingle',\n 'TransferBatch',\n 'Deposit',\n 'Withdrawal',\n];\n\nconst SUPPORTED_TOKEN_ABIS = {\n [SupportedToken.ERC20]: {\n abi: abiERC20,\n standard: SimulationTokenStandard.erc20,\n },\n [SupportedToken.ERC721]: {\n abi: abiERC721,\n standard: SimulationTokenStandard.erc721,\n },\n [SupportedToken.ERC1155]: {\n abi: abiERC1155,\n standard: SimulationTokenStandard.erc1155,\n },\n [SupportedToken.ERC20_WRAPPED]: {\n abi: ABI_SIMULATION_ERC20_WRAPPED,\n standard: SimulationTokenStandard.erc20,\n },\n [SupportedToken.ERC721_LEGACY]: {\n abi: ABI_SIMULATION_ERC721_LEGACY,\n standard: SimulationTokenStandard.erc721,\n },\n};\n\nconst REVERTED_ERRORS = ['execution reverted', 'insufficient funds for gas'];\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 (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 let simulationError = error as SimulationError;\n\n if (\n REVERTED_ERRORS.some((revertErrorMessage) =>\n simulationError.message?.includes(revertErrorMessage),\n )\n ) {\n simulationError = new SimulationRevertedError();\n }\n\n const { code, message } = simulationError;\n\n return {\n tokenBalanceChanges: [],\n error: {\n code,\n 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 interfaces = getContractInterfaces();\n\n return logs\n .map((currentLog) => {\n const event = parseLog(currentLog, interfaces);\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 = getValueFromBalanceTransaction(\n request.from,\n token,\n response.transactions[index],\n );\n\n const newBalance = getValueFromBalanceTransaction(\n request.from,\n token,\n response.transactions[index + balanceTransactions.length + 1],\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 const userEvents = events.filter(\n (event) =>\n SUPPORTED_EVENTS.includes(event.name) &&\n [event.args.from, event.args.to].includes(request.from),\n );\n\n log('Filtered user events', userEvents);\n\n return userEvents.reduce((result, event) => {\n const tokenIds = getEventTokenIds(event);\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 data = getBalanceTransactionData(\n event.tokenStandard,\n request.from,\n tokenId,\n );\n\n result.set(simulationToken, {\n from: request.from,\n to: event.contractAddress,\n data,\n });\n }\n\n return result;\n }, new Map<SimulationToken, SimulationRequestTransaction>());\n}\n\n/**\n * Extract token IDs from a parsed event.\n * @param event - The parsed event.\n * @returns An array of token IDs.\n */\nfunction getEventTokenIds(event: ParsedEvent): (Hex | undefined)[] {\n if (event.tokenStandard === SimulationTokenStandard.erc721) {\n return [event.args.tokenId as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferSingle'\n ) {\n return [event.args.id as Hex];\n }\n\n if (\n event.tokenStandard === SimulationTokenStandard.erc1155 &&\n event.name === 'TransferBatch'\n ) {\n return event.args.ids as Hex[];\n }\n\n // ERC-20 does not have a token ID so default to undefined.\n return [undefined];\n}\n\n/**\n * Extract the value from a balance transaction response.\n * @param from - The address to check the balance of.\n * @param token - The token to check the balance of.\n * @param response - The balance transaction response.\n * @returns The value of the balance transaction.\n */\nfunction getValueFromBalanceTransaction(\n from: Hex,\n token: SimulationToken,\n response: SimulationResponseTransaction,\n): Hex {\n const normalizedReturn = normalizeReturnValue(response.return);\n\n if (token.standard === SimulationTokenStandard.erc721) {\n return normalizedReturn === from ? '0x1' : '0x0';\n }\n\n return normalizedReturn;\n}\n\n/**\n * Generate the balance transaction data for a token.\n * @param tokenStandard - The token standard.\n * @param from - The address to check the balance of.\n * @param tokenId - The token ID to check the balance of.\n * @returns The balance transaction data.\n */\nfunction getBalanceTransactionData(\n tokenStandard: SimulationTokenStandard,\n from: Hex,\n tokenId?: Hex,\n): Hex {\n switch (tokenStandard) {\n case SimulationTokenStandard.erc721:\n return new Interface(abiERC721).encodeFunctionData('ownerOf', [\n tokenId,\n ]) as Hex;\n\n case SimulationTokenStandard.erc1155:\n return new Interface(abiERC1155).encodeFunctionData('balanceOf', [\n from,\n tokenId,\n ]) as Hex;\n\n default:\n return new Interface(abiERC20).encodeFunctionData('balanceOf', [\n from,\n ]) as Hex;\n }\n}\n\n/**\n * Parse a raw event log using known ABIs.\n * @param eventLog - The raw event log.\n * @param interfaces - The contract interfaces.\n * @returns The parsed event log or undefined if it could not be parsed.\n */\nfunction parseLog(\n eventLog: SimulationResponseLog,\n interfaces: Map<SupportedToken, Interface>,\n):\n | (LogDescription & { abi: ABI; standard: SimulationTokenStandard })\n | undefined {\n const supportedTokens = Object.values(SupportedToken);\n\n for (const token of supportedTokens) {\n try {\n const contractInterface = interfaces.get(token) as Interface;\n const { abi, standard } = SUPPORTED_TOKEN_ABIS[token];\n\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\n/**\n * Get the contract interfaces for all supported tokens.\n * @returns A map of supported tokens to their contract interfaces.\n */\nfunction getContractInterfaces(): Map<SupportedToken, Interface> {\n const supportedTokens = Object.values(SupportedToken);\n\n return new Map(\n supportedTokens.map((tokenType) => {\n const { abi } = SUPPORTED_TOKEN_ABIS[tokenType];\n const contractInterface = new Interface(abi);\n return [tokenType, contractInterface];\n }),\n );\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts"],"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\n/** Extract of the Wrapped ERC-20 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC20_WRAPPED = [\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'to', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, name: 'from', type: 'address' },\n { indexed: false, name: 'wad', type: 'uint256' },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n];\n\n/** Extract of the legacy ERC-721 ABI required for simulation. */\nexport const ABI_SIMULATION_ERC721_LEGACY = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n name: '_from',\n type: 'address',\n },\n {\n indexed: false,\n name: '_to',\n type: 'address',\n },\n {\n indexed: false,\n name: '_tokenId',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n];\n"],"mappings":"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","names":[]}
|
package/dist/chunk-53IYIDVS.mjs
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
CHAIN_IDS
|
|
3
|
-
} from "./chunk-4VLQV2GA.mjs";
|
|
4
|
-
import {
|
|
5
|
-
projectLogger
|
|
6
|
-
} from "./chunk-UQQWZT6C.mjs";
|
|
7
|
-
import {
|
|
8
|
-
__privateAdd,
|
|
9
|
-
__privateMethod
|
|
10
|
-
} from "./chunk-XUI43LEZ.mjs";
|
|
11
|
-
|
|
12
|
-
// src/gas-flows/OptimismLayer1GasFeeFlow.ts
|
|
13
|
-
import { Common, Hardfork } from "@ethereumjs/common";
|
|
14
|
-
import { TransactionFactory } from "@ethereumjs/tx";
|
|
15
|
-
import { Contract } from "@ethersproject/contracts";
|
|
16
|
-
import { Web3Provider } from "@ethersproject/providers";
|
|
17
|
-
import { createModuleLogger, remove0x } from "@metamask/utils";
|
|
18
|
-
import BN from "bn.js";
|
|
19
|
-
import { omit } from "lodash";
|
|
20
|
-
var OPTIMISM_STACK_CHAIN_IDS = [
|
|
21
|
-
CHAIN_IDS.OPTIMISM,
|
|
22
|
-
CHAIN_IDS.OPTIMISM_TESTNET,
|
|
23
|
-
CHAIN_IDS.BASE,
|
|
24
|
-
CHAIN_IDS.BASE_TESTNET,
|
|
25
|
-
CHAIN_IDS.OPBNB,
|
|
26
|
-
CHAIN_IDS.OPBNB_TESTNET,
|
|
27
|
-
CHAIN_IDS.ZORA
|
|
28
|
-
];
|
|
29
|
-
var log = createModuleLogger(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
|
-
__privateAdd(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
|
-
__privateAdd(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
|
-
__privateAdd(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
|
-
__privateAdd(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 __privateMethod(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 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 Web3Provider(provider)
|
|
90
|
-
);
|
|
91
|
-
const serializedTransaction = __privateMethod(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 = __privateMethod(this, _buildTransactionParams, buildTransactionParams_fn).call(this, transactionMeta);
|
|
105
|
-
const common = __privateMethod(this, _buildTransactionCommon, buildTransactionCommon_fn).call(this, transactionMeta);
|
|
106
|
-
return TransactionFactory.fromTxData(txParams, { common });
|
|
107
|
-
};
|
|
108
|
-
_buildTransactionParams = new WeakSet();
|
|
109
|
-
buildTransactionParams_fn = function(transactionMeta) {
|
|
110
|
-
return {
|
|
111
|
-
...omit(transactionMeta.txParams, "gas"),
|
|
112
|
-
gasLimit: transactionMeta.txParams.gas
|
|
113
|
-
};
|
|
114
|
-
};
|
|
115
|
-
_buildTransactionCommon = new WeakSet();
|
|
116
|
-
buildTransactionCommon_fn = function(transactionMeta) {
|
|
117
|
-
return Common.custom({
|
|
118
|
-
chainId: new BN(
|
|
119
|
-
remove0x(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: Hardfork.London
|
|
126
|
-
});
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
export {
|
|
130
|
-
OptimismLayer1GasFeeFlow
|
|
131
|
-
};
|
|
132
|
-
//# sourceMappingURL=chunk-53IYIDVS.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"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"],"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;","names":[]}
|
package/dist/chunk-ETMW527M.js
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
-
|
|
3
|
-
var _chunkLQS2M5QRjs = require('./chunk-LQS2M5QR.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
|
-
_chunkLQS2M5QRjs.CHAIN_IDS.OPTIMISM,
|
|
22
|
-
_chunkLQS2M5QRjs.CHAIN_IDS.OPTIMISM_TESTNET,
|
|
23
|
-
_chunkLQS2M5QRjs.CHAIN_IDS.BASE,
|
|
24
|
-
_chunkLQS2M5QRjs.CHAIN_IDS.BASE_TESTNET,
|
|
25
|
-
_chunkLQS2M5QRjs.CHAIN_IDS.OPBNB,
|
|
26
|
-
_chunkLQS2M5QRjs.CHAIN_IDS.OPBNB_TESTNET,
|
|
27
|
-
_chunkLQS2M5QRjs.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-ETMW527M.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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"]}
|