Evgenii Stratonikov
685d44dbc1
*: support _initialize
method in contracts
...
Invoke `_initialize` method on every call if present.
In NEO3 there is no entrypoint and methods are invoked by offset,
thus `Main` function is no longer required.
We still have special `Main` method in tests to simplify them.
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
466af55dea
vm: isolate stack in LoadScript
...
When calling contract it must be provided with a new stack containing
only it's arguments. The result is then copied back on RET.
Fix #1220 .
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
13b9eda08d
vm: allow to call VM methods from outside
...
Abstract out (*VM).Call method and use in in CALL* opcodes.
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
6ecd1ae437
vm: allow to initialize static slot in method
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
28e0661f82
interop: update AppCall comment
...
Do not require contract hash to be known at compile time.
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
d2ddf7b7cb
*: support invoking methods by offset
...
Allow to invoke methods by offset:
1. Every invoked contract must have manifest.
2. Check arguments count on invocation.
3. Change AppCall to a regular syscall.
4. Add test suite for `System.Contract.Call`.
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
e87eba51f9
compiler: emit bytecode for unused exported functions
...
Exported functions should always be present in byte-code.
This will be needed later when arbitrary method calls are allowed.
2020-07-27 13:00:35 +03:00
Evgenii Stratonikov
54d7882acf
core: compiler contract on-the-fly in helper test
...
Generate proper manifest file too.
2020-07-27 13:00:34 +03:00
Evgenii Stratonikov
04bf357fa5
compiler: make DebugInfo.convertToManifest public
...
Allow to generate manifest when using compiler as a library.
2020-07-27 11:08:01 +03:00
Evgenii Stratonikov
7d8fead1fd
native: change onPersist return type to Void
2020-07-27 11:08:01 +03:00
Evgenii Stratonikov
a892e3ffa8
manifest: add Offset in method descriptor
2020-07-27 11:08:01 +03:00
Evgenii Stratonikov
e52c39ae7e
manifest: remove EntryPoint from manifest
2020-07-27 11:08:01 +03:00
Roman Khimov
d2c823daa6
Merge pull request #1233 from nspcc-dev/fix/gasverify
...
core: restrict maximum gas allow for verification
2020-07-26 22:40:13 +03:00
Roman Khimov
5983e6bd55
Merge pull request #1232 from nspcc-dev/fix/verifytest
...
crypto: fix failing Secp256r1 test
2020-07-26 09:09:55 +03:00
Evgenii Stratonikov
121c9664b4
core: restrict maximum gas allow for verification
...
Disallow costly verification methods. We put this limit in policy
contract as it may be a subject to change in future.
In fact this value also overrides gas limit for header verification.
Close #1202 .
2020-07-25 14:33:38 +03:00
Evgenii Stratonikov
8931c9a794
core/interop: increase coverate for crypto interops
2020-07-25 12:16:56 +03:00
Evgenii Stratonikov
83e53fab24
core/test: ensure public key is invalid in test
...
When providing public key as a subslice, it still can be
decoded as a valid key, thus interop will not return an error
but rather push `false` on stack. This test is about providing
invalid key, so ensure this via setting invalid prefix.
2020-07-25 12:01:16 +03:00
Evgenii Stratonikov
76fdbea331
keys: fix failing Secp256k1 test
...
Pad R and S when computing signature.
Fix #1223 .
2020-07-25 12:01:12 +03:00
Evgenii Stratonikov
299491080a
vm: simplify interop id in json tests
2020-07-24 10:44:02 +03:00
Evgenii Stratonikov
68ad620af0
vm: update json tests to master
2020-07-24 10:44:02 +03:00
Evgenii Stratonikov
797324cb04
vm: support exceptions
...
Implement 3 new instructions: TRY,ENDTRY,ENDFINALLY.
1. TRY marks the start of the block where exceptions are catched.
It has 2 arguments which are relative offsets of exception handler
and the end of the whole try/catch construction.
2. ENDTRY denotes either end of try or catch block.
3. ENDFINALLY denotes end of finally block which is executed
irregardless of whether an exception has occured.
2020-07-24 10:41:41 +03:00
Evgenii Stratonikov
c0d7b9d234
vm: clear references on context unload
...
Remove argument and local references from the reference counter when
returning from function.
2020-07-24 10:41:40 +03:00
Evgenii Stratonikov
aec9111961
vm: replace jumpIf with jump
...
`jumpIf` is used only once with non-constant condition.
2020-07-24 10:36:51 +03:00
Roman Khimov
a45c160f10
Merge pull request #1225 from nspcc-dev/fix/equal
...
vm: make EQUAL type strict
2020-07-23 23:42:22 +03:00
Roman Khimov
2800179ce0
Merge pull request #1226 from nspcc-dev/fix/pusha
...
vm: make offset in PUSHA relative
2020-07-23 23:40:21 +03:00
Anna Shaleva
8fde41001e
core, vm: remove allowed triggers from syscalls
...
Closes #1205 .
2020-07-23 20:44:39 +03:00
Roman Khimov
d8a1c3de46
Merge pull request #1221 from nspcc-dev/neo3/interop/post-preview2_adjustment3
...
interop: post-preview2 adjustment, part 3
2020-07-23 20:35:53 +03:00
Evgenii Stratonikov
b8843a2dfa
vm: make offset in PUSHA relative
...
Follow neo-project/neo-vm#317 .
2020-07-23 13:07:30 +03:00
Evgenii Stratonikov
9252ef65bb
vm: make EQUAL type strict
...
Do not perform type conversions when comparing elements.
2020-07-23 13:01:43 +03:00
Roman Khimov
18dcc16553
Merge pull request #1222 from nspcc-dev/fix/rvcount
...
Remove return value count
2020-07-23 10:34:34 +03:00
Evgenii Stratonikov
58a594e3d4
vm: remove rvcount
...
It isn't used anymore.
2020-07-23 10:29:05 +03:00
Roman Khimov
06f70e6a0b
Merge pull request #1218 from nspcc-dev/neo3/interop/post-preview2_adjustment2
...
interop: post-preview2 adjustment, part 2
2020-07-23 09:35:34 +03:00
Anna Shaleva
ef8de3b2dc
core: adjust System.Runtime.GetNotifications interop
...
Part of #1055 .
Forgot to add this pretty interop to the list of system interops.
2020-07-23 07:54:51 +03:00
Anna Shaleva
120eff92f7
core: adjust System.Runtime.Notify interop
...
Part of #1198 .
Notification name should be UTF8-encoded.
2020-07-23 07:55:12 +03:00
Anna Shaleva
2c41b7b254
core: adjust System.Runtime.Log interop
...
Part of #1055 and #1198 .
It should check the message length and encoding.
2020-07-23 07:54:51 +03:00
Anna Shaleva
76acef18ad
core: adjust System.Runtime.Platform interop
...
Part of #1055 .
Added `Platform` method to compiler.
2020-07-23 07:51:24 +03:00
Anna Shaleva
88e003d219
core: adjust System.Runtime.GetTime interop
...
Part of #1055 .
It should have AllowStates flag.
2020-07-23 07:51:24 +03:00
Anna Shaleva
990ef5525c
core: adjust System.Runtime.GasLeft interop
...
Part of #1055 .
In test mode it should return -1.
2020-07-23 07:51:24 +03:00
Anna Shaleva
8fed383523
core: adjust System.Runtime.CheckWitness interop
...
Part of #1055 .
It should have `AllowStates` flag.
Also removed unreachable code: we can't have such situation when
script container is not a transaction in the scope of `CheckWitness`
method because:
1. Blocks have their own implementation of CheckWitness for
internal usage (it's (bc *Blockchain) verifyHeaderWitnesses method).
2. For the outside calls of System.Runtime.CheckWitness interop (e.g.
calls from smart-contract) script container is always a transaction.
2020-07-23 07:51:24 +03:00
Anna Shaleva
c9ef7425ac
core: adjust System.Iterator.Create interop
...
Closes #1201 .
It should be able to iterate over primitive byte-array-like types also.
2020-07-23 07:51:55 +03:00
Anna Shaleva
459ac34839
core: adjust System.Enumerator.Create interop
...
Part of #1201 .
It should be able to create enumerator from primitive byte-array-like
stack items too.
2020-07-23 07:51:24 +03:00
Roman Khimov
c4cde44543
Merge pull request #1216 from nspcc-dev/neo3/rpc/sendrawtransaction
...
rpc: adjust `sendrawtransaction` and `submitblock` RPC calls
2020-07-22 22:13:21 +03:00
Anna Shaleva
6e44499cec
core: adjust Neo.Native.Deploy interop
...
Part of #1055 .
It could be that context.Block is nill.
2020-07-22 16:58:32 +03:00
Anna Shaleva
2bbe218547
compiler: move SHA256 from builtins to syscalls
...
Now it can be processed as a normal syscall.
2020-07-22 16:58:32 +03:00
Anna Shaleva
b8d82b49ec
core: add Neo.Crypto.RIPEMD160 interop
...
Closes #1193 .
2020-07-22 16:58:32 +03:00
Anna Shaleva
84bf87df52
core: adjust System.Storage.PutEx interop
...
Part of #1055 .
Added System.Storage.PutEx to compiler. Added StorageFlag in order to
denote whether item is constant or not.
2020-07-22 16:58:23 +03:00
Evgenii Stratonikov
261ff3c655
vm: remove alt.stack
...
It is no longer present in NEO3.
2020-07-22 13:20:31 +03:00
Anna Shaleva
47eadcdf2a
core: adjust System.Storage.Put interop
...
Part of #1055 .
Maximum storage key len has been changed. Also added maximum storage
value len restriction.
2020-07-22 11:05:10 +03:00
Anna Shaleva
b5185d5d1a
core: refactor System.Storage.Get[ReadOnly]Context interops
...
Part of #1055 .
Split methods, as they have a lot of common code. This also fixex nil
error of storageGetReadOnlyContext in case when contract does not have
storage.
2020-07-22 10:51:47 +03:00
Anna Shaleva
889a5d7eb6
rpc: adjust submitblock
RPC-call
...
It should return block hash instead of boolean.
2020-07-22 08:37:53 +03:00