Aberration
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
andfindstoragehistoric
RPC support (#3099)getstoragehistoric
RPC support (#3099)getrawnotarypool
andgetrawnotarytransaction
RPC (#3098)
Behaviour changes:
- deprecated
FromAddress
smart contract helper is dropped from theutil
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 byneogo_version
andserver_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
andNotValidBefore
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
andverifyproof
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 andloadnef
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)