core, compiler: return struct from GetScriptContainer interop

Closes #1173
This commit is contained in:
Anna Shaleva 2020-07-13 13:05:31 +03:00
parent d1b92f1767
commit c4f7b06974
3 changed files with 14 additions and 5 deletions

View file

@ -7,7 +7,7 @@ import (
// Main is that famous Main() function, you know.
func Main() bool {
tx := runtime.GetScriptContainer()
runtime.Notify(tx)
runtime.Notify(tx.Hash)
callingScriptHash := runtime.GetCallingScriptHash()
runtime.Notify(callingScriptHash)

View file

@ -1146,7 +1146,7 @@ func (c *codegen) convertSyscall(expr *ast.CallExpr, api, name string) {
}
emit.Syscall(c.prog.BinWriter, api)
switch name {
case "GetTransaction", "GetBlock":
case "GetTransaction", "GetBlock", "GetScriptContainer":
c.emitConvert(stackitem.StructT)
}

View file

@ -179,10 +179,19 @@ func bcGetTransactionHeight(ic *interop.Context, v *vm.VM) error {
return nil
}
// engineGetScriptContainer returns transaction that contains the script being
// run.
// engineGetScriptContainer returns transaction or block that contains the script
// being run.
func engineGetScriptContainer(ic *interop.Context, v *vm.VM) error {
v.Estack().PushVal(stackitem.NewInterop(ic.Container))
var item stackitem.Item
switch t := ic.Container.(type) {
case *transaction.Transaction:
item = transactionToStackItem(t)
case *block.Block:
item = blockToStackItem(t)
default:
return errors.New("unknown script container")
}
v.Estack().PushVal(item)
return nil
}