Skip to content

Commit 1a2aa6f

Browse files
committed
Fix type 4 simulation
1 parent 6ef67f0 commit 1a2aa6f

File tree

2 files changed

+186
-6
lines changed

2 files changed

+186
-6
lines changed

.yarn/patches/@metamask-transaction-controller-npm-50.0.0-6e65889240.patch

+184-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
diff --git a/dist/TransactionController.cjs b/dist/TransactionController.cjs
2-
index 5f244a7192ebc9b39ba230d92ee3bf36b47a36cd..247aac66bc90f29d2168e2dfcebfe3523b77a64c 100644
2+
index 5f244a7192ebc9b39ba230d92ee3bf36b47a36cd..bad32607ec183eaeeed2fb24ffca1810ed1975e7 100644
33
--- a/dist/TransactionController.cjs
44
+++ b/dist/TransactionController.cjs
55
@@ -559,7 +559,12 @@ class TransactionController extends base_controller_1.BaseController {
@@ -30,7 +30,25 @@ index 5f244a7192ebc9b39ba230d92ee3bf36b47a36cd..247aac66bc90f29d2168e2dfcebfe352
3030
const gas = (0, gas_1.addGasBuffer)(estimatedGas, blockGasLimit, multiplier);
3131
return {
3232
gas,
33-
@@ -2097,6 +2107,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
33+
@@ -2012,6 +2022,9 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
34+
tokenBalanceChanges: [],
35+
};
36+
if (__classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this)) {
37+
+ const authorizationAddress = txParams?.authorizationList?.[0]?.address;
38+
+ const senderCode = authorizationAddress &&
39+
+ (eip7702_1.DELEGATION_PREFIX + (0, utils_1.remove0x)(authorizationAddress));
40+
simulationData = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Simulate', parentContext: traceContext }, () => (0, simulation_1.getSimulationData)({
41+
chainId,
42+
from: from,
43+
@@ -2020,6 +2033,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
44+
data: data,
45+
}, {
46+
blockTime,
47+
+ senderCode,
48+
}));
49+
if (blockTime &&
50+
prevSimulationData &&
51+
@@ -2097,6 +2111,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
3452
chainId,
3553
ethQuery,
3654
isCustomNetwork,
@@ -39,9 +57,27 @@ index 5f244a7192ebc9b39ba230d92ee3bf36b47a36cd..247aac66bc90f29d2168e2dfcebfe352
3957
});
4058
}, _TransactionController_deleteTransaction = function _TransactionController_deleteTransaction(transactionId) {
4159
diff --git a/dist/TransactionController.mjs b/dist/TransactionController.mjs
42-
index 3ecb211958f31624677c0db41c0e87b2cdb4cf76..92d1d34182a3b319253ee11cef27e385c04c1945 100644
60+
index 3ecb211958f31624677c0db41c0e87b2cdb4cf76..060d60eddb796c74e79cac8014b92b8971871119 100644
4361
--- a/dist/TransactionController.mjs
4462
+++ b/dist/TransactionController.mjs
63+
@@ -23,7 +23,7 @@ const EthQuery = $importDefault($EthQuery);
64+
import { NetworkClientType } from "@metamask/network-controller";
65+
import { NonceTracker } from "@metamask/nonce-tracker";
66+
import { errorCodes, rpcErrors, providerErrors } from "@metamask/rpc-errors";
67+
-import { add0x, hexToNumber } from "@metamask/utils";
68+
+import { add0x, hexToNumber, remove0x } from "@metamask/utils";
69+
import { Mutex } from "async-mutex";
70+
// This package purposefully relies on Node's EventEmitter module.
71+
// eslint-disable-next-line import-x/no-nodejs-modules
72+
@@ -47,7 +47,7 @@ import { ResimulateHelper, hasSimulationDataChanged, shouldResimulate } from "./
73+
import { projectLogger as log } from "./logger.mjs";
74+
import { TransactionEnvelopeType, TransactionType, TransactionStatus, SimulationErrorCode } from "./types.mjs";
75+
import { addTransactionBatch, isAtomicBatchSupported } from "./utils/batch.mjs";
76+
-import { generateEIP7702BatchTransaction, getDelegationAddress, signAuthorizationList } from "./utils/eip7702.mjs";
77+
+import { DELEGATION_PREFIX, generateEIP7702BatchTransaction, getDelegationAddress, signAuthorizationList } from "./utils/eip7702.mjs";
78+
import { validateConfirmedExternalTransaction } from "./utils/external-transactions.mjs";
79+
import { addGasBuffer, estimateGas, updateGas } from "./utils/gas.mjs";
80+
import { updateGasFees } from "./utils/gas-fees.mjs";
4581
@@ -561,7 +561,12 @@ export class TransactionController extends BaseController {
4682
const ethQuery = __classPrivateFieldGet(this, _TransactionController_instances, "m", _TransactionController_getEthQuery).call(this, {
4783
networkClientId,
@@ -70,7 +106,25 @@ index 3ecb211958f31624677c0db41c0e87b2cdb4cf76..92d1d34182a3b319253ee11cef27e385
70106
const gas = addGasBuffer(estimatedGas, blockGasLimit, multiplier);
71107
return {
72108
gas,
73-
@@ -2098,6 +2108,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
109+
@@ -2013,6 +2023,9 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
110+
tokenBalanceChanges: [],
111+
};
112+
if (__classPrivateFieldGet(this, _TransactionController_isSimulationEnabled, "f").call(this)) {
113+
+ const authorizationAddress = txParams?.authorizationList?.[0]?.address;
114+
+ const senderCode = authorizationAddress &&
115+
+ (DELEGATION_PREFIX + remove0x(authorizationAddress));
116+
simulationData = await __classPrivateFieldGet(this, _TransactionController_trace, "f").call(this, { name: 'Simulate', parentContext: traceContext }, () => getSimulationData({
117+
chainId,
118+
from: from,
119+
@@ -2021,6 +2034,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
120+
data: data,
121+
}, {
122+
blockTime,
123+
+ senderCode,
124+
}));
125+
if (blockTime &&
126+
prevSimulationData &&
127+
@@ -2098,6 +2112,7 @@ _TransactionController_internalEvents = new WeakMap(), _TransactionController_me
74128
chainId,
75129
ethQuery,
76130
isCustomNetwork,
@@ -893,3 +947,129 @@ index 79e872fa72634f9d8be17a6b975dd782d19bb048..76233aefdabbc960641a3ce21864a9ab
893947
/** Changes to the blockchain state. */
894948
stateDiff?: {
895949
/** Initial blockchain state before the transaction. */
950+
diff --git a/dist/utils/simulation.cjs b/dist/utils/simulation.cjs
951+
index cf035672bdccadfb4338b7822609a3dfe6b9f898..3658ba7dbb370f27c23de70393324e6de422a44f 100644
952+
--- a/dist/utils/simulation.cjs
953+
+++ b/dist/utils/simulation.cjs
954+
@@ -64,7 +64,7 @@ const REVERTED_ERRORS = ['execution reverted', 'insufficient funds for gas'];
955+
*/
956+
async function getSimulationData(request, options = {}) {
957+
const { chainId, from, to, value, data } = request;
958+
- const { blockTime } = options;
959+
+ const { blockTime, senderCode } = options;
960+
log('Getting simulation data', request);
961+
try {
962+
const response = await (0, simulation_api_1.simulateTransactions)(chainId, {
963+
@@ -85,6 +85,13 @@ async function getSimulationData(request, options = {}) {
964+
time: (0, controller_utils_1.toHex)(blockTime),
965+
},
966+
}),
967+
+ ...(senderCode && {
968+
+ overrides: {
969+
+ [from]: {
970+
+ code: senderCode,
971+
+ },
972+
+ },
973+
+ }),
974+
});
975+
const transactionError = response.transactions?.[0]?.error;
976+
if (transactionError) {
977+
@@ -220,7 +227,8 @@ function normalizeEventArgValue(value) {
978+
* @returns An array of token balance changes.
979+
*/
980+
async function getTokenBalanceChanges(request, events, options) {
981+
- const { blockTime } = options;
982+
+ const { from } = request;
983+
+ const { blockTime, senderCode } = options;
984+
const balanceTxs = getTokenBalanceTransactions(request, events);
985+
log('Generated balance transactions', [...balanceTxs.after.values()]);
986+
const transactions = [
987+
@@ -238,6 +246,13 @@ async function getTokenBalanceChanges(request, events, options) {
988+
time: (0, controller_utils_1.toHex)(blockTime),
989+
},
990+
}),
991+
+ ...(senderCode && {
992+
+ overrides: {
993+
+ [from]: {
994+
+ code: senderCode,
995+
+ },
996+
+ },
997+
+ }),
998+
});
999+
log('Balance simulation response', response);
1000+
if (response.transactions.length !== transactions.length) {
1001+
diff --git a/dist/utils/simulation.d.cts b/dist/utils/simulation.d.cts
1002+
index 5a9e3d8278c356e87529c5ce0b79d0545b2e5cf9..f91b1f0a00cd27649aec0dbfbe4fd9f45b05f71e 100644
1003+
--- a/dist/utils/simulation.d.cts
1004+
+++ b/dist/utils/simulation.d.cts
1005+
@@ -27,6 +27,7 @@ type ParsedEvent = {
1006+
};
1007+
type GetSimulationDataOptions = {
1008+
blockTime?: number;
1009+
+ senderCode?: Hex;
1010+
};
1011+
/**
1012+
* Generate simulation data for a transaction.
1013+
diff --git a/dist/utils/simulation.d.mts b/dist/utils/simulation.d.mts
1014+
index df6666435463b9891bda1d6ee09ca80333380507..9e08d1c88e65990a44bdb662324835e00929e4a5 100644
1015+
--- a/dist/utils/simulation.d.mts
1016+
+++ b/dist/utils/simulation.d.mts
1017+
@@ -27,6 +27,7 @@ type ParsedEvent = {
1018+
};
1019+
type GetSimulationDataOptions = {
1020+
blockTime?: number;
1021+
+ senderCode?: Hex;
1022+
};
1023+
/**
1024+
* Generate simulation data for a transaction.
1025+
diff --git a/dist/utils/simulation.mjs b/dist/utils/simulation.mjs
1026+
index 0c1d340a5981f29525c23af13bbcc6a913a1449a..619dca98ce27f7d88d8032ecba61701f5b298a21 100644
1027+
--- a/dist/utils/simulation.mjs
1028+
+++ b/dist/utils/simulation.mjs
1029+
@@ -61,7 +61,7 @@ const REVERTED_ERRORS = ['execution reverted', 'insufficient funds for gas'];
1030+
*/
1031+
export async function getSimulationData(request, options = {}) {
1032+
const { chainId, from, to, value, data } = request;
1033+
- const { blockTime } = options;
1034+
+ const { blockTime, senderCode } = options;
1035+
log('Getting simulation data', request);
1036+
try {
1037+
const response = await simulateTransactions(chainId, {
1038+
@@ -82,6 +82,13 @@ export async function getSimulationData(request, options = {}) {
1039+
time: toHex(blockTime),
1040+
},
1041+
}),
1042+
+ ...(senderCode && {
1043+
+ overrides: {
1044+
+ [from]: {
1045+
+ code: senderCode,
1046+
+ },
1047+
+ },
1048+
+ }),
1049+
});
1050+
const transactionError = response.transactions?.[0]?.error;
1051+
if (transactionError) {
1052+
@@ -215,7 +222,8 @@ function normalizeEventArgValue(value) {
1053+
* @returns An array of token balance changes.
1054+
*/
1055+
async function getTokenBalanceChanges(request, events, options) {
1056+
- const { blockTime } = options;
1057+
+ const { from } = request;
1058+
+ const { blockTime, senderCode } = options;
1059+
const balanceTxs = getTokenBalanceTransactions(request, events);
1060+
log('Generated balance transactions', [...balanceTxs.after.values()]);
1061+
const transactions = [
1062+
@@ -233,6 +241,13 @@ async function getTokenBalanceChanges(request, events, options) {
1063+
time: toHex(blockTime),
1064+
},
1065+
}),
1066+
+ ...(senderCode && {
1067+
+ overrides: {
1068+
+ [from]: {
1069+
+ code: senderCode,
1070+
+ },
1071+
+ },
1072+
+ }),
1073+
});
1074+
log('Balance simulation response', response);
1075+
if (response.transactions.length !== transactions.length) {

yarn.lock

+2-2
Original file line numberDiff line numberDiff line change
@@ -6589,7 +6589,7 @@ __metadata:
65896589

65906590
"@metamask/transaction-controller@patch:@metamask/transaction-controller@npm%3A50.0.0#~/.yarn/patches/@metamask-transaction-controller-npm-50.0.0-6e65889240.patch":
65916591
version: 50.0.0
6592-
resolution: "@metamask/transaction-controller@patch:@metamask/transaction-controller@npm%3A50.0.0#~/.yarn/patches/@metamask-transaction-controller-npm-50.0.0-6e65889240.patch::version=50.0.0&hash=46660b"
6592+
resolution: "@metamask/transaction-controller@patch:@metamask/transaction-controller@npm%3A50.0.0#~/.yarn/patches/@metamask-transaction-controller-npm-50.0.0-6e65889240.patch::version=50.0.0&hash=3e4c8a"
65936593
dependencies:
65946594
"@ethereumjs/common": "npm:^4.4.0"
65956595
"@ethereumjs/tx": "npm:^5.4.0"
@@ -6619,7 +6619,7 @@ __metadata:
66196619
"@metamask/gas-fee-controller": ^22.0.0
66206620
"@metamask/network-controller": ^22.0.0
66216621
"@metamask/remote-feature-flag-controller": ^1.5.0
6622-
checksum: 10/b5b270ff4614a1f3ec0515f1d81d83854fd23ed73e629f9c536f0c3110574486f36c00f7262a10cec5eb6afa4b9e45c264cc78b8d8cb6b46e4185e4f9da102b0
6622+
checksum: 10/50f1bb9ec6a594af7215fc6d1283ccce30ca042093550ff8838c11e7748e9f1a7bc6f3a7c93ded5b2b272f612bd30b29a108670c40f35e4a644ab891706e05dc
66236623
languageName: node
66246624
linkType: hard
66256625

0 commit comments

Comments
 (0)