Skip to content

Commit af69d38

Browse files
gzliudans1na
andauthored
eth/tracers: various fixes ethereum#30540 (#1491)
Breaking changes: - The ChainConfig was exposed to tracers via VMContext passed in `OnTxStart`. This is unnecessary specially looking through the lens of live tracers as chain config remains the same throughout the lifetime of the program. It was there so that native API-invoked tracers could access it. So instead we moved it to the constructor of API tracers. Non-breaking: - Change the default config of the tracers to be `{}` instead of nil. This way an extra nil check can be avoided. Refactoring: - Rename `supply` struct to `supplyTracer`. - Un-export some hook definitions. Co-authored-by: Sina M <[email protected]>
1 parent e9da4ca commit af69d38

File tree

22 files changed

+127
-89
lines changed

22 files changed

+127
-89
lines changed

cmd/utils/flags.go

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -384,6 +384,7 @@ var (
384384
VMTraceJsonConfigFlag = &cli.StringFlag{
385385
Name: "vmtrace-config",
386386
Usage: "Tracer configuration (JSON)",
387+
Value: "{}",
387388
Category: flags.VMCategory,
388389
}
389390

@@ -1673,13 +1674,8 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
16731674
// VM tracing config.
16741675
if ctx.IsSet(VMTraceFlag.Name) {
16751676
if name := ctx.String(VMTraceFlag.Name); name != "" {
1676-
var config string
1677-
if ctx.IsSet(VMTraceJsonConfigFlag.Name) {
1678-
config = ctx.String(VMTraceJsonConfigFlag.Name)
1679-
}
1680-
16811677
cfg.VMTrace = name
1682-
cfg.VMTraceJsonConfig = config
1678+
cfg.VMTraceJsonConfig = ctx.String(VMTraceJsonConfigFlag.Name)
16831679
}
16841680
}
16851681
}
@@ -1862,10 +1858,7 @@ func MakeChain(ctx *cli.Context, stack *node.Node, readonly bool) (chain *core.B
18621858
vmcfg := vm.Config{EnablePreimageRecording: ctx.Bool(VMEnableDebugFlag.Name)}
18631859
if ctx.IsSet(VMTraceFlag.Name) {
18641860
if name := ctx.String(VMTraceFlag.Name); name != "" {
1865-
var config json.RawMessage
1866-
if ctx.IsSet(VMTraceJsonConfigFlag.Name) {
1867-
config = json.RawMessage(ctx.String(VMTraceJsonConfigFlag.Name))
1868-
}
1861+
config := json.RawMessage(ctx.String(VMTraceJsonConfigFlag.Name))
18691862
t, err := tracers.LiveDirectory.New(name, config)
18701863
if err != nil {
18711864
Fatalf("Failed to create tracer %q: %v", name, err)

core/tracing/hooks.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,8 @@ type VMContext struct {
5353
Time uint64
5454
Random *common.Hash
5555
// Effective tx gas price
56-
GasPrice *big.Int
57-
ChainConfig *params.ChainConfig
58-
StateDB StateDB
56+
GasPrice *big.Int
57+
StateDB StateDB
5958
}
6059

6160
// BlockEvent is emitted upon tracing an incoming block.

core/vm/evm.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,6 @@ func (evm *EVM) GetVMContext() *tracing.VMContext {
557557
Time: evm.Context.Time,
558558
Random: evm.Context.Random,
559559
GasPrice: evm.TxContext.GasPrice,
560-
ChainConfig: evm.ChainConfig(),
561560
StateDB: evm.StateDB,
562561
}
563562
}

core/vm/runtime/runtime_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,7 @@ func TestRuntimeJSTracer(t *testing.T) {
828828
statedb.SetCode(common.HexToAddress("0xee"), calleeCode)
829829
statedb.SetCode(common.HexToAddress("0xff"), suicideCode)
830830

831-
tracer, err := tracers.DefaultDirectory.New(jsTracer, new(tracers.Context), nil)
831+
tracer, err := tracers.DefaultDirectory.New(jsTracer, new(tracers.Context), nil, params.TestChainConfig)
832832
if err != nil {
833833
t.Fatal(err)
834834
}
@@ -863,7 +863,7 @@ func TestJSTracerCreateTx(t *testing.T) {
863863
code := []byte{byte(vm.PUSH1), 0, byte(vm.PUSH1), 0, byte(vm.RETURN)}
864864

865865
statedb, _ := state.New(types.EmptyRootHash, state.NewDatabase(rawdb.NewMemoryDatabase()))
866-
tracer, err := tracers.DefaultDirectory.New(jsTracer, new(tracers.Context), nil)
866+
tracer, err := tracers.DefaultDirectory.New(jsTracer, new(tracers.Context), nil, params.TestChainConfig)
867867
if err != nil {
868868
t.Fatal(err)
869869
}

eth/backend.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ func New(stack *node.Node, config *ethconfig.Config, XDCXServ *XDCx.XDCX, lendin
187187
}
188188
)
189189
if config.VMTrace != "" {
190-
var traceConfig json.RawMessage
190+
traceConfig := json.RawMessage("{}")
191191
if config.VMTraceJsonConfig != "" {
192192
traceConfig = json.RawMessage(config.VMTraceJsonConfig)
193193
}

eth/tracers/api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -856,7 +856,7 @@ func (api *API) traceTx(ctx context.Context, tx *types.Transaction, message *cor
856856
Stop: logger.Stop,
857857
}
858858
} else {
859-
tracer, err = DefaultDirectory.New(*config.Tracer, txctx, config.TracerConfig)
859+
tracer, err = DefaultDirectory.New(*config.Tracer, txctx, config.TracerConfig, api.backend.ChainConfig())
860860
if err != nil {
861861
return nil, err
862862
}

eth/tracers/dir.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"github.com/XinFinOrg/XDPoSChain/common"
2424
"github.com/XinFinOrg/XDPoSChain/core/tracing"
25+
"github.com/XinFinOrg/XDPoSChain/params"
2526
)
2627

2728
// Context contains some contextual infos for a transaction execution that is not
@@ -44,8 +45,8 @@ type Tracer struct {
4445
Stop func(err error)
4546
}
4647

47-
type ctorFn func(*Context, json.RawMessage) (*Tracer, error)
48-
type jsCtorFn func(string, *Context, json.RawMessage) (*Tracer, error)
48+
type ctorFn func(*Context, json.RawMessage, *params.ChainConfig) (*Tracer, error)
49+
type jsCtorFn func(string, *Context, json.RawMessage, *params.ChainConfig) (*Tracer, error)
4950

5051
type elem struct {
5152
ctor ctorFn
@@ -78,12 +79,15 @@ func (d *directory) RegisterJSEval(f jsCtorFn) {
7879
// New returns a new instance of a tracer, by iterating through the
7980
// registered lookups. Name is either name of an existing tracer
8081
// or an arbitrary JS code.
81-
func (d *directory) New(name string, ctx *Context, cfg json.RawMessage) (*Tracer, error) {
82+
func (d *directory) New(name string, ctx *Context, cfg json.RawMessage, chainConfig *params.ChainConfig) (*Tracer, error) {
83+
if len(cfg) == 0 {
84+
cfg = json.RawMessage("{}")
85+
}
8286
if elem, ok := d.elems[name]; ok {
83-
return elem.ctor(ctx, cfg)
87+
return elem.ctor(ctx, cfg, chainConfig)
8488
}
8589
// Assume JS code
86-
return d.jsEval(name, ctx, cfg)
90+
return d.jsEval(name, ctx, cfg, chainConfig)
8791
}
8892

8993
// IsJS will return true if the given tracer will evaluate

eth/tracers/internal/tracetest/calltrace_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) {
129129
state = tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc)
130130
)
131131

132-
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), test.TracerConfig)
132+
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), test.TracerConfig, test.Genesis.Config)
133133
if err != nil {
134134
t.Fatalf("failed to create call tracer: %v", err)
135135
}
@@ -227,7 +227,7 @@ func benchTracer(tracerName string, test *callTracerTest, b *testing.B) {
227227
b.ReportAllocs()
228228
b.ResetTimer()
229229
for i := 0; i < b.N; i++ {
230-
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), nil)
230+
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), nil, test.Genesis.Config)
231231
if err != nil {
232232
b.Fatalf("failed to create call tracer: %v", err)
233233
}
@@ -264,7 +264,7 @@ func TestInternals(t *testing.T) {
264264
}
265265
)
266266
mkTracer := func(name string, cfg json.RawMessage) *tracers.Tracer {
267-
tr, err := tracers.DefaultDirectory.New(name, nil, cfg)
267+
tr, err := tracers.DefaultDirectory.New(name, nil, cfg, config)
268268
if err != nil {
269269
t.Fatalf("failed to create call tracer: %v", err)
270270
}
@@ -448,7 +448,7 @@ func testContractTracer(tracerName string, dirPath string, t *testing.T) {
448448
state = tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc)
449449
)
450450

451-
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), test.TracerConfig)
451+
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), test.TracerConfig, nil)
452452
if err != nil {
453453
t.Fatalf("failed to create call tracer: %v", err)
454454
}

eth/tracers/internal/tracetest/flat_calltrace_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func flatCallTracerTestRunner(tracerName string, filename string, dirPath string
9696
state := tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc)
9797

9898
// Create the tracer, the EVM environment and run it
99-
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), test.TracerConfig)
99+
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), test.TracerConfig, test.Genesis.Config)
100100
if err != nil {
101101
return fmt.Errorf("failed to create call tracer: %v", err)
102102
}

eth/tracers/internal/tracetest/prestate_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func testPrestateDiffTracer(tracerName string, dirPath string, t *testing.T) {
105105
state = tests.MakePreState(rawdb.NewMemoryDatabase(), test.Genesis.Alloc)
106106
)
107107

108-
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), test.TracerConfig)
108+
tracer, err := tracers.DefaultDirectory.New(tracerName, new(tracers.Context), test.TracerConfig, test.Genesis.Config)
109109
if err != nil {
110110
t.Fatalf("failed to create call tracer: %v", err)
111111
}

0 commit comments

Comments
 (0)