CHANGELOG/ROADMAP: release 0.92.0
This commit is contained in:
parent
197b98f40b
commit
25435bbb52
2 changed files with 235 additions and 3 deletions
232
CHANGELOG.md
232
CHANGELOG.md
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue