@@ -262,7 +262,7 @@ func (api *API) traceChain(start, end *types.Block, config *TraceConfig, closed
262
262
log .Warn ("invalid trace configuration" , "err" , err )
263
263
return nil
264
264
}
265
- env := envFromTraceConfig (api , config . Config )
265
+ env := envFromTraceConfig (api , config )
266
266
267
267
instantiateTracer := func (ctx * Context ) (* Tracer , error ) {
268
268
return api .instantiateTracer (config , ctx )
@@ -426,7 +426,7 @@ func (api *API) traceBlockCustomTracer(ctx context.Context, block *types.Block,
426
426
instantiateTracer := func (ctx * Context ) (* Tracer , error ) {
427
427
return api .instantiateTracer (config , ctx )
428
428
}
429
- env := envFromTraceConfig (api , config . Config )
429
+ env := envFromTraceConfig (api , config )
430
430
opt , err := traceExecOpt (config )
431
431
if err != nil {
432
432
return nil , err
@@ -487,7 +487,7 @@ func (api *API) TraceBadBlock(ctx context.Context, hash common.Hash, config *Tra
487
487
}
488
488
489
489
// TODO: investigate whether the canon field has different treatment when tracing bad blocks
490
- env := envFromTraceConfig (api , config . Config )
490
+ env := envFromTraceConfig (api , config )
491
491
opt , err := traceExecOpt (config )
492
492
if err != nil {
493
493
return nil , err
@@ -593,7 +593,33 @@ type traceEnv struct {
593
593
chainConfig * params.ChainConfig
594
594
}
595
595
596
- func envFromTraceConfig (api * API , config * logger.Config ) * traceEnv {
596
+ func envFromStdConfig (api * API , config * StdTraceConfig ) * traceEnv {
597
+ if config == nil {
598
+ return & traceEnv {
599
+ canon : true ,
600
+ chainConfig : api .backend .ChainConfig (),
601
+ }
602
+ }
603
+ return envFromLoggerConfig (api , & config .Config )
604
+ }
605
+
606
+ func envFromTraceConfig (api * API , config * TraceConfig ) * traceEnv {
607
+ if config == nil {
608
+ return & traceEnv {
609
+ canon : true ,
610
+ chainConfig : api .backend .ChainConfig (),
611
+ }
612
+ }
613
+ return envFromLoggerConfig (api , config .Config )
614
+ }
615
+
616
+ func envFromLoggerConfig (api * API , config * logger.Config ) * traceEnv {
617
+ if config == nil {
618
+ return & traceEnv {
619
+ canon : true ,
620
+ chainConfig : api .backend .ChainConfig (),
621
+ }
622
+ }
597
623
chainConfig := api .backend .ChainConfig ()
598
624
var canon bool
599
625
if config .Overrides != nil {
@@ -825,6 +851,12 @@ func (api *API) standardTraceTxToFile(ctx context.Context, block *types.Block, t
825
851
return dumps , nil
826
852
}
827
853
854
+ func traceCallExecOpt (config * TraceCallConfig ) (* traceExecOptions , error ) {
855
+ if config == nil {
856
+ return traceExecOpt (nil )
857
+ }
858
+ return traceExecOpt (& config .TraceConfig )
859
+ }
828
860
func traceExecOpt (config * TraceConfig ) (* traceExecOptions , error ) {
829
861
opt := & traceExecOptions {
830
862
defaultTraceTimeout ,
@@ -872,7 +904,8 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block
872
904
return nil , errors .New ("genesis is not traceable" )
873
905
}
874
906
875
- env := envFromTraceConfig (api , & config .Config )
907
+ env := envFromStdConfig (api , config )
908
+
876
909
var signer = types .MakeSigner (api .backend .ChainConfig (), block .Number (), block .Time ())
877
910
if config != nil && config .TxHash != (common.Hash {}) {
878
911
idx , ok := indexOf (block , config .TxHash )
@@ -1041,7 +1074,7 @@ func (api *API) TraceCall(ctx context.Context, args ethapi.TransactionArgs, bloc
1041
1074
}
1042
1075
// try to recompute the state
1043
1076
1044
- opt , err := traceExecOpt ( & config . TraceConfig )
1077
+ opt , err := traceCallExecOpt ( config )
1045
1078
if err != nil {
1046
1079
return nil , err
1047
1080
}
0 commit comments