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.
For more information on running a node, see our docs:
- Rust 1.71 nightly or higher
- GCC 13 or higher
- Clang 16 or higher
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, Rust, GCC and Clang are required. Once the dependencies are installed, 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.
Prerequisites:
# Generate the keys used by the circuits
make keys
# Compile all the genesis contracts
make wasm
# Copy example consensus.keys
mkdir -p ~/.dusk/rusk
cp examples/consensus.keys ~/.dusk/rusk/consensus.keys
Run a single full-node cluster with example state.
# Generate genesis state
cargo r --release -p rusk -- recovery-state --init examples/genesis.toml -o /tmp/example.state
# Launch a local ephemeral node
DUSK_CONSENSUS_KEYS_PASS=password cargo r --release -p rusk -- -s /tmp/example.state
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 wallet-cli can be connected to it for quicker and more private local proving.
To just compile all the genesis contracts without running the server:
make contracts
To generate a specific genesis contract:
# generate the wasm for `transfer` contract
make wasm for=transfer
See also make help
for all the available commands
It's also possible to run a local ephemeral node with Docker.
To build the Docker image:
docker build -t rusk .
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.