Roman Khimov
4c39b6600d
*: store application long along with tx/block
...
Two times less keys inserted into the DB per tx leads to ~13% TPS
improvement. We also drop one goroutine with it which isn't bad as well.
2021-12-09 15:39:26 +03:00
Roman Khimov
f87c595d94
core: fix TestRestoreAfterDeploy
...
A bit longer script easily solves the size problem.
2021-12-08 12:05:31 +03:00
Roman Khimov
06fc450789
Merge pull request #2300 from nspcc-dev/fix-stripprefix-comment
...
interop/storage: fix outdated RemovePrefix comment
2021-12-06 18:16:48 +03:00
Roman Khimov
f8d5c5ff79
interop/storage: fix outdated RemovePrefix comment
...
ffaae0f773
changed the behavior long time ago,
we're actually stripping whole requested prefix.
2021-12-06 18:09:53 +03:00
Roman Khimov
d42d4fc812
Merge pull request #2295 from nspcc-dev/github/upload-build-artifacts
...
.github: upload binaries for Build workflows
2021-12-03 12:39:29 +03:00
Anna Shaleva
70d00a6f98
.github: simplify checkout process
...
We don't need separate steps for manual and automatic checkout, the
default ref value can be habdled by checkout@v2 itself.
2021-12-03 12:25:10 +03:00
Anna Shaleva
4a410f4898
.github: allow to trigger Build workflow manually
2021-12-03 12:22:48 +03:00
Anna Shaleva
b602c9d3a0
.github: upload binaries for Build workflows
2021-12-03 12:20:45 +03:00
Roman Khimov
3dbc9bb5dc
docs: add a note on defer limitations
2021-12-03 11:36:37 +03:00
Roman Khimov
6000c6a502
CHANGELOG: release 0.98.0
2021-12-03 11:11:06 +03:00
Roman Khimov
96339e9f64
Merge pull request #2290 from nspcc-dev/microopt
...
Trivial microoptimizations
2021-12-02 19:21:45 +03:00
Roman Khimov
b16497cbc4
Merge pull request #2291 from nspcc-dev/invtree-call-json
...
vm: put child invocation tree nodes into `call` element
2021-12-02 19:15:22 +03:00
Roman Khimov
eb27699dad
vm: put child invocation tree nodes into call
element
...
As neo-project/neo-modules#657 currently does.
2021-12-02 17:46:48 +03:00
Roman Khimov
41ab7a85a7
hash: avoid allocation in RipeMD160 calculation
2021-12-02 16:11:09 +03:00
Roman Khimov
53cfde62de
vm: don't allocate another stack for entry scripts
...
vm.New() creates a new stack, then we load an entry script with
LoadScriptWithFlags and it creates another one which doesn't make much
sense. rvcount is -1 for it, so all elements are to be copied down anyway and
it's clear so a new loaded script can't dig down to anything it shouldn't be
able to.
2021-12-02 15:59:51 +03:00
Roman Khimov
ac7e922606
native: avoid big.Int allocation in burn()
...
addTokens and incBalance only read the amount, so it's not a problem.
2021-12-02 15:40:43 +03:00
Roman Khimov
a003879b84
native: avoid allocations in increaseBalance
2021-12-02 15:33:30 +03:00
Roman Khimov
ffeb3b8473
transaction: microoptimize Hash()
...
It doesn't cost much, but it's used _a lot_, so optimizing it makes sense.
name old time/op new time/op delta
TxHash-8 4.89ns ± 5% 0.54ns ± 2% -88.86% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
TxHash-8 0.00B 0.00B ~ (all equal)
name old allocs/op new allocs/op delta
TxHash-8 0.00 0.00 ~ (all equal)
2021-12-02 14:48:35 +03:00
Roman Khimov
e3d8e7b613
Merge pull request #2276 from nspcc-dev/upgrade-neofs-deps
...
oracle/neofs: Upgrade NeoFS dependencies
2021-12-02 13:31:47 +03:00
Leonard Lyubich
3381716ebe
oracle/neofs: Use function which combines all NeoFS client errors
...
Add function which unifies NeoFS API client's errors with failed status
reponses.
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2021-12-02 11:59:25 +03:00
Leonard Lyubich
0c4017cc20
oracle/neofs: Upgrade NeoFS dependencies
...
Replace `neofs-api-go` module with `neofs-sdk-go`. Adapt to NeoFS
response statuses in the implementation of NeoFS oracle.
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
2021-12-02 11:59:20 +03:00
Roman Khimov
d62f5b8c3c
Merge pull request #2287 from nspcc-dev/optimizations-partN
...
Optimizations part N
2021-12-02 11:54:56 +03:00
Roman Khimov
aa1da9de5a
vm: preallocate for istack
...
Avoid growing it in runtime.
2021-12-01 21:36:35 +03:00
Roman Khimov
decff2bfb9
stackitem: simplify extracting value from map
...
Going through interfaces doesn't make it faster.
2021-12-01 21:36:35 +03:00
Roman Khimov
af8a4da6d9
stackitem: use type switch more effectively
...
Reduce the number of allocations, save some time.
name old time/op new time/op delta
EncodeBinary-8 51.2µs ± 8% 44.6µs ± 7% -12.79% (p=0.008 n=5+5)
SerializeSimple-8 523ns ± 5% 449ns ± 4% -14.27% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
EncodeBinary-8 329kB ± 0% 329kB ± 0% -0.12% (p=0.008 n=5+5)
SerializeSimple-8 432B ± 0% 408B ± 0% -5.56% (p=0.008 n=5+5)
name old allocs/op new allocs/op delta
EncodeBinary-8 36.0 ± 0% 20.0 ± 0% -44.44% (p=0.008 n=5+5)
SerializeSimple-8 7.00 ± 0% 6.00 ± 0% -14.29% (p=0.008 n=5+5)
2021-12-01 21:36:35 +03:00
Roman Khimov
418ba1dbc3
*: use internal variables for simple big.NewInt() values
...
Avoid additional allocations.
2021-12-01 21:36:25 +03:00
Roman Khimov
3eed9d06f8
stackitem: add some hint to 'seen' maps
...
It's empirical, we usually have one container, but four is likely to fit most
of regular cases.
2021-12-01 21:36:25 +03:00
Roman Khimov
9576e10d04
storage: use map size hints to optimize subsequent persist()
...
We're likely to have something comparable to the current changeset in the
subsequent one. If it's bigger, no big deal, it'll be reallocated, if it's
smaller, no big deal, the next one will be preallocated smaller.
2021-12-01 21:36:25 +03:00
Roman Khimov
428ba48444
mempool: use capacity parameter to avoid map reallocations
...
Which is what happens in AddBlock that fills a new pool with exactly the
number of transactions we know already.
2021-12-01 21:36:25 +03:00
Roman Khimov
e236ac4067
io: optimize WriteString, avoid allocation
...
name old time/op new time/op delta
AppExecResult_EncodeBinary-8 477ns ± 0% 467ns ± 3% ~ (p=0.190 n=4+5)
name old alloc/op new alloc/op delta
AppExecResult_EncodeBinary-8 376B ± 0% 368B ± 0% -2.13% (p=0.008 n=5+5)
name old allocs/op new allocs/op delta
AppExecResult_EncodeBinary-8 5.00 ± 0% 4.00 ± 0% -20.00% (p=0.008 n=5+5)
2021-12-01 21:36:25 +03:00
Roman Khimov
748a70569a
mempool: use uint256 library for fee tracking
...
It's very effective in avoiding allocations for big.Int, we don't have a
microbenchmark for memppol, but this improves TPS metrics by ~1-2%, so it's
noticeable.
2021-12-01 21:36:25 +03:00
Roman Khimov
ee05f73b6f
vm: simplify slot and make it private
...
Hiding refcounter inside a slot is actually a good idea, but it makes the
structure somewhat bigger, especially given that the refcounter is the same
and belongs more to VM or Context. New structure is a bit more efficient:
name old time/op new time/op delta
ScriptFibonacci-8 672µs ± 2% 644µs ± 0% -4.15% (p=0.008 n=5+5)
ScriptNestedRefCount-8 1.08ms ± 1% 1.05ms ± 2% -2.56% (p=0.008 n=5+5)
ScriptPushPop/4-8 1.52µs ± 1% 1.47µs ± 1% -3.14% (p=0.008 n=5+5)
ScriptPushPop/16-8 3.66µs ± 1% 3.54µs ± 1% -3.24% (p=0.008 n=5+5)
ScriptPushPop/128-8 24.7µs ± 1% 23.2µs ± 1% -6.14% (p=0.008 n=5+5)
ScriptPushPop/1024-8 183µs ± 1% 173µs ± 1% -5.01% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
ScriptFibonacci-8 114kB ± 0% 114kB ± 0% ~ (p=0.079 n=4+5)
ScriptNestedRefCount-8 241kB ± 0% 241kB ± 0% ~ (p=0.333 n=5+4)
ScriptPushPop/4-8 160B ± 0% 160B ± 0% ~ (all equal)
ScriptPushPop/16-8 640B ± 0% 640B ± 0% ~ (all equal)
ScriptPushPop/128-8 8.70kB ± 0% 8.70kB ± 0% ~ (all equal)
ScriptPushPop/1024-8 73.2kB ± 0% 73.2kB ± 0% ~ (all equal)
name old allocs/op new allocs/op delta
ScriptFibonacci-8 3.17k ± 0% 3.17k ± 0% -0.03% (p=0.008 n=5+5)
ScriptNestedRefCount-8 10.7k ± 0% 10.7k ± 0% ~ (all equal)
ScriptPushPop/4-8 8.00 ± 0% 8.00 ± 0% ~ (all equal)
ScriptPushPop/16-8 32.0 ± 0% 32.0 ± 0% ~ (all equal)
ScriptPushPop/128-8 259 ± 0% 259 ± 0% ~ (all equal)
ScriptPushPop/1024-8 2.05k ± 0% 2.05k ± 0% ~ (all equal)
It'd be especially nice to internalize static slot, but as we can't compare
slices it's not possible.
2021-12-01 21:36:25 +03:00
Roman Khimov
187198b3a1
Merge pull request #2288 from nspcc-dev/docker/win_unsupported
...
Makefile: add `unsupported` to docker windows image tag and bin version
2021-12-01 19:35:17 +03:00
Anna Shaleva
6d28e7534c
Makefile: add unsupported
to docker windows image tag and bin version
2021-12-01 14:12:34 +03:00
Roman Khimov
a0473aca92
Merge pull request #2283 from nspcc-dev/fix-vm-tests
...
vm: fix cli tests
2021-12-01 11:35:41 +03:00
Roman Khimov
01d15ff473
Merge pull request #2270 from nspcc-dev/vm-invoked-contracts
...
Add invoked contract tracing
2021-12-01 11:27:27 +03:00
AnnaShaleva
c67d249a8d
vm: fix cli tests
...
* Remove extra symbols during command execution.
* Fix test contract paths.
2021-12-01 11:14:29 +03:00
Roman Khimov
c663d3f39f
Merge pull request #2279 from nspcc-dev/minor-fixes
...
services: fix Oracle response creation algorithm
2021-11-30 18:15:50 +03:00
Roman Khimov
dbe184a335
Merge pull request #2280 from nspcc-dev/compiler-struct-cast
...
compiler: allow to slice struct field
2021-11-30 18:14:56 +03:00
Roman Khimov
c14376473b
Merge pull request #2282 from nspcc-dev/defer-after-interop
...
Fix defers in functions using inlined calls
2021-11-30 18:14:13 +03:00
Roman Khimov
f12f871432
compiler: use new defer stack for inlined functions, fix #2281
...
Inlined functions shouldn't care about outer scope defer statements, they
can't.
2021-11-30 18:04:02 +03:00
Roman Khimov
cddd5e1f6d
compiler: add a panic on internal lambda inconsistency
...
It's a bit better than behavior observer in #2281 (which is very cryptic).
2021-11-30 18:02:38 +03:00
Evgeniy Stratonikov
66a4245bef
compiler: allow to slice struct field
...
It makes no sense to restrict to identifiers.
2021-11-30 15:48:46 +03:00
Anna Shaleva
1d1538c566
services: fix Oracle response transaction creation
...
Problem: transactions with wrong hashes are accepted to the chain if
consensus nodes are designated as Oracle nodes. The result is wrong
MerkleRoot for the accepted block. Consensus nodes got such blocks
right from the dbft and store them without errors, but if
non-consensus nodes are present in the network, they just can't accept
these "bad" blocks:
```
2021-11-29T12:56:40.533+0300 WARN blockQueue: failed adding block into the blockchain {"error": "invalid block: MerkleRoot mismatch (expected a866b57ad637934f7a7700e3635a549387e644970b42681d865a54c3b3a46122, calculated d465aafabaf4539a3f619d373d178eeeeab7acb9847e746e398706c8c1582bf8)", "blockHeight": 17, "nextIndex": 18}
```
This problem happens because of transaction hash caching. We can't set
transaction hash if transaction construction wasn't yet completed.
2021-11-30 10:43:58 +03:00
Anna Shaleva
6101d4b251
cli: improve error messages for signStoredTransaction
...
It's nice for user when he sees meaningful error messages.
2021-11-29 11:34:07 +03:00
Roman Khimov
33e37e60e5
Merge pull request #2264 from nspcc-dev/fix-win-tests
...
*: Windows compatibility fixes
2021-11-29 11:25:35 +03:00
AnnaShaleva
5ef9f4498e
.github: add job to publish image for WSC
...
Also, remove Go setup from publishing jobs because we don't need Go on runner.
2021-11-29 11:13:54 +03:00
AnnaShaleva
d2d75b8ba5
.github: unify Tests workflow
2021-11-29 11:13:49 +03:00
AnnaShaleva
e64a617844
.github: add action to build WSC image
2021-11-29 11:11:09 +03:00
AnnaShaleva
b940167a6b
.github: create separate workflow to build CLI/image
...
There's too much jobs in Tests workflow, so we can split them into several parts.
2021-11-29 11:11:09 +03:00