From 8be12b1ae528d7f62d2b16fd8f6840f8178cd533 Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Wed, 31 May 2023 12:28:11 +0200 Subject: [PATCH 1/2] cmd/evm: make evm blocktest output logs if so instructed --- cmd/evm/blockrunner.go | 15 +++++++++++++-- tests/block_test.go | 4 ++-- tests/block_test_util.go | 6 ++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/cmd/evm/blockrunner.go b/cmd/evm/blockrunner.go index ffd76b8fb0c91..ffd3165f55694 100644 --- a/cmd/evm/blockrunner.go +++ b/cmd/evm/blockrunner.go @@ -22,6 +22,8 @@ import ( "fmt" "os" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/tests" "github.com/urfave/cli/v2" @@ -42,7 +44,16 @@ func blockTestCmd(ctx *cli.Context) error { glogger := log.NewGlogHandler(log.StreamHandler(os.Stderr, log.TerminalFormat(false))) glogger.Verbosity(log.Lvl(ctx.Int(VerbosityFlag.Name))) log.Root().SetHandler(glogger) - + var tracer vm.EVMLogger + // Configure the EVM logger + if ctx.Bool(MachineFlag.Name) { + tracer = logger.NewJSONLogger(&logger.Config{ + EnableMemory: !ctx.Bool(DisableMemoryFlag.Name), + DisableStack: ctx.Bool(DisableStackFlag.Name), + DisableStorage: ctx.Bool(DisableStorageFlag.Name), + EnableReturnData: !ctx.Bool(DisableReturnDataFlag.Name), + }, os.Stderr) + } // Load the test content from the input file src, err := os.ReadFile(ctx.Args().First()) if err != nil { @@ -53,7 +64,7 @@ func blockTestCmd(ctx *cli.Context) error { return err } for i, test := range tests { - if err := test.Run(false); err != nil { + if err := test.Run(false, tracer); err != nil { return fmt.Errorf("test %v: %w", i, err) } } diff --git a/tests/block_test.go b/tests/block_test.go index 9e72f7f9710af..042bda86ae3c8 100644 --- a/tests/block_test.go +++ b/tests/block_test.go @@ -48,10 +48,10 @@ func TestBlockchain(t *testing.T) { bt.skipLoad(`.*randomStatetest94.json.*`) bt.walk(t, blockTestDir, func(t *testing.T, name string, test *BlockTest) { - if err := bt.checkFailure(t, test.Run(false)); err != nil { + if err := bt.checkFailure(t, test.Run(false), nil); err != nil { t.Errorf("test without snapshotter failed: %v", err) } - if err := bt.checkFailure(t, test.Run(true)); err != nil { + if err := bt.checkFailure(t, test.Run(true), nil); err != nil { t.Errorf("test with snapshotter failed: %v", err) } }) diff --git a/tests/block_test_util.go b/tests/block_test_util.go index 45b7e49ae72ac..d3e525a387e3b 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -100,7 +100,7 @@ type btHeaderMarshaling struct { BaseFeePerGas *math.HexOrDecimal256 } -func (t *BlockTest) Run(snapshotter bool) error { +func (t *BlockTest) Run(snapshotter bool, tracer vm.EVMLogger) error { config, ok := Forks[t.json.Network] if !ok { return UnsupportedForkError{t.json.Network} @@ -124,7 +124,9 @@ func (t *BlockTest) Run(snapshotter bool) error { cache.SnapshotLimit = 1 cache.SnapshotWait = true } - chain, err := core.NewBlockChain(db, cache, gspec, nil, engine, vm.Config{}, nil, nil) + chain, err := core.NewBlockChain(db, cache, gspec, nil, engine, vm.Config{ + Tracer: tracer, + }, nil, nil) if err != nil { return err } From b4033febab422399399d5cc5c03adee4819f7eeb Mon Sep 17 00:00:00 2001 From: Martin Holst Swende Date: Fri, 2 Jun 2023 05:00:07 -0400 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Marius van der Wijden --- tests/block_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/block_test.go b/tests/block_test.go index 042bda86ae3c8..2405da1cc7335 100644 --- a/tests/block_test.go +++ b/tests/block_test.go @@ -48,10 +48,10 @@ func TestBlockchain(t *testing.T) { bt.skipLoad(`.*randomStatetest94.json.*`) bt.walk(t, blockTestDir, func(t *testing.T, name string, test *BlockTest) { - if err := bt.checkFailure(t, test.Run(false), nil); err != nil { + if err := bt.checkFailure(t, test.Run(false, nil)); err != nil { t.Errorf("test without snapshotter failed: %v", err) } - if err := bt.checkFailure(t, test.Run(true), nil); err != nil { + if err := bt.checkFailure(t, test.Run(true, nil)); err != nil { t.Errorf("test with snapshotter failed: %v", err) } })