diff --git a/CHANGELOG.md b/CHANGELOG.md index 775fa3a59..2dc9848fa 100644 --- a/CHANGELOG.md +++ b/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 diff --git a/ROADMAP.md b/ROADMAP.md index 78f912f7b..317b72180 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -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