From dbe81f9b8059d14a818f2c610595a74b52d6ca73 Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Tue, 29 Dec 2020 13:45:49 +0300 Subject: [PATCH] smartcontract: move flags to a separate package --- pkg/compiler/interop_test.go | 4 +- pkg/compiler/syscall_test.go | 18 ++++---- pkg/compiler/vm_test.go | 4 +- pkg/core/blockchain.go | 10 ++-- pkg/core/interop/context.go | 8 ++-- pkg/core/interop/contract/call.go | 20 ++++---- pkg/core/interop/runtime/engine_test.go | 12 ++--- pkg/core/interop/runtime/util_test.go | 6 +-- pkg/core/interop/runtime/witness.go | 4 +- pkg/core/interop_system_test.go | 45 +++++++++--------- pkg/core/interops.go | 46 +++++++++---------- pkg/core/native/designate.go | 5 +- pkg/core/native/management.go | 15 +++--- pkg/core/native/native_neo.go | 19 ++++---- pkg/core/native/native_nep17.go | 13 +++--- pkg/core/native/notary.go | 17 +++---- pkg/core/native/oracle.go | 7 +-- pkg/core/native/policy.go | 31 +++++++------ pkg/core/native_contract_test.go | 11 +++-- pkg/core/native_oracle_test.go | 5 +- pkg/rpc/server/client_test.go | 3 +- pkg/rpc/server/server.go | 4 +- .../{ => callflag}/call_flags.go | 2 +- .../{ => callflag}/call_flags_test.go | 2 +- pkg/vm/context.go | 6 +-- pkg/vm/interop.go | 8 ++-- pkg/vm/json_test.go | 4 +- pkg/vm/vm.go | 10 ++-- pkg/vm/vm_test.go | 14 +++--- 29 files changed, 182 insertions(+), 171 deletions(-) rename pkg/smartcontract/{ => callflag}/call_flags.go (95%) rename pkg/smartcontract/{ => callflag}/call_flags_test.go (93%) diff --git a/pkg/compiler/interop_test.go b/pkg/compiler/interop_test.go index 57514d331..0cd5cac5c 100644 --- a/pkg/compiler/interop_test.go +++ b/pkg/compiler/interop_test.go @@ -17,7 +17,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/crypto/hash" "github.com/nspcc-dev/neo-go/pkg/encoding/address" cinterop "github.com/nspcc-dev/neo-go/pkg/interop" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/nef" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" "github.com/nspcc-dev/neo-go/pkg/util" @@ -120,7 +120,7 @@ func spawnVM(t *testing.T, ic *interop.Context, src string) *vm.VM { require.NoError(t, err) v := core.SpawnVM(ic) invokeMethod(t, testMainIdent, b, v, di) - v.LoadScriptWithFlags(b, smartcontract.All) + v.LoadScriptWithFlags(b, callflag.All) return v } diff --git a/pkg/compiler/syscall_test.go b/pkg/compiler/syscall_test.go index ffab59d83..71328df2a 100644 --- a/pkg/compiler/syscall_test.go +++ b/pkg/compiler/syscall_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/nspcc-dev/neo-go/pkg/interop/contract" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -13,14 +13,14 @@ import ( // Checks that changes in `smartcontract` are reflected in compiler interop package. func TestCallFlags(t *testing.T) { - require.EqualValues(t, contract.ReadStates, smartcontract.ReadStates) - require.EqualValues(t, contract.WriteStates, smartcontract.WriteStates) - require.EqualValues(t, contract.AllowCall, smartcontract.AllowCall) - require.EqualValues(t, contract.AllowNotify, smartcontract.AllowNotify) - require.EqualValues(t, contract.States, smartcontract.States) - require.EqualValues(t, contract.ReadOnly, smartcontract.ReadOnly) - require.EqualValues(t, contract.All, smartcontract.All) - require.EqualValues(t, contract.NoneFlag, smartcontract.NoneFlag) + require.EqualValues(t, contract.ReadStates, callflag.ReadStates) + require.EqualValues(t, contract.WriteStates, callflag.WriteStates) + require.EqualValues(t, contract.AllowCall, callflag.AllowCall) + require.EqualValues(t, contract.AllowNotify, callflag.AllowNotify) + require.EqualValues(t, contract.States, callflag.States) + require.EqualValues(t, contract.ReadOnly, callflag.ReadOnly) + require.EqualValues(t, contract.All, callflag.All) + require.EqualValues(t, contract.NoneFlag, callflag.NoneFlag) } func TestStoragePutGet(t *testing.T) { diff --git a/pkg/compiler/vm_test.go b/pkg/compiler/vm_test.go index d2141a901..bb16a2238 100644 --- a/pkg/compiler/vm_test.go +++ b/pkg/compiler/vm_test.go @@ -9,7 +9,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/compiler" "github.com/nspcc-dev/neo-go/pkg/core/interop/interopnames" "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/vm" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" @@ -85,7 +85,7 @@ func invokeMethod(t *testing.T, method string, script []byte, v *vm.VM, di *comp } } require.True(t, mainOffset >= 0) - v.LoadScriptWithFlags(script, smartcontract.All) + v.LoadScriptWithFlags(script, callflag.All) v.Jump(v.Context(), mainOffset) if initOffset >= 0 { v.Call(v.Context(), initOffset) diff --git a/pkg/core/blockchain.go b/pkg/core/blockchain.go index 69fc2e2ae..30b3a1a4a 100644 --- a/pkg/core/blockchain.go +++ b/pkg/core/blockchain.go @@ -27,7 +27,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/encoding/bigint" "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" "github.com/nspcc-dev/neo-go/pkg/util" @@ -624,7 +624,7 @@ func (bc *Blockchain) storeBlock(block *block.Block, txpool *mempool.Pool) error systemInterop := bc.newInteropContext(trigger.Application, cache, block, tx) v := systemInterop.SpawnVM() - v.LoadScriptWithFlags(tx.Script, smartcontract.All) + v.LoadScriptWithFlags(tx.Script, callflag.All) v.SetPriceGetter(bc.getPrice) v.GasLimit = tx.SystemFee @@ -765,7 +765,7 @@ func (bc *Blockchain) storeBlock(block *block.Block, txpool *mempool.Pool) error func (bc *Blockchain) runPersist(script []byte, block *block.Block, cache *dao.Cached, trig trigger.Type) (*state.AppExecResult, error) { systemInterop := bc.newInteropContext(trig, cache, block, nil) v := systemInterop.SpawnVM() - v.LoadScriptWithFlags(script, smartcontract.WriteStates|smartcontract.AllowCall) + v.LoadScriptWithFlags(script, callflag.WriteStates|callflag.AllowCall) v.SetPriceGetter(bc.getPrice) if err := v.Run(); err != nil { return nil, fmt.Errorf("VM has failed: %w", err) @@ -1659,7 +1659,7 @@ func (bc *Blockchain) initVerificationVM(ic *interop.Context, hash util.Uint160, if bc.contracts.ByHash(hash) != nil { return ErrNativeContractWitness } - v.LoadScriptWithFlags(witness.VerificationScript, smartcontract.NoneFlag) + v.LoadScriptWithFlags(witness.VerificationScript, callflag.NoneFlag) } else { cs, err := ic.GetContract(hash) if err != nil { @@ -1670,7 +1670,7 @@ func (bc *Blockchain) initVerificationVM(ic *interop.Context, hash util.Uint160, return ErrInvalidVerificationContract } initMD := cs.Manifest.ABI.GetMethod(manifest.MethodInit) - v.LoadScriptWithHash(cs.NEF.Script, hash, smartcontract.ReadStates) + v.LoadScriptWithHash(cs.NEF.Script, hash, callflag.ReadStates) v.Jump(v.Context(), md.Offset) if cs.ID <= 0 { diff --git a/pkg/core/interop/context.go b/pkg/core/interop/context.go index 1fc51562d..e25b809d7 100644 --- a/pkg/core/interop/context.go +++ b/pkg/core/interop/context.go @@ -11,7 +11,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/state" "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/smartcontract/nef" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" @@ -77,7 +77,7 @@ type Function struct { Price int64 // RequiredFlags is a set of flags which must be set during script invocations. // Default value is NoneFlag i.e. no flags are required. - RequiredFlags smartcontract.CallFlag + RequiredFlags callflag.CallFlag } // Method is a signature for a native method. @@ -88,7 +88,7 @@ type MethodAndPrice struct { Func Method MD *manifest.Method Price int64 - RequiredFlags smartcontract.CallFlag + RequiredFlags callflag.CallFlag } // Contract is an interface for all native contracts. @@ -132,7 +132,7 @@ func NewContractMD(name string) *ContractMD { func (c *ContractMD) AddMethod(md *MethodAndPrice, desc *manifest.Method) { c.Manifest.ABI.Methods = append(c.Manifest.ABI.Methods, *desc) md.MD = desc - desc.Safe = md.RequiredFlags&(smartcontract.All^smartcontract.ReadOnly) == 0 + desc.Safe = md.RequiredFlags&(callflag.All^callflag.ReadOnly) == 0 c.Methods[desc.Name] = *md } diff --git a/pkg/core/interop/contract/call.go b/pkg/core/interop/contract/call.go index 6b33dfbbf..66eb9a028 100644 --- a/pkg/core/interop/contract/call.go +++ b/pkg/core/interop/contract/call.go @@ -7,7 +7,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/interop" "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm" @@ -19,7 +19,7 @@ func Call(ic *interop.Context) error { h := ic.VM.Estack().Pop().Bytes() method := ic.VM.Estack().Pop().String() args := ic.VM.Estack().Pop().Array() - return callExInternal(ic, h, method, args, smartcontract.All) + return callExInternal(ic, h, method, args, callflag.All) } // CallEx calls a contract with flags. @@ -27,14 +27,14 @@ func CallEx(ic *interop.Context) error { h := ic.VM.Estack().Pop().Bytes() method := ic.VM.Estack().Pop().String() args := ic.VM.Estack().Pop().Array() - flags := smartcontract.CallFlag(int32(ic.VM.Estack().Pop().BigInt().Int64())) - if flags&^smartcontract.All != 0 { + fs := callflag.CallFlag(int32(ic.VM.Estack().Pop().BigInt().Int64())) + if fs&^callflag.All != 0 { return errors.New("call flags out of range") } - return callExInternal(ic, h, method, args, flags) + return callExInternal(ic, h, method, args, fs) } -func callExInternal(ic *interop.Context, h []byte, name string, args []stackitem.Item, f smartcontract.CallFlag) error { +func callExInternal(ic *interop.Context, h []byte, name string, args []stackitem.Item, f callflag.CallFlag) error { u, err := util.Uint160DecodeBytesBE(h) if err != nil { return errors.New("invalid contract hash") @@ -51,7 +51,7 @@ func callExInternal(ic *interop.Context, h []byte, name string, args []stackitem return errors.New("method not found") } if md.Safe { - f &^= smartcontract.WriteStates + f &^= callflag.WriteStates } else if ctx := ic.VM.Context(); ctx != nil && ctx.IsDeployed() { curr, err := ic.GetContract(ic.VM.GetCurrentScriptHash()) if err == nil { @@ -65,13 +65,13 @@ func callExInternal(ic *interop.Context, h []byte, name string, args []stackitem // CallExInternal calls a contract with flags and can't be invoked directly by user. func CallExInternal(ic *interop.Context, cs *state.Contract, - name string, args []stackitem.Item, f smartcontract.CallFlag, checkReturn vm.CheckReturnState) error { + name string, args []stackitem.Item, f callflag.CallFlag, checkReturn vm.CheckReturnState) error { return callExFromNative(ic, ic.VM.GetCurrentScriptHash(), cs, name, args, f, checkReturn) } // callExFromNative calls a contract with flags using provided calling hash. func callExFromNative(ic *interop.Context, caller util.Uint160, cs *state.Contract, - name string, args []stackitem.Item, f smartcontract.CallFlag, checkReturn vm.CheckReturnState) error { + name string, args []stackitem.Item, f callflag.CallFlag, checkReturn vm.CheckReturnState) error { md := cs.Manifest.ABI.GetMethod(name) if md == nil { return fmt.Errorf("method '%s' not found", name) @@ -116,7 +116,7 @@ var ErrNativeCall = errors.New("error during call from native") // CallFromNative performs synchronous call from native contract. func CallFromNative(ic *interop.Context, caller util.Uint160, cs *state.Contract, method string, args []stackitem.Item, checkReturn vm.CheckReturnState) error { startSize := ic.VM.Istack().Len() - if err := callExFromNative(ic, caller, cs, method, args, smartcontract.All, checkReturn); err != nil { + if err := callExFromNative(ic, caller, cs, method, args, callflag.All, checkReturn); err != nil { return err } diff --git a/pkg/core/interop/runtime/engine_test.go b/pkg/core/interop/runtime/engine_test.go index 18be7d1ef..a6a23ae3e 100644 --- a/pkg/core/interop/runtime/engine_test.go +++ b/pkg/core/interop/runtime/engine_test.go @@ -11,7 +11,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/block" "github.com/nspcc-dev/neo-go/pkg/core/interop" "github.com/nspcc-dev/neo-go/pkg/crypto/hash" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm" @@ -64,7 +64,7 @@ func TestGetScriptHash(t *testing.T) { } ic := &interop.Context{VM: vm.New()} - ic.VM.LoadScriptWithFlags(scripts[0].s, smartcontract.All) + ic.VM.LoadScriptWithFlags(scripts[0].s, callflag.All) require.NoError(t, GetEntryScriptHash(ic)) checkStack(t, ic.VM, scripts[0].h.BytesBE()) require.NoError(t, GetCallingScriptHash(ic)) @@ -72,7 +72,7 @@ func TestGetScriptHash(t *testing.T) { require.NoError(t, GetExecutingScriptHash(ic)) checkStack(t, ic.VM, scripts[0].h.BytesBE()) - ic.VM.LoadScriptWithHash(scripts[1].s, scripts[1].h, smartcontract.All) + ic.VM.LoadScriptWithHash(scripts[1].s, scripts[1].h, callflag.All) require.NoError(t, GetEntryScriptHash(ic)) checkStack(t, ic.VM, scripts[0].h.BytesBE()) require.NoError(t, GetCallingScriptHash(ic)) @@ -108,7 +108,7 @@ func TestLog(t *testing.T) { t.Run("big message", func(t *testing.T) { ic := &interop.Context{Log: zap.NewNop(), VM: vm.New()} - ic.VM.LoadScriptWithHash([]byte{1}, h, smartcontract.All) + ic.VM.LoadScriptWithHash([]byte{1}, h, callflag.All) ic.VM.Estack().PushVal(string(make([]byte, MaxNotificationSize+1))) require.Error(t, Log(ic)) }) @@ -116,7 +116,7 @@ func TestLog(t *testing.T) { t.Run("good", func(t *testing.T) { log, buf := newL(zapcore.InfoLevel) ic := &interop.Context{Log: log, VM: vm.New()} - ic.VM.LoadScriptWithHash([]byte{1}, h, smartcontract.All) + ic.VM.LoadScriptWithHash([]byte{1}, h, callflag.All) ic.VM.Estack().PushVal("hello") require.NoError(t, Log(ic)) @@ -137,7 +137,7 @@ func TestNotify(t *testing.T) { h := random.Uint160() newIC := func(name string, args interface{}) *interop.Context { ic := &interop.Context{VM: vm.New()} - ic.VM.LoadScriptWithHash([]byte{1}, h, smartcontract.NoneFlag) + ic.VM.LoadScriptWithHash([]byte{1}, h, callflag.NoneFlag) ic.VM.Estack().PushVal(args) ic.VM.Estack().PushVal(name) return ic diff --git a/pkg/core/interop/runtime/util_test.go b/pkg/core/interop/runtime/util_test.go index e48238d56..b614188a3 100644 --- a/pkg/core/interop/runtime/util_test.go +++ b/pkg/core/interop/runtime/util_test.go @@ -6,7 +6,7 @@ import ( "github.com/nspcc-dev/neo-go/internal/random" "github.com/nspcc-dev/neo-go/pkg/core/interop" "github.com/nspcc-dev/neo-go/pkg/core/state" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" @@ -103,13 +103,13 @@ func TestRuntimeGetInvocationCounter(t *testing.T) { t.Run("No invocations", func(t *testing.T) { h1 := h h1[0] ^= 0xFF - ic.VM.LoadScriptWithHash([]byte{1}, h1, smartcontract.NoneFlag) + ic.VM.LoadScriptWithHash([]byte{1}, h1, callflag.NoneFlag) // do not return an error in this case. require.NoError(t, GetInvocationCounter(ic)) checkStack(t, ic.VM, 1) }) t.Run("NonZero", func(t *testing.T) { - ic.VM.LoadScriptWithHash([]byte{1}, h, smartcontract.NoneFlag) + ic.VM.LoadScriptWithHash([]byte{1}, h, callflag.NoneFlag) require.NoError(t, GetInvocationCounter(ic)) checkStack(t, ic.VM, 42) }) diff --git a/pkg/core/interop/runtime/witness.go b/pkg/core/interop/runtime/witness.go index 5123128a0..900f5d282 100644 --- a/pkg/core/interop/runtime/witness.go +++ b/pkg/core/interop/runtime/witness.go @@ -8,7 +8,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/interop" "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm" ) @@ -53,7 +53,7 @@ func checkScope(ic *interop.Context, tx *transaction.Transaction, v *vm.VM, hash if callingScriptHash.Equals(util.Uint160{}) { return false, nil } - if !v.Context().GetCallFlags().Has(smartcontract.ReadStates) { + if !v.Context().GetCallFlags().Has(callflag.ReadStates) { return false, errors.New("missing ReadStates call flag") } cs, err := ic.GetContract(callingScriptHash) diff --git a/pkg/core/interop_system_test.go b/pkg/core/interop_system_test.go index b0ff75c2a..c007dd11d 100644 --- a/pkg/core/interop_system_test.go +++ b/pkg/core/interop_system_test.go @@ -20,6 +20,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/smartcontract/nef" "github.com/nspcc-dev/neo-go/pkg/util" @@ -418,7 +419,7 @@ func TestStorageDelete(t *testing.T) { defer bc.Close() require.NoError(t, bc.contracts.Management.PutContractState(ic.DAO, cs)) - v.LoadScriptWithHash(cs.NEF.Script, cs.Hash, smartcontract.All) + v.LoadScriptWithHash(cs.NEF.Script, cs.Hash, callflag.All) put := func(key, value string, flag int) { v.Estack().PushVal(flag) v.Estack().PushVal(value) @@ -655,14 +656,14 @@ func getTestContractState(bc *Blockchain) (*state.Contract, *state.Contract) { func loadScript(ic *interop.Context, script []byte, args ...interface{}) { ic.SpawnVM() - ic.VM.LoadScriptWithFlags(script, smartcontract.AllowCall) + ic.VM.LoadScriptWithFlags(script, callflag.AllowCall) for i := range args { ic.VM.Estack().PushVal(args[i]) } ic.VM.GasLimit = -1 } -func loadScriptWithHashAndFlags(ic *interop.Context, script []byte, hash util.Uint160, f smartcontract.CallFlag, args ...interface{}) { +func loadScriptWithHashAndFlags(ic *interop.Context, script []byte, hash util.Uint160, f callflag.CallFlag, args ...interface{}) { ic.SpawnVM() ic.VM.LoadScriptWithHash(script, hash, f) for i := range args { @@ -706,7 +707,7 @@ func TestContractCall(t *testing.T) { runInvalid := func(args ...interface{}) func(t *testing.T) { return func(t *testing.T) { - loadScriptWithHashAndFlags(ic, currScript, h, smartcontract.All, 42) + loadScriptWithHashAndFlags(ic, currScript, h, callflag.All, 42) for i := range args { ic.VM.Estack().PushVal(args[i]) } @@ -782,9 +783,9 @@ func TestContractGetCallFlags(t *testing.T) { v, ic, bc := createVM(t) defer bc.Close() - v.LoadScriptWithHash([]byte{byte(opcode.RET)}, util.Uint160{1, 2, 3}, smartcontract.All) + v.LoadScriptWithHash([]byte{byte(opcode.RET)}, util.Uint160{1, 2, 3}, callflag.All) require.NoError(t, contractGetCallFlags(ic)) - require.Equal(t, int64(smartcontract.All), v.Estack().Pop().Value().(*big.Int).Int64()) + require.Equal(t, int64(callflag.All), v.Estack().Pop().Value().(*big.Int).Int64()) } func TestPointerCallback(t *testing.T) { @@ -955,7 +956,7 @@ func TestRuntimeCheckWitness(t *testing.T) { check(t, ic, []byte{1, 2, 3}, true) }) t.Run("script container is not a transaction", func(t *testing.T) { - loadScriptWithHashAndFlags(ic, script, scriptHash, smartcontract.ReadStates) + loadScriptWithHashAndFlags(ic, script, scriptHash, callflag.ReadStates) check(t, ic, random.Uint160().BytesBE(), true) }) t.Run("check scope", func(t *testing.T) { @@ -972,8 +973,8 @@ func TestRuntimeCheckWitness(t *testing.T) { } ic.Container = tx callingScriptHash := scriptHash - loadScriptWithHashAndFlags(ic, script, callingScriptHash, smartcontract.All) - ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), smartcontract.AllowCall) + loadScriptWithHashAndFlags(ic, script, callingScriptHash, callflag.All) + ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), callflag.AllowCall) check(t, ic, hash.BytesBE(), true) }) t.Run("CustomGroups, unknown contract", func(t *testing.T) { @@ -989,8 +990,8 @@ func TestRuntimeCheckWitness(t *testing.T) { } ic.Container = tx callingScriptHash := scriptHash - loadScriptWithHashAndFlags(ic, script, callingScriptHash, smartcontract.All) - ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), smartcontract.ReadStates) + loadScriptWithHashAndFlags(ic, script, callingScriptHash, callflag.All) + ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), callflag.ReadStates) check(t, ic, hash.BytesBE(), true) }) }) @@ -999,16 +1000,16 @@ func TestRuntimeCheckWitness(t *testing.T) { t.Run("calling scripthash", func(t *testing.T) { t.Run("hashed witness", func(t *testing.T) { callingScriptHash := scriptHash - loadScriptWithHashAndFlags(ic, script, callingScriptHash, smartcontract.All) - ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), smartcontract.All) + loadScriptWithHashAndFlags(ic, script, callingScriptHash, callflag.All) + ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), callflag.All) check(t, ic, callingScriptHash.BytesBE(), false, true) }) t.Run("keyed witness", func(t *testing.T) { pk, err := keys.NewPrivateKey() require.NoError(t, err) callingScriptHash := pk.PublicKey().GetScriptHash() - loadScriptWithHashAndFlags(ic, script, callingScriptHash, smartcontract.All) - ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), smartcontract.All) + loadScriptWithHashAndFlags(ic, script, callingScriptHash, callflag.All) + ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), callflag.All) check(t, ic, pk.PublicKey().Bytes(), false, true) }) }) @@ -1023,7 +1024,7 @@ func TestRuntimeCheckWitness(t *testing.T) { }, }, } - loadScriptWithHashAndFlags(ic, script, scriptHash, smartcontract.ReadStates) + loadScriptWithHashAndFlags(ic, script, scriptHash, callflag.ReadStates) ic.Container = tx check(t, ic, hash.BytesBE(), false, true) }) @@ -1037,7 +1038,7 @@ func TestRuntimeCheckWitness(t *testing.T) { }, }, } - loadScriptWithHashAndFlags(ic, script, scriptHash, smartcontract.ReadStates) + loadScriptWithHashAndFlags(ic, script, scriptHash, callflag.ReadStates) ic.Container = tx check(t, ic, hash.BytesBE(), false, true) }) @@ -1052,7 +1053,7 @@ func TestRuntimeCheckWitness(t *testing.T) { }, }, } - loadScriptWithHashAndFlags(ic, script, scriptHash, smartcontract.ReadStates) + loadScriptWithHashAndFlags(ic, script, scriptHash, callflag.ReadStates) ic.Container = tx check(t, ic, hash.BytesBE(), false, true) }) @@ -1068,7 +1069,7 @@ func TestRuntimeCheckWitness(t *testing.T) { }, }, } - loadScriptWithHashAndFlags(ic, script, scriptHash, smartcontract.ReadStates) + loadScriptWithHashAndFlags(ic, script, scriptHash, callflag.ReadStates) ic.Container = tx check(t, ic, hash.BytesBE(), false, false) }) @@ -1098,8 +1099,8 @@ func TestRuntimeCheckWitness(t *testing.T) { }, } require.NoError(t, bc.contracts.Management.PutContractState(ic.DAO, contractState)) - loadScriptWithHashAndFlags(ic, contractScript, contractScriptHash, smartcontract.All) - ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), smartcontract.ReadStates) + loadScriptWithHashAndFlags(ic, contractScript, contractScriptHash, callflag.All) + ic.VM.LoadScriptWithHash([]byte{0x1}, random.Uint160(), callflag.ReadStates) ic.Container = tx check(t, ic, targetHash.BytesBE(), false, true) }) @@ -1114,7 +1115,7 @@ func TestRuntimeCheckWitness(t *testing.T) { }, }, } - loadScriptWithHashAndFlags(ic, script, scriptHash, smartcontract.ReadStates) + loadScriptWithHashAndFlags(ic, script, scriptHash, callflag.ReadStates) ic.Container = tx check(t, ic, hash.BytesBE(), false, false) }) diff --git a/pkg/core/interops.go b/pkg/core/interops.go index 4e061ac8c..e91bc2c68 100644 --- a/pkg/core/interops.go +++ b/pkg/core/interops.go @@ -19,7 +19,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/interop/json" "github.com/nspcc-dev/neo-go/pkg/core/interop/runtime" "github.com/nspcc-dev/neo-go/pkg/core/native" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/vm" ) @@ -42,29 +42,29 @@ var systemInterops = []interop.Function{ {Name: interopnames.SystemBinaryItoa, Func: binary.Itoa, Price: 1 << 12, ParamCount: 2}, {Name: interopnames.SystemBinarySerialize, Func: binary.Serialize, Price: 1 << 12, ParamCount: 1}, {Name: interopnames.SystemBlockchainGetBlock, Func: bcGetBlock, Price: 1 << 16, - RequiredFlags: smartcontract.ReadStates, ParamCount: 1}, + RequiredFlags: callflag.ReadStates, ParamCount: 1}, {Name: interopnames.SystemBlockchainGetHeight, Func: bcGetHeight, Price: 1 << 4, - RequiredFlags: smartcontract.ReadStates}, + RequiredFlags: callflag.ReadStates}, {Name: interopnames.SystemBlockchainGetTransaction, Func: bcGetTransaction, Price: 1 << 15, - RequiredFlags: smartcontract.ReadStates, ParamCount: 1}, + RequiredFlags: callflag.ReadStates, ParamCount: 1}, {Name: interopnames.SystemBlockchainGetTransactionFromBlock, Func: bcGetTransactionFromBlock, Price: 1 << 15, - RequiredFlags: smartcontract.ReadStates, ParamCount: 2}, + RequiredFlags: callflag.ReadStates, ParamCount: 2}, {Name: interopnames.SystemBlockchainGetTransactionHeight, Func: bcGetTransactionHeight, Price: 1 << 15, - RequiredFlags: smartcontract.ReadStates, ParamCount: 1}, + RequiredFlags: callflag.ReadStates, ParamCount: 1}, {Name: interopnames.SystemCallbackCreate, Func: callback.Create, Price: 1 << 4, ParamCount: 3, DisallowCallback: true}, {Name: interopnames.SystemCallbackCreateFromMethod, Func: callback.CreateFromMethod, Price: 1 << 15, ParamCount: 2, DisallowCallback: true}, {Name: interopnames.SystemCallbackCreateFromSyscall, Func: callback.CreateFromSyscall, Price: 1 << 4, ParamCount: 1, DisallowCallback: true}, {Name: interopnames.SystemCallbackInvoke, Func: callback.Invoke, Price: 1 << 15, ParamCount: 2, DisallowCallback: true}, {Name: interopnames.SystemContractCall, Func: contract.Call, Price: 1 << 15, - RequiredFlags: smartcontract.AllowCall, ParamCount: 3, DisallowCallback: true}, + RequiredFlags: callflag.AllowCall, ParamCount: 3, DisallowCallback: true}, {Name: interopnames.SystemContractCallEx, Func: contract.CallEx, Price: 1 << 15, - RequiredFlags: smartcontract.AllowCall, ParamCount: 4, DisallowCallback: true}, + RequiredFlags: callflag.AllowCall, ParamCount: 4, DisallowCallback: true}, {Name: interopnames.SystemContractCallNative, Func: native.Call, Price: 0, ParamCount: 1, DisallowCallback: true}, {Name: interopnames.SystemContractCreateStandardAccount, Func: contractCreateStandardAccount, Price: 1 << 8, ParamCount: 1, DisallowCallback: true}, - {Name: interopnames.SystemContractIsStandard, Func: contractIsStandard, Price: 1 << 10, RequiredFlags: smartcontract.ReadStates, ParamCount: 1}, + {Name: interopnames.SystemContractIsStandard, Func: contractIsStandard, Price: 1 << 10, RequiredFlags: callflag.ReadStates, ParamCount: 1}, {Name: interopnames.SystemContractGetCallFlags, Func: contractGetCallFlags, Price: 1 << 10, DisallowCallback: true}, - {Name: interopnames.SystemContractNativeOnPersist, Func: native.OnPersist, Price: 0, RequiredFlags: smartcontract.WriteStates, DisallowCallback: true}, - {Name: interopnames.SystemContractNativePostPersist, Func: native.PostPersist, Price: 0, RequiredFlags: smartcontract.WriteStates, DisallowCallback: true}, + {Name: interopnames.SystemContractNativeOnPersist, Func: native.OnPersist, Price: 0, RequiredFlags: callflag.WriteStates, DisallowCallback: true}, + {Name: interopnames.SystemContractNativePostPersist, Func: native.PostPersist, Price: 0, RequiredFlags: callflag.WriteStates, DisallowCallback: true}, {Name: interopnames.SystemEnumeratorConcat, Func: enumerator.Concat, Price: 1 << 4, ParamCount: 2, DisallowCallback: true}, {Name: interopnames.SystemEnumeratorCreate, Func: enumerator.Create, Price: 1 << 4, ParamCount: 1, DisallowCallback: true}, {Name: interopnames.SystemEnumeratorNext, Func: enumerator.Next, Price: 1 << 15, ParamCount: 1, DisallowCallback: true}, @@ -77,7 +77,7 @@ var systemInterops = []interop.Function{ {Name: interopnames.SystemJSONDeserialize, Func: json.Deserialize, Price: 1 << 14, ParamCount: 1}, {Name: interopnames.SystemJSONSerialize, Func: json.Serialize, Price: 1 << 12, ParamCount: 1}, {Name: interopnames.SystemRuntimeCheckWitness, Func: runtime.CheckWitness, Price: 1 << 10, - RequiredFlags: smartcontract.NoneFlag, ParamCount: 1}, + RequiredFlags: callflag.NoneFlag, ParamCount: 1}, {Name: interopnames.SystemRuntimeGasLeft, Func: runtime.GasLeft, Price: 1 << 4}, {Name: interopnames.SystemRuntimeGetCallingScriptHash, Func: runtime.GetCallingScriptHash, Price: 1 << 4}, {Name: interopnames.SystemRuntimeGetEntryScriptHash, Func: runtime.GetEntryScriptHash, Price: 1 << 4}, @@ -85,29 +85,29 @@ var systemInterops = []interop.Function{ {Name: interopnames.SystemRuntimeGetInvocationCounter, Func: runtime.GetInvocationCounter, Price: 1 << 4}, {Name: interopnames.SystemRuntimeGetNotifications, Func: runtime.GetNotifications, Price: 1 << 8, ParamCount: 1}, {Name: interopnames.SystemRuntimeGetScriptContainer, Func: engineGetScriptContainer, Price: 1 << 3}, - {Name: interopnames.SystemRuntimeGetTime, Func: runtime.GetTime, Price: 1 << 3, RequiredFlags: smartcontract.ReadStates}, + {Name: interopnames.SystemRuntimeGetTime, Func: runtime.GetTime, Price: 1 << 3, RequiredFlags: callflag.ReadStates}, {Name: interopnames.SystemRuntimeGetTrigger, Func: runtime.GetTrigger, Price: 1 << 3}, - {Name: interopnames.SystemRuntimeLog, Func: runtime.Log, Price: 1 << 15, RequiredFlags: smartcontract.AllowNotify, + {Name: interopnames.SystemRuntimeLog, Func: runtime.Log, Price: 1 << 15, RequiredFlags: callflag.AllowNotify, ParamCount: 1, DisallowCallback: true}, - {Name: interopnames.SystemRuntimeNotify, Func: runtime.Notify, Price: 1 << 15, RequiredFlags: smartcontract.AllowNotify, + {Name: interopnames.SystemRuntimeNotify, Func: runtime.Notify, Price: 1 << 15, RequiredFlags: callflag.AllowNotify, ParamCount: 2, DisallowCallback: true}, {Name: interopnames.SystemRuntimePlatform, Func: runtime.Platform, Price: 1 << 3}, {Name: interopnames.SystemStorageDelete, Func: storageDelete, Price: 0, - RequiredFlags: smartcontract.WriteStates, ParamCount: 2, DisallowCallback: true}, - {Name: interopnames.SystemStorageFind, Func: storageFind, Price: 1 << 15, RequiredFlags: smartcontract.ReadStates, + RequiredFlags: callflag.WriteStates, ParamCount: 2, DisallowCallback: true}, + {Name: interopnames.SystemStorageFind, Func: storageFind, Price: 1 << 15, RequiredFlags: callflag.ReadStates, ParamCount: 2, DisallowCallback: true}, - {Name: interopnames.SystemStorageGet, Func: storageGet, Price: 1 << 15, RequiredFlags: smartcontract.ReadStates, + {Name: interopnames.SystemStorageGet, Func: storageGet, Price: 1 << 15, RequiredFlags: callflag.ReadStates, ParamCount: 2, DisallowCallback: true}, {Name: interopnames.SystemStorageGetContext, Func: storageGetContext, Price: 1 << 4, - RequiredFlags: smartcontract.ReadStates, DisallowCallback: true}, + RequiredFlags: callflag.ReadStates, DisallowCallback: true}, {Name: interopnames.SystemStorageGetReadOnlyContext, Func: storageGetReadOnlyContext, Price: 1 << 4, - RequiredFlags: smartcontract.ReadStates, DisallowCallback: true}, - {Name: interopnames.SystemStoragePut, Func: storagePut, Price: 0, RequiredFlags: smartcontract.WriteStates, + RequiredFlags: callflag.ReadStates, DisallowCallback: true}, + {Name: interopnames.SystemStoragePut, Func: storagePut, Price: 0, RequiredFlags: callflag.WriteStates, ParamCount: 3, DisallowCallback: true}, // These don't have static price in C# code. - {Name: interopnames.SystemStoragePutEx, Func: storagePutEx, Price: 0, RequiredFlags: smartcontract.WriteStates, + {Name: interopnames.SystemStoragePutEx, Func: storagePutEx, Price: 0, RequiredFlags: callflag.WriteStates, ParamCount: 4, DisallowCallback: true}, {Name: interopnames.SystemStorageAsReadOnly, Func: storageContextAsReadOnly, Price: 1 << 4, - RequiredFlags: smartcontract.ReadStates, ParamCount: 1, DisallowCallback: true}, + RequiredFlags: callflag.ReadStates, ParamCount: 1, DisallowCallback: true}, } var neoInterops = []interop.Function{ diff --git a/pkg/core/native/designate.go b/pkg/core/native/designate.go index 5fa9ec822..0453c7bf4 100644 --- a/pkg/core/native/designate.go +++ b/pkg/core/native/designate.go @@ -16,6 +16,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" @@ -78,13 +79,13 @@ func newDesignate(p2pSigExtensionsEnabled bool) *Designate { desc := newDescriptor("getDesignatedByRole", smartcontract.ArrayType, manifest.NewParameter("role", smartcontract.IntegerType), manifest.NewParameter("index", smartcontract.IntegerType)) - md := newMethodAndPrice(s.getDesignatedByRole, 1000000, smartcontract.ReadStates) + md := newMethodAndPrice(s.getDesignatedByRole, 1000000, callflag.ReadStates) s.AddMethod(md, desc) desc = newDescriptor("designateAsRole", smartcontract.VoidType, manifest.NewParameter("role", smartcontract.IntegerType), manifest.NewParameter("nodes", smartcontract.ArrayType)) - md = newMethodAndPrice(s.designateAsRole, 0, smartcontract.WriteStates) + md = newMethodAndPrice(s.designateAsRole, 0, callflag.WriteStates) s.AddMethod(md, desc) return s diff --git a/pkg/core/native/management.go b/pkg/core/native/management.go index 40bbe885f..2bacf4037 100644 --- a/pkg/core/native/management.go +++ b/pkg/core/native/management.go @@ -17,6 +17,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/encoding/bigint" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/smartcontract/nef" "github.com/nspcc-dev/neo-go/pkg/util" @@ -65,32 +66,32 @@ func newManagement() *Management { desc := newDescriptor("getContract", smartcontract.ArrayType, manifest.NewParameter("hash", smartcontract.Hash160Type)) - md := newMethodAndPrice(m.getContract, 1000000, smartcontract.ReadStates) + md := newMethodAndPrice(m.getContract, 1000000, callflag.ReadStates) m.AddMethod(md, desc) desc = newDescriptor("deploy", smartcontract.ArrayType, manifest.NewParameter("script", smartcontract.ByteArrayType), manifest.NewParameter("manifest", smartcontract.ByteArrayType)) - md = newMethodAndPrice(m.deploy, 0, smartcontract.WriteStates|smartcontract.AllowNotify) + md = newMethodAndPrice(m.deploy, 0, callflag.WriteStates|callflag.AllowNotify) m.AddMethod(md, desc) desc = newDescriptor("update", smartcontract.VoidType, manifest.NewParameter("script", smartcontract.ByteArrayType), manifest.NewParameter("manifest", smartcontract.ByteArrayType)) - md = newMethodAndPrice(m.update, 0, smartcontract.WriteStates|smartcontract.AllowNotify) + md = newMethodAndPrice(m.update, 0, callflag.WriteStates|callflag.AllowNotify) m.AddMethod(md, desc) desc = newDescriptor("destroy", smartcontract.VoidType) - md = newMethodAndPrice(m.destroy, 1000000, smartcontract.WriteStates|smartcontract.AllowNotify) + md = newMethodAndPrice(m.destroy, 1000000, callflag.WriteStates|callflag.AllowNotify) m.AddMethod(md, desc) desc = newDescriptor("getMinimumDeploymentFee", smartcontract.IntegerType) - md = newMethodAndPrice(m.getMinimumDeploymentFee, 100_0000, smartcontract.ReadStates) + md = newMethodAndPrice(m.getMinimumDeploymentFee, 100_0000, callflag.ReadStates) m.AddMethod(md, desc) desc = newDescriptor("setMinimumDeploymentFee", smartcontract.BoolType, manifest.NewParameter("value", smartcontract.IntegerType)) - md = newMethodAndPrice(m.setMinimumDeploymentFee, 300_0000, smartcontract.WriteStates) + md = newMethodAndPrice(m.setMinimumDeploymentFee, 300_0000, callflag.WriteStates) m.AddMethod(md, desc) hashParam := manifest.NewParameter("Hash", smartcontract.Hash160Type) @@ -383,7 +384,7 @@ func callDeploy(ic *interop.Context, cs *state.Contract, isUpdate bool) { md := cs.Manifest.ABI.GetMethod(manifest.MethodDeploy) if md != nil { err := contract.CallExInternal(ic, cs, manifest.MethodDeploy, - []stackitem.Item{stackitem.NewBool(isUpdate)}, smartcontract.All, vm.EnsureIsEmpty) + []stackitem.Item{stackitem.NewBool(isUpdate)}, callflag.All, vm.EnsureIsEmpty) if err != nil { panic(err) } diff --git a/pkg/core/native/native_neo.go b/pkg/core/native/native_neo.go index 97af91911..8bfed4bbd 100644 --- a/pkg/core/native/native_neo.go +++ b/pkg/core/native/native_neo.go @@ -22,6 +22,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/encoding/bigint" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" @@ -110,44 +111,44 @@ func newNEO() *NEO { desc := newDescriptor("unclaimedGas", smartcontract.IntegerType, manifest.NewParameter("account", smartcontract.Hash160Type), manifest.NewParameter("end", smartcontract.IntegerType)) - md := newMethodAndPrice(n.unclaimedGas, 3000000, smartcontract.ReadStates) + md := newMethodAndPrice(n.unclaimedGas, 3000000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("registerCandidate", smartcontract.BoolType, manifest.NewParameter("pubkey", smartcontract.ByteArrayType)) - md = newMethodAndPrice(n.registerCandidate, 5000000, smartcontract.WriteStates) + md = newMethodAndPrice(n.registerCandidate, 5000000, callflag.WriteStates) n.AddMethod(md, desc) desc = newDescriptor("unregisterCandidate", smartcontract.BoolType, manifest.NewParameter("pubkey", smartcontract.ByteArrayType)) - md = newMethodAndPrice(n.unregisterCandidate, 5000000, smartcontract.WriteStates) + md = newMethodAndPrice(n.unregisterCandidate, 5000000, callflag.WriteStates) n.AddMethod(md, desc) desc = newDescriptor("vote", smartcontract.BoolType, manifest.NewParameter("account", smartcontract.Hash160Type), manifest.NewParameter("pubkey", smartcontract.ByteArrayType)) - md = newMethodAndPrice(n.vote, 5000000, smartcontract.WriteStates) + md = newMethodAndPrice(n.vote, 5000000, callflag.WriteStates) n.AddMethod(md, desc) desc = newDescriptor("getCandidates", smartcontract.ArrayType) - md = newMethodAndPrice(n.getCandidatesCall, 100000000, smartcontract.ReadStates) + md = newMethodAndPrice(n.getCandidatesCall, 100000000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("getŠ”ommittee", smartcontract.ArrayType) - md = newMethodAndPrice(n.getCommittee, 100000000, smartcontract.ReadStates) + md = newMethodAndPrice(n.getCommittee, 100000000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("getNextBlockValidators", smartcontract.ArrayType) - md = newMethodAndPrice(n.getNextBlockValidators, 100000000, smartcontract.ReadStates) + md = newMethodAndPrice(n.getNextBlockValidators, 100000000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("getGasPerBlock", smartcontract.IntegerType) - md = newMethodAndPrice(n.getGASPerBlock, 100_0000, smartcontract.ReadStates) + md = newMethodAndPrice(n.getGASPerBlock, 100_0000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("setGasPerBlock", smartcontract.BoolType, manifest.NewParameter("gasPerBlock", smartcontract.IntegerType)) - md = newMethodAndPrice(n.setGASPerBlock, 500_0000, smartcontract.WriteStates) + md = newMethodAndPrice(n.setGASPerBlock, 500_0000, callflag.WriteStates) n.AddMethod(md, desc) return n diff --git a/pkg/core/native/native_nep17.go b/pkg/core/native/native_nep17.go index cfb2cf7cd..563b10ced 100644 --- a/pkg/core/native/native_nep17.go +++ b/pkg/core/native/native_nep17.go @@ -12,6 +12,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/state" "github.com/nspcc-dev/neo-go/pkg/encoding/bigint" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm" @@ -47,20 +48,20 @@ func newNEP17Native(name string) *nep17TokenNative { n.Manifest.SupportedStandards = []string{manifest.NEP17StandardName} desc := newDescriptor("symbol", smartcontract.StringType) - md := newMethodAndPrice(n.Symbol, 0, smartcontract.NoneFlag) + md := newMethodAndPrice(n.Symbol, 0, callflag.NoneFlag) n.AddMethod(md, desc) desc = newDescriptor("decimals", smartcontract.IntegerType) - md = newMethodAndPrice(n.Decimals, 0, smartcontract.NoneFlag) + md = newMethodAndPrice(n.Decimals, 0, callflag.NoneFlag) n.AddMethod(md, desc) desc = newDescriptor("totalSupply", smartcontract.IntegerType) - md = newMethodAndPrice(n.TotalSupply, 1000000, smartcontract.ReadStates) + md = newMethodAndPrice(n.TotalSupply, 1000000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("balanceOf", smartcontract.IntegerType, manifest.NewParameter("account", smartcontract.Hash160Type)) - md = newMethodAndPrice(n.balanceOf, 1000000, smartcontract.ReadStates) + md = newMethodAndPrice(n.balanceOf, 1000000, callflag.ReadStates) n.AddMethod(md, desc) transferParams := []manifest.Parameter{ @@ -71,7 +72,7 @@ func newNEP17Native(name string) *nep17TokenNative { desc = newDescriptor("transfer", smartcontract.BoolType, append(transferParams, manifest.NewParameter("data", smartcontract.AnyType))..., ) - md = newMethodAndPrice(n.Transfer, 9000000, smartcontract.WriteStates|smartcontract.AllowCall|smartcontract.AllowNotify) + md = newMethodAndPrice(n.Transfer, 9000000, callflag.WriteStates|callflag.AllowCall|callflag.AllowNotify) n.AddMethod(md, desc) n.AddEvent("Transfer", transferParams...) @@ -278,7 +279,7 @@ func newDescriptor(name string, ret smartcontract.ParamType, ps ...manifest.Para } } -func newMethodAndPrice(f interop.Method, price int64, flags smartcontract.CallFlag) *interop.MethodAndPrice { +func newMethodAndPrice(f interop.Method, price int64, flags callflag.CallFlag) *interop.MethodAndPrice { return &interop.MethodAndPrice{ Func: f, Price: price, diff --git a/pkg/core/native/notary.go b/pkg/core/native/notary.go index 110355688..855413a4e 100644 --- a/pkg/core/native/notary.go +++ b/pkg/core/native/notary.go @@ -17,6 +17,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm" @@ -59,43 +60,43 @@ func newNotary() *Notary { manifest.NewParameter("from", smartcontract.Hash160Type), manifest.NewParameter("amount", smartcontract.IntegerType), manifest.NewParameter("data", smartcontract.AnyType)) - md := newMethodAndPrice(n.onPayment, 100_0000, smartcontract.WriteStates) + md := newMethodAndPrice(n.onPayment, 100_0000, callflag.WriteStates) n.AddMethod(md, desc) desc = newDescriptor("lockDepositUntil", smartcontract.BoolType, manifest.NewParameter("address", smartcontract.Hash160Type), manifest.NewParameter("till", smartcontract.IntegerType)) - md = newMethodAndPrice(n.lockDepositUntil, 100_0000, smartcontract.WriteStates) + md = newMethodAndPrice(n.lockDepositUntil, 100_0000, callflag.WriteStates) n.AddMethod(md, desc) desc = newDescriptor("withdraw", smartcontract.BoolType, manifest.NewParameter("from", smartcontract.Hash160Type), manifest.NewParameter("to", smartcontract.Hash160Type)) - md = newMethodAndPrice(n.withdraw, 100_0000, smartcontract.WriteStates) + md = newMethodAndPrice(n.withdraw, 100_0000, callflag.WriteStates) n.AddMethod(md, desc) desc = newDescriptor("balanceOf", smartcontract.IntegerType, manifest.NewParameter("addr", smartcontract.Hash160Type)) - md = newMethodAndPrice(n.balanceOf, 100_0000, smartcontract.ReadStates) + md = newMethodAndPrice(n.balanceOf, 100_0000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("expirationOf", smartcontract.IntegerType, manifest.NewParameter("addr", smartcontract.Hash160Type)) - md = newMethodAndPrice(n.expirationOf, 100_0000, smartcontract.ReadStates) + md = newMethodAndPrice(n.expirationOf, 100_0000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("verify", smartcontract.BoolType, manifest.NewParameter("signature", smartcontract.SignatureType)) - md = newMethodAndPrice(n.verify, 100_0000, smartcontract.ReadStates) + md = newMethodAndPrice(n.verify, 100_0000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("getMaxNotValidBeforeDelta", smartcontract.IntegerType) - md = newMethodAndPrice(n.getMaxNotValidBeforeDelta, 100_0000, smartcontract.ReadStates) + md = newMethodAndPrice(n.getMaxNotValidBeforeDelta, 100_0000, callflag.ReadStates) n.AddMethod(md, desc) desc = newDescriptor("setMaxNotValidBeforeDelta", smartcontract.BoolType, manifest.NewParameter("value", smartcontract.IntegerType)) - md = newMethodAndPrice(n.setMaxNotValidBeforeDelta, 300_0000, smartcontract.WriteStates) + md = newMethodAndPrice(n.setMaxNotValidBeforeDelta, 300_0000, callflag.WriteStates) n.AddMethod(md, desc) return n diff --git a/pkg/core/native/oracle.go b/pkg/core/native/oracle.go index dd5f79aae..dfb204ae8 100644 --- a/pkg/core/native/oracle.go +++ b/pkg/core/native/oracle.go @@ -20,6 +20,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm" @@ -94,15 +95,15 @@ func newOracle() *Oracle { manifest.NewParameter("callback", smartcontract.StringType), manifest.NewParameter("userData", smartcontract.AnyType), manifest.NewParameter("gasForResponse", smartcontract.IntegerType)) - md := newMethodAndPrice(o.request, oracleRequestPrice, smartcontract.WriteStates|smartcontract.AllowNotify) + md := newMethodAndPrice(o.request, oracleRequestPrice, callflag.WriteStates|callflag.AllowNotify) o.AddMethod(md, desc) desc = newDescriptor("finish", smartcontract.VoidType) - md = newMethodAndPrice(o.finish, 0, smartcontract.WriteStates|smartcontract.AllowCall|smartcontract.AllowNotify) + md = newMethodAndPrice(o.finish, 0, callflag.WriteStates|callflag.AllowCall|callflag.AllowNotify) o.AddMethod(md, desc) desc = newDescriptor("verify", smartcontract.BoolType) - md = newMethodAndPrice(o.verify, 100_0000, smartcontract.NoneFlag) + md = newMethodAndPrice(o.verify, 100_0000, callflag.NoneFlag) o.AddMethod(md, desc) o.AddEvent("OracleRequest", manifest.NewParameter("Id", smartcontract.IntegerType), diff --git a/pkg/core/native/policy.go b/pkg/core/native/policy.go index 3c7411315..6861586e8 100644 --- a/pkg/core/native/policy.go +++ b/pkg/core/native/policy.go @@ -14,6 +14,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/network/payload" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" @@ -85,72 +86,72 @@ func newPolicy() *Policy { p.ContractID = policyContractID desc := newDescriptor("getMaxTransactionsPerBlock", smartcontract.IntegerType) - md := newMethodAndPrice(p.getMaxTransactionsPerBlock, 1000000, smartcontract.ReadStates) + md := newMethodAndPrice(p.getMaxTransactionsPerBlock, 1000000, callflag.ReadStates) p.AddMethod(md, desc) desc = newDescriptor("getMaxBlockSize", smartcontract.IntegerType) - md = newMethodAndPrice(p.getMaxBlockSize, 1000000, smartcontract.ReadStates) + md = newMethodAndPrice(p.getMaxBlockSize, 1000000, callflag.ReadStates) p.AddMethod(md, desc) desc = newDescriptor("getFeePerByte", smartcontract.IntegerType) - md = newMethodAndPrice(p.getFeePerByte, 1000000, smartcontract.ReadStates) + md = newMethodAndPrice(p.getFeePerByte, 1000000, callflag.ReadStates) p.AddMethod(md, desc) desc = newDescriptor("isBlocked", smartcontract.BoolType, manifest.NewParameter("account", smartcontract.Hash160Type)) - md = newMethodAndPrice(p.isBlocked, 1000000, smartcontract.ReadStates) + md = newMethodAndPrice(p.isBlocked, 1000000, callflag.ReadStates) p.AddMethod(md, desc) desc = newDescriptor("getMaxBlockSystemFee", smartcontract.IntegerType) - md = newMethodAndPrice(p.getMaxBlockSystemFee, 1000000, smartcontract.ReadStates) + md = newMethodAndPrice(p.getMaxBlockSystemFee, 1000000, callflag.ReadStates) p.AddMethod(md, desc) desc = newDescriptor("getExecFeeFactor", smartcontract.IntegerType) - md = newMethodAndPrice(p.getExecFeeFactor, 1000000, smartcontract.ReadStates) + md = newMethodAndPrice(p.getExecFeeFactor, 1000000, callflag.ReadStates) p.AddMethod(md, desc) desc = newDescriptor("setExecFeeFactor", smartcontract.BoolType, manifest.NewParameter("value", smartcontract.IntegerType)) - md = newMethodAndPrice(p.setExecFeeFactor, 3000000, smartcontract.WriteStates) + md = newMethodAndPrice(p.setExecFeeFactor, 3000000, callflag.WriteStates) p.AddMethod(md, desc) desc = newDescriptor("getStoragePrice", smartcontract.IntegerType) - md = newMethodAndPrice(p.getStoragePrice, 1000000, smartcontract.ReadStates) + md = newMethodAndPrice(p.getStoragePrice, 1000000, callflag.ReadStates) p.AddMethod(md, desc) desc = newDescriptor("setStoragePrice", smartcontract.BoolType, manifest.NewParameter("value", smartcontract.IntegerType)) - md = newMethodAndPrice(p.setStoragePrice, 3000000, smartcontract.WriteStates) + md = newMethodAndPrice(p.setStoragePrice, 3000000, callflag.WriteStates) p.AddMethod(md, desc) desc = newDescriptor("setMaxBlockSize", smartcontract.BoolType, manifest.NewParameter("value", smartcontract.IntegerType)) - md = newMethodAndPrice(p.setMaxBlockSize, 3000000, smartcontract.WriteStates) + md = newMethodAndPrice(p.setMaxBlockSize, 3000000, callflag.WriteStates) p.AddMethod(md, desc) desc = newDescriptor("setMaxTransactionsPerBlock", smartcontract.BoolType, manifest.NewParameter("value", smartcontract.IntegerType)) - md = newMethodAndPrice(p.setMaxTransactionsPerBlock, 3000000, smartcontract.WriteStates) + md = newMethodAndPrice(p.setMaxTransactionsPerBlock, 3000000, callflag.WriteStates) p.AddMethod(md, desc) desc = newDescriptor("setFeePerByte", smartcontract.BoolType, manifest.NewParameter("value", smartcontract.IntegerType)) - md = newMethodAndPrice(p.setFeePerByte, 3000000, smartcontract.WriteStates) + md = newMethodAndPrice(p.setFeePerByte, 3000000, callflag.WriteStates) p.AddMethod(md, desc) desc = newDescriptor("setMaxBlockSystemFee", smartcontract.BoolType, manifest.NewParameter("value", smartcontract.IntegerType)) - md = newMethodAndPrice(p.setMaxBlockSystemFee, 3000000, smartcontract.WriteStates) + md = newMethodAndPrice(p.setMaxBlockSystemFee, 3000000, callflag.WriteStates) p.AddMethod(md, desc) desc = newDescriptor("blockAccount", smartcontract.BoolType, manifest.NewParameter("account", smartcontract.Hash160Type)) - md = newMethodAndPrice(p.blockAccount, 3000000, smartcontract.WriteStates) + md = newMethodAndPrice(p.blockAccount, 3000000, callflag.WriteStates) p.AddMethod(md, desc) desc = newDescriptor("unblockAccount", smartcontract.BoolType, manifest.NewParameter("account", smartcontract.Hash160Type)) - md = newMethodAndPrice(p.unblockAccount, 3000000, smartcontract.WriteStates) + md = newMethodAndPrice(p.unblockAccount, 3000000, callflag.WriteStates) p.AddMethod(md, desc) return p diff --git a/pkg/core/native_contract_test.go b/pkg/core/native_contract_test.go index a5fdb3fa0..09d4bfc4f 100644 --- a/pkg/core/native_contract_test.go +++ b/pkg/core/native_contract_test.go @@ -14,6 +14,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/state" "github.com/nspcc-dev/neo-go/pkg/core/storage" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" "github.com/nspcc-dev/neo-go/pkg/util" @@ -75,7 +76,7 @@ func newTestNative() *testNative { md := &interop.MethodAndPrice{ Func: tn.sum, Price: testSumPrice, - RequiredFlags: smartcontract.NoneFlag, + RequiredFlags: callflag.NoneFlag, } tn.meta.AddMethod(md, desc) @@ -92,7 +93,7 @@ func newTestNative() *testNative { md = &interop.MethodAndPrice{ Func: tn.callOtherContractNoReturn, Price: testSumPrice, - RequiredFlags: smartcontract.NoneFlag} + RequiredFlags: callflag.NoneFlag} tn.meta.AddMethod(md, desc) desc = &manifest.Method{ @@ -107,7 +108,7 @@ func newTestNative() *testNative { md = &interop.MethodAndPrice{ Func: tn.callOtherContractWithReturn, Price: testSumPrice, - RequiredFlags: smartcontract.NoneFlag} + RequiredFlags: callflag.NoneFlag} tn.meta.AddMethod(md, desc) return tn @@ -220,7 +221,7 @@ func TestNativeContract_InvokeInternal(t *testing.T) { v := ic.SpawnVM() t.Run("fail, bad current script hash", func(t *testing.T) { - v.LoadScriptWithHash([]byte{1}, util.Uint160{1, 2, 3}, smartcontract.All) + v.LoadScriptWithHash([]byte{1}, util.Uint160{1, 2, 3}, callflag.All) v.Estack().PushVal(stackitem.NewArray([]stackitem.Item{stackitem.NewBigInteger(big.NewInt(14)), stackitem.NewBigInteger(big.NewInt(28))})) v.Estack().PushVal("sum") v.Estack().PushVal(tn.Metadata().Name) @@ -230,7 +231,7 @@ func TestNativeContract_InvokeInternal(t *testing.T) { }) t.Run("success", func(t *testing.T) { - v.LoadScriptWithHash([]byte{1}, tn.Metadata().Hash, smartcontract.All) + v.LoadScriptWithHash([]byte{1}, tn.Metadata().Hash, callflag.All) v.Estack().PushVal(stackitem.NewArray([]stackitem.Item{stackitem.NewBigInteger(big.NewInt(14)), stackitem.NewBigInteger(big.NewInt(28))})) v.Estack().PushVal("sum") v.Estack().PushVal(tn.Metadata().Name) diff --git a/pkg/core/native_oracle_test.go b/pkg/core/native_oracle_test.go index 5341b848a..7dfcb860e 100644 --- a/pkg/core/native_oracle_test.go +++ b/pkg/core/native_oracle_test.go @@ -16,6 +16,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/smartcontract/nef" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" @@ -171,7 +172,7 @@ func TestOracle_Request(t *testing.T) { // We need to ensure that callback is called thus, executing full script is necessary. resp.ID = 1 - ic.VM.LoadScriptWithFlags(tx.Script, smartcontract.All) + ic.VM.LoadScriptWithFlags(tx.Script, callflag.All) require.NoError(t, ic.VM.Run()) si := ic.DAO.GetStorageItem(cs.ID, []byte("lastOracleResponse")) @@ -211,7 +212,7 @@ func TestOracle_Request(t *testing.T) { }} ic := bc.newInteropContext(trigger.Application, bc.dao, bc.newBlock(tx), tx) ic.VM = ic.SpawnVM() - ic.VM.LoadScriptWithFlags(tx.Script, smartcontract.All) + ic.VM.LoadScriptWithFlags(tx.Script, callflag.All) require.Error(t, ic.VM.Run()) // Request is cleaned up even if callback failed. diff --git a/pkg/rpc/server/client_test.go b/pkg/rpc/server/client_test.go index 61d3cde8f..ddc2b1c1d 100644 --- a/pkg/rpc/server/client_test.go +++ b/pkg/rpc/server/client_test.go @@ -14,6 +14,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/rpc/client" "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/opcode" @@ -276,7 +277,7 @@ func TestCreateNEP17TransferTx(t *testing.T) { require.NoError(t, acc.SignTx(tx)) require.NoError(t, chain.VerifyTx(tx)) v := chain.GetTestVM(trigger.Application, tx, nil) - v.LoadScriptWithFlags(tx.Script, smartcontract.All) + v.LoadScriptWithFlags(tx.Script, callflag.All) require.NoError(t, v.Run()) } diff --git a/pkg/rpc/server/server.go b/pkg/rpc/server/server.go index cf7959d72..01a15412b 100644 --- a/pkg/rpc/server/server.go +++ b/pkg/rpc/server/server.go @@ -31,7 +31,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/rpc/request" "github.com/nspcc-dev/neo-go/pkg/rpc/response" "github.com/nspcc-dev/neo-go/pkg/rpc/response/result" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/manifest" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" "github.com/nspcc-dev/neo-go/pkg/util" @@ -1188,7 +1188,7 @@ func (s *Server) runScriptInVM(t trigger.Type, script []byte, tx *transaction.Tr vm := s.chain.GetTestVM(t, tx, b) vm.GasLimit = int64(s.config.MaxGasInvoke) - vm.LoadScriptWithFlags(script, smartcontract.All) + vm.LoadScriptWithFlags(script, callflag.All) err = vm.Run() var faultException string if err != nil { diff --git a/pkg/smartcontract/call_flags.go b/pkg/smartcontract/callflag/call_flags.go similarity index 95% rename from pkg/smartcontract/call_flags.go rename to pkg/smartcontract/callflag/call_flags.go index 6921d4887..07bbb15b4 100644 --- a/pkg/smartcontract/call_flags.go +++ b/pkg/smartcontract/callflag/call_flags.go @@ -1,4 +1,4 @@ -package smartcontract +package callflag // CallFlag represents call flag. type CallFlag byte diff --git a/pkg/smartcontract/call_flags_test.go b/pkg/smartcontract/callflag/call_flags_test.go similarity index 93% rename from pkg/smartcontract/call_flags_test.go rename to pkg/smartcontract/callflag/call_flags_test.go index f50f12ce5..7dd9048b8 100644 --- a/pkg/smartcontract/call_flags_test.go +++ b/pkg/smartcontract/callflag/call_flags_test.go @@ -1,4 +1,4 @@ -package smartcontract +package callflag import ( "testing" diff --git a/pkg/vm/context.go b/pkg/vm/context.go index 7d70b08e9..3c75b8060 100644 --- a/pkg/vm/context.go +++ b/pkg/vm/context.go @@ -6,7 +6,7 @@ import ( "math/big" "github.com/nspcc-dev/neo-go/pkg/crypto/hash" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/util" "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" @@ -46,7 +46,7 @@ type Context struct { isDeployed bool // Call flags this context was created with. - callFlag smartcontract.CallFlag + callFlag callflag.CallFlag // CheckReturn specifies if amount of return values needs to be checked. CheckReturn CheckReturnState @@ -194,7 +194,7 @@ func (c *Context) Copy() *Context { } // GetCallFlags returns calling flags context was created with. -func (c *Context) GetCallFlags() smartcontract.CallFlag { +func (c *Context) GetCallFlags() callflag.CallFlag { return c.callFlag } diff --git a/pkg/vm/interop.go b/pkg/vm/interop.go index b91f1ebc5..be45f3971 100644 --- a/pkg/vm/interop.go +++ b/pkg/vm/interop.go @@ -6,7 +6,7 @@ import ( "sort" "github.com/nspcc-dev/neo-go/pkg/core/interop/interopnames" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" ) @@ -15,7 +15,7 @@ type interopIDFuncPrice struct { ID uint32 Func func(vm *VM) error Price int64 - RequiredFlags smartcontract.CallFlag + RequiredFlags callflag.CallFlag } var defaultVMInterops = []interopIDFuncPrice{ @@ -24,9 +24,9 @@ var defaultVMInterops = []interopIDFuncPrice{ {ID: interopnames.ToID([]byte(interopnames.SystemBinarySerialize)), Func: RuntimeSerialize, Price: 1 << 12}, {ID: interopnames.ToID([]byte(interopnames.SystemRuntimeLog)), - Func: runtimeLog, Price: 1 << 15, RequiredFlags: smartcontract.AllowNotify}, + Func: runtimeLog, Price: 1 << 15, RequiredFlags: callflag.AllowNotify}, {ID: interopnames.ToID([]byte(interopnames.SystemRuntimeNotify)), - Func: runtimeNotify, Price: 1 << 15, RequiredFlags: smartcontract.AllowNotify}, + Func: runtimeNotify, Price: 1 << 15, RequiredFlags: callflag.AllowNotify}, {ID: interopnames.ToID([]byte(interopnames.SystemEnumeratorCreate)), Func: EnumeratorCreate, Price: 1 << 4}, {ID: interopnames.ToID([]byte(interopnames.SystemEnumeratorNext)), diff --git a/pkg/vm/json_test.go b/pkg/vm/json_test.go index d41b6cd96..f5f85695c 100644 --- a/pkg/vm/json_test.go +++ b/pkg/vm/json_test.go @@ -15,7 +15,7 @@ import ( "testing" "github.com/nspcc-dev/neo-go/pkg/encoding/bigint" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" "github.com/stretchr/testify/require" @@ -114,7 +114,7 @@ func testSyscallHandler(v *VM, id uint32) error { case 0x77777777: v.Estack().PushVal(stackitem.NewInterop(new(int))) case 0x66666666: - if !v.Context().callFlag.Has(smartcontract.ReadOnly) { + if !v.Context().callFlag.Has(callflag.ReadOnly) { return errors.New("invalid call flags") } v.Estack().PushVal(stackitem.NewInterop(new(int))) diff --git a/pkg/vm/vm.go b/pkg/vm/vm.go index a586086b8..5d6711ace 100644 --- a/pkg/vm/vm.go +++ b/pkg/vm/vm.go @@ -17,7 +17,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/interop/interopnames" "github.com/nspcc-dev/neo-go/pkg/crypto/keys" "github.com/nspcc-dev/neo-go/pkg/encoding/bigint" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/smartcontract/nef" "github.com/nspcc-dev/neo-go/pkg/smartcontract/trigger" "github.com/nspcc-dev/neo-go/pkg/util" @@ -272,11 +272,11 @@ func (v *VM) Load(prog []byte) { // will immediately push a new context created from this script to // the invocation stack and starts executing it. func (v *VM) LoadScript(b []byte) { - v.LoadScriptWithFlags(b, smartcontract.NoneFlag) + v.LoadScriptWithFlags(b, callflag.NoneFlag) } // LoadScriptWithFlags loads script and sets call flag to f. -func (v *VM) LoadScriptWithFlags(b []byte, f smartcontract.CallFlag) { +func (v *VM) LoadScriptWithFlags(b []byte, f callflag.CallFlag) { v.checkInvocationStackSize() ctx := NewContext(b) v.estack = v.newItemStack("estack") @@ -294,14 +294,14 @@ func (v *VM) LoadScriptWithFlags(b []byte, f smartcontract.CallFlag) { // assumes that it is used for deployed contracts setting context's parameters // accordingly). It's up to user of this function to make sure the script and hash match // each other. -func (v *VM) LoadScriptWithHash(b []byte, hash util.Uint160, f smartcontract.CallFlag) { +func (v *VM) LoadScriptWithHash(b []byte, hash util.Uint160, f callflag.CallFlag) { shash := v.GetCurrentScriptHash() v.LoadScriptWithCallingHash(shash, b, hash, f) } // LoadScriptWithCallingHash is similar to LoadScriptWithHash but sets calling hash explicitly. // It should be used for calling from native contracts. -func (v *VM) LoadScriptWithCallingHash(caller util.Uint160, b []byte, hash util.Uint160, f smartcontract.CallFlag) { +func (v *VM) LoadScriptWithCallingHash(caller util.Uint160, b []byte, hash util.Uint160, f callflag.CallFlag) { v.LoadScriptWithFlags(b, f) ctx := v.Context() ctx.isDeployed = true diff --git a/pkg/vm/vm_test.go b/pkg/vm/vm_test.go index a813304bf..7a924c10d 100644 --- a/pkg/vm/vm_test.go +++ b/pkg/vm/vm_test.go @@ -14,7 +14,7 @@ import ( "github.com/nspcc-dev/neo-go/pkg/core/interop/interopnames" "github.com/nspcc-dev/neo-go/pkg/encoding/bigint" "github.com/nspcc-dev/neo-go/pkg/io" - "github.com/nspcc-dev/neo-go/pkg/smartcontract" + "github.com/nspcc-dev/neo-go/pkg/smartcontract/callflag" "github.com/nspcc-dev/neo-go/pkg/vm/emit" "github.com/nspcc-dev/neo-go/pkg/vm/opcode" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" @@ -805,7 +805,7 @@ func TestSerializeInterop(t *testing.T) { require.True(t, vm.HasFailed()) } -func getTestCallFlagsFunc(syscall []byte, flags smartcontract.CallFlag, result interface{}) func(t *testing.T) { +func getTestCallFlagsFunc(syscall []byte, flags callflag.CallFlag, result interface{}) func(t *testing.T) { return func(t *testing.T) { script := append([]byte{byte(opcode.SYSCALL)}, syscall...) v := newTestVM() @@ -823,11 +823,11 @@ func getTestCallFlagsFunc(syscall []byte, flags smartcontract.CallFlag, result i func TestCallFlags(t *testing.T) { noFlags := []byte{0x77, 0x77, 0x77, 0x77} readOnly := []byte{0x66, 0x66, 0x66, 0x66} - t.Run("NoFlagsNoRequired", getTestCallFlagsFunc(noFlags, smartcontract.NoneFlag, new(int))) - t.Run("ProvideFlagsNoRequired", getTestCallFlagsFunc(noFlags, smartcontract.AllowCall, new(int))) - t.Run("NoFlagsSomeRequired", getTestCallFlagsFunc(readOnly, smartcontract.NoneFlag, nil)) - t.Run("OnlyOneProvided", getTestCallFlagsFunc(readOnly, smartcontract.AllowCall, nil)) - t.Run("AllFlagsProvided", getTestCallFlagsFunc(readOnly, smartcontract.ReadOnly, new(int))) + t.Run("NoFlagsNoRequired", getTestCallFlagsFunc(noFlags, callflag.NoneFlag, new(int))) + t.Run("ProvideFlagsNoRequired", getTestCallFlagsFunc(noFlags, callflag.AllowCall, new(int))) + t.Run("NoFlagsSomeRequired", getTestCallFlagsFunc(readOnly, callflag.NoneFlag, nil)) + t.Run("OnlyOneProvided", getTestCallFlagsFunc(readOnly, callflag.AllowCall, nil)) + t.Run("AllFlagsProvided", getTestCallFlagsFunc(readOnly, callflag.ReadOnly, new(int))) } func callNTimes(n uint16) []byte {