Skip to content

Releases: nspcc-dev/neo-go

Transliteration

07 Oct 14:28
f86cdd9
Compare
Choose a tag to compare

A small update mostly interesting for people building/testing smart contracts with NeoGo. It contains long-awaited VM CLI update that allows to use blockchain state and complete set of interops, additional helper functions for smart contracts and notification checking code (for upcoming 3.5.0 protocol changes). Node operators using EnableCORSWorkaround (that is still not recommended, but available) also may want to update to be able to handle pre-flight CORS requests.

This version is compatible with C# node 3.4.0 and does not require resynchronization on upgrade. The next release is planned to be compatible with 3.5.0.

New features:

  • address conversion helpers for smart contracts (#2698)
  • interop helper to call specific version of a contract (#2695)
  • notifications are now checked for manifest compliance, a warning is logged in case on detected inconsistencies (#2710)
  • VM CLI can now use blockchain state DB (including historic states) to run code with a complete set of interops and contracts available; additional commands were added to it to inspect storage and generated events (#2723)

Behavior changes:

  • type assertion with two return values in Go contracts can't be compiled now (it never worked properly, #2718)
  • RPC server will now handle pre-flight CORS requests (via OPTIONS methods) when EnableCORSWorkaround setting is on (#2724)
  • all transaction-generating CLI commands were unified to accept gas/sysgas/out/force parameters, ask for confirmation and be able to save transaction into a file; this affects wallet claim and candidate-related commands mostly (#2731)

Improvements:

  • smartcontract.Builder API was extended with Len method (#2691)
  • NNS example contract adjustments for better DNS compatibility (#2679)
  • documentation updates (#2708, #2722, #2726, #2728)
  • compiler now emits code to explicitly cast runtime.Notify() parameters to appropriate types (#2720)
  • CLI tests repackaging (#2725)
  • NeoFS sidechain configurations for mainnet and testnet (#2730)

Bugs fixed:

  • panic on node shutdown (#2689)
  • panic on inlined append() compilation (#2716)

Simplification

09 Sep 12:54
Compare
Choose a tag to compare

Version 0.99.3 brings with it most of the planned refactoring changes to the RPC client. dApp backend code can be greatly simplified in many cases by using new APIs (old ones are still available for transition period of about one-two releases more). We also have some updates for CLI and compiler and a number of bug fixes.

This version is compatible with C# node 3.4.0 and does not require resynchronization on upgrade. The next release is planned to be compatible with 3.5.0 (if it's to be released around currently planned dates).

New features:

  • native contract RPC wrappers (#2643, #2646, #2650, #2666, #2665)
  • NEP-11 RPC wrappers (#2651)
  • invoker interface extension with session-based iterators support (#2650)
  • notary Actor greatly simplifying creation of notary-assisted transactions via RPC client (#2665)
  • historic smart contract calls can now be made via CLI (#2683)

Behavior changes:

  • calculatenetworkfee RPC can handle paid attributes (NeoGo extensions) and invalid contract signatures now, it won't return an error for them (#2658)
  • graceful node shutdown on SIGTERM (#2660)
  • wallet balance commands now require at least 0.99.1 NeoGo version (or
    compatible C# node) used by the RPC server (#2667)

Improvements:

  • build system corrections (#2641, #2684)
  • additional types in unwrap (#2650, #2651)
  • session iterator consistency check in unwrap (#2650)
  • multitransfers in NEP-17 RPC wrapper (#2653)
  • extended transaction validity time in CLI wallet commands (#2653)
  • reference counter optimization in VM (#2659)
  • RPC Actor API can have default (used for all transactions) attributes and callbacks now (#2665)
  • neptoken RPC package can now provide wallet.Token data (#2667)
  • NEP-11 balance commands can now work without direct token hash specification or previous token import (#2667)
  • support for offline signing in CLI (#2668)
  • compiler can optimize out unused global variables now (#2624)
  • private keys are now cleaned up from memory when they're no longer needed, additional Account APIs added to reduce direct interactions with private keys (#2672)
  • updated linter settings, some code cleanup (#2674)
  • more documentation and examples for new RPC APIs (#2681)
  • refactored state-changing methods of NEP-11/NEP-17 RPC wrappers into a separate structure to simplify reusing them in higher-level code (#2681)
  • simplified rpcclient historic API (#2686)

Bugs fixed:

  • compiler panic on empty package list (#2645)
  • compiler not allowed to use unnamed parameters in exported methods (#2648)
  • compiler allowed to export multireturn functions (#2648)
  • compiler panic on nil method receiver in the compiled code (#2649)
  • compiler panic on variable initialization from multireturn call (#2644)
  • potential lockups or panics on node shutdown (#2652)
  • contract manifest not checked for correctness in bindings generation CLI command (#2656)
  • SignTx wallet Account API could lead to inconsistent result in some cases (#2665)
  • wallet Account API allowed to sign with locked accounts (#2665)
  • potential panic in keys.WIFDecode on some inputs (#2672)

Recalibration

12 Aug 16:08
Compare
Choose a tag to compare

This is a 3.4.0-compatible (tested for mainnet and testnet) update to NeoGo that implements all of the required protocol changes, adds a lot of new RPC client interfaces and provides additional service management functions. This is also the first version to support the recently released Go 1.19. Support for Go 1.16 is removed at the same time, so you need Go 1.17+ to build NeoGo now.

With this version you can turn on/off, restart or reconfigure internal node services like RPC or Oracle without full node shutdown/startup. Node operators can send an appropriate Unix signal and that'll do the job. At the same time node operators must resynchronize their nodes when updating to 0.99.2 due to native contract state change.

A number of RPC client's methods are now deprecated (but still available to simplify transition), please explore new APIs, try them and leave feedback in #2597 if any. We expect new APIs to better fit the needs of various backend RPC client use cases while allowing to remove some repetitive code from applications at the same time. This release only contains generic NEP-17 call wrapper, so it doesn't cover all of the things currently provided by the old client API, but this will be fixed in future releases.

New features:

  • signal-based configuration and service reloads (#2612)
  • new APIs in smartcontract package to convert Go types into NEP-14 parameters (#2621, #2632)
  • invoker package to deal with invocations via RPC in various contexts (mostly useful for read-only and/or historic calls when used directly, #2621)
  • hasMethod method in the ContractManagement native contract (#2598, #2619, #2640)
  • actor package that helps in creating and sending transactions to the network via RPC using the same set of signers (can be used directly, but mostly intended to be used by higher-order contract wrappers, #2632, #2637)
  • unwrap package in the RPC client that checks for execution results and
    converts returned stack items to expected Go types (can be used directly, but more useful when being used by upper-layer contract wrappers, #2638)
  • nep17 RPC client package for simple remote access to NEP-17 contract methods via RPC, both safe and state-changing (#2642)

Behavior changes:

  • smartcontract.Params type and (*Parameter).TryParse APIs were removed completely as unused and not useful (#2621)
  • compiler now rejects unnamed parameter for exported methods (but they didn't work properly anyway, #2601)
  • restored deploy-time out of bounds script checks (#2538, #2619)
  • dynamic scripts (like entry scripts) no longer can emit notifications (#2613)
  • db dump and db restore CLI commands now reject --debug option (it was ignored previously, #2625)

Improvements:

  • manifest correctness check during compilation (#2601)
  • more robust CalledByEntry scope check (#2613)
  • a check for excessive arguments in CLI (#2625)
  • better help messages for CLI commands (#2625)
  • Go 1.19 support (#2634)
  • saved transactions created via CLI (--out) now use the maximum possible ValidUntilBlock values (#2632)
  • RPC server now returns more data about NeoGo-specific protocol extensions in getversion reply (#2632)

Bugs fixed:

  • NEP-6 wallet version was wrong wrt the standard and C# implementation (#2633)
  • smart contract invocations from the CLI didn't compensate for interactive prompt wait time which could lead to transaction expiration before it was sent (#2632)
  • Oracle native contract's finish method reentrancy problem (#2639)

Parametrization

28 Jul 13:32
Compare
Choose a tag to compare

We're updating NeoGo to push out a number of significant updates as well as make it compatible with 3.3.1 version of C# node. The most prominent changes are RPC sessions for iterators returned from invoke* calls, initial bits of RPC client refactoring and support for darwin-arm64 and linux-arm64 platforms. A number of internal changes are less visible from outside, but are also important for future evolution of the code base.

Node operators must resynchronize their nodes to get fully compatible state (which is confirmed to be compatible with 3.3.1 for current mainnet up to block 1932677 and T5 testnet up to block 475938). RPC client users, please review the changes carefully and update your code wrt refactorings made as well as iterator session support.

Subsequent releases will also change RPC client and associated code, we want to make it easier to use as well as extend its functionality (see #2597 for details, comments and suggestions are welcome). 0.99.2 is expected to be released somewhere in August with 3.4.0 C# node compatibility.

New features:

  • getcandidates RPC method to get full list of registered candidates and their voting status (#2587)
  • wallet configuration file support to simplify using CLI non-interactively, use --wallet-config option instead of --wallet if needed (#2559)
  • session-based JSON-RPC iterator API for both server and client with traverseiterator and terminatesession calls; notice that the default server behavior (SessionEnabled: false) is compatible with NeoGo 0.99.0, iterators are expanded the way they were previously, only when sessions are enabled they're returned by the server to the client (#2555)
  • interop package now provides helper methods for proper Hash160, Hash256 and other type comparisons in smart contracts (#2591)
  • smartcontract.Builder type to assist with entry script creation as well as a set of CreateXXXScript functions for simple cases (#2610)

Behavior changes:

  • 3.3.1-compatible order of ABI methods for the native NeoToken contract which affects LedgerContract state (#2539)
  • getnextvalidators RPC was reworked to be compatible with C# node, if you rely on Active flag from the old response or full candidate list please use getcandidates method (#2587)
  • --account parameter for contract manifest add-group CLI command was changed to --address (short -a is still the same) for better consistency with other commands (#2559)
  • (*WSClient).GetError won't return an error in case the connection was closed with (*WSClient).Close
  • getnepXXbalances RPCs now return decimals, symbol and token name data along with asset hash (#2581)
  • Ledger.GetBlock will now return state root hash for chains that use StateRootInHeader extension (#2583)
  • request.RawParams type is gone (but it likely wasn't used anway), if needed use []interface{} directly (#2585)
  • RawParams field of request.Raw was renamed to Params (#2585)
  • vm.State type moved to a package of its own (vm/vmstate) to avoid importing whole VM where only State type is needed (#2586)
  • MaxStorageKeyLen and MaxStorageKeyLen definitions moved from core/storage to config/limits package simplifying their usage (#2586)
  • vm.InvocationTree type moved into vm/invocations (#2586)
  • storage.Operation type moved into storage/dboper package (#2586)
  • rpc/server package moved to services/rpcsrv (#2609)
  • rpc/client package moved to rpcclient (#2609)
  • network/metrics package moved to services/metrics (#2609)
  • rpc/request and rpc/response packages were merged under neorpc, request.Raw is neorpc.Request now, while response.Raw is neorpc.Response (#2609)
  • rpc.Config type was moved to config.RPC (#2609)
  • subscriptions.NotificationEvent type moved to state.ContainedNotificationEvent (#2609)
  • subscriptions.NotaryRequestEvent type moved to result.NotaryRequestEvent (#2609)

Improvements:

  • new make targets to build NeoGo binaries locally or using Docker environment (#2537, #2541)
  • more detailed client-side error on JSON-RPC WebSocket connection closure (#2540)
  • various node's micro-optimizations both for CPU usage and memory allocations (#2543)
  • new Wallet method that allows to save it in pretty format (#2549)
  • massive test code refactoring along with some core packages restructuring (#2548)
  • transaction package fuzz-test (#2553)
  • simplified client-side Error structure, more predefined errors for comparisons, refactored server side of RPC error handling (#2544)
  • more effective entry scripts for parameterless function invocations via RPC (#2558)
  • internal services now can start/stop properly independent of other node functionality (#2566, #2580)
  • all configurations now use 'localhost' instead of 127.0.0.1 (#2577)
  • documented JSON behavior for enumerations which deviates from C# node slightly (#2579)
  • better error messages in the CLI for invocations (#2574)
  • compiler can inline methods now (#2583)
  • interface{}() conversions are supported by the compiler now (although they don't change values, #2583)
  • server-side code moved out of common RPC packages completely (#2585, #2586)
  • metrics and DB configurations moved to config and dbconfig packages (#2586)
  • calling methods on returned values is now possible in Go smart contracts (#2593)
  • NNS contract now cleans up old entries in case a domain is registered again after expiration (#2599)
  • GetMPTData P2P messages (from P2PStateExchangeExtensions) can now be processed even if KeepOnlyLatestState is enabled (#2600)
  • builds and regular tests for MacOS (#2602, #2608)
  • internal blockchainer.Blockchainer is finally gone, simplifying some dependencies (#2609)
  • updated CLI --version output format to conform with NeoFS tooling style (#2614)

Bugs fixed:

  • dBFT update: increase the number of nodes that respond to RecoveryRequest (#2546, nspcc-dev/dbft#59)
  • invalid block height estimation for historic calls (#2556)
  • Signature parameter to RPC invocations was expected in hex format instead of base64 (#2558)
  • missing data in RPC server error logs in some cases (#2560)
  • potential deadlock in consensus node before the dBFT process is started (#2567)
  • dBFT update: ChangeView messages were not correctly transmitted in RecoveryResponse messages (#2569, nspcc-dev/dbft#60)
  • dBFT update: ChangeView messages from newer views were not correctly processed by outdated node (#2573, nspcc-dev/dbft#61)
  • RPC server restarts via SIGHUP could lead to server not starting at all in very rare case (#2582)
  • inlined code couldn't have multiple return statements (#2594)
  • empty list of transactions is now returned instead of null in getblock RPC responses when block doesn't contain transactions, the same way C# node does (#2607)
  • candidate registration didn't invalidate committee cache leading to state differences for T5 testnet (#2615)

Overextrapolation

03 Jun 12:51
Compare
Choose a tag to compare

A big NeoGo upgrade that is made to be compatible with C# node version 3.3.0. All of the protocol changes are implemented there with the main one being the Aspidochelone hardfork that will happen on mainnet soon. Compatibility is confirmed for current T5 testnet and mainnet, but this version requires a resynchronization so schedule your updates accordingly.

But it's not just about the protocol changes, this release introduces an ability to perform historic invocations via RPC for nodes that store old MPT data. Using invokefunctionhistoric you can perform some invocation with the chain state at the given height, retreiving old balances, ownership data or anything else you might be interested in.

Please also pay attention to configuration files used by your node, mainnet ones must have Aspidochelone hardfork enabled at height 1730000 to be compatible and T5 testnet enables it at height 210000. T5 testnet is different from T4, it uses different magic number, different seed nodes and different protocol configuration settings. 0.99.0 won't work for T4 testnet, please use 0.98.5 for it.

New features:

  • new methods in native contracts:
    • getTransactionVMState and getTransactionSigners in LedgerContract (#2417, #2447, #2511)
    • murmur32 in CryptoLib (#2417)
    • getAllCandidates and getCandidateVote in NeoToken (#2465)
  • System.Runtime.GetAddressVersion syscall (#2443)
  • StartWhenSynchronized option for RPC server (defaults to the old behaviour, #2445)
  • historic RPC invocations (invokefunctionhistoric, invokescripthistoric and invokecontractverifyhistoric APIs, #2431)
  • protocol hardforks, with Aspidochelone being the first supported (#2469, #2519, #2530, #2535)
  • MODMUL and MODPOW VM instructions (#2474)
  • ability to get connection closure error from WSClient (#2510)
  • isolated contract calls with state rollback on exception (#2508)
  • vote and candidate state change events in the NEO contract (#2523)
  • immutable compound types in VM (#2525)

Behavior changes:

  • ContractManagement deploy and update methods now require AllowCall flag (#2402)
  • GetStorageItems* APIs are no longer available in dao package, use Seek* (#2414)
  • committee candidates are now checked against the Policy contract block list (#2453)
  • getCandidates NEO method returns no more than 256 results now (#2465)
  • EQUAL checks are limited to 64K of data in VM now irrespective of the number of elements compared (#2467)
  • Create[Standard/Multisig]Account prices were raised to avoid DoS attacks (#2469)
  • System.Runtime.GetNotifications syscall costs 16 times more GAS now (#2513)
  • System.Runtime.GetRandom syscall now costs more and uses more secure seed (#2519)

Improvements:

  • better messages for some CLI commands (#2411, #2405, #2455)
  • fixes and extensions for example contracts (#2408)
  • better neotest documentation (#2408)
  • internal tests now use neotest framework more extensively (#2393)
  • neotest can now be used for benchmark code and has more multi-validator chain methods (#2393)
  • big (>64 bit) integers can now be used for RPC calls (#2413)
  • no error is logged now when notary-assisted transaction is already in the mempool (it's not an error, #2426)
  • T5 testnet with more aggressive protocol parameters (#2457)
  • destroyed contracts are blocked now (#2462)
  • JSONization errors for invoke* RPCs are now returned in exception field of the answer (#2461)
  • typos, grammar and spelling fixes in documentation, comments and messages (#2441, #2442)
  • faster RPC client initialization (#2468)
  • RPC processing errors use ERROR log severity now only if there is a server-side error occurred (2484)
  • increased server-side websocket message limit to fit any request (#2507)
  • invalid PrepareRequest now doesn't require other nodes to be alive to send ChangeView (#2512)
  • updated YAML library dependency (#2527)
  • notary subsystem compatibility fixes, using new IDs and options (#2380)
  • minor performance improvements (#2531)

Bugs fixed:

  • websocket-based RPCs were not counted in Prometheus metrics (#2404)
  • input data escaping missing for RPC log messages (#2404)
  • compiler panic in notification checking code (#2408)
  • missing 'hash' field in the debug data (#2427)
  • debug data used relative paths that are not compatible with neo-debugger (#2427)
  • getversion RPC method wasn't compatible with C# implementation (#2435, #2448)
  • old BaseExecFee and StoragePrice values could be used by transactions in the same block with transactions that change any of them (#2432)
  • context initialization race in dbft (#2439)
  • some stateroot data functions used incorrect keys in the DB (#2446)
  • voter reward data could not be deleted in NEO contract in some cases (#2454)
  • the maximum number of HTTPS oracle redirections is limited to 2 (and only using HTTPS) for C# compatibility (#2456, #2389)
  • maximum number of contract updates wasn't limited leading to overflow (#2462)
  • incorrect interop signature for getCandidates NEO contract method (#2465)
  • next instruction validitiy check is performed now before instruction pointer move to be compatible with C# implementation (#2475)
  • concurrent map access in Seek leading to panic (#2495, #2499)
  • insecure password reads (#2480)
  • minor VM reference counting fixes (#2498, #2502, #2525)
  • panic during serialization of transaction with empty script (#2485)
  • 'exception' field was missing in the invoke* RPC call output when there is no exception which differed from C# node behaviour (#2514)
  • interop interfaces used incompatible (wrt C# node) type string in JSON (#2515)
  • minor genesis block state differences wrt C# implementation (#2532)
  • incompatible (wrt C#) method offset check (#2532)

Neutralization

13 May 15:48
Compare
Choose a tag to compare

An urgent update to fix the same security issue that was fixed in 3.1.0.1 C# node release. Please upgrade as soon as possible, resynchronization is not needed for mainnet.

Bugs fixed:

  • GAS emission now happens after NEO transfer is finished (#2488)

Mesmerization

11 May 19:05
Compare
Choose a tag to compare

An urgent release to fix incompatibility with mainnet at block 1528989. The actual pair of problems leading to inability to process this block occurred earilier than that, so to fix this you need to resynchronize your node. Fixed node is confirmed to have identical state as 3.1.0 C# node up to block 1529810.

Bugs fixed:

  • StdLib itoa() implementation emitted uppercase letters instead of lowercase (#2478)
  • StdLib jsonDeserialize() implementation couldn't handle properly integers larger than 64-bit signed (#2478)

Liquidation

07 May 15:20
Compare
Choose a tag to compare

This is a hotfix release to fix t4 testnet incompatibility at block 1589202. The actual problem was found and fixed during 0.99.0 development
cycle, but 0.99.0 is expected to be incompatible with t4 testnet. This release allows to continue working with it as well as mainnet (and contains some other fixes for known problems). It does not require resynchronizing a node.

Improvements:

  • double call to WSClient.Close() method won't cause a panic (#2420)

Bugs fixed:

  • Rules scope considered as invalid in binary representation (#2452)
  • incorrect compressed P2P message could lead to panic (#2409)
  • notary-assisted transaction could be in inconsistent state on the Notary node (#2424)
  • WSClient panics if request is made after connection breakage (#2450)
  • Rules scope JSON representation wasn't compatible with C# implementation (#2466)
  • JSONized Rules scope could only contain 15 conditions instead of 16 (#2466)

Karstification

21 Mar 13:24
Compare
Choose a tag to compare

We've decided to release one more 3.1.0-compatible version bringing all of the new features and bug fixes made (along with complete support for Windows platform) before going into full 3.2.0 compatibility. It's important for us to give you more stable and flexible environment for the ongoing hackathon. Contract bindings generator might be very useful for anyone operating with already deployed contracts written in other languages, while the node itself can now be configured for lightweight operation, keeping only the data relevant for the past MaxTraceableBlocks, no more and no less. Current public networks don't benefit from it yet with their large MaxTraceableBlocks setting, but they're growing every day and it's just a matter of time when this feature will start making a difference. And sorry, but this release is again faster than the previous one.

We recommend updating, but if your node is not public and you don't specifically want to play with new things brought by it you might as well wait for the next one. It requires resynchronization and 0.99.0 will do too because of planned protocol changes.

New features:

  • protocol extension allowing to change the number of validators in existing network (#2334)
  • MPT garbage collection mechanism allowing to store a set of latest MPTs, RemoveUntraceableBlocks setting now activates it by default unless KeepOnlyLatestState is used (#2354, #2360)
  • NEP-11/NEP-17 transfer data garbage collection (#2363)
  • Go bindings generator based on contract manifests (#2349, #2359)

Behavior changes:

  • some RPC client functions for divisible NEP-11 changed signatures using slice of bytes now instead of strings for IDs (#2351)
  • heavily refactored storage and dao package interfaces (#2364, #2366)
  • support for Go 1.18 added, 1.15 dropped (#2369)

Improvements:

  • additional CLI tests (#2341)
  • defer statement is now compiled more effectively (#2345)
  • defer statement can be used in conditional branches now (#2348)
  • new tests for divisible NEP-11 contract (#2351)
  • all tests failing on Windows platform are fixed (#2353)
  • RPC functions now accept integers larger than 2^64 from strings (#2356)
  • 10-35%% improvement in bulk block processing speed (node synchronization) depending on machine and configuration (#2364)
  • reworked VM CLI fixing Windows incompatibility and UTF-8 bugs (#2365)
  • incompletely signed transaction JSONs now also contain hash (#2368)
  • RPC clients can now safely be used from multiple threads (#2367)
  • additional tests for node startup sequences (#2370)
  • customizable notary service fee for Notary extension (#2378)
  • signers passed into RPC methods can now contain rules (#2384)
  • compiler tests now take less time (#2382)
  • some fuzzing tests added (#2399)

Bugs fixed:

  • test execution result wasn't checked for CLI invocations that saved transaction into file (#2341)
  • exception stack wasn't properly cleared during CALL processing in VM (#2348)
  • incorrect contract used in RPC client's GetOraclePrice (#2378)
  • oracle service could be tricked by redirects into going to local hosts when this was disabled (#2383)
  • invoke* RPC functions could be used to trigger OOM with specially crafted scripts (#2386)
  • some edge-cased integer conversions were not exactly matching the behavior of C# node in VM (#2391)
  • HASKEY instruction wasn't working for byte arrays (#2391)
  • specially-crafterd JSONPath filters for oracle requests could trigger OOM (#2372)
  • ENDFINALLY opcode before ENDTRY could lead to VM panic (#2396)
  • IsScriptCorrect function could panic on specially-crafted inputs (#2397)

Immunization

31 Jan 16:11
Compare
Choose a tag to compare

Bug fixes, interesting optimizations, divisible NEP-11 example and a big compiler update --- everything you wanted to find in this NeoGo update. It requires chain resynchronization, but this resynchronization will be faster than ever.

One thing should also be noted, even though this release is 3.1.0-compatible, it is known to have a different state for testnet after block 975644, but it's not a NeoGo fault, it'll be fixed in the next C# node release. The root cause is well-known and is not considered to be critical compatibility-wise.

New features:

  • support for reading the wallet from stdin in CLI (where it's possible, #2304)
  • new CLI command for wallet password change (#2327)
  • getstateroot support in RPC client (#2328)
  • divisible NEP-11 example (#2333)
  • helper script to compare node states via RPC (#2339)

Behavior changes:

  • zero balance is explicitly printed now for token-specific NEP-17 balance requests from CLI (#2315)
  • pkg/interop (used by smart contracts) is a separate Go module now (#2292, #2338)
  • smart contracts must be proper Go packages now (#2292, #2326)

Improvements:

  • optimized application log storage (#2305)
  • additional APIs in neotest framework (#2298, #2299)
  • CALLT instruction is now used by the compiler where appropriate leading to more optimized code (#2306)
  • DB seek improvements increasing chain processing speed by ~27% (#2316, #2330)
  • updated NeoFS dependencies (#2324)
  • optimized emitting zero-length arrays in emit package used to construct scripts (#2299)
  • native contract tests refactored using generic contract testing framework (#2299)
  • refactored internal Blockchainer interfaces, eliminating unnecessary dependencies and standardizing internal service behavior (#2323)
  • consensus process now always receives incoming transactions which might be helpful for accepting conflicting (wrt local pool) transactions or when the memory pool is full (#2323)
  • eliminated queued block networked re-requests (#2329)
  • better error reporting and parameter handling in FindStates RPC client method (#2328)
  • invoke* RPCs now also return notifications generated during execution (#2331)
  • it's possible to get storage changes from the result of invoke* RPCs (#2331)
  • better transfer data storage scheme resulting in faster getnep* RPC processing (#2330)
  • dropped deprecated loader package from compiler dependencies moving to updated x/tools interface (#2292)

Bugs fixed:

  • incorrect handling of missing user response in CLI (#2308)
  • improper primary node GAS distribution in notary-enabled networks (#2311)
  • excessive trailing spaces in the VM CLI output (#2314)
  • difference in JSON escaping wrt C# node leading to state difference for testnet at block 864762 (#2321)
  • potential panic during node shutdown in the middle of state jump (#2325)
  • wrong parameters for findstates call in RPC client (#2328)
  • improper call flags in Notary contract withdraw method (#2332)
  • incorrect ownerOf signature for divisible NEP-11 contracts (#2333)
  • missing safeness check for overloaded methods in the compiler (#2333)