Skip to content

Releases: nspcc-dev/neo-go

Verification

09 Nov 07:41
dbd647e
Compare
Choose a tag to compare

An urgent 3.6.0-compatible version that contains a hotfix for the bug that prevents node from starting from the existing database every new dBFT epoch. Also, the release includes a bugfix that fails any non-zero NEO and GAS roundtrips from accounts with zero balance.

Although the DB format and storage states were not affected by this release, the node resynchronization is still recommended for those who want to keep correct application logs. Resynchronization can be skipped if you're OK with wrong application logs for some transactions (e.g. CN doesn't care, and RPC node cares a lot).

Bugs fixed:

  • properly initialize cache of native NeoToken contract every new dBFT epoch (#3187)
  • forbid non-zero NEO and GAS roundtrips from accounts with zero balance (#3191)

Backwardation

20 Oct 19:49
9de9320
Compare
Choose a tag to compare

A minor 3.6.0-compatible version of NeoGo with new salty ZKP-related functionality, a large batch of deprecated APIs removal and an experimental genesis block extension. Build Groth-16 circuits, generate proofs and deploy verification contracts easily with the new end-to-end ZKP example and zkpbinding NeoGo API. Setup node roles via the node configuration starting from the genesis block without any painful multisignature transaction forming and invoke any custom script in the genesis-level transaction with the new Genesis protocol configuration extension. And don't forget to move from deprecated RPC client APIs, as a lot of them have been removed.

New node configuration format is finally adapted and the deprecated configuration sections are permanently removed according to the schedule. Pay attention to the SecondsPerBlock protocol configuration section that was replaced by TimePerBlock, a set of node and services address- and port- related configuration section that were replaced by the new Addresses format, direct UnlockWallet consensus configuration that was replaced by a separate Consensus section and a set of node-specific protocol configurations that were moved under a separate P2P section.

This release fixes a set of bugs including a vulnerability introduced by changes in the transaction conflicts storage scheme implemented in #3061 (a part of 0.102.0 release). With the patch presented, it's impossible to uncontrollably pollute the storage with malicious conflicting records.

This version is fully compatible with C# node 3.6.0. However, it requires complete resynchronization on upgrade due to the database storage scheme changes.

New features:

  • API for Groth-16 verification contracts autogeneration and end-to-end example for proving and verifying statements on NeoGo (#3043, #3146)
  • introduce genesis protocol extensions: default node roles designation and genesis transactions (#3168)

Behaviour changes:

  • a lot of deprecated functionality is dropped: RPC client old APIs, shared Notifications channel of WebSocket client, SecondsPerBlock protocol configuration, old way of services and node address and port configuration, old P2P related application settings configuration, direct UnlockWallet consensus configuration, direct node-specific protocol configuration (#3150)
  • database scheme is changed by new way of storing the transaction conflicting records (#3138)

Improvements:

  • NeoFS SDK dependency upgrade (#3129)
  • gnark and gnark-crypto dependencies upgrade (#3145, #3162, #3163)
  • introduce timeout restriction for BoltDB opening (#3148)
  • bump code coverage uploading action version (#3153)
  • Go 1.21 support, bump minimum required Go version up to Go 1.19 (#3157)
  • upgrade golang.org/x/net version (#3158)
  • add protocol hardforks configuration to the getversion RPC response (#3160)
  • format autogenerated smart contract bindings with accordance to standard go fmt rules (#3164)
  • add "DO NOT EDIT" warning to the autogenerated smart contract bindings (#3167)

Bugs fixed:

  • avoid race between getnextblockvalidators RPC call handler and blockchain's block handler routine, significantly refactor native validators caching scheme (#3110)
  • do not panic on failed NeoFS oracle requests (#3129)
  • enable Notary subsystem in NeoFS mainnet configuration (#3136)
  • reorganize storage scheme for transaction conflicting records to avoid possible attack (#3138)
  • properly deserialize wildcard trusts field of smart contract manifest (#3140)
  • use more strict GAS limit for transaction network fee calculation via RPC call (#3141)
  • avoid WebSocket client request blocking (#3142)
  • properly emit big uint64 constants during smart contract compilation (#3147)
  • avoid race access to the node version by tests (#3149)
  • make FindStorage* RPC client APIs to be always compatible with NeoC# RPC server (#3166)

Aberration

06 Sep 20:26
2d88ed9
Compare
Choose a tag to compare

Long-awaited feature-packed 3.6.0-compatible version of NeoGo with all the appropriate protocol updates and a set of tasty improvements and bug fixes. Groth16 ZKP proof checks are there for contract developers as well as new opcodes. A huge number of improvements went into the RPC server and client, new RPCs, improved contract binding generator and standardized extended error codes make developing dApps much easier.

Users of smart contract utilities and RPC-related Prometheus metrics are advised to take a look at the deprecated APIs removal schedule
(ROADMAP.md). This version was delayed for quite some time (waiting for 3.6), so the next minor release (0.103.0) will remove a substantial amount of compatibility code. It's expected to be released in November with 3.6 protocol compatibility (3.7 cycle is likely to require more time).

This is also the first version that drops support for Go 1.17 and requires 1.18+ to build (with Go 1.20 supported). Using generics in smart contracts is not supported yet, but some elements of this support can be implemented in future versions.

Mainnet and testnet node operators, please pay attention to the Basilisk hardfork schedule and check your configurations. It will happen at block 2680000 for T5 testnet and 4120000 for mainnet. To ensure compatibility your node must be configured appropriately. This version requires DB resynchronization, so schedule your updates accordingly.

New features:

  • ZKP proof checking support via CryptoLib native contract (operations with BLS12-381 curve points) (#2940, #3042)
  • System.Storage.Find interop now support "Backwards" flag to iterate in the opposite direction (#2952)
  • util ops CLI utility that pretty-prints VM script (#2965)
  • notarypool_unsorted_tx Prometheus metric for notary-enabled nodes (#2696)
  • CloseNotificationChannelIfFull WSClient option allowing the client to close notification channel on overflow (#2988)
  • autogenerated RPC bindings for contract events and conversion code from stackitem.Item to structure (#3008, #3035, #3036, #3087)
  • event type inference from contract code (#3008)
  • dynamic contract hashes support for RPC bindings (#3012)
  • "Basilisk" protocol hardfork support (#3056, #3080, #3086, #3104)
  • ABORTMSG and ASSERTMSG VM opcodes (#3066)
  • standardized RPC error codes (#3063)
  • findstorage and findstoragehistoric RPC support (#3099)
  • getstoragehistoric RPC support (#3099)
  • getrawnotarypool and getrawnotarytransaction RPC (#3098)

Behaviour changes:

  • deprecated FromAddress smart contract helper is dropped from the util interop package (#2941)
  • a number of deprecated RPC-related Prometheus counters are permanently removed (#2941)
  • NEP-2 account label will be asked on account import via CLI (#2889)
  • hashes and states of native contracts are now accessible via native ContractManagement API (#2991)
  • serv_node_version gauge Prometheus metric is marked as deprecated and replaced by neogo_version and server_id (#3009)
  • strict contract script check is back with Basilisk hardfork, it was previously removed in 0.101.3 for 3.5 protocol compatibility (#3056)
  • JSON number deserialization (via StdLib.jsonDeserialize) changes with Basilisk hardfork allowing for more precision and handling more corner cases (#3080)
  • notification type errors are treated as fatal after Basilisk hardfork, before it they're just logged (#3086)
  • NULL and non-UTF8 items are not allowed for String event types (#3086)
  • Conflicts and NotValidBefore transaction attributes are no longer NeoGo extensions, they can be used on regular networks (#2962)

Improvements:

  • documentation and example improvements (#2945, #2972, #2979, #3020, #3084, #3099, #3114, #3116, #3119, #3121)
  • getproof and verifyproof RPC API support in RPC client (#2942)
  • Go 1.20 support, bump minimum required Go version up to Go 1.18 (#2908)
  • faster state reset process (#2819)
  • optimized voting data storage scheme for NEO contract (#2892, #2893)
  • NeoFS SDK dependency upgrades (#2995, #3032)
  • special exported error returned in case of WSClient disconnection (#3000)
  • automatic guessing of contract and manifest filenames for contract compile CLI command and loadnef VM CLI command (#3013)
  • support for pushing stackitem.Convertible objects via VM script emitter (#3016)
  • economic adjustment for ranking of transactions with Conflicts attribute (#3031)
  • google.golang.org/grpc dependency upgrade fixing high severity security vulnerability (#3055, gRPC is only used to communicate with NeoFS nodes in the oracle service)
  • enforce default RPC server values when it's used as an independent package (not a part of node) (#3107)
  • unwrap.Nothing function for RPC clients (#3117)
  • address and reverse hash display in opcode dumps (#3115)

Bugs fixed:

  • invalid peer port type returned by getpeers RPC response (#2914)
  • invalid data source for mempool_unsorted_tx Prometheus metric (#2969)
  • dBFT library upgrade fixing the ability of a single node to speed up the process of new blocks creation for the whole network (#3018, nspcc-dev/dbft#75)
  • failing CALLT instructions in VM CLI for loaded NEF files (#3020)
  • missing signers check for on-chain conflicting transactions (#3061)
  • incorrect sequence point boundaries in debug data (#3074)
  • compiler panic on encountering generic code (#3041)
  • potential pooled fallback notary transaction changes (#3108)
  • lost LastGasPerVote value on NEO state deserialization for non-voting accounts (#3122)

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)