en

NeoGo v0.119.0 targets Gorgon hard fork readiness, fixes 41 VM discrepancies

image
rubric logo Altcoins
like moon 3

Neo SPCC has released NeoGo v0.119.0 “Yawl,” introducing protocol changes that activate at the upcoming Gorgon hard fork, resolving 41 MainNet transaction differences between NeoGo and the C# reference node, and delivering performance optimizations for node operators. The release is compatible with C# node v3.9.2 and does not require a database resync.

The update arrives as Neo’s infrastructure teams prepare for Gorgon, the network’s next hard fork. The Neo Council voted in April to defer a proposed execution fee reduction in favor of waiting for Gorgon’s dynamic opcode pricing model, which Neo SPCC designed to make standard transactions significantly cheaper while making malicious transactions exponentially more expensive. No deployment date has been set for the hard fork.

Gorgon protocol changes

Several behavior changes in v0.119.0 take effect only when Gorgon activates. These include stricter handling of invalid cryptographic signature arguments across CryptoLib and System.Crypto operations, which will now trigger a FAULT instead of silently proceeding. The release also adds missing operand checks for the SHR and SHL VM instructions and an index bounds check for HASKEY, aligning NeoGo’s behavior with the expected Gorgon specification.

Contract management changes are included as well – the ContractManagement cache is now updated before the contract block on destroy, and contract accounts are blocked before contract destruction, both effective at Gorgon.

VM compatibility fixes

v0.119.0 addresses 41 MainNet transactions where NeoGo and the C# reference node produced different FAULT outcomes. These discrepancies meant the two implementations were processing certain contracts differently – a reliability concern for a multi-client network.

Fixes include corrected handling of System.Contract.CallNative async callbacks, method return value type validation during contract calls, and multiple refcounting corrections for PACKMAP, SETITEM, and SYSCALL argument parsing. Several VM panics were also resolved, including crashes on struct field access and an incorrect response from Ledger’s getBlock when given a block index beyond the current height – NeoGo now returns null, matching the C# node’s behavior.

The underlying implementation of stackitem.Map was also reworked, ported from the C# reference implementation to use an ordered structure.

Performance improvements

A new DirectRelay RPC option enables direct transaction broadcast to peers rather than routing through the standard queue for sendrawtransaction calls. The feature is particularly relevant following the activation of three-second block times on MainNet in late April, where faster propagation has greater impact. Neo SPCC noted synthetic network tests showed minimal improvement, though real-world conditions may differ.

Mempool operations received microoptimizations yielding up to a 24% reduction in time and allocations for the common same-fee scenario. Consensus message delivery through the P2P layer was also improved, and BoltDB was upgraded to an allocation-optimized version for lower memory pressure.

Operational updates

Node operators running systemd can now use sd_notify integration, enabling proper Type=notify service units with READY, RELOADING, and STOPPING signals. A new Prometheus metric for active WebSocket connections was added, motivated by NeoFS storage nodes encountering WebSocket client limits.

Four existing Prometheus metrics were renamed without a transition period – current_state_height, current_block_height, current_persisted_height, and current_header_height lose the “current_” prefix. Operators will need to update dashboards and alerts accordingly.

For developers, the actor.ErrExecFailed error type has been deprecated in favor of neorpc.FaultException, requiring migration in applications that check for execution failures.

Looking ahead

NeoGo v0.119.0 moves the Go client closer to Gorgon readiness while tightening its alignment with the C# reference implementation. The Gorgon hard fork remains without a scheduled date, with dynamic opcode pricing already implemented on the NeoGo side and awaiting completion in the C# node. Previous NeoGo coverage can be found in NNT’s article on v0.118.0.

The full release notes can be found at the link below:
https://github.com/nspcc-dev/neo-go/releases/tag/v0.119.0