Despite the tumultuous year, Neo3’s core development has maintained course and momentum through 2020. Continuing on from the initial Preview1 release in Sep. 2019, upgrades to different aspects of the platform, rolled out over the months, have brought Neo3 ever closer to MainNet readiness.
Neo3’s development through the year has reflected the major themes and goals first outlined when the new blockchain was proposed—to deliver a developer-friendly and scalable platform. Developer friendliness remains a powerful motivation, being aided by new features such as built-in oracle services, the identity protocol, and off-chain storage support via NeoFS.
These features provide a dependable service to application builders whilst remaining opt-in, leaving them free to choose the best tools for their needs. Meanwhile, other more general smart contract system enhancements such as exception handling support aim to ensure that all contract developers receive a best-in-class experience on the platform.
Aside from new functionality, core development this year also focused on enhancing performance and network throughput. This was a notable consideration when the decision was made to begin with a new chain from genesis, rather than hard forking.
Though a hard fork upgrade would preserve the existing ledger history, it also enforces the need for backwards compatibility across all new updates. This would prevent core developers from tapping into a variety of optimizations for Neo3.
Modularity is another key trend, with different parts of the Neo codebase being encapsulated and decoupled, allowing different pieces to be swapped in and out where appropriate. Though some of these changes benefit developers directly, they also raise the effectiveness and applicability of Neo in various other spheres. These could include private enterprise, educational, or even regional government use cases, where the requirements differ from those of the public network.
Likewise, discussions and subsequent implementations of governance functionality during 2020 ensures that Neo Foundation itself can become decoupled from the Neo network. This will allow for the highly-desired decentralization that will see the blockchain survive far into the future.
- NeoVM performance improvements
- New smart contract system features
- Decoupled RPC, NeoVM, and storage layer
The end of 2019 and first few months of 2020 saw a substantial overhaul to NeoVM, the operating environment for almost every contract on the blockchain. Simplified instruction sets and reference counting techniques for improved resource handling provided a considerable performance upgrade of up to 16 times.
Governance discussions took center stage in February as core developers took community input on the future direction for Neo’s governance mechanism. With a growing number of topics for voters to consider, including consensus nodes, oracle nodes, network policies and fees, it became clear that the complexity for end users plus the sheer volume of transactions required for on-chain voting would present considerable difficulty moving forward.
This prompted Neo’s lead core developer, Erik Zhang, to propose the creation of a governance committee, a set of the most highly voted nodes by NEO holders which can effectively act as a proxy on various decisions.
Similar discussions would later be held regarding the economic model, specifically the most appropriate way to design a system that would appropriately incentivize participants.
Consensus was finally achieved on a new GAS distribution model with set inflation and the introduction of a burn mechanisms for system fees. Based on a proposal first floated by a community developer over two years prior, this new approach is predicted to make the Neo blockchain much more economically robust and sustainable.
Q1’s efforts culminated in the Preview2 release, rolled out on April 21. Accompanying the NeoVM overhaul were numerous changes intended to facilitate tool development and make the codebase more modular, providing flexibility to developers and off-chain applications.
Function pointers, exception instructions, and a new contract manifest and permission system powered up Neo’s smart contract system. Ecosystem developers found further support in new syscalls and devpack updates, helping them take advantage of the new batch of improvements and begin experimenting with C# contracts.
On the modularity front, the RPC module and NeoVM itself were both decoupled from the protocol, as was the node storage layer. The storage change ensures that Neo nodes can be optimized for a variety of different scenarios. Developers will be able to switch between storage schemes, with LevelDB, RocksDB, or running in memory as supported options.
Storage decoupling marked the first major step towards support for light node operation. At this time, the foundations for state root integration were also being explored, another upgrade that would further improve prospects for light nodes.
- Exception handling in contracts
- Index block synchronization
- Redesigned incentive model
Between April and August, the core development team worked towards their next milestone release, Preview3. During this time, the governance model was finalized, following the conclusion of discussion on this topic which began earlier in the year.
May saw the team complete its exception handling mechanism for smart contracts. This enables the use of try-catch statements, increasing the flexibility of dApps on the network. The team also began porting state root functionality to Neo3 around this time.
In the background, prior work was also under reevaluation. The synchronous oracle solution, in development since Neo Community Assembly 2019 in September, was being reevaluated on account of a number of shortcomings. During this stage, development of an asynchronous alternative was a prominent discussion topic.
In June, the team completed the initial implementation of Neo’s new index-based block synchronization mechanism, a luxury afforded the network due to its single block finality.
The new sync logic enables nodes to request missing blocks based on index alone, skipping the delay associated with the usual header-first synchronization. The expected result is a substantial boost to block synchronization time, a notable pain for node runners as a blockchain’s size increases.
Finally, incentive model changes for Neo3 began to be merged into the master branch in August. Designed to encourage participation in governance, the logic for distributing GAS rewards across NEO holders, voters, and committee members was completed.
Together with a number of other enhancements, such as callback functions and improved compatibility between data types in NeoVM, these changes were finally compiled in the milestone Preview3 release on Aug. 3.
- Economic model redesign
- Built-in oracle implementation
- NEP-17 introduction with onPayment functionality
In the time since August, Neo’s core contributors have worked to finalize the missing pieces of key Neo3 functionality. Development began on the new asynchronous oracle to replace its synchronous counterpart, and refinements to the Merkle Patricia trie implementation helped negate some of its performance impact.
September and October saw further work on implementation of the new governance solution discussed earlier in the year, with responsibilities delegated across the top 21 nodes. Along the way, the developers managed to uncover several optimizations that helped maintain simplicity in the code. Coupled with the incentive changes and economic model modifications, the team moved to equip Neo3 with the fundamental tools required to sustain itself and further evolve in the future.
Progression was also made on state root functionality for Neo3, but lack of developer consensus on the best approach for its persistence meant that it was not completed in time for Preview4. Due to this and other notable features, it was decided to move these tasks to a new Preview5 milestone, which will become the new pre-TestNet build.
Despite the absences, Preview4 was finally released on Dec. 22, bringing with it a number of high-profile items. These include the new built-in asynchronous oracle service and economic changes. Additionally, the new version introduces NEP-17, the new token standard to the ecosystem for the first time. Implemented in November, the new standard replaces NEP-5 by updating it with the new onPayment functionality.
The onPayment call is a new method that can be used by a smart contract to trigger a reaction when receiving tokens. Depending on its own needs, the contract can execute a specific piece of logic in response (e.g. mint a new token as in an ICO). Alternatively, a contract not expecting to receive tokens can fail the transaction outright, potentially preventing accidental token loss for a user.
Despite strong progression through the year, a few outstanding tasks still remain to be completed before Neo3 is ready for genesis. Over the next few months, the core development team will be working to check off these final roadmap items.
The updates will be rolled into a final Preview5 build, introducing dynamic calls, state functionality, and the oracle module component. Expected to release in January, Preview5 will be followed with a TestNet period, allowing time for testing and optimization as community development teams prepare their tools for the Neo3 genesis block.