diff --git a/pkg/vm/context.go b/pkg/vm/context.go index 6c086249f..cc16ac867 100644 --- a/pkg/vm/context.go +++ b/pkg/vm/context.go @@ -72,6 +72,13 @@ type Context struct { retCount int } +type contextAux struct { + Script string + IP int + NextIP int + Caller string +} + // ContextUnloadCallback is a callback method used on context unloading from istack. type ContextUnloadCallback func(ctx *Context, commit bool) error @@ -357,3 +364,14 @@ func (c *Context) HasTryBlock() bool { } return false } + +// MarshalJSON implements the JSON marshalling interface. +func (c *Context) MarshalJSON() ([]byte, error) { + var aux = contextAux{ + Script: c.ScriptHash().StringLE(), + IP: c.ip, + NextIP: c.nextip, + Caller: c.sc.callingScriptHash.StringLE(), + } + return json.Marshal(aux) +} diff --git a/pkg/vm/vm.go b/pkg/vm/vm.go index 5e672ccd5..7cc768d0f 100644 --- a/pkg/vm/vm.go +++ b/pkg/vm/vm.go @@ -382,7 +382,8 @@ func (v *VM) PopResult() interface{} { // DumpIStack returns json formatted representation of the invocation stack. func (v *VM) DumpIStack() string { - return dumpStack(&v.istack) + b, _ := json.MarshalIndent(v.istack.ToArray(), "", " ") + return string(b) } // DumpEStack returns json formatted representation of the execution stack.