From 00ef42b541913cdcb2264e02c21f0bd5f4081f0c Mon Sep 17 00:00:00 2001 From: Chris Ziogas Date: Sat, 30 Mar 2024 19:18:05 +0200 Subject: [PATCH] add OnTerminate in Hooks which triggered on blockchain Stop --- core/blockchain.go | 4 ++++ core/tracing/hooks.go | 4 ++++ eth/tracers/live/supply.go | 18 ++++++++++++------ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 12fdcf7245..b83288124e 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -1171,6 +1171,10 @@ func (bc *BlockChain) Stop() { if err := bc.triedb.Close(); err != nil { log.Error("Failed to close trie database", "err", err) } + // Call OnTerminate hook on Tracers if it is set. + if bc.vmConfig.Tracer != nil && bc.vmConfig.Tracer.OnTerminate != nil { + bc.vmConfig.Tracer.OnTerminate() + } log.Info("Blockchain stopped") } diff --git a/core/tracing/hooks.go b/core/tracing/hooks.go index 5d7bb6891b..faf1ce4d96 100644 --- a/core/tracing/hooks.go +++ b/core/tracing/hooks.go @@ -140,6 +140,9 @@ type ( // LogHook is called when a log is emitted. LogHook = func(log *types.Log) + + // TerminateHook is called when the tracer is terminated. + TerminateHook = func() ) type Hooks struct { @@ -163,6 +166,7 @@ type Hooks struct { OnCodeChange CodeChangeHook OnStorageChange StorageChangeHook OnLog LogHook + OnTerminate TerminateHook } // BalanceChangeReason is used to indicate the reason for a balance change, useful diff --git a/eth/tracers/live/supply.go b/eth/tracers/live/supply.go index f35bd1d2be..a1b0724219 100644 --- a/eth/tracers/live/supply.go +++ b/eth/tracers/live/supply.go @@ -44,9 +44,10 @@ type supplyTxCallstack struct { } type supply struct { - delta supplyInfo - txCallstack []supplyTxCallstack // Callstack for current transaction - logger *log.Logger + delta supplyInfo + txCallstack []supplyTxCallstack // Callstack for current transaction + loggerOutputFile *lumberjack.Logger + logger *log.Logger } type supplyTracerConfig struct { @@ -70,7 +71,6 @@ func newSupply(cfg json.RawMessage) (*tracing.Hooks, error) { loggerOutputFile := &lumberjack.Logger{ Filename: filepath.Join(config.Path, "supply.jsonl"), } - defer loggerOutputFile.Close() if config.MaxSize > 0 { loggerOutputFile.MaxSize = config.MaxSize @@ -81,8 +81,9 @@ func newSupply(cfg json.RawMessage) (*tracing.Hooks, error) { supplyInfo := newSupplyInfo() t := &supply{ - delta: supplyInfo, - logger: logger, + delta: supplyInfo, + loggerOutputFile: loggerOutputFile, + logger: logger, } return &tracing.Hooks{ OnBlockStart: t.OnBlockStart, @@ -92,6 +93,7 @@ func newSupply(cfg json.RawMessage) (*tracing.Hooks, error) { OnBalanceChange: t.OnBalanceChange, OnEnter: t.OnEnter, OnExit: t.OnExit, + OnTerminate: t.OnTerminate, }, nil } @@ -238,3 +240,7 @@ func (s *supply) OnExit(depth int, output []byte, gasUsed uint64, err error, rev } s.txCallstack[size-1].calls = append(s.txCallstack[size-1].calls, call) } + +func (s *supply) OnTerminate() { + s.loggerOutputFile.Close() +}