Skip to content

Releases: nspcc-dev/neo-go

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)

Implication

03 Jun 14:31
836183e
Compare
Choose a tag to compare

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:

  • mainnet state difference at block 5462944 caused by runtime notification permissions check against the updated contract state instead of executing state (#3472)
  • unused neofs-contract dependency in the node modules (#3458)

Zephyranthes

21 May 12:57
5cbfe21
Compare
Choose a tag to compare

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 for crypto.PublicKey (#3408)
  • support Copy API for transaction.Transaction and payload.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 and setStoragePrice 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 of getnativecontracts 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

12 Jan 10:40
ed73628
Compare
Choose a tag to compare

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)

Designation

29 Dec 13:39
d901697
Compare
Choose a tag to compare

We're rolling out an update for NeoGo nodes that contains a number of user-facing API improvements for RPC web-socket notification subsystem, CLI utility, wallet related packages and not only. Try out our new --await CLI option for those commands that relay transactions to the network to automatically wait for the on-chain transaction execution result. Subscribe for new block headers with extended RPC notification subsystem interface. Use contract-based accounts provided by wallet package and neotest framework to sign transactions. These and a set of other improvements are available to our users while this release is staying compatible with 3.6.2 version of C# node.

This version also delivers a bug fix for consensus node panic caused by improper native NeoToken cache initialisation. Moreover, there's a set of RPC server side improvements, thus, we recommend to upgrade both consensus and RPC nodes to provide more stable consensus node functioning and extended user APIs functionality. No database resynchronisation is needed.

New features:

  • block headers RPC web-socket subscription (#3252)
  • --await option to synchronize on transaction execution for CLI commands (#3265)
  • partial session-based RPC iterator unwrapping (#3274)
  • contract-based transaction signers in neotest framework (#3233)
  • AMD64 release binaries for macOS (#3251)
  • complex contract signature schemes in wallet.Account (#3256)

Behavior changes:

  • basic RPC subscription filter validity checks are implemented on both RPC client and RPC server sides (#3258)
  • filter of notary request event RPC subscription is extended with type field (#3236)
  • if available, use block headers RPC web-socket subscription for transaction awaiting via waiter package API (#3283)

Improvements:

  • add smart contract storage limits to interop utilities (#3232)
  • extend ZKP examples documentation with additional links to PoT ceremony response files (#3234)
  • support Go types in VM emitter API (#3237)
  • documentation update (#3239, #3242, #3246)
  • BoltDB (go.etcd.io/bbolt) dependency upgrade (#3250)
  • CLI code refactoring (#2682)
  • extend wallet package to work with byte slice based wallets (#3255)
  • export RPC client side transaction awaiting functionality via waiter package (#3265, #3283)

Bugs fixed:

  • remove stale updatehistory section of getnativecontracts RPC response (#3240)
  • immediately check RPC client initialisation on access to blocks RPC subscription API (#3257, #3261)
  • fix CN panic caused by unexpected call to native NeoToken cache (#3253)
  • make "automatically generated" warning of all automatically generated files follow the standard (#3280)

Globalization

27 Nov 15:21
fd7b7ff
Compare
Choose a tag to compare

We're updating NeoGo to push out a number of useful updates and protocol extensions as well as make it compatible with 3.6.2 version of C# node. The most invasive behaviour changes are VM-level protocol constraints imposed on the size of serialized stackitems and NativeActivations node setting removal. This version also delivers a set of smaller useful changes in the interoperability layer and native contract functionality including System.Runtime.CurrentSigners interop, strLen StdLib method and PolicyContract-based transaction attributes pricing as far as a user-facing canceltx CLI command and community-requested --relative-path CLI option.

Node operators must resynchronize their nodes to get fully compatible state (which is confirmed to be compatible with 3.6.2 for current mainnet up to block 4483627 and T5 testnet up to block 3078762). Please, ensure your node configuration doesn't contain NativeActivations protocol configuration section as this logic is hidden under Hardforks starting from the current release.

New features:

  • System.Runtime.CurrentSigners interop allowing to get signers of the currently loaded transaction (#3058)
  • strLen method of native StdLib contract (#3208)
  • transaction attributes pricing regulation via native PolicyContract (#3155)
  • canceltx CLI command as an alternative to unsupported canceltransaction RPC request (#3223, #3214)

Behaviour changes:

  • reduce maximum allowed stackitem.Item size (#3185)
  • restrict maximum allowed NEF file size and prohibit large contracts deployment (#3186)
  • bind NativeActivations node setting to the Hardforks setting (#3212)
  • introduce serialization limit to stackitem.Item and fail large contracts deploy wrt this setting (#3218)
  • add customizable MaxRequestBodyBytes and MaxRequestHeaderBytes RPC server configuration setting (#3221)

Improvements:

  • provide more detailed error on attempt to read non-existent service wallet specified via node configuration file (#3210)
  • optimize emit of imported code for autogenerated RPC bindings (#3215)
  • documentation update (#3203, #3222)
  • add --relative-path CLI flag allowing to override configuration-specific relative paths (#3206)
  • update code owners (#3216, @fyrchik will live in our hearts forever)

Bugs fixed:

  • unify messages of RPC errors according to the RPC errors NEP (#3199)
  • limit maximum allowed number and depth of transaction signers and witnesses per RPC request that accept transaction (#3207, #3221)
  • forbid unknown fields usage in the node configuration file (#3209)
  • enable hardfork-dependant code starting exactly from the block height specified in the node configuration (#3211)
  • require Notary native deposit to be valid for at least one subsequent block after deposit transaction acceptance (#3211)
  • deduplicate unnamed event types for autogenerated RPC bindings and make the binding generation order strictly defined and stable (#3215, #3220)
  • do not panic on trying to compile an import cycle (#3215)
  • state difference at block 3002333 of T5 testnet caused by difference at characters escaping during manifest's Extra field JSON serialisation (#3225)
  • properly start node services that depend on native RoleManagement contract data with genesis Roles protocol configuration setting specified (#3229)

Verification

09 Nov 07:41
dbd647e
Compare
Choose a tag to compare

An urgent 3.6.0-compatible version that contains a hotfix for the bug that prevents node from starting from the existing database every new dBFT epoch. Also, the release includes a bugfix that fails any non-zero NEO and GAS roundtrips from accounts with zero balance.

Although the DB format and storage states were not affected by this release, the node resynchronization is still recommended for those who want to keep correct application logs. Resynchronization can be skipped if you're OK with wrong application logs for some transactions (e.g. CN doesn't care, and RPC node cares a lot).

Bugs fixed:

  • properly initialize cache of native NeoToken contract every new dBFT epoch (#3187)
  • forbid non-zero NEO and GAS roundtrips from accounts with zero balance (#3191)

Backwardation

20 Oct 19:49
9de9320
Compare
Choose a tag to compare

A minor 3.6.0-compatible version of NeoGo with new salty ZKP-related functionality, a large batch of deprecated APIs removal and an experimental genesis block extension. Build Groth-16 circuits, generate proofs and deploy verification contracts easily with the new end-to-end ZKP example and zkpbinding NeoGo API. Setup node roles via the node configuration starting from the genesis block without any painful multisignature transaction forming and invoke any custom script in the genesis-level transaction with the new Genesis protocol configuration extension. And don't forget to move from deprecated RPC client APIs, as a lot of them have been removed.

New node configuration format is finally adapted and the deprecated configuration sections are permanently removed according to the schedule. Pay attention to the SecondsPerBlock protocol configuration section that was replaced by TimePerBlock, a set of node and services address- and port- related configuration section that were replaced by the new Addresses format, direct UnlockWallet consensus configuration that was replaced by a separate Consensus section and a set of node-specific protocol configurations that were moved under a separate P2P section.

This release fixes a set of bugs including a vulnerability introduced by changes in the transaction conflicts storage scheme implemented in #3061 (a part of 0.102.0 release). With the patch presented, it's impossible to uncontrollably pollute the storage with malicious conflicting records.

This version is fully compatible with C# node 3.6.0. However, it requires complete resynchronization on upgrade due to the database storage scheme changes.

New features:

  • API for Groth-16 verification contracts autogeneration and end-to-end example for proving and verifying statements on NeoGo (#3043, #3146)
  • introduce genesis protocol extensions: default node roles designation and genesis transactions (#3168)

Behaviour changes:

  • a lot of deprecated functionality is dropped: RPC client old APIs, shared Notifications channel of WebSocket client, SecondsPerBlock protocol configuration, old way of services and node address and port configuration, old P2P related application settings configuration, direct UnlockWallet consensus configuration, direct node-specific protocol configuration (#3150)
  • database scheme is changed by new way of storing the transaction conflicting records (#3138)

Improvements:

  • NeoFS SDK dependency upgrade (#3129)
  • gnark and gnark-crypto dependencies upgrade (#3145, #3162, #3163)
  • introduce timeout restriction for BoltDB opening (#3148)
  • bump code coverage uploading action version (#3153)
  • Go 1.21 support, bump minimum required Go version up to Go 1.19 (#3157)
  • upgrade golang.org/x/net version (#3158)
  • add protocol hardforks configuration to the getversion RPC response (#3160)
  • format autogenerated smart contract bindings with accordance to standard go fmt rules (#3164)
  • add "DO NOT EDIT" warning to the autogenerated smart contract bindings (#3167)

Bugs fixed:

  • avoid race between getnextblockvalidators RPC call handler and blockchain's block handler routine, significantly refactor native validators caching scheme (#3110)
  • do not panic on failed NeoFS oracle requests (#3129)
  • enable Notary subsystem in NeoFS mainnet configuration (#3136)
  • reorganize storage scheme for transaction conflicting records to avoid possible attack (#3138)
  • properly deserialize wildcard trusts field of smart contract manifest (#3140)
  • use more strict GAS limit for transaction network fee calculation via RPC call (#3141)
  • avoid WebSocket client request blocking (#3142)
  • properly emit big uint64 constants during smart contract compilation (#3147)
  • avoid race access to the node version by tests (#3149)
  • make FindStorage* RPC client APIs to be always compatible with NeoC# RPC server (#3166)