Merge pull request #1174 from nspcc-dev/neo3/interop/getscriptcontainer

core, compiler: return tx from GetScriptContainer interop
This commit is contained in:
Roman Khimov 2020-07-14 08:58:52 +03:00 committed by GitHub
commit 4c23aa1d7c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
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
}