forked from TrueCloudLab/neoneo-go
core,vm: move get/putContextScriptHash to vm
package
This commit is contained in:
parent
be407332b9
commit
b446753c57
3 changed files with 25 additions and 25 deletions
|
@ -574,7 +574,7 @@ func contractMigrate(ic *interop.Context, v *vm.VM) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if contract.HasStorage() {
|
if contract.HasStorage() {
|
||||||
hash := getContextScriptHash(v, 0)
|
hash := v.GetContextScriptHash(0)
|
||||||
siMap, err := ic.DAO.GetStorageItems(hash)
|
siMap, err := ic.DAO.GetStorageItems(hash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
|
@ -252,35 +252,19 @@ func engineGetScriptContainer(ic *interop.Context, v *vm.VM) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// pushContextScriptHash returns script hash of the invocation stack element
|
|
||||||
// number n.
|
|
||||||
func getContextScriptHash(v *vm.VM, n int) util.Uint160 {
|
|
||||||
ctxIface := v.Istack().Peek(n).Value()
|
|
||||||
ctx := ctxIface.(*vm.Context)
|
|
||||||
return ctx.ScriptHash()
|
|
||||||
}
|
|
||||||
|
|
||||||
// pushContextScriptHash pushes to evaluation stack the script hash of the
|
|
||||||
// invocation stack element number n.
|
|
||||||
func pushContextScriptHash(v *vm.VM, n int) error {
|
|
||||||
h := getContextScriptHash(v, n)
|
|
||||||
v.Estack().PushVal(h.BytesBE())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// engineGetExecutingScriptHash returns executing script hash.
|
// engineGetExecutingScriptHash returns executing script hash.
|
||||||
func engineGetExecutingScriptHash(ic *interop.Context, v *vm.VM) error {
|
func engineGetExecutingScriptHash(ic *interop.Context, v *vm.VM) error {
|
||||||
return pushContextScriptHash(v, 0)
|
return v.PushContextScriptHash(0)
|
||||||
}
|
}
|
||||||
|
|
||||||
// engineGetCallingScriptHash returns calling script hash.
|
// engineGetCallingScriptHash returns calling script hash.
|
||||||
func engineGetCallingScriptHash(ic *interop.Context, v *vm.VM) error {
|
func engineGetCallingScriptHash(ic *interop.Context, v *vm.VM) error {
|
||||||
return pushContextScriptHash(v, 1)
|
return v.PushContextScriptHash(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// engineGetEntryScriptHash returns entry script hash.
|
// engineGetEntryScriptHash returns entry script hash.
|
||||||
func engineGetEntryScriptHash(ic *interop.Context, v *vm.VM) error {
|
func engineGetEntryScriptHash(ic *interop.Context, v *vm.VM) error {
|
||||||
return pushContextScriptHash(v, v.Istack().Len()-1)
|
return v.PushContextScriptHash(v.Istack().Len() - 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
// runtimePlatform returns the name of the platform.
|
// runtimePlatform returns the name of the platform.
|
||||||
|
@ -354,7 +338,7 @@ func runtimeNotify(ic *interop.Context, v *vm.VM) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
item = vm.NewByteArrayItem([]byte(fmt.Sprintf("bad notification: %v", err)))
|
item = vm.NewByteArrayItem([]byte(fmt.Sprintf("bad notification: %v", err)))
|
||||||
}
|
}
|
||||||
ne := state.NotificationEvent{ScriptHash: getContextScriptHash(v, 0), Item: item}
|
ne := state.NotificationEvent{ScriptHash: v.GetContextScriptHash(0), Item: item}
|
||||||
ic.Notifications = append(ic.Notifications, ne)
|
ic.Notifications = append(ic.Notifications, ne)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -363,7 +347,7 @@ func runtimeNotify(ic *interop.Context, v *vm.VM) error {
|
||||||
func runtimeLog(ic *interop.Context, v *vm.VM) error {
|
func runtimeLog(ic *interop.Context, v *vm.VM) error {
|
||||||
msg := fmt.Sprintf("%q", v.Estack().Pop().Bytes())
|
msg := fmt.Sprintf("%q", v.Estack().Pop().Bytes())
|
||||||
ic.Log.Info("runtime log",
|
ic.Log.Info("runtime log",
|
||||||
zap.Stringer("script", getContextScriptHash(v, 0)),
|
zap.Stringer("script", v.GetContextScriptHash(0)),
|
||||||
zap.String("logs", msg))
|
zap.String("logs", msg))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -445,7 +429,7 @@ func storageGet(ic *interop.Context, v *vm.VM) error {
|
||||||
// storageGetContext returns storage context (scripthash).
|
// storageGetContext returns storage context (scripthash).
|
||||||
func storageGetContext(ic *interop.Context, v *vm.VM) error {
|
func storageGetContext(ic *interop.Context, v *vm.VM) error {
|
||||||
sc := &StorageContext{
|
sc := &StorageContext{
|
||||||
ScriptHash: getContextScriptHash(v, 0),
|
ScriptHash: v.GetContextScriptHash(0),
|
||||||
ReadOnly: false,
|
ReadOnly: false,
|
||||||
}
|
}
|
||||||
v.Estack().PushVal(vm.NewInteropItem(sc))
|
v.Estack().PushVal(vm.NewInteropItem(sc))
|
||||||
|
@ -455,7 +439,7 @@ func storageGetContext(ic *interop.Context, v *vm.VM) error {
|
||||||
// storageGetReadOnlyContext returns read-only context (scripthash).
|
// storageGetReadOnlyContext returns read-only context (scripthash).
|
||||||
func storageGetReadOnlyContext(ic *interop.Context, v *vm.VM) error {
|
func storageGetReadOnlyContext(ic *interop.Context, v *vm.VM) error {
|
||||||
sc := &StorageContext{
|
sc := &StorageContext{
|
||||||
ScriptHash: getContextScriptHash(v, 0),
|
ScriptHash: v.GetContextScriptHash(0),
|
||||||
ReadOnly: true,
|
ReadOnly: true,
|
||||||
}
|
}
|
||||||
v.Estack().PushVal(vm.NewInteropItem(sc))
|
v.Estack().PushVal(vm.NewInteropItem(sc))
|
||||||
|
@ -537,7 +521,7 @@ func contractDestroy(ic *interop.Context, v *vm.VM) error {
|
||||||
if ic.Trigger != trigger.Application {
|
if ic.Trigger != trigger.Application {
|
||||||
return errors.New("can't destroy contract when not triggered by application")
|
return errors.New("can't destroy contract when not triggered by application")
|
||||||
}
|
}
|
||||||
hash := getContextScriptHash(v, 0)
|
hash := v.GetContextScriptHash(0)
|
||||||
cs, err := ic.DAO.GetContractState(hash)
|
cs, err := ic.DAO.GetContractState(hash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -209,3 +209,19 @@ func (c *Context) atBreakPoint() bool {
|
||||||
func (c *Context) String() string {
|
func (c *Context) String() string {
|
||||||
return "execution context"
|
return "execution context"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetContextScriptHash returns script hash of the invocation stack element
|
||||||
|
// number n.
|
||||||
|
func (v *VM) GetContextScriptHash(n int) util.Uint160 {
|
||||||
|
ctxIface := v.Istack().Peek(n).Value()
|
||||||
|
ctx := ctxIface.(*Context)
|
||||||
|
return ctx.ScriptHash()
|
||||||
|
}
|
||||||
|
|
||||||
|
// PushContextScriptHash pushes to evaluation stack the script hash of the
|
||||||
|
// invocation stack element number n.
|
||||||
|
func (v *VM) PushContextScriptHash(n int) error {
|
||||||
|
h := v.GetContextScriptHash(n)
|
||||||
|
v.Estack().PushVal(h.BytesBE())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue