I went back through Dusk’s documentation last night, and the Phoenix section made me slow down.
At first, I thought it was simply another private UTXO design. The more I read, the more interesting the structure became. Phoenix uses notes inside a Merkle tree, while a spent note is represented by a nullifier rather than exposing which note was used.
The transaction itself is explicit: root, nullifiers, new_notes, deposit, data, gas_limit, gas_price, and a ZK proof. That last part is what caught...