Releases: nspcc-dev/neo-go
Circumnavigation
This version includes an upgrade to Go 1.24 and adds a couple of new native contract APIs to Faun hardfork preview. But what is more important, it delivers a set of essential compiler updates and bug fixes.
We strongly recommend smart contract developers to upgrade to this version and review the list of compiler-related improvements. Also, the upgrade is recommended to the users of rpcclient
package to avoid possible problems with node version unmarshalling after upcoming Faun hardfork activation. Node operators may safely skip this update.
Behavior changes:
- switch from go.etcd.io/bbolt to custom (and upgraded) nspcc-dev/bbolt (#4006)
Improvements:
hexEncode
andhexDecode
APIs of native StdLib contract added to Faun preview (#4004)getBlockedAccounts
API of native Policy contract added to Faun preview (#4004)- built-in
clear()
support in compiler (#3091) - range over integers in compiler (#3525)
- Go 1.24 support (#4010)
- byte slice/integer conversion helpers added to SC interop module (#3983)
- NEP-32 support for
db dump
CLI command (#3987)
Bugs fixed:
- invalid string representation of Faun hardfork (#4001)
- increment operator doesn't work on struct fields in compiler (#3981)
- panic on inlined function invocation in compiler (#4002)
- list items swap doesn't work as expected in compiler (#4005)
- panic on fetching map values with
ok
flag (#3716) - inability to
go install
neo-go due toreplace
directive in go.mod (#4006) - initialization statement of
switch
is ignored by compiler (#3991)
Hibernation
This version fixes state difference at block 8813651 of testnet caused by improper ABORTMSG
and AASSERTMSG
arguments handling. It also introduces support for a set of newly-added NEPs and ability to customize the list of native contracts.
DB resynchronisation (or state reset to block 8813650 for full nodes) is required on testnet nodes upgrade. SessionExpirationTime
RPC server setting is deprecated and replaced by SessionLifetime
of Duration
type, consider upgrading the node's config. math.Min
and math.Max
interop utilities are deprecated and replaced by Go built-in min
and max
functions, consider upgrading affected smart contracts. Also, some deprecated functionality has been removed according to the schedule.
New features:
- customizable native contracts (#3966)
- NEP-22/NEP-31 (contract update and destroy functionality) support in CLI,
smartcontract
package and compiler (#3968, #3971) - NEP-29/NEP-30 (contract
_deploy
andverify
methods) support insmartcontract
package and compiler (#3978) - NEP-32 support for
db restore
CLI command (unified chain dump format) (#3974) - mempool events RPC web-socket subscription (#3967)
Behavior changes:
wallet candidate register
CLI command is migrated onto GAS transfer (#3973)SessionExpirationTime
RPC server setting is deprecated and replaced bySessionLifetime
(#3953)math.Min
andmath.Max
interop helpers are deprecated and replaced with Go built-in min/max (#3984)- deprecated functionality removal (
GetBlockHeader
andGetBlockHeaderVerbose
methods of RPC client) (#3995) - RPC client's
Waiter.Wait()
is extended with context parameter (#3959)
Improvements:
storage.KeyValue
interop type (#3982)util convert
CLI command is extended with Base64 public key convertor- stackitem conversion is supported for
rolemgmt.DesignationEvent
native RoleManagement RPC binding (#3956) getversion
RPC response is extended withSaveInvocations
,KeepOnlyLatestState
andRemoveUntraceableBlocks
settings (#3954)- Go built-in min/max support in compiler (#3984)
- web-socket client connection errors improvement (#3975)
Bugs fixed:
Facilitation
We've decided to release one more v3.8.0-compatible version since the current set of changes includes adaptive block time extension allowing to vary block generation time from TimePerBlock
to MaxTimePerBlock
. In addition to that, this version includes new audit module for NeoFS block storage, an optimisation of light node synchronisation process, enhanced version of BoltDB and more.
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 test the dynamic block time extension, new MaxTimePerBlock
option is added to the node's protocol configuration. Finally, configuration changes have been introduced: starting from this version, RemoveUntraceableHeaders
mode is a part of RemoveUntraceableBlocks
and hence, should be removed from the node's configuration file in favour of RemoveUntraceableBlocks
. Also, SessionExpirationTime
RPC server configuration setting is replaced with SessionLifetime
setting of type Duration
; SkipIndexFilesSearch
, IndexFileSize
and IndexFileAttribute
settings of NeoFSBlockFetcher service were dropped since index files are not supported anymore. Please, upgrade your configuration accordingly.
New features:
util audit-bin
CLI command for NeoFS block storage audit (#3943, #3945, #3946)- support of
GetBlockHeaderByIndex[Verbose]
RPC client API (#3939) MaxTimePerblock
protocol configuration setting enabling dynamic block acceptance interval (#3948)
Behavior changes:
- index files support is removed from
util upload-bin
CLI command and NeoFSBlockFetcher service (#3938) RemoveUntraceableHeaders
application configuration setting is merged intoRemoveUntraceableBlocks
(#3922)GetBlockHeaderVerbose
RPC client API is deprecated and replaced byGetBlockHeaderByHashVerbose
(#3939)- deprecated
NEP11Payable
andNEP17Payable
aliases are removed from the smartcontract package in favour ofNEP26StandardName
andNEP27StandardName
(#3955) SessionExpirationTime
RPC server configuration setting is deprecated and replaced bySessionLifetime
setting ofDuration
type (#3953)
Improvements:
- light node synchronisation doesn't require full headers sync anymore (#3922)
- BoltDB dependency is upgraded to custom (and faster!) version (#3936, #3937)
- dBFT dependency upgrade empowering dynamic block time extension (#3948)
Bugs fixed:
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: