Skip to content

Backwardation

Compare
Choose a tag to compare
@AnnaShaleva AnnaShaleva released this 20 Oct 19:49
· 382 commits to master since this release
9de9320

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)