vm: fix istack marshaling, fix #2799

This commit is contained in:
Roman Khimov 2022-11-16 00:40:12 +03:00
parent 90582faacd
commit aef01bf663
2 changed files with 20 additions and 1 deletions

View file

@ -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)
}

View file

@ -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.