mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-17 17:33:47 +00:00
eth/tracers, core/vm: fix tracers output new opcodes for pre-cancun blocks
This commit is contained in:
parent
fbb8b85aee
commit
9489a46982
3 changed files with 34 additions and 6 deletions
|
|
@ -634,3 +634,11 @@ var stringToOp = map[string]OpCode{
|
||||||
func StringToOp(str string) OpCode {
|
func StringToOp(str string) OpCode {
|
||||||
return stringToOp[str]
|
return stringToOp[str]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// IsCancunOpcode specifies if an opcode is added at Cancun fork.
|
||||||
|
func (op OpCode) IsCancunOpcode() bool {
|
||||||
|
if op == BLOBHASH || op == BLOBBASEFEE || op == TLOAD || op == TSTORE || op == MCOPY {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -682,7 +682,12 @@ func TestColdAccountAccessCost(t *testing.T) {
|
||||||
Tracer: &tracing.Hooks{
|
Tracer: &tracing.Hooks{
|
||||||
OnOpcode: func(pc uint64, op byte, gas, cost uint64, scope tracing.OpContext, rData []byte, depth int, isCancun bool, err error) {
|
OnOpcode: func(pc uint64, op byte, gas, cost uint64, scope tracing.OpContext, rData []byte, depth int, isCancun bool, err error) {
|
||||||
// Uncomment to investigate failures:
|
// Uncomment to investigate failures:
|
||||||
//t.Logf("%d: %v %d", step, vm.OpCode(op).String(), cost)
|
// opString := vm.OpCode(op).String()
|
||||||
|
// Use hex string if Cancun is inactive but the opcode is invalid before Cancun fork
|
||||||
|
// if !isCancun && vm.OpCode(op).IsCancunOpcode() {
|
||||||
|
// opString = fmt.Sprintf("0x%x", byte(vm.OpCode(op)))
|
||||||
|
// }
|
||||||
|
//t.Logf("%d: %v %d", step, opString, cost)
|
||||||
if step == tc.step {
|
if step == tc.step {
|
||||||
have = cost
|
have = cost
|
||||||
}
|
}
|
||||||
|
|
@ -936,7 +941,12 @@ func TestDelegatedAccountAccessCost(t *testing.T) {
|
||||||
Tracer: &tracing.Hooks{
|
Tracer: &tracing.Hooks{
|
||||||
OnOpcode: func(pc uint64, op byte, gas, cost uint64, scope tracing.OpContext, rData []byte, depth int, isCancun bool, err error) {
|
OnOpcode: func(pc uint64, op byte, gas, cost uint64, scope tracing.OpContext, rData []byte, depth int, isCancun bool, err error) {
|
||||||
// Uncomment to investigate failures:
|
// Uncomment to investigate failures:
|
||||||
t.Logf("%d: %v %d", step, vm.OpCode(op).String(), cost)
|
opString := vm.OpCode(op).String()
|
||||||
|
// Use hex string if Cancun is inactive but the opcode is invalid before Cancun fork
|
||||||
|
if !isCancun && vm.OpCode(op).IsCancunOpcode() {
|
||||||
|
opString = fmt.Sprintf("0x%x", byte(vm.OpCode(op)))
|
||||||
|
}
|
||||||
|
t.Logf("%d: %v %d", step, opString, cost)
|
||||||
if step == tc.step {
|
if step == tc.step {
|
||||||
have = cost
|
have = cost
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -157,10 +157,15 @@ type structLogLegacy struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// toLegacyJSON converts the structLog to legacy json-encoded legacy form.
|
// toLegacyJSON converts the structLog to legacy json-encoded legacy form.
|
||||||
func (s *StructLog) toLegacyJSON() json.RawMessage {
|
func (s *StructLog) toLegacyJSON(isCancun bool) json.RawMessage {
|
||||||
|
opString := s.OpName()
|
||||||
|
// Use hex string if Cancun is inactive but the opcode is invalid before Cancun fork
|
||||||
|
if !isCancun && s.Op.IsCancunOpcode() {
|
||||||
|
opString = fmt.Sprintf("0x%x", byte(s.Op))
|
||||||
|
}
|
||||||
msg := structLogLegacy{
|
msg := structLogLegacy{
|
||||||
Pc: s.Pc,
|
Pc: s.Pc,
|
||||||
Op: s.Op.String(),
|
Op: opString,
|
||||||
Gas: s.Gas,
|
Gas: s.Gas,
|
||||||
GasCost: s.GasCost,
|
GasCost: s.GasCost,
|
||||||
Depth: s.Depth,
|
Depth: s.Depth,
|
||||||
|
|
@ -315,7 +320,7 @@ func (l *StructLogger) OnOpcode(pc uint64, opcode byte, gas, cost uint64, scope
|
||||||
|
|
||||||
// create a log
|
// create a log
|
||||||
if l.writer == nil {
|
if l.writer == nil {
|
||||||
entry := log.toLegacyJSON()
|
entry := log.toLegacyJSON(isCancun)
|
||||||
l.resultSize += len(entry)
|
l.resultSize += len(entry)
|
||||||
l.logs = append(l.logs, entry)
|
l.logs = append(l.logs, entry)
|
||||||
return
|
return
|
||||||
|
|
@ -496,7 +501,12 @@ func (t *mdLogger) OnOpcode(pc uint64, op byte, gas, cost uint64, scope tracing.
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
stack := scope.StackData()
|
stack := scope.StackData()
|
||||||
fmt.Fprintf(t.out, "| %4d | %10v | %3d |%10v |", pc, vm.OpCode(op).String(),
|
opString := vm.OpCode(op).String()
|
||||||
|
// Use hex string if Cancun is inactive but the opcode is invalid before Cancun fork
|
||||||
|
if !isCancun && vm.OpCode(op).IsCancunOpcode() {
|
||||||
|
opString = fmt.Sprintf("0x%x", byte(vm.OpCode(op)))
|
||||||
|
}
|
||||||
|
fmt.Fprintf(t.out, "| %4d | %10v | %3d |%10v |", pc, opString,
|
||||||
cost, t.env.StateDB.GetRefund())
|
cost, t.env.StateDB.GetRefund())
|
||||||
|
|
||||||
if !t.cfg.DisableStack {
|
if !t.cfg.DisableStack {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue