Stealth Transfers
The usual approach of the above protocol is to deposit a box to the pool, perform many mixes and then withdraw from the pool.
This allows us to distinguish mix transactions from ordinary “transfer of value” transactions.
However, we can use “sigma Or” to hide transfer of value transactions within mix transactions.
This can be done by joining the zero-knowledge clause with the owner
clause in the mix
val validW = proveDHTuple(h, w, hOut1, wOut1) ||
proveDHTuple(h, w, hOut2, wOut2) ||
owner
This allows the owner to also create a mix-like transaction that is actually a transfer of value.
After this change, there is no particular need to withdraw from the pool, except in unusual use-cases.
We call this technique of hiding transfer of value within mix transactions as Stealth Transfers