Dusk | Release Cycle Update #27
Our development planning features a Release Cycle of three weeks, providing a consistent stream of updates to the community, developers, and businesses relying on Dusk technology.
The publicly available Dusk Network GitHub contains over 18 active repositories, each focused on a different technical subject. Progress in each is ongoing and can be followed in real-time. The Release Cycle process is currently applied to some of our most active repositories.
Release Cycle Update Summary
Many new issues have been added to Rusk, finalizing our last requirements for mainnet. These include adjustments to license contract tests, support for various network environments using Dockerfile, low-level upgradability, protocol upgrades, component handshake, contract deployment system, hyperfast sync-up, support for autocontracts, charging a percentage on obfuscated transactions, and adding granular gas host functions. On the bright side, several issues were resolved, such as making the RUSK_PROFILE_PATH optional, introducing circuit ID environment variables, and enhancing license contract queries.
Due to changes in low-level cryptographic libraries, this release cycle has seen a lot of version bumps and an extended release day. The changes have been propagated throughout the whole stack.
Piecrust recently released version 0.11.0 with various improvements. This release introduced a range of additions, changes, and removals. It also prompted discussions on issues like support for memory64 and building contracts for wasm64-unknown-unknown. This will allow for bigger states in contracts. In the process, some issues were closed, including one that allowed for querying call trees.
Wallet-cli was updated to version 0.19.1, which came with additions and fixes. These improvements included an interactive stake allowance and an optional compile-time environment variable called WALLET_MAX_ADDR. However, a new issue arose, relating to the impact of RocksDB on the CLI's performance. Several issues were also resolved, like specifying different MAX_ADDRESSES, resulting in faster syncing, and addressing ambiguous errors tied to staking.
Plonk introduced version 0.16.0, with new methods and changes to the Circuit trait. An issue involving the size method in the Circuit trait was both opened and closed, signifying progress in its development.
Over in the Citadel repository, they resolved an issue involving custom mock Merkle trees and openings. The fix involved integrating solutions from Moat and the License contract within Citadel Utils. Additionally, the elimination of the "Pos" field from the License object was successfully achieved.
These updates and resolved issues represent the ongoing commitment to development and continuous improvement within the Dusk Network ecosystem.
For the community's benefit, we have divided our repositories in 3 categories, main, libraries and other. Below you will find a selection of some (but not all) of the work that is being done in our repositories, including recent advancements.
Main Repositories
Rusk
The Dusk's Smart Contract Platform.
Opened
Adjust license contract tests to Citadel 0.4.2 #1082
Allow Dockerfile to support various network environments #1080
Support Low-Level Upgradability #1074
Support Protocol Upgrades #1073
Implement Component Handshake #1072
Add Contract Deployment System #1071
Add Hyperfast Sync-up #1068
Add Support for Autocontracts #1067
Charge a Percentage on Obfuscated Transactions #1066
Add Granular Gas Host Functions #1065
Closed
Make RUSK_PROFILE_PATH optional #1057
Add circuit id environment variables #1070
Check the makefile all rule #1056
license contract (get_licenses) - use the feeder query when returning collection of elements #1054
Add state information query to the license contract #1052
Panic in use_license if license is already nullified #1051
Piecrust
Piecrust is a Rust workspace containing three crates, piecrust, piecrust-uplink and crumbles, that together form the WASM virtual machine for running, handling and creating Dusk smart contracts.
Update Summary
Piecrust V0.11.0 was released on October 11th. Implementing the needed changes to solve the below mentioned issue(s)
Added
- Add spent field to CallTreeElem [#206]
- Add call_tree to CallReceipt [#206]
- Expose CallTree and CallTreeElem in the public API [#206]
- Add CallTreeIter to improve iteration over call tree [#206]
- Add panic import implementation [#271]
- Add Error::ContractPanic variant [#271]
Changed
- Adapt to use LocateFile - crumbles's lazy page loading mechanism
- Adapt to crumbles needing n_pages and page_size
- Change return of owner and self_id to ()
- Rename StackElement to CallTreeElem [#206]
- Allow for multiple initializations on a new memory [#271]
- Downcast Error::RuntimeError on each call boundary [#271]
Removed
- Remove CallStack in favor of CallTree [#206]
Added
Changed
- Change return of owner and self_id to ()
Removed
- Remove call to hdebug on panic [#271]
Added
- Add LocateFile trait for getting file paths for mapping
- Allow for choosing the size of the mapping
Changed
- Mapping behavior is now lazy, mapping pages to their regions on demand
- Change Mmap::with_files to take LocateFile instead of IntoIterator<Item = io::Result<(usize, File)>>
- Change Mmap::new and Mmap::with_files to take n_pages and page_size
Opened issues
Support memory64 in piecrust #281
Build contracts for wasm64-unknown-unknown #280
Closed issues
Allow for querying call tree #206
Wallet-core
A WASM library to provide business logic for Dusk wallet implementations.
Opened issues
Current wallet-core creates transactions which cannot be verified on rusk side #84
Closed issues
Malloc linking error on Windows #82
Wallet-cli
Library providing functionalities to create wallets compatible with Dusk Network
This library is used to implement the official Dusk CLI wallet.
Update Summary
Wallet-cli v0.19.1 was released on October 11th. Implementing the needed changes to solve the below mentioned issue(s).
Added
Fixed
Opened issues
Rocksdb slowing this cli down #206
Closed issues
Allow to specify different MAX_ADDRESSES #210
Ambiguous error from the node when staking below 1000 #207
Cannot retrieve staking address #204
Libraries
dusk-pki
This repository has been created so there's a unique library that holds the types and functions required to perform keys operations.
Update Summary
Changed
- Update dusk-poseidon from 0.30 to 0.31
- Update dusk-jubjub from 0.12 to 0.13
Removed
- Remove canonical dependencies and features
Plonk
This is a pure Rust implementation of the PLONK proving system over BLS12-381
This library contains a modularised implementation of KZG10 as the default polynomial commitment scheme.
Update Summary
Plonk V0.16.0 was released on October 11th.
In order to address the issue and simplify the codebase, we have made two related changes to the Circuit trait:
We have added a new method called circuit_size to the Circuit trait. This method returns the size of the circuit, measured as the number of constraints within the circuit.
We have eliminated the requirement to pass the public parameter when compressing the circuit. These changes are interrelated because they both stem from the removal of the pre-allocation of vectors in the builder.
By introducing the circuit_size method, we now provide a straightforward way to query the size of the circuit, making it more accessible and user-friendly. Additionally, the removal of the public parameter from the circuit compression process simplifies the workflow and aligns with our goal of optimizing the code by eliminating unnecessary requirements and redundancies.
Added
- Add size method to the Circuit trait [#767]
- Add ff dependency
Removed
- Remove PublicParameters from parameters for circuit compression [#767]
- Remove canonical and canonical_derive dependency
- Remove canon feature
Changed
- update dusk-bls12_381 dependency to "0.12"
- update dusk-jubjub dependency to "0.13"
Closed issues
Add size method to Circuit trait #767
Kadcast
Implementation of the Kadcast Network layer according to the latest version of the paper to date (2021). Kadcast is an UDP-based peer-to-peer protocol in which peers form a structured overlay.
Opened/Closed issues
In the past 3 weeks, no issues were opened or closed in the Kadcast repository.
Other
jubjub
Implementation of the Jubjub elliptic curve group.
Update Summary
jubjub v0.13.1 was released on October 11th. Implementing the needed changes to solve the below mentioned issue(s).
Changed
- Expose EDWARDS_D constant
Closed issues
Bls12_381
Implementation of the BLS12-381 pairing-friendly elliptic curve group with extra features needed by the Dusk team.
Update Summary
Bls12_381 v0.12.2 was released on October 11th. Implementing the needed changes to solve the below mentioned issue(s).
Fixed
- Fix no-default-features
Opened/Closed issues
In the past 3 weeks, no issues were opened or closed in the Bls12_381 repository.
Citadel
This repository contains the implementation of Citadel, a protocol that integrates a self-sovereign identity system into the Dusk blockchain. An academic paper with further details about the protocol can be found here.
It also contains Shelter, a version of Citadel meant for non-Blockchain use cases. Documentation on this version will be provided soon.
Update Summary
The issue of using custom mock Merkle trees and openings in Citadel Utils has been successfully addressed. The resolution allows for the utilization of external openings and eliminates the need for mock Merkle trees and positions.
To resolve this issue, we have incorporated the solutions already in place in Moat and the License contract into Citadel Utils. This consolidation streamlines the code and enhances clarity by removing the reliance on mock openings and tree positions.
This resolution brings significant benefits, including improved code clarity and the reuse of core components, resulting in a more efficient and maintainable codebase.
The issue regarding the "Pos" field in the License object has been successfully resolved. The "Pos" field was causing confusion as it was the only field not being input as a public parameter of the circuit. Therefore, it was redundant when compared to other ways of storing the position. To alleviate this confusion and promote a clearer understanding that the position needs to be managed through other means, we have removed the "Pos" field.
Closed
Allow external merkle tree opening in Citadel utils #75
Remove pos field from the License object #74
Merkle
A sparsely populated Merkle Tree, parameterized over its height and arity.
Update Summary
Piecrust V0.3.0 was released on October 11th.. Implementing the needed changes to solve the below mentioned issue(s)
Changed
- Update dusk-bls12_381 to 0.12
- Update dusk-poseidon to 0.31
- Update dusk-plonk to 0.16
Opened
rkyv serialization doesn't work on Tree #73
Closed
In the past 3 weeks, no issues were closed in the merkle repository.
Poseidon252
Reference implementation for the Poseidon Hashing algorithm.
Update Summary
Poseidon252 V0.31.0 was released on October 11th.
Changed
- Update dusk-bls12_381 to 0.12
- Update dusk-jubjub to 0.13
- Update dusk-plonk to 0.16
- Update dusk-hades to 0.22
Opened/Closed
In the past 3 weeks, no issues were opened/closed in the Poseidon252 repository.
Dusk-pki
PKI stands for Public Key Infrastructure. This repository has been created so there's a unique library that holds the types and functions required to perform keys operations.
Update Summary
Opened/Closed issues
In the past 3 weeks, no issues were opened or closed in the Dusk-PKI repository.
Hades252
Implementation of Hades252 permutation algorithm over the Bls12-381 Scalar field.
Update Summary
Hades252 V0.22.0 was released on October 11th.
Changed
- Update dusk-plonk to 0.16
- Update dusk-bls12_381 to 0.12
Opened/Closed issues
In the past 3 weeks, no issues were opened or closed in the Hades252 repository.
In A Nutshell: Release Cycle planning
As you can see, development is continuous and this list is not exhaustive. For example, minor issues and advancements concerning the Kadcast element have also been opened and resolved. The complete series of repositories can be found on GitHub.
Breakthrough developments will receive a separate spotlight, such as our latest deployment of Daylight. Thank you very much for your understanding and feedback as we continue to find the best way to provide the community with transparency and development information.
Release Cycle development planning has been adopted by major companies including Google, Mozilla, and during the development of products such as Ubuntu, Kubernetes, and many more. The reason for this is clear: Release Cycle planning improves the predictability of software development for developers and the community alike.
For a more detailed explanation of the concept (along with frequently asked questions) please scroll down to the bottom of this article.
The above noted additions/changes to the repository can be followed on GitHub, for further details on their status and their function in the stack.
FAQ
We’ve included a small FAQ section below to make sure the community understands our intention with Release Cycles.
What is Release Cycle planning?
Release Cycle planning means that developmental updates are published at consistent intervals on GitHub; in the case of Dusk Network, every three weeks. These releases describe the latest additions, changes, fixes, and assets added to the tech stack by the development team.
Dusk Network currently has over 18+ active repositories on GitHub, each repository covering a different technical project. Release Cycle planning has not yet been applied to all repositories; the current focus on a single GitHub repository for clarity does not mean there are no ongoing developmental efforts occurring in other areas.
Does being featured in a Release mean Deployment?
The Release Cycle updates does not mean immediate deployments on our testnet. It is a release detailing additions, changes, and fixes to the repositories that we are ready to share with the public. All released content is considered stable, consistent, reviewed, and cross-checked with other repositories.
Are Release Cycle updates a spotlight for major deliverables?
No. The Release Cycle approach is strictly a way to provide a consistent shape for publication of our work in the clearest terms possible. They are not deadlines to be made, nor are they tied to specific development sprints. Release Cycle updates aim to raise attention with the community, and give proper coverage to, publishable GitHub releases. Major deliverables will be given their proper publication in dedicated articles.
[Read more about our Release Cycle planning here]