Skip to content

Commit

Permalink
Adding support for vmTrace into trace_ routines (erigontech#2497)
Browse files Browse the repository at this point in the history
* VmTrace

* Fixes to gasCall, beginning of vmTrace

* Fix opcode tracer

* Add mem and store, enable vmTrace for all methods

* Fix lint

* More nuances and debugging|

* More fixes

* Fix for trace_callMany

* Fix for trace_callMany

Co-authored-by: Alexey Sharp <[email protected]>
  • Loading branch information
AlexeyAkhunov and Alexey Sharp authored Aug 8, 2021
1 parent b666c67 commit 350d7fe
Show file tree
Hide file tree
Showing 15 changed files with 301 additions and 97 deletions.
29 changes: 13 additions & 16 deletions cmd/hack/hack.go
Original file line number Diff line number Diff line change
Expand Up @@ -1362,43 +1362,40 @@ func extractCode(chaindata string) error {
func iterateOverCode(chaindata string) error {
db := mdbx.MustOpen(chaindata)
defer db.Close()
var contractCount int
var contractKeyTotalLength int
var contractValTotalLength int
var codeHashTotalLength int
var codeTotalLength int // Total length of all byte code (just to illustrate iterating)
hashes := make(map[common.Hash][]byte)
if err1 := db.View(context.Background(), func(tx kv.Tx) error {
c, err := tx.Cursor(kv.PlainContractCode)
c, err := tx.Cursor(kv.Code)
if err != nil {
return err
}
// This is a mapping of contractAddress + incarnation => CodeHash
// This is a mapping of CodeHash => Byte code
for k, v, err := c.First(); k != nil; k, v, err = c.Next() {
if err != nil {
return err
}
contractKeyTotalLength += len(k)
contractValTotalLength += len(v)
if len(v) > 0 && v[0] == 0xef {
fmt.Printf("Found code with hash %x: %x\n", k, v)
hashes[common.BytesToHash(k)] = common.CopyBytes(v)
}
}
c, err = tx.Cursor(kv.Code)
c, err = tx.Cursor(kv.PlainContractCode)
if err != nil {
return err
}
// This is a mapping of CodeHash => Byte code
// This is a mapping of contractAddress + incarnation => CodeHash
for k, v, err := c.First(); k != nil; k, v, err = c.Next() {
if err != nil {
return err
}
codeHashTotalLength += len(k)
codeTotalLength += len(v)
contractCount++
hash := common.BytesToHash(v)
if code, ok := hashes[hash]; ok {
fmt.Printf("address: %x: %x\n", k[:20], code)
}
}
return nil
}); err1 != nil {
return err1
}
fmt.Printf("contractCount: %d,contractKeyTotalLength: %d, contractValTotalLength: %d, codeHashTotalLength: %d, codeTotalLength: %d\n",
contractCount, contractKeyTotalLength, contractValTotalLength, codeHashTotalLength, codeTotalLength)
return nil
}

Expand Down
Loading

0 comments on commit 350d7fe

Please sign in to comment.