Evgenii Stratonikov
13d7770c68
vm: support Map in ARRAYSIZE
...
Also make logic the same as in reference implementation
and add tests.
2019-09-25 17:53:36 +03:00
Evgenii Stratonikov
c66f493017
vm: compare Map by reference in EQUAL
2019-09-25 17:53:36 +03:00
Evgenii Stratonikov
c0be2b2a99
vm: support Map in REMOVE
2019-09-25 17:53:36 +03:00
Evgenii Stratonikov
8b6bddca3c
vm: support Map in PICKITEM and SETITEM
2019-09-25 17:53:36 +03:00
Evgenii Stratonikov
d7bb50c609
vm: implement VALUES opcode
2019-09-25 17:53:36 +03:00
Evgenii Stratonikov
2da64267b0
vm: implement KEYS opcode
2019-09-25 17:53:34 +03:00
Evgenii Stratonikov
0fb4bb05cf
vm: implement HASKEY opcode
2019-09-25 12:08:41 +03:00
Evgenii Stratonikov
df18da0ac9
vm: implement NEWMAP opcode
2019-09-24 17:06:17 +03:00
Roman Khimov
dac1f9367c
Merge pull request #411 from nspcc-dev/verifywitnesses-logic
...
Fixes #269 , #368 . Tested by RPC sendrawtransaction test.
2019-09-24 14:43:26 +03:00
Roman Khimov
8a457ef540
transaction: add a check for createHash() invocation
...
It should work in general.
2019-09-24 13:01:54 +03:00
Roman Khimov
679e01bd0f
core: implement witness verification logic
...
Fix #368 .
2019-09-24 13:01:54 +03:00
Roman Khimov
ca9c9be71f
vm: add CHECKSIG/VERIFY/CHECKMULTISIG implementations
...
Fix #269 .
2019-09-24 13:01:54 +03:00
Roman Khimov
3bbeb2476e
vm: introduce HasFailed() method and use it where appropriate
...
It's gonna be used by external modules.
2019-09-23 20:19:07 +03:00
Roman Khimov
317dc6c5ed
Merge pull request #406 from nspcc-dev/fix/fail-on-first-error
...
VM: do not pop too many items from stack
JSON tests in neo-vm check stack state even in case of failure.
There are 2 corrections need to be done:
Pop items in EQUAL one-by-one.
Do not pop anything from stack in OVER.
I have also implemented operand restriction for SHL/SHR.
2019-09-23 17:54:08 +03:00
Evgenii Stratonikov
3c53beca82
vm: restrict SHL/SHR arguments to -256..256
...
Also unify SHL/SHR implementation.
2019-09-23 15:13:10 +03:00
Evgenii Stratonikov
4a8be486f0
vm: do not pop items in OVER
2019-09-23 14:54:59 +03:00
Evgenii Stratonikov
7cd69ea8e2
vm: truncate length in SUBSTR
...
Also fail on first error, without changing the stack.
2019-09-23 14:54:59 +03:00
Roman Khimov
2f9e7ca037
Merge pull request #405 from nspcc-dev/fix/array-reference-type
...
VM: compare Array by reference and clone structs on append
2019-09-23 14:54:32 +03:00
Evgenii Stratonikov
a88a8e13fc
vm: compare Array by reference in EQUAL
2019-09-23 13:25:59 +03:00
Evgenii Stratonikov
99f1d761ca
vm: clone Struct on APPEND
2019-09-23 13:25:59 +03:00
Roman Khimov
facf34e821
Merge pull request #409 from nspcc-dev/bolt-sigsegv-logging-fixes
...
Bolt Put(), sigsegv and logging fixes
2019-09-23 12:56:41 +03:00
Roman Khimov
ac5d2f94d3
storage: fix BoltDB batched Put()
...
It must copy both the value and the key because they can be reused for other
purposes between Put() and PutBatch(). This actually happens with values in
headers processing, leading to wrong data being written into the DB.
Extend the batch test to check for that.
2019-09-23 09:27:18 +03:00
Roman Khimov
5a0f08f2c0
network: fix SIGSEGV on unknown message acceptance
...
For example, at the moment our node can't handle `consensus` message, so when
it received it before the patch it just crashed because of uninitialized `p`.
2019-09-22 20:09:55 +03:00
Roman Khimov
4b4bac675b
core: don't print persisting errors twice
...
As they're already printed in the calling goroutine. And they're alse not
always useful when printed by Persist().
2019-09-22 20:08:15 +03:00
Roman Khimov
102c926ef3
core: don't print useless persist messages with nil errors
...
Errors should be printed only when there are errors.
2019-09-22 20:07:49 +03:00
Vsevolod
b15d9d1c36
Merge pull request #408 from nspcc-dev/unexport-things-from-io
...
Unexport things from io
2019-09-20 21:24:48 +03:00
Roman Khimov
f69adc59ad
io: drop getVarStringSize() completely
...
After unexport this doesn't make much sense at all as it has just one user.
2019-09-20 20:01:56 +03:00
Roman Khimov
d01b7740e2
io: improve GetVarSize() documentation
2019-09-20 20:00:45 +03:00
Roman Khimov
6dd37dd076
io: unexport getVarIntSize and getVarStringSize
...
All external users should just use GetVarSize().
2019-09-20 19:08:58 +03:00
Roman Khimov
5e103c7539
CHANGELOG: add one, declare 0.50.0 released
2019-09-19 18:06:42 +03:00
Roman Khimov
5cddfe071b
Merge pull request #403 from nspcc-dev/fix_rpctest
...
Fix rpctest, fix #353 , fix #305 .
2019-09-18 23:14:37 +03:00
Vsevolod Brekelov
100fee164b
unitTest: reworked RPC unit test
...
earlier we had an issue with failing test in #353 and other one #305 .
Reworked these test to have in-memory database. This led to multiple
changes: made some functions like Hash and Persist public(otherwise
it's not possible to control state of the blockchain); removed
unit_tests storage package which was used mainly for leveldb in unit
tests.
I see these tests not really good since they look like e2e tests and
as for me should be run in separate step against dockerized env or
in case we want to check rpc handler we might want to rework it in order
to have interface for proper unit tests.
As for me this patchset at least makes as safe with not removing totally
previous tests and at the same time CircleCI will be happy now.
2019-09-18 18:21:16 +03:00
Vsevolod Brekelov
55dfc0bbbc
storage: add seek implementation
...
during testing found missing Seek() implementation for inmemorydb
2019-09-18 18:20:41 +03:00
Roman Khimov
c68a254eba
Merge pull request #404 from nspcc-dev/move-user-docs
...
Move user docs, fix #339 .
2019-09-18 12:50:06 +03:00
Roman Khimov
9faea084e1
ROADMAP: update with current plans
2019-09-18 12:10:12 +03:00
Roman Khimov
42df4c2f39
vm: update and move README, refs. #339
2019-09-18 12:10:12 +03:00
Roman Khimov
9441c5e77b
rpc: split README into developer and user parts
...
Most of the document is written for developers and thus belongs to
godoc. User-related document is now moved to docs as per #339 .
2019-09-18 12:10:12 +03:00
Roman Khimov
778d29f543
compiler: update and move README to the docs folder
...
Refs. #339 .
2019-09-17 19:09:02 +03:00
Roman Khimov
acb25fb880
cli: move README to docs, refs. #339
2019-09-17 19:07:25 +03:00
Roman Khimov
cdfa6df402
README: add GoDoc reference
2019-09-17 18:12:32 +03:00
Roman Khimov
cb4be2ae4a
storage: drop useless README, refs. #339
2019-09-17 17:30:05 +03:00
Vsevolod
8e75674f30
Merge pull request #401 from nspcc-dev/refactor_bc_run
...
blockchain: server runs goroutine instead of blockchain init
2019-09-17 16:26:06 +03:00
Roman Khimov
7b4daed990
Merge pull request #402 from nspcc-dev/tiny-technical-corrections
...
This one updates go.mod/go.sum (as any build at the moment gives changes
to these files) and makes some source code files non-executable.
2019-09-17 15:52:48 +03:00
Roman Khimov
bd1f70366a
crypto: change files mode to 644 (some *.go had exec flags set)
2019-09-17 15:34:00 +03:00
Roman Khimov
aa0c765be9
go.mod/sum: update and tidy
2019-09-17 15:31:59 +03:00
Vsevolod Brekelov
adc880d323
blockchain: server runs goroutine instead of blockchain init
...
rework initBlockChain in order to have controllable way of running
blockchain;
remove context from initBlockChain func;
2019-09-17 15:27:40 +03:00
Roman Khimov
39a024eb03
Merge pull request #400 from nspcc-dev/move-rw-to-io
...
Move BinReader/BinWriter to io and simplify things
BinReader and BinWriter don't belong to util, actually util shouldn't
exist at all. Moving them to io and using them for all encoding/decoding
purposes allows to simplify a lot of code, especially in the error
handling space. These interfaces are designed to absorb errors until
someone can do something meaningful with them (usually that's the top
caller of encode/decode functions) and our current use of them is
inconsistent.
This patchset moves BinReader/BinWriter and size calculations (that
are mostly about Serializable things) to io package and makes all the
other code use them for encoding/decoding purposes.
2019-09-17 15:08:15 +03:00
Roman Khimov
5bca4d2313
io: expand panic tests to reach 100% coverage
2019-09-17 13:23:24 +03:00
Roman Khimov
96618015cd
network: implement EncodeBinary() for MerkleBlock
2019-09-17 13:21:52 +03:00
Roman Khimov
d1a4e43c48
io: redo Serializable to return errors in BinReader/BinWriter
...
Further simplifies error handling.
2019-09-17 13:21:52 +03:00