Build on Dusk
Dusk provides two smart-contract paths:
- DuskVM executes Rust/WASM contracts directly on the Dusk L1.
- DuskEVM provides Solidity and Vyper execution with settlement and data availability through DuskDS.
As a builder, choose the path based on what your product needs and which tooling model you want:
- use DuskEVM when your application benefits from Solidity, EVM tooling, existing wallets, and Ethereum-compatible infrastructure.
- use DuskVM when your application should execute directly on the Dusk L1 using Rust/WASM, protocol contracts, Dusk transaction models, privacy, or zero-knowledge capabilities.
Choose your path
Section titled “Choose your path”Choose an interface
Section titled “Choose an interface”- EVM contract or dApp: use standard EVM wallets, JSON-RPC, and tools such as Foundry, Hardhat, viem, or ethers. The wallet signs; DuskEVM exposes Ethereum-compatible interfaces.
- Browser dApp on the Dusk L1: use Dusk Connect. The wallet extension owns the keys and asks the user to approve profile access and transactions.
- JavaScript client that talks directly to Rusk: use W3sper. Your application owns node connectivity and, for signing, profile storage and synchronized wallet state.
- Infrastructure, indexer, exchange, or non-JavaScript client: use the Rusk HTTP API and RUES. Your integration handles raw request encoding, version headers, subscriptions, and transaction state.
For most browser applications on the Dusk L1, use Dusk Connect. Use W3sper directly when there is no injected wallet or when you need lower-level node and wallet primitives.
When to use DuskEVM
Section titled “When to use DuskEVM”Use DuskEVM when your application is designed around the EVM ecosystem:
- tokenized asset applications
- DeFi protocols, AMMs, and lending
- applications that expect an EVM environment: tooling, libraries, wallets, and infrastructure
You get:
- Familiar languages and tooling (Solidity/Vyper, Hardhat/Foundry, etc.)
- DUSK as the native gas token
- Settlement and data availability from DuskDS
- A route toward confidential flows through Hedger where your application needs privacy
See: DuskEVM quickstart.
When to use DuskVM
Section titled “When to use DuskVM”DuskVM smart contracts are general-purpose contracts written in Rust and compiled to WASM. They execute directly on the Dusk L1.
Use this path when you need:
- protocol-level logic that executes directly on the Dusk L1
- direct interaction with Dusk transaction models
- specialized contracts that need Rust/WASM execution
- privacy or zero-knowledge capabilities that should live close to the base protocol
- application logic that benefits from Dusk L1 assets, transaction models, or execution primitives
Typical examples include:
- genesis or protocol contracts such as transfers and staking
- low-level infrastructure contracts
- applications that need direct access to DuskVM and L1 features
Compared with DuskEVM, DuskVM contracts require more familiarity with Dusk-specific tooling and architecture. The tradeoff is direct L1 execution rather than compatibility with the broader EVM ecosystem.
If that’s you, start with the DuskVM contract overview, then build the example in the quickstart.
Examples
Section titled “Examples”You can explore existing contracts and examples in the Dusk repos:
- Protocol genesis contracts in
contracts/genesis - Reusable DuskVM standards and reference contracts in
contracts/standards - The DuskVM contract framework and template in Forge
- DuskEVM examples in the DuskEVM quickstart