Dusk | Release Cycle Update #27

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


The Dusk's Smart Contract Platform.


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


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 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)

piecrust 0.11.0 


  • 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]


  • 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]


  • Remove CallStack in favor of CallTree [#206]

uplink 0.8.0 


  • Add call to panic in panic handler [#271]
  • Add panic extern [#271]


  • Change return of owner and self_id to ()


  • Remove call to hdebug on panic [#271]

crumbles 0.3.0 


  • Add LocateFile trait for getting file paths for mapping
  • Allow for choosing the size of the mapping


  • 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



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



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).


  • Add interactive stake allow [#98]
  • Add optional WALLET_MAX_ADDR compile time env [#210]


  • Fix staking address display [#204]
  • Fix status overlap [#179]

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




This repository has been created so there's a unique library that holds the types and functions required to perform keys operations.

Update Summary


  • Update dusk-poseidon from 0.30 to 0.31
  • Update dusk-jubjub from 0.12 to 0.13


  • Remove canonical dependencies and features


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.


  • Add size method to the Circuit trait [#767]
  • Add ff dependency


  • Remove PublicParameters from parameters for circuit compression [#767]
  • Remove canonical and canonical_derive dependency
  • Remove canon feature


  • update dusk-bls12_381 dependency to "0.12"
  • update dusk-jubjub dependency to "0.13"


Closed issues

Add size method to Circuit trait #767



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.




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).


  • Expose EDWARDS_D constant

Closed issues

Fix rkyv-impl feature #118



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).


  • Fix no-default-features

Opened/Closed issues

In the past 3 weeks, no issues were opened or closed in the Bls12_381 repository.



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.


Allow external merkle tree opening in Citadel utils #75

Remove pos field from the License object #74




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)


  • Update dusk-bls12_381 to 0.12
  • Update dusk-poseidon to 0.31
  • Update dusk-plonk to 0.16


rkyv serialization doesn't work on Tree #73


In the past 3 weeks, no issues were closed in the merkle repository.



Reference implementation for the Poseidon Hashing algorithm.

Update Summary

Poseidon252 V0.31.0 was released on October 11th. 


  • 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



In the past 3 weeks, no issues were opened/closed in the Poseidon252 repository.



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.



Implementation of Hades252 permutation algorithm over the Bls12-381 Scalar field.

Update Summary

Hades252 V0.22.0 was released on October 11th. 


  • 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.




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]