Neo SPCC has released NeoGo v0.122.0 “Vitalization,” a maintenance update focused on eliminating potential state differences between the Go and C# node implementations. The release includes five compatibility fixes spanning native contracts and VM instructions, alongside compiler improvements.

The update is compatible with C# node v3.10+ and requires no blockchain resynchronization or configuration changes.

Compatibility hardening continues

State divergences, where different node implementations process the same transactions differently, pose a critical risk to multi-client networks, potentially causing consensus failures or unreliable execution results. NeoGo has systematically targeted these issues across recent releases, from the 41 MainNet discrepancies resolved in v0.119.0 to the TestNet divergence patched in v0.120.0.

In v0.122.0, five fixes address potential state differences across the Oracle, StdLib, and CryptoLib native contracts, the ISTYPE and ROLL VM instructions, and JSON scientific notation parsing. Three of these were marked urgency level 1, indicating high-priority correctness issues:

  • ISTYPE and ROLL VM instruction handling corrected to match C# behavior (#4365).
  • StdLib native contract compatibility fixes across multiple edge cases (#4367).
  • Oracle native contract state handling aligned with C# node (#4366).

Additional fixes address CryptoLib native contract divergences (#4368) and JSON scientific number parsing for values like 1e5 and 1.5e-3, now matching C# deserializeJSON behavior (#4384).

Compiler improvements

Four pull requests in this release target the NeoGo smart contract compiler, totalling over 1,100 additions across 24 files.

The most significant addition is native fixed-length array support (#4358), closing long-standing issue #3524. The NeoGo compiler previously only supported slices, requiring developers to work around the limitation for fixed-size data structures.

The compiler also now enforces strict type checking for runtime.Notify event parameters (#4369). Previously, the compiler silently cast arguments at compile time when types did not match manifest event definitions. Builds will now fail if argument types are incompatible, catching errors earlier in the development cycle. This closes issue #3027.

Two additional compiler fixes improve debug info output to use correct smart contract parameter types instead of VM types (#4379), and walk the full import tree to surface dependency errors from imported packages (#4361).

Breaking changes

Smart contract developers should note that the automatic type casting for runtime.Notify arguments has been removed. Contracts that previously relied on implicit conversion will need to explicitly cast arguments to the types defined in their manifest event definitions.

dApp developers using the NeoGo RPC client should migrate from actor.ErrExecFailed, which has been removed as previously scheduled, to neorpc.FaultException for detecting failed VM executions.

Other fixes

A bug in the neotest framework’s CompileFile function has been corrected (#4362). The function previously cached contract hashes incorrectly when the same contract was deployed multiple times with different senders, affecting projects like neofs-contract that test deployments across different signers.

The full release notes can be found at the link below:

https://github.com/nspcc-dev/neo-go/releases/tag/v0.122.0