Skip to content

Releases: nspcc-dev/neo-go

Lyophilization

29 Jul 16:03
d8e3e57
Compare
Choose a tag to compare

This 3.7.5-compatible version includes a number of important fixes, so please upgrade your nodes. Some minor extensions were also added.

Resynchronization (or state reset) is required for testnet (because of a bug leading to state difference since 4368840), but not required for mainnet.

New features:

  • embedded mainnet/testnet/NeoFS node configuration files (#3477, #3504)

Behavior changes:

  • CLI no longer panics if error occurs (#3495)
  • MaxTraceableBlocks is 17280 now for NeoFS networks (#3518)
  • minimal default RPC SessionExpirationTime is 5s now (#3529)

Improvements:

  • RPC actor interface extension with WaitSuccess method (#3491)
  • Signers() API for RPC invokers (#3492)
  • SignerAccounts() API for RPC actors (#3492)
  • getpeers RPC extension with the user agent and last known block height data (#3481)
  • OnExecHook() API for VM (#3460)
  • more details in witness verification error message (#3508)
  • CLI help and error string format unification (#3495, #3520)
  • CLI library (github.com/urfave/cli) upgrade to 2.27.2 (from v1 API, #3495)
  • microoptimization of extensible sender list calculation (#3500)
  • microoptimization of chain dump code (#3514)
  • documentation and error messages (#3526, #3527)

Bugs fixed:

  • RPC SessionExpirationTime could be zero in some configurations (#3529)
  • panic in WSClient unsubscription code in some multithreaded cases (#3532)
  • missing PrimaryIndex in Ledger's getBlock() result (#3534)
  • contract manifests with null groups were accepted (#3523)
  • contract manifests with invalid features were accepted (#3523)
  • contract manifests with null trusts were accepted (#3523)
  • WSClient deadlock in some disconnection cases (#3535)

Keratinization

13 Jun 11:43
4ff2063
Compare
Choose a tag to compare

A 3.7.5-compatible version introducing new Domovoi hardfork that brings two fixes to the protocol: using executing contract state to check contract call permissions (included into this NeoGo release) and proper VM items refcounting for System.Runtime.GetNotifications handler (not included into this NeoGo release because we've never had this bug). Since the second bug is C#-specific and does not lead to the state differences in mainnet/testnet, we've decided not to break the NeoGo node to follow pre-Domovoi C# node implementation. Thus, differences in application logs for several T5 transactions before Domovoi hardfork are expected and won't be fixed.

Please, ensure your node configuration includes the Domovoi hardfork. No DB resynchronisation is required.

New features:

  • Domovoi hardfork scheduled for 5570000 block of mainnet and 4144000 block of T5 testnet (#3476, #3473, #3486, #3487)

Behavior changes:

  • hide node logs timestamp if the node is running not in TTY (#3468)
  • distinguish log level for various node peer disconnection reasons (#3469)

Improvements:

  • ensure NeoFS nodes are configured when processing NeoFS oracle requests (#3455)
  • NeoFS SDK dependency upgrade (#3483)
  • ensure System.Runtime.GetNotifications handler can't break the MaxStackSize constraint before and after Domovoi hardfork (#3485)

Bugs fixed:

  • deployed contract script is included into wallet's account (#3470)
  • updated contract state is used to verify contract call permissions before the Domovoi hardfork (#3473)

Implication

03 Jun 14:31
836183e
Compare
Choose a tag to compare

An urgent release that fixes mainnet state difference at block 5462944 which halts blocks processing starting from the height 5468658. This release requires full node DB resynchronization for mainnet nodes. T5 testnet DB state is not affected by this bug (at least up to the current 4087361 height). Thus, DB resynchronisation may be skipped for testnet nodes. No configuration changes implied.

Bugs fixed:

  • mainnet state difference at block 5462944 caused by runtime notification permissions check against the updated contract state instead of executing state (#3472)
  • unused neofs-contract dependency in the node modules (#3458)

Zephyranthes

21 May 12:57
5cbfe21
Compare
Choose a tag to compare

We're rolling out a large set of updates including all of Neo 3.7.4 protocol changes: native contracts update functionality and extended native contract APIs united under the upcoming Cockatrice hardfork. For smart contract developers an ability to generate smart contract bindings with dynamic hash is supported as well as a number of useful extensions for unwrap package, compatible NNS smart contract RPC binding and a lot of other handy enhancements. This release also includes a couple of severe regression bug fixes affecting the node state. As a bonus of fixing a wide range of failing tests, we've refactored the node services start and shutdown procedures to make it more stable. This version drops support for Go 1.19 and requires 1.20+ to build (with Go 1.22 supported).

Notice that this release requires full node resynchronization for both mainnet and testnet nodes. Please pay special attention to the Cockatrice hardfork schedule and check your configurations. It should be configured for 3967000 of T5 testnet and 5450000 of mainnet. To ensure compatibility your node must be configured appropriately.

New features:

  • native contracts update functionality bound to hardforks (#3402, #3444)
  • Cockatrice hardfork planned for 5450000 block of mainnet and 3967000 block of T5 testnet (#3402, #3448, #3402, #3446)
  • CommitteeChanged events are emitted by NeoToken native contract starting from Cockatrice hardfork (#3351, #3448)
  • getCommitteeAddress method of NeoToken native contract is available starting from Cockatrice hardfork (#3362, #3402)
  • keccak256 method of CryptoLib native contract is available starting from Cockatrice hardfork (#3301, #3402)
  • dynamic contract hash support for smart contract bindings (#3405)
  • support StringCompressed API for crypto.PublicKey (#3408)
  • support Copy API for transaction.Transaction and payload.P2PNotaryRequest (#3407)
  • extend verifyWithECDsa method of native CryptoLib contract with Keccak256 hasher starting from Cockatrice and add an example of custom Koblitz-based and Keccak256-based transaction witness verification (#3425)
  • autogenerated nativehashes package (#3402, #3431)
  • introduce unwrap.Exception type for better RPC invocation result exceptions detection (#3438)

Behavior changes:

  • Neo Name Service smart contract RPC binding follows the official N3 implementation (#3291)
  • clear LastGasPerVote NeoToken account info on unvoting (#3349)
  • return fault exception (if any) in unwrap RPC client helpers (#3356)
  • move P2PNotary designation role out of P2PSigExtensions (#3452)

Improvements:

  • support smartcontract.Convertible interface as RPC Actor and Invoker call parameters (#3297)
  • allow to import multisignature account into wallet without WIF and password specified (#3293)
  • upgrade go-ordered-json dependency to avoid possible node state incompatibility issues caused by smart contract manifest marshalling (#3331, #3333)
  • Go 1.22 support, bump minimum required Go version up to Go 1.20 (#3336)
  • a number of dependent libraries are updated to the fresh versions (#3338, #3418)
  • improve error message of System.Crypto.CheckMultisig interop API handler (#3374)
  • upgrade dBFT library to v0.2.0 (#3371, #3413)
  • increase ValidUntilBlock value for transactions generated by CLI commands (#3376)
  • documentation updates (#3375, #3382)
  • let default Notary Actor options be customizable (#3394)
  • extend getversion RPC response with RPC server settings (#3386)
  • make errors related to wallet opening more detailed (#3389)
  • adjust error messages of setExecFeeFactor and setStoragePrice methods of native PolicyContract (#3406)
  • make neotest chain constructor options customizable (#3404)
  • format improvements for CLI commands description (#3410)
  • make state dumps comparator script more verbose (#3411)
  • refactor storage Get implementation for BoltDB (#3441)
  • add updatecounter field to the resulting items of getnativecontracts RPC API call (#3439)

Bugs fixed:

  • node panic on committee missing from node configuration (#3294)
  • autogenerated RPC bindings do not follow Go naming convention (#3299)
  • a batch of failing tests is fixed (#3306, #3313, #3321, #3332, #3337, #3335, #3344, #3340, #3350, #3355, #3364, #3368, #3377, #3393, #3397, #3392, #3398, #3400)
  • outdated minimum required Go version of boilerplate contract generated by neo-go contract init (#3318)
  • outdated address used as an example in RPC client documentation (#3327)
  • ungraceful node services shutdown procedure (#3307)
  • logging data race on node services shutdown (#3307)
  • Map parameter support is missing from RPC server handlers (#3329)
  • smart contract storage iterator prefix wasn't copied while iterating over values (#3336)
  • RPC error with -511 code (insufficient funds) returned on sendrawtransaction RPC request should cover multiple cases of sender's insufficient funds (#3360, #3361)
  • reentrancy possibility for Notary deposit withdrawal (#3357)
  • null findstorage RPC response in case of missing storage items (#3385)
  • uninitialized named return variables in compiler (#3401)
  • wrong debug sequence points after JUMP* instructions shortening by compiler (#3412)
  • corrupted genesis block record and application log caused by improper Conflicts attribute processing (#3437)
  • false positive DB-based blocked accounts detection in native PolicyContract leaded to invalid committee computations and reward distribution made by NeoToken (#3443)

Enumeration

12 Jan 10:40
ed73628
Compare
Choose a tag to compare

This is another v3.6.2-compatible release that fixes mainnet state difference at block 4688591. It is confirmed to have the same state up to 4723K height (which is current), but to get proper mainnet state you need to resynchronize your node from the genesis. T5 testnet state is not affected (at least up to the current 3323K height), thus DB resynchronisation may be skipped for testnet nodes.

Improvements:

Bugs fixed:

  • state difference at block 4688591 of N3 mainnet caused by difference at characters escaping during manifest's Extra field JSON serialisation (#3286)

Designation

29 Dec 13:39
d901697
Compare
Choose a tag to compare

We're rolling out an update for NeoGo nodes that contains a number of user-facing API improvements for RPC web-socket notification subsystem, CLI utility, wallet related packages and not only. Try out our new --await CLI option for those commands that relay transactions to the network to automatically wait for the on-chain transaction execution result. Subscribe for new block headers with extended RPC notification subsystem interface. Use contract-based accounts provided by wallet package and neotest framework to sign transactions. These and a set of other improvements are available to our users while this release is staying compatible with 3.6.2 version of C# node.

This version also delivers a bug fix for consensus node panic caused by improper native NeoToken cache initialisation. Moreover, there's a set of RPC server side improvements, thus, we recommend to upgrade both consensus and RPC nodes to provide more stable consensus node functioning and extended user APIs functionality. No database resynchronisation is needed.

New features:

  • block headers RPC web-socket subscription (#3252)
  • --await option to synchronize on transaction execution for CLI commands (#3265)
  • partial session-based RPC iterator unwrapping (#3274)
  • contract-based transaction signers in neotest framework (#3233)
  • AMD64 release binaries for macOS (#3251)
  • complex contract signature schemes in wallet.Account (#3256)

Behavior changes:

  • basic RPC subscription filter validity checks are implemented on both RPC client and RPC server sides (#3258)
  • filter of notary request event RPC subscription is extended with type field (#3236)
  • if available, use block headers RPC web-socket subscription for transaction awaiting via waiter package API (#3283)

Improvements:

  • add smart contract storage limits to interop utilities (#3232)
  • extend ZKP examples documentation with additional links to PoT ceremony response files (#3234)
  • support Go types in VM emitter API (#3237)
  • documentation update (#3239, #3242, #3246)
  • BoltDB (go.etcd.io/bbolt) dependency upgrade (#3250)
  • CLI code refactoring (#2682)
  • extend wallet package to work with byte slice based wallets (#3255)
  • export RPC client side transaction awaiting functionality via waiter package (#3265, #3283)

Bugs fixed:

  • remove stale updatehistory section of getnativecontracts RPC response (#3240)
  • immediately check RPC client initialisation on access to blocks RPC subscription API (#3257, #3261)
  • fix CN panic caused by unexpected call to native NeoToken cache (#3253)
  • make "automatically generated" warning of all automatically generated files follow the standard (#3280)

Globalization

27 Nov 15:21
fd7b7ff
Compare
Choose a tag to compare

We're updating NeoGo to push out a number of useful updates and protocol extensions as well as make it compatible with 3.6.2 version of C# node. The most invasive behaviour changes are VM-level protocol constraints imposed on the size of serialized stackitems and NativeActivations node setting removal. This version also delivers a set of smaller useful changes in the interoperability layer and native contract functionality including System.Runtime.CurrentSigners interop, strLen StdLib method and PolicyContract-based transaction attributes pricing as far as a user-facing canceltx CLI command and community-requested --relative-path CLI option.

Node operators must resynchronize their nodes to get fully compatible state (which is confirmed to be compatible with 3.6.2 for current mainnet up to block 4483627 and T5 testnet up to block 3078762). Please, ensure your node configuration doesn't contain NativeActivations protocol configuration section as this logic is hidden under Hardforks starting from the current release.

New features:

  • System.Runtime.CurrentSigners interop allowing to get signers of the currently loaded transaction (#3058)
  • strLen method of native StdLib contract (#3208)
  • transaction attributes pricing regulation via native PolicyContract (#3155)
  • canceltx CLI command as an alternative to unsupported canceltransaction RPC request (#3223, #3214)

Behaviour changes:

  • reduce maximum allowed stackitem.Item size (#3185)
  • restrict maximum allowed NEF file size and prohibit large contracts deployment (#3186)
  • bind NativeActivations node setting to the Hardforks setting (#3212)
  • introduce serialization limit to stackitem.Item and fail large contracts deploy wrt this setting (#3218)
  • add customizable MaxRequestBodyBytes and MaxRequestHeaderBytes RPC server configuration setting (#3221)

Improvements:

  • provide more detailed error on attempt to read non-existent service wallet specified via node configuration file (#3210)
  • optimize emit of imported code for autogenerated RPC bindings (#3215)
  • documentation update (#3203, #3222)
  • add --relative-path CLI flag allowing to override configuration-specific relative paths (#3206)
  • update code owners (#3216, @fyrchik will live in our hearts forever)

Bugs fixed:

  • unify messages of RPC errors according to the RPC errors NEP (#3199)
  • limit maximum allowed number and depth of transaction signers and witnesses per RPC request that accept transaction (#3207, #3221)
  • forbid unknown fields usage in the node configuration file (#3209)
  • enable hardfork-dependant code starting exactly from the block height specified in the node configuration (#3211)
  • require Notary native deposit to be valid for at least one subsequent block after deposit transaction acceptance (#3211)
  • deduplicate unnamed event types for autogenerated RPC bindings and make the binding generation order strictly defined and stable (#3215, #3220)
  • do not panic on trying to compile an import cycle (#3215)
  • state difference at block 3002333 of T5 testnet caused by difference at characters escaping during manifest's Extra field JSON serialisation (#3225)
  • properly start node services that depend on native RoleManagement contract data with genesis Roles protocol configuration setting specified (#3229)

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)