CHANGELOG/ROADMAP: release 0.92.0

This commit is contained in:
Roman Khimov 2020-12-28 16:53:52 +03:00
parent 197b98f40b
commit 25435bbb52
2 changed files with 235 additions and 3 deletions

View file

@ -2,6 +2,238 @@
This document outlines major changes between releases.
## 0.92.0 "Fermentation" (28 Dec 2020)
NeoGo project is closing year 2020 with 3.0.0-preview4 compatible release that
also has much improved performance, a lot of updates to compiler and SDK and
some experimental protocol extensions. This release also is the most tested
release of NeoGo ever, we've reached 83% code coverage (Neo 2.x only has
66%).
Please note that this release is incompatible with 0.91.0 and there are no
plans for long-term support of it, Neo 3 is still changing and improving.
Protocol-wise this release is tested with preview4 testnet (including working
in consensus with C# nodes) and it is compatible with it even though there are
some known storage change mismatches between NeoGo and C# (functionally the
contents is the same, this mismatch is caused by JSON handling differences and
needs to be addressed at the protocol level).
New features:
* "high priority" transaction attribute (#1341)
* "oracle response" transaction attribute (#1407, #1520, #1573)
* new GAS distribution and committee update scheme (#1364, #1529, #1518,
#1542, #1549, #1636, #1639)
* oracle native contract (#1409, #1432, #1474, #1476, #1521, #1528, #1548,
#1556, #1625)
* designation native contract (#1451, #1504, #1519)
* support for `_deploy` method (#1452, #1466)
* `MaxTraceableBlocks` parameter can now be configured (#1520)
* `KeepOnlyLatestState` configuration option to drop old MPT data (#1553)
* `StateRootInHeader` configuration option to include state root data in the
header (it's a protocol extension, so use with care, #1500)
* NEP-5 was replaced by NEP-17 (#1558, #1574, #1617, #1636)
* `RemoveUntraceableBlocks` configuration option to perform old (unreachable)
block and transaction purging (#1561)
* stable deployed contract hashes (#1555, #1616, #1628)
* `Safe` method flag for contract manifests (#1597, #1607)
* native Management contract to deploy/update/destroy contracts (#1610,
#1624, #1636)
* Compiler/SDK:
- base58 encoding/decoding interops for smart contracts (#1350, #1375)
- you can use aliases now when importing interop packages (#397)
- `+=` operator is now supported for strings (#1351)
- `switch` without statement support (#1355)
- `make()` support for maps and slices using basic types (#1352)
- `copy()` support for byte slices (#1352, #1383)
- `iota` support (#1361)
- support for basic function literals (#1343)
- new variable initialization is now supported in `if` statements (#1343)
- `defer` is now supported (#1343)
- `recover()` support for exception handling (#1343, #1383)
- `delete()` support (#1391)
- `util.Remove()` function is added for smart contracts to remove elements
from slice (#1401)
- `interop` package now provides specific type aliases like Hash160/Hash256
for smart contracts to use (it affects generated manifests, #1375, #1603)
- variables and function calls support in struct and slice literals (#1425)
- atoi/itoa encoding/decoding interops for smart contracts (#1530, #1533)
- contracts specifying NEP-17 as supported standard are now checked for
interface compliance (#1373)
- `contract.CallEx` function is now available to contracts that allows
specifying flags for contract called (#1598)
* CLI:
- support for array parameters in invocations (#1363, #1367)
- contract addresses can now be imported into wallet (#1362)
- deploying/invoking from multisignature accounts (#1461)
* RPC:
- `getcommittee` RPC call (#1416)
- limits and paging are now supported for `get*transfers` calls (#1419)
- `getunclaimedgas` RPC call now also supports passing address as a
parameter (#1418)
- `getcontractstate` now also accepts addresses, IDs and names (for native
contracts, #1426)
- batched JSON-RPC requests support (#1514)
- `invokecontractverify` RPC call to run verification scripts (#1524)
* P2P notaries subsystem (configurable `P2PSigExtensions` protocol extension,
use with care):
- optional `NotValidBefore` transaction attribute (#1490)
- optional `Conflicts` transaction attribute (#1507)
- native Notary contract (#1557, #1593)
- notary request P2P payload (#1582)
Behavior changes:
* converting items to boolean now fail for strings of bytes longer than 32
(#1346)
* consensus messages now use uint8 field for validator indexes (#1350)
* maximum possible try-catch nesting is now limited to 16 levels (#1347)
* maximum manifest size increased to 64K (#1365, #1555)
* required flags changed for many interop functions (#1362)
* compiler no longer generates code to log `panic()` message (#1343)
* `GetBlock`, `GetTransaction` and similar interop functions now return
pointers to structures (#1375)
* calling script hash now also is accounted for by CheckWitness interop
(#1435, #1439)
* CLI is using `--address` parameter everywhere it's needed (some commands
used `--addr` previously (#1434)
* VM now restricts comparable byte array size to 64K (#1433)
* `FeeOnly` witness scope was renamed to `None` (#1450)
* `getvalidators` RPC call was renamed to `getnextblockvalidators` (#1449)
* `emit.Opcode` is now `emit.Opcodes`, allowing for variadic specification of
opcodes (#1452)
* `CalculateNetworkFee` was moved to `fee.Calculate` (#1467)
* fault exception string is now returned for failed invocations (#1462)
* `runtime.GetInvocationCounter` no longer errors (#1455)
* `invoke*` RPC calls now also return `transaction` field (#1418)
* `getversion` RPC call now also returns network magic number (#1489)
* RPC calls now return data in base64 instead of hex (#1489, #1525, #1537)
* blocked accounts interface and storage was changed in Policy contract (#1504)
* voting fee is lower now (#1510)
* blocks are now processed with two execution triggers, `OnPersist` and
`PostPersist`, `getapplicationlog` RPC call was updated to support passing
trigger type (#1515, #1531, #1619)
* storage fee formula has changed (#1517)
* `MaxValidUntilBlockIncrement` is now 5760 instead of 2102400 (#1520)
* Policy contract no longer saves default values during initialization
(#1535)
* opcode pricing was changed and now it's adjustable (#1538, #1615)
* contracts no longer have `IsPayable` (see NEP-17) and `HasStorage` (they
all have it by default now) features (#1544)
* notification size is restricted now (#1551)
* unsolicited `addr` messages are now treated as errors (#1562)
* native contracts no longer have `name()` methods, it is now a part of
manifest (#1557)
* transaction fees, invocation GAS counters and unclaimed GAS values are now
returned as strings with floating point values from RPC calls (#1566,
#1572, #1604)
* NEF format was changed (#1555)
* `engine.AppCall()` interop was renamed to `contract.Call()` (#1598)
* call flags were renamed (#1608)
* deploying contract now costs at minimum 10 GAS and MaxGasInvoke
configuration was adjusted to account for that (the fee is configurable by
the committee, #1624, #1635)
Improvements:
* a lot of new tests added (#1335, #1339, #1341, #1336, #1378, #1452, #1508,
#1564, #1567, #1583, #1584, #1587, #1590, #1591, #1595, #1602, #1633,
#1638)
* a number of optimizations across all node's components applied (#1342,
#1347, #1337, #1396, #1398, #1403, #1405, #1408, #1428, #1421, #1463,
#1471, #1492, #1493, #1526, #1561, #1618)
* smartcontract package now provides function to create simple majority
multisignature contract (in addition to BFT majority, #1341)
* `AddNetworkFee()` now supports contract addresses (#1362)
* error handling and help texts for CLI wallet commands (#1434)
* compiler emitting short jump instructions if possible (#805, #1488)
* compiler emitting jump instructions with embedded conditions where possible
(#1351)
* transaction retransmission mechanism added to mempool (#1536)
* parallel block fetching (#1568)
* Binary and Runtime interops refactored to separate packages (#1587)
* message broadcasts now finish successfully if the message is sent to 2/3 of
peers (#1637)
Bugs fixed:
* TRY opcode implementation was not allowing for 0 offsets (#1347)
* compiler wasn't dropping unused elements returned from calls (#683)
* MEMCPY with non-zero destination index was not working correctly (#1352)
* asset transfer from CLI didn't work (#1354)
* specifying unknown DB type in configuration file induced node crash (#1356)
* address specifications in configuration file didn't work correctly (#1356)
* RPC server wasn't processing hashes with "0x" prefix in parameters (#1368)
* incorrect context unloding on exception handling (#1343)
* attempt to get committee only returned validators if there was no voting on
chain (#1370)
* block queue could be attacked with wrong blocks to cause OOM (#1374)
* token sale example wasn't checking witness correctly (#1379)
* structure methods were added to generated manifests (#1381)
* type conversions in `switch` and `range` statements were compiled as
function calls (#1383)
* RPC server result format wasn't conforming to C# implementation for
`getapplicationlog` and `invoke*` (#1371, #1387)
* subslicing non-byte slices was miscompiled (it's forbidden now, #1401)
* potential deadlock in consensus subsystem (#1410)
* race in peer connection closing method (#1378)
* race in MPT calculation functions (#1378)
* possible panic on shutdown (#1411)
* block-level `getapplicationlog` result had block hash in it (#1413)
* fail CN execution if wrong password is provided in the configuration
(#1419)
* tx witness check didn't account for GAS properly when several witnesses are
used (#1439)
* map keys longer than 64 bytes were allowed (#1433)
* unregistered candidate with zero votes wasn't removed (#1445)
* standard contract's network fee wasn't calculated correctly (#1446)
* witness checking wasn't taking into account transaction size fee (#1446)
* sending invalid transaction from the CLI wasn't prevented in some cases
(#1448, #1479, #1604)
* `System.Storage.Put` wasn't accounting for new key length in its GAS price
(#1458)
* blocks can't have more than 64K transactions (#1454)
* Policy native contract wasn't limiting some values (#1442)
* MerkleBlock payload wasn't serialized/deserialized properly (#1454, #1591)
* partial contract updates were not always possible (#1460)
* potential panic on verification with incorrect signature size (#1467)
* CLI attempted to save transaction when it wasn't requested (#1467)
* VM allowed to create bigger integers than it should support (#1464)
* some protocol limits were not enforced (#1469)
* iterating over storage items could produce incorrect KV pairs when using
LevelDB or BadgerDB (#1478)
* stale transaction were not deleted from the mempool (#1480)
* node panic during block processing with BoltDB (#1482)
* node that failed to connect to seeds on startup never attempted to
reconnect to them again (#1486, #1592)
* compiler produced incorrect code for if statements using function calls
(#1479)
* invocation stack size check wasn't performed in some cases (#1492)
* incorrect code produced by the compiler when assigning slices returned from
functions to new variables (#1495)
* websocket client closing connection on new events (#1494)
* minor `getrawtransaction`/`gettransactionheight` and NEP5-related RPC
implementation incompatibilities (#1543, #1550)
* VM CLI breakpoint wasn't stopping before the instruction (#1584)
* VM CLI was incorrectly processing missing parameter error (#1584)
* wallet conversion wasn't performed correctly (#1590)
* node didn't return all requested blocks in response to `getblocks` P2P
requests (#1595)
* CN didn't request transactions properly from its peers in some cases
(#1595)
* incorrect manifests generated for some parameter types (#1599)
* incorrect code generated when no global variables are present, but there
are some global constants (#1598)
* native contract invocations now set proper calling script hash (#1600)
* byte string and buffer VM stack items conversion to JSON differed from C#
(#1609)
* when mempool is full new transaction's hash could still be added into it
even if it is to be rejected afterwards (#1621)
* CN wasn't always performing timestamp validation correctly (#1620)
* incorrect stack contents after execution could stop block processing
(#1631)
* `getapplicationlog` RPC call handler wasn't validating its parameters
properly, potentially leading to node crash (#1636)
* a peer could be connected twice in rare circumstances (#1637)
* missing write timeout could lead to broadcasting stalls (#1637)
## 0.91.0 "Ululation" (18 August 2020)
We've updated NeoGo for 3.0.0-preview3 compatibility implementing all the

View file

@ -7,8 +7,8 @@ functionality.
## Versions 0.7X.Y (as needed)
* Neo 2.0 support (bug fixes, minor functionality additions)
## Version 0.92.0 (TBD, aligned with preview4 release)
* Neo 3.0.0-preview4 compatible version.
## Version 0.93.0 (TBD, aligned with preview5 release)
* Neo 3.0.0-preview5 compatible version.
## Version 1.0 (2020, aligned with NEO 3.0 release)
## Version 1.0 (2021, aligned with NEO 3.0 release)
* full NEO 3.0 support