Dusk built two separate privacy engines instead of fixing one
Expected Dusk to have one core privacy system that everything runs through. It has two, and they don't share the same machinery.
Zedger runs on DuskVM — the native Rust/WASM layer — using a UTXO-based, output-driven privacy model built purely on zero-knowledge proofs. Hedger runs on DuskEVM — the Solidity-compatible layer — and uses a completely different combination: homomorphic encryption (ElGamal over elliptic curves) layered with ZK proofs, on an account-based model instead of UTXOs.
Same company, same goal of confidential transactions, two structurally different cryptographic systems built side by side instead of one shared engine covering both layers.
The reason isn't redundancy for its own sake. Zedger's UTXO model can offer full anonymity — genuinely hiding a transaction's origin, not just its contents. Hedger can't fully replicate that on an account-based EVM chain, because accounts are inherently traceable in a way UTXOs aren't. What Hedger gains instead is speed and compatibility: in-browser proof generation under two seconds, and drop-in support for standard Ethereum tooling like Hardhat and MetaMask, so developers don't have to relearn anything to build private apps.
So the trade-off got split across two systems rather than solved in one. Want maximum anonymity — use DuskVM. Want fast, EVM-native tooling with strong but not absolute privacy — use Hedger on DuskEVM. Neither one is strictly better; they're answering different questions about what "private" needs to mean for a given application.
Running two separate cryptographic stacks also means two separate attack surfaces to audit, not one. Is that a fair price for giving developers a real choice, or does splitting privacy into two systems just double the places something can go wrong?
#dusk $DUSK @Dusk $AVEE.ETF