@metamask-previews/transaction-controller 44.1.0-preview-2a6578b3 → 44.1.0-preview-99939da3
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 +64 -41
- package/dist/TransactionController.cjs.map +1 -1
- package/dist/TransactionController.d.cts +15 -3
- package/dist/TransactionController.d.cts.map +1 -1
- package/dist/TransactionController.d.mts +15 -3
- package/dist/TransactionController.d.mts.map +1 -1
- package/dist/TransactionController.mjs +63 -40
- package/dist/TransactionController.mjs.map +1 -1
- package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs +13 -4
- package/dist/gas-flows/OracleLayer1GasFeeFlow.cjs.map +1 -1
- package/dist/gas-flows/OracleLayer1GasFeeFlow.d.cts.map +1 -1
- package/dist/gas-flows/OracleLayer1GasFeeFlow.d.mts.map +1 -1
- package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs +13 -4
- package/dist/gas-flows/OracleLayer1GasFeeFlow.mjs.map +1 -1
- package/dist/index.cjs +2 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +1 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -2
- package/dist/index.mjs.map +1 -1
- package/dist/types.cjs +37 -6
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +1 -47
- package/dist/types.d.cts.map +1 -1
- package/dist/types.d.mts +1 -47
- package/dist/types.d.mts.map +1 -1
- package/dist/types.mjs +37 -6
- package/dist/types.mjs.map +1 -1
- package/dist/utils/utils.cjs +8 -3
- package/dist/utils/utils.cjs.map +1 -1
- package/dist/utils/utils.d.cts.map +1 -1
- package/dist/utils/utils.d.mts.map +1 -1
- package/dist/utils/utils.mjs +8 -3
- package/dist/utils/utils.mjs.map +1 -1
- package/dist/utils/validation.cjs +31 -91
- package/dist/utils/validation.cjs.map +1 -1
- package/dist/utils/validation.d.cts +5 -13
- package/dist/utils/validation.d.cts.map +1 -1
- package/dist/utils/validation.d.mts +5 -13
- package/dist/utils/validation.d.mts.map +1 -1
- package/dist/utils/validation.mjs +32 -92
- package/dist/utils/validation.mjs.map +1 -1
- package/package.json +6 -6
- package/dist/utils/eip7702.cjs +0 -87
- package/dist/utils/eip7702.cjs.map +0 -1
- package/dist/utils/eip7702.d.cts +0 -26
- package/dist/utils/eip7702.d.cts.map +0 -1
- package/dist/utils/eip7702.d.mts +0 -26
- package/dist/utils/eip7702.d.mts.map +0 -1
- package/dist/utils/eip7702.mjs +0 -83
- package/dist/utils/eip7702.mjs.map +0 -1
- package/dist/utils/prepare.cjs +0 -49
- package/dist/utils/prepare.cjs.map +0 -1
- package/dist/utils/prepare.d.cts +0 -21
- package/dist/utils/prepare.d.cts.map +0 -1
- package/dist/utils/prepare.d.mts +0 -21
- package/dist/utils/prepare.d.mts.map +0 -1
- package/dist/utils/prepare.mjs +0 -44
- package/dist/utils/prepare.mjs.map +0 -1
|
@@ -13,9 +13,12 @@ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (
|
|
|
13
13
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
14
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
15
|
};
|
|
16
|
-
var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionChainIds, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_updateSubmitHistory;
|
|
16
|
+
var _TransactionController_instances, _TransactionController_internalEvents, _TransactionController_methodDataHelper, _TransactionController_incomingTransactionChainIds, _TransactionController_incomingTransactionHelper, _TransactionController_incomingTransactionOptions, _TransactionController_pendingTransactionOptions, _TransactionController_trace, _TransactionController_transactionHistoryLimit, _TransactionController_isFirstTimeInteractionEnabled, _TransactionController_isSimulationEnabled, _TransactionController_testGasFeeFlows, _TransactionController_multichainTrackingHelper, _TransactionController_retryTransaction, _TransactionController_getChainId, _TransactionController_getNetworkClientId, _TransactionController_getEthQuery, _TransactionController_getProvider, _TransactionController_createNonceTracker, _TransactionController_createPendingTransactionTracker, _TransactionController_checkForPendingTransactionAndStartPolling, _TransactionController_stopAllTracking, _TransactionController_removeIncomingTransactionHelperListeners, _TransactionController_addIncomingTransactionHelperListeners, _TransactionController_removePendingTransactionTrackerListeners, _TransactionController_addPendingTransactionTrackerListeners, _TransactionController_getNonceTrackerPendingTransactions, _TransactionController_getGasFeeFlows, _TransactionController_getLayer1GasFeeFlows, _TransactionController_updateTransactionInternal, _TransactionController_updateFirstTimeInteraction, _TransactionController_updateSimulationData, _TransactionController_onGasFeePollerTransactionUpdate, _TransactionController_getSelectedAccount, _TransactionController_updateSubmitHistory;
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.TransactionController = exports.ApprovalState = exports.SPEED_UP_RATE = exports.CANCEL_RATE = void 0;
|
|
18
|
+
exports.TransactionController = exports.ApprovalState = exports.SPEED_UP_RATE = exports.CANCEL_RATE = exports.HARDFORK = void 0;
|
|
19
|
+
const common_1 = require("@ethereumjs/common");
|
|
20
|
+
const tx_1 = require("@ethereumjs/tx");
|
|
21
|
+
const util_1 = require("@ethereumjs/util");
|
|
19
22
|
const base_controller_1 = require("@metamask/base-controller");
|
|
20
23
|
const controller_utils_1 = require("@metamask/controller-utils");
|
|
21
24
|
const eth_query_1 = __importDefault(require("@metamask/eth-query"));
|
|
@@ -43,7 +46,6 @@ const MultichainTrackingHelper_1 = require("./helpers/MultichainTrackingHelper.c
|
|
|
43
46
|
const PendingTransactionTracker_1 = require("./helpers/PendingTransactionTracker.cjs");
|
|
44
47
|
const logger_1 = require("./logger.cjs");
|
|
45
48
|
const types_1 = require("./types.cjs");
|
|
46
|
-
const eip7702_1 = require("./utils/eip7702.cjs");
|
|
47
49
|
const external_transactions_1 = require("./utils/external-transactions.cjs");
|
|
48
50
|
const gas_1 = require("./utils/gas.cjs");
|
|
49
51
|
const gas_fees_1 = require("./utils/gas-fees.cjs");
|
|
@@ -51,7 +53,6 @@ const gas_flow_1 = require("./utils/gas-flow.cjs");
|
|
|
51
53
|
const history_1 = require("./utils/history.cjs");
|
|
52
54
|
const layer1_gas_fee_flow_1 = require("./utils/layer1-gas-fee-flow.cjs");
|
|
53
55
|
const nonce_1 = require("./utils/nonce.cjs");
|
|
54
|
-
const prepare_1 = require("./utils/prepare.cjs");
|
|
55
56
|
const resimulate_1 = require("./utils/resimulate.cjs");
|
|
56
57
|
const retry_1 = require("./utils/retry.cjs");
|
|
57
58
|
const simulation_1 = require("./utils/simulation.cjs");
|
|
@@ -81,6 +82,7 @@ const metadata = {
|
|
|
81
82
|
anonymous: false,
|
|
82
83
|
},
|
|
83
84
|
};
|
|
85
|
+
exports.HARDFORK = common_1.Hardfork.London;
|
|
84
86
|
const SUBMIT_HISTORY_LIMIT = 100;
|
|
85
87
|
/**
|
|
86
88
|
* Multiplier used to determine a transaction's increased gas fee during cancellation
|
|
@@ -350,19 +352,11 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
350
352
|
if (!__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").has(networkClientId)) {
|
|
351
353
|
throw new Error(`Network client not found - ${networkClientId}`);
|
|
352
354
|
}
|
|
353
|
-
const permittedAddresses = origin === undefined
|
|
354
|
-
? undefined
|
|
355
|
-
: await this.getPermittedAccounts?.(origin);
|
|
356
|
-
const selectedAddress = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this).address;
|
|
357
|
-
await (0, validation_1.validateTransactionOrigin)({
|
|
358
|
-
from: txParams.from,
|
|
359
|
-
origin,
|
|
360
|
-
permittedAddresses,
|
|
361
|
-
selectedAddress,
|
|
362
|
-
txParams,
|
|
363
|
-
});
|
|
364
355
|
const isEIP1559Compatible = await this.getEIP1559Compatibility(networkClientId);
|
|
365
356
|
(0, validation_1.validateTxParams)(txParams, isEIP1559Compatible);
|
|
357
|
+
if (origin && this.getPermittedAccounts) {
|
|
358
|
+
await (0, validation_1.validateTransactionOrigin)(await this.getPermittedAccounts(origin), __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getSelectedAccount).call(this).address, txParams.from, origin);
|
|
359
|
+
}
|
|
366
360
|
const dappSuggestedGasFees = this.generateDappSuggestedGasFees(txParams, origin);
|
|
367
361
|
const chainId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getChainId).call(this, networkClientId);
|
|
368
362
|
const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, {
|
|
@@ -812,9 +806,12 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
812
806
|
}
|
|
813
807
|
const initialTx = listOfTxParams[0];
|
|
814
808
|
const { chainId } = initialTx;
|
|
809
|
+
const common = this.getCommonConfiguration(chainId);
|
|
815
810
|
const networkClientId = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getNetworkClientId).call(this, { chainId });
|
|
816
|
-
const initialTxAsEthTx =
|
|
817
|
-
|
|
811
|
+
const initialTxAsEthTx = tx_1.TransactionFactory.fromTxData(initialTx, {
|
|
812
|
+
common,
|
|
813
|
+
});
|
|
814
|
+
const initialTxAsSerializedHex = (0, util_1.bufferToHex)(initialTxAsEthTx.serialize());
|
|
818
815
|
if (this.approvingTransactionIds.has(initialTxAsSerializedHex)) {
|
|
819
816
|
return '';
|
|
820
817
|
}
|
|
@@ -1028,9 +1025,10 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1028
1025
|
chainId,
|
|
1029
1026
|
};
|
|
1030
1027
|
const { from } = updatedTransactionParams;
|
|
1031
|
-
const
|
|
1028
|
+
const common = this.getCommonConfiguration(chainId);
|
|
1029
|
+
const unsignedTransaction = tx_1.TransactionFactory.fromTxData(updatedTransactionParams, { common });
|
|
1032
1030
|
const signedTransaction = await this.sign(unsignedTransaction, from);
|
|
1033
|
-
const rawTransaction = (0,
|
|
1031
|
+
const rawTransaction = (0, util_1.bufferToHex)(signedTransaction.serialize());
|
|
1034
1032
|
return rawTransaction;
|
|
1035
1033
|
}
|
|
1036
1034
|
/**
|
|
@@ -1045,7 +1043,6 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1045
1043
|
/**
|
|
1046
1044
|
* Stop the signing process for a specific transaction.
|
|
1047
1045
|
* Throws an error causing the transaction status to be set to failed.
|
|
1048
|
-
*
|
|
1049
1046
|
* @param transactionId - The ID of the transaction to stop signing.
|
|
1050
1047
|
*/
|
|
1051
1048
|
abortTransactionSigning(transactionId) {
|
|
@@ -1212,15 +1209,17 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1212
1209
|
transactionId,
|
|
1213
1210
|
note: 'TransactionController#approveTransaction - Transaction approved',
|
|
1214
1211
|
}, (draftTxMeta) => {
|
|
1215
|
-
const {
|
|
1216
|
-
const { gas, type } = txParams;
|
|
1212
|
+
const { txParams, chainId } = draftTxMeta;
|
|
1217
1213
|
draftTxMeta.status = types_1.TransactionStatus.approved;
|
|
1218
|
-
draftTxMeta.txParams
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1214
|
+
draftTxMeta.txParams = {
|
|
1215
|
+
...txParams,
|
|
1216
|
+
nonce,
|
|
1217
|
+
chainId,
|
|
1218
|
+
gasLimit: txParams.gas,
|
|
1219
|
+
...((0, utils_2.isEIP1559Transaction)(txParams) && {
|
|
1220
|
+
type: types_1.TransactionEnvelopeType.feeMarket,
|
|
1221
|
+
}),
|
|
1222
|
+
};
|
|
1224
1223
|
});
|
|
1225
1224
|
this.onTransactionStatusChange(transactionMeta);
|
|
1226
1225
|
const rawTx = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Sign', parentContext: traceContext }, () => this.signTransaction(transactionMeta, transactionMeta.txParams));
|
|
@@ -1314,7 +1313,10 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1314
1313
|
status: types_1.TransactionStatus.rejected,
|
|
1315
1314
|
};
|
|
1316
1315
|
this.messagingSystem.publish(`${controllerName}:transactionFinished`, updatedTransactionMeta);
|
|
1317
|
-
__classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(
|
|
1316
|
+
__classPrivateFieldGet(this, _TransactionController_internalEvents, "f").emit(
|
|
1317
|
+
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
1318
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
1319
|
+
`${transactionMeta.id}:finished`, updatedTransactionMeta);
|
|
1318
1320
|
this.messagingSystem.publish(`${controllerName}:transactionRejected`, {
|
|
1319
1321
|
transactionMeta: updatedTransactionMeta,
|
|
1320
1322
|
actionId,
|
|
@@ -1342,6 +1344,8 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1342
1344
|
.filter((tx) => {
|
|
1343
1345
|
const { chainId, status, txParams, time } = tx;
|
|
1344
1346
|
if (txParams) {
|
|
1347
|
+
// TODO: Either fix this lint violation or explain why it's necessary to ignore.
|
|
1348
|
+
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
|
|
1345
1349
|
const key = `${String(txParams.nonce)}-${(0, controller_utils_1.convertHexToDecimal)(chainId)}-${new Date(time).toDateString()}`;
|
|
1346
1350
|
if (nonceNetworkSet.has(key)) {
|
|
1347
1351
|
return true;
|
|
@@ -1422,6 +1426,29 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1422
1426
|
const isCompleted = this.isLocalFinalState(transaction.status);
|
|
1423
1427
|
return { meta: transaction, isCompleted };
|
|
1424
1428
|
}
|
|
1429
|
+
prepareUnsignedEthTx(chainId, txParams) {
|
|
1430
|
+
return tx_1.TransactionFactory.fromTxData(txParams, {
|
|
1431
|
+
freeze: false,
|
|
1432
|
+
common: this.getCommonConfiguration(chainId),
|
|
1433
|
+
});
|
|
1434
|
+
}
|
|
1435
|
+
/**
|
|
1436
|
+
* `@ethereumjs/tx` uses `@ethereumjs/common` as a configuration tool for
|
|
1437
|
+
* specifying which chain, network, hardfork and EIPs to support for
|
|
1438
|
+
* a transaction. By referencing this configuration, and analyzing the fields
|
|
1439
|
+
* specified in txParams, @ethereumjs/tx is able to determine which EIP-2718
|
|
1440
|
+
* transaction type to use.
|
|
1441
|
+
*
|
|
1442
|
+
* @param chainId - The chainId to use for the configuration.
|
|
1443
|
+
* @returns common configuration object
|
|
1444
|
+
*/
|
|
1445
|
+
getCommonConfiguration(chainId) {
|
|
1446
|
+
const customChainParams = {
|
|
1447
|
+
chainId: parseInt(chainId, 16),
|
|
1448
|
+
defaultHardfork: exports.HARDFORK,
|
|
1449
|
+
};
|
|
1450
|
+
return common_1.Common.custom(customChainParams);
|
|
1451
|
+
}
|
|
1425
1452
|
onIncomingTransactions(transactions) {
|
|
1426
1453
|
if (!transactions.length) {
|
|
1427
1454
|
return;
|
|
@@ -1592,17 +1619,10 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1592
1619
|
}
|
|
1593
1620
|
async signTransaction(transactionMeta, txParams) {
|
|
1594
1621
|
(0, logger_1.projectLogger)('Signing transaction', txParams);
|
|
1595
|
-
const
|
|
1596
|
-
const finalTxParams = { ...txParams };
|
|
1597
|
-
finalTxParams.authorizationList = await (0, eip7702_1.signAuthorizationList)({
|
|
1598
|
-
authorizationList,
|
|
1599
|
-
messenger: this.messagingSystem,
|
|
1600
|
-
transactionMeta,
|
|
1601
|
-
});
|
|
1602
|
-
const unsignedEthTx = (0, prepare_1.prepareTransaction)(transactionMeta.chainId, finalTxParams);
|
|
1622
|
+
const unsignedEthTx = this.prepareUnsignedEthTx(transactionMeta.chainId, txParams);
|
|
1603
1623
|
this.approvingTransactionIds.add(transactionMeta.id);
|
|
1604
1624
|
const signedTx = await new Promise((resolve, reject) => {
|
|
1605
|
-
this.sign?.(unsignedEthTx, from, ...this.getAdditionalSignArguments(transactionMeta)).then(resolve, reject);
|
|
1625
|
+
this.sign?.(unsignedEthTx, txParams.from, ...this.getAdditionalSignArguments(transactionMeta)).then(resolve, reject);
|
|
1606
1626
|
this.signAbortCallbacks.set(transactionMeta.id, () => reject(new Error('Signing aborted by user')));
|
|
1607
1627
|
});
|
|
1608
1628
|
this.signAbortCallbacks.delete(transactionMeta.id);
|
|
@@ -1622,7 +1642,7 @@ class TransactionController extends base_controller_1.BaseController {
|
|
|
1622
1642
|
};
|
|
1623
1643
|
this.updateTransaction(transactionMetaWithRsv, 'TransactionController#approveTransaction - Transaction signed');
|
|
1624
1644
|
this.onTransactionStatusChange(transactionMetaWithRsv);
|
|
1625
|
-
const rawTx = (0,
|
|
1645
|
+
const rawTx = (0, util_1.bufferToHex)(signedTx.serialize());
|
|
1626
1646
|
const transactionMetaWithRawTx = (0, lodash_1.merge)({}, transactionMetaWithRsv, {
|
|
1627
1647
|
rawTx,
|
|
1628
1648
|
});
|
|
@@ -1718,10 +1738,10 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
1718
1738
|
}
|
|
1719
1739
|
const newTxParams = (0, retry_1.getTransactionParamsWithIncreasedGasFee)(transactionMeta.txParams, rate, gasValues);
|
|
1720
1740
|
prepareTransactionParams?.(newTxParams);
|
|
1721
|
-
const unsignedEthTx =
|
|
1741
|
+
const unsignedEthTx = this.prepareUnsignedEthTx(transactionMeta.chainId, newTxParams);
|
|
1722
1742
|
const signedTx = await this.sign(unsignedEthTx, transactionMeta.txParams.from);
|
|
1723
1743
|
const transactionMetaWithRsv = this.updateTransactionMetaRSV(transactionMeta, signedTx);
|
|
1724
|
-
const rawTx = (0,
|
|
1744
|
+
const rawTx = (0, util_1.bufferToHex)(signedTx.serialize());
|
|
1725
1745
|
const newFee = newTxParams.maxFeePerGas ?? newTxParams.gasPrice;
|
|
1726
1746
|
const oldFee = newTxParams.maxFeePerGas
|
|
1727
1747
|
? transactionMetaWithRsv.txParams.maxFeePerGas
|
|
@@ -1812,6 +1832,9 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
|
|
|
1812
1832
|
return pendingTransactionTracker;
|
|
1813
1833
|
}, _TransactionController_stopAllTracking = function _TransactionController_stopAllTracking() {
|
|
1814
1834
|
__classPrivateFieldGet(this, _TransactionController_multichainTrackingHelper, "f").stopAllTracking();
|
|
1835
|
+
}, _TransactionController_removeIncomingTransactionHelperListeners = function _TransactionController_removeIncomingTransactionHelperListeners(incomingTransactionHelper) {
|
|
1836
|
+
incomingTransactionHelper.hub.removeAllListeners('transactions');
|
|
1837
|
+
incomingTransactionHelper.hub.removeAllListeners('updated-last-fetched-timestamp');
|
|
1815
1838
|
}, _TransactionController_addIncomingTransactionHelperListeners = function _TransactionController_addIncomingTransactionHelperListeners(incomingTransactionHelper) {
|
|
1816
1839
|
incomingTransactionHelper.hub.on('transactions', this.onIncomingTransactions.bind(this));
|
|
1817
1840
|
}, _TransactionController_removePendingTransactionTrackerListeners = function _TransactionController_removePendingTransactionTrackerListeners(pendingTransactionTracker) {
|