diff --git a/internal/ethapi/tracer.go b/internal/ethapi/tracer.go index 37cb7ec362..16ec6ebf0a 100644 --- a/internal/ethapi/tracer.go +++ b/internal/ethapi/tracer.go @@ -284,8 +284,10 @@ func (jst *JavascriptTracer) CaptureState(env vm.Environment, pc uint64, op vm.O jst.stack.stack = stack jst.db.db = env.Db() + ocw := &opCodeWrapper{op} + jst.log["pc"] = pc - jst.log["op"] = &opCodeWrapper{op} + jst.log["op"] = ocw.toValue(jst.vm) jst.log["gas"] = gas.Int64() jst.log["gasPrice"] = cost.Int64() jst.log["memory"] = jst.memvalue diff --git a/internal/ethapi/tracer_test.go b/internal/ethapi/tracer_test.go index dbc38bbbc4..301ff48404 100644 --- a/internal/ethapi/tracer_test.go +++ b/internal/ethapi/tracer_test.go @@ -19,6 +19,7 @@ package ethapi import ( "errors" "math/big" + "reflect" "testing" "time" @@ -140,12 +141,26 @@ func TestStack(t *testing.T) { t.Fatal(err) } - value, ok := ret.([]int) - if !ok { - t.Errorf("Expected return value to be []int, was %T", ret) + expected := []int{0, 1, 2} + if !reflect.DeepEqual(ret, expected) { + t.Errorf("Expected return value to be %#v, got %#v", expected, ret) } - if len(value) != 3 || value[0] != 0 || value[1] != 1 || value[2] != 2 { - t.Errorf("Expected return value to be [0 1 2], got %v", value) +} + +func TestOpcodes(t *testing.T) { + tracer, err := NewJavascriptTracer("{opcodes: [], step: function(log) { this.opcodes.push(log.op.toString()); }, result: function() { return this.opcodes; }}") + if err != nil { + t.Fatal(err) + } + + ret, err := runTrace(tracer) + if err != nil { + t.Fatal(err) + } + + expected := []string{"PUSH1", "PUSH1", "STOP"} + if !reflect.DeepEqual(ret, expected) { + t.Errorf("Expected return value to be %#v, got %#v", expected, ret) } }