Cover photo

Product roast #5: Privacy Pools

Privacy Pools: I know my yield but not my privacy??

I land on the website.

post image

Cool, straight to the point.

The main actions are right there:

Shield - Withdraw - Send - Swap - Request

All pretty intuitive titles. "Request" I'm not sure but I can kind of imagine. I'll find out later.

Let's connect the wallet.


Privacy settings before I even connect? Love it

Before connecting, something catches my eye: the icons next to the Connect Wallet button.

post image

I click the globe.

post image

Ahhh, very nice, I can choose my own RPCs on each chain.

I thought this was something you picked at the wallet level. To be honest, I don't understand that much about RPCs, but I like that the option exists.

I can also route through Tor and Nym, which is pretty cool.

And the position is actually a great choice. The privacy controls sit next to the wallet button, before I even connect. I don't have to go hunting for a settings page after the fact.

Wait, didn't I just see this?

I don't configure anything for now and move to the other icon, the shield.

post image

And here I get a bit confused.

Isn't this the same option I saw in the previous modal?

"Send RPC calls through anon-rpc"?

Why is the same option showing up twice?

Two different icons next to each other make me assume two different features. When both lead to the same setting, I start wondering what difference I'm missing here!


Unlock, one more click

Okay, I close that. Let's connect the wallet for real.

Connect.

New modal: Unlock your account.

post image

Pretty clear what I have to do. Okay, one more click to unlock.


I'm at the Shield tab.

post image

I really like the recommended deposit amounts, especially the tooltip explaining why they matter for privacy.

I know why using common deposit amounts can help, but I'd guess a lot of users don't. A link explaining at a deeper level how deposit amounts affect anonymity wouldn't hurt.


The network switch shows up twice, and that's great

I notice I'm on Ethereum mainnet. I'd like to go to Base.

post image

I can change it from the button next to the wallet, and also is possible when I select the asset.

I love this double appearance. It subtle and doesn't feel redundant, it just puts the control wherever I already am in the flow.

That's the difference with the anon-rpc thing. Same idea, a control in two places, but here each entry point matches a moment where I actually want to switch. With anon-rpc, two different-looking doors led to the same room which makes me waste more clicks instead of saving them.


3.11% yield? Where does that come from?

post image

It says yield is 3.11%.

Wait. Where does it come from?? Do I have to activate it?? Does it add risk??

There's a tooltip, so I'm hoping it answers my questions.

"Aave yield position: accrues automatically into your balance"

Okey, super simple.

One line, and I know where the money comes from and that I don't have to do anything. Gud


Shield, register, easy

I'll shield.

Click.

Now it seems I need to register.

post image

It says it's a one-time thing. I register.

Easy.

My money is floating in the air

I think it's done?? But it says pending.

post image

"XXX USDC is pending approval. Spendable once approved."

It needs to be approved. By who? How long will it take? How can I track the process? Does it have steps? No one told me about this?

My money is floating in the air and I have no way to know if it's moving, if someone is checking it, or what is happening.

This is the most sensitive moment of the whole flow. The funds already left my wallet and I can't use them yet. Exactly when I need the most information, the product gives me only one word.

The approval step itself isn't a problem, but not knowing where I am inside it is. Even a tiny tracker would do a lot:

Submitted → Under review → Approved, spendable

Plus who reviews it and how long it usually takes. That's basic system status visibility, and with money involved it's also trust UX.


OMW what?? 4 deposits?

I go to Portfolio.

post image

My deposit is still pending, but there's a "View pool" button. Let's see.

Deposits: 4.

post image

WAIT WHAT??

Does that mean I'm hiding among just four deposits??

I came here for privacy, and suddenly I'm not even sure I'm getting any.

Maybe that number isn't actually my anonymity set? Maybe different assets share the same pool? Maybe swaps help increase the crowd I'm hiding in?

I honestly have no idea.

And that's the problem. I'm using a privacy product, but I can't figure out how much privacy I'm actually getting.


The anonymity set is the APY of a privacy product

I go to Explore to understand this better.

post image

First, it takes me a while to find the chain filter. Showing chain logos would make this much easier.

Now I'm looking at the different pools on Base, and the numbers aren't exactly reassuring. But I'm not even sure what I should be looking at.

post image

More deposits? More volume? More recent activity? Does swapping between assets increase my anonymity set?

How do I know if I'm actually private?

This is tricky because you want to encourage users to deposit into smaller pools so they can grow. But at the same time, users need to understand the privacy they're getting.

The same way an exchange shows me the quote before I swap, or a lending protocol shows me the APY before I deposit, a privacy protocol should help me understand my anonymity set before I shield.

I don't expect a magic number that guarantees anonymity. I expect enough information to make an informed decision.

Right now, I know exactly how much yield I'm earning. I have no idea how much privacy I'm getting!


Swap: my way out?

Wait, hold on. I see the Swap tab.

That means I can move into ETH and get out through there, right?

Let's try the swap.

post image

It says that if it fails, the output can go to a transparent wallet??

I don't get that, and it's not as well explained as everything else.

This is the one moment in the flow where something private could become public. It deserves the best explanation in the product, not the vaguest one.

What does "fails" mean here? How often does it happen? If it does, what exactly becomes visible?


A very clear alert. Thank you!

It seems my account got registered on Base but not on Ethereum. Same process I did before.

post image

Very clear alert! Arigato!

It tells me what's missing, why I need it for this swap, that my wallet will switch networks for one transaction, and that it brings me straight back.

That's contextual UX done right. The explanation appears exactly when it's relevant to what I'm doing.

How much is that in dollars?

post image

At the swap/bridge screen, let me know how much I'm receiving in dollars!

I don't know how many USD that amount of ETH is.

The bridge fee is already shown in dollars. Show me the output in dollars too.


Request: private, but signed by me?

Ok, now let's go to Request.

post image

"Get paid without an address."

Nice. I put in my request, and it seems I can add a name.

Then I see the request page.

post image

Wait...

It says it's private, but it also says it's signed by me?? With my wallet right there?

How does that work? I feel betrayed. If I had shared this with someone, they'd know my wallet.

The card I filled out promised "Get paid without an address". The page the payer sees shows an address.

If the wallet has to be there, tell me before I create the link, not after I've shared it.

Something like:

The payer will see: your display name and the wallet that signs this request

The payer won't see: your balance or your history

In a privacy product, the only thing worse than a data leak is users unknowingly exposing themselves because of bad UX.

Main findings

1. Privacy guarantees should be as visible as APY in a yield product or swap quotes on a DEX.

The yield is on the first screen. The size of the crowd I'm hiding in is buried in a pool page, and I only found it after I deposited.

In a privacy product, that's the main number.

If you're going to let me choose the asset, amount, and chain, give me the information I need to understand the privacy implications of each choice. Otherwise, make those decisions for me and optimize for privacy by default.

Either give users the information to make informed decisions, or don't make them decide at all.

2. Pending money needs a status, not a label

"Pending approval" is the scariest state in the product: the money left my wallet and I can't spend it.

Who approves it, how long it usually takes, and which step I'm in should all be visible right there.

3. Every privacy promise needs its fine print up front

The swap fallback to a transparent wallet and the request signed by my wallet are both moments where something private might become visible.

Those are moments that deserve the clearest copy in the app. Tell me what stays hidden and what doesn't, before I click.

4. The contextual help is already great, so make it consistent

The yield tooltip, the recommended amounts tooltip, the one-time register modal and the Ethereum registration alert all explain things at the exact moment I need them.

The gaps are small but stand out because of that: anon-rpc behind two icons, a chain filter without chain logos, a swap output without a dollar value.

Final take

Privacy Pools is really good.

The core flows are simple, and most of the time, the product explains things exactly when I need to understand them.

Building privacy products is particularly challenging because we're still figuring out what good privacy UX even looks like. Privacy Pools is definitely one of the projects leading the way and shaping what will eventually become the standard.

So while this roast is about Privacy Pools, most of my criticism applies to pretty much every privacy product out there.

The main weakness is the lack of visibility into the one thing I came here for: How private am I?

I saw my yield on the first screen. But I only discovered I was hiding among four deposits after I'd already shielded my funds, clicked through multiple screens, and moved my money out of my wallet.

An exchange shows me the quote. A lending app shows me the APY. A privacy app should show me the crowd.