hardhat 2.22.5 → 2.22.7

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.
Files changed (56) hide show
  1. package/internal/cli/bootstrap.js +2 -3
  2. package/internal/cli/bootstrap.js.map +1 -1
  3. package/internal/cli/constants.d.ts.map +1 -1
  4. package/internal/cli/constants.js +1 -1
  5. package/internal/cli/constants.js.map +1 -1
  6. package/internal/cli/is-node-version-to-warn-on.d.ts +13 -0
  7. package/internal/cli/is-node-version-to-warn-on.d.ts.map +1 -0
  8. package/internal/cli/is-node-version-to-warn-on.js +46 -0
  9. package/internal/cli/is-node-version-to-warn-on.js.map +1 -0
  10. package/internal/core/config/default-config.d.ts.map +1 -1
  11. package/internal/core/config/default-config.js +26 -0
  12. package/internal/core/config/default-config.js.map +1 -1
  13. package/internal/core/errors-list.js +1 -1
  14. package/internal/core/errors-list.js.map +1 -1
  15. package/internal/core/providers/construction.d.ts.map +1 -1
  16. package/internal/core/providers/construction.js +1 -0
  17. package/internal/core/providers/construction.js.map +1 -1
  18. package/internal/hardhat-network/provider/provider.d.ts +12 -9
  19. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  20. package/internal/hardhat-network/provider/provider.js +27 -26
  21. package/internal/hardhat-network/provider/provider.js.map +1 -1
  22. package/internal/hardhat-network/provider/vm/exit.d.ts +0 -1
  23. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -1
  24. package/internal/hardhat-network/provider/vm/exit.js +1 -16
  25. package/internal/hardhat-network/provider/vm/exit.js.map +1 -1
  26. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts +15 -16
  27. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -1
  28. package/internal/hardhat-network/stack-traces/consoleLogger.js +25 -60
  29. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  30. package/internal/hardhat-network/stack-traces/logger.d.ts +2 -598
  31. package/internal/hardhat-network/stack-traces/logger.d.ts.map +1 -1
  32. package/internal/hardhat-network/stack-traces/logger.js +4 -5
  33. package/internal/hardhat-network/stack-traces/logger.js.map +1 -1
  34. package/internal/hardhat-network/stack-traces/message-trace.d.ts +0 -2
  35. package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
  36. package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -1
  37. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +8 -7
  38. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
  39. package/internal/hardhat-network/stack-traces/vm-tracer.js +13 -29
  40. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  41. package/package.json +3 -3
  42. package/src/internal/cli/bootstrap.ts +3 -3
  43. package/src/internal/cli/constants.ts +1 -1
  44. package/src/internal/cli/is-node-version-to-warn-on.ts +54 -0
  45. package/src/internal/core/config/default-config.ts +26 -0
  46. package/src/internal/core/errors-list.ts +1 -1
  47. package/src/internal/core/providers/construction.ts +1 -0
  48. package/src/internal/hardhat-network/provider/provider.ts +34 -39
  49. package/src/internal/hardhat-network/provider/vm/exit.ts +1 -21
  50. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +32 -94
  51. package/src/internal/hardhat-network/stack-traces/logger.ts +3 -4
  52. package/src/internal/hardhat-network/stack-traces/message-trace.ts +0 -2
  53. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +13 -26
  54. package/src/types/config.ts +2 -0
  55. package/types/config.d.ts +2 -0
  56. package/types/config.d.ts.map +1 -1
@@ -12,12 +12,9 @@ import type {
12
12
  import type {
13
13
  EdrContext,
14
14
  Provider as EdrProviderT,
15
- ExecutionResult,
16
15
  RawTrace,
17
16
  Response,
18
17
  SubscriptionEvent,
19
- TracingMessage,
20
- TracingStep,
21
18
  } from "@nomicfoundation/edr";
22
19
  import { Common } from "@nomicfoundation/ethereumjs-common";
23
20
  import chalk from "chalk";
@@ -123,6 +120,7 @@ interface HardhatNetworkProviderConfig {
123
120
  forkConfig?: ForkConfig;
124
121
  forkCachePath?: string;
125
122
  enableTransientStorage: boolean;
123
+ enableRip7212: boolean;
126
124
  }
127
125
 
128
126
  export function getNodeConfig(
@@ -152,12 +150,6 @@ export function getNodeConfig(
152
150
  };
153
151
  }
154
152
 
155
- export interface RawTraceCallbacks {
156
- onStep?: (messageTrace: TracingStep) => Promise<void>;
157
- onBeforeMessage?: (messageTrace: TracingMessage) => Promise<void>;
158
- onAfterMessage?: (messageTrace: ExecutionResult) => Promise<void>;
159
- }
160
-
161
153
  class EdrProviderEventAdapter extends EventEmitter {}
162
154
 
163
155
  type CallOverrideCallback = (
@@ -176,15 +168,16 @@ export class EdrProviderWrapper
176
168
  // temporarily added to make smock work with HH+EDR
177
169
  private _callOverrideCallback?: CallOverrideCallback;
178
170
 
171
+ /** Used for internal stack trace tests. */
172
+ private _vmTracer?: VMTracer;
173
+
179
174
  private constructor(
180
175
  private readonly _provider: EdrProviderT,
181
176
  // we add this for backwards-compatibility with plugins like solidity-coverage
182
177
  private readonly _node: {
183
178
  _vm: MinimalEthereumJsVm;
184
179
  },
185
- private readonly _eventAdapter: EdrProviderEventAdapter,
186
180
  private readonly _vmTraceDecoder: VmTraceDecoder,
187
- private readonly _rawTraceCallbacks: RawTraceCallbacks,
188
181
  // The common configuration for EthereumJS VM is not used by EDR, but tests expect it as part of the provider.
189
182
  private readonly _common: Common,
190
183
  tracingConfig?: TracingConfig
@@ -199,7 +192,6 @@ export class EdrProviderWrapper
199
192
  public static async create(
200
193
  config: HardhatNetworkProviderConfig,
201
194
  loggerConfig: LoggerConfig,
202
- rawTraceCallbacks: RawTraceCallbacks,
203
195
  tracingConfig?: TracingConfig
204
196
  ): Promise<EdrProviderWrapper> {
205
197
  const { Provider } = requireNapiRsModule(
@@ -264,6 +256,7 @@ export class EdrProviderWrapper
264
256
  }),
265
257
  cacheDir: config.forkCachePath,
266
258
  coinbase: Buffer.from(coinbase.slice(2), "hex"),
259
+ enableRip7212: config.enableRip7212,
267
260
  fork,
268
261
  hardfork: ethereumsjsHardforkToEdrSpecId(hardforkName),
269
262
  genesisAccounts: config.genesisAccounts.map((account) => {
@@ -289,10 +282,7 @@ export class EdrProviderWrapper
289
282
  },
290
283
  {
291
284
  enable: loggerConfig.enabled,
292
- decodeConsoleLogInputsCallback: (inputs: Buffer[]) => {
293
- const consoleLogger = new ConsoleLogger();
294
- return consoleLogger.getDecodedLogs(inputs);
295
- },
285
+ decodeConsoleLogInputsCallback: ConsoleLogger.getDecodedLogs,
296
286
  getContractAndFunctionNameCallback: (
297
287
  code: Buffer,
298
288
  calldata?: Buffer
@@ -323,9 +313,7 @@ export class EdrProviderWrapper
323
313
  const wrapper = new EdrProviderWrapper(
324
314
  provider,
325
315
  minimalEthereumJsNode,
326
- eventAdapter,
327
316
  vmTraceDecoder,
328
- rawTraceCallbacks,
329
317
  common,
330
318
  tracingConfig
331
319
  );
@@ -371,9 +359,7 @@ export class EdrProviderWrapper
371
359
  const needsTraces =
372
360
  this._node._vm.evm.events.eventNames().length > 0 ||
373
361
  this._node._vm.events.eventNames().length > 0 ||
374
- this._rawTraceCallbacks.onStep !== undefined ||
375
- this._rawTraceCallbacks.onAfterMessage !== undefined ||
376
- this._rawTraceCallbacks.onBeforeMessage !== undefined;
362
+ this._vmTracer !== undefined;
377
363
 
378
364
  if (needsTraces) {
379
365
  const rawTraces = responseObject.traces;
@@ -394,9 +380,8 @@ export class EdrProviderWrapper
394
380
  edrTracingStepToMinimalInterpreterStep(traceItem)
395
381
  );
396
382
  }
397
- if (this._rawTraceCallbacks.onStep !== undefined) {
398
- await this._rawTraceCallbacks.onStep(traceItem);
399
- }
383
+
384
+ this._vmTracer?.addStep(traceItem);
400
385
  }
401
386
  // afterMessage event
402
387
  else if ("executionResult" in traceItem) {
@@ -406,11 +391,8 @@ export class EdrProviderWrapper
406
391
  edrTracingMessageResultToMinimalEVMResult(traceItem)
407
392
  );
408
393
  }
409
- if (this._rawTraceCallbacks.onAfterMessage !== undefined) {
410
- await this._rawTraceCallbacks.onAfterMessage(
411
- traceItem.executionResult
412
- );
413
- }
394
+
395
+ this._vmTracer?.addAfterMessage(traceItem.executionResult);
414
396
  }
415
397
  // beforeMessage event
416
398
  else {
@@ -420,9 +402,8 @@ export class EdrProviderWrapper
420
402
  edrTracingMessageToMinimalMessage(traceItem)
421
403
  );
422
404
  }
423
- if (this._rawTraceCallbacks.onBeforeMessage !== undefined) {
424
- await this._rawTraceCallbacks.onBeforeMessage(traceItem);
425
- }
405
+
406
+ this._vmTracer?.addBeforeMessage(traceItem);
426
407
  }
427
408
  }
428
409
 
@@ -484,6 +465,15 @@ export class EdrProviderWrapper
484
465
  }
485
466
  }
486
467
 
468
+ /**
469
+ * Sets a `VMTracer` that observes EVM throughout requests.
470
+ *
471
+ * Used for internal stack traces integration tests.
472
+ */
473
+ public setVmTracer(vmTracer?: VMTracer) {
474
+ this._vmTracer = vmTracer;
475
+ }
476
+
487
477
  // temporarily added to make smock work with HH+EDR
488
478
  private _setCallOverrideCallback(callback: CallOverrideCallback) {
489
479
  this._callOverrideCallback = callback;
@@ -583,16 +573,16 @@ export class EdrProviderWrapper
583
573
  private async _rawTraceToSolidityStackTrace(
584
574
  rawTrace: RawTrace
585
575
  ): Promise<SolidityStackTrace | undefined> {
586
- const vmTracer = new VMTracer(false);
576
+ const vmTracer = new VMTracer();
587
577
 
588
578
  const trace = rawTrace.trace();
589
579
  for (const traceItem of trace) {
590
580
  if ("pc" in traceItem) {
591
- await vmTracer.addStep(traceItem);
581
+ vmTracer.addStep(traceItem);
592
582
  } else if ("executionResult" in traceItem) {
593
- await vmTracer.addAfterMessage(traceItem.executionResult);
583
+ vmTracer.addAfterMessage(traceItem.executionResult);
594
584
  } else {
595
- await vmTracer.addBeforeMessage(traceItem);
585
+ vmTracer.addBeforeMessage(traceItem);
596
586
  }
597
587
  }
598
588
 
@@ -631,12 +621,17 @@ export async function createHardhatNetworkProvider(
631
621
  loggerConfig: LoggerConfig,
632
622
  artifacts?: Artifacts
633
623
  ): Promise<EIP1193Provider> {
634
- return EdrProviderWrapper.create(
624
+ log("Making tracing config");
625
+ const tracingConfig = await makeTracingConfig(artifacts);
626
+ log("Creating EDR provider");
627
+ const provider = EdrProviderWrapper.create(
635
628
  hardhatNetworkProviderConfig,
636
629
  loggerConfig,
637
- {},
638
- await makeTracingConfig(artifacts)
630
+ tracingConfig
639
631
  );
632
+ log("EDR provider created");
633
+
634
+ return provider;
640
635
  }
641
636
 
642
637
  async function makeTracingConfig(
@@ -24,6 +24,7 @@ export class Exit {
24
24
  case SuccessReason.Stop:
25
25
  case SuccessReason.Return:
26
26
  case SuccessReason.SelfDestruct:
27
+ case SuccessReason.EofReturnContract:
27
28
  return new Exit(ExitCode.SUCCESS);
28
29
  }
29
30
 
@@ -91,25 +92,4 @@ export class Exit {
91
92
 
92
93
  const _exhaustiveCheck: never = this.kind;
93
94
  }
94
-
95
- public getEdrExceptionalHalt(): ExceptionalHalt {
96
- const { ExceptionalHalt } = requireNapiRsModule(
97
- "@nomicfoundation/edr"
98
- ) as typeof import("@nomicfoundation/edr");
99
-
100
- switch (this.kind) {
101
- case ExitCode.OUT_OF_GAS:
102
- return ExceptionalHalt.OutOfGas;
103
- case ExitCode.INVALID_OPCODE:
104
- return ExceptionalHalt.OpcodeNotFound;
105
- case ExitCode.CODESIZE_EXCEEDS_MAXIMUM:
106
- return ExceptionalHalt.CreateContractSizeLimit;
107
- case ExitCode.CREATE_COLLISION:
108
- return ExceptionalHalt.CreateCollision;
109
-
110
- default:
111
- // eslint-disable-next-line @nomicfoundation/hardhat-internal-rules/only-hardhat-error
112
- throw new Error(`Unmatched exit code: ${this.kind}`);
113
- }
114
- }
115
95
  }
@@ -42,113 +42,61 @@ import {
42
42
  Bytes8Ty,
43
43
  Bytes9Ty,
44
44
  BytesTy,
45
- ConsoleLogs,
46
45
  Int256Ty,
47
46
  StringTy,
48
47
  Uint256Ty,
48
+ CONSOLE_LOG_SIGNATURES,
49
49
  } from "./logger";
50
- import {
51
- EvmMessageTrace,
52
- isCallTrace,
53
- isEvmStep,
54
- isPrecompileTrace,
55
- MessageTrace,
56
- } from "./message-trace";
57
50
 
58
- const CONSOLE_ADDRESS = "0x000000000000000000636F6e736F6c652e6c6f67"; // toHex("console.log")
59
51
  const REGISTER_SIZE = 32;
60
52
 
61
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
62
- interface ConsoleLogArray extends Array<ConsoleLogEntry> {}
63
-
64
- export type ConsoleLogEntry = string | ConsoleLogArray;
65
-
66
- // eslint-disable-next-line @typescript-eslint/no-redeclare
67
- export type ConsoleLogs = ConsoleLogEntry[];
53
+ /** The decoded string representation of the arguments supplied to console.log */
54
+ export type ConsoleLogArgs = string[];
55
+ export type ConsoleLogs = ConsoleLogArgs[];
68
56
 
69
57
  export class ConsoleLogger {
70
- private readonly _consoleLogs: {
71
- [key: number]: string[];
72
- } = {};
73
-
74
- constructor() {
75
- this._consoleLogs = ConsoleLogs;
76
- }
77
-
78
- public getLogMessages(maybeDecodedMessageTrace: MessageTrace): string[] {
79
- return this.getExecutionLogs(maybeDecodedMessageTrace).map(
80
- consoleLogToString
81
- );
82
- }
83
-
84
- public getExecutionLogs(
85
- maybeDecodedMessageTrace: MessageTrace
86
- ): ConsoleLogs[] {
87
- if (isPrecompileTrace(maybeDecodedMessageTrace)) {
88
- return [];
89
- }
90
-
91
- const logs: ConsoleLogs[] = [];
92
- this._collectExecutionLogs(maybeDecodedMessageTrace, logs);
93
- return logs;
94
- }
95
-
96
- private _collectExecutionLogs(trace: EvmMessageTrace, logs: ConsoleLogs) {
97
- for (const messageTrace of trace.steps) {
98
- if (isEvmStep(messageTrace) || isPrecompileTrace(messageTrace)) {
99
- continue;
100
- }
101
-
102
- if (
103
- isCallTrace(messageTrace) &&
104
- bufferToHex(messageTrace.address) === CONSOLE_ADDRESS.toLowerCase()
105
- ) {
106
- const log = this._maybeConsoleLog(Buffer.from(messageTrace.calldata));
107
- if (log !== undefined) {
108
- logs.push(log);
109
- }
110
-
111
- continue;
112
- }
113
-
114
- this._collectExecutionLogs(messageTrace, logs);
115
- }
116
- }
117
-
118
58
  /**
119
59
  * Temporary code to print console.sol messages that come from EDR
120
60
  */
121
- public getDecodedLogs(messages: Buffer[]): string[] {
61
+ public static getDecodedLogs(messages: Buffer[]): string[] {
122
62
  const logs: string[] = [];
123
63
 
124
64
  for (const message of messages) {
125
- const log = this._maybeConsoleLog(message);
65
+ const log = ConsoleLogger._maybeConsoleLog(message);
126
66
  if (log !== undefined) {
127
- logs.push(consoleLogToString(log));
67
+ logs.push(ConsoleLogger.format(log));
128
68
  }
129
69
  }
130
70
 
131
71
  return logs;
132
72
  }
133
73
 
134
- private _maybeConsoleLog(calldata: Buffer): ConsoleLogs | undefined {
135
- const sig = bytesToInt(calldata.slice(0, 4));
74
+ /**
75
+ * Returns a formatted string using the first argument as a `printf`-like
76
+ * format string which can contain zero or more format specifiers.
77
+ *
78
+ * If there are more arguments passed than the number of specifiers, the
79
+ * extra arguments are concatenated to the returned string, separated by spaces.
80
+ */
81
+ public static format(args: ConsoleLogArgs = []): string {
82
+ return util.format(...args);
83
+ }
84
+
85
+ private static _maybeConsoleLog(
86
+ calldata: Buffer
87
+ ): ConsoleLogArgs | undefined {
88
+ const selector = bytesToInt(calldata.slice(0, 4));
136
89
  const parameters = calldata.slice(4);
137
90
 
138
- const types = this._consoleLogs[sig];
139
- if (types === undefined) {
91
+ const argTypes = CONSOLE_LOG_SIGNATURES[selector];
92
+ if (argTypes === undefined) {
140
93
  return;
141
94
  }
142
95
 
143
- const consoleLogs = this._decode(parameters, types);
96
+ const decodedArgs = ConsoleLogger._decode(parameters, argTypes);
144
97
 
145
- this._replaceNumberFormatSpecifiers(consoleLogs);
146
-
147
- return consoleLogs;
148
- }
149
-
150
- private _replaceNumberFormatSpecifiers(consoleLogs: ConsoleLogs) {
151
98
  /**
99
+ * The first argument is interpreted as the format string, which may need adjusting.
152
100
  * Replace the occurrences of %d and %i with %s. This is necessary because if the arguments passed are numbers,
153
101
  * they could be too large to be formatted as a Number or an Integer, so it is safer to use a String.
154
102
  * %d and %i are replaced only if there is an odd number of % before the d or i.
@@ -160,15 +108,18 @@ export class ConsoleLogger {
160
108
  * (?<!%) negative look-behind to make this work.
161
109
  * The (?:) is just to avoid capturing that inner group.
162
110
  */
163
- if (consoleLogs.length > 0 && typeof consoleLogs[0] === "string") {
164
- consoleLogs[0] = consoleLogs[0].replace(
111
+ if (decodedArgs.length > 0) {
112
+ decodedArgs[0] = decodedArgs[0].replace(
165
113
  /((?<!%)(?:%%)*)(%[di])/g,
166
114
  "$1%s"
167
115
  );
168
116
  }
117
+
118
+ return decodedArgs;
169
119
  }
170
120
 
171
- private _decode(data: Buffer, types: string[]): ConsoleLogs {
121
+ /** Decodes parameters from `data` according to `types` into their string representation. */
122
+ private static _decode(data: Buffer, types: string[]): string[] {
172
123
  return types.map((type, i) => {
173
124
  const position: number = i * 32;
174
125
  switch (types[i]) {
@@ -282,16 +233,3 @@ export class ConsoleLogger {
282
233
  });
283
234
  }
284
235
  }
285
-
286
- export function consoleLogToString(log: ConsoleLogs): string {
287
- if (log === undefined) {
288
- return "";
289
- }
290
-
291
- // special case for console.log()
292
- if (log.length === 0) {
293
- return "";
294
- }
295
-
296
- return util.format(log[0], ...log.slice(1));
297
- }
@@ -1,6 +1,6 @@
1
1
  // ------------------------------------
2
2
  // This code was autogenerated using
3
- // scripts/console-library-generator.js
3
+ // scripts/console-library-generator.ts
4
4
  // ------------------------------------
5
5
 
6
6
  export const Int256Ty = "Int256";
@@ -42,9 +42,8 @@ export const Bytes30Ty = "Bytes30";
42
42
  export const Bytes31Ty = "Bytes31";
43
43
  export const Bytes32Ty = "Bytes32";
44
44
 
45
- // In order to optimize map lookup
46
- // we'll store 4byte signature as int
47
- export const ConsoleLogs = {
45
+ /** Maps from a 4-byte function selector to a signature (argument types) */
46
+ export const CONSOLE_LOG_SIGNATURES: Record<number, string[]> = {
48
47
  1368866505: [],
49
48
  760966329: [Int256Ty],
50
49
  1309416733: [Int256Ty],
@@ -34,8 +34,6 @@ export interface PrecompileMessageTrace extends BaseMessageTrace {
34
34
 
35
35
  export interface BaseEvmMessageTrace extends BaseMessageTrace {
36
36
  code: Uint8Array;
37
- value: bigint;
38
- returnData: Uint8Array;
39
37
  steps: MessageTraceStep[];
40
38
  bytecode?: Bytecode;
41
39
  // The following is just an optimization: When processing this traces it's useful to know ahead of
@@ -26,6 +26,10 @@ import {
26
26
  const DUMMY_RETURN_DATA = Buffer.from([]);
27
27
  const DUMMY_GAS_USED = 0n;
28
28
 
29
+ /**
30
+ * Consumes the incoming VM trace events, until an error occurs, to keep track
31
+ * of the last top level message trace/error.
32
+ */
29
33
  export class VMTracer {
30
34
  public tracingSteps: TracingStep[] = [];
31
35
 
@@ -33,7 +37,7 @@ export class VMTracer {
33
37
  private _lastError: Error | undefined;
34
38
  private _maxPrecompileNumber;
35
39
 
36
- constructor(private readonly _throwErrors = true) {
40
+ constructor() {
37
41
  // TODO: temporarily hardcoded to remove the need of using ethereumjs' common and evm here
38
42
  this._maxPrecompileNumber = 10;
39
43
  }
@@ -46,15 +50,11 @@ export class VMTracer {
46
50
  return this._lastError;
47
51
  }
48
52
 
49
- public clearLastError() {
50
- this._lastError = undefined;
51
- }
52
-
53
53
  private _shouldKeepTracing() {
54
- return this._throwErrors || this._lastError === undefined;
54
+ return this._lastError === undefined;
55
55
  }
56
56
 
57
- public async addBeforeMessage(message: TracingMessage) {
57
+ public addBeforeMessage(message: TracingMessage) {
58
58
  if (!this._shouldKeepTracing()) {
59
59
  return;
60
60
  }
@@ -143,15 +143,11 @@ export class VMTracer {
143
143
 
144
144
  this._messageTraces.push(trace);
145
145
  } catch (error) {
146
- if (this._throwErrors) {
147
- throw error;
148
- } else {
149
- this._lastError = error as Error;
150
- }
146
+ this._lastError = error as Error;
151
147
  }
152
148
  }
153
149
 
154
- public async addStep(step: TracingStep) {
150
+ public addStep(step: TracingStep) {
155
151
  if (!this._shouldKeepTracing()) {
156
152
  return;
157
153
  }
@@ -169,15 +165,11 @@ export class VMTracer {
169
165
 
170
166
  trace.steps.push({ pc: Number(step.pc) });
171
167
  } catch (error) {
172
- if (this._throwErrors) {
173
- throw error;
174
- } else {
175
- this._lastError = error as Error;
176
- }
168
+ this._lastError = error as Error;
177
169
  }
178
170
  }
179
171
 
180
- public async addAfterMessage(result: ExecutionResult, haltOverride?: Exit) {
172
+ public addAfterMessage(result: ExecutionResult) {
181
173
  if (!this._shouldKeepTracing()) {
182
174
  return;
183
175
  }
@@ -197,8 +189,7 @@ export class VMTracer {
197
189
  ).address;
198
190
  }
199
191
  } else if (isHaltResult(executionResult)) {
200
- trace.exit =
201
- haltOverride ?? Exit.fromEdrExceptionalHalt(executionResult.reason);
192
+ trace.exit = Exit.fromEdrExceptionalHalt(executionResult.reason);
202
193
 
203
194
  trace.returnData = Buffer.from([]);
204
195
  } else {
@@ -211,11 +202,7 @@ export class VMTracer {
211
202
  this._messageTraces.pop();
212
203
  }
213
204
  } catch (error) {
214
- if (this._throwErrors) {
215
- throw error;
216
- } else {
217
- this._lastError = error as Error;
218
- }
205
+ this._lastError = error as Error;
219
206
  }
220
207
  }
221
208
  }
@@ -58,6 +58,7 @@ export interface HardhatNetworkUserConfig {
58
58
  coinbase?: string;
59
59
  chains?: HardhatNetworkChainsUserConfig;
60
60
  enableTransientStorage?: boolean;
61
+ enableRip7212?: boolean;
61
62
  }
62
63
 
63
64
  export type HardhatNetworkAccountsUserConfig =
@@ -155,6 +156,7 @@ export interface HardhatNetworkConfig {
155
156
  chains: HardhatNetworkChainsConfig;
156
157
  allowBlocksWithSameTimestamp?: boolean;
157
158
  enableTransientStorage?: boolean;
159
+ enableRip7212?: boolean;
158
160
  }
159
161
 
160
162
  export type HardhatNetworkAccountsConfig =
package/types/config.d.ts CHANGED
@@ -35,6 +35,7 @@ export interface HardhatNetworkUserConfig {
35
35
  coinbase?: string;
36
36
  chains?: HardhatNetworkChainsUserConfig;
37
37
  enableTransientStorage?: boolean;
38
+ enableRip7212?: boolean;
38
39
  }
39
40
  export type HardhatNetworkAccountsUserConfig = HardhatNetworkAccountUserConfig[] | HardhatNetworkHDAccountsUserConfig;
40
41
  export interface HardhatNetworkAccountUserConfig {
@@ -111,6 +112,7 @@ export interface HardhatNetworkConfig {
111
112
  chains: HardhatNetworkChainsConfig;
112
113
  allowBlocksWithSameTimestamp?: boolean;
113
114
  enableTransientStorage?: boolean;
115
+ enableRip7212?: boolean;
114
116
  }
115
117
  export type HardhatNetworkAccountsConfig = HardhatNetworkHDAccountsConfig | HardhatNetworkAccountConfig[];
116
118
  export interface HardhatNetworkAccountConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/types/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/types/config.ts"],"names":[],"mappings":"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"}