@@ -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" ;
@@ -152,12 +149,6 @@ export function getNodeConfig(
152
149
} ;
153
150
}
154
151
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
152
class EdrProviderEventAdapter extends EventEmitter { }
162
153
163
154
type CallOverrideCallback = (
@@ -184,7 +175,7 @@ export class EdrProviderWrapper
184
175
} ,
185
176
private readonly _eventAdapter : EdrProviderEventAdapter ,
186
177
private readonly _vmTraceDecoder : VmTraceDecoder ,
187
- private readonly _rawTraceCallbacks : RawTraceCallbacks ,
178
+ private readonly _vmTracer : VMTracer | undefined ,
188
179
// The common configuration for EthereumJS VM is not used by EDR, but tests expect it as part of the provider.
189
180
private readonly _common : Common ,
190
181
tracingConfig ?: TracingConfig
@@ -199,8 +190,8 @@ export class EdrProviderWrapper
199
190
public static async create (
200
191
config : HardhatNetworkProviderConfig ,
201
192
loggerConfig : LoggerConfig ,
202
- rawTraceCallbacks : RawTraceCallbacks ,
203
- tracingConfig ?: TracingConfig
193
+ tracingConfig ?: TracingConfig ,
194
+ vmTracer ?: VMTracer
204
195
) : Promise < EdrProviderWrapper > {
205
196
const { Provider } = requireNapiRsModule (
206
197
"@nomicfoundation/edr"
@@ -325,7 +316,7 @@ export class EdrProviderWrapper
325
316
minimalEthereumJsNode ,
326
317
eventAdapter ,
327
318
vmTraceDecoder ,
328
- rawTraceCallbacks ,
319
+ vmTracer ,
329
320
common ,
330
321
tracingConfig
331
322
) ;
@@ -371,9 +362,7 @@ export class EdrProviderWrapper
371
362
const needsTraces =
372
363
this . _node . _vm . evm . events . eventNames ( ) . length > 0 ||
373
364
this . _node . _vm . events . eventNames ( ) . length > 0 ||
374
- this . _rawTraceCallbacks . onStep !== undefined ||
375
- this . _rawTraceCallbacks . onAfterMessage !== undefined ||
376
- this . _rawTraceCallbacks . onBeforeMessage !== undefined ;
365
+ this . _vmTracer !== undefined ;
377
366
378
367
if ( needsTraces ) {
379
368
const rawTraces = responseObject . traces ;
@@ -394,9 +383,8 @@ export class EdrProviderWrapper
394
383
edrTracingStepToMinimalInterpreterStep ( traceItem )
395
384
) ;
396
385
}
397
- if ( this . _rawTraceCallbacks . onStep !== undefined ) {
398
- await this . _rawTraceCallbacks . onStep ( traceItem ) ;
399
- }
386
+
387
+ this . _vmTracer ?. addStep ( traceItem ) ;
400
388
}
401
389
// afterMessage event
402
390
else if ( "executionResult" in traceItem ) {
@@ -406,11 +394,8 @@ export class EdrProviderWrapper
406
394
edrTracingMessageResultToMinimalEVMResult ( traceItem )
407
395
) ;
408
396
}
409
- if ( this . _rawTraceCallbacks . onAfterMessage !== undefined ) {
410
- await this . _rawTraceCallbacks . onAfterMessage (
411
- traceItem . executionResult
412
- ) ;
413
- }
397
+
398
+ this . _vmTracer ?. addAfterMessage ( traceItem . executionResult ) ;
414
399
}
415
400
// beforeMessage event
416
401
else {
@@ -420,9 +405,8 @@ export class EdrProviderWrapper
420
405
edrTracingMessageToMinimalMessage ( traceItem )
421
406
) ;
422
407
}
423
- if ( this . _rawTraceCallbacks . onBeforeMessage !== undefined ) {
424
- await this . _rawTraceCallbacks . onBeforeMessage ( traceItem ) ;
425
- }
408
+
409
+ this . _vmTracer ?. addBeforeMessage ( traceItem ) ;
426
410
}
427
411
}
428
412
@@ -484,6 +468,11 @@ export class EdrProviderWrapper
484
468
}
485
469
}
486
470
471
+ /** Used for internal stack traces integration tests. Only defined there. */
472
+ public vmTracer ( ) : VMTracer | undefined {
473
+ return this . _vmTracer ;
474
+ }
475
+
487
476
// temporarily added to make smock work with HH+EDR
488
477
private _setCallOverrideCallback ( callback : CallOverrideCallback ) {
489
478
this . _callOverrideCallback = callback ;
@@ -588,11 +577,11 @@ export class EdrProviderWrapper
588
577
const trace = rawTrace . trace ( ) ;
589
578
for ( const traceItem of trace ) {
590
579
if ( "pc" in traceItem ) {
591
- await vmTracer . addStep ( traceItem ) ;
580
+ vmTracer . addStep ( traceItem ) ;
592
581
} else if ( "executionResult" in traceItem ) {
593
- await vmTracer . addAfterMessage ( traceItem . executionResult ) ;
582
+ vmTracer . addAfterMessage ( traceItem . executionResult ) ;
594
583
} else {
595
- await vmTracer . addBeforeMessage ( traceItem ) ;
584
+ vmTracer . addBeforeMessage ( traceItem ) ;
596
585
}
597
586
}
598
587
@@ -634,7 +623,6 @@ export async function createHardhatNetworkProvider(
634
623
return EdrProviderWrapper . create (
635
624
hardhatNetworkProviderConfig ,
636
625
loggerConfig ,
637
- { } ,
638
626
await makeTracingConfig ( artifacts )
639
627
) ;
640
628
}
0 commit comments