diff --git a/core/state/statedb.go b/core/state/statedb.go index 80c13897c..08d69fd1c 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -23,6 +23,7 @@ import ( "runtime" "sort" "sync" + "sync/atomic" "time" "github.com/ethereum/go-ethereum/common" @@ -1216,6 +1217,7 @@ func (s *StateDB) AccountsIntermediateRoot() { }() } + var calcStateObjectCount atomic.Int64 // Although naively it makes sense to retrieve the account trie and then do // the contract storage and account updates sequentially, that short circuits // the account prefetcher. Instead, let's process all the storage updates @@ -1226,7 +1228,7 @@ func (s *StateDB) AccountsIntermediateRoot() { wg.Add(1) tasks <- func() { obj.updateRoot() - + calcStateObjectCount.Add(1) // Cache the data until commit. Note, this update mechanism is not symmetric // to the deletion, because whereas it is enough to track account updates // at commit time, deletions need tracking at transaction boundary level to @@ -1240,6 +1242,7 @@ func (s *StateDB) AccountsIntermediateRoot() { } } wg.Wait() + log.Info("versa calc root state object", "count", calcStateObjectCount.Load(), "version", s.db.GetVersion()+1) } func (s *StateDB) StateIntermediateRoot() common.Hash { @@ -1620,6 +1623,7 @@ func (s *StateDB) Commit(block uint64, failPostCommitFunc func(), postCommitFunc }() } + var committedStateObjectNum atomic.Int64 for addr := range s.stateObjectsDirty { if obj := s.stateObjects[addr]; !obj.deleted { tasks <- func() { @@ -1629,6 +1633,7 @@ func (s *StateDB) Commit(block uint64, failPostCommitFunc func(), postCommitFunc taskResults <- taskResult{err, nil} return } else { + committedStateObjectNum.Add(1) taskResults <- taskResult{nil, set} } } else { @@ -1711,6 +1716,7 @@ func (s *StateDB) Commit(block uint64, failPostCommitFunc func(), postCommitFunc } } wg.Wait() + log.Info("versa commit state object", "count", committedStateObjectNum.Load(), "version", s.db.GetVersion()+1) return nil }()