From 0472a0b0b1f1119396c2f3c95053d7ee7d6c175f Mon Sep 17 00:00:00 2001 From: Evgenii Stratonikov Date: Wed, 10 Jun 2020 11:49:39 +0300 Subject: [PATCH] core: move Neo.Runtime/Enumerator/Iterator.* interops to System.* --- pkg/compiler/codegen.go | 10 ++--- pkg/compiler/panic_test.go | 2 +- pkg/compiler/syscall.go | 36 +++++++-------- pkg/compiler/vm_test.go | 2 +- pkg/core/blockchain_test.go | 6 +-- pkg/core/interops.go | 29 ++++-------- pkg/interop/enumerator/enumerator.go | 8 ++-- pkg/interop/iterator/iterator.go | 14 +++--- pkg/interop/runtime/runtime.go | 14 +++--- pkg/rpc/server/server_test.go | 8 ++-- pkg/rpc/server/testdata/test_contract.avm | Bin 727 -> 727 bytes pkg/rpc/server/testdata/testblocks.acc | Bin 6516 -> 6516 bytes pkg/vm/emit/emit_test.go | 6 +-- pkg/vm/interop.go | 52 ++++++++++------------ pkg/vm/vm_test.go | 32 ++++++------- 15 files changed, 102 insertions(+), 117 deletions(-) diff --git a/pkg/compiler/codegen.go b/pkg/compiler/codegen.go index 39b005081..9055abd16 100644 --- a/pkg/compiler/codegen.go +++ b/pkg/compiler/codegen.go @@ -898,23 +898,23 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor { c.currentSwitch = label ast.Walk(c, n.X) - emit.Syscall(c.prog.BinWriter, "Neo.Iterator.Create") + emit.Syscall(c.prog.BinWriter, "System.Iterator.Create") c.pushStackLabel(label, 1) c.setLabel(start) emit.Opcode(c.prog.BinWriter, opcode.DUP) - emit.Syscall(c.prog.BinWriter, "Neo.Enumerator.Next") + emit.Syscall(c.prog.BinWriter, "System.Enumerator.Next") emit.Jmp(c.prog.BinWriter, opcode.JMPIFNOTL, end) if n.Key != nil { emit.Opcode(c.prog.BinWriter, opcode.DUP) - emit.Syscall(c.prog.BinWriter, "Neo.Iterator.Key") + emit.Syscall(c.prog.BinWriter, "System.Iterator.Key") c.emitStoreVar(n.Key.(*ast.Ident).Name) } if n.Value != nil { emit.Opcode(c.prog.BinWriter, opcode.DUP) - emit.Syscall(c.prog.BinWriter, "Neo.Enumerator.Value") + emit.Syscall(c.prog.BinWriter, "System.Enumerator.Value") c.emitStoreVar(n.Value.(*ast.Ident).Name) } @@ -1092,7 +1092,7 @@ func (c *codegen) convertBuiltin(expr *ast.CallExpr) { emit.Opcode(c.prog.BinWriter, opcode.THROW) } else if isString(c.typeInfo.Types[arg].Type) { ast.Walk(c, arg) - emit.Syscall(c.prog.BinWriter, "Neo.Runtime.Log") + emit.Syscall(c.prog.BinWriter, "System.Runtime.Log") emit.Opcode(c.prog.BinWriter, opcode.THROW) } else { c.prog.Err = errors.New("panic should have string or nil argument") diff --git a/pkg/compiler/panic_test.go b/pkg/compiler/panic_test.go index e8e506db4..0661f75c0 100644 --- a/pkg/compiler/panic_test.go +++ b/pkg/compiler/panic_test.go @@ -55,7 +55,7 @@ func getPanicSource(need bool, message string) string { } func logGetter(logs *[]string) vm.InteropGetterFunc { - logID := emit.InteropNameToID([]byte("Neo.Runtime.Log")) + logID := emit.InteropNameToID([]byte("System.Runtime.Log")) return func(id uint32) *vm.InteropFuncPrice { if id != logID { return nil diff --git a/pkg/compiler/syscall.go b/pkg/compiler/syscall.go index 5f46ca9af..8109fffa2 100644 --- a/pkg/compiler/syscall.go +++ b/pkg/compiler/syscall.go @@ -5,10 +5,10 @@ var syscalls = map[string]map[string]string{ "ECDsaVerify": "Neo.Crypto.ECDsaVerify", }, "enumerator": { - "Concat": "Neo.Enumerator.Concat", - "Create": "Neo.Enumerator.Create", - "Next": "Neo.Enumerator.Next", - "Value": "Neo.Enumerator.Value", + "Concat": "System.Enumerator.Concat", + "Create": "System.Enumerator.Create", + "Next": "System.Enumerator.Next", + "Value": "System.Enumerator.Value", }, "storage": { "ConvertContextToReadOnly": "Neo.StorageContext.AsReadOnly", @@ -20,13 +20,13 @@ var syscalls = map[string]map[string]string{ "Put": "Neo.Storage.Put", }, "runtime": { - "GetTrigger": "Neo.Runtime.GetTrigger", - "CheckWitness": "Neo.Runtime.CheckWitness", - "Notify": "Neo.Runtime.Notify", - "Log": "Neo.Runtime.Log", - "GetTime": "Neo.Runtime.GetTime", - "Serialize": "Neo.Runtime.Serialize", - "Deserialize": "Neo.Runtime.Deserialize", + "GetTrigger": "System.Runtime.GetTrigger", + "CheckWitness": "System.Runtime.CheckWitness", + "Notify": "System.Runtime.Notify", + "Log": "System.Runtime.Log", + "GetTime": "System.Runtime.GetTime", + "Serialize": "System.Runtime.Serialize", + "Deserialize": "System.Runtime.Deserialize", }, "blockchain": { "GetBlock": "System.Blockchain.GetBlock", @@ -51,12 +51,12 @@ var syscalls = map[string]map[string]string{ "GetExecutingScriptHash": "System.ExecutionEngine.GetExecutingScriptHash", }, "iterator": { - "Concat": "Neo.Iterator.Concat", - "Create": "Neo.Iterator.Create", - "Key": "Neo.Iterator.Key", - "Keys": "Neo.Iterator.Keys", - "Next": "Neo.Iterator.Next", - "Value": "Neo.Iterator.Value", - "Values": "Neo.Iterator.Values", + "Concat": "System.Iterator.Concat", + "Create": "System.Iterator.Create", + "Key": "System.Iterator.Key", + "Keys": "System.Iterator.Keys", + "Next": "System.Enumerator.Next", + "Value": "System.Enumerator.Value", + "Values": "System.Iterator.Values", }, } diff --git a/pkg/compiler/vm_test.go b/pkg/compiler/vm_test.go index f841318d2..9f8f7142a 100644 --- a/pkg/compiler/vm_test.go +++ b/pkg/compiler/vm_test.go @@ -85,7 +85,7 @@ func newStoragePlugin() *storagePlugin { s.interops[emit.InteropNameToID([]byte("Neo.Storage.Get"))] = s.Get s.interops[emit.InteropNameToID([]byte("Neo.Storage.Put"))] = s.Put s.interops[emit.InteropNameToID([]byte("Neo.Storage.GetContext"))] = s.GetContext - s.interops[emit.InteropNameToID([]byte("Neo.Runtime.Notify"))] = s.Notify + s.interops[emit.InteropNameToID([]byte("System.Runtime.Notify"))] = s.Notify return s } diff --git a/pkg/core/blockchain_test.go b/pkg/core/blockchain_test.go index 1b50e88d9..e01dde741 100644 --- a/pkg/core/blockchain_test.go +++ b/pkg/core/blockchain_test.go @@ -265,7 +265,7 @@ func TestSubscriptions(t *testing.T) { script := io.NewBufBinWriter() emit.Bytes(script.BinWriter, []byte("yay!")) - emit.Syscall(script.BinWriter, "Neo.Runtime.Notify") + emit.Syscall(script.BinWriter, "System.Runtime.Notify") require.NoError(t, script.Err) txGood1 := transaction.New(script.Bytes(), 0) txGood1.Sender = neoOwner @@ -276,7 +276,7 @@ func TestSubscriptions(t *testing.T) { // Reset() reuses the script buffer and we need to keep scripts. script = io.NewBufBinWriter() emit.Bytes(script.BinWriter, []byte("nay!")) - emit.Syscall(script.BinWriter, "Neo.Runtime.Notify") + emit.Syscall(script.BinWriter, "System.Runtime.Notify") emit.Opcode(script.BinWriter, opcode.THROW) require.NoError(t, script.Err) txBad := transaction.New(script.Bytes(), 0) @@ -287,7 +287,7 @@ func TestSubscriptions(t *testing.T) { script = io.NewBufBinWriter() emit.Bytes(script.BinWriter, []byte("yay! yay! yay!")) - emit.Syscall(script.BinWriter, "Neo.Runtime.Notify") + emit.Syscall(script.BinWriter, "System.Runtime.Notify") require.NoError(t, script.Err) txGood2 := transaction.New(script.Bytes(), 0) txGood2.Sender = neoOwner diff --git a/pkg/core/interops.go b/pkg/core/interops.go index b20758e0c..d96072b52 100644 --- a/pkg/core/interops.go +++ b/pkg/core/interops.go @@ -72,10 +72,19 @@ var systemInterops = []interop.Function{ {Name: "System.Contract.CallEx", Func: contractCallEx, Price: 1}, {Name: "System.Contract.Destroy", Func: contractDestroy, Price: 1}, {Name: "System.Contract.GetStorageContext", Func: contractGetStorageContext, Price: 1}, + {Name: "System.Enumerator.Concat", Func: enumerator.Concat, Price: 1}, + {Name: "System.Enumerator.Create", Func: enumerator.Create, Price: 1}, + {Name: "System.Enumerator.Next", Func: enumerator.Next, Price: 1}, + {Name: "System.Enumerator.Value", Func: enumerator.Value, Price: 1}, {Name: "System.ExecutionEngine.GetCallingScriptHash", Func: engineGetCallingScriptHash, Price: 1}, {Name: "System.ExecutionEngine.GetEntryScriptHash", Func: engineGetEntryScriptHash, Price: 1}, {Name: "System.ExecutionEngine.GetExecutingScriptHash", Func: engineGetExecutingScriptHash, Price: 1}, {Name: "System.ExecutionEngine.GetScriptContainer", Func: engineGetScriptContainer, Price: 1}, + {Name: "System.Iterator.Concat", Func: iterator.Concat, Price: 1}, + {Name: "System.Iterator.Create", Func: iterator.Create, Price: 1}, + {Name: "System.Iterator.Key", Func: iterator.Key, Price: 1}, + {Name: "System.Iterator.Keys", Func: iterator.Keys, Price: 1}, + {Name: "System.Iterator.Values", Func: iterator.Values, Price: 1}, {Name: "System.Runtime.CheckWitness", Func: runtime.CheckWitness, Price: 200}, {Name: "System.Runtime.Deserialize", Func: runtimeDeserialize, Price: 1}, {Name: "System.Runtime.GetTime", Func: runtimeGetTime, Price: 1}, @@ -103,23 +112,7 @@ var neoInterops = []interop.Function{ {Name: "Neo.Crypto.ECDsaVerify", Func: crypto.ECDSAVerify, Price: 1}, {Name: "Neo.Crypto.ECDsaCheckMultiSig", Func: crypto.ECDSACheckMultisig, Price: 1}, {Name: "Neo.Crypto.SHA256", Func: crypto.Sha256, Price: 1}, - {Name: "Neo.Enumerator.Concat", Func: enumerator.Concat, Price: 1}, - {Name: "Neo.Enumerator.Create", Func: enumerator.Create, Price: 1}, - {Name: "Neo.Enumerator.Next", Func: enumerator.Next, Price: 1}, - {Name: "Neo.Enumerator.Value", Func: enumerator.Value, Price: 1}, - {Name: "Neo.Iterator.Concat", Func: iterator.Concat, Price: 1}, - {Name: "Neo.Iterator.Create", Func: iterator.Create, Price: 1}, - {Name: "Neo.Iterator.Key", Func: iterator.Key, Price: 1}, - {Name: "Neo.Iterator.Keys", Func: iterator.Keys, Price: 1}, - {Name: "Neo.Iterator.Values", Func: iterator.Values, Price: 1}, {Name: "Neo.Native.Deploy", Func: native.Deploy, Price: 1}, - {Name: "Neo.Runtime.CheckWitness", Func: runtime.CheckWitness, Price: 200}, - {Name: "Neo.Runtime.Deserialize", Func: runtimeDeserialize, Price: 1}, - {Name: "Neo.Runtime.GetTime", Func: runtimeGetTime, Price: 1}, - {Name: "Neo.Runtime.GetTrigger", Func: runtimeGetTrigger, Price: 1}, - {Name: "Neo.Runtime.Log", Func: runtimeLog, Price: 1}, - {Name: "Neo.Runtime.Notify", Func: runtimeNotify, Price: 1}, - {Name: "Neo.Runtime.Serialize", Func: runtimeSerialize, Price: 1}, {Name: "Neo.Storage.Delete", Func: storageDelete, Price: 100}, {Name: "Neo.Storage.Find", Func: storageFind, Price: 1}, {Name: "Neo.Storage.Get", Func: storageGet, Price: 100}, @@ -127,10 +120,6 @@ var neoInterops = []interop.Function{ {Name: "Neo.Storage.GetReadOnlyContext", Func: storageGetReadOnlyContext, Price: 1}, {Name: "Neo.Storage.Put", Func: storagePut, Price: 0}, {Name: "Neo.StorageContext.AsReadOnly", Func: storageContextAsReadOnly, Price: 1}, - - // Aliases. - {Name: "Neo.Iterator.Next", Func: enumerator.Next, Price: 1}, - {Name: "Neo.Iterator.Value", Func: enumerator.Value, Price: 1}, } // initIDinInteropsSlice initializes IDs from names in one given diff --git a/pkg/interop/enumerator/enumerator.go b/pkg/interop/enumerator/enumerator.go index a47bff76f..ca52f4dcc 100644 --- a/pkg/interop/enumerator/enumerator.go +++ b/pkg/interop/enumerator/enumerator.go @@ -11,7 +11,7 @@ type Enumerator struct{} // Create creates a new enumerator from the given items (slice or structure). // New enumerator points at index -1 of its items, so the user of it has to -// advance it first with Next. This function uses `Neo.Enumerator.Create` +// advance it first with Next. This function uses `System.Enumerator.Create` // syscall. func Create(items []interface{}) Enumerator { return Enumerator{} @@ -20,13 +20,13 @@ func Create(items []interface{}) Enumerator { // Next moves position of the given enumerator by one and returns a bool that // tells whether there is a new value present in this new position. If it is, // you can use Value to get it, if not then there are no more values in this -// enumerator. This function uses `Neo.Enumerator.Next` syscall. +// enumerator. This function uses `System.Enumerator.Next` syscall. func Next(e Enumerator) bool { return true } // Value returns current enumerator's item value, it's only valid to call it -// after Next returning true. This function uses `Neo.Enumerator.Value` syscall. +// after Next returning true. This function uses `System.Enumerator.Value` syscall. func Value(e Enumerator) interface{} { return nil } @@ -35,7 +35,7 @@ func Value(e Enumerator) interface{} { // a first and then continue with b. Enumerator positions are not reset for a // and b, so if any of them was already advanced by Next the resulting // Enumerator will point at this new position and never go back to previous -// values. This function uses `Neo.Enumerator.Concat` syscall. +// values. This function uses `System.Enumerator.Concat` syscall. func Concat(a, b Enumerator) Enumerator { return Enumerator{} } diff --git a/pkg/interop/iterator/iterator.go b/pkg/interop/iterator/iterator.go index ec407ee0a..9e295f11e 100644 --- a/pkg/interop/iterator/iterator.go +++ b/pkg/interop/iterator/iterator.go @@ -13,7 +13,7 @@ type Iterator struct{} // Create creates an iterator from the given items (array, struct or map). A new // iterator is set to point at element -1, so to access its first element you -// need to call Next first. This function uses `Neo.Iterator.Create` syscall. +// need to call Next first. This function uses `System.Iterator.Create` syscall. func Create(items []interface{}) Iterator { return Iterator{} } @@ -24,13 +24,13 @@ func Create(items []interface{}) Iterator { // Iterator will point at this new position and never go back to previous // key-value pairs. Concatenated iterators also remain completely independent // in results they return, so if both contain the same key you'll receive this -// key twice when iterating. This function uses `Neo.Iterator.Concat` syscall. +// key twice when iterating. This function uses `System.Iterator.Concat` syscall. func Concat(a, b Iterator) Iterator { return Iterator{} } // Key returns iterator's key at current position. It's only valid to call after -// successful Next call. This function uses `Neo.Iterator.Key` syscall. +// successful Next call. This function uses `System.Iterator.Key` syscall. func Key(it Iterator) interface{} { return nil } @@ -38,20 +38,20 @@ func Key(it Iterator) interface{} { // Keys returns Enumerator ranging over keys or the given Iterator. Note that // this Enumerator is actually directly tied to the underlying Iterator, so that // advancing it with Next will actually advance the Iterator too. This function -// uses `Neo.Iterator.Keys` syscall. +// uses `System.Iterator.Keys` syscall. func Keys(it Iterator) enumerator.Enumerator { return enumerator.Enumerator{} } // Next advances the iterator returning true if it is was successful (and you // can use Key or Value) and false otherwise (and there are no more elements in -// this Iterator). This function uses `Neo.Iterator.Next` syscall. +// this Iterator). This function uses `System.Enumerator.Next` syscall. func Next(it Iterator) bool { return true } // Value returns iterator's current value. It's only valid to call after -// successful Next call. This function uses `Neo.Iterator.Value` syscall. +// successful Next call. This function uses `System.Enumerator.Value` syscall. func Value(it Iterator) interface{} { return nil } @@ -59,7 +59,7 @@ func Value(it Iterator) interface{} { // Values returns Enumerator ranging over values or the given Iterator. Note that // this Enumerator is actually directly tied to the underlying Iterator, so that // advancing it with Next will actually advance the Iterator too. This function -// uses `Neo.Iterator.Values` syscall. +// uses `System.Iterator.Values` syscall. func Values(it Iterator) enumerator.Enumerator { return enumerator.Enumerator{} } diff --git a/pkg/interop/runtime/runtime.go b/pkg/interop/runtime/runtime.go index 9b7e837d3..ec7c52a8b 100644 --- a/pkg/interop/runtime/runtime.go +++ b/pkg/interop/runtime/runtime.go @@ -6,14 +6,14 @@ package runtime // CheckWitness verifies if the given script hash (160-bit BE value in a 20 byte // slice) or key (compressed serialized 33-byte form) is one of the signers of -// this invocation. It uses `Neo.Runtime.CheckWitness` syscall. +// this invocation. It uses `System.Runtime.CheckWitness` syscall. func CheckWitness(hashOrKey []byte) bool { return true } // Log instructs VM to log the given message. It's mostly used for debugging // purposes as these messages are not saved anywhere normally and usually are -// only visible in the VM logs. This function uses `Neo.Runtime.Log` syscall. +// only visible in the VM logs. This function uses `System.Runtime.Log` syscall. func Log(message string) {} // Notify sends a notification (collecting all arguments in an array) to the @@ -21,14 +21,14 @@ func Log(message string) {} // notification is saved in application log. It's intended to be used as a // part of contract's API to external systems, these events can be monitored // from outside and act upon accordingly. This function uses -// `Neo.Runtime.Notify` syscall. +// `System.Runtime.Notify` syscall. func Notify(arg ...interface{}) {} // GetTime returns the timestamp of the most recent block. Note that when running // script in test mode this would be the last accepted (persisted) block in the // chain, but when running as a part of the new block the time returned is the // time of this (currently being processed) block. This function uses -// `Neo.Runtime.GetTime` syscall. +// `System.Runtime.GetTime` syscall. func GetTime() int { return 0 } @@ -38,7 +38,7 @@ func GetTime() int { // as a part of verification process from running it as a regular application. // Some interop functions (especially ones that change the state in any way) are // not available when running with verification trigger. This function uses -// `Neo.Runtime.GetTrigger` syscall. +// `System.Runtime.GetTrigger` syscall. func GetTrigger() byte { return 0x00 } @@ -58,13 +58,13 @@ func Verification() byte { // Serialize serializes any given item into a byte slice. It works for all // regular VM types (not ones from interop package) and allows to save them in // storage or pass into Notify and then Deserialize them on the next run or in -// the external event receiver. It uses `Neo.Runtime.Serialize` syscall. +// the external event receiver. It uses `System.Runtime.Serialize` syscall. func Serialize(item interface{}) []byte { return nil } // Deserialize unpacks previously serialized value from a byte slice, it's the -// opposite of Serialize. It uses `Neo.Runtime.Deserialize` syscall. +// opposite of Serialize. It uses `System.Runtime.Deserialize` syscall. func Deserialize(b []byte) interface{} { return nil } diff --git a/pkg/rpc/server/server_test.go b/pkg/rpc/server/server_test.go index 69af43432..4d30c07d2 100644 --- a/pkg/rpc/server/server_test.go +++ b/pkg/rpc/server/server_test.go @@ -49,18 +49,18 @@ type rpcTestCase struct { check func(t *testing.T, e *executor, result interface{}) } -const testContractHash = "1b4357bff5a01bdf2a6581247cf9ed1e24629176" +const testContractHash = "1b061f2295cdf0f4350e12746b8492a364fdd121" var rpcTestCases = map[string][]rpcTestCase{ "getapplicationlog": { { name: "positive", - params: `["5878052c7e9843786d64a9aeab16e74fabffd5abad9a0404aaf4f4bf2b6213e9"]`, + params: `["88da760745bd6cf2c58c7ad1cf206e4cc251c664e65b668fa0df474e68ee5ed3"]`, result: func(e *executor) interface{} { return &result.ApplicationLog{} }, check: func(t *testing.T, e *executor, acc interface{}) { res, ok := acc.(*result.ApplicationLog) require.True(t, ok) - expectedTxHash, err := util.Uint256DecodeStringLE("5878052c7e9843786d64a9aeab16e74fabffd5abad9a0404aaf4f4bf2b6213e9") + expectedTxHash, err := util.Uint256DecodeStringLE("88da760745bd6cf2c58c7ad1cf206e4cc251c664e65b668fa0df474e68ee5ed3") require.NoError(t, err) assert.Equal(t, expectedTxHash, res.TxHash) assert.Equal(t, 1, len(res.Executions)) @@ -484,7 +484,7 @@ var rpcTestCases = map[string][]rpcTestCase{ "gettransactionheight": { { name: "positive", - params: `["5878052c7e9843786d64a9aeab16e74fabffd5abad9a0404aaf4f4bf2b6213e9"]`, + params: `["88da760745bd6cf2c58c7ad1cf206e4cc251c664e65b668fa0df474e68ee5ed3"]`, result: func(e *executor) interface{} { h := 0 return &h diff --git a/pkg/rpc/server/testdata/test_contract.avm b/pkg/rpc/server/testdata/test_contract.avm index 36266c55e1a0b25ebf604acefc076db73f77f3da..3f23cef22206a5399e438774f107307efdc56fbd 100755 GIT binary patch delta 85 zcmcc4dYyHG6w6e`{KScJH(1U;cb_)#mm-)yS)S1kEHJr{Q6Ius!l({moM$wKFxZ%U OAd177LLiKFOqu|}y&&xX delta 85 zcmcc4dYyHG6bmc+B(aHdH(1Or2eD23r3mIvmS^+>3rsF#)Q2#ZFsefs=NXM53^pbo Oh~hA&5C~%(lO_O3CKxLK diff --git a/pkg/rpc/server/testdata/testblocks.acc b/pkg/rpc/server/testdata/testblocks.acc index b24ef7a0edeaf8ca596f63bdee9f8c23c9df1af2..7e7709a288c0990ab53a619d6dfe83d49efea137 100644 GIT binary patch delta 2615 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 Tfg5UFGW~V9U3yl%KP3MT+KtE? delta 2615 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 T8Kjg%!{y0gqt5>Mi{$?SL6^Lf diff --git a/pkg/vm/emit/emit_test.go b/pkg/vm/emit/emit_test.go index bb0024fb9..67fec612d 100644 --- a/pkg/vm/emit/emit_test.go +++ b/pkg/vm/emit/emit_test.go @@ -189,9 +189,9 @@ func TestEmitString(t *testing.T) { func TestEmitSyscall(t *testing.T) { syscalls := []string{ - "Neo.Runtime.Log", - "Neo.Runtime.Notify", - "Neo.Runtime.Whatever", + "System.Runtime.Log", + "System.Runtime.Notify", + "System.Runtime.Whatever", } buf := io.NewBufBinWriter() diff --git a/pkg/vm/interop.go b/pkg/vm/interop.go index 8003d6a76..4024a09f4 100644 --- a/pkg/vm/interop.go +++ b/pkg/vm/interop.go @@ -29,35 +29,31 @@ type interopIDFuncPrice struct { type InteropGetterFunc func(uint32) *InteropFuncPrice var defaultVMInterops = []interopIDFuncPrice{ - {emit.InteropNameToID([]byte("Neo.Runtime.Log")), + {emit.InteropNameToID([]byte("System.Runtime.Log")), InteropFuncPrice{runtimeLog, 1}}, - {emit.InteropNameToID([]byte("Neo.Runtime.Notify")), + {emit.InteropNameToID([]byte("System.Runtime.Notify")), InteropFuncPrice{runtimeNotify, 1}}, - {emit.InteropNameToID([]byte("Neo.Runtime.Serialize")), - InteropFuncPrice{RuntimeSerialize, 1}}, {emit.InteropNameToID([]byte("System.Runtime.Serialize")), InteropFuncPrice{RuntimeSerialize, 1}}, - {emit.InteropNameToID([]byte("Neo.Runtime.Deserialize")), - InteropFuncPrice{RuntimeDeserialize, 1}}, {emit.InteropNameToID([]byte("System.Runtime.Deserialize")), InteropFuncPrice{RuntimeDeserialize, 1}}, - {emit.InteropNameToID([]byte("Neo.Enumerator.Create")), + {emit.InteropNameToID([]byte("System.Enumerator.Create")), InteropFuncPrice{EnumeratorCreate, 1}}, - {emit.InteropNameToID([]byte("Neo.Enumerator.Next")), + {emit.InteropNameToID([]byte("System.Enumerator.Next")), InteropFuncPrice{EnumeratorNext, 1}}, - {emit.InteropNameToID([]byte("Neo.Enumerator.Concat")), + {emit.InteropNameToID([]byte("System.Enumerator.Concat")), InteropFuncPrice{EnumeratorConcat, 1}}, - {emit.InteropNameToID([]byte("Neo.Enumerator.Value")), + {emit.InteropNameToID([]byte("System.Enumerator.Value")), InteropFuncPrice{EnumeratorValue, 1}}, - {emit.InteropNameToID([]byte("Neo.Iterator.Create")), + {emit.InteropNameToID([]byte("System.Iterator.Create")), InteropFuncPrice{IteratorCreate, 1}}, - {emit.InteropNameToID([]byte("Neo.Iterator.Concat")), + {emit.InteropNameToID([]byte("System.Iterator.Concat")), InteropFuncPrice{IteratorConcat, 1}}, - {emit.InteropNameToID([]byte("Neo.Iterator.Key")), + {emit.InteropNameToID([]byte("System.Iterator.Key")), InteropFuncPrice{IteratorKey, 1}}, - {emit.InteropNameToID([]byte("Neo.Iterator.Keys")), + {emit.InteropNameToID([]byte("System.Iterator.Keys")), InteropFuncPrice{IteratorKeys, 1}}, - {emit.InteropNameToID([]byte("Neo.Iterator.Values")), + {emit.InteropNameToID([]byte("System.Iterator.Values")), InteropFuncPrice{IteratorValues, 1}}, } @@ -71,21 +67,21 @@ func getDefaultVMInterop(id uint32) *InteropFuncPrice { return nil } -// runtimeLog handles the syscall "Neo.Runtime.Log" for printing and logging stuff. +// runtimeLog handles the syscall "System.Runtime.Log" for printing and logging stuff. func runtimeLog(vm *VM) error { item := vm.Estack().Pop() fmt.Printf("NEO-GO-VM (log) > %s\n", item.Value()) return nil } -// runtimeNotify handles the syscall "Neo.Runtime.Notify" for printing and logging stuff. +// runtimeNotify handles the syscall "System.Runtime.Notify" for printing and logging stuff. func runtimeNotify(vm *VM) error { item := vm.Estack().Pop() fmt.Printf("NEO-GO-VM (notify) > %s\n", item.Value()) return nil } -// RuntimeSerialize handles syscalls System.Runtime.Serialize and Neo.Runtime.Serialize. +// RuntimeSerialize handles syscalls System.Runtime.Serialize and System.Runtime.Serialize. func RuntimeSerialize(vm *VM) error { item := vm.Estack().Pop() data, err := stackitem.SerializeItem(item.value) @@ -100,7 +96,7 @@ func RuntimeSerialize(vm *VM) error { return nil } -// RuntimeDeserialize handles syscalls System.Runtime.Deserialize and Neo.Runtime.Deserialize. +// RuntimeDeserialize handles syscalls System.Runtime.Deserialize and System.Runtime.Deserialize. func RuntimeDeserialize(vm *VM) error { data := vm.Estack().Pop().Bytes() @@ -121,7 +117,7 @@ func init() { }) } -// EnumeratorCreate handles syscall Neo.Enumerator.Create. +// EnumeratorCreate handles syscall System.Enumerator.Create. func EnumeratorCreate(v *VM) error { data := v.Estack().Pop().Array() v.Estack().Push(&Element{ @@ -134,7 +130,7 @@ func EnumeratorCreate(v *VM) error { return nil } -// EnumeratorNext handles syscall Neo.Enumerator.Next. +// EnumeratorNext handles syscall System.Enumerator.Next. func EnumeratorNext(v *VM) error { iop := v.Estack().Pop().Interop() arr := iop.Value().(enumerator) @@ -143,7 +139,7 @@ func EnumeratorNext(v *VM) error { return nil } -// EnumeratorValue handles syscall Neo.Enumerator.Value. +// EnumeratorValue handles syscall System.Enumerator.Value. func EnumeratorValue(v *VM) error { iop := v.Estack().Pop().Interop() arr := iop.Value().(enumerator) @@ -152,7 +148,7 @@ func EnumeratorValue(v *VM) error { return nil } -// EnumeratorConcat handles syscall Neo.Enumerator.Concat. +// EnumeratorConcat handles syscall System.Enumerator.Concat. func EnumeratorConcat(v *VM) error { iop1 := v.Estack().Pop().Interop() arr1 := iop1.Value().(enumerator) @@ -169,7 +165,7 @@ func EnumeratorConcat(v *VM) error { return nil } -// IteratorCreate handles syscall Neo.Iterator.Create. +// IteratorCreate handles syscall System.Iterator.Create. func IteratorCreate(v *VM) error { data := v.Estack().Pop() var item stackitem.Item @@ -197,7 +193,7 @@ func NewMapIterator(m *stackitem.Map) *stackitem.Interop { }) } -// IteratorConcat handles syscall Neo.Iterator.Concat. +// IteratorConcat handles syscall System.Iterator.Concat. func IteratorConcat(v *VM) error { iop1 := v.Estack().Pop().Interop() iter1 := iop1.Value().(iterator) @@ -214,7 +210,7 @@ func IteratorConcat(v *VM) error { return nil } -// IteratorKey handles syscall Neo.Iterator.Key. +// IteratorKey handles syscall System.Iterator.Key. func IteratorKey(v *VM) error { iop := v.estack.Pop().Interop() iter := iop.Value().(iterator) @@ -223,7 +219,7 @@ func IteratorKey(v *VM) error { return nil } -// IteratorKeys handles syscall Neo.Iterator.Keys. +// IteratorKeys handles syscall System.Iterator.Keys. func IteratorKeys(v *VM) error { iop := v.estack.Pop().Interop() iter := iop.Value().(iterator) @@ -234,7 +230,7 @@ func IteratorKeys(v *VM) error { return nil } -// IteratorValues handles syscall Neo.Iterator.Values. +// IteratorValues handles syscall System.Iterator.Values. func IteratorValues(v *VM) error { iop := v.estack.Pop().Interop() iter := iop.Value().(iterator) diff --git a/pkg/vm/vm_test.go b/pkg/vm/vm_test.go index bf7d75702..746df0494 100644 --- a/pkg/vm/vm_test.go +++ b/pkg/vm/vm_test.go @@ -488,16 +488,16 @@ func getEnumeratorProg(n int, isIter bool) (prog []byte) { prog = []byte{byte(opcode.INITSSLOT), 1, byte(opcode.STSFLD0)} for i := 0; i < n; i++ { prog = append(prog, byte(opcode.LDSFLD0)) - prog = append(prog, getSyscallProg("Neo.Enumerator.Next")...) + prog = append(prog, getSyscallProg("System.Enumerator.Next")...) prog = append(prog, byte(opcode.LDSFLD0)) - prog = append(prog, getSyscallProg("Neo.Enumerator.Value")...) + prog = append(prog, getSyscallProg("System.Enumerator.Value")...) if isIter { prog = append(prog, byte(opcode.LDSFLD0)) - prog = append(prog, getSyscallProg("Neo.Iterator.Key")...) + prog = append(prog, getSyscallProg("System.Iterator.Key")...) } } prog = append(prog, byte(opcode.LDSFLD0)) - prog = append(prog, getSyscallProg("Neo.Enumerator.Next")...) + prog = append(prog, getSyscallProg("System.Enumerator.Next")...) return } @@ -512,7 +512,7 @@ func checkEnumeratorStack(t *testing.T, vm *VM, arr []stackitem.Item) { func testIterableCreate(t *testing.T, typ string) { isIter := typ == "Iterator" - prog := getSyscallProg("Neo." + typ + ".Create") + prog := getSyscallProg("System." + typ + ".Create") prog = append(prog, getEnumeratorProg(2, isIter)...) vm := load(prog) @@ -546,10 +546,10 @@ func TestIteratorCreate(t *testing.T) { func testIterableConcat(t *testing.T, typ string) { isIter := typ == "Iterator" - prog := getSyscallProg("Neo." + typ + ".Create") + prog := getSyscallProg("System." + typ + ".Create") prog = append(prog, byte(opcode.SWAP)) - prog = append(prog, getSyscallProg("Neo."+typ+".Create")...) - prog = append(prog, getSyscallProg("Neo."+typ+".Concat")...) + prog = append(prog, getSyscallProg("System."+typ+".Create")...) + prog = append(prog, getSyscallProg("System."+typ+".Concat")...) prog = append(prog, getEnumeratorProg(3, isIter)...) vm := load(prog) @@ -589,8 +589,8 @@ func TestIteratorConcat(t *testing.T) { } func TestIteratorKeys(t *testing.T) { - prog := getSyscallProg("Neo.Iterator.Create") - prog = append(prog, getSyscallProg("Neo.Iterator.Keys")...) + prog := getSyscallProg("System.Iterator.Create") + prog = append(prog, getSyscallProg("System.Iterator.Keys")...) prog = append(prog, getEnumeratorProg(2, false)...) v := load(prog) @@ -609,8 +609,8 @@ func TestIteratorKeys(t *testing.T) { } func TestIteratorValues(t *testing.T) { - prog := getSyscallProg("Neo.Iterator.Create") - prog = append(prog, getSyscallProg("Neo.Iterator.Values")...) + prog := getSyscallProg("System.Iterator.Create") + prog = append(prog, getSyscallProg("System.Iterator.Values")...) prog = append(prog, getEnumeratorProg(2, false)...) v := load(prog) @@ -643,8 +643,8 @@ func getSyscallProg(name string) (prog []byte) { } func getSerializeProg() (prog []byte) { - prog = append(prog, getSyscallProg("Neo.Runtime.Serialize")...) - prog = append(prog, getSyscallProg("Neo.Runtime.Deserialize")...) + prog = append(prog, getSyscallProg("System.Runtime.Serialize")...) + prog = append(prog, getSyscallProg("System.Runtime.Deserialize")...) prog = append(prog, byte(opcode.RET)) return @@ -749,7 +749,7 @@ func TestSerializeStruct(t *testing.T) { } func TestDeserializeUnknown(t *testing.T) { - prog := append(getSyscallProg("Neo.Runtime.Deserialize"), byte(opcode.RET)) + prog := append(getSyscallProg("System.Runtime.Deserialize"), byte(opcode.RET)) data, err := stackitem.SerializeItem(stackitem.NewBigInteger(big.NewInt(123))) require.NoError(t, err) @@ -785,7 +785,7 @@ func TestSerializeMapCompat(t *testing.T) { emit.Bytes(buf.BinWriter, []byte("key")) emit.Bytes(buf.BinWriter, []byte("value")) emit.Opcode(buf.BinWriter, opcode.SETITEM) - emit.Syscall(buf.BinWriter, "Neo.Runtime.Serialize") + emit.Syscall(buf.BinWriter, "System.Runtime.Serialize") require.NoError(t, buf.Err) vm := load(buf.Bytes())