Skip to content

Releases: nspcc-dev/neo-go

Utilization

10 Jun 19:24
7f225a1
Compare
Choose a tag to compare

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 and base64UrlDecode 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

14 May 14:40
46dbe21
Compare
Choose a tag to compare

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 and unsubscribe requests will be served sequentially by web-socket RPC client (#3893)

Bugs fixed:

  • CommitteeChanged event of native NeoToken is emitted irrespective of Cockatrice fork (#3892)
  • GasPerBlock update is applied starting from the next block (#3891)
  • panic in subscriptions module of web-socket RPC client (#3893)

Separation

30 Apr 21:36
d64ce42
Compare
Choose a tag to compare

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 and getMillisecondsPerBlock 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 and LogTimestamp node parameters allowing to customize logs output format and timestamps (#3846)
  • MaxValidUntilBlockIncrement setting is a part of native Policy contract (setMaxValidUntilBlockIncrement and getMaxValidUntilBlockIncrement APIs) starting from Echidna HF (#3849)
  • MaxTraceableBlocks setting is a part of native Policy contract (setMaxTraceableBlocks and getMaxTraceableBlocks 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 from P2PSignatureExtensions 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 and base64UrlDecode (#3862)
  • NPE on NeoFS BlockFetcher service shutdown (#3870)

Revalidation

13 Feb 14:50
3b54213
Compare
Choose a tag to compare

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

11 Feb 15:19
62972eb
Compare
Choose a tag to compare

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

13 Dec 16:53
9189b3e
Compare
Choose a tag to compare

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:

  • NeoFS BlockFetcher sometimes is hanging during the node startup (#3736)
  • RPC server timers are improperly drained (#3737)
  • basic unit test chain restore configuration (#3696)

Narrativization

06 Dec 13:50
5f92da2
Compare
Choose a tag to compare

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:

  • "unexpected empty payload: CMDVersion" error on peer disconnection (#3726)
  • NeoFS BlockFetcher shutdown (#3728)
  • connected peers count is not respected on attempt to gather more node addresses (#3730)

Mongrelization

03 Dec 09:39
9a39230
Compare
Choose a tag to compare

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 and ib 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 of network 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)
  • MODPOWVM 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

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)