This is a really good question, and it goes to the heart of the funky multidimensional trade-off space here. Originally, the way we were thinking about it was just what you say in this quote — the staking positions can be transparent for accountability, but since the staking position comes from the Orchard pool, the staker’s identity and their other balances and transactions are private, so we get both accountability and privacy.
But, as we got further along in our prototyping of Crosslink, then at the most recent milestone 3 workshop we realized that this isn’t exactly right!
The reason why it isn’t exactly right is kind of nuanced/surprising to me. Imagine that bonding and unbonding is so fast and convenient that people can do it “on demand”. Whenever they receive ZEC they immediately stake it, and they just keep all of their ZEC in staking positions, and when they want to use any ZEC for anything they just unstake it. You can imagine that a sophisticated Zcash wallet could even do all this automatically without any user action at all.
The surprising facts are:
-
That individual who does that gets almost no effective privacy! Unbeknownst to them, the pattern of amounts and timings of their staking and unstaking reveals information. This revealed information is sufficient to link their future transactions to their past transactions, even though all of the transactions are in the Orchard pool.
-
If almost everyone did that, then even people who didn’t do that would have less privacy, because when almost everyone else reveals that information about their transactions, this narrows the anonymity set of those who don’t.
This is yet another example of the principle that “privacy comes from value at rest — not from value in motion”. Staking positions are value at rest, and they are public (for accountability).
Now fortunately it probably wouldn’t be that bad in practice. Plenty of people would just keep their ZEC unstaked (liquid) in the Orchard pool anyway, and some stakers would probably not strictly follow that “always stake everything, unstake-on-demand” pattern.
But, this was a wake-up call for us that the resulting information leakage can be surprising and that if we want to preserve Zcash’s brand as the strongest private money that we have to pay more attention to this trade-off.
That’s why we came up with the quantization parts of our initial tokenomics proposal: each staking position must be a power of 10 ZEC (1, 10, 100, 1000 ZEC etc), and all staking and unstaking actions have to occur on the same day as each other — every tenth day. This is an attempt to balance the accountability of the stakers and the finalizers with the privacy of the stakers.
A subtle but important part of this proposal is that in order to protect user privacy, it has to make it inconvenient or impossible to “unstake on demand”. Unstaking-on-demand leaks information about your actions in a way that difficult to understand but can reveal a lot more about you than you thought it would.
However, if you keep some ZEC liquid in the shielded pool (because you know that you won’t be able to unstake-on-demand), then you don’t need to try to think through those confusing consequences, you can just use Zcash in peace.
On a more general note, our strategy is very much iterative, not “one shot perfection”. We think it is okay to deploy Crosslink 1.0 as soon as possible, learn from how it works and how the users and investors use it, and then deploy an improved Crosslink 2.0 as soon as possible.
It’s okay, in my view, if Crosslink 1.0 has limitations and trade-offs in usability, financial appeal, and even in privacy, as long as the users have a reasonable mental model of what kind of privacy they are getting so that they don’t get burned and thus tarnish Zcash’s brand as the money with the best privacy.
Iterating is the best/only way to achieve a great end result. Notice that we at Shielded Labs didn’t even understand this issue until we reached Milestone 3 of our Roadmap! That’s because, for me at least, I learn a lot by iterating.