Light Protocol

💡 Light Protocol is a privacy infrastructure for Solana. The “Light Cash” app allows you to make private transactions and protect your identity.

The Challenge

The initial “Light Cash” app was based on Tornado Cash for Ethereum. Users deposit tokens from one wallet into a shared pool, where their money is essentially “mixed” with other users’. Later, they withdraw their money to a different wallet, essentially breaking the chain of transactions and making it much harder to trace their identity.

This is a relatively simple model on the surface but posed a number of UX challenges.

Our goal was to make this as user-friendly as possible.

The Process

Tornado Cash is the main privacy protocol on Ethereum, and has since expanded to encompass several other EVMs. It has also been forked by other teams e.g.: Sherpa Cash on Avalanche.

To begin with, I used Tornado to review the baseline experience.

I also tested it with five other users to understand key pain points.

My key takeaways on Tornado:

  • Cold, futuristic UI

  • No instructions (people have no idea what to do when they land on the page)

  • “Statistics panel” unclear

  • Technical language

This gave me a number of key areas to focus on improving, namely

  • Friendlier UI

  • Add clear instructions

  • Turn statistics into something useful

  • Employ UX writing standards to improve the text

The “Statistics” panel is very unclear to new users, but is actually a key part of the whole app. Privacy is achieved by depositing money in fixed amounts, e.g. 1, 10, 100, 1000. Other users do the same. You are then given a deposit note that you can use to claim back the amount of money to a different wallet. The longer you wait, and the more users who have deposited in the meantime, the more anonymous you will be. In this way, your money is mixed with other users’ and it becomes much harder to link deposits and withdrawals.

Version 1

  • I added an instruction panel at the top of the page, clearly labelled “how to use”

  • Statistics now called “Privacy”

  • A privacy level shown based on number of equal deposits

I thought a “privacy level” would be a cool thing to show as it turns something abstract (no. of equal deposits) into something instantly recognizable and useful. Levels could be set for poor, medium, good etc and this could be displayed as red, yellow, green + suitable emoji.

Here are the variations of the Figma component:

NB - for the defi nerds out there, the privacy level is actually more important on the withdraw side, not the deposit side. It is possible to achieve good security simply by waiting longer for more users to deposit. This was made clearer in a later iteration.

Version 2: lo-fi protoype

Version 3: simplifying the process

  • Simplified as much as possible

  • Instructions aligned with the deposit/withdraw widget

  • Privacy information included in the same widget

These changes made it much easier for users to connect the data about equal deposits with the main action.

The Outcome

The following video shows a mid-fidelity prototype of the whole user flow.

I tried to keep all user actions within the panel itself, with no additional pop-ups to distract the user. This also meant we could keep the instructions visible at all times.

Final Thoughts

Light Protocol have since expanded their offering to an SDK, and have also updated the way their privacy action works. As a result their UI has changed slightly from the work on this page, although much of the branding stayed the same.

Even though the protocol has evolved, I think I simplified a complex project successfully, and came up with some new innovations in the private transaction space.

The experience proved invaluable for later work I did on Whirlpool Cash - a forthcoming multi-chain privacy layer as part of Composable’s tech stack. One day, I hope to add that case study as well.

Light Cash was also the first Solana project I worked on, so it was cool to play with a new network.

© 2022 Jon Crabb