neoneo-go/pkg
Roman Khimov 7fc153ed2a network: only ask mempool for intersections with received Inv
Most of the time on healthy network we see new transactions appearing that are
not present in the mempool. Once they get into mempool we don't ask for them
again when some other peer sends an Inv with them. Then these transactions are
usually added into block, removed from mempool and no one actually sends them
again to us. Some stale nodes can do that, but it's not very likely to
happen.

At the receiving end at the same time it's quite expensive to do full chain
HasTransaction() query, so if we can avoid doing that it's always good. Here
it technically allows resending old transaction that will be re-requested and
an attempt to add it to mempool will be made. But it'll inevitably fail
because the same HasTransaction() check is done there too. One can try to
maliciously flood the node with stale transactions but it doesn't differ from
flooding it with any other invalid transactions, so there is no new attack
vector added.

Baseline, 4 nodes with 10 workers:

RPS    6902.296 6465.662 6856.044 6785.515 6157.024 ≈ 6633   ± 4.26%
TPS    6468.431 6218.867 6610.565 6288.596 5790.556 ≈ 6275   ± 4.44%
CPU %    50.231   42.925   49.481   48.396   42.662 ≈   46.7 ± 7.01%
Mem MB 2856.841 2684.103 2756.195 2733.485 2422.787 ≈ 2691   ± 5.40%

Patched:

RPS    7176.784 7014.511 6139.663 7191.280 7080.852 ≈ 6921   ± 5.72% ↑ 4.34%
TPS    6945.409 6562.756 5927.050 6681.187 6821.794 ≈ 6588   ± 5.38% ↑ 4.99%
CPU %    44.400   43.842   40.418   49.211   49.370 ≈   45.4 ± 7.53% ↓ 2.78%
Mem MB 2693.414 2640.602 2472.007 2731.482 2707.879 ≈ 2649   ± 3.53% ↓ 1.56%
2021-08-06 20:53:02 +03:00
..
compiler native: drop Refuel method from GAS 2021-08-05 10:27:13 +03:00
config config: update mainnet magic 2021-07-21 14:42:26 +03:00
consensus consensus: fix nonce handling 2021-07-21 19:06:19 +03:00
core core: don't recalculate witness script hash 2021-08-06 11:25:09 +03:00
crypto keys: trivial code simplification 2021-07-21 17:05:49 +03:00
encoding util: move ArrayReverse into package of its own 2021-07-19 22:57:55 +03:00
interop native: drop Refuel method from GAS 2021-08-05 10:27:13 +03:00
io stackitem: use byte-slice directly during encoding 2021-07-13 11:06:18 +03:00
network network: only ask mempool for intersections with received Inv 2021-08-06 20:53:02 +03:00
rpc core: implement dynamic NEP17 balances tracking 2021-07-29 10:23:01 +03:00
services notary: fix possible deadlock in UpdateNotaryNodes 2021-07-23 14:48:00 +03:00
smartcontract Merge pull request #2093 from nspcc-dev/states-exchange/drop-nep17-balance-state 2021-07-29 19:08:42 +03:00
util slice: introduce common Copy helper 2021-07-19 22:57:55 +03:00
vm vm: don't create reference counter when it's not needed 2021-08-02 22:38:41 +03:00
wallet wallet: use named constants in Seek 2021-07-29 17:11:50 +03:00