vm: add cached ScriptHash() to Context
Avoid recalculating it over and over again in interop.
This commit is contained in:
parent
0afaff2f79
commit
0abd55c2c2
2 changed files with 14 additions and 1 deletions
|
@ -254,7 +254,7 @@ func (ic *interopContext) engineGetScriptContainer(v *vm.VM) error {
|
|||
func getContextScriptHash(v *vm.VM, n int) util.Uint160 {
|
||||
ctxIface := v.Istack().Peek(n).Value()
|
||||
ctx := ctxIface.(*vm.Context)
|
||||
return hash.Hash160(ctx.Program())
|
||||
return ctx.ScriptHash()
|
||||
}
|
||||
|
||||
// pushContextScriptHash pushes to evaluation stack the script hash of the
|
||||
|
|
|
@ -3,7 +3,9 @@ package vm
|
|||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/CityOfZion/neo-go/pkg/crypto/hash"
|
||||
"github.com/CityOfZion/neo-go/pkg/io"
|
||||
"github.com/CityOfZion/neo-go/pkg/util"
|
||||
"github.com/CityOfZion/neo-go/pkg/vm/opcode"
|
||||
)
|
||||
|
||||
|
@ -29,6 +31,9 @@ type Context struct {
|
|||
|
||||
// Alt stack pointer.
|
||||
astack *Stack
|
||||
|
||||
// Script hash of the prog.
|
||||
scriptHash util.Uint160
|
||||
}
|
||||
|
||||
// NewContext returns a new Context object.
|
||||
|
@ -125,6 +130,14 @@ func (c *Context) Program() []byte {
|
|||
return c.prog
|
||||
}
|
||||
|
||||
// ScriptHash returns a hash of the script in the current context.
|
||||
func (c *Context) ScriptHash() util.Uint160 {
|
||||
if c.scriptHash.Equals(util.Uint160{}) {
|
||||
c.scriptHash = hash.Hash160(c.prog)
|
||||
}
|
||||
return c.scriptHash
|
||||
}
|
||||
|
||||
// Value implements StackItem interface.
|
||||
func (c *Context) Value() interface{} {
|
||||
return c
|
||||
|
|
Loading…
Reference in a new issue