add log and newAccount hooks

This commit is contained in:
Sina Mahmoodi 2023-06-22 13:10:05 +02:00
parent f67ac095a6
commit 84d6432708
2 changed files with 18 additions and 0 deletions

View file

@ -58,6 +58,8 @@ type StateLogger interface {
OnNonceChange(addr common.Address, prev, new uint64)
OnCodeChange(addr common.Address, prevCodeHash common.Hash, prevCode []byte, codeHash common.Hash, code []byte)
OnStorageChange(addr common.Address, slot common.Hash, prev, new common.Hash)
OnLog(log *types.Log)
OnNewAccount(addr common.Address)
}
// StateDB structs within the ethereum protocol are used to store anything
@ -214,6 +216,9 @@ func (s *StateDB) AddLog(log *types.Log) {
log.TxHash = s.thash
log.TxIndex = uint(s.txIndex)
log.Index = s.logSize
if s.logger != nil {
s.logger.OnLog(log)
}
s.logs[s.thash] = append(s.logs[s.thash], log)
s.logSize++
}
@ -669,6 +674,11 @@ func (s *StateDB) createObject(addr common.Address) (newobj, prev *stateObject)
prevStorage: storage,
})
}
// TODO: add isPrecompile check
// TODO: should we emit on account reset?
if s.logger != nil {
s.logger.OnNewAccount(addr)
}
s.setStateObject(newobj)
if prev != nil && !prev.deleted {
return newobj, prev

View file

@ -85,3 +85,11 @@ func (p *Printer) OnCodeChange(a common.Address, prevCodeHash common.Hash, prev
func (p *Printer) OnStorageChange(a common.Address, k, prev, new common.Hash) {
fmt.Printf("OnStorageChange: a=%v, k=%v, prev=%v, new=%v\n", a, k, prev, new)
}
func (p *Printer) OnLog(l *types.Log) {
fmt.Printf("OnLog: l=%v\n", l)
}
func (p *Printer) OnNewAccount(a common.Address) {
fmt.Printf("OnNewAccount: a=%v\n", a)
}