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.
- package/internal/cli/bootstrap.js +2 -3
- package/internal/cli/bootstrap.js.map +1 -1
- package/internal/cli/constants.d.ts.map +1 -1
- package/internal/cli/constants.js +1 -1
- package/internal/cli/constants.js.map +1 -1
- package/internal/cli/is-node-version-to-warn-on.d.ts +13 -0
- package/internal/cli/is-node-version-to-warn-on.d.ts.map +1 -0
- package/internal/cli/is-node-version-to-warn-on.js +46 -0
- package/internal/cli/is-node-version-to-warn-on.js.map +1 -0
- package/internal/core/config/default-config.d.ts.map +1 -1
- package/internal/core/config/default-config.js +26 -0
- package/internal/core/config/default-config.js.map +1 -1
- package/internal/core/errors-list.js +1 -1
- package/internal/core/errors-list.js.map +1 -1
- package/internal/core/providers/construction.d.ts.map +1 -1
- package/internal/core/providers/construction.js +1 -0
- package/internal/core/providers/construction.js.map +1 -1
- package/internal/hardhat-network/provider/provider.d.ts +12 -9
- package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
- package/internal/hardhat-network/provider/provider.js +27 -26
- package/internal/hardhat-network/provider/provider.js.map +1 -1
- package/internal/hardhat-network/provider/vm/exit.d.ts +0 -1
- package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -1
- package/internal/hardhat-network/provider/vm/exit.js +1 -16
- package/internal/hardhat-network/provider/vm/exit.js.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.d.ts +15 -16
- package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/consoleLogger.js +25 -60
- package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/logger.d.ts +2 -598
- package/internal/hardhat-network/stack-traces/logger.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/logger.js +4 -5
- package/internal/hardhat-network/stack-traces/logger.js.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.d.ts +0 -2
- package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +8 -7
- package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
- package/internal/hardhat-network/stack-traces/vm-tracer.js +13 -29
- package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
- package/package.json +3 -3
- package/src/internal/cli/bootstrap.ts +3 -3
- package/src/internal/cli/constants.ts +1 -1
- package/src/internal/cli/is-node-version-to-warn-on.ts +54 -0
- package/src/internal/core/config/default-config.ts +26 -0
- package/src/internal/core/errors-list.ts +1 -1
- package/src/internal/core/providers/construction.ts +1 -0
- package/src/internal/hardhat-network/provider/provider.ts +34 -39
- package/src/internal/hardhat-network/provider/vm/exit.ts +1 -21
- package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +32 -94
- package/src/internal/hardhat-network/stack-traces/logger.ts +3 -4
- package/src/internal/hardhat-network/stack-traces/message-trace.ts +0 -2
- package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +13 -26
- package/src/types/config.ts +2 -0
- package/types/config.d.ts +2 -0
- 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:
|
|
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.
|
|
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
|
-
|
|
398
|
-
|
|
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
|
-
|
|
410
|
-
|
|
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
|
-
|
|
424
|
-
|
|
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(
|
|
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
|
-
|
|
581
|
+
vmTracer.addStep(traceItem);
|
|
592
582
|
} else if ("executionResult" in traceItem) {
|
|
593
|
-
|
|
583
|
+
vmTracer.addAfterMessage(traceItem.executionResult);
|
|
594
584
|
} else {
|
|
595
|
-
|
|
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
|
-
|
|
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
|
-
|
|
62
|
-
|
|
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 =
|
|
65
|
+
const log = ConsoleLogger._maybeConsoleLog(message);
|
|
126
66
|
if (log !== undefined) {
|
|
127
|
-
logs.push(
|
|
67
|
+
logs.push(ConsoleLogger.format(log));
|
|
128
68
|
}
|
|
129
69
|
}
|
|
130
70
|
|
|
131
71
|
return logs;
|
|
132
72
|
}
|
|
133
73
|
|
|
134
|
-
|
|
135
|
-
|
|
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
|
|
139
|
-
if (
|
|
91
|
+
const argTypes = CONSOLE_LOG_SIGNATURES[selector];
|
|
92
|
+
if (argTypes === undefined) {
|
|
140
93
|
return;
|
|
141
94
|
}
|
|
142
95
|
|
|
143
|
-
const
|
|
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 (
|
|
164
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
46
|
-
|
|
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(
|
|
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.
|
|
54
|
+
return this._lastError === undefined;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
public
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
215
|
-
throw error;
|
|
216
|
-
} else {
|
|
217
|
-
this._lastError = error as Error;
|
|
218
|
-
}
|
|
205
|
+
this._lastError = error as Error;
|
|
219
206
|
}
|
|
220
207
|
}
|
|
221
208
|
}
|
package/src/types/config.ts
CHANGED
|
@@ -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 {
|
package/types/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/types/config.ts"],"names":[],"mappings":";AAgBA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,wBAAwB,CAAC;IAEnC,CAAC,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACtD;AAED,MAAM,MAAM,iBAAiB,GACzB,wBAAwB,GACxB,qBAAqB,CAAC;AAE1B,MAAM,WAAW,yBAAyB;IACxC,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAoB;CACnD;AAED,MAAM,WAAW,6BAA6B;IAC5C,eAAe,CAAC,EAAE,yBAAyB,CAAC;CAC7C;AAED,MAAM,WAAW,8BAA8B;IAC7C,CAAC,OAAO,EAAE,MAAM,GAAG,6BAA6B,CAAC;CAClD;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,QAAQ,CAAC,EAAE,gCAAgC,CAAC;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,CAAC,EAAE,+BAA+B,CAAC;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,8BAA8B,CAAC;IACxC,sBAAsB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/types/config.ts"],"names":[],"mappings":"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"}
|