@metamask-previews/transaction-controller 52.2.0-preview-ca923904 → 52.2.0-preview-afcc340
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/dist/TransactionController.cjs +1 -3
- package/dist/TransactionController.cjs.map +1 -1
- package/dist/TransactionController.d.cts +1 -1
- package/dist/TransactionController.d.cts.map +1 -1
- package/dist/TransactionController.d.mts +1 -1
- package/dist/TransactionController.d.mts.map +1 -1
- package/dist/TransactionController.mjs +1 -3
- package/dist/TransactionController.mjs.map +1 -1
- package/dist/helpers/PendingTransactionTracker.cjs +6 -2
- package/dist/helpers/PendingTransactionTracker.cjs.map +1 -1
- package/dist/helpers/PendingTransactionTracker.d.cts +5 -2
- package/dist/helpers/PendingTransactionTracker.d.cts.map +1 -1
- package/dist/helpers/PendingTransactionTracker.d.mts +5 -2
- package/dist/helpers/PendingTransactionTracker.d.mts.map +1 -1
- package/dist/helpers/PendingTransactionTracker.mjs +6 -2
- package/dist/helpers/PendingTransactionTracker.mjs.map +1 -1
- package/dist/helpers/TransactionPoller.cjs +12 -8
- package/dist/helpers/TransactionPoller.cjs.map +1 -1
- package/dist/helpers/TransactionPoller.d.cts +7 -3
- package/dist/helpers/TransactionPoller.d.cts.map +1 -1
- package/dist/helpers/TransactionPoller.d.mts +7 -3
- package/dist/helpers/TransactionPoller.d.mts.map +1 -1
- package/dist/helpers/TransactionPoller.mjs +11 -7
- package/dist/helpers/TransactionPoller.mjs.map +1 -1
- package/dist/utils/feature-flags.cjs +15 -31
- package/dist/utils/feature-flags.cjs.map +1 -1
- package/dist/utils/feature-flags.d.cts +26 -38
- package/dist/utils/feature-flags.d.cts.map +1 -1
- package/dist/utils/feature-flags.d.mts +26 -38
- package/dist/utils/feature-flags.d.mts.map +1 -1
- package/dist/utils/feature-flags.mjs +13 -28
- package/dist/utils/feature-flags.mjs.map +1 -1
- package/dist/utils/gas.cjs +4 -9
- package/dist/utils/gas.cjs.map +1 -1
- package/dist/utils/gas.d.cts +3 -6
- package/dist/utils/gas.d.cts.map +1 -1
- package/dist/utils/gas.d.mts +3 -6
- package/dist/utils/gas.d.mts.map +1 -1
- package/dist/utils/gas.mjs +3 -8
- package/dist/utils/gas.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -9,13 +9,12 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
9
9
|
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
10
|
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
11
|
};
|
|
12
|
-
var _TransactionPoller_instances, _TransactionPoller_acceleratedCount, _TransactionPoller_blockTracker, _TransactionPoller_blockTrackerListener, _TransactionPoller_listener, _TransactionPoller_pendingTransactions, _TransactionPoller_running, _TransactionPoller_timeout, _TransactionPoller_queue, _TransactionPoller_interval, _TransactionPoller_stopTimeout, _TransactionPoller_stopBlockTracker;
|
|
12
|
+
var _TransactionPoller_instances, _TransactionPoller_acceleratedCount, _TransactionPoller_blockTracker, _TransactionPoller_chainId, _TransactionPoller_messenger, _TransactionPoller_blockTrackerListener, _TransactionPoller_listener, _TransactionPoller_pendingTransactions, _TransactionPoller_running, _TransactionPoller_timeout, _TransactionPoller_queue, _TransactionPoller_interval, _TransactionPoller_stopTimeout, _TransactionPoller_stopBlockTracker;
|
|
13
13
|
import { createModuleLogger } from "@metamask/utils";
|
|
14
14
|
import $lodash from "lodash";
|
|
15
15
|
const { isEqual } = $lodash;
|
|
16
16
|
import { projectLogger } from "../logger.mjs";
|
|
17
|
-
|
|
18
|
-
export const ACCELERATED_INTERVAL = 1000 * 3; // 3 Seconds
|
|
17
|
+
import { getAcceleratedPollingParams } from "../utils/feature-flags.mjs";
|
|
19
18
|
const log = createModuleLogger(projectLogger, 'transaction-poller');
|
|
20
19
|
/**
|
|
21
20
|
* Helper class to orchestrate when to poll pending transactions.
|
|
@@ -23,16 +22,20 @@ const log = createModuleLogger(projectLogger, 'transaction-poller');
|
|
|
23
22
|
* Following that, it will poll on every new block via the block tracker.
|
|
24
23
|
*/
|
|
25
24
|
export class TransactionPoller {
|
|
26
|
-
constructor(blockTracker) {
|
|
25
|
+
constructor({ blockTracker, chainId, messenger, }) {
|
|
27
26
|
_TransactionPoller_instances.add(this);
|
|
28
27
|
_TransactionPoller_acceleratedCount.set(this, 0);
|
|
29
28
|
_TransactionPoller_blockTracker.set(this, void 0);
|
|
29
|
+
_TransactionPoller_chainId.set(this, void 0);
|
|
30
|
+
_TransactionPoller_messenger.set(this, void 0);
|
|
30
31
|
_TransactionPoller_blockTrackerListener.set(this, void 0);
|
|
31
32
|
_TransactionPoller_listener.set(this, void 0);
|
|
32
33
|
_TransactionPoller_pendingTransactions.set(this, void 0);
|
|
33
34
|
_TransactionPoller_running.set(this, false);
|
|
34
35
|
_TransactionPoller_timeout.set(this, void 0);
|
|
35
36
|
__classPrivateFieldSet(this, _TransactionPoller_blockTracker, blockTracker, "f");
|
|
37
|
+
__classPrivateFieldSet(this, _TransactionPoller_chainId, chainId, "f");
|
|
38
|
+
__classPrivateFieldSet(this, _TransactionPoller_messenger, messenger, "f");
|
|
36
39
|
}
|
|
37
40
|
/**
|
|
38
41
|
* Start the poller with a listener that will be called on every interval.
|
|
@@ -87,11 +90,12 @@ export class TransactionPoller {
|
|
|
87
90
|
}
|
|
88
91
|
}
|
|
89
92
|
}
|
|
90
|
-
_TransactionPoller_acceleratedCount = new WeakMap(), _TransactionPoller_blockTracker = new WeakMap(), _TransactionPoller_blockTrackerListener = new WeakMap(), _TransactionPoller_listener = new WeakMap(), _TransactionPoller_pendingTransactions = new WeakMap(), _TransactionPoller_running = new WeakMap(), _TransactionPoller_timeout = new WeakMap(), _TransactionPoller_instances = new WeakSet(), _TransactionPoller_queue = function _TransactionPoller_queue() {
|
|
93
|
+
_TransactionPoller_acceleratedCount = new WeakMap(), _TransactionPoller_blockTracker = new WeakMap(), _TransactionPoller_chainId = new WeakMap(), _TransactionPoller_messenger = new WeakMap(), _TransactionPoller_blockTrackerListener = new WeakMap(), _TransactionPoller_listener = new WeakMap(), _TransactionPoller_pendingTransactions = new WeakMap(), _TransactionPoller_running = new WeakMap(), _TransactionPoller_timeout = new WeakMap(), _TransactionPoller_instances = new WeakSet(), _TransactionPoller_queue = function _TransactionPoller_queue() {
|
|
91
94
|
if (!__classPrivateFieldGet(this, _TransactionPoller_running, "f")) {
|
|
92
95
|
return;
|
|
93
96
|
}
|
|
94
|
-
|
|
97
|
+
const { countMax, intervalMs } = getAcceleratedPollingParams(__classPrivateFieldGet(this, _TransactionPoller_chainId, "f"), __classPrivateFieldGet(this, _TransactionPoller_messenger, "f"));
|
|
98
|
+
if (__classPrivateFieldGet(this, _TransactionPoller_acceleratedCount, "f") >= countMax) {
|
|
95
99
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
96
100
|
__classPrivateFieldSet(this, _TransactionPoller_blockTrackerListener, (latestBlockNumber) => __classPrivateFieldGet(this, _TransactionPoller_instances, "m", _TransactionPoller_interval).call(this, false, latestBlockNumber), "f");
|
|
97
101
|
__classPrivateFieldGet(this, _TransactionPoller_blockTracker, "f").on('latest', __classPrivateFieldGet(this, _TransactionPoller_blockTrackerListener, "f"));
|
|
@@ -103,7 +107,7 @@ _TransactionPoller_acceleratedCount = new WeakMap(), _TransactionPoller_blockTra
|
|
|
103
107
|
__classPrivateFieldSet(this, _TransactionPoller_timeout, setTimeout(async () => {
|
|
104
108
|
await __classPrivateFieldGet(this, _TransactionPoller_instances, "m", _TransactionPoller_interval).call(this, true);
|
|
105
109
|
__classPrivateFieldGet(this, _TransactionPoller_instances, "m", _TransactionPoller_queue).call(this);
|
|
106
|
-
},
|
|
110
|
+
}, intervalMs), "f");
|
|
107
111
|
}, _TransactionPoller_interval = async function _TransactionPoller_interval(isAccelerated, latestBlockNumber) {
|
|
108
112
|
if (isAccelerated) {
|
|
109
113
|
log('Accelerated interval', __classPrivateFieldGet(this, _TransactionPoller_acceleratedCount, "f") + 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionPoller.mjs","sourceRoot":"","sources":["../../src/helpers/TransactionPoller.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,OAAO,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"TransactionPoller.mjs","sourceRoot":"","sources":["../../src/helpers/TransactionPoller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BlockTracker } from '@metamask/network-controller';\nimport { createModuleLogger, type Hex } from '@metamask/utils';\nimport { isEqual } from 'lodash';\n\nimport { projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\nimport type { TransactionMeta } from '../types';\nimport { getAcceleratedPollingParams } from '../utils/feature-flags';\n\nconst log = createModuleLogger(projectLogger, 'transaction-poller');\n\n/**\n * Helper class to orchestrate when to poll pending transactions.\n * Initially starts polling via a timeout chain every 2 seconds up to 5 times.\n * Following that, it will poll on every new block via the block tracker.\n */\nexport class TransactionPoller {\n #acceleratedCount = 0;\n\n readonly #blockTracker: BlockTracker;\n\n readonly #chainId: Hex;\n\n readonly #messenger: TransactionControllerMessenger;\n\n #blockTrackerListener?: (latestBlockNumber: string) => void;\n\n #listener?: (latestBlockNumber: string) => Promise<void>;\n\n #pendingTransactions?: TransactionMeta[];\n\n #running = false;\n\n #timeout?: NodeJS.Timeout;\n\n constructor({\n blockTracker,\n chainId,\n messenger,\n }: {\n blockTracker: BlockTracker;\n chainId: Hex;\n messenger: TransactionControllerMessenger;\n }) {\n this.#blockTracker = blockTracker;\n this.#chainId = chainId;\n this.#messenger = messenger;\n }\n\n /**\n * Start the poller with a listener that will be called on every interval.\n *\n * @param listener - The listener to call on every interval.\n */\n start(listener: (latestBlockNumber: string) => Promise<void>) {\n if (this.#running) {\n return;\n }\n\n this.#listener = listener;\n this.#running = true;\n\n this.#queue();\n\n log('Started');\n }\n\n /**\n * Stop the poller.\n * Remove all timeouts and block tracker listeners.\n */\n stop() {\n if (!this.#running) {\n return;\n }\n\n this.#running = false;\n this.#listener = undefined;\n this.#acceleratedCount = 0;\n this.#pendingTransactions = undefined;\n\n this.#stopTimeout();\n this.#stopBlockTracker();\n\n log('Stopped');\n }\n\n /**\n * Notify the poller of the pending transactions being monitored.\n * This will reset to the accelerated polling and reset the count\n * when new transactions are added or removed.\n *\n * @param pendingTransactions - The pending transactions to poll.\n */\n setPendingTransactions(pendingTransactions: TransactionMeta[]) {\n const currentPendingTransactionIds = (this.#pendingTransactions ?? []).map(\n (tx) => tx.id,\n );\n\n this.#pendingTransactions = pendingTransactions;\n\n const newPendingTransactionIds = pendingTransactions.map((tx) => tx.id);\n\n const hasUpdatedIds = !isEqual(\n currentPendingTransactionIds,\n newPendingTransactionIds,\n );\n\n if (!this.#running || !hasUpdatedIds) {\n return;\n }\n\n log('Detected new pending transactions', newPendingTransactionIds);\n\n this.#acceleratedCount = 0;\n\n if (this.#blockTrackerListener) {\n this.#stopBlockTracker();\n this.#queue();\n }\n }\n\n #queue() {\n if (!this.#running) {\n return;\n }\n\n const { countMax, intervalMs } = getAcceleratedPollingParams(\n this.#chainId,\n this.#messenger,\n );\n\n if (this.#acceleratedCount >= countMax) {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#blockTrackerListener = (latestBlockNumber) =>\n this.#interval(false, latestBlockNumber);\n\n this.#blockTracker.on('latest', this.#blockTrackerListener);\n\n log('Added block tracker listener');\n\n return;\n }\n\n this.#stopTimeout();\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.#timeout = setTimeout(async () => {\n await this.#interval(true);\n this.#queue();\n }, intervalMs);\n }\n\n async #interval(isAccelerated: boolean, latestBlockNumber?: string) {\n if (isAccelerated) {\n log('Accelerated interval', this.#acceleratedCount + 1);\n } else {\n log('Block tracker interval', latestBlockNumber);\n }\n\n const latestBlockNumberFinal =\n latestBlockNumber ?? (await this.#blockTracker.getLatestBlock());\n\n await this.#listener?.(latestBlockNumberFinal);\n\n if (isAccelerated && this.#running) {\n this.#acceleratedCount += 1;\n }\n }\n\n #stopTimeout() {\n if (!this.#timeout) {\n return;\n }\n\n clearTimeout(this.#timeout);\n this.#timeout = undefined;\n }\n\n #stopBlockTracker() {\n if (!this.#blockTrackerListener) {\n return;\n }\n\n this.#blockTracker.removeListener('latest', this.#blockTrackerListener);\n this.#blockTrackerListener = undefined;\n }\n}\n"]}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getAcceleratedPollingParams = exports.getBatchSizeLimit = exports.getEIP7702UpgradeContractAddress = exports.getEIP7702ContractAddresses = exports.getEIP7702SupportedChains = exports.FEATURE_FLAG_EIP_7702 = exports.FEATURE_FLAG_TRANSACTIONS = void 0;
|
|
4
4
|
const utils_1 = require("@metamask/utils");
|
|
5
5
|
const signature_1 = require("./signature.cjs");
|
|
6
6
|
const logger_1 = require("../logger.cjs");
|
|
7
7
|
exports.FEATURE_FLAG_TRANSACTIONS = 'confirmations_transactions';
|
|
8
8
|
exports.FEATURE_FLAG_EIP_7702 = 'confirmations_eip_7702';
|
|
9
9
|
const DEFAULT_BATCH_SIZE_LIMIT = 10;
|
|
10
|
-
const
|
|
10
|
+
const DEFAULT_ACCELERATED_POLLING_COUNT_MAX = 10;
|
|
11
|
+
const DEFAULT_ACCELERATED_POLLING_INTERVAL_MS = 3 * 1000;
|
|
11
12
|
const log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'feature-flags');
|
|
12
13
|
/**
|
|
13
14
|
* Retrieves the supported EIP-7702 chains.
|
|
@@ -62,41 +63,24 @@ function getBatchSizeLimit(messenger) {
|
|
|
62
63
|
}
|
|
63
64
|
exports.getBatchSizeLimit = getBatchSizeLimit;
|
|
64
65
|
/**
|
|
65
|
-
* Retrieves the
|
|
66
|
-
* Defaults to the default gas estimate fallback if not set.
|
|
66
|
+
* Retrieves the accelerated polling parameters for a given chain ID.
|
|
67
67
|
*
|
|
68
68
|
* @param chainId - The chain ID.
|
|
69
69
|
* @param messenger - The controller messenger instance.
|
|
70
|
-
* @returns The
|
|
70
|
+
* @returns The accelerated polling parameters: `countMax` and `intervalMs`.
|
|
71
71
|
*/
|
|
72
|
-
function
|
|
72
|
+
function getAcceleratedPollingParams(chainId, messenger) {
|
|
73
73
|
const featureFlags = getFeatureFlags(messenger);
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return
|
|
74
|
+
const acceleratedPollingParams = featureFlags?.[exports.FEATURE_FLAG_TRANSACTIONS]?.acceleratedPolling;
|
|
75
|
+
const countMax = acceleratedPollingParams?.perChainConfig?.[chainId]?.countMax ||
|
|
76
|
+
acceleratedPollingParams?.defaultCountMax ||
|
|
77
|
+
DEFAULT_ACCELERATED_POLLING_COUNT_MAX;
|
|
78
|
+
const intervalMs = acceleratedPollingParams?.perChainConfig?.[chainId]?.intervalMs ||
|
|
79
|
+
acceleratedPollingParams?.defaultIntervalMs ||
|
|
80
|
+
DEFAULT_ACCELERATED_POLLING_INTERVAL_MS;
|
|
81
|
+
return { countMax, intervalMs };
|
|
82
82
|
}
|
|
83
|
-
exports.
|
|
84
|
-
/**
|
|
85
|
-
* Retrieves the default gas estimate fallback.
|
|
86
|
-
*
|
|
87
|
-
* @param messenger - The controller messenger instance.
|
|
88
|
-
* @returns The default gas estimate fallback.
|
|
89
|
-
*/
|
|
90
|
-
function getDefaultGasEstimateFallback(messenger) {
|
|
91
|
-
const featureFlags = getFeatureFlags(messenger);
|
|
92
|
-
const defaultGasEstimateFallback = featureFlags?.[exports.FEATURE_FLAG_TRANSACTIONS]?.defaultGasEstimateFallback;
|
|
93
|
-
return {
|
|
94
|
-
gasEstimateFallback: defaultGasEstimateFallback?.value ??
|
|
95
|
-
DEFAULT_GAS_ESTIMATE_FALLBACK_BLOCK_PERCENT,
|
|
96
|
-
isFixedGas: defaultGasEstimateFallback?.isFixedGas ?? false,
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
exports.getDefaultGasEstimateFallback = getDefaultGasEstimateFallback;
|
|
83
|
+
exports.getAcceleratedPollingParams = getAcceleratedPollingParams;
|
|
100
84
|
/**
|
|
101
85
|
* Retrieves the relevant feature flags from the remote feature flag controller.
|
|
102
86
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags.cjs","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":";;;AAAA,2CAA+D;AAE/D,+CAA+C;AAC/C,0CAA0C;AAG7B,QAAA,yBAAyB,GAAG,4BAA4B,CAAC;AACzD,QAAA,qBAAqB,GAAG,wBAAwB,CAAC;AAE9D,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,
|
|
1
|
+
{"version":3,"file":"feature-flags.cjs","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":";;;AAAA,2CAA+D;AAE/D,+CAA+C;AAC/C,0CAA0C;AAG7B,QAAA,yBAAyB,GAAG,4BAA4B,CAAC;AACzD,QAAA,qBAAqB,GAAG,wBAAwB,CAAC;AAE9D,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,qCAAqC,GAAG,EAAE,CAAC;AACjD,MAAM,uCAAuC,GAAG,CAAC,GAAG,IAAI,CAAC;AAyDzD,MAAM,GAAG,GAAG,IAAA,0BAAkB,EAAC,sBAAa,EAAE,eAAe,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,SAAgB,yBAAyB,CACvC,SAAyC;IAEzC,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAChD,OAAO,YAAY,EAAE,CAAC,6BAAqB,CAAC,EAAE,eAAe,IAAI,EAAE,CAAC;AACtE,CAAC;AALD,8DAKC;AAED;;;;;;;GAOG;AACH,SAAgB,2BAA2B,CACzC,OAAY,EACZ,SAAyC,EACzC,SAAc;IAEd,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAEhD,MAAM,SAAS,GACb,YAAY,EAAE,CAAC,6BAAqB,CAAC,EAAE,SAAS,EAAE,CAChD,OAAO,CAAC,WAAW,EAAS,CAC7B,IAAI,EAAE,CAAC;IAEV,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACnB,IAAA,4BAAgB,EACd,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAC3B,QAAQ,CAAC,SAAS,EAClB,SAAS,CACV,CACF;SACA,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AArBD,kEAqBC;AAED;;;;;;;GAOG;AACH,SAAgB,gCAAgC,CAC9C,OAAY,EACZ,SAAyC,EACzC,SAAc;IAEd,OAAO,2BAA2B,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAND,4EAMC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAC/B,SAAyC;IAEzC,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAChD,OAAO,CACL,YAAY,EAAE,CAAC,iCAAyB,CAAC,EAAE,cAAc;QACzD,wBAAwB,CACzB,CAAC;AACJ,CAAC;AARD,8CAQC;AAED;;;;;;GAMG;AACH,SAAgB,2BAA2B,CACzC,OAAY,EACZ,SAAyC;IAEzC,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAEhD,MAAM,wBAAwB,GAC5B,YAAY,EAAE,CAAC,iCAAyB,CAAC,EAAE,kBAAkB,CAAC;IAEhE,MAAM,QAAQ,GACZ,wBAAwB,EAAE,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ;QAC7D,wBAAwB,EAAE,eAAe;QACzC,qCAAqC,CAAC;IAExC,MAAM,UAAU,GACd,wBAAwB,EAAE,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU;QAC/D,wBAAwB,EAAE,iBAAiB;QAC3C,uCAAuC,CAAC;IAE1C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AApBD,kEAoBC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CACtB,SAAyC;IAEzC,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CACjC,sCAAsC,CACvC,CAAC,kBAAkB,CAAC;IAErB,GAAG,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;IAE7C,OAAO,YAAiD,CAAC;AAC3D,CAAC","sourcesContent":["import { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { isValidSignature } from './signature';\nimport { projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\n\nexport const FEATURE_FLAG_TRANSACTIONS = 'confirmations_transactions';\nexport const FEATURE_FLAG_EIP_7702 = 'confirmations_eip_7702';\n\nconst DEFAULT_BATCH_SIZE_LIMIT = 10;\nconst DEFAULT_ACCELERATED_POLLING_COUNT_MAX = 10;\nconst DEFAULT_ACCELERATED_POLLING_INTERVAL_MS = 3 * 1000;\n\nexport type TransactionControllerFeatureFlags = {\n [FEATURE_FLAG_EIP_7702]?: {\n /**\n * All contracts that support EIP-7702 batch transactions.\n * Keyed by chain ID.\n * First entry in each array is the contract that standard EOAs will be upgraded to.\n */\n contracts?: Record<\n Hex,\n {\n /** Address of the smart contract. */\n address: Hex;\n\n /** Signature to verify the contract is authentic. */\n signature: Hex;\n }[]\n >;\n\n /** Chains enabled for EIP-7702 batch transactions. */\n supportedChains?: Hex[];\n };\n\n [FEATURE_FLAG_TRANSACTIONS]?: {\n /** Maximum number of transactions that can be in an external batch. */\n batchSizeLimit?: number;\n\n acceleratedPolling?: {\n /**\n * Accelerated polling is used to speed up the polling process for\n * transactions that are not yet confirmed.\n */\n perChainConfig?: {\n /** Accelerated polling parameters on a per-chain basis. */\n\n [chainId: Hex]: {\n /**\n * Maximum number of polling requests that can be made in a row, before\n * the normal polling resumes.\n */\n countMax?: number;\n\n /** Interval between polling requests in milliseconds. */\n intervalMs?: number;\n };\n };\n\n /** Default `countMax` in case no chain-specific parameter is set. */\n defaultCountMax?: number;\n\n /** Default `intervalMs` in case no chain-specific parameter is set. */\n defaultIntervalMs?: number;\n };\n };\n};\n\nconst log = createModuleLogger(projectLogger, 'feature-flags');\n\n/**\n * Retrieves the supported EIP-7702 chains.\n *\n * @param messenger - The controller messenger instance.\n * @returns The supported chains.\n */\nexport function getEIP7702SupportedChains(\n messenger: TransactionControllerMessenger,\n): Hex[] {\n const featureFlags = getFeatureFlags(messenger);\n return featureFlags?.[FEATURE_FLAG_EIP_7702]?.supportedChains ?? [];\n}\n\n/**\n * Retrieves the supported EIP-7702 contract addresses for a given chain ID.\n *\n * @param chainId - The chain ID.\n * @param messenger - The controller messenger instance.\n * @param publicKey - The public key used to validate the contract authenticity.\n * @returns The supported contract addresses.\n */\nexport function getEIP7702ContractAddresses(\n chainId: Hex,\n messenger: TransactionControllerMessenger,\n publicKey: Hex,\n): Hex[] {\n const featureFlags = getFeatureFlags(messenger);\n\n const contracts =\n featureFlags?.[FEATURE_FLAG_EIP_7702]?.contracts?.[\n chainId.toLowerCase() as Hex\n ] ?? [];\n\n return contracts\n .filter((contract) =>\n isValidSignature(\n [contract.address, chainId],\n contract.signature,\n publicKey,\n ),\n )\n .map((contract) => contract.address);\n}\n\n/**\n * Retrieves the EIP-7702 upgrade contract address.\n *\n * @param chainId - The chain ID.\n * @param messenger - The controller messenger instance.\n * @param publicKey - The public key used to validate the contract authenticity.\n * @returns The upgrade contract address.\n */\nexport function getEIP7702UpgradeContractAddress(\n chainId: Hex,\n messenger: TransactionControllerMessenger,\n publicKey: Hex,\n): Hex | undefined {\n return getEIP7702ContractAddresses(chainId, messenger, publicKey)?.[0];\n}\n\n/**\n * Retrieves the batch size limit.\n * Defaults to 10 if not set.\n *\n * @param messenger - The controller messenger instance.\n * @returns The batch size limit.\n */\nexport function getBatchSizeLimit(\n messenger: TransactionControllerMessenger,\n): number {\n const featureFlags = getFeatureFlags(messenger);\n return (\n featureFlags?.[FEATURE_FLAG_TRANSACTIONS]?.batchSizeLimit ??\n DEFAULT_BATCH_SIZE_LIMIT\n );\n}\n\n/**\n * Retrieves the accelerated polling parameters for a given chain ID.\n *\n * @param chainId - The chain ID.\n * @param messenger - The controller messenger instance.\n * @returns The accelerated polling parameters: `countMax` and `intervalMs`.\n */\nexport function getAcceleratedPollingParams(\n chainId: Hex,\n messenger: TransactionControllerMessenger,\n): { countMax: number; intervalMs: number } {\n const featureFlags = getFeatureFlags(messenger);\n\n const acceleratedPollingParams =\n featureFlags?.[FEATURE_FLAG_TRANSACTIONS]?.acceleratedPolling;\n\n const countMax =\n acceleratedPollingParams?.perChainConfig?.[chainId]?.countMax ||\n acceleratedPollingParams?.defaultCountMax ||\n DEFAULT_ACCELERATED_POLLING_COUNT_MAX;\n\n const intervalMs =\n acceleratedPollingParams?.perChainConfig?.[chainId]?.intervalMs ||\n acceleratedPollingParams?.defaultIntervalMs ||\n DEFAULT_ACCELERATED_POLLING_INTERVAL_MS;\n\n return { countMax, intervalMs };\n}\n\n/**\n * Retrieves the relevant feature flags from the remote feature flag controller.\n *\n * @param messenger - The messenger instance.\n * @returns The feature flags.\n */\nfunction getFeatureFlags(\n messenger: TransactionControllerMessenger,\n): TransactionControllerFeatureFlags {\n const featureFlags = messenger.call(\n 'RemoteFeatureFlagController:getState',\n ).remoteFeatureFlags;\n\n log('Retrieved feature flags', featureFlags);\n\n return featureFlags as TransactionControllerFeatureFlags;\n}\n"]}
|
|
@@ -2,19 +2,6 @@ import { type Hex } from "@metamask/utils";
|
|
|
2
2
|
import type { TransactionControllerMessenger } from "../TransactionController.cjs";
|
|
3
3
|
export declare const FEATURE_FLAG_TRANSACTIONS = "confirmations_transactions";
|
|
4
4
|
export declare const FEATURE_FLAG_EIP_7702 = "confirmations_eip_7702";
|
|
5
|
-
type GasEstimateFallback = {
|
|
6
|
-
/**
|
|
7
|
-
* The fallback gas estimate for a transaction.
|
|
8
|
-
* This value is either a fixed hexadecimal number or a percentage multiplier.
|
|
9
|
-
*/
|
|
10
|
-
value: number | Hex;
|
|
11
|
-
/**
|
|
12
|
-
* Indicates whether the gas estimate is a fixed hexadecimal number or a percentage multiplier.
|
|
13
|
-
* - `true`: The gas estimate is a fixed hexadecimal number.
|
|
14
|
-
* - `false`: The gas estimate is a percentage multiplier.
|
|
15
|
-
*/
|
|
16
|
-
isFixedGas: boolean;
|
|
17
|
-
};
|
|
18
5
|
export type TransactionControllerFeatureFlags = {
|
|
19
6
|
[FEATURE_FLAG_EIP_7702]?: {
|
|
20
7
|
/**
|
|
@@ -34,15 +21,28 @@ export type TransactionControllerFeatureFlags = {
|
|
|
34
21
|
[FEATURE_FLAG_TRANSACTIONS]?: {
|
|
35
22
|
/** Maximum number of transactions that can be in an external batch. */
|
|
36
23
|
batchSizeLimit?: number;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
acceleratedPolling?: {
|
|
25
|
+
/**
|
|
26
|
+
* Accelerated polling is used to speed up the polling process for
|
|
27
|
+
* transactions that are not yet confirmed.
|
|
28
|
+
*/
|
|
29
|
+
perChainConfig?: {
|
|
30
|
+
/** Accelerated polling parameters on a per-chain basis. */
|
|
31
|
+
[chainId: Hex]: {
|
|
32
|
+
/**
|
|
33
|
+
* Maximum number of polling requests that can be made in a row, before
|
|
34
|
+
* the normal polling resumes.
|
|
35
|
+
*/
|
|
36
|
+
countMax?: number;
|
|
37
|
+
/** Interval between polling requests in milliseconds. */
|
|
38
|
+
intervalMs?: number;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/** Default `countMax` in case no chain-specific parameter is set. */
|
|
42
|
+
defaultCountMax?: number;
|
|
43
|
+
/** Default `intervalMs` in case no chain-specific parameter is set. */
|
|
44
|
+
defaultIntervalMs?: number;
|
|
40
45
|
};
|
|
41
|
-
/**
|
|
42
|
-
* Default gas estimate fallback.
|
|
43
|
-
* This value is used when no specific gas estimate fallback is found for a chain ID.
|
|
44
|
-
*/
|
|
45
|
-
defaultGasEstimateFallback?: GasEstimateFallback;
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
48
|
/**
|
|
@@ -79,26 +79,14 @@ export declare function getEIP7702UpgradeContractAddress(chainId: Hex, messenger
|
|
|
79
79
|
*/
|
|
80
80
|
export declare function getBatchSizeLimit(messenger: TransactionControllerMessenger): number;
|
|
81
81
|
/**
|
|
82
|
-
* Retrieves the
|
|
83
|
-
* Defaults to the default gas estimate fallback if not set.
|
|
82
|
+
* Retrieves the accelerated polling parameters for a given chain ID.
|
|
84
83
|
*
|
|
85
84
|
* @param chainId - The chain ID.
|
|
86
85
|
* @param messenger - The controller messenger instance.
|
|
87
|
-
* @returns The
|
|
88
|
-
*/
|
|
89
|
-
export declare function getGasEstimateFallback(chainId: Hex, messenger: TransactionControllerMessenger): {
|
|
90
|
-
gasEstimateFallback: number | Hex;
|
|
91
|
-
isFixedGas: boolean;
|
|
92
|
-
};
|
|
93
|
-
/**
|
|
94
|
-
* Retrieves the default gas estimate fallback.
|
|
95
|
-
*
|
|
96
|
-
* @param messenger - The controller messenger instance.
|
|
97
|
-
* @returns The default gas estimate fallback.
|
|
86
|
+
* @returns The accelerated polling parameters: `countMax` and `intervalMs`.
|
|
98
87
|
*/
|
|
99
|
-
export declare function
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
export declare function getAcceleratedPollingParams(chainId: Hex, messenger: TransactionControllerMessenger): {
|
|
89
|
+
countMax: number;
|
|
90
|
+
intervalMs: number;
|
|
102
91
|
};
|
|
103
|
-
export {};
|
|
104
92
|
//# sourceMappingURL=feature-flags.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags.d.cts","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAAE,wBAAwB;AAI/D,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAE/E,eAAO,MAAM,yBAAyB,+BAA+B,CAAC;AACtE,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-flags.d.cts","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAAE,wBAAwB;AAI/D,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAE/E,eAAO,MAAM,yBAAyB,+BAA+B,CAAC;AACtE,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAM9D,MAAM,MAAM,iCAAiC,GAAG;IAC9C,CAAC,qBAAqB,CAAC,CAAC,EAAE;QACxB;;;;WAIG;QACH,SAAS,CAAC,EAAE,MAAM,CAChB,GAAG,EACH;YACE,qCAAqC;YACrC,OAAO,EAAE,GAAG,CAAC;YAEb,qDAAqD;YACrD,SAAS,EAAE,GAAG,CAAC;SAChB,EAAE,CACJ,CAAC;QAEF,sDAAsD;QACtD,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;KACzB,CAAC;IAEF,CAAC,yBAAyB,CAAC,CAAC,EAAE;QAC5B,uEAAuE;QACvE,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,kBAAkB,CAAC,EAAE;YACnB;;;eAGG;YACH,cAAc,CAAC,EAAE;gBACf,2DAA2D;gBAE3D,CAAC,OAAO,EAAE,GAAG,GAAG;oBACd;;;uBAGG;oBACH,QAAQ,CAAC,EAAE,MAAM,CAAC;oBAElB,yDAAyD;oBACzD,UAAU,CAAC,EAAE,MAAM,CAAC;iBACrB,CAAC;aACH,CAAC;YAEF,qEAAqE;YACrE,eAAe,CAAC,EAAE,MAAM,CAAC;YAEzB,uEAAuE;YACvE,iBAAiB,CAAC,EAAE,MAAM,CAAC;SAC5B,CAAC;KACH,CAAC;CACH,CAAC;AAIF;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,8BAA8B,GACxC,GAAG,EAAE,CAGP;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,8BAA8B,EACzC,SAAS,EAAE,GAAG,GACb,GAAG,EAAE,CAiBP;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,8BAA8B,EACzC,SAAS,EAAE,GAAG,GACb,GAAG,GAAG,SAAS,CAEjB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,8BAA8B,GACxC,MAAM,CAMR;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,8BAA8B,GACxC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAiB1C"}
|
|
@@ -2,19 +2,6 @@ import { type Hex } from "@metamask/utils";
|
|
|
2
2
|
import type { TransactionControllerMessenger } from "../TransactionController.mjs";
|
|
3
3
|
export declare const FEATURE_FLAG_TRANSACTIONS = "confirmations_transactions";
|
|
4
4
|
export declare const FEATURE_FLAG_EIP_7702 = "confirmations_eip_7702";
|
|
5
|
-
type GasEstimateFallback = {
|
|
6
|
-
/**
|
|
7
|
-
* The fallback gas estimate for a transaction.
|
|
8
|
-
* This value is either a fixed hexadecimal number or a percentage multiplier.
|
|
9
|
-
*/
|
|
10
|
-
value: number | Hex;
|
|
11
|
-
/**
|
|
12
|
-
* Indicates whether the gas estimate is a fixed hexadecimal number or a percentage multiplier.
|
|
13
|
-
* - `true`: The gas estimate is a fixed hexadecimal number.
|
|
14
|
-
* - `false`: The gas estimate is a percentage multiplier.
|
|
15
|
-
*/
|
|
16
|
-
isFixedGas: boolean;
|
|
17
|
-
};
|
|
18
5
|
export type TransactionControllerFeatureFlags = {
|
|
19
6
|
[FEATURE_FLAG_EIP_7702]?: {
|
|
20
7
|
/**
|
|
@@ -34,15 +21,28 @@ export type TransactionControllerFeatureFlags = {
|
|
|
34
21
|
[FEATURE_FLAG_TRANSACTIONS]?: {
|
|
35
22
|
/** Maximum number of transactions that can be in an external batch. */
|
|
36
23
|
batchSizeLimit?: number;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
acceleratedPolling?: {
|
|
25
|
+
/**
|
|
26
|
+
* Accelerated polling is used to speed up the polling process for
|
|
27
|
+
* transactions that are not yet confirmed.
|
|
28
|
+
*/
|
|
29
|
+
perChainConfig?: {
|
|
30
|
+
/** Accelerated polling parameters on a per-chain basis. */
|
|
31
|
+
[chainId: Hex]: {
|
|
32
|
+
/**
|
|
33
|
+
* Maximum number of polling requests that can be made in a row, before
|
|
34
|
+
* the normal polling resumes.
|
|
35
|
+
*/
|
|
36
|
+
countMax?: number;
|
|
37
|
+
/** Interval between polling requests in milliseconds. */
|
|
38
|
+
intervalMs?: number;
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
/** Default `countMax` in case no chain-specific parameter is set. */
|
|
42
|
+
defaultCountMax?: number;
|
|
43
|
+
/** Default `intervalMs` in case no chain-specific parameter is set. */
|
|
44
|
+
defaultIntervalMs?: number;
|
|
40
45
|
};
|
|
41
|
-
/**
|
|
42
|
-
* Default gas estimate fallback.
|
|
43
|
-
* This value is used when no specific gas estimate fallback is found for a chain ID.
|
|
44
|
-
*/
|
|
45
|
-
defaultGasEstimateFallback?: GasEstimateFallback;
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
48
|
/**
|
|
@@ -79,26 +79,14 @@ export declare function getEIP7702UpgradeContractAddress(chainId: Hex, messenger
|
|
|
79
79
|
*/
|
|
80
80
|
export declare function getBatchSizeLimit(messenger: TransactionControllerMessenger): number;
|
|
81
81
|
/**
|
|
82
|
-
* Retrieves the
|
|
83
|
-
* Defaults to the default gas estimate fallback if not set.
|
|
82
|
+
* Retrieves the accelerated polling parameters for a given chain ID.
|
|
84
83
|
*
|
|
85
84
|
* @param chainId - The chain ID.
|
|
86
85
|
* @param messenger - The controller messenger instance.
|
|
87
|
-
* @returns The
|
|
88
|
-
*/
|
|
89
|
-
export declare function getGasEstimateFallback(chainId: Hex, messenger: TransactionControllerMessenger): {
|
|
90
|
-
gasEstimateFallback: number | Hex;
|
|
91
|
-
isFixedGas: boolean;
|
|
92
|
-
};
|
|
93
|
-
/**
|
|
94
|
-
* Retrieves the default gas estimate fallback.
|
|
95
|
-
*
|
|
96
|
-
* @param messenger - The controller messenger instance.
|
|
97
|
-
* @returns The default gas estimate fallback.
|
|
86
|
+
* @returns The accelerated polling parameters: `countMax` and `intervalMs`.
|
|
98
87
|
*/
|
|
99
|
-
export declare function
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
export declare function getAcceleratedPollingParams(chainId: Hex, messenger: TransactionControllerMessenger): {
|
|
89
|
+
countMax: number;
|
|
90
|
+
intervalMs: number;
|
|
102
91
|
};
|
|
103
|
-
export {};
|
|
104
92
|
//# sourceMappingURL=feature-flags.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags.d.mts","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAAE,wBAAwB;AAI/D,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAE/E,eAAO,MAAM,yBAAyB,+BAA+B,CAAC;AACtE,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"feature-flags.d.mts","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,GAAG,EAAE,wBAAwB;AAI/D,OAAO,KAAK,EAAE,8BAA8B,EAAE,qCAAiC;AAE/E,eAAO,MAAM,yBAAyB,+BAA+B,CAAC;AACtE,eAAO,MAAM,qBAAqB,2BAA2B,CAAC;AAM9D,MAAM,MAAM,iCAAiC,GAAG;IAC9C,CAAC,qBAAqB,CAAC,CAAC,EAAE;QACxB;;;;WAIG;QACH,SAAS,CAAC,EAAE,MAAM,CAChB,GAAG,EACH;YACE,qCAAqC;YACrC,OAAO,EAAE,GAAG,CAAC;YAEb,qDAAqD;YACrD,SAAS,EAAE,GAAG,CAAC;SAChB,EAAE,CACJ,CAAC;QAEF,sDAAsD;QACtD,eAAe,CAAC,EAAE,GAAG,EAAE,CAAC;KACzB,CAAC;IAEF,CAAC,yBAAyB,CAAC,CAAC,EAAE;QAC5B,uEAAuE;QACvE,cAAc,CAAC,EAAE,MAAM,CAAC;QAExB,kBAAkB,CAAC,EAAE;YACnB;;;eAGG;YACH,cAAc,CAAC,EAAE;gBACf,2DAA2D;gBAE3D,CAAC,OAAO,EAAE,GAAG,GAAG;oBACd;;;uBAGG;oBACH,QAAQ,CAAC,EAAE,MAAM,CAAC;oBAElB,yDAAyD;oBACzD,UAAU,CAAC,EAAE,MAAM,CAAC;iBACrB,CAAC;aACH,CAAC;YAEF,qEAAqE;YACrE,eAAe,CAAC,EAAE,MAAM,CAAC;YAEzB,uEAAuE;YACvE,iBAAiB,CAAC,EAAE,MAAM,CAAC;SAC5B,CAAC;KACH,CAAC;CACH,CAAC;AAIF;;;;;GAKG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,8BAA8B,GACxC,GAAG,EAAE,CAGP;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,8BAA8B,EACzC,SAAS,EAAE,GAAG,GACb,GAAG,EAAE,CAiBP;AAED;;;;;;;GAOG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,8BAA8B,EACzC,SAAS,EAAE,GAAG,GACb,GAAG,GAAG,SAAS,CAEjB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,8BAA8B,GACxC,MAAM,CAMR;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,GAAG,EACZ,SAAS,EAAE,8BAA8B,GACxC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAiB1C"}
|
|
@@ -4,7 +4,8 @@ import { projectLogger } from "../logger.mjs";
|
|
|
4
4
|
export const FEATURE_FLAG_TRANSACTIONS = 'confirmations_transactions';
|
|
5
5
|
export const FEATURE_FLAG_EIP_7702 = 'confirmations_eip_7702';
|
|
6
6
|
const DEFAULT_BATCH_SIZE_LIMIT = 10;
|
|
7
|
-
const
|
|
7
|
+
const DEFAULT_ACCELERATED_POLLING_COUNT_MAX = 10;
|
|
8
|
+
const DEFAULT_ACCELERATED_POLLING_INTERVAL_MS = 3 * 1000;
|
|
8
9
|
const log = createModuleLogger(projectLogger, 'feature-flags');
|
|
9
10
|
/**
|
|
10
11
|
* Retrieves the supported EIP-7702 chains.
|
|
@@ -55,38 +56,22 @@ export function getBatchSizeLimit(messenger) {
|
|
|
55
56
|
DEFAULT_BATCH_SIZE_LIMIT);
|
|
56
57
|
}
|
|
57
58
|
/**
|
|
58
|
-
* Retrieves the
|
|
59
|
-
* Defaults to the default gas estimate fallback if not set.
|
|
59
|
+
* Retrieves the accelerated polling parameters for a given chain ID.
|
|
60
60
|
*
|
|
61
61
|
* @param chainId - The chain ID.
|
|
62
62
|
* @param messenger - The controller messenger instance.
|
|
63
|
-
* @returns The
|
|
63
|
+
* @returns The accelerated polling parameters: `countMax` and `intervalMs`.
|
|
64
64
|
*/
|
|
65
|
-
export function
|
|
65
|
+
export function getAcceleratedPollingParams(chainId, messenger) {
|
|
66
66
|
const featureFlags = getFeatureFlags(messenger);
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Retrieves the default gas estimate fallback.
|
|
78
|
-
*
|
|
79
|
-
* @param messenger - The controller messenger instance.
|
|
80
|
-
* @returns The default gas estimate fallback.
|
|
81
|
-
*/
|
|
82
|
-
export function getDefaultGasEstimateFallback(messenger) {
|
|
83
|
-
const featureFlags = getFeatureFlags(messenger);
|
|
84
|
-
const defaultGasEstimateFallback = featureFlags?.[FEATURE_FLAG_TRANSACTIONS]?.defaultGasEstimateFallback;
|
|
85
|
-
return {
|
|
86
|
-
gasEstimateFallback: defaultGasEstimateFallback?.value ??
|
|
87
|
-
DEFAULT_GAS_ESTIMATE_FALLBACK_BLOCK_PERCENT,
|
|
88
|
-
isFixedGas: defaultGasEstimateFallback?.isFixedGas ?? false,
|
|
89
|
-
};
|
|
67
|
+
const acceleratedPollingParams = featureFlags?.[FEATURE_FLAG_TRANSACTIONS]?.acceleratedPolling;
|
|
68
|
+
const countMax = acceleratedPollingParams?.perChainConfig?.[chainId]?.countMax ||
|
|
69
|
+
acceleratedPollingParams?.defaultCountMax ||
|
|
70
|
+
DEFAULT_ACCELERATED_POLLING_COUNT_MAX;
|
|
71
|
+
const intervalMs = acceleratedPollingParams?.perChainConfig?.[chainId]?.intervalMs ||
|
|
72
|
+
acceleratedPollingParams?.defaultIntervalMs ||
|
|
73
|
+
DEFAULT_ACCELERATED_POLLING_INTERVAL_MS;
|
|
74
|
+
return { countMax, intervalMs };
|
|
90
75
|
}
|
|
91
76
|
/**
|
|
92
77
|
* Retrieves the relevant feature flags from the remote feature flag controller.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags.mjs","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAY,wBAAwB;AAE/D,OAAO,EAAE,gBAAgB,EAAE,wBAAoB;AAC/C,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAG1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,4BAA4B,CAAC;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAE9D,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,
|
|
1
|
+
{"version":3,"file":"feature-flags.mjs","sourceRoot":"","sources":["../../src/utils/feature-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAY,wBAAwB;AAE/D,OAAO,EAAE,gBAAgB,EAAE,wBAAoB;AAC/C,OAAO,EAAE,aAAa,EAAE,sBAAkB;AAG1C,MAAM,CAAC,MAAM,yBAAyB,GAAG,4BAA4B,CAAC;AACtE,MAAM,CAAC,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAE9D,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,MAAM,qCAAqC,GAAG,EAAE,CAAC;AACjD,MAAM,uCAAuC,GAAG,CAAC,GAAG,IAAI,CAAC;AAyDzD,MAAM,GAAG,GAAG,kBAAkB,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAyC;IAEzC,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAChD,OAAO,YAAY,EAAE,CAAC,qBAAqB,CAAC,EAAE,eAAe,IAAI,EAAE,CAAC;AACtE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAY,EACZ,SAAyC,EACzC,SAAc;IAEd,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAEhD,MAAM,SAAS,GACb,YAAY,EAAE,CAAC,qBAAqB,CAAC,EAAE,SAAS,EAAE,CAChD,OAAO,CAAC,WAAW,EAAS,CAC7B,IAAI,EAAE,CAAC;IAEV,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CACnB,gBAAgB,CACd,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAC3B,QAAQ,CAAC,SAAS,EAClB,SAAS,CACV,CACF;SACA,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gCAAgC,CAC9C,OAAY,EACZ,SAAyC,EACzC,SAAc;IAEd,OAAO,2BAA2B,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAAyC;IAEzC,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAChD,OAAO,CACL,YAAY,EAAE,CAAC,yBAAyB,CAAC,EAAE,cAAc;QACzD,wBAAwB,CACzB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CACzC,OAAY,EACZ,SAAyC;IAEzC,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAEhD,MAAM,wBAAwB,GAC5B,YAAY,EAAE,CAAC,yBAAyB,CAAC,EAAE,kBAAkB,CAAC;IAEhE,MAAM,QAAQ,GACZ,wBAAwB,EAAE,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,QAAQ;QAC7D,wBAAwB,EAAE,eAAe;QACzC,qCAAqC,CAAC;IAExC,MAAM,UAAU,GACd,wBAAwB,EAAE,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,UAAU;QAC/D,wBAAwB,EAAE,iBAAiB;QAC3C,uCAAuC,CAAC;IAE1C,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CACtB,SAAyC;IAEzC,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CACjC,sCAAsC,CACvC,CAAC,kBAAkB,CAAC;IAErB,GAAG,CAAC,yBAAyB,EAAE,YAAY,CAAC,CAAC;IAE7C,OAAO,YAAiD,CAAC;AAC3D,CAAC","sourcesContent":["import { createModuleLogger, type Hex } from '@metamask/utils';\n\nimport { isValidSignature } from './signature';\nimport { projectLogger } from '../logger';\nimport type { TransactionControllerMessenger } from '../TransactionController';\n\nexport const FEATURE_FLAG_TRANSACTIONS = 'confirmations_transactions';\nexport const FEATURE_FLAG_EIP_7702 = 'confirmations_eip_7702';\n\nconst DEFAULT_BATCH_SIZE_LIMIT = 10;\nconst DEFAULT_ACCELERATED_POLLING_COUNT_MAX = 10;\nconst DEFAULT_ACCELERATED_POLLING_INTERVAL_MS = 3 * 1000;\n\nexport type TransactionControllerFeatureFlags = {\n [FEATURE_FLAG_EIP_7702]?: {\n /**\n * All contracts that support EIP-7702 batch transactions.\n * Keyed by chain ID.\n * First entry in each array is the contract that standard EOAs will be upgraded to.\n */\n contracts?: Record<\n Hex,\n {\n /** Address of the smart contract. */\n address: Hex;\n\n /** Signature to verify the contract is authentic. */\n signature: Hex;\n }[]\n >;\n\n /** Chains enabled for EIP-7702 batch transactions. */\n supportedChains?: Hex[];\n };\n\n [FEATURE_FLAG_TRANSACTIONS]?: {\n /** Maximum number of transactions that can be in an external batch. */\n batchSizeLimit?: number;\n\n acceleratedPolling?: {\n /**\n * Accelerated polling is used to speed up the polling process for\n * transactions that are not yet confirmed.\n */\n perChainConfig?: {\n /** Accelerated polling parameters on a per-chain basis. */\n\n [chainId: Hex]: {\n /**\n * Maximum number of polling requests that can be made in a row, before\n * the normal polling resumes.\n */\n countMax?: number;\n\n /** Interval between polling requests in milliseconds. */\n intervalMs?: number;\n };\n };\n\n /** Default `countMax` in case no chain-specific parameter is set. */\n defaultCountMax?: number;\n\n /** Default `intervalMs` in case no chain-specific parameter is set. */\n defaultIntervalMs?: number;\n };\n };\n};\n\nconst log = createModuleLogger(projectLogger, 'feature-flags');\n\n/**\n * Retrieves the supported EIP-7702 chains.\n *\n * @param messenger - The controller messenger instance.\n * @returns The supported chains.\n */\nexport function getEIP7702SupportedChains(\n messenger: TransactionControllerMessenger,\n): Hex[] {\n const featureFlags = getFeatureFlags(messenger);\n return featureFlags?.[FEATURE_FLAG_EIP_7702]?.supportedChains ?? [];\n}\n\n/**\n * Retrieves the supported EIP-7702 contract addresses for a given chain ID.\n *\n * @param chainId - The chain ID.\n * @param messenger - The controller messenger instance.\n * @param publicKey - The public key used to validate the contract authenticity.\n * @returns The supported contract addresses.\n */\nexport function getEIP7702ContractAddresses(\n chainId: Hex,\n messenger: TransactionControllerMessenger,\n publicKey: Hex,\n): Hex[] {\n const featureFlags = getFeatureFlags(messenger);\n\n const contracts =\n featureFlags?.[FEATURE_FLAG_EIP_7702]?.contracts?.[\n chainId.toLowerCase() as Hex\n ] ?? [];\n\n return contracts\n .filter((contract) =>\n isValidSignature(\n [contract.address, chainId],\n contract.signature,\n publicKey,\n ),\n )\n .map((contract) => contract.address);\n}\n\n/**\n * Retrieves the EIP-7702 upgrade contract address.\n *\n * @param chainId - The chain ID.\n * @param messenger - The controller messenger instance.\n * @param publicKey - The public key used to validate the contract authenticity.\n * @returns The upgrade contract address.\n */\nexport function getEIP7702UpgradeContractAddress(\n chainId: Hex,\n messenger: TransactionControllerMessenger,\n publicKey: Hex,\n): Hex | undefined {\n return getEIP7702ContractAddresses(chainId, messenger, publicKey)?.[0];\n}\n\n/**\n * Retrieves the batch size limit.\n * Defaults to 10 if not set.\n *\n * @param messenger - The controller messenger instance.\n * @returns The batch size limit.\n */\nexport function getBatchSizeLimit(\n messenger: TransactionControllerMessenger,\n): number {\n const featureFlags = getFeatureFlags(messenger);\n return (\n featureFlags?.[FEATURE_FLAG_TRANSACTIONS]?.batchSizeLimit ??\n DEFAULT_BATCH_SIZE_LIMIT\n );\n}\n\n/**\n * Retrieves the accelerated polling parameters for a given chain ID.\n *\n * @param chainId - The chain ID.\n * @param messenger - The controller messenger instance.\n * @returns The accelerated polling parameters: `countMax` and `intervalMs`.\n */\nexport function getAcceleratedPollingParams(\n chainId: Hex,\n messenger: TransactionControllerMessenger,\n): { countMax: number; intervalMs: number } {\n const featureFlags = getFeatureFlags(messenger);\n\n const acceleratedPollingParams =\n featureFlags?.[FEATURE_FLAG_TRANSACTIONS]?.acceleratedPolling;\n\n const countMax =\n acceleratedPollingParams?.perChainConfig?.[chainId]?.countMax ||\n acceleratedPollingParams?.defaultCountMax ||\n DEFAULT_ACCELERATED_POLLING_COUNT_MAX;\n\n const intervalMs =\n acceleratedPollingParams?.perChainConfig?.[chainId]?.intervalMs ||\n acceleratedPollingParams?.defaultIntervalMs ||\n DEFAULT_ACCELERATED_POLLING_INTERVAL_MS;\n\n return { countMax, intervalMs };\n}\n\n/**\n * Retrieves the relevant feature flags from the remote feature flag controller.\n *\n * @param messenger - The messenger instance.\n * @returns The feature flags.\n */\nfunction getFeatureFlags(\n messenger: TransactionControllerMessenger,\n): TransactionControllerFeatureFlags {\n const featureFlags = messenger.call(\n 'RemoteFeatureFlagController:getState',\n ).remoteFeatureFlags;\n\n log('Retrieved feature flags', featureFlags);\n\n return featureFlags as TransactionControllerFeatureFlags;\n}\n"]}
|
package/dist/utils/gas.cjs
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addGasBuffer = exports.estimateGas = exports.updateGas = exports.DUMMY_AUTHORIZATION_SIGNATURE = exports.INTRINSIC_GAS = exports.MAX_GAS_BLOCK_PERCENT = exports.DEFAULT_GAS_MULTIPLIER = exports.FIXED_GAS = exports.log = void 0;
|
|
3
|
+
exports.addGasBuffer = exports.estimateGas = exports.updateGas = exports.DUMMY_AUTHORIZATION_SIGNATURE = exports.INTRINSIC_GAS = exports.MAX_GAS_BLOCK_PERCENT = exports.GAS_ESTIMATE_FALLBACK_BLOCK_PERCENT = exports.DEFAULT_GAS_MULTIPLIER = exports.FIXED_GAS = exports.log = void 0;
|
|
4
4
|
const controller_utils_1 = require("@metamask/controller-utils");
|
|
5
5
|
const utils_1 = require("@metamask/utils");
|
|
6
6
|
const eip7702_1 = require("./eip7702.cjs");
|
|
7
|
-
const feature_flags_1 = require("./feature-flags.cjs");
|
|
8
7
|
const simulation_api_1 = require("./simulation-api.cjs");
|
|
9
8
|
const constants_1 = require("../constants.cjs");
|
|
10
9
|
const logger_1 = require("../logger.cjs");
|
|
@@ -12,6 +11,7 @@ const types_1 = require("../types.cjs");
|
|
|
12
11
|
exports.log = (0, utils_1.createModuleLogger)(logger_1.projectLogger, 'gas');
|
|
13
12
|
exports.FIXED_GAS = '0x5208';
|
|
14
13
|
exports.DEFAULT_GAS_MULTIPLIER = 1.5;
|
|
14
|
+
exports.GAS_ESTIMATE_FALLBACK_BLOCK_PERCENT = 35;
|
|
15
15
|
exports.MAX_GAS_BLOCK_PERCENT = 90;
|
|
16
16
|
exports.INTRINSIC_GAS = 21000;
|
|
17
17
|
exports.DUMMY_AUTHORIZATION_SIGNATURE = '0x1111111111111111111111111111111111111111111111111111111111111111';
|
|
@@ -44,19 +44,15 @@ exports.updateGas = updateGas;
|
|
|
44
44
|
* @param options.chainId - The chain ID of the transaction.
|
|
45
45
|
* @param options.ethQuery - The EthQuery instance to interact with the network.
|
|
46
46
|
* @param options.isSimulationEnabled - Whether the simulation is enabled.
|
|
47
|
-
* @param options.messenger - The messenger instance for communication.
|
|
48
47
|
* @param options.txParams - The transaction parameters.
|
|
49
48
|
* @returns The estimated gas and related info.
|
|
50
49
|
*/
|
|
51
|
-
async function estimateGas({ chainId, ethQuery, isSimulationEnabled,
|
|
50
|
+
async function estimateGas({ chainId, ethQuery, isSimulationEnabled, txParams, }) {
|
|
52
51
|
const request = { ...txParams };
|
|
53
52
|
const { authorizationList, data, from, value, to } = request;
|
|
54
53
|
const { gasLimit: blockGasLimit, number: blockNumber } = await getLatestBlock(ethQuery);
|
|
55
54
|
const blockGasLimitBN = (0, controller_utils_1.hexToBN)(blockGasLimit);
|
|
56
|
-
const
|
|
57
|
-
const fallback = isFixedGas
|
|
58
|
-
? gasEstimateFallback
|
|
59
|
-
: (0, controller_utils_1.BNToHex)((0, controller_utils_1.fractionBN)(blockGasLimitBN, gasEstimateFallback, 100));
|
|
55
|
+
const fallback = (0, controller_utils_1.BNToHex)((0, controller_utils_1.fractionBN)(blockGasLimitBN, exports.GAS_ESTIMATE_FALLBACK_BLOCK_PERCENT, 100));
|
|
60
56
|
request.data = data ? (0, utils_1.add0x)(data) : data;
|
|
61
57
|
request.value = value || '0x0';
|
|
62
58
|
request.authorizationList = normalizeAuthorizationList(request.authorizationList, chainId);
|
|
@@ -146,7 +142,6 @@ async function getGas(request) {
|
|
|
146
142
|
chainId: request.chainId,
|
|
147
143
|
ethQuery: request.ethQuery,
|
|
148
144
|
isSimulationEnabled,
|
|
149
|
-
messenger: request.messenger,
|
|
150
145
|
txParams: txMeta.txParams,
|
|
151
146
|
});
|
|
152
147
|
if (isCustomNetwork || simulationFails) {
|