August Technical Development Monthly Report
Core developer efforts culminated in the Neo v3.4 release in August, bringing notable performance improvements and bug fixes. Most prominent is a powerful new feature which makes it possible for a contract to store dynamic scripts to be executed at runtime in the future.
Smart contracts are usually limited in the range of operations they can perform by the methods included in their code. If some data is needed to be calculated dynamically, a function storing the logic to perform that calculation would usually be included by the contract deployer.
In some cases, the calculation to be made might not be known ahead of time, so no function can be included in the contract to perform it. For example, in an escrow application, one user might want to have their trades managed by the highest reputation custodian available at the time, while another might only want to escrow with a custodian that has a public identity attached and the overall lowest number of disputes, excluding those with a very low number of trades.
For both of these users, the address for the appropriate custodian will naturally change over time, so it can’t be provided ahead of time as fixed data. Though the application developer could provide a set of methods to serve the most common choices to users, this would limit the potential options. With the new dynamic script loading functionality, users would be able to store their selection criteria for custodians directly in the contract to be used as required.
Outside the core, Neo’s development communities also made time to explore new initiatives while adapting to the latest advancements. AxLabs continued to iterate on the GrantShares application, improving functionality and proposal options, while the platform itself passed the US $100K milestone in total grants allocated.
Neo SPCC neared completion of its NeoGo RPC client refactoring, streamlining the integration experience for application builders, and prepared to publicly launch the REST gateway for NeoFS. NGD Enterprise began another new endeavor, designing a new solution to meet developer needs in the space between PrivateNet, TestNet, and MainNet.
The full Neo global monthly development report for August can be found below.
Neo v3.4 released with node performance enhancements and bug fixes
The latest Neo version landed in August, bringing several improvements with it. The StdLib native contract Atoi method received support for leading signs on numeric strings, and support for the recently implemented HasMethod function in the ContractManagement native contract was added to the .NET devpack. On the bug fixing front, an issue with JSON inputs in NeoCLI was resolved, and a potential reentrancy bug for Oracle requests was corrected through use of the InvocationCounter.
An issue was raised on GitHub regarding use of the .NET KeyedCollection base class by Neo’s RemoteNode class in order to handle pending hashes. The implementation was switched to a lighter variant which only supports the necessary operations and improves item removal speed, resulting in improved node performance under heavy loads.
Support for dynamically loaded read-only scripts at runtime for contracts
Work to support dynamically loaded scripts at runtime in contracts continued, with improved return logic, an additional CalledByEntry check, and disabling of notifications. Following core developer discussion over security concerns, these dynamic scripts will only run using the read-only flag.
Infrastructure and Tools Development
Released Neow3j v3.19 with Neo v3.4 compatibility and support for retrieving multiple iterator elements without requiring a session-enabled RPC node.
Furthered RPC refactoring efforts in NeoGo and prepared NeoFS REST Gateway for public release.
Designed a new Neo network product to facilitate collaborative development and progressed on its upcoming TypeScript smart contract compiler.
Improved exchange rate handling in NeoLine and corrected bugs found in both the mobile and Chrome versions of the wallet.
Reviewed the upcoming NameService contract and fixes to issues uncovered in the MyMuffin contract stack.
This month, NEXT made the N3 version of its explorer the default, newly hosted on neotube.io. The Legacy version was moved to neo2.neotube.io, and the Legacy TestNet was deprecated.
Neo SPCC continued on its RPC client refactoring this month, including convenient new interfaces designed for use both in internal code and backend applications. Invoker is used for script execution, while Actor is used for transaction construction, signing, and relay.
Various compiler fixes and CLI improvements were completed, and minor deviations from the C# reference implementation were found and corrected. The team also proposed and implemented an improvement to the CalculateNetworkFee method for contract-based witnesses, though the adjustment is not currently mirrored in the core.
August saw the release of Neow3j v3.19.0, featuring full compatibility with the current Neo release, v3.4.0 and further improving developer experience. Alongside supporting new core features, the new SDK version makes it possible for a developer to retrieve multiple iterator elements from a contract without needing the RPC node to have sessioned enabled.
Smart Contract & dApp framework
In August, NGD Enterprise focused its efforts on new products. Design work was completed for N3 Worknet, a new solution designed to fill the space between PrivateNet, TestNet, and MainNet. The preview build is in progress and intended to be launched in September.
The team also continued to work on a preview release of a TypeScript smart contact compiler. This will fill another gap in the ecosystem and make TypeScript the fifth programming language available to contract developers on N3.
NEXT updated the NeoLine mobile and Chrome extension wallets with a number of bug fixes in August. The N3T4 network was removed from NeoLine for Chrome, and a bug with contract call failures when switching networks was resolved. Both versions received improvements to exchange rate handling to improve user convenience.
The NeoFS core received a number of changes designed to make the system more flexible, reliable, and convenient. The node received generic storage testing and the ability to print object attributes, and a bug fix for the CLI improved handling of incorrect permissions. The Go SDK’s object client was refactored to make it easier to support, and assorted improvements were added in the API.
The majority of changes to the NeoFS Services in August centered on the protocol gateways. In particular, the S3 gateway received support for tag copy and and SSE customer encryption, plus the option to improve upload speed at the cost of some reliability. The team also primed the REST gateway for its public release, adding CORS, binary bearer token support, and additional metrics.
Auditing by Red4Sec (https://red4sec.com/en)
Red4Sec performed an audit of the upcoming NameService contract for N3 in August, and reviewed fixes to the Token and Mufftroller contracts of the MyMuffin project. An audit has also been scheduled with the team for review of a new Flamingo feature.
Alongside its Neow3j improvements, AxLabs also spent considerable effort refining the GrantShares platform this month. Support for new proposal types was introduced, making it possible for users to propose the addition or removal of DAO members, changes to supported assets, and other platform settings.
A feature to link related proposals was also included in the update, making it easier for context to be followed between different proposal discussions. Finally, a dashboard for the GrantShares treasury was completed, which shows balance information, expenditure, and grant transactions.