Skip to content

Releases: nspcc-dev/neo-go

Yarborough

01 Aug 16:46
Compare
Choose a tag to compare

Another one 3.5.0-compatible version that is aimed to fix T5 testnet state difference that has happened at block 2336911 which leads to inability to process new blocks since 2418703. The issue is fixed by allowing JSON numbers unmarshalling from scientific notation to Integer stackitem. Maximum parsing precision for such numbers is currently restricted by 53 bits. This is a temporary C#-compatible solution that is likely to change in the future versions when an appropriate C# node bug is fixed (neo-project/neo#2879).

A set of minor bug fixes is included as well to flush some of the long-awaited changes that were blocked by the 0.102.0 release delay (caused by v3.6.0 C# node release delay). In particular, invalid headers returned by an RPC server for error responses, invalid format of incremental dumps created by CLI and deadlock on unhealthy RPC server shutdown. Long-awaited --config-file CLI option to start the node providing a single configuration file is added.

T5 testnet chain requires a complete resynchronization for this version. Mainnet chain resynchronization is recommended, but not required.

New features:

  • --config-file CLI option allowing to start the node with a single configuration file (#3014)

Improvements:

  • blockchain Notary and Oracle services documentation improvement (#2972)
  • BoltDB (go.etcd.io/bbolt) dependency upgrade that fixes a number of Windows-related issues (#3034)

Bugs fixed:

  • panic on node start with invalid configuration (#2968)
  • deadlock on unhealthy RPC server shutdown (#2966)
  • improper WSClient notification channels managing after disconnection (#2980)
  • missing Prometheus metric initialisation on node start (#2992)
  • invalid initialisation of native contracts cache (#2994)
  • incorrect way of incremental DB dumps creation (#3047)
  • Notary contract is allowed to be a sender of main Notary request transaction (#3065)
  • discrepancy in signer's witness scope parsing on the RPC server side (#3060)
  • Invoker calling API isn't allowed to accept nil parameter (#3067)
  • contract RPC Client unwrapper helper can't handle missing contract case (#3072)
  • JSON numbers can't be unmarshalled to stackitem from scientific notation (#3073)
  • invalid content-type header returned by RPC server on error responses (#3075)

Yuckiness

08 Jul 09:16
Compare
Choose a tag to compare

Yet another 3.5.0-compatible emergency version that removes scrupulous instructions check of smart contract's script on contract deployment or update. Presence of this check leads to the known T5 testnet state incompatibility (since 1670095) which causes inability to process new blocks (since 2272533). It should be noted that the corresponding check was accidentally removed from the reference C# node implementation way back in neo-project/neo#2266 and added again in neo-project/neo#2849 which is planned to be a part of the upcoming 3.6.0 C# node release. Thus, changes made in the presented 0.101.3 release will be reverted afterwards and strict contract script check will be present in the next 3.6.0-compatible version of NeoGo node.

T5 testnet chain requires a complete resynchronization for this version. Mainnet chain resynchronization is recommended.

Bugs fixed:

  • extra strict contract script check on contract deployment or update is removed (#3052)

Excavation

29 Jun 09:36
Compare
Choose a tag to compare

One more (and unexpected one!) 3.5.0-compatible version that fixes a VM bug leading to mainnet state incompatibility (since 3672783) which in turn leads to inability to process new blocks (since 3682290).

Mainnet chain needs to be resynchronized for this version.

Improvements:

Bugs fixed:

  • incorrect handling of empty Any-type parameter for RPC invocations (#2959)
  • incorrect state rollbacks in case of exception during cross-contract call when the call is made from non-TRYing context (#3046)

Shallowness

17 Mar 09:50
7306bec
Compare
Choose a tag to compare

Another 3.5.0-compatible version that delivers important bug fixes and provides a new API to be used by NeoFS. An upgrade is recommended, the DB doesn't need to be resynchronized.

New features:

  • internal RPC client for deeply integrated applications like NeoFS (#2916)

Improvements:

  • documentation updates (#2879, #2880, #2893, #2917, #2920, #2936)
  • code style, spelling and updated linter fixes (#2884, #2922, #2933)
  • NEP-2 import password can be provided via config file now (#2887)
  • custom stack item deserialization limit is available via public APIs now (#2904)
  • RPC client endpoint can be retrieved via public API (#2915)
  • dependency updates (#2919, #2929)
  • WSClient now copies filter parameters to Subscribe* and Receive* methods improving code safety (#2937)

Bugs fixed:

  • name parameter ignored for wallet import command (#2887)
  • incorrect RPC binding code generated for Any return type (#2918)
  • memory leak on active peer disconnection (#2924)
  • consensus process deadlock (#2930)
  • dBFT deadlock in "committed at previous view" scenario (#2935)
  • panic in RPC waiter code (#2938)

Shortness

13 Jan 10:25
22fc8d1
Compare
Choose a tag to compare

This release delivers an important fix for block execution application logs and requires a resynchronization, therefore it's 0.101.0 (even though it's also 3.5.0-compatible). It fixes some other minor problems as well (the other most notable change probably is in the compiler), so we recommend upgrading.

Improvements:

  • updated golang.org/x/* dependencies (#2854)
  • CLI help and required flags handling fixes (#2852)
  • transfer data storage optimization (#2865)
  • network's magic number is stored (and checked against the config on startup) in the DB now, reducing potential for node operator errors (#2867)

Bugs fixed:

  • in rare cases nodes could request an invalid number of blocks from peers leading to disconnect (#2846)
  • outdated documentation fixes (#2860, #2876)
  • application logs for blocks that contained GAS spends for transaction fees contained (and returned from getapplicationlog RPC) incorrect (off by one) values for amount in Transfer events; transaction application logs were not affected by this, but data returned to RPC event subscribers could potentially be (#2865)
  • findstates RPC returned an error instead of an empty data set for valid contracts that have no data (unlike C# node, #2866)
  • miscompiled shadowed range loop variable definition (#2871)
  • missing (compared to C# node) explicit (even though null) 'exception' field in the getapplicationlog RPC output from server (#2872)

Chaptalization

28 Dec 12:39
c64dc9a
Compare
Choose a tag to compare

This is a tiny update that 99.99% of users can easily skip. The reason for this release is the need to fix compatibility with the NeoFS mainnet sidechain and have some stable version to be used there. In any other case it can be ignored, but if you still decide to upgrade you don't need to resynchronize.

Behaviour changes:

  • Aspidochelone fork is made to include ContractManagement native contract deploy/update methods call flags change, initially it was an unconditional part of 0.99.0 NeoGo release (or 3.2.0 C# version), but this behavior is incompatible with the NeoFS mainnet sidechain; the change to the fork logic does not affect any other public networks (mainnet/testnet) and any new networks that have Aspidochelone enabled since block 0 (#2848)

Improvements:

  • more robust NEP-11 divisibility check in the RPC server code (#2841)
  • microoptimization for some debug log messages (#2842)
  • additional fuzz tests for integer serialization and script parsing code (#2851)

Centuplication

08 Dec 09:05
628f047
Compare
Choose a tag to compare

A 3.5.0-compatible version of NeoGo with all the appropriate protocol updates and a number of other changes. The most notable ones are configuration updates. New features and some long-standing inconsistencies required for some changes and this release brings them with it. Old configurations are still supported and will work the same way (except for one minor exception in VerifyBlocks that is only supposed to be used for tests/development), but we'd like to highlight that all of the old settings will be removed in ~6 months, so please review these updates and update your configurations. For public networks the best way to go is to take the new versions from the "config" directory and then adjust for particular scenario if needed.

This release requires a complete resynchronization due to native contract changes, so please schedule your updates appropriately.

New features:

  • System.Runtime.LoadScript syscall (and appropriate smart contract interops) allowing to load/run dynamic code (#2719)
  • PUSHT/PUSHF VM instructions allowing for simpler/cheaper booleans (#2770)
  • ContractManagement native contract was extended with ID->hash mappings and getContractById and getContractHashes methods (#2702, #2837)
  • LogLevel application configuration option that can be changed on SIGHUP (#2831)
  • additional type data generated by the compiler that then can be used by the RPC bindings (SDK/contract wrapper) generator, this allows for complex types (structures/arrays/maps) to be easily represented/handled in contract-specific RPC code (#2828)
  • multiaddress listeners for all services and P2P, this changes the old Address/Port (and AnnouncedPort for P2P) configuration scheme to more generic Addresses list, the old configuration is still supported, but is deprecated and will be removed in future node versions (#2827, #2839)

Behaviour changes:

  • Aspidochelone fork block for NeoFS sidechain mainnet configuration is rescheduled again (#2823, #2830)
  • Blockchain's GetHeaderHash() method now accepts uint32 for parameter (#2814)
  • pre-0.97.3 and pre-0.99.0 deprecated compatibility fields and logic were dropped from the result.Version (getversion RPC result) structure (#2786)
  • SecondsPerBlock protocol configuration variable was replaced with TimePerBlock allowing for sub-second precision, SecondsPerBlock is still supported, but will eventually be removed (#2829)
  • AttemptConnPeers, BroadcastFactor, DialTimeout, ExtensiblePoolSize, MaxPeers, MinPeers, PingInterval, PingTimeout, ProtoTickInterval settings were moved into the new P2P section, timing parameters now use Duration type allowing for more human-friendly values in many cases, old parameters are still supported, but will eventually be removed (#2827)
  • consensus (dBFT) is configured as a separate service now that can be enabled/disabled (and can work in "watch only" mode without a wallet), the old direct "UnlockWallet" specification in "ApplicationConfiguration" is still supported, but is deprecated and will be removed in future versions (#2832)
  • GarbageCollectionPeriod, KeepOnlyLatestState, RemoveUntraceableBlocks, SaveStorageBatch and VerifyBlocks settings were moved from ProtocolConfiguration to ApplicationConfiguration; old configurations are still supported, except for VerifyBlocks which is replaced by SkipBlockVerification with inverted meaning (and hence an inverted default) for security reasons; this also affects NewBlockchain and neotest APIs (#2833)

Improvements:

  • more user-friendly error and help messages in some cases (#2824, #2834)
  • faster node startup time and smaller memory footprint for networks with lots (1-2M+) of blocks (#2814)
  • minor documentation fixes (#2834, #2838)

Bugs fixed:

  • transactions with system fee or more than MaxBlockSystemFee are no longer accepted into the mempool, preventing a form a network-wide DoS (#2826)
  • deprecated WSClient subscription methods not working correctly when filters are being used (#2836)

Hyalinization

23 Nov 13:33
92dfec6
Compare
Choose a tag to compare

Bugs, terrestrial arthropods with at least six legs. Sometimes we don't notice them, sometimes we ignore them, but they do exist and there are times when they need to be dealt with in one way or another. Most of the bugs fixed in this release have a little less legs than proper insects, they're far from being as critical as the ones fixed in the previous release and yet we consider them annoying enough to warrant this new version of NeoGo to be published. We don't want to see our users fighting these pesky creatures in the wild, better update and have a troublefree experience.

If you're not affected by #2815 (requests for verbose transaction data and application logs failed for some specific mainnet transaction(s)) you may leave the DB as is with this upgrade, if you want it to be solved then please resynchronize.

Behaviour changes:

  • "loadtx" VM CLI command now uses transaction system fee value as the default GAS limit for the context, unless --gas is used (previously it wasn't limited, #2816)
  • SendRawTransaction RPC client method will now always return transaction hash, even if error occured, this also affects Actor APIs and allows to handle some specific errors (like transaction already present in the mempool) in more appropriate way (#2817)
  • Actor and NotaryActor Wait() wrapper methods now handle "already exists" and "already on chain" errors as non-errors, waiting (if needed) and returning proper results (#2817)

Improvements:

  • reworked network discoverer/connection manager that has a better picture of the network (especially if it's a small one), doesn't try to make additional connections (even when having less than MinPeers of them) when there are no more real addresses to connect to, establishes stable connections faster in containerized environments and does more connection attempts when MinPeers setting is not satisfied, but there are potential candidates (#2811)
  • VM invocation stack handling microoptimization (#2812)
  • load* VM CLI commands now accept --gas parameter to set the amount of GAS to be used in this context (#2816)
  • better logging during state reset process (#2813)
  • subscription-based transaction waiter now handles already accepted transactions faster (~immediately vs waiting for block timeout previously, #2817)
  • WSClient can return more specific error on websocket handshake failure if it's provided by server (#2821)
  • new MaxWebSocketClients configuration option for the RPC server to control the number of allowed websocket clients, missing or 0 value make the server use the default of 64 which is compatible with the previous behavior (you can use old configurations if you don't care about this option, #2821)

Bugs fixed:

  • occasional "loadgo" VM CLI test failures because of timeout (#2810)
  • websocket waiter test instability (#2809)
  • websocket event unsubscriptions could lead to node deadlock in rare circumstances (#2809)
  • exception handler could use improper evaluation stack in some cases (#2812)
  • pointer stack items were not handled correctly in "protected" serialization mode leading to inability to deserialize these items back (#2816)
  • state reset functionality not working for big chains like mainnet (#2813)

Funambulation

16 Nov 21:31
f894956
Compare
Choose a tag to compare

An emergency release fixing mainnet incompatibility at block 2504320 leading to inability to process block 2504813. A couple of other less severe bugs got fixed as well. Unfortunately, this release requires complete resynchronization for mainnet, other networks can use old DBs.

Improvements:

  • only transactions requested by the consensus process are forwarded to it now slightly improving performance in some networked scenarios (#2788)
  • a complete set of simple array unwrappers in the unwrap library (#2792)
  • RPC binding generator can handle simple arrays now with configuration file provided (#2792)
  • more user-friendly error messages in some cases (#2797, #2802, #2804)

Bugs fixed:

  • DB was not properly closed after state reset (#2791)
  • VM stack handling problem leading to lost items after return from call to another contract (#2800)
  • "istack" command panic in the VM CLI (#2800)
  • failure to decode incorrect contract from ContractManagement state leading to failure to start the node, it'll be ignored now similar to how C# node treats this (#2802)
  • subscription to execution events failed if no "state" filter was used along with "container" (#2804)
  • Actor using WSClient could deadlock in the transaction waiter during unsubscription (#2804)

Underestimation

11 Nov 14:03
91e9b5f
Compare
Choose a tag to compare

It wasn't long since the previous release until a juicy set of features and optimisations came on board. So we've decided to change our release plan and supply one more 3.4.0 compatible version. It comes up with a massive suite of network P2P and broadcast improvements. We've carefully investigated message sending timeouts on benchmarks, reworked the broadcast logic and significantly reduced delays in message sending and the amount of useless traffic between our nodes. For smart-contract developers and RPC client users several new features were added. These are automatic RPC bindings generator, poll-based and websocket-based transactions awaiting and an extended websocket client subscriptions interface. For better debugging experience we've improved state related functionality of VM CLI and added an ability to reset chain state to a particular height.

An important dBFT initialization bug that caused timestamp-related errors on block addition was fixed. Also, those who use NeoGo node with EnableCORSWorkaround setting may want to update the node to be able to handle websocket requests with Origin set in the header. The users of websocket RPC client subscription mechanism are welcomed to move from deprecated subscriptions API to the extended one. Finally, we are kindly asking our users to have a look at our roadmap file where deprecated code removal schedule is attached.

This version is fully compatible with C# node 3.4.0 and does not require resynchronization on upgrade. This time for sure, the next release is planned to be compatible with 3.5.0.

New features:

  • logarithmic gossip fan-out, new BroadcastFactor application setting and adaptive peer requests are added to optimise broadcasting process (#608, #2678, #2743)
  • Prometheus histograms with handling time are added for P2P commands (#2750) and RPC calls (#2784)
  • transaction awaiting is added to RPC clients (#2740, #2749)
  • RPC bindings generator (#2705) is added for both safe (#2766) and state-changing (#2769, #2778) methods with initial iterator support (#2783)
  • the ability to reset chain state to a particular height is added (#2576, #2773)

Behaviour changes:

  • Aspidochelone fork block for NeoFS sidechain mainnet configuration is rescheduled (#2754, #2776)
  • RPC server will now handle any Origin in websocket connection when EnableCORSWorkaround setting is on (#2772, #2724)
  • WS RPC client subscriptions API is extended to accept custom subscriber channels, old subscriptions API is marked as deprecated (#2756, #2764)

Improvements:

  • network code refactoring (#2742)
  • network packets sending is now limited in time (#2738)
  • broadcast messages will be sent concurrently to each peer (#2741)
  • ping messages are broadcast using the common broadcast logic (#2742)
  • transactions requested by dBFT will be accepted on demand only (#2746, #2748, nspcc-dev/dbft#63)
  • VM CLI's state-based functionality improvements (extended signers and arguments parsing, enabled logging) and additional commands (loadtx, loaddeployed, jump) (#2729, #2606, #2740)
  • incoming P2P transactions are now processed concurrently and buffer for inventory hashes is reusable (#2755)
  • GetData and GetBlocksByIndex replies are now batched on a TCP-level (#2757)
  • optimisation of incoming P2P transactions and blocks filtering are introduced (#2758, #2759)
  • batch size of broadcast transactions hashes is adjusted (#2760)
  • peer reconnections logic is improved, GetAddr messages are sent more often (#2761, #2745)
  • documentation for wallet configuration file is clarified (#2763)
  • Koblitz curve implementation of btcd/btcec was replaced with decred/secp256k1 due to GitHub security warning (#2781)
  • NOT opcode for Bool emission is now used to reduce resulting script cost (#2762)

Bugs fixed:

  • failing tests cleanup on Windows (#2736)
  • race in CLI test (#2765)
  • invalid conversion of PublicKey smart contract parameter to emitable (#2739)
  • initialize dBFT's context with previous block's timestamp on view 0 (#2753, #2752, nspcc-dev/dbft#64)