The official Dusk protocol node client and smart contract platform.
Unstable : No guarantees can be made regarding the API stability, the project is in development.
This README is for people who want to develop, test nodes locally, and contribute to the Rusk codebase.
For more information on running a node for main- or testnet, see our Node operator docs
- Rust 1.71 nightly or higher
- GCC 13 or higher
- Clang 16 or higher
We provide a setup script in the scripts
folder that can take care of everything.
bash scripts/dev-setup.sh
Rusk makes use of the nightly toolchain, make sure it is installed. Furthermore, to build the WASM contracts, wasm-pack
is required.
To install and set the nightly toolchain, and install wasm-pack
, run:
rustup toolchain install nightly
rustup default nightly
cargo install wasm-pack
To build rusk
from source, make sure the prerequisites are met. Then you can simply run the following command to compile everything:
make
To run tests:
make test
That will also compile all the genesis contracts and its associated circuits. See also make help
for all the available commands
Run a single full-node cluster with example state.
# Generate the keys used by the circuits
# Compile all the genesis contracts
# Copy example consensus.keys
make prepare-dev
# Launch a local ephemeral node
make run-dev
make run-dev-archive
The node can be build as a prover only as follows:
cargo r --release --no-default-features --features prover -p rusk
This prover node will be accessible on https://localhost:8080
. Apps like the rusk-wallet can be connected to it for quicker and more private local proving.
Compile all the genesis contracts without running the server:
make contracts
Compile a specific genesis contract:
# generate the wasm for `transfer` contract
make wasm for=transfer
It's also possible to run a local ephemeral node with Docker.
To build the Docker image with archive:
docker build -t rusk .
To build the Docker image without archive:
docker build -t rusk --build-arg CARGO_FEATURES="" .
To run Rusk inside a Docker container:
docker run -p 9000:9000/udp -p 8080:8080/tcp rusk
Port 9000 is used for Kadcast, port 8080 for the HTTP and GraphQL APIs.
The Rusk software is licensed under the Mozilla Public License Version 2.0.