@metamask/transaction-controller 60.10.0 → 61.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +28 -1
- package/dist/TransactionController.cjs +69 -67
- package/dist/TransactionController.cjs.map +1 -1
- package/dist/TransactionController.d.cts +3 -2
- package/dist/TransactionController.d.cts.map +1 -1
- package/dist/TransactionController.d.mts +3 -2
- package/dist/TransactionController.d.mts.map +1 -1
- package/dist/TransactionController.mjs +69 -67
- package/dist/TransactionController.mjs.map +1 -1
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs +26 -7
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.cjs.map +1 -1
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.cts +7 -2
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.cts.map +1 -1
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts +7 -2
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.d.mts.map +1 -1
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs +26 -7
- package/dist/gas-flows/OptimismLayer1GasFeeFlow.mjs.map +1 -1
- package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs +32 -16
- package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs.map +1 -1
- package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts +20 -2
- package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts.map +1 -1
- package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts +20 -2
- package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts.map +1 -1
- package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs +32 -16
- package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs.map +1 -1
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs +6 -3
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.cjs.map +1 -1
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.cts +4 -2
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.cts.map +1 -1
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts +4 -2
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.d.mts.map +1 -1
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs +6 -3
- package/dist/gas-flows/ScrollLayer1GasFeeFlow.mjs.map +1 -1
- package/dist/helpers/PendingTransactionTracker.cjs +17 -11
- package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
- package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
- package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
- package/dist/helpers/PendingTransactionTracker.mjs +17 -11
- package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +4 -2
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +4 -2
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs.map +1 -1
- package/dist/utils/layer1-gas-fee-flow.cjs +12 -6
- package/dist/utils/layer1-gas-fee-flow.cjs.map +1 -1
- package/dist/utils/layer1-gas-fee-flow.d.cts.map +1 -1
- package/dist/utils/layer1-gas-fee-flow.d.mts.map +1 -1
- package/dist/utils/layer1-gas-fee-flow.mjs +12 -6
- package/dist/utils/layer1-gas-fee-flow.mjs.map +1 -1
- package/package.json +14 -13
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.OptimismLayer1GasFeeFlow = void 0;
|
|
4
|
+
const controller_utils_1 = require("@metamask/controller-utils");
|
|
5
|
+
const utils_1 = require("@metamask/utils");
|
|
4
6
|
const OracleLayer1GasFeeFlow_1 = require("./OracleLayer1GasFeeFlow.cjs");
|
|
5
7
|
const constants_1 = require("../constants.cjs");
|
|
6
|
-
const
|
|
8
|
+
const FALLBACK_OPTIMISM_STACK_CHAIN_IDS = [
|
|
7
9
|
constants_1.CHAIN_IDS.OPTIMISM,
|
|
8
10
|
constants_1.CHAIN_IDS.OPTIMISM_TESTNET,
|
|
9
11
|
constants_1.CHAIN_IDS.BASE,
|
|
@@ -12,17 +14,34 @@ const OPTIMISM_STACK_CHAIN_IDS = [
|
|
|
12
14
|
constants_1.CHAIN_IDS.OPBNB_TESTNET,
|
|
13
15
|
constants_1.CHAIN_IDS.ZORA,
|
|
14
16
|
];
|
|
15
|
-
|
|
16
|
-
const OPTIMISM_GAS_PRICE_ORACLE_ADDRESS = '0x420000000000000000000000000000000000000F';
|
|
17
|
+
const GAS_SUPPORTED_NETWORKS_ENDPOINT = 'https://gas.api.cx.metamask.io/v1/supportedNetworks';
|
|
17
18
|
/**
|
|
18
19
|
* Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
|
|
19
20
|
*/
|
|
20
21
|
class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow_1.OracleLayer1GasFeeFlow {
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
async matchesTransaction({ transactionMeta, }) {
|
|
23
|
+
const chainIdAsNumber = (0, utils_1.hexToNumber)(transactionMeta.chainId);
|
|
24
|
+
const supportedChains = await OptimismLayer1GasFeeFlow.fetchOptimismSupportedChains();
|
|
25
|
+
if (supportedChains?.has(chainIdAsNumber)) {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return FALLBACK_OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);
|
|
23
29
|
}
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
// Uses default oracle address from base class
|
|
31
|
+
/**
|
|
32
|
+
* Fetch remote OP-stack support list; fall back to local list when unavailable.
|
|
33
|
+
*
|
|
34
|
+
* @returns A set of supported OP-stack chain IDs or null on failure.
|
|
35
|
+
*/
|
|
36
|
+
static async fetchOptimismSupportedChains() {
|
|
37
|
+
try {
|
|
38
|
+
const res = await (0, controller_utils_1.handleFetch)(GAS_SUPPORTED_NETWORKS_ENDPOINT);
|
|
39
|
+
const list = res?.partialSupport?.optimism ?? [];
|
|
40
|
+
return new Set(list);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
26
45
|
}
|
|
27
46
|
}
|
|
28
47
|
exports.OptimismLayer1GasFeeFlow = OptimismLayer1GasFeeFlow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptimismLayer1GasFeeFlow.cjs","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"OptimismLayer1GasFeeFlow.cjs","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;AAAA,iEAAyD;AACzD,2CAAwD;AAExD,yEAAkE;AAClE,gDAAyC;AAIzC,MAAM,iCAAiC,GAAU;IAC/C,qBAAS,CAAC,QAAQ;IAClB,qBAAS,CAAC,gBAAgB;IAC1B,qBAAS,CAAC,IAAI;IACd,qBAAS,CAAC,YAAY;IACtB,qBAAS,CAAC,KAAK;IACf,qBAAS,CAAC,aAAa;IACvB,qBAAS,CAAC,IAAI;CACf,CAAC;AAWF,MAAM,+BAA+B,GACnC,qDAAqD,CAAC;AAExD;;GAEG;AACH,MAAa,wBAAyB,SAAQ,+CAAsB;IAClE,KAAK,CAAC,kBAAkB,CAAC,EACvB,eAAe,GAIhB;QACC,MAAM,eAAe,GAAG,IAAA,mBAAW,EAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE7D,MAAM,eAAe,GACnB,MAAM,wBAAwB,CAAC,4BAA4B,EAAE,CAAC;QAEhE,IAAI,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE;YACzC,OAAO,IAAI,CAAC;SACb;QAED,OAAO,iCAAiC,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;IAED,8CAA8C;IAE9C;;;;OAIG;IACK,MAAM,CAAC,KAAK,CAAC,4BAA4B;QAC/C,IAAI;YACF,MAAM,GAAG,GAA8B,MAAM,IAAA,8BAAW,EACtD,+BAA+B,CAChC,CAAC;YACF,MAAM,IAAI,GAAG,GAAG,EAAE,cAAc,EAAE,QAAQ,IAAI,EAAE,CAAC;YACjD,OAAO,IAAI,GAAG,CAAS,IAAI,CAAC,CAAC;SAC9B;QAAC,MAAM;YACN,OAAO,IAAI,CAAC;SACb;IACH,CAAC;CACF;AArCD,4DAqCC","sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\nimport { type Hex, hexToNumber } from '@metamask/utils';\n\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';\nimport { CHAIN_IDS } from '../constants';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { TransactionMeta } from '../types';\n\nconst FALLBACK_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\n// Default oracle address now provided by base class\n\ntype SupportedNetworksResponse = {\n readonly fullSupport: readonly number[];\n readonly partialSupport: {\n readonly optimism: readonly number[];\n };\n};\n\nconst GAS_SUPPORTED_NETWORKS_ENDPOINT =\n 'https://gas.api.cx.metamask.io/v1/supportedNetworks';\n\n/**\n * Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.\n */\nexport class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n async matchesTransaction({\n transactionMeta,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean> {\n const chainIdAsNumber = hexToNumber(transactionMeta.chainId);\n\n const supportedChains =\n await OptimismLayer1GasFeeFlow.fetchOptimismSupportedChains();\n\n if (supportedChains?.has(chainIdAsNumber)) {\n return true;\n }\n\n return FALLBACK_OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n // Uses default oracle address from base class\n\n /**\n * Fetch remote OP-stack support list; fall back to local list when unavailable.\n *\n * @returns A set of supported OP-stack chain IDs or null on failure.\n */\n private static async fetchOptimismSupportedChains(): Promise<Set<number> | null> {\n try {\n const res: SupportedNetworksResponse = await handleFetch(\n GAS_SUPPORTED_NETWORKS_ENDPOINT,\n );\n const list = res?.partialSupport?.optimism ?? [];\n return new Set<number>(list);\n } catch {\n return null;\n }\n }\n}\n"]}
|
|
@@ -5,10 +5,15 @@ import type { TransactionMeta } from "../types.cjs";
|
|
|
5
5
|
* Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
|
|
6
6
|
*/
|
|
7
7
|
export declare class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
|
|
8
|
-
constructor();
|
|
9
8
|
matchesTransaction({ transactionMeta, }: {
|
|
10
9
|
transactionMeta: TransactionMeta;
|
|
11
10
|
messenger: TransactionControllerMessenger;
|
|
12
|
-
}): boolean
|
|
11
|
+
}): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Fetch remote OP-stack support list; fall back to local list when unavailable.
|
|
14
|
+
*
|
|
15
|
+
* @returns A set of supported OP-stack chain IDs or null on failure.
|
|
16
|
+
*/
|
|
17
|
+
private static fetchOptimismSupportedChains;
|
|
13
18
|
}
|
|
14
19
|
//# sourceMappingURL=OptimismLayer1GasFeeFlow.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptimismLayer1GasFeeFlow.d.cts","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OptimismLayer1GasFeeFlow.d.cts","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,qCAAiC;AAElE,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAiB;AAwBhD;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,sBAAsB;IAC5D,kBAAkB,CAAC,EACvB,eAAe,GAChB,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;IAepB;;;;OAIG;mBACkB,4BAA4B;CAWlD"}
|
|
@@ -5,10 +5,15 @@ import type { TransactionMeta } from "../types.mjs";
|
|
|
5
5
|
* Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
|
|
6
6
|
*/
|
|
7
7
|
export declare class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
|
|
8
|
-
constructor();
|
|
9
8
|
matchesTransaction({ transactionMeta, }: {
|
|
10
9
|
transactionMeta: TransactionMeta;
|
|
11
10
|
messenger: TransactionControllerMessenger;
|
|
12
|
-
}): boolean
|
|
11
|
+
}): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Fetch remote OP-stack support list; fall back to local list when unavailable.
|
|
14
|
+
*
|
|
15
|
+
* @returns A set of supported OP-stack chain IDs or null on failure.
|
|
16
|
+
*/
|
|
17
|
+
private static fetchOptimismSupportedChains;
|
|
13
18
|
}
|
|
14
19
|
//# sourceMappingURL=OptimismLayer1GasFeeFlow.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptimismLayer1GasFeeFlow.d.mts","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OptimismLayer1GasFeeFlow.d.mts","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,qCAAiC;AAElE,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAiB;AAwBhD;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,sBAAsB;IAC5D,kBAAkB,CAAC,EACvB,eAAe,GAChB,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;IAepB;;;;OAIG;mBACkB,4BAA4B;CAWlD"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { handleFetch } from "@metamask/controller-utils";
|
|
2
|
+
import { hexToNumber } from "@metamask/utils";
|
|
1
3
|
import { OracleLayer1GasFeeFlow } from "./OracleLayer1GasFeeFlow.mjs";
|
|
2
4
|
import { CHAIN_IDS } from "../constants.mjs";
|
|
3
|
-
const
|
|
5
|
+
const FALLBACK_OPTIMISM_STACK_CHAIN_IDS = [
|
|
4
6
|
CHAIN_IDS.OPTIMISM,
|
|
5
7
|
CHAIN_IDS.OPTIMISM_TESTNET,
|
|
6
8
|
CHAIN_IDS.BASE,
|
|
@@ -9,17 +11,34 @@ const OPTIMISM_STACK_CHAIN_IDS = [
|
|
|
9
11
|
CHAIN_IDS.OPBNB_TESTNET,
|
|
10
12
|
CHAIN_IDS.ZORA,
|
|
11
13
|
];
|
|
12
|
-
|
|
13
|
-
const OPTIMISM_GAS_PRICE_ORACLE_ADDRESS = '0x420000000000000000000000000000000000000F';
|
|
14
|
+
const GAS_SUPPORTED_NETWORKS_ENDPOINT = 'https://gas.api.cx.metamask.io/v1/supportedNetworks';
|
|
14
15
|
/**
|
|
15
16
|
* Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
|
|
16
17
|
*/
|
|
17
18
|
export class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
async matchesTransaction({ transactionMeta, }) {
|
|
20
|
+
const chainIdAsNumber = hexToNumber(transactionMeta.chainId);
|
|
21
|
+
const supportedChains = await OptimismLayer1GasFeeFlow.fetchOptimismSupportedChains();
|
|
22
|
+
if (supportedChains?.has(chainIdAsNumber)) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
return FALLBACK_OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);
|
|
20
26
|
}
|
|
21
|
-
|
|
22
|
-
|
|
27
|
+
// Uses default oracle address from base class
|
|
28
|
+
/**
|
|
29
|
+
* Fetch remote OP-stack support list; fall back to local list when unavailable.
|
|
30
|
+
*
|
|
31
|
+
* @returns A set of supported OP-stack chain IDs or null on failure.
|
|
32
|
+
*/
|
|
33
|
+
static async fetchOptimismSupportedChains() {
|
|
34
|
+
try {
|
|
35
|
+
const res = await handleFetch(GAS_SUPPORTED_NETWORKS_ENDPOINT);
|
|
36
|
+
const list = res?.partialSupport?.optimism ?? [];
|
|
37
|
+
return new Set(list);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
23
42
|
}
|
|
24
43
|
}
|
|
25
44
|
//# sourceMappingURL=OptimismLayer1GasFeeFlow.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OptimismLayer1GasFeeFlow.mjs","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OptimismLayer1GasFeeFlow.mjs","sourceRoot":"","sources":["../../src/gas-flows/OptimismLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,mCAAmC;AACzD,OAAO,EAAY,WAAW,EAAE,wBAAwB;AAExD,OAAO,EAAE,sBAAsB,EAAE,qCAAiC;AAClE,OAAO,EAAE,SAAS,EAAE,yBAAqB;AAIzC,MAAM,iCAAiC,GAAU;IAC/C,SAAS,CAAC,QAAQ;IAClB,SAAS,CAAC,gBAAgB;IAC1B,SAAS,CAAC,IAAI;IACd,SAAS,CAAC,YAAY;IACtB,SAAS,CAAC,KAAK;IACf,SAAS,CAAC,aAAa;IACvB,SAAS,CAAC,IAAI;CACf,CAAC;AAWF,MAAM,+BAA+B,GACnC,qDAAqD,CAAC;AAExD;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,sBAAsB;IAClE,KAAK,CAAC,kBAAkB,CAAC,EACvB,eAAe,GAIhB;QACC,MAAM,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAE7D,MAAM,eAAe,GACnB,MAAM,wBAAwB,CAAC,4BAA4B,EAAE,CAAC;QAEhE,IAAI,eAAe,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE;YACzC,OAAO,IAAI,CAAC;SACb;QAED,OAAO,iCAAiC,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;IAED,8CAA8C;IAE9C;;;;OAIG;IACK,MAAM,CAAC,KAAK,CAAC,4BAA4B;QAC/C,IAAI;YACF,MAAM,GAAG,GAA8B,MAAM,WAAW,CACtD,+BAA+B,CAChC,CAAC;YACF,MAAM,IAAI,GAAG,GAAG,EAAE,cAAc,EAAE,QAAQ,IAAI,EAAE,CAAC;YACjD,OAAO,IAAI,GAAG,CAAS,IAAI,CAAC,CAAC;SAC9B;QAAC,MAAM;YACN,OAAO,IAAI,CAAC;SACb;IACH,CAAC;CACF","sourcesContent":["import { handleFetch } from '@metamask/controller-utils';\nimport { type Hex, hexToNumber } from '@metamask/utils';\n\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';\nimport { CHAIN_IDS } from '../constants';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { TransactionMeta } from '../types';\n\nconst FALLBACK_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\n// Default oracle address now provided by base class\n\ntype SupportedNetworksResponse = {\n readonly fullSupport: readonly number[];\n readonly partialSupport: {\n readonly optimism: readonly number[];\n };\n};\n\nconst GAS_SUPPORTED_NETWORKS_ENDPOINT =\n 'https://gas.api.cx.metamask.io/v1/supportedNetworks';\n\n/**\n * Optimism layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.\n */\nexport class OptimismLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n async matchesTransaction({\n transactionMeta,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean> {\n const chainIdAsNumber = hexToNumber(transactionMeta.chainId);\n\n const supportedChains =\n await OptimismLayer1GasFeeFlow.fetchOptimismSupportedChains();\n\n if (supportedChains?.has(chainIdAsNumber)) {\n return true;\n }\n\n return FALLBACK_OPTIMISM_STACK_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n\n // Uses default oracle address from base class\n\n /**\n * Fetch remote OP-stack support list; fall back to local list when unavailable.\n *\n * @returns A set of supported OP-stack chain IDs or null on failure.\n */\n private static async fetchOptimismSupportedChains(): Promise<Set<number> | null> {\n try {\n const res: SupportedNetworksResponse = await handleFetch(\n GAS_SUPPORTED_NETWORKS_ENDPOINT,\n );\n const list = res?.partialSupport?.optimism ?? [];\n return new Set<number>(list);\n } catch {\n return null;\n }\n }\n}\n"]}
|
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
-
};
|
|
8
2
|
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
3
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
4
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
5
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
6
|
};
|
|
13
|
-
var _OracleLayer1GasFeeFlow_instances,
|
|
7
|
+
var _OracleLayer1GasFeeFlow_instances, _OracleLayer1GasFeeFlow_getOracleLayer1GasFee, _OracleLayer1GasFeeFlow_buildUnserializedTransaction, _OracleLayer1GasFeeFlow_buildTransactionParams;
|
|
14
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
9
|
exports.OracleLayer1GasFeeFlow = void 0;
|
|
16
10
|
const contracts_1 = require("@ethersproject/contracts");
|
|
@@ -29,16 +23,37 @@ const GAS_PRICE_ORACLE_ABI = [
|
|
|
29
23
|
type: 'function',
|
|
30
24
|
},
|
|
31
25
|
];
|
|
26
|
+
// Default OP Stack gas price oracle address used across supported networks
|
|
27
|
+
const DEFAULT_GAS_PRICE_ORACLE_ADDRESS = '0x420000000000000000000000000000000000000F';
|
|
32
28
|
/**
|
|
33
29
|
* Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.
|
|
34
30
|
*/
|
|
35
31
|
class OracleLayer1GasFeeFlow {
|
|
36
|
-
constructor(
|
|
32
|
+
constructor() {
|
|
37
33
|
_OracleLayer1GasFeeFlow_instances.add(this);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolves the oracle address for the given chain. Subclasses can override
|
|
37
|
+
* this method to provide chain-specific oracle addresses. By default, this
|
|
38
|
+
* returns the standard OP Stack gas price oracle address.
|
|
39
|
+
*
|
|
40
|
+
* @param _chainId - The chain ID to resolve the oracle address for.
|
|
41
|
+
* @returns The oracle address for the given chain.
|
|
42
|
+
*/
|
|
43
|
+
getOracleAddressForChain(_chainId) {
|
|
44
|
+
return DEFAULT_GAS_PRICE_ORACLE_ADDRESS;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Whether to sign the transaction with a dummy key prior to calling the
|
|
48
|
+
* oracle contract. Some oracle contracts require a signed payload even for
|
|
49
|
+
* read-only methods.
|
|
50
|
+
*
|
|
51
|
+
* Subclasses can override to enable signing when needed. Defaults to false.
|
|
52
|
+
*
|
|
53
|
+
* @returns Whether the transaction should be signed prior to the oracle call.
|
|
54
|
+
*/
|
|
55
|
+
shouldSignTransaction() {
|
|
56
|
+
return false;
|
|
42
57
|
}
|
|
43
58
|
async getLayer1Fee(request) {
|
|
44
59
|
try {
|
|
@@ -51,12 +66,12 @@ class OracleLayer1GasFeeFlow {
|
|
|
51
66
|
}
|
|
52
67
|
}
|
|
53
68
|
exports.OracleLayer1GasFeeFlow = OracleLayer1GasFeeFlow;
|
|
54
|
-
|
|
69
|
+
_OracleLayer1GasFeeFlow_instances = new WeakSet(), _OracleLayer1GasFeeFlow_getOracleLayer1GasFee = async function _OracleLayer1GasFeeFlow_getOracleLayer1GasFee(request) {
|
|
55
70
|
const { provider, transactionMeta } = request;
|
|
56
|
-
const contract = new contracts_1.Contract(
|
|
71
|
+
const contract = new contracts_1.Contract(this.getOracleAddressForChain(transactionMeta.chainId), GAS_PRICE_ORACLE_ABI,
|
|
57
72
|
// Network controller provider type is incompatible with ethers provider
|
|
58
73
|
new providers_1.Web3Provider(provider));
|
|
59
|
-
const serializedTransaction = __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_buildUnserializedTransaction).call(this, transactionMeta,
|
|
74
|
+
const serializedTransaction = __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_buildUnserializedTransaction).call(this, transactionMeta, this.shouldSignTransaction()).serialize();
|
|
60
75
|
const result = await contract.getL1Fee(serializedTransaction);
|
|
61
76
|
if (result === undefined) {
|
|
62
77
|
throw new Error('No value returned from oracle contract');
|
|
@@ -70,7 +85,8 @@ _OracleLayer1GasFeeFlow_oracleAddress = new WeakMap(), _OracleLayer1GasFeeFlow_s
|
|
|
70
85
|
let unserializedTransaction = (0, prepare_1.prepareTransaction)(chainId, txParams);
|
|
71
86
|
if (sign) {
|
|
72
87
|
const keyBuffer = Buffer.from(DUMMY_KEY, 'hex');
|
|
73
|
-
|
|
88
|
+
const keyBytes = Uint8Array.from(keyBuffer);
|
|
89
|
+
unserializedTransaction = unserializedTransaction.sign(keyBytes);
|
|
74
90
|
}
|
|
75
91
|
return unserializedTransaction;
|
|
76
92
|
}, _OracleLayer1GasFeeFlow_buildTransactionParams = function _OracleLayer1GasFeeFlow_buildTransactionParams(transactionMeta) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OracleLayer1GasFeeFlow.cjs","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OracleLayer1GasFeeFlow.cjs","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"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","sourcesContent":["import { Contract } from '@ethersproject/contracts';\nimport { Web3Provider, type ExternalProvider } from '@ethersproject/providers';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type {\n Layer1GasFeeFlow,\n Layer1GasFeeFlowRequest,\n Layer1GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\nimport { prepareTransaction } from '../utils/prepare';\n\nconst log = createModuleLogger(projectLogger, 'oracle-layer1-gas-fee-flow');\n\nconst DUMMY_KEY =\n 'abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789';\n\nconst 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// Default OP Stack gas price oracle address used across supported networks\nconst DEFAULT_GAS_PRICE_ORACLE_ADDRESS =\n '0x420000000000000000000000000000000000000F' as Hex;\n\n/**\n * Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.\n */\nexport abstract class OracleLayer1GasFeeFlow implements Layer1GasFeeFlow {\n /**\n * Resolves the oracle address for the given chain. Subclasses can override\n * this method to provide chain-specific oracle addresses. By default, this\n * returns the standard OP Stack gas price oracle address.\n *\n * @param _chainId - The chain ID to resolve the oracle address for.\n * @returns The oracle address for the given chain.\n */\n protected getOracleAddressForChain(_chainId: Hex): Hex {\n return DEFAULT_GAS_PRICE_ORACLE_ADDRESS;\n }\n\n /**\n * Whether to sign the transaction with a dummy key prior to calling the\n * oracle contract. Some oracle contracts require a signed payload even for\n * read-only methods.\n *\n * Subclasses can override to enable signing when needed. Defaults to false.\n *\n * @returns Whether the transaction should be signed prior to the oracle call.\n */\n protected shouldSignTransaction(): boolean {\n return false;\n }\n\n abstract matchesTransaction({\n transactionMeta,\n messenger,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean>;\n\n async getLayer1Fee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<Layer1GasFeeFlowResponse> {\n try {\n return await this.#getOracleLayer1GasFee(request);\n } catch (error) {\n log('Failed to get oracle layer 1 gas fee', error);\n throw new Error(`Failed to get oracle layer 1 gas fee`);\n }\n }\n\n async #getOracleLayer1GasFee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<Layer1GasFeeFlowResponse> {\n const { provider, transactionMeta } = request;\n\n const contract = new Contract(\n this.getOracleAddressForChain(transactionMeta.chainId),\n GAS_PRICE_ORACLE_ABI,\n // Network controller provider type is incompatible with ethers provider\n new Web3Provider(provider as unknown as ExternalProvider),\n );\n\n const serializedTransaction = this.#buildUnserializedTransaction(\n transactionMeta,\n this.shouldSignTransaction(),\n ).serialize();\n\n const result = await contract.getL1Fee(serializedTransaction);\n\n if (result === undefined) {\n throw new Error('No value returned from oracle contract');\n }\n\n return {\n layer1Fee: result.toHexString(),\n };\n }\n\n #buildUnserializedTransaction(\n transactionMeta: TransactionMeta,\n sign: boolean,\n ) {\n const txParams = this.#buildTransactionParams(transactionMeta);\n const { chainId } = transactionMeta;\n\n let unserializedTransaction = prepareTransaction(chainId, txParams);\n\n if (sign) {\n const keyBuffer = Buffer.from(DUMMY_KEY, 'hex');\n const keyBytes = Uint8Array.from(keyBuffer);\n unserializedTransaction = unserializedTransaction.sign(keyBytes);\n }\n\n return unserializedTransaction;\n }\n\n #buildTransactionParams(\n transactionMeta: TransactionMeta,\n ): TransactionMeta['txParams'] {\n return {\n ...transactionMeta.txParams,\n gasLimit: transactionMeta.txParams.gas,\n };\n }\n}\n"]}
|
|
@@ -6,11 +6,29 @@ import type { Layer1GasFeeFlow, Layer1GasFeeFlowRequest, Layer1GasFeeFlowRespons
|
|
|
6
6
|
*/
|
|
7
7
|
export declare abstract class OracleLayer1GasFeeFlow implements Layer1GasFeeFlow {
|
|
8
8
|
#private;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the oracle address for the given chain. Subclasses can override
|
|
11
|
+
* this method to provide chain-specific oracle addresses. By default, this
|
|
12
|
+
* returns the standard OP Stack gas price oracle address.
|
|
13
|
+
*
|
|
14
|
+
* @param _chainId - The chain ID to resolve the oracle address for.
|
|
15
|
+
* @returns The oracle address for the given chain.
|
|
16
|
+
*/
|
|
17
|
+
protected getOracleAddressForChain(_chainId: Hex): Hex;
|
|
18
|
+
/**
|
|
19
|
+
* Whether to sign the transaction with a dummy key prior to calling the
|
|
20
|
+
* oracle contract. Some oracle contracts require a signed payload even for
|
|
21
|
+
* read-only methods.
|
|
22
|
+
*
|
|
23
|
+
* Subclasses can override to enable signing when needed. Defaults to false.
|
|
24
|
+
*
|
|
25
|
+
* @returns Whether the transaction should be signed prior to the oracle call.
|
|
26
|
+
*/
|
|
27
|
+
protected shouldSignTransaction(): boolean;
|
|
10
28
|
abstract matchesTransaction({ transactionMeta, messenger, }: {
|
|
11
29
|
transactionMeta: TransactionMeta;
|
|
12
30
|
messenger: TransactionControllerMessenger;
|
|
13
|
-
}): boolean
|
|
31
|
+
}): Promise<boolean>;
|
|
14
32
|
getLayer1Fee(request: Layer1GasFeeFlowRequest): Promise<Layer1GasFeeFlowResponse>;
|
|
15
33
|
}
|
|
16
34
|
//# sourceMappingURL=OracleLayer1GasFeeFlow.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OracleLayer1GasFeeFlow.d.cts","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EAChB,qBAAiB;
|
|
1
|
+
{"version":3,"file":"OracleLayer1GasFeeFlow.d.cts","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EAChB,qBAAiB;AAsBlB;;GAEG;AACH,8BAAsB,sBAAuB,YAAW,gBAAgB;;IACtE;;;;;;;OAOG;IACH,SAAS,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG;IAItD;;;;;;;;OAQG;IACH,SAAS,CAAC,qBAAqB,IAAI,OAAO;IAI1C,QAAQ,CAAC,kBAAkB,CAAC,EAC1B,eAAe,EACf,SAAS,GACV,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;IAEd,YAAY,CAChB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,wBAAwB,CAAC;CA+DrC"}
|
|
@@ -6,11 +6,29 @@ import type { Layer1GasFeeFlow, Layer1GasFeeFlowRequest, Layer1GasFeeFlowRespons
|
|
|
6
6
|
*/
|
|
7
7
|
export declare abstract class OracleLayer1GasFeeFlow implements Layer1GasFeeFlow {
|
|
8
8
|
#private;
|
|
9
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Resolves the oracle address for the given chain. Subclasses can override
|
|
11
|
+
* this method to provide chain-specific oracle addresses. By default, this
|
|
12
|
+
* returns the standard OP Stack gas price oracle address.
|
|
13
|
+
*
|
|
14
|
+
* @param _chainId - The chain ID to resolve the oracle address for.
|
|
15
|
+
* @returns The oracle address for the given chain.
|
|
16
|
+
*/
|
|
17
|
+
protected getOracleAddressForChain(_chainId: Hex): Hex;
|
|
18
|
+
/**
|
|
19
|
+
* Whether to sign the transaction with a dummy key prior to calling the
|
|
20
|
+
* oracle contract. Some oracle contracts require a signed payload even for
|
|
21
|
+
* read-only methods.
|
|
22
|
+
*
|
|
23
|
+
* Subclasses can override to enable signing when needed. Defaults to false.
|
|
24
|
+
*
|
|
25
|
+
* @returns Whether the transaction should be signed prior to the oracle call.
|
|
26
|
+
*/
|
|
27
|
+
protected shouldSignTransaction(): boolean;
|
|
10
28
|
abstract matchesTransaction({ transactionMeta, messenger, }: {
|
|
11
29
|
transactionMeta: TransactionMeta;
|
|
12
30
|
messenger: TransactionControllerMessenger;
|
|
13
|
-
}): boolean
|
|
31
|
+
}): Promise<boolean>;
|
|
14
32
|
getLayer1Fee(request: Layer1GasFeeFlowRequest): Promise<Layer1GasFeeFlowResponse>;
|
|
15
33
|
}
|
|
16
34
|
//# sourceMappingURL=OracleLayer1GasFeeFlow.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OracleLayer1GasFeeFlow.d.mts","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EAChB,qBAAiB;
|
|
1
|
+
{"version":3,"file":"OracleLayer1GasFeeFlow.d.mts","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,wBAAwB;AAI3C,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EACV,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,eAAe,EAChB,qBAAiB;AAsBlB;;GAEG;AACH,8BAAsB,sBAAuB,YAAW,gBAAgB;;IACtE;;;;;;;OAOG;IACH,SAAS,CAAC,wBAAwB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG;IAItD;;;;;;;;OAQG;IACH,SAAS,CAAC,qBAAqB,IAAI,OAAO;IAI1C,QAAQ,CAAC,kBAAkB,CAAC,EAC1B,eAAe,EACf,SAAS,GACV,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;IAEd,YAAY,CAChB,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,wBAAwB,CAAC;CA+DrC"}
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
-
};
|
|
7
1
|
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
2
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
3
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
4
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
5
|
};
|
|
12
|
-
var _OracleLayer1GasFeeFlow_instances,
|
|
6
|
+
var _OracleLayer1GasFeeFlow_instances, _OracleLayer1GasFeeFlow_getOracleLayer1GasFee, _OracleLayer1GasFeeFlow_buildUnserializedTransaction, _OracleLayer1GasFeeFlow_buildTransactionParams;
|
|
13
7
|
import { Contract } from "@ethersproject/contracts";
|
|
14
8
|
import { Web3Provider } from "@ethersproject/providers";
|
|
15
9
|
import { createModuleLogger } from "@metamask/utils";
|
|
@@ -26,16 +20,37 @@ const GAS_PRICE_ORACLE_ABI = [
|
|
|
26
20
|
type: 'function',
|
|
27
21
|
},
|
|
28
22
|
];
|
|
23
|
+
// Default OP Stack gas price oracle address used across supported networks
|
|
24
|
+
const DEFAULT_GAS_PRICE_ORACLE_ADDRESS = '0x420000000000000000000000000000000000000F';
|
|
29
25
|
/**
|
|
30
26
|
* Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.
|
|
31
27
|
*/
|
|
32
28
|
export class OracleLayer1GasFeeFlow {
|
|
33
|
-
constructor(
|
|
29
|
+
constructor() {
|
|
34
30
|
_OracleLayer1GasFeeFlow_instances.add(this);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolves the oracle address for the given chain. Subclasses can override
|
|
34
|
+
* this method to provide chain-specific oracle addresses. By default, this
|
|
35
|
+
* returns the standard OP Stack gas price oracle address.
|
|
36
|
+
*
|
|
37
|
+
* @param _chainId - The chain ID to resolve the oracle address for.
|
|
38
|
+
* @returns The oracle address for the given chain.
|
|
39
|
+
*/
|
|
40
|
+
getOracleAddressForChain(_chainId) {
|
|
41
|
+
return DEFAULT_GAS_PRICE_ORACLE_ADDRESS;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Whether to sign the transaction with a dummy key prior to calling the
|
|
45
|
+
* oracle contract. Some oracle contracts require a signed payload even for
|
|
46
|
+
* read-only methods.
|
|
47
|
+
*
|
|
48
|
+
* Subclasses can override to enable signing when needed. Defaults to false.
|
|
49
|
+
*
|
|
50
|
+
* @returns Whether the transaction should be signed prior to the oracle call.
|
|
51
|
+
*/
|
|
52
|
+
shouldSignTransaction() {
|
|
53
|
+
return false;
|
|
39
54
|
}
|
|
40
55
|
async getLayer1Fee(request) {
|
|
41
56
|
try {
|
|
@@ -47,12 +62,12 @@ export class OracleLayer1GasFeeFlow {
|
|
|
47
62
|
}
|
|
48
63
|
}
|
|
49
64
|
}
|
|
50
|
-
|
|
65
|
+
_OracleLayer1GasFeeFlow_instances = new WeakSet(), _OracleLayer1GasFeeFlow_getOracleLayer1GasFee = async function _OracleLayer1GasFeeFlow_getOracleLayer1GasFee(request) {
|
|
51
66
|
const { provider, transactionMeta } = request;
|
|
52
|
-
const contract = new Contract(
|
|
67
|
+
const contract = new Contract(this.getOracleAddressForChain(transactionMeta.chainId), GAS_PRICE_ORACLE_ABI,
|
|
53
68
|
// Network controller provider type is incompatible with ethers provider
|
|
54
69
|
new Web3Provider(provider));
|
|
55
|
-
const serializedTransaction = __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_buildUnserializedTransaction).call(this, transactionMeta,
|
|
70
|
+
const serializedTransaction = __classPrivateFieldGet(this, _OracleLayer1GasFeeFlow_instances, "m", _OracleLayer1GasFeeFlow_buildUnserializedTransaction).call(this, transactionMeta, this.shouldSignTransaction()).serialize();
|
|
56
71
|
const result = await contract.getL1Fee(serializedTransaction);
|
|
57
72
|
if (result === undefined) {
|
|
58
73
|
throw new Error('No value returned from oracle contract');
|
|
@@ -66,7 +81,8 @@ _OracleLayer1GasFeeFlow_oracleAddress = new WeakMap(), _OracleLayer1GasFeeFlow_s
|
|
|
66
81
|
let unserializedTransaction = prepareTransaction(chainId, txParams);
|
|
67
82
|
if (sign) {
|
|
68
83
|
const keyBuffer = Buffer.from(DUMMY_KEY, 'hex');
|
|
69
|
-
|
|
84
|
+
const keyBytes = Uint8Array.from(keyBuffer);
|
|
85
|
+
unserializedTransaction = unserializedTransaction.sign(keyBytes);
|
|
70
86
|
}
|
|
71
87
|
return unserializedTransaction;
|
|
72
88
|
}, _OracleLayer1GasFeeFlow_buildTransactionParams = function _OracleLayer1GasFeeFlow_buildTransactionParams(transactionMeta) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OracleLayer1GasFeeFlow.mjs","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"OracleLayer1GasFeeFlow.mjs","sourceRoot":"","sources":["../../src/gas-flows/OracleLayer1GasFeeFlow.ts"],"names":[],"mappings":"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","sourcesContent":["import { Contract } from '@ethersproject/contracts';\nimport { Web3Provider, type ExternalProvider } from '@ethersproject/providers';\nimport type { Hex } from '@metamask/utils';\nimport { createModuleLogger } from '@metamask/utils';\n\nimport { projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type {\n Layer1GasFeeFlow,\n Layer1GasFeeFlowRequest,\n Layer1GasFeeFlowResponse,\n TransactionMeta,\n} from '../types';\nimport { prepareTransaction } from '../utils/prepare';\n\nconst log = createModuleLogger(projectLogger, 'oracle-layer1-gas-fee-flow');\n\nconst DUMMY_KEY =\n 'abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789';\n\nconst 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// Default OP Stack gas price oracle address used across supported networks\nconst DEFAULT_GAS_PRICE_ORACLE_ADDRESS =\n '0x420000000000000000000000000000000000000F' as Hex;\n\n/**\n * Layer 1 gas fee flow that obtains gas fee estimate using an oracle smart contract.\n */\nexport abstract class OracleLayer1GasFeeFlow implements Layer1GasFeeFlow {\n /**\n * Resolves the oracle address for the given chain. Subclasses can override\n * this method to provide chain-specific oracle addresses. By default, this\n * returns the standard OP Stack gas price oracle address.\n *\n * @param _chainId - The chain ID to resolve the oracle address for.\n * @returns The oracle address for the given chain.\n */\n protected getOracleAddressForChain(_chainId: Hex): Hex {\n return DEFAULT_GAS_PRICE_ORACLE_ADDRESS;\n }\n\n /**\n * Whether to sign the transaction with a dummy key prior to calling the\n * oracle contract. Some oracle contracts require a signed payload even for\n * read-only methods.\n *\n * Subclasses can override to enable signing when needed. Defaults to false.\n *\n * @returns Whether the transaction should be signed prior to the oracle call.\n */\n protected shouldSignTransaction(): boolean {\n return false;\n }\n\n abstract matchesTransaction({\n transactionMeta,\n messenger,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean>;\n\n async getLayer1Fee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<Layer1GasFeeFlowResponse> {\n try {\n return await this.#getOracleLayer1GasFee(request);\n } catch (error) {\n log('Failed to get oracle layer 1 gas fee', error);\n throw new Error(`Failed to get oracle layer 1 gas fee`);\n }\n }\n\n async #getOracleLayer1GasFee(\n request: Layer1GasFeeFlowRequest,\n ): Promise<Layer1GasFeeFlowResponse> {\n const { provider, transactionMeta } = request;\n\n const contract = new Contract(\n this.getOracleAddressForChain(transactionMeta.chainId),\n GAS_PRICE_ORACLE_ABI,\n // Network controller provider type is incompatible with ethers provider\n new Web3Provider(provider as unknown as ExternalProvider),\n );\n\n const serializedTransaction = this.#buildUnserializedTransaction(\n transactionMeta,\n this.shouldSignTransaction(),\n ).serialize();\n\n const result = await contract.getL1Fee(serializedTransaction);\n\n if (result === undefined) {\n throw new Error('No value returned from oracle contract');\n }\n\n return {\n layer1Fee: result.toHexString(),\n };\n }\n\n #buildUnserializedTransaction(\n transactionMeta: TransactionMeta,\n sign: boolean,\n ) {\n const txParams = this.#buildTransactionParams(transactionMeta);\n const { chainId } = transactionMeta;\n\n let unserializedTransaction = prepareTransaction(chainId, txParams);\n\n if (sign) {\n const keyBuffer = Buffer.from(DUMMY_KEY, 'hex');\n const keyBytes = Uint8Array.from(keyBuffer);\n unserializedTransaction = unserializedTransaction.sign(keyBytes);\n }\n\n return unserializedTransaction;\n }\n\n #buildTransactionParams(\n transactionMeta: TransactionMeta,\n ): TransactionMeta['txParams'] {\n return {\n ...transactionMeta.txParams,\n gasLimit: transactionMeta.txParams.gas,\n };\n }\n}\n"]}
|
|
@@ -10,10 +10,13 @@ const SCROLL_GAS_PRICE_ORACLE_ADDRESS = '0x5300000000000000000000000000000000000
|
|
|
10
10
|
* Scroll layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
|
|
11
11
|
*/
|
|
12
12
|
class ScrollLayer1GasFeeFlow extends OracleLayer1GasFeeFlow_1.OracleLayer1GasFeeFlow {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
getOracleAddressForChain(_chainId) {
|
|
14
|
+
return SCROLL_GAS_PRICE_ORACLE_ADDRESS;
|
|
15
15
|
}
|
|
16
|
-
|
|
16
|
+
shouldSignTransaction() {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
async matchesTransaction({ transactionMeta, }) {
|
|
17
20
|
return SCROLL_CHAIN_IDS.includes(transactionMeta.chainId);
|
|
18
21
|
}
|
|
19
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollLayer1GasFeeFlow.cjs","sourceRoot":"","sources":["../../src/gas-flows/ScrollLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;AAEA,yEAAkE;AAClE,gDAAyC;AAIzC,MAAM,gBAAgB,GAAU,CAAC,qBAAS,CAAC,MAAM,EAAE,qBAAS,CAAC,cAAc,CAAC,CAAC;AAE7E,qGAAqG;AACrG,MAAM,+BAA+B,GACnC,
|
|
1
|
+
{"version":3,"file":"ScrollLayer1GasFeeFlow.cjs","sourceRoot":"","sources":["../../src/gas-flows/ScrollLayer1GasFeeFlow.ts"],"names":[],"mappings":";;;AAEA,yEAAkE;AAClE,gDAAyC;AAIzC,MAAM,gBAAgB,GAAU,CAAC,qBAAS,CAAC,MAAM,EAAE,qBAAS,CAAC,cAAc,CAAC,CAAC;AAE7E,qGAAqG;AACrG,MAAM,+BAA+B,GACnC,4CAAmD,CAAC;AAEtD;;GAEG;AACH,MAAa,sBAAuB,SAAQ,+CAAsB;IAC7C,wBAAwB,CAAC,QAAa;QACvD,OAAO,+BAA+B,CAAC;IACzC,CAAC;IAEkB,qBAAqB;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,EACvB,eAAe,GAIhB;QACC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF;AAjBD,wDAiBC","sourcesContent":["import { type Hex } from '@metamask/utils';\n\nimport { OracleLayer1GasFeeFlow } from './OracleLayer1GasFeeFlow';\nimport { CHAIN_IDS } from '../constants';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { TransactionMeta } from '../types';\n\nconst SCROLL_CHAIN_IDS: Hex[] = [CHAIN_IDS.SCROLL, CHAIN_IDS.SCROLL_SEPOLIA];\n\n// BlockExplorer link: https://scrollscan.com/address/0x5300000000000000000000000000000000000002#code\nconst SCROLL_GAS_PRICE_ORACLE_ADDRESS =\n '0x5300000000000000000000000000000000000002' as Hex;\n\n/**\n * Scroll layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.\n */\nexport class ScrollLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {\n protected override getOracleAddressForChain(_chainId: Hex): Hex {\n return SCROLL_GAS_PRICE_ORACLE_ADDRESS;\n }\n\n protected override shouldSignTransaction(): boolean {\n return true;\n }\n\n async matchesTransaction({\n transactionMeta,\n }: {\n transactionMeta: TransactionMeta;\n messenger: TransactionControllerMessenger;\n }): Promise<boolean> {\n return SCROLL_CHAIN_IDS.includes(transactionMeta.chainId);\n }\n}\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Hex } from "@metamask/utils";
|
|
1
2
|
import { OracleLayer1GasFeeFlow } from "./OracleLayer1GasFeeFlow.cjs";
|
|
2
3
|
import type { TransactionControllerMessenger } from "../TransactionController.cjs";
|
|
3
4
|
import type { TransactionMeta } from "../types.cjs";
|
|
@@ -5,10 +6,11 @@ import type { TransactionMeta } from "../types.cjs";
|
|
|
5
6
|
* Scroll layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
|
|
6
7
|
*/
|
|
7
8
|
export declare class ScrollLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
|
|
8
|
-
|
|
9
|
+
protected getOracleAddressForChain(_chainId: Hex): Hex;
|
|
10
|
+
protected shouldSignTransaction(): boolean;
|
|
9
11
|
matchesTransaction({ transactionMeta, }: {
|
|
10
12
|
transactionMeta: TransactionMeta;
|
|
11
13
|
messenger: TransactionControllerMessenger;
|
|
12
|
-
}): boolean
|
|
14
|
+
}): Promise<boolean>;
|
|
13
15
|
}
|
|
14
16
|
//# sourceMappingURL=ScrollLayer1GasFeeFlow.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollLayer1GasFeeFlow.d.cts","sourceRoot":"","sources":["../../src/gas-flows/ScrollLayer1GasFeeFlow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ScrollLayer1GasFeeFlow.d.cts","sourceRoot":"","sources":["../../src/gas-flows/ScrollLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,wBAAwB;AAE3C,OAAO,EAAE,sBAAsB,EAAE,qCAAiC;AAElE,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAiB;AAQhD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,sBAAsB;cAC7C,wBAAwB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG;cAI5C,qBAAqB,IAAI,OAAO;IAI7C,kBAAkB,CAAC,EACvB,eAAe,GAChB,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;CAGrB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Hex } from "@metamask/utils";
|
|
1
2
|
import { OracleLayer1GasFeeFlow } from "./OracleLayer1GasFeeFlow.mjs";
|
|
2
3
|
import type { TransactionControllerMessenger } from "../TransactionController.mjs";
|
|
3
4
|
import type { TransactionMeta } from "../types.mjs";
|
|
@@ -5,10 +6,11 @@ import type { TransactionMeta } from "../types.mjs";
|
|
|
5
6
|
* Scroll layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
|
|
6
7
|
*/
|
|
7
8
|
export declare class ScrollLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
|
|
8
|
-
|
|
9
|
+
protected getOracleAddressForChain(_chainId: Hex): Hex;
|
|
10
|
+
protected shouldSignTransaction(): boolean;
|
|
9
11
|
matchesTransaction({ transactionMeta, }: {
|
|
10
12
|
transactionMeta: TransactionMeta;
|
|
11
13
|
messenger: TransactionControllerMessenger;
|
|
12
|
-
}): boolean
|
|
14
|
+
}): Promise<boolean>;
|
|
13
15
|
}
|
|
14
16
|
//# sourceMappingURL=ScrollLayer1GasFeeFlow.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollLayer1GasFeeFlow.d.mts","sourceRoot":"","sources":["../../src/gas-flows/ScrollLayer1GasFeeFlow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ScrollLayer1GasFeeFlow.d.mts","sourceRoot":"","sources":["../../src/gas-flows/ScrollLayer1GasFeeFlow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,wBAAwB;AAE3C,OAAO,EAAE,sBAAsB,EAAE,qCAAiC;AAElE,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAC/E,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAiB;AAQhD;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,sBAAsB;cAC7C,wBAAwB,CAAC,QAAQ,EAAE,GAAG,GAAG,GAAG;cAI5C,qBAAqB,IAAI,OAAO;IAI7C,kBAAkB,CAAC,EACvB,eAAe,GAChB,EAAE;QACD,eAAe,EAAE,eAAe,CAAC;QACjC,SAAS,EAAE,8BAA8B,CAAC;KAC3C,GAAG,OAAO,CAAC,OAAO,CAAC;CAGrB"}
|
|
@@ -7,10 +7,13 @@ const SCROLL_GAS_PRICE_ORACLE_ADDRESS = '0x5300000000000000000000000000000000000
|
|
|
7
7
|
* Scroll layer 1 gas fee flow that obtains gas fee estimate using an oracle contract.
|
|
8
8
|
*/
|
|
9
9
|
export class ScrollLayer1GasFeeFlow extends OracleLayer1GasFeeFlow {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
getOracleAddressForChain(_chainId) {
|
|
11
|
+
return SCROLL_GAS_PRICE_ORACLE_ADDRESS;
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
shouldSignTransaction() {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
async matchesTransaction({ transactionMeta, }) {
|
|
14
17
|
return SCROLL_CHAIN_IDS.includes(transactionMeta.chainId);
|
|
15
18
|
}
|
|
16
19
|
}
|