core, compiler: return struct from GetScriptContainer interop
Closes #1173
This commit is contained in:
parent
d1b92f1767
commit
c4f7b06974
3 changed files with 14 additions and 5 deletions
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue