Neo St. Petersburg Competence Center (NeoSPCC) recently released version 0.72.0 of NeoGo, which includes over 50 pull requests with new features, improvements, and bug fixes. Shortly after its launch, the release was quickly followed with the current release version 0.72.1, which resolves a bug detected during TestNet synchronization.

Consensus and mempool changes

Through the use of its recently developed node stress testing infrastructure, the team identified problems and optimizations for the networking, consensus, and mempool components. Improvements targeted at these areas are intended to improve the node’s ability to cope with a high transaction load.

Consensus support was first added to NeoGo in the previous update in December. Since then, NeoSPCC has focused on refining the dBFT implementation. During benchmarking, issues leading to consensus stalls and incorrect block proposals were detected and resolved.

The benchmarking tool also highlighted bottlenecks with the current NeoGo mempool implementation. PR #647 brought with it a range of improvements that considerably improved performance and management of unverified transactions, fixed a memory leak, and prevented potential double spends.

Alongside the changes to dBFT and the mempool, the team added networking changes that help resolve connectivity issues and consensus message prioritization. According to NeoSPCC developer Roman Khimov, the improvements have helped NeoGo perform much more consistently during benchmark tests.

Developer functionality

An array of features intended to improve the developer experience have also been included in the 0.72.x releases. NeoSPCC put considerable effort into compiler improvements, the products of experience gained while porting the NeoFS smart contract to Go. New compiler features include:

  • Addition of an interop for signature verification – PR #617
  • Support for loops with single condition – PR #618
  • Support variables in slice literals – PR #619
  • Support map literals and string indices – PR #620
  • Allow string to []byte conversion – PR #622
  • Support switch statements – PR #626
  • Support panic (allow errors to be thrown during contract execution) – PR #629
  • Optimize constant storage – #637

These features, alongside a number of bug fixes for compiler issues, are intended to make writing Neo contracts in Go more appealing for developers. Other useful additions for developers include the ability to run a single-node private network and the ability to limit RPC invocation calls by GAS consumption through a new MaxGasInvoke configuration option.