From 97e9a8b31542af0ed2a7fa8345eff7d174bc648b Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Fri, 9 Feb 2024 11:02:39 +0100 Subject: [PATCH 1/3] fix blockchain -> logger circular import Backport of https://github.com/s1na/go-ethereum/commit/03206befb9a57d00411bba8e1ad7982a50710145 --- cmd/geth/config.go | 4 ++-- cmd/utils/flags.go | 4 ++-- core/blockchain_test.go | 7 ++++--- eth/tracers/directory/{live.go => live/dir.go} | 12 ++++++------ eth/tracers/live/noop.go | 4 ++-- 5 files changed, 16 insertions(+), 15 deletions(-) rename eth/tracers/directory/{live.go => live/dir.go} (55%) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index fa1ec6f279..3f5303259b 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -37,7 +37,7 @@ import ( "github.com/ethereum/go-ethereum/eth/catalyst" "github.com/ethereum/go-ethereum/eth/downloader" "github.com/ethereum/go-ethereum/eth/ethconfig" - "github.com/ethereum/go-ethereum/eth/tracers/directory" + "github.com/ethereum/go-ethereum/eth/tracers/directory/live" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/internal/flags" "github.com/ethereum/go-ethereum/internal/version" @@ -182,7 +182,7 @@ func makeFullNode(ctx *cli.Context) (*node.Node, ethapi.Backend) { if ctx.IsSet(utils.VMTraceFlag.Name) { if name := ctx.String(utils.VMTraceFlag.Name); name != "" { - t, err := directory.LiveDirectory.New(name) + t, err := live.Directory.New(name) if err != nil { utils.Fatalf("Failed to create tracer %q: %v", name, err) } diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 6878a46e39..81f16458f8 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -51,7 +51,7 @@ import ( "github.com/ethereum/go-ethereum/eth/filters" "github.com/ethereum/go-ethereum/eth/gasprice" "github.com/ethereum/go-ethereum/eth/tracers" - "github.com/ethereum/go-ethereum/eth/tracers/directory" + "github.com/ethereum/go-ethereum/eth/tracers/directory/live" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb/remotedb" "github.com/ethereum/go-ethereum/ethstats" @@ -2194,7 +2194,7 @@ func MakeChain(ctx *cli.Context, stack *node.Node, readonly bool) (*core.BlockCh vmcfg := vm.Config{EnablePreimageRecording: ctx.Bool(VMEnableDebugFlag.Name)} if ctx.IsSet(VMTraceFlag.Name) { if name := ctx.String(VMTraceFlag.Name); name != "" { - t, err := directory.LiveDirectory.New(name) + t, err := live.Directory.New(name) if err != nil { Fatalf("Failed to create tracer %q: %v", name, err) } diff --git a/core/blockchain_test.go b/core/blockchain_test.go index 5f9892902b..bc6f8112f0 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -36,6 +36,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth/tracers/logger" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" @@ -3247,7 +3248,7 @@ func testDeleteRecreateSlots(t *testing.T, scheme string) { }) // Import the canonical chain chain, err := NewBlockChain(rawdb.NewMemoryDatabase(), DefaultCacheConfigWithScheme(scheme), gspec, nil, engine, vm.Config{ - //Tracer: logger.NewJSONLogger(nil, os.Stdout), + Tracer: logger.NewJSONLogger(nil, os.Stdout), }, nil, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) @@ -3329,7 +3330,7 @@ func testDeleteRecreateAccount(t *testing.T, scheme string) { }) // Import the canonical chain chain, err := NewBlockChain(rawdb.NewMemoryDatabase(), DefaultCacheConfigWithScheme(scheme), gspec, nil, engine, vm.Config{ - //Tracer: logger.NewJSONLogger(nil, os.Stdout), + Tracer: logger.NewJSONLogger(nil, os.Stdout), }, nil, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) @@ -4681,7 +4682,7 @@ func TestEIP3651(t *testing.T) { b.AddTx(tx) }) - chain, err := NewBlockChain(rawdb.NewMemoryDatabase(), nil, gspec, nil, engine, vm.Config{ /*Tracer: logger.NewMarkdownLogger(&logger.Config{}, os.Stderr)*/ }, nil, nil) + chain, err := NewBlockChain(rawdb.NewMemoryDatabase(), nil, gspec, nil, engine, vm.Config{Tracer: logger.NewMarkdownLogger(&logger.Config{}, os.Stderr)}, nil, nil) if err != nil { t.Fatalf("failed to create tester chain: %v", err) } diff --git a/eth/tracers/directory/live.go b/eth/tracers/directory/live/dir.go similarity index 55% rename from eth/tracers/directory/live.go rename to eth/tracers/directory/live/dir.go index dc6927b142..011d27f887 100644 --- a/eth/tracers/directory/live.go +++ b/eth/tracers/directory/live/dir.go @@ -1,4 +1,4 @@ -package directory +package live import ( "errors" @@ -8,21 +8,21 @@ import ( type ctorFunc func() (core.BlockchainLogger, error) -// LiveDirectory is the collection of tracers which can be used +// Directory is the collection of tracers which can be used // during normal block import operations. -var LiveDirectory = liveDirectory{elems: make(map[string]ctorFunc)} +var Directory = directory{elems: make(map[string]ctorFunc)} -type liveDirectory struct { +type directory struct { elems map[string]ctorFunc } // Register registers a tracer constructor by name. -func (d *liveDirectory) Register(name string, f ctorFunc) { +func (d *directory) Register(name string, f ctorFunc) { d.elems[name] = f } // New instantiates a tracer by name. -func (d *liveDirectory) New(name string) (core.BlockchainLogger, error) { +func (d *directory) New(name string) (core.BlockchainLogger, error) { if f, ok := d.elems[name]; ok { return f() } diff --git a/eth/tracers/live/noop.go b/eth/tracers/live/noop.go index beb532a423..4ff4153c60 100644 --- a/eth/tracers/live/noop.go +++ b/eth/tracers/live/noop.go @@ -8,12 +8,12 @@ import ( "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" - "github.com/ethereum/go-ethereum/eth/tracers/directory" + "github.com/ethereum/go-ethereum/eth/tracers/directory/live" "github.com/ethereum/go-ethereum/params" ) func init() { - directory.LiveDirectory.Register("noop", newNoopTracer) + live.Directory.Register("noop", newNoopTracer) } // noop is a no-op live tracer. It's there to From ee96dd2c0388c139b8772d32fbd148654b77eee9 Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Fri, 9 Feb 2024 11:13:35 +0100 Subject: [PATCH 2/3] live tracer err -> warn Backport of https://github.com/s1na/go-ethereum/commit/08cb623c2e27c562badcf55185e90f4eb761154a --- core/blockchain.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 92e122cbaa..33c9b0f7c9 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -292,10 +292,11 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, genesis *Genesis var logger BlockchainLogger if vmConfig.Tracer != nil { l, ok := vmConfig.Tracer.(BlockchainLogger) - if !ok { - return nil, errors.New("only extended tracers are supported for live mode") + if ok { + logger = l + } else { + log.Warn("only extended tracers are supported for live mode") } - logger = l } // Setup the genesis block, commit the provided genesis specification // to database if the genesis block is not present yet, or load the From 2264a9c3fec4e97fbb9b7affc179462812f68895 Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Fri, 9 Feb 2024 11:19:56 +0100 Subject: [PATCH 3/3] fix mdLogger Backport of https://github.com/s1na/go-ethereum/commit/cf6a31514b8c1b8502861fbe1773830172b1d98e --- eth/tracers/logger/logger.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eth/tracers/logger/logger.go b/eth/tracers/logger/logger.go index ae64dc8625..3c22bd7886 100644 --- a/eth/tracers/logger/logger.go +++ b/eth/tracers/logger/logger.go @@ -334,6 +334,10 @@ func NewMarkdownLogger(cfg *Config, writer io.Writer) *mdLogger { return l } +func (t *mdLogger) CaptureTxStart(env *vm.EVM, tx *types.Transaction, from common.Address) { + t.env = env +} + func (t *mdLogger) CaptureStart(from common.Address, to common.Address, create bool, input []byte, gas uint64, value *big.Int) { if !create { fmt.Fprintf(t.out, "From: `%v`\nTo: `%v`\nData: `%#x`\nGas: `%d`\nValue `%v` wei\n",