#dusk $DUSK @Dusk Dusk's confidentiality setup actually runs in two separate tracks. On DuskDS, the Phoenix model represents value as notes committed into a Merkle tree — spending a note doesn't point to which note is being spent. Instead, the sender publishes a nullifier and a zero-knowledge proof showing the spend is valid, ownership is real, and no value was created out of nothing, without revealing the underlying note. Alongside it, Moonlight runs as a transparent, account-based model on the same chain.

On DuskEVM, though, privacy comes from a completely different toolset — a module called Hedger, which combines ElGamal-based homomorphic encryption with zero-knowledge proofs, plus a hybrid UTXO/account structure. Here a user interacts with contracts through a standard EVM address, while a separate Hedger address handles encrypted balances, with compliance enforced through allowlisting.

These aren't two versions of the same idea. Phoenix is a note-based proof system; Hedger computes directly on encrypted balances, verified through zero-knowledge proofs. The likely reason for the split is that note-based privacy doesn't fit naturally into an account-based EVM structure, so a different approach was needed there.

Running two independent cryptographic privacy stacks in parallel means a larger attack surface and a heavier audit burden. It's also not clear how the privacy guarantee is preserved when value moves between the two layers.

Does maintaining two separate confidentiality engines multiply the audit burden proportionally, or does the shared reliance on zero-knowledge proofs mean the second engine's incremental cost is actually lower than it looks?