diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 7857c17fe6..ea9724b917 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -543,6 +543,7 @@ var ( VMTraceJsonConfigFlag = &cli.StringFlag{ Name: "vmtrace.jsonconfig", Usage: "Tracer configuration (JSON)", + Value: "{}", Category: flags.VMCategory, } // API options. @@ -1899,13 +1900,8 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) { // VM tracing config. if ctx.IsSet(VMTraceFlag.Name) { if name := ctx.String(VMTraceFlag.Name); name != "" { - var config string - if ctx.IsSet(VMTraceJsonConfigFlag.Name) { - config = ctx.String(VMTraceJsonConfigFlag.Name) - } - cfg.VMTrace = name - cfg.VMTraceJsonConfig = config + cfg.VMTraceJsonConfig = ctx.String(VMTraceJsonConfigFlag.Name) } } } @@ -2186,10 +2182,7 @@ func MakeChain(ctx *cli.Context, stack *node.Node, readonly bool) (*core.BlockCh } if ctx.IsSet(VMTraceFlag.Name) { if name := ctx.String(VMTraceFlag.Name); name != "" { - config := json.RawMessage("{}") - if ctx.IsSet(VMTraceJsonConfigFlag.Name) { - config = json.RawMessage(ctx.String(VMTraceJsonConfigFlag.Name)) - } + config := json.RawMessage(ctx.String(VMTraceJsonConfigFlag.Name)) t, err := tracers.LiveDirectory.New(name, config) if err != nil { Fatalf("Failed to create tracer %q: %v", name, err) diff --git a/eth/tracers/dir.go b/eth/tracers/dir.go index 35d3b622e6..55bcb44d23 100644 --- a/eth/tracers/dir.go +++ b/eth/tracers/dir.go @@ -80,6 +80,9 @@ func (d *directory) RegisterJSEval(f jsCtorFn) { // registered lookups. Name is either name of an existing tracer // or an arbitrary JS code. func (d *directory) New(name string, ctx *Context, cfg json.RawMessage, chainConfig *params.ChainConfig) (*Tracer, error) { + if len(cfg) == 0 { + cfg = json.RawMessage("{}") + } if elem, ok := d.elems[name]; ok { return elem.ctor(ctx, cfg, chainConfig) } diff --git a/eth/tracers/live.go b/eth/tracers/live.go index a208c0a3ad..8b222d2e6c 100644 --- a/eth/tracers/live.go +++ b/eth/tracers/live.go @@ -40,6 +40,9 @@ func (d *liveDirectory) Register(name string, f ctorFunc) { // New instantiates a tracer by name. func (d *liveDirectory) New(name string, config json.RawMessage) (*tracing.Hooks, error) { + if len(config) == 0 { + config = json.RawMessage("{}") + } if f, ok := d.elems[name]; ok { return f(config) } diff --git a/eth/tracers/native/call.go b/eth/tracers/native/call.go index d3a353ac80..c2247d1ce4 100644 --- a/eth/tracers/native/call.go +++ b/eth/tracers/native/call.go @@ -146,10 +146,8 @@ func newCallTracer(ctx *tracers.Context, cfg json.RawMessage, chainConfig *param func newCallTracerObject(ctx *tracers.Context, cfg json.RawMessage) (*callTracer, error) { var config callTracerConfig - if cfg != nil { - if err := json.Unmarshal(cfg, &config); err != nil { - return nil, err - } + if err := json.Unmarshal(cfg, &config); err != nil { + return nil, err } // First callframe contains tx context info // and is populated on start and end. diff --git a/eth/tracers/native/call_flat.go b/eth/tracers/native/call_flat.go index c631f656a3..b7cc60b096 100644 --- a/eth/tracers/native/call_flat.go +++ b/eth/tracers/native/call_flat.go @@ -129,15 +129,13 @@ type flatCallTracerConfig struct { // newFlatCallTracer returns a new flatCallTracer. func newFlatCallTracer(ctx *tracers.Context, cfg json.RawMessage, chainConfig *params.ChainConfig) (*tracers.Tracer, error) { var config flatCallTracerConfig - if cfg != nil { - if err := json.Unmarshal(cfg, &config); err != nil { - return nil, err - } + if err := json.Unmarshal(cfg, &config); err != nil { + return nil, err } // Create inner call tracer with default configuration, don't forward // the OnlyTopCall or WithLog to inner for now - t, err := newCallTracerObject(ctx, nil) + t, err := newCallTracerObject(ctx, json.RawMessage("{}")) if err != nil { return nil, err } diff --git a/eth/tracers/native/mux.go b/eth/tracers/native/mux.go index 08979f5c11..77ab254568 100644 --- a/eth/tracers/native/mux.go +++ b/eth/tracers/native/mux.go @@ -41,10 +41,8 @@ type muxTracer struct { // newMuxTracer returns a new mux tracer. func newMuxTracer(ctx *tracers.Context, cfg json.RawMessage, chainConfig *params.ChainConfig) (*tracers.Tracer, error) { var config map[string]json.RawMessage - if cfg != nil { - if err := json.Unmarshal(cfg, &config); err != nil { - return nil, err - } + if err := json.Unmarshal(cfg, &config); err != nil { + return nil, err } objects := make([]*tracers.Tracer, 0, len(config)) names := make([]string, 0, len(config)) diff --git a/eth/tracers/native/prestate.go b/eth/tracers/native/prestate.go index 03aaecbfeb..978ba0670c 100644 --- a/eth/tracers/native/prestate.go +++ b/eth/tracers/native/prestate.go @@ -77,10 +77,8 @@ type prestateTracerConfig struct { func newPrestateTracer(ctx *tracers.Context, cfg json.RawMessage, chainConfig *params.ChainConfig) (*tracers.Tracer, error) { var config prestateTracerConfig - if cfg != nil { - if err := json.Unmarshal(cfg, &config); err != nil { - return nil, err - } + if err := json.Unmarshal(cfg, &config); err != nil { + return nil, err } t := &prestateTracer{ pre: stateMap{},