Neo has released v3.6.0, the latest major update to its blockchain platform. Alongside an upgrade to .NET 7, this overhaul introduces powerful new features, notably the ability to verify zero-knowledge proofs in smart contracts.

The v3.6.0 update comes with a planned hard fork named Basilisk. This fork enables new checks for smart contracts. After the fork, notifications produced by a contract will be matched against the events detailed in its manifest. Moreover, a rigorous script check has been reintroduced for contract deployment and upgrades.

Additionally, the fork corrects BigInteger parsing during JSON deserialization, extending the supported precision from 53 to 257. Basilisk is set to activate at block 2,680,000 on TestNet and 4,120,000 on MainNet.

Zero-knowledge

The recent update includes support for zk-SNARKs, a form of zero-knowledge proof. It lets the validity of a computation be confirmed without having to execute the computation or reveal input parameters. In blockchain terms, this equates to unburdening Layer 1 nodes with work, enhancing scalability, while also offering privacy for users.

With v3.6.0, SNARKs crafted using the Groth16 proof system over the elliptic curve BLS12-381 are supported for smart contract verification. Groth16 has emerged as the industry benchmark for zk-SNARK designs due to its compact proof size and swift verification speeds. There is potential for other curves or proof systems to be added later on.

Developer experience improvements

Several modifications in this release emphasize developer experience, including new NeoVM opcodes, CLI upgrades, and other practical tools.

Within NeoVM, the ABORTMSG and ASSERTMSG opcodes have been finalized. These facilitate developers in identifying the reasons behind an ABORT or ASSERT failure without the need to run a node to inspect logs.

The “Conflict” attribute type was incorporated, allowing transaction creators to sign and dispatch numerous transactions while ensuring only one will be approved and included on the blockchain.

Alterations to nodes have been finalized, simplifying interactions with contract storage. A new plugin, StorageDumper, grants the option to export storage to JSON. Additionally, the FindStorage RPC API call was introduced, enabling storage searches by key or prefix. The CLI was adjusted for better visual appeal.

Other changes

The ContractManagement native contract received the getContractById and getContractHashes methods, and FindOptions.Backwards was added to support reverse order iteration. The upgrade to .NET 7 also makes it possible for NeoCLI to run on Mac ARM devices, and support for .NET Standard 2.1 in NeoVM is a first step towards allowing Unity projects to interface with Neo blockchains.

Further enhancements include a reduction in disk usage for vote reward data storage, client timeout and response size constraints for the Oracle client, and a resolution for conflicts in contract trusts with wildcard arguments. An issue where PrepareRequest activated prematurely after a recovery message during consensus rounds was also addressed.

Node update

Node operators should be aware that due to NeoVM and native contract changes, a full resynchronization is required for updated nodes to achieve the correct state. Configuration files should also be updated to set the block target for the upcoming Basilisk hard fork.

TestNet nodes should be updated as soon as possible. The MainNet upgrade is expected to commence on Sep. 20, assuming no issues are detected during the testing period.

The original announcement may be read at the link below:
https://neo-blockchain.medium.com/neo-cli-v3-6-0-testnet-and-mainnet-upgrade-notice-6f08abcab4b9