Evgenii Stratonikov
063c29636b
vm: fail if NEWSTRUCT/NEWARRAY argument is not an integer
...
NEO3 VM does not support creating new Array from a Struct.
For this purpose CONVERT opcode is used.
2020-05-22 14:16:32 +03:00
Evgenii Stratonikov
1a0290edc6
vm: copy slice when converting between Array<->Struct
...
Related #437 . Becase in NEO3 NEWSTRUCT/NEWARRAY accept only an integer
change tests too.
2020-05-22 14:16:32 +03:00
Evgenii Stratonikov
781def735d
vm: use Null item as a default value for Array/Struct elements
2020-05-22 14:16:32 +03:00
Evgenii Stratonikov
f4fa712440
vm: make PUSH0 emit Integer
2020-05-22 14:16:32 +03:00
Evgenii Stratonikov
820b050b18
vm/tests: make test interop push non-nil InteropItem
2020-05-22 14:16:32 +03:00
Evgenii Stratonikov
a44acd25bb
vm/tests: restore JSON tests parsing
...
Make sure we support new test format. Tests itself will be restored
later.
2020-05-22 14:16:32 +03:00
Evgenii Stratonikov
61b1722745
opcode: swap ROT and OLDPUSH1
...
Because of how stringer generates String() method, the first of them
will be used as the result.
2020-05-22 14:16:32 +03:00
Evgenii Stratonikov
646c247b31
vm/tests: unmarshal Map keys properly in JSON tests
2020-05-22 14:16:31 +03:00
Evgenii Stratonikov
128a99dec2
vm/tests: unmarshal action in JSON tests properly
2020-05-22 13:36:11 +03:00
Evgenii Stratonikov
7ddb23abe3
vm/tests: unmarshal stack items in JSON tests properly
...
New item types were added in NEO3 and they can be capitalized or not.
2020-05-22 13:36:11 +03:00
Evgenii Stratonikov
e71cc04c70
vm/tests: unmarshal VM state in JSON tests properly
2020-05-22 13:36:11 +03:00
Evgenii Stratonikov
0c7b163280
vm/tests: unmarshal script in JSON tests properly
...
Script is no specified via stringified opcodes and their arguments.
2020-05-22 13:36:11 +03:00
Evgenii Stratonikov
1100f629df
opcode: implement FromString()
2020-05-22 13:36:11 +03:00
Evgenii Stratonikov
e53055a560
opcode: use underscored names in String()
2020-05-22 13:36:11 +03:00
Roman Khimov
9b2d045a29
Merge pull request #976 from nspcc-dev/fix/refcount
...
vm: update stack size in SETITEM properly
2020-05-21 18:07:26 +03:00
Evgenii Stratonikov
3917b4b4e4
vm: update stack size in SETITEM properly
2020-05-21 18:00:51 +03:00
Roman Khimov
e6f617a43f
Merge pull request #970 from nspcc-dev/neo3/protocol/magic_exchange
...
protocol: move magic exchange to version payload
2020-05-21 14:39:57 +03:00
Anna Shaleva
64a2fb63e1
protocol: move magic exchange to version payload
...
closes #889
2020-05-21 14:23:41 +03:00
Roman Khimov
23b814ad4d
Merge pull request #969 from nspcc-dev/neo3/protocol/binary_message_commands
...
protocol: switch to binary MessageCommand
2020-05-21 14:10:34 +03:00
Anna Shaleva
3bcc56bdcf
protocol: switch to binary MessageCommand
...
closes #888
2020-05-21 13:57:49 +03:00
Roman Khimov
1317666167
Merge pull request #962 from nspcc-dev/feature/nested
...
compiler: support nested struct selectors
2020-05-21 11:48:59 +03:00
Evgenii Stratonikov
8cf7871c26
compiler: support nested slice element assignment
2020-05-21 08:30:32 +03:00
Evgenii Stratonikov
5b0e73ddf0
compiler: initialize struct fields explicitly
...
By default VM initializes every field of a new struct to a Boolean.
If field contains another struct, we need to initialize it to default
value explicitly. This commit sets default values for uninitialized
field.
2020-05-21 08:30:32 +03:00
Evgenii Stratonikov
051e3608ff
compiler: support nested struct fielid assignment
2020-05-21 08:30:32 +03:00
Evgenii Stratonikov
1e40f9dac0
compiler: support nested struct reading
2020-05-21 08:30:31 +03:00
Roman Khimov
c751472852
Merge pull request #943 from nspcc-dev/neo3/transaction/fees
...
core: add SystemFee and NetworkFee to transaction
2020-05-20 23:48:28 +03:00
Anna Shaleva
9f2cb1726b
core: add witness check to nep5 transfer method
...
We have to check, whether transaction's sender is authorised to transfer
nep5 assets.
2020-05-20 23:34:27 +03:00
Anna Shaleva
1afd630169
core: add senders' fees monitor to mempool
...
In order to simplify maintainance of overall current senders` fees
in the mempool we are to keep them in a separate map.
2020-05-20 23:34:25 +03:00
Anna Shaleva
c3e08afe34
util: fixed typo in method description
2020-05-20 23:26:51 +03:00
Anna Shaleva
7acf5b2841
core: add SystemFee and NetworkFee to transaction
...
closes #831
2020-05-20 23:26:48 +03:00
Anna Shaleva
fc3acdc80c
core: add native contracts' hashes getters
2020-05-20 23:16:04 +03:00
Anna Shaleva
6b2f4efdd4
core: fix bug in nep5TokenNative.addTokens method
...
Sometimes we want to add negative amount (e.g. when burning tokens).
2020-05-20 23:16:04 +03:00
Anna Shaleva
c7a040ff81
core: fix bug with native contracts methods initialisation
...
`NewNEO()` and `NewGAS()` methods are trying to initialise
both `onPersist` and `incBalance` methods of NEO and GAS AFTER
nep5TokenNative is set to the VALUE of created nep5 token.
In this situation an attemmpt to call the corresponding native contracts
methods (e.g. transfer native GAS) leads to contract invocation failure,
as far as `nep5TokenNative.incBalance` method is nil.
Fixed this by initializing both `onPersist` and `incBalance` methods
before getting the value of nep5 contract.
2020-05-20 23:16:04 +03:00
Anna Shaleva
4ebac5a069
core: fix bug in nep5 notifications handling
...
Native contracts deployment creates `Transfer` notifications and adds
them into interop context. However, these notifications were not stored
for two reasons:
1. typo in `Transfer` (so these notifications were not recognised during
processing of the invocation tx in (*Blockchain).storeBlock(...) method)
2. these notifications have `from` adress setted to null, so conversion
to []byte fails. Same thing could happen with `to`.
Related C# issue: https://github.com/neo-project/neo/issues/1646
For now, made both `transfer` and `Transfer` valid.
2020-05-20 23:16:04 +03:00
Anna Shaleva
45b8bdb51c
core: fix bug in consensus
...
We should set MerkleRoot in approving block irrespective to
transactions presented in the block.
2020-05-20 23:16:04 +03:00
Roman Khimov
e8ad09f30d
Merge pull request #948 from nspcc-dev/feature/buffer
...
Implement NEO3 Buffer type and string functions
2020-05-20 19:02:05 +03:00
Evgenii Stratonikov
22067d400d
rpc: update testchain
2020-05-20 17:45:56 +03:00
Evgenii Stratonikov
1a4a0c154b
compiler: support var-declaration of byte slices
...
Related #801 .
2020-05-20 17:45:56 +03:00
Evgenii Stratonikov
3a4ed7dfe8
compiler: emit Buffer for byte slices
...
All byte slices are mutable so buffer is a right stack item.
2020-05-20 17:45:56 +03:00
Evgenii Stratonikov
b4f1142149
compiler: emit byte constants properly
2020-05-20 17:45:56 +03:00
Evgenii Stratonikov
98c508d361
vm: implement MEMCPY opcode
...
MEMCPY copies byte-slice to a destination buffer.
2020-05-20 17:45:56 +03:00
Evgenii Stratonikov
a5f6e0e53d
vm: implement NEWBUFFER opcode
2020-05-20 17:45:56 +03:00
Evgenii Stratonikov
a3a3a77431
vm: make slice opcodes emit Buffer
2020-05-20 17:45:56 +03:00
Evgenii Stratonikov
c3f7832f3b
vm: implement Buffer stack item
...
Buffer is a stack item type introduced in NEO3
which represents mutable byte-array.
2020-05-20 17:45:56 +03:00
Evgenii Stratonikov
ee9adcdc5c
vm: check ByteArray size before converting to Integer
2020-05-20 17:45:56 +03:00
Evgenii Stratonikov
8f5f6fba07
vm: copy slice in (*ByteArrayItem).TryBytes()
2020-05-20 17:45:56 +03:00
Roman Khimov
d6e4c506b6
Merge pull request #959 from nspcc-dev/feature/compiler_types
...
compiler: refactor typeinfo functions
2020-05-20 16:28:48 +03:00
Evgenii Stratonikov
1b105a9f1d
compiler: allow using OP= with struct fields and slice elements
...
Do it in a generic way, there is no need in restricting to only
variables.
Port of #954 .
2020-05-20 14:14:29 +03:00
Evgenii Stratonikov
fdb217ec81
compiler: process _ as a special variable
...
It is more convenient to drop values inside `emitStoreVar` because this
makes other code has less special cases.
2020-05-20 14:14:29 +03:00
Evgenii Stratonikov
3926456d86
compiler: add test for iterating over map with range
2020-05-20 14:14:29 +03:00