Releases: nspcc-dev/neo-go
Utilization
This version fixes state difference at block 6701925 of testnet. It also introduces NeoFSStateFetcher service that allows to synchronize contract storage state at particular height based on checkpoint data stored in NeoFS. Moreover, for smooth RPC client upgrade experience, the next Faun hardfork is added in a preview mode (although it doesn't contain any changes yet). Also, new BroadcastTxsBatchDelay
P2P application configuration setting is introduced preliminary for custom networks setup to be able to customize the maximum transaction batch broadcast delay.
T5 nodes require DB resynchronisation (or state reset to 6701924 block for full nodes), mainnet nodes DB resync is not required at the moment of release. No configuration changes required.
New features:
- ability to synchronize contract storage from NeoFS snapshot (#3844)
- Faun hardfork is introduced in a preview mode, but doesn't include any changes yet (#3931)
Improvements:
- migration to NeoFS SearchV2 API (#3913)
- support for graceful stop at given height for NeoFSBlockFetcher service (#3901)
- support slice expressions for string in compiler (#3916)
- integrate ArchivalNode capability (#3899)
- refactor code to use Go built-ins (#3897, #3923)
- update documentation (#3924)
BroadcastTxsBatchDelay
application setting that allows to customize the time limit for transaction batch collection before its broadcast (#3930)
Bugs fixed:
- race in cache persistence logic (#3931)
- whitespaces in argument of StdLib's
base64Decode
andbase64UrlDecode
methods lead to decoding error (#3928) - multiple simultaneous connections to a single peer (#3911)
- node peer state unambiguity (#3911)
- failed MPT initialization after node restart (#3919)
- bugs in seed discovery logic (#3912)
- intermediate state synchronisation stages are not persisted to the DB (#3900)
- intermediate state jump stages are not persisted to the DB (#3895)
- excessive logging in Notary service (#3896)
- missing block height initialization for statesync module (#3933)
Transformation
An urgent patch version that fixes state difference at block 5894663 of testnet. It also contains a couple of other bug fixes including CommitteeChanged events emission (that affects application execution results compatibility with C# node, but likely not critical for anyone).
DB resynchronisation for testnet nodes is required (operators of full node may use neo-go db reset
command to reset the node's state to height 5894662 and avoid full chain resynchronisation). Mainnet DB resynchronisation is not needed.
Behavior changes:
subscribe
andunsubscribe
requests will be served sequentially by web-socket RPC client (#3893)
Bugs fixed:
Separation
Long-awaited version that is fully compatible with the C# node 3.8.0. It extends and enables Echidna hardfork, introduces a set of RPC extensions and new node configuration settings and fixes a couple of critical bugs.
Node operators should review and update node configuration. For N3 chains Echidna hardfork is enabled at block 7300000
of Mainnet and 5870000
block of Testnet; NeoFS Mainnet hardforks schedule is changed, see the updated node configuration for reference; for NeoFS Testnet Echidna is enabled starting from the genesis block. N3 Mainnet/Testnet nodes DB resynchronization is not needed, NeoFS chains resynchronization is required.
New features:
- block generation time is a part of native Policy contract (
setMillisecondsPerBlock
andgetMillisecondsPerBlock
APIs) starting from Echidna HF (#3835) util upload-state
CLI command allowing to upload contract storage items to NeoFS (#3808, #3845)verifyWithEd25519
method support in CryptoLib native contract starting from Echidna HF (#3852, #3853)MaxWebSocketFeeds
node parameter allowing to configure maximum number of RPC server subscriptions (#3828)invokecontainedscript
RPC API allowing to invoke script in a customizable execution environment (#3839)LogEncoding
andLogTimestamp
node parameters allowing to customize logs output format and timestamps (#3846)MaxValidUntilBlockIncrement
setting is a part of native Policy contract (setMaxValidUntilBlockIncrement
andgetMaxValidUntilBlockIncrement
APIs) starting from Echidna HF (#3849)MaxTraceableBlocks
setting is a part of native Policy contract (setMaxTraceableBlocks
andgetMaxTraceableBlocks
APIs) starting from Echidna HF (#3858)recoverSecp256K1
method support in CryptoLib native contract starting from Echidna HF (#3863)isContract
method support in ContractManagement native contract starting from Echidna HF (#3867)DisableCompression
node parameter allowing to disable P2P payloads compression (#3881)NotaryAssisted
attribute support is moved fromP2PSignatureExtensions
under Echidna HF (#3854)- Notary native contract activation is moved from
P2PSignatureExtensions
under Echidna HF (#3478) - Echidna HF is stable now (#3851)
Behavior changes:
- restricted number of allowed contract notifications starting from Echidna HF (#3640)
- NeoFS networks configuration update and forks reschedule (#3833, #3851)
Improvements:
- RPC session iterator expansion extension (#3827)
- optimize VM script execution in case of disabled coverage (#3855)
- replace timers with tickers (#3861)
- extend NotaryAssisted attribute verification logic (#3865)
ErrConnClosedByUser
error designated to distinguish case when connection is closed by RPC client user (#3868)- Go 1.23 upgrade (#3847)
- NeoFS SDK Go update to RC13+ (#3847, #3870)
Bugs fixed:
- NPE on
getpeers
RPC request serving (#3880) - inability to decode genesis block header fetched from NeoFS (#3819)
- insufficient nesting depth restriction of transaction witness condition (#3815)
- improper handling of empty filter for
getblocknotifications
RPC API on the RPC client side (#3820) - native contracts can't be initialized from non-genesis block (#3837)
- invalid signature of
base64UrlEncode
andbase64UrlDecode
(#3862) - NPE on NeoFS BlockFetcher service shutdown (#3870)
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: