Skip to content

Releases: nspcc-dev/neo-go

Zincification

03 Dec 08:34
Compare
Choose a tag to compare

We've implemented all of Neo 3.1.0 protocol changes in this release (and features like NEP-11 transfer tracker), but as usual it's not the only thing it contains. If you're developing contracts in Go you might be interested in contract testing framework this release brings with it, which allows you to write automated tests in Go. You can also build a node for Windows now and most of functionality works there (but some known problems still exist, so this port is considered to be experimental for now). As usual there were some optimizations made in various components as well as bug fixes.

There are also some things removed in this release, that is BadgerDB and RedisDB support, this will allow us to optimize better for LevelDB and BoltDB in future. Notice also that this release requires full node resynchronization.

New features:

  • optional signer scope parameter for deploy command (#2213)
  • interop packages extended with Abort() function and useful constants (#2228)
  • notary subsystem now allows to have multiple multisignature signers as well as combining simple notary-completed accounts with multisignature ones (#2225)
  • configurable method overloading for the compiler (#2217)
  • initial support for the Windows platform (#2239, #2265, #2267, #2264, #2283, #2288)
  • contract testing framework (#2229, #2262)
  • Rules witness scope (#2251)
  • PACKMAP/PACKSTRUCT opcodes and UNPACK extension (#2252)
  • NEP-11 transfer tracking with RPC API (#2266)
  • support for structure field slicing in the compiler (#2280)
  • invoked contract tracing for invoke* RPCs (#2270, #2291)

Behavior changes:

  • BadgerDB and RedisDB are no longer available for DB backend (#2196)
  • GetNEP17Transfers() RPC client method now works with Uint160 parameter instead of address (#2266)

Improvements:

  • compiler optimizations (#2205, #2230, #2232, #2252, #2256)
  • output fees as proper decimals in the CLI (#2214)
  • private network created from Makefile now uses dynamic IP addresses (#2224)
  • various minor optimizations across whole codebase (#2193, #2243, #2287, #2290)
  • util convert command now also handles base64 representations of script hashes (#2237)
  • unified "unknown transaction" RPC responses (#2247)
  • faster state switch when using P2P state synchronization extension (#2201)
  • better logging for oracle errors (#2275)
  • updated NeoFS client library dependency (#2276)

Bugs fixed:

  • getproof RPC API didn't handle destroyed contracts correctly (#2215)
  • invokefunction RPC returned error if no parameters were passed (#2220)
  • incorrect handling of empty MPT batch (#2235)
  • incoming block queue using more memory than it should, up to OOM condition on stuck node (#2238)
  • panic on peer disconnection in rare cases (#2240)
  • panic on password read failure (#2244)
  • miscompiled functions using defer and returning no values (#2255)
  • oracle responses processed not using request witnesses (#2261)
  • CreateTxFromScript() RPC client method incorrectly handled CustomContracts and CreateTxFromScript sender scopes (#2272)
  • potential OOM during synchronization on systems with slow disks (#2271)
  • incorrect oracle peer configuration in the default private network (#2278)
  • compiler error processing functions using defer and inlined calls (#2282)
  • node that is simultaneously a CN and Oracle node could create invalid oracle response transactions (#2279)
  • incorrect GetInvocationCounter() result in some cases (#2270)

Exception

13 Oct 12:48
Compare
Choose a tag to compare

This updated version of NeoGo is made to be compatible with Neo 3.0.3 bringing with it all corresponding protocol changes and bug fixes so that you can use it on public testnet and mainnet. It also brings with it a complete experimental P2P state exchange extension for private networks as well as additional optimizations. This is the first version requiring at least Go 1.15 to compile, so make sure your Go is up to date if you're not using pre-built binaries. Protocol updates and bug fixes made in this release require a resynchronization on upgrade.

We also make a final call on Badger and Redis DB issue #2130, if there are no active users of them, support for both will be removed in the next release.

New features:

  • MaxConnsPerHost RPC client option (#2151)
  • P2P state exchange extension (#2019)
  • transaction-related CLI commands now show calculated fees before sending transaction to RPC node and ask for confirmation (#2180)
  • test invocations are now possible for partially-signed transactions stored in JSON format (used for manual signing by multiple parties, #2179)
  • getstate and findstates RPC to retrieve historic state data (#2207)

Behavior changes:

  • added support for Go 1.17, dropped Go 1.14 (#2135, #2147)
  • blocking native contracts is no longer possible in Policy contract (#2155)
  • getversion RPC call now also returns protocol configuration data (#2161, #2202)
  • NEF files now have Source field that can be specified in contract's metadata (#2191)
  • notification events from contracts in subscription service now also contain container (transaction usually) hash (#2192)
  • out of bounds exceptions can be catched in contracts now for PICKITEM and SETITEM VM instructions (#2209)

Improvements:

  • reduced number of memory allocations in some places (#2136, #2141)
  • VM optimizations (#2140, #2148)
  • notary subsystem documentation (#2139)
  • documentation fixes (#2162)
  • VM CLI now allows to dump slots (#2164)
  • better IPv6 checks in example NNS contract and getAllRecords method (#2166)
  • updated linters (#2177)
  • Migrate methods renamed into Update in examples (#2183)
  • old (no longer available) interop function names removed (#2185)
  • optimized processing of voting NEO transfers (#2186)
  • configuration parameters specified in seconds no longer use (improper) time.Duration type (#2194)
  • better error message for conflicting transactions (#2199)
  • open wallet in read-only mode if not changing it (#2184)
  • optimized header requests in P2P communication (#2200)
  • compiler now checks for method existence if it's specified as safe in metadata (#2206)

Bugs fixed:

  • incorrect CustomGroups witness scope check (#2142)
  • empty leaf values were ignored for MPT calculcations (#2143)
  • lower-case hexadecimal in block header JSON output (differing from C# node, #2165)
  • getblockheader RPC result missing Nonce and Primary fields (#2165)
  • return empty list of unverified transactions for getrawmempool RPC instead of null (C# node never returns null, #2165)
  • return empty list of NEF tokens in JSON format instead of null which C# node never returns (#2165)
  • races in some tests (#2173)
  • parameter context JSON serialization/deserialization incompatiblity with C# node leading to interoperability problems (#2171)
  • transfers of 0 GAS or NEO were not possible (#2169)
  • incorrect ContentTypeNotSupported oracle response transaction handling (#2178)
  • JSON escaping differences with C# implementation (#2174)
  • NEO balance update didn't save LastUpdatedBlock before GAS distribution leading to problems in transactions with recursive NEO transfers (#2181)
  • panic in CLI transfer command when missing destination address (#2211)
  • multiple blank identifiers in function/method were misinterpreted by the compiler (#2204)
  • getnep17transfers used uint32 for internal time processing which is not enough for ms-precision N3 timestamps (#2212)
  • PICKITEM instruction could fail on attempt to get an item with long key from map (#2209)

Dissipation

18 Aug 12:14
Compare
Choose a tag to compare

We're rolling out an update for NeoGo nodes that mostly concentrates on performance. We've tweaked and tuned a lot of code while staying compatible with N3 mainnet and testnet. At the same time we're gradually introducing changes required for our P2P state exchange extension and this affected DB format, so you'll need to resynchronize on update. This update is not mandatory though, 0.97.1 is still perfectly valid for N3 networks.

Note also that we're discussing removal of Badger and Redis databases support in future releases, so if you're interested in them take a look at #2130.

Behavior changes:

  • address blocking in Policy contract now also blocks calls to contracts with blocked addresses (#2132)

Improvements:

  • numerous memory and CPU optimizations across whole codebase (#2108, #2112, #2117, #2118, #2122, #2123, #2128, #2114, #2133)
  • preliminary work for P2P state exchange extension (#2119)
  • util convert command now also detects public keys and converts them to script hash/address (#2125)

Bugs fixed:

  • key decoding functions could accept some additional data even though only key is expected to be present (#2125)
  • conflicting dummy transactions could stay in the DB even with block removal enabled (#2134)

Cementation

12 Aug 20:00
Compare
Choose a tag to compare

Neo Legacy is still there and we still support our node for it. This update makes NeoGo compatible with awaited GAS generation cut off on mainnet planned for block 8000000. It also fixes some bugs along the way. DB format isn't changed, so if you're updating before block 8M you can reuse old database, but you need to update configuration to add NoBonusHeight parameter (see our default configuration files).

New features:

  • system GAS can now be added to invocations via CLI (#1783)
  • NoBonusHeight configuration parameter to turn GAS generation off at some height (#2107)

Bugs fixed:

  • invalid transfer event could cause node to panic (#1901)
  • incorrect MPT initialization could lead to block rejection if node stopped synchronization before any MPT change (#1910)
  • duplicate connections to peers (#2020)
  • infinite loop attempting to connect to other nodes in some cases (#2020)
  • ping messages sent with wrong height and nonce (#2116)
  • node could lose some data on forced stop in some cases (#2126)

Gasification

06 Aug 11:41
Compare
Choose a tag to compare

We're updating NeoGo to make it compatible with the latest protocol changes made in 3.0.2 version of C# node. But that's not the only thing we do, this release also fixes one important bug, improves node's performance and adds CLI support to add group signatures to manifests.

It requires resynchronization on upgrade.

New features:

  • contract manifest add-group command to add group signatures to contract manifest (#2100)

Behavior changes:

  • GAS contract no longer has Refuel method, it could be used as DOS amplification tool for attacks on network and there is no way to securely fix it (#2111)

Improvements:

  • memory store optimizations leading to substantial single-node TPS improvements (#2102)
  • various micro-optimizations across the board both for CPU usage and memory allocations (#2106, #2113)
  • optimized transaction decoding (#2110)

Bugs fixed:

  • ping messages created with wrong value used for node's height (#2115)

Ventilation

02 Aug 17:04
Compare
Choose a tag to compare

This is an official 3.0.0-compatible release that is ready to be used both for mainnet and testnet. Technically, 0.96.0 and 0.96.1 are compatible too, but they need an updated configuration to work on mainnet while this version has it covered.

We keep improving our node and this release is not just a repackage of something older, so DB format changes require a resynchronization if you're upgrading from 0.96.X.

Behavior changes:

  • updated configuration for mainnet (#2103)

Improvements:

  • documentation for contract configuration file (#2097)
  • significant change to NEP-17 tracking code, it shouldn't affect valid NEP-17 tokens, but now we store a little less data in the DB and get more from token contracts when needed (for getnep17balances RPC for example); this change is required for our future state exchange protocol extension (#2093)
  • improved block processing speed on multicore systems (#2101)
  • JSON deserialization now has the same limits as binary, but this doesn't affect any valid code (#2105)

Bugs fixed:

  • potential deadlocks in notary-enabled nodes (#2064)
  • wallet files not truncated properly on key removal (#2099)

Brecciation

23 Jul 10:29
Compare
Choose a tag to compare

New CLI commands, updated dependencies and some bugs fixed --- you can find all of this in the new NeoGo release. It's compatible with 0.96.0 (except for multisignature contexts, but you're not likely to be using them) and confirmed to have proper RC4 testnet state up to 15K blocks (but 0.96.0 is fine wrt this too). At the same time we recommend to resynchronize the chain if you're using LevelDB or BoltDB, both databases were updated.

New features:

  • query candidates, query committee and query height CLI commands (#2090)
  • GetStateHeight RPC client call support (#2090)

Behavior changes:

  • wallet candidate getstate command was renamed to query voter, now it also prints the key voted for and handles addresses with 0 balance without spitting errors (#2090)

Improvements:

  • query tx now outputs signer address along with script hash (#2082)
  • updated many of node's dependencies including BoltDB and LevelDB, there are no radical changes there, mostly just some fixes improving stability (#2087)
  • better error messages in some places (#2089, #2091)

Bugs fixed:

  • query tx command wasn't providing correct results if used with C# RPC node (#2082)
  • watch-only node (with a key, but not elected to participating in consensus) could panic on receiving a number of Commit messages (#2083)
  • getstateheight RPC call produced result in different format from C# node (#2090)
  • JSON representation of multisignature signing context wasn't compatible with C# implementation (#2092)

Aspiration

21 Jul 14:02
Compare
Choose a tag to compare

We're updating NeoGo to support RC4 changes, there are some incompatible ones so this version can't be used with RC3 networks/chains (RC3 testnet is still available, please use 0.95.4 for it). This release was checked for RC4 testnet compatibility and has the same state as C# for the first 5K blocks.

No significant protocol changes are expected now as we're moving to final N3 release, but we'll keep updating the node fixing bugs (if any), improving performance and introducing NeoGo-specific features.

New features:

  • "System.Runtime.GetNetwork" system call (#2043)
  • ContentTypeNotSupported oracle return code and content type configuration for Oracle service (#2042)
  • block header have "Nonce" field again which is used for "System.Runtime.GetRandom" system call (#2066)
  • import from incremental chain dumps (#2061)
  • configurable initial (from the genesis block) GAS supply (#2078)
  • "query tx" CLI command to check for transaction status (#2070)

Behavior changes:

  • verification GAS limits were increased (#2055)
  • SQRT price reduced (#2071)
  • binary deserialization is now limited to 2048 (MaxStackSize) items (#2071)
  • notary deposit is stored now as serialized stack item (#2071)
  • testnet and mainnet configuration updates (#2077, #2079, #2081)

Improvements:

  • faster stack item binary and JSON serialization (#2053)
  • faster Storage.Find operation (#2057)
  • additional documentation for public network CNs (#2068)
  • better code reuse for native contract's data serialization (#2071, see new stackitem.Convertible interface)
  • some types from state package renamed to remove "State" word (#2075)
  • util.ArrayReverse helper moved to package of its own with additional helpers (#2075)

Bugs fixed:

  • nested structure cloning could lead to OOM (#2054, #2071)
  • addresses were not accepted for witness accounts in RPC calls (#2072)
  • POW instruction could take unknown amount of time to complete for big parameters (#2060)
  • oracle contract could accept invalid user data (#2071)
  • EQUAL for deeply nested structures could never complete (#2071)
  • arrays and structures were limited to 1024 items (#2071)
  • oracle fallback transactions could try using outdated ValidUntilBlock value (#2074)
  • oracle node starting from genesis block tried to process all requests from the chain instead of only working with current ones (#2074)
  • some tests used non-unique/wrong temporary files and directories (#2076)

Yatter

09 Jul 08:38
Compare
Choose a tag to compare

Making a fully compliant Neo node is not easy, there are lots of minuscule details that could be done in a little different way where both ways are technically correct but at the same time just different which is enough to create some interoperability problems. We've seen that with Legacy node implementation where we were functionally complete with 0.74.0 release but some fixes kept coming up to the most recent 0.78.3 version. It was a bit easier with Legacy because we already had some years-long chains to test the node against while N3 is a completely new territory.

So we'd like to thank all RC3 hackathon participants as well as all other people playing with N3 RC3 network, your joint efforts gave enough material to keep us busy fixing things for some time. The chain moving forward hit more and more edge cases with every block and this is actually very helpful, we saw a lot of things that could be improved in our node and we improved them.

Now we're releasing 0.95.4 with all of these fixes which is still RC3-compatible and it's stateroot-compatible with C# implementation up to 281K blocks. Please resynchronize to get identic testnet state. And most likely that's the last RC3-compatible release as we're moving forward to the official 3.0.0 release of C# version NeoGo will be updated with appropriate changes some of which are not compatible with RC3).

New features:

  • 'sysgas' parameter for invocation and transfer CLI commands to manually add some system fee GAS (#2033)

Behavior changes:

  • contract calls are now checked against specified permissions by the compiler (#2025)
  • stack items with nesting levels of 10 and more won't be serialized to JSON for purposes like including them into RPC call reply (#2045)

Improvements:

  • AddHeaders() with multiple headers added at the same time now works with StateRootInHeader option (#2028)
  • cached GAS per vote value leads to substantially improved block processing speed (#2032)
  • failed native NEP17 transfers now still re-save the old value to the storage making state dumps compatible with C# (#2034)
  • refactored and renamed some stackitem package functions, added proper error values in all cases (#2045)
  • RPC calls (and application logs) can now return real serialization errors if there are any (previously all errors were reported as "recursive reference", #2045)
  • better tests (#2039, #2050)

Bugs fixed:

  • wrong onNEP11Payment name in contract configuration examples (#2023)
  • missing permission sections in contract configuration examples (#2023)
  • buffer stack item deserialization created byte string (#2026)
  • Extra contract manifest field serialization was reworked to match C# implementation more closely (#2021)
  • wildcard permission in manifest allowed any methods, while it shouldn't (#2030)
  • group permission in manifest worked incorrectly for a set of groups (#2030)
  • call flags were JSONized in incompatible way (#2041)
  • MPT update left branch nodes with 1 child in some cases (#2034, #2047)
  • JSON marshalling code for stack items detected item recursion in some cases where no actual recursion was present (#2045)
  • binary serialization code for stack items could overwrite old errors in some cases (#2045)
  • binary serialization code for stack items wasn't ensuring maximum size limit during serialization which could lead to OOM (#2045)
  • batched MPT update create excessive extension nodes for the last child of branch node in some cases (#2047)
  • in some cases "TCP accept error" was logged during node shutdown (#2050)
  • contract updating code was updating caches before they should've been updated (#2050)
  • INVERT/ABS/NEGATE unary operations were not copying their arguments (#2052)

Yuppification

17 Jun 13:03
Compare
Choose a tag to compare

One more N3 RC3-compatible release that fixes testnet state difference at block 151376. Please resynchronize to get proper testnet state.

Behavior changes:

  • NEP2-related functions in crypto/keys package changed a bit to allow Scrypt parameters overriding, standard parameters are available via NEP2ScryptParams function (#2001)

Improvements:

  • better unit test stability (#2011, #2001)
  • updated neofs-api-go dependency (with support for TLS-enabled NeoFS node connections, #2003)
  • removed annoying token matching warning (#2018)

Bugs fixed:

  • state mismatch resulting from different committee candidate sorting (#2017)