A monthly development update series created to embrace the transparency and inclusivity that we strive for at Dusk Network
Introduction - Recap
On our quest to deliver a privacy-respecting blockchain for smart contracts, we have created our own implementation of the recent PLONK zero-knowledge proof system invented by Aztec Protocol. PLONK is a suitable replacement for Bulletproofs, because it uses an updatable and universal reference string. Similar to Bulletproofs, this means zero-knowledge smart contracts can be deployed at scale (without having to create new trusted setups for every smart contract, and every circuit used). However, what makes PLONK a clear winner are its 5-7ms verification, which are a thousand fold faster than those of Bulletproofs.
In order to embed PLONK into all of Dusk Network’s processes we are creating PLONK gadgets and circuitry from the ground up. Since we use zero-knowledge technology in the entirety of our stack (including the consensus, transactional model and VM) this not only means we need to create a lot of PLONK gadgets and circuitry, but also that the many components that interact with PLONK need to be optimized accordingly.
With that out of the way, let’s dive right into the update!
Development
RUSK - The Dusk Network Virtual Machine (VM)
The VM team has been working on the integration of Poseidon and PLONK on all levels of the Rusk VM. In particular, the VM Global State (that represents the state of the blockchain) has received special attention this month for what concerns the data structures that are used for Zero-Knowledge Smart Contract storage.
In the current landscape of smart contract blockchains there is usually only one general purpose data storage available for all of the smart contracts. In the Dusk Network this concept is expanded to two main data storage types. To be specific, in addition to the general smart contract storage, Dusk Network has a zero-knowledge specific storage for data that needs to be proven in zero-knowledge (See Figure 1 below). We needed to optimize this zero-knowledge specific storage in order for it to be able to work with our zero-knowledge proof system PLONK, which is why we have come up with Poseidon Trees. A Poseidon Tree is a novel merkle tree that is optimized to deal with scalars.
See Figure 1
Illustration of global state zero-knowledge smart contract storage.
The VM team has also implemented an encoding algorithm into the Poseidon Trees, that supports all of the complex data structures available in the zero-knowledge smart contracts (e.g. notes, bids, etc.).
Last, but not least. A lot of effort has gone into creating VM-related developer documentation that should be understandable both by experts in the respective fields and other developers. This documentation is included in our to-be released GitBook pages.
Cryptography
After a period of testing and optimizing, we found the need to replace the xSalsa20-Poly1305 encryption primitive (by Libsodium) that encrypts single scalars in the Dusk Network blockchain, with an alternative that was more optimised for this use case. The decision was made to use the Poseidon-based encryption algorithm, derived from the ‘Encryption with Poseidon’-paper Dmitry Khovratovich published 7 months ago. The team implemented the encryption primitive, and optimized it accordingly. Once the optimization was finalized, they connected it with Phoenix - our transactional model. Inside Phoenix, this is now used to encrypt the value of obfuscated notes and other primitives.
Note: within the Dusk Network we usually deal with obfuscated notes, but for the Block Generator reward, or gas refunds we use transparent notes.
The next step is to reap the benefits of Poseidon-based encryption, since it's already optimized to work with PLONK zero-knowledge proofs. A concrete example is provable encryption. Provable encryption enables you to prove that you have encrypted the specific value, which is useful for auditable parts of XSC.
PLONK
As a brief primer.. in order to use PLONK we need to create gadgets that collectively are used to create circuits.
“PLONK can be seen as a construction worker, whereas gadgets are prefab components, and a circuit is an entire building”.
These PLONK gadgets are reusable components that speed up development the more we have of them, they are also the key to the creation of a Domain Specific Language (DSL).
In particular, the PLONK team has been busy working on implementing a scalar multiplication gadget inside of PLONK circuits. This gadget will be used in many places in the network, as an example it is used for stealth addresses, and anything that has to do with ‘private/public key’ in the circuits.
Forward looking
Once the creation of gadgets and circuitry comes to an end the focus will shift to implementing recursive proofs and Plookup with PLONK. Recursive proof is the idea that proofs attest to the correctness of other instances of itselves, thereby allowing large computational effort to be incrementally verified. For example, multiple transactions from a given party can be bundled together and proven only once, thereby drastically speeding up the throughput of the network. Plookup is the idea that you can perform ‘batched proofs’, an example of a common use case is a “batched range proof”, where one wishes to check that the values of multiple transactions are in a given range.
User-Interfacing
While the majority of our previous periodicals have been focused on core Dusk blockchain developments and what has been happening within the blockchain development team, we have not spoken much on the other development teams here at Dusk. So let’s remedy that by taking a look at what the app development team has been up to for the past 6 months!
Application development at Dusk follows an agile process, servicing the needs of the blockchain user via a number of graphical user interfaces (GUI). The app team consists of highly experienced programmers, testers and designers; working together to build a consistent and unified user experience (UX) across all Dusk products. The team has been quietly constructing a design system and building components to facilitate direct user interaction with the Dusk blockchain. The design system distills our brand identity, values and best practises into a single source of truth for the realisation of a Dusk product. The app team adopted Atomic Design for their component management methodology and have created technical and functional documentation describing the practical and philosophical guidance for developing GUIs and crafting UX at Dusk.
Aside from building the tools and supporting material for developers, the team is also, unsurprisingly, developing apps! Currently we have a few apps in active development, let’s break them down…
Desktop Wallet
Using the aforementioned tools and documentation, the app team are at an advanced stage of development with the desktop wallet app. This desktop wallet is a direct descendent of the command line interface (CLI) wallet that we built for early interactions with Testnet. The CLI wallet is sufficient enough for advanced users not requiring a GUI, however, the desktop wallet provides an intuitive UX for everybody to enjoy. Recently the team added BIP-39 mnemonic phrase support, allowing for simple backup and restore functionality. This addition to the wallet's features marks the end of the minimal viable product feature set. Subsequently the desktop wallet is now undergoing testing, which includes security testing. We are also engaging with an external security testing team, so we can be extremely confident in the wallet’s integrity for our user’s peace of mind. The wallet progresses towards a release candidate, but will likely not be released until fully tested with Mainnet.
Dusk Labs
Born out of quite recent conversations about the app team’s output and sharing this with the wider community, we have begun working on a web app to serve as a central point of distribution on all technologies that we are currently experimenting with, and want end users to experience first-hand before they are included in our stable repositories. Dusk labs will become a hub for our most eager users who want to know what’s going on at the bleeding edge of Dusk Network! Any early access products will be available for download via Labs and anything that is not available for download will certainly be discussed and updated on the Labs website.
Dusk UI Kit
We have created a reusable component library as part of our design system, in previous updates we’ve mentioned this before: the Dusk UI Kit. The UI Kit is available as a pattern library. A pattern library provides a central point for developers, designers, marketers and product owners to work with when storyboarding new products and ultimately implementing them. We have implemented our UI Kit in JavaScript and have adopted Svelte for building out our web components. The UI Kit is already stable and being used across all Dusk GUIs. More recently, the team has been running accessibility tests. Accessibility and inclusion is of primary importance to us. We strive to ensure that all our products cater for our disabled user’s needs without degraded experience. We’re pushing towards having a perfect WCAG 2.0 score at the UI Kit level, ensuring all our products have the best advantage for disabled users (for example color vision deficiency) right out of the box.
Dusk Explorer
Using our UI Kit, we have been able to rapidly build a blockchain explorer for Dusk. The explorer will provide search and direct navigation to the publicly available data on the Dusk Network blockchain. Common features such as searching for transactions and blocks will be supported, enabling the user to verify that their transactions have been recorded on the blockchain. Keep an eye out for the explorer, as this will be available via Labs in the near future!
Design System
Below we’ve included a screenshot from our Figma design management system to give you a better idea of what some of the Dusk UI components look like.
Monitoring
We’ve made modifications to Dusk Network so it can handle JSON log outputs. These logs are processed by Filebeat, which converts the JSON logs into objects, and sends it to Logstash. Logstash then crunches the data and injects it into Elasticsearch. Together, Elasticsearch, Logstash and Kibana are called ELK. We use this to power a Kibana dashboard so we can search the logs and present the results in nice dashboards. This effort has improved our monitoring systems, so now it’s even easier to spot irregularities.
Community
Another thing we value is engagement with our community. Therefore we are exploring the options of an independent forum for technical discussions. It will take a few months before we will be able to include this on our website. At the same time, we’re working on extensive developer documentation through a knowledge-base tool called GitBook. It’s progressing nicely and will enable anyone to get detailed insights of our tech stack.
We are highly committed to actively contribute to the education of blockchain technology in the financial sector. Together with 2Tokens and renowned partners we are issuing a zero-knowledge compliant utility token for Dutch ecosystem.
In the demo department we are excited about the test results of our structured Kadcast P2P networking protocol, as it proves to be more stable and reliable than the unstructured Gossip protocol (used by most well-known blockchains). In addition, Kadcast delivers twice the performance (x2 speed of propagation).
List of demos
- Kadcast vs Gossip
- Smart contracts: Rust Cake!
- Zero-Knowledge Plonk Demo 2
- Zero-Knowledge Plonk Demo
- Dusk Technical Framework - overview
- Genesis Contract: Transfer Contract
- Genesis Contract: Fee Contract
- Genesis Contract: Staking Contract
About Dusk Network
Dusk Network is an open-source and privacy-oriented blockchain based on years of academic research. You can use Dusk Network to create smart contracts that control digital assets and securities.