{"id":18206270,"url":"https://github.com/dusk-network/rusk","last_synced_at":"2026-01-07T14:16:39.174Z","repository":{"id":37096126,"uuid":"239517556","full_name":"dusk-network/rusk","owner":"dusk-network","description":"The reference Dusk platform implementation and tools","archived":false,"fork":false,"pushed_at":"2025-05-13T19:51:10.000Z","size":48625,"stargazers_count":193,"open_issues_count":307,"forks_count":66,"subscribers_count":18,"default_branch":"master","last_synced_at":"2025-05-13T21:00:00.806Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dusk-network.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-02-10T13:24:17.000Z","updated_at":"2025-05-12T14:45:16.000Z","dependencies_parsed_at":"2024-01-22T12:32:12.643Z","dependency_job_id":"8c267056-8b2e-4f18-bf25-d67a4b025c4e","html_url":"https://github.com/dusk-network/rusk","commit_stats":{"total_commits":5121,"total_committers":32,"mean_commits":160.03125,"dds":0.7422378441710603,"last_synced_commit":"5f3cffcae374d4a33d5f381d19e1a70ff5b77b78"},"previous_names":[],"tags_count":168,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusk-network%2Frusk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusk-network%2Frusk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusk-network%2Frusk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dusk-network%2Frusk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dusk-network","download_url":"https://codeload.github.com/dusk-network/rusk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254036802,"owners_count":22003651,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-03T12:01:12.090Z","updated_at":"2026-01-07T14:16:39.168Z","avatar_url":"https://github.com/dusk-network.png","language":"Rust","readme":"\u003ch1 align=\"center\"\u003e\n\u003cimg height=\"90\" src=\"assets/rusk_logo_light.svg#gh-dark-mode-only\" alt=\"Rusk\"\u003e\n\u003cimg height=\"90\" src=\"assets/rusk_logo_dark.svg#gh-light-mode-only\" alt=\"Rusk\"\u003e\n\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  The official \u003cimg height=\"11\" src=\"assets/dusk_circular_light.svg#gh-dark-mode-only\"\u003e\u003cimg height=\"11\" src=\"assets/dusk_circular_dark.svg#gh-light-mode-only\"\u003e\u003ca href=\"https://dusk.network/\"\u003e Dusk\u003c/a\u003e protocol node client and smart contract platform.\n\u003c/p\u003e\n\n\u003cp align=center\u003e\n\u003ca href=\"https://github.com/dusk-network/rusk/actions/workflows/rusk_ci.yml\"\u003e\n\u003cimg src=\"https://github.com/dusk-network/rusk/actions/workflows/rusk_ci.yml/badge.svg\" alt=\"Rusk CI\"\u003e\u003c/a\u003e\n\u0026nbsp;\n\u003ca href=\"https://github.com/dusk-network/rusk/actions/workflows/explorer_ci.yml\"\u003e\n\u003cimg src=\"https://github.com/dusk-network/rusk/actions/workflows/explorer_ci.yml/badge.svg\" alt=\"explorer CI\"\u003e\u003c/a\u003e\n\u0026nbsp;\n\u003ca href=\"https://github.com/dusk-network/rusk/actions/workflows/webwallet_ci.yml\"\u003e\n\u003cimg src=\"https://github.com/dusk-network/rusk/actions/workflows/webwallet_ci.yml/badge.svg\" alt=\"web-wallet CI\"\u003e\u003c/a\u003e\n\u0026nbsp;\n\u003ca href=\"https://github.com/dusk-network/rusk/stargazers\"\u003e\n\u003cimg alt=\"GitHub Repo stars\" src=\"https://img.shields.io/github/stars/dusk-network/rusk?style=social\"\u003e\u003c/a\u003e\n\u0026nbsp;\n\u003ca href=\"https://discord.gg/dusk-official\"\u003e\n\u003cimg src=\"https://img.shields.io/discord/847466263064346624?label=discord\u0026style=flat-square\u0026color=5a66f6\" alt=\"Join Discord\"\u003e\u003c/a\u003e\n\u0026nbsp;\n\u003ca href=\"https://x.com/DuskFoundation/\"\u003e\n\u003cimg alt=\"X (formerly Twitter) Follow\" src=\"https://img.shields.io/twitter/follow/DuskFoundation\"\u003e\u003c/a\u003e\n\u0026nbsp;\n\u003ca href=\"https://docs.dusk.network\"\u003e\n\u003cimg alt=\"Static Badge\" src=\"https://img.shields.io/badge/read%20the%20docs-E2DFE9?style=flat-square\u0026logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI%2BCjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNODEuMjk4IDEuNzM3OEM4OC4yMjI5IDAuNDM3NzI0IDk1LjQyMjcgLTAuMTYyMzEyIDEwMi43OTggMC4wMzc3QzE1NC45OTYgMS40Mzc3OSAxOTcuODQ1IDQzLjc0MDQgMTk5LjkyIDk1LjkxODZDMjAyLjE3IDE1Mi45OTcgMTU2LjU3MSAyMDAgOTkuOTk3NiAyMDBDOTMuNjIyNyAyMDAgODcuMzcyOSAxOTkuNCA4MS4zMjMgMTk4LjI1QzM1LjAyNDIgMTg5LjQ5OSAwIDE0OC44MjIgMCA5OS45OTM5QzAgNTEuMTY1OCAzNC45OTkyIDEwLjQ4ODMgODEuMjk4IDEuNzM3OFpNMTAyLjc3MyAxNzYuNjc0QzEwMS43MjMgMTc4LjAyNCAxMDIuODIyIDE3OS45NzQgMTA0LjUyMiAxNzkuODc0QzE0Ni42MjEgMTc3LjUyNCAxNzkuOTk2IDE0Mi42NzEgMTc5Ljk5NiA5OS45OTM5QzE3OS45OTYgNTcuMzE2MiAxNDYuNTk2IDIyLjQ2NDEgMTA0LjQ5NyAyMC4xMTM5QzEwMi43OTggMjAuMDEzOSAxMDEuNzIzIDIxLjk2NDEgMTAyLjc3MyAyMy4zMTQxQzExOS4yNDcgNDQuNDY1NCAxMjkuMDQ3IDcxLjA5MjEgMTI5LjA0NyA5OS45OTM5QzEyOS4wNDcgMTI4Ljg5NiAxMTkuMjIyIDE1NS40OTcgMTAyLjc3MyAxNzYuNjc0WiIgZmlsbD0iIzEwMTAxMCIvPgo8L3N2Zz4K\"\u003e\u003c/a\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\u003e _Unstable_ : No guarantees can be made regarding the API stability, the\n\u003e project is in development.\n\n# 🖧 How to run a node\n\nThis README is for people who want to develop, test nodes locally, and\ncontribute to the Rusk codebase.\n\nFor more information on **running a node for main- or testnet**, see our\n[Node operator docs](https://docs.dusk.network/operator/overview/)\n\n# 📃 Table of Contents\n\n- [Repo Overview](#️-overview)\n- [Prerequisites](#-prerequisites)\n  - [Setup script](#setup-script)\n  - [Rust Installation](#rust-installation)\n- [Build and Tests](#️-build-and-tests)\n- [Run a local node for development](#-run-a-local-node-for-development)\n  - [Spin up local node](#spin-up-local-node)\n    - [Prepare modules](#prepare-modules)\n    - [Run a node](#run-a-node)\n    - [Run an archive node](#run-an-archive-node)\n    - [Run a prover node](#run-a-prover-node)\n- [Contracts compilation](#-contracts-compilation)\n- [Docker support](#-docker-support)\n\n## 🗺️ Overview\n\n#### Code projects\n\n| Name                                  | Description                                                                 |\n| :------------------------------------ | :-------------------------------------------------------------------------- |\n| 🌒 [rusk](/rusk/)                    | Entrypoint for the blockchain node                                          |\n| 🔗 [consensus](/consensus/)          | Implementation of Dusk's succinct attestation consensus                     |\n| 📜 [contracts](/contracts/)          | Dusk genesis contracts                                                      |\n| 🧩 [data-drivers](/data-drivers/)    | Tools to encode/decode contract arguments between RKYV and JS I/O           |\n| 🧬 [dusk-core](/core/)               | Core types used for interacting with Dusk and writing smart contracts       |\n| 🌐 [dusk-abi](/core/src/abi.rs)      | Dusk application binary interface to develop smart contracts (part of core) |\n| 🧭 [explorer](/explorer/)            | Dusk's blockchain explorer                                                  |\n| 📊 [node-data](/node-data/)          | Core datatypes for the blockchain node                                      |\n| ⚙️ [dusk-vm](/vm/)                   | The virtual machine to run Dusk smart contracts                             |\n| 🪪 [rusk-profile](/rusk-profile/)    | Utility to generate a genesis state based on a set profile                  |\n| 📨 [rusk-prover](/rusk-prover/)      | Service exposing functionality to remotely prove zero knowledge proofs      |\n| ⬇️ [rusk-recovery](/rusk-recovery/)  | Utility to recover the state of a chain                                     |\n| ⌨️ [rusk-wallet](/rusk-wallet/)      | Dusk CLI wallet                                                             |\n| 🔨 [w3sper.js](/w3sper.js/)          | Js SDK to integrate Dusk features into applications                         |\n| ⚙️ [wallet-core](/wallet-core/)      | WASM library providing core logic for Dusk wallet implementations           |\n| 📱 [web-wallet](/web-wallet/)        | Cross platform Dusk wallet                                                  |\n\n\n\n#### Infrastructure \u0026 Testing\n\n| Name            | Description                                                |\n| :-------------- | :--------------------------------------------------------- |\n| 📂 examples    | Example data used for local chain spawning and development |\n| 📄 scripts     | Utility scripts                                            |\n| 🔧 test-wallet | Wallet for testing against the specifications              |\n\n## 📝 Prerequisites\n\n- Rust 1.71 nightly or higher\n- GCC 13 or higher\n- Clang 16 or higher\n\n### Setup script\n\nWe provide a setup script in the `scripts` folder that can take care of\neverything.\n\n```bash\nbash scripts/dev-setup.sh\n```\n\n### Rust Installation\n\nRusk makes use of the nightly toolchain, make sure it is installed. Furthermore,\nto build the WASM contracts, `wasm-pack` is required.\n\nTo install and set the nightly toolchain, and install `wasm-pack`, run:\n\n```bash\nrustup toolchain install nightly\nrustup default nightly\ncargo install wasm-pack\n```\n\n## 🛠️ Build and Tests\n\nTo build `rusk` from source, make sure the prerequisites are met. Then you can\nsimply run the following command to compile everything:\n\n```bash\nmake\n```\n\nTo run tests:\n\n```bash\nmake test\n```\n\nThat will also compile all the genesis contracts and its associated circuits.\nSee also `make help` for all the available commands\n\n## 💻 Run a local node for development\n\n### Spin up local node\n\nRun a single full-node cluster with example state.\n\n#### Prepare modules:\n\n```bash\n# Generate the keys used by the circuits\n# Compile all the genesis contracts\n# Copy example consensus.keys\nmake prepare-dev\n```\n\n#### Run a Node\n\n```bash\n# Launch a local ephemeral node\nmake run-dev\n```\n\n#### Run an Archive node\n\n```bash\nmake run-dev-archive\n```\n\n#### Run a Prover Node\n\nThe node can be build as a prover only as follows:\n\n```bash\ncargo r --release --no-default-features --features prover -p dusk-rusk\n```\n\nThis prover node will be accessible on `https://localhost:8080`. Apps like the\n[rusk-wallet](https://github.com/dusk-network/rusk/tree/master/rusk-wallet) can\nbe connected to it for quicker and more private local proving.\n\n## 📜 Contracts compilation\n\nCompile all the genesis contracts without running the server:\n\n```bash\nmake contracts\n```\n\nCompile a specific genesis contract:\n\n```bash\n# generate the wasm for `transfer` contract\nmake wasm for=transfer\n```\n\n## 🐳 Docker support\n\n### Local Ephemeral Node\n\nIt's also possible to run a local ephemeral node with Docker.\n\nTo build the Docker image with archive:\n\n```bash\ndocker build -f Dockerfile.ephemeral -t rusk .\n```\n\nTo build the Docker image **without** archive:\n\n```bash\ndocker build -t -f Dockerfile.ephemeral rusk --build-arg CARGO_FEATURES=\"\" .\n```\n\nTo run Rusk inside a Docker container:\n\n```bash\ndocker run -p 9000:9000/udp -p 8080:8080/tcp rusk\n```\n\nPort 9000 is used for Kadcast, port 8080 for the HTTP and GraphQL APIs.\n\n### Persistent Node\n\nTo build the docker image for a provisioner\n```bash\ndocker build -f Dockerfile.persistent -t rusk --build-arg NODE_TYPE=provisioner .\n```\n\nTo build for an archiver or prover instead, build with NODE_TYPE=archive or NODE_TYPE=prover,\nrespectively.\n\nTo run:\n\n```bash\ndocker run -it \\\n  -v /path/to/consensus.keys:/opt/dusk/conf/consensus.keys \\\n  -v /path/to/rusk/profile:/opt/dusk/rusk \\\n  -e NETWORK=\u003cmainnet|testnet\u003e \\\n  -e DUSK_CONSENSUS_KEYS_PASS=\u003cconsensus-keys-password\u003e \\\n  -p 9000:9000/udp \\\n  -p 8080:8080/tcp \\\n  rusk\n```\n\n#### Customizing Configuration\n\nThe configuration used for rusk is based on the template file at `https://raw.githubusercontent.com/dusk-network/node-installer/ac1dd78eb31be4dba1c9c0986f6d6a06b5bd4fcc/conf/mainnet.toml` for mainnet and `https://raw.githubusercontent.com/dusk-network/node-installer/ac1dd78eb31be4dba1c9c0986f6d6a06b5bd4fcc/conf/testnet.toml` for testnet.\nAs part of the node setup process when the container is started, the IP addresses used for listening in kadcast and, if \nconfigured, http will be detected and automatically configured.\n\nTo customize the configuration, the configuration template file can be copied and modified. The custom configuration template\nshould be mounted on `/opt/dusk/conf/rusk.template.toml`.\n\n```bash\ndocker run -it \\\n  -v /path/to/consensus.keys:/opt/dusk/conf/consensus.keys\n  -v /path/to/rusk/profile:/opt/dusk/rusk \\\n  -v /path/to/rusk.modified-template.toml:/opt/dusk/conf/rusk.template.toml \\\n  -e NETWORK=\u003cmainnet|testnet|devnet\u003e \\\n  -e DUSK_CONSENSUS_KEYS_PASS=\u003cconsensus-keys-password\u003e \\\n  -p 9000:9000/udp \\\n  -p 8080:8080/tcp \\\n  rusk\n```\n\n##### IP Addresses\n\nWhen using a custom configuration file, properties that use IP addresses should be set to 'N/A'. For example, if\nyou want HTTP to be configured:\n\n```toml\n[http]\nlisten_address = 'N/A'\n```\n\nThis entry should be present in the template configuration file. When the node is starting, the address to be used\nwill be detected and this configuration will be set to listen at port 8080.\n\nLikewise, the `kadcast.public_address` and `kadcast.listen_address` properties in the configuration file should be set\nto 'N/A'. During node startup, they will be detected and set to use port 9000.\n\n## License\n\nThe Rusk software is licensed under the\n[Mozilla Public License Version 2.0](./LICENSE).\n","funding_links":[],"categories":["Applications"],"sub_categories":["Blockchain"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdusk-network%2Frusk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdusk-network%2Frusk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdusk-network%2Frusk/lists"}