Releases: nspcc-dev/neo-go
Revalidation
An urgent fix for a very old behavior difference with C# node in Rules witness condition parsing. It suddenly affected testnet compatibility at block 5450030 and made the chain unprocessable by NeoGo. Please upgrade to fix it, DB is compatible, no resynchronization required.
Bugs fixed:
- incorrect rule depth limit for Rules witness conditions (#3810)
Participation
This version is compatible with the C# node 3.7.6, but also contains some Echidna changes preview. Additional RPC extensions are introduced with this release as well as some important fixes and improvements.
We recommend to check your configurations wrt NeoFS synchronization options, a new set of containers was introduced recently, old ones will eventually be deleted (which won't break syncrhonization, but can delay it a bit). No DB resync is required unless you want to use the new "SaveInvocations" option.
New features:
- "Designation" event in RoleManagement native contract starting from Echidna HF (#3761)
- base64Url encoding and decoding support in StdLib native contract starting from Echidna HF (#3761)
- NEO candidate registration via NEP-27 payment starting from Echidna HF (#3700)
- ArchivalNode P2P capability (#3778)
- NEP-26 and NEP-27 support everywhere (#3792)
- "SaveInvocations" node parameter that allows to store more detailed contract invocation data and retrieve it via RPC (#3569)
- "getblocknotifications" RPC API allowing to fetch filtered notifications from all block execution contexts (#3805)
Behavior changes:
- updated "upload-bin" command defaults (#3760)
- updated NeoFS containers for all networks (#3759)
- additional AllowNotify call flag for some NEO methods starting from Echidna HF (#3761)
- Dump*Slot methods removed from vm.Context (#3806)
Improvements:
- golang.org/x/crypto update from 0.26.0 to 0.31.0 (#3765)
- neotest can load contracts from NEF/manifest files now (#3771)
- more accurate memory management in persisting/processing cycles preventing OOM conditions in most cases (#3787)
- RPC bindings now have ToStackItem and ToSCParameter methods for structures (#3794, #3796, #3804)
- dBFT 0.3.2 with improved timers (#3799)
- github.com/consensys/gnark update from 0.11.0 to 0.12.0 (#3800)
- ability to fetch headers from NeoFS (#3789)
Bugs fixed:
- potentially incorrect handling of misconfigured NeoFS endpoints (#3758)
- duplicate index objects are no longer an error for "upload-bin" (#3763)
- old transfer data removal problem in RemoveUntraceableBlocks configuration, 0.107.2 regression (#3787)
- zkpbinding module producing code that can't be compiled, 0.107.0 regression (#3802)
Obliteration
One more compatible patch-release that introduces RemoveUntraceableHeaders
application-level extension allowing to remove untraceable block headers from the DB. This feature significantly reduces the database size, but for now it is supported in an experimental mode, use it with care. Other than that, this release includes a fix of BlockFetcher service that may hang on retry of NeoFS requests preventing the node
from syncing. Also, an improved algorithm of blocks uploading and extended list of block and index file attributes are supported for upload-bin
CLI command.
No configuration update or DB resync is required. However, starting from this release NeoFSBlockFetcher
application configuration section is backed by default values for every parameter except Addresses
and ContainerID
, hence if you don't like too chatty configuration files, feel free to remove all optional parameters.
New features:
- untraceable headers removal (#3750)
Behavior changes:
- add
BlockTime
attribute to block objects stored in NeoFS block storage (#3749) - use
Timestamp
attribute to hold object creation time for block and index objects stored in NeoFS block storage (#3749) - extended debug logs for
upload-bin
CLI command (#3751)
Improvements:
- embed default UnitTestNet node configuration (#3696)
- NeoFS SDK dependency upgrade (#3725, #3756)
- dependent packages updates (#3746, #3747, #3748)
- refactor and speed up
upload-bin
CLI command (#3735) - backup NeoFS BlockFetcher configuration with default values (#3742)
- reuse more of built-in NeoFS SDK functionality in
upload-bin
CLI handler (#3749)
Bugs fixed:
Narrativization
An urgent version that fixes the problem of intensive CPU usage caused by improper NeoFS BlockFetcher shutdown on the node's sync process completion and magnified by additional bug at the peer discovery level.
No configuration changes or DB resync is required. It is highly recommended to update from 0.107.0 as soon as possible since described problems affect the speed of blocks processing and the overall node functionality.
Behavior changes:
- explicitly enable the list of stable hardforks in default NeoFS testnet configuration (#3722)
Improvements:
- decrease NeoFS storage nodes dial timeout for NeoFS BlockFetcher (#3723)
- adjust optimal number of peers for networks with small peer count (#3727)
- don't enable unstable hardforks by default (#3724)
Bugs fixed:
Mongrelization
A large update that introduces a major node extension: NeoFS BlockFetcher service and util upload-bin
CLI command implemented as a part of NeoFS snapshot storage proposal. BlockFetcher service, as an alternative to P2P synchronization mechanism, allows to download blocks and sync chain from block dumps stored in NeoFS. Starting from this release, NeoSPCC team maintains chain dumps in NeoFS for N3 and NeoFS public networks. The default NeoGo node configuration for these networks has been changed to use NeoFS BlockFetcher as a synchronization mechanism prior to P2P synchronization. Other than that, this release includes NEP-24 standard support at both compiler and SC bindings generator levels. A large number of tiny user-facing enhancements is rolled out for RPC actor/ivoker, neotest
and unwrap
packages as far as for CLI utilities. Also, this release contains a set of NeoGo VM bug fixes inspired by differential VM fuzzing study conducted by our external contributor @Slava0135 and a set of tiny VM CLI enhancements introduced by @ixje.
Some deprecated functionality has been removed according to the schedule, see more details in the Behaviour changes
section. Also, for those node operators who would like to check out our new NeoFS BlockFetcher node extension, we'd recommend to add corresponding section to the node's configuration (see the default node configuration for N3/NeoFS networks for example).
This release is fully compatible with 3.7.5 version of C# node, no DB resync is needed.
New features:
- new NeoFS BlockFetcher service that allows to sync node from NeoFS chain dump (#3515, #3636, #3637, #3632, #3691, #3706, #3668, #3713)
- new
util upload-bin
CLI command that allows to upload blocks from Neo chains to NeoFS (#3578, #3625, #3626, #3633, #3637, #3638, #3643, #3650, #3662, #3684, #3686, #3691) - new
delete
andib
VM CLI commands for brealpoints management (#3674) - NEP-24 standard support (#3560)
- Echidna hardfork introduced, but not yet enabled (please, note that this is only a preview that includes a part of scheduled changes and will be changed in an incompatible way before the full support, hence, this hardfork may be enabled for experimental purpose only) (#3554)
Behavior changes:
- neotest's AddSystemFee and TestInvoke are bound to Executor state (#3551)
- getversion RPC response is extended with seed list and standby committee (#3540)
- support only two latest versions of Go instead of three (#3567)
- some deprecated functionality is dropped: unmarshalling code for the old
getpeers
RPC response,NEOBalance
stackitem deserializer compatibility code,serv_node_version
Prometheus gauge metric, outdated RPC error codes support, block-based web-socket transaction awaiting (#3690)
Improvements:
- documentation updates (#3545, #3663, #3666, #3678, #3683, #3708)
- netmode package is extended with public NeoFS chain IDs (#3539)
- dBFT library upgrades (#3541, #3711)
- migration to Docker Compose V2 (#3547)
- system fee required for contract deployment in neotest is precisely calculated (#3551)
- ability to customize awaiting options for PollingBased RPC waiter (#3556)
- Go 1.23 support, bump minimum required Go version up to Go 1.22 (#3567)
- a set of dependent libraries upgrades (#3570)
- extend the list of supported SC parameters for RPC actor/invoker (#3583)
- Null stackitem result handling for autogenerated RPC bindings (#3584)
- macos-12 support is removed, macos-14 support is added (#3657)
- allow to get NEP-11/NEP-17 balances via CLI using account address only (#3659)
- expose VM slot getters (#3677)
- add
unwrap.ErrNull
error to handle Null stackitem returned (#3695) - extend web-socket notification subsystem with notification parameter filters (#3689)
- explicitly prohibit unknown configuration fields for
contract generate-*
CLI commands (#3708) - extend compiled smart contract identifier in neotest cache (#3709)
- move
neogo_version
metric out ofnetwork
package (#3712)
Bugs fixed:
- fees of ditched transaction are not cleared from mempool (#3537)
- extension of SC permission descriptor doesn't clear wildcard status (#3544)
- example of NeoGo VM script fails VM execution (#3593)
- a call to
getunclaimedGas
of native Neo contract for account with zero balance results in VM failure (#3589) MODMUL
VM opcode handler returns wrong results for negative arguments (#3599)- neotest coverage extension panics on attempt to collect coverage for contract with missing debug information (#3600)
MODPOW
VM opcode handler returns wrong results for negative base (#3649)- node panic on SIGHUP (#3661)
- HTTP return code of RPC requests diverges from C# RPC server's behaviour (#3665)
- a set of bugs in unit tests (#3442, #3680)
POPITEM
VM opcode handler counts stack references improperly (#3688)PACKMAP
VM opcode handler ignores duplicating map keys (#3685)- chain restore from genesis block fails with StateRootInHeader extension enabled (#3697)
- hardfork-dependent methods are not included into native contract metadata starting from the hardfork height (#3704)
- outdated keyword usage in Dockerfiles (#3710)
Lyophilization
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:
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
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:
Implication
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:
Zephyranthes
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 forcrypto.PublicKey
(#3408) - support
Copy
API fortransaction.Transaction
andpayload.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
andsetStoragePrice
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 ofgetnativecontracts
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
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)