Skip to content

Releases: nspcc-dev/neo-go

Circumnavigation

24 Sep 10:38
78da990
Compare
Choose a tag to compare

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 and hexDecode 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 to replace directive in go.mod (#4006)
  • initialization statement of switch is ignored by compiler (#3991)

Hibernation

29 Aug 11:37
5e99eb9
Compare
Choose a tag to compare

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 and verify methods) support in smartcontract 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 by SessionLifetime (#3953)
  • math.Min and math.Max interop helpers are deprecated and replaced with Go built-in min/max (#3984)
  • deprecated functionality removal (GetBlockHeader and GetBlockHeaderVerbose 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 with SaveInvocations, KeepOnlyLatestState and RemoveUntraceableBlocks settings (#3954)
  • Go built-in min/max support in compiler (#3984)
  • web-socket client connection errors improvement (#3975)

Bugs fixed:

  • panic on public key comparison with infinite operand (#3961)
  • missing strict UTF-8 check for ABORTMSG and ASSERTMSG arguments (#3988)

Facilitation

18 Jul 16:10
d837c31
Compare
Choose a tag to compare

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 into RemoveUntraceableBlocks (#3922)
  • GetBlockHeaderVerbose RPC client API is deprecated and replaced by GetBlockHeaderByHashVerbose (#3939)
  • deprecated NEP11Payable and NEP17Payable aliases are removed from the smartcontract package in favour of NEP26StandardName and NEP27StandardName (#3955)
  • SessionExpirationTime RPC server configuration setting is deprecated and replaced by SessionLifetime setting of Duration 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:

  • misses in blocks uploaded by util upload-bin CLI command (#3942)
  • panic on attempt to close local RPC client (#3947)

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)