logger.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package vm
  2. import (
  3. "fmt"
  4. "os"
  5. "unicode/utf8"
  6. "github.com/ethereum/go-ethereum/common"
  7. )
  8. func StdErrFormat(logs []StructLog) {
  9. fmt.Fprintf(os.Stderr, "VM Stats %d ops\n", len(logs))
  10. for _, log := range logs {
  11. fmt.Fprintf(os.Stderr, "PC %08d: %s GAS: %v COST: %v\n", log.Pc, log.Op, log.Gas, log.GasCost)
  12. fmt.Fprintln(os.Stderr, "STACK =", len(log.Stack))
  13. for i, item := range log.Stack {
  14. fmt.Fprintf(os.Stderr, "%04d: %x\n", i, common.LeftPadBytes(item.Bytes(), 32))
  15. }
  16. const maxMem = 10
  17. addr := 0
  18. fmt.Fprintln(os.Stderr, "MEM =", len(log.Memory))
  19. for i := 0; i+16 <= len(log.Memory) && addr < maxMem; i += 16 {
  20. data := log.Memory[i : i+16]
  21. str := fmt.Sprintf("%04d: % x ", addr*16, data)
  22. for _, r := range data {
  23. if r == 0 {
  24. str += "."
  25. } else if utf8.ValidRune(rune(r)) {
  26. str += fmt.Sprintf("%s", string(r))
  27. } else {
  28. str += "?"
  29. }
  30. }
  31. addr++
  32. fmt.Fprintln(os.Stderr, str)
  33. }
  34. fmt.Fprintln(os.Stderr, "STORAGE =", len(log.Storage))
  35. for h, item := range log.Storage {
  36. fmt.Fprintf(os.Stderr, "%x: %x\n", h, common.LeftPadBytes(item, 32))
  37. }
  38. fmt.Fprintln(os.Stderr)
  39. }
  40. }