Salad: 2020 Development Update

Learn how Enigma is expanding upon and improving our transactional privacy solutions for Ethereum!

As identity, financial applications, payments and prediction markets converge and scale, privacy is going to be a key concern in 2020 and beyond. Transactional privacy is already making headlines: it was recently reported that Binance had suspended a user who sent funds directly from Binance to Wasabi Wallet, a bitcoin mixing application. Currently, popular exchanges are in the best position to understand the overall shape of user behavior, while simultaneously obscuring that information from external observers.

This raises some important questions:

Where will Binance and regulators draw the line, e.g. what types of apps can users interact with, and how many transactions will they track?

Will mixers achieve enough mainstream use that regulators seek other methods for determining compliance?

It’s a complex challenge. On the one hand, despite pseudonymous addresses, blockchain transactions are public. This gives regulators and other observers incredible amounts of data, which can be invaluable to their work. On the other hand, we simply cannot (and should not) expect users to live and work in a world where purchases, finances, and application behavior is transparent to all. As decentralized finance (DeFi) gains wider adoption, the privacy problem is only getting worse for users.

2020 promises to be an interesting year for Enigma in particular. Salad, our flagship non-custodial mixing service, has been built and is already in testing. Unlike Zero Knowledge Proof-based mixers that require two user interactions, Salad features single-interaction mixes with a low cost. Since we released Salad in August, we have been getting great feedback about this UX advantage. We’ve been hard at work, and we have a few important updates. Read on!

Technical Updates

Wallet Integrations

We think enabling users to mix from within wallets and applications will be crucial for encouraging participation and improving the anonymity set, and will set the stage for future usability improvements (see Salad V1).

We’re almost finished with a native integration for My Ether Wallet. This means MEW users will be able to access a Salad UI from within their wallet, without needing to visit an external site. Come to our Community Call on Wednesday, January 22nd, at 10AM ET / 3PM UTC for a preview!

@levackt hard at work on our MEW integration!

Internal testing

Salad is a major point of focus for Enigma because of its potential impact for Ethereum applications. Our engineering team is working towards greater and greater uptime on our testnet with Salad running and executing transactions. This also means we’re getting into edge cases and resolving issues across all Salad components. See our December 2019 development update for more details on how Salad is involved in network testing.

Survey and UX

We believe good wallet integrations will be crucial for mass adoption of mixing services. We’re kicking this off with some user research, as well as opening issues with major wallets describing the usability requirements we’ve already discovered. Interested in helping out? Participate in our survey, and check out the issue we’ve opened with Metamask Snaps.

Future Features

In addition to the above, we have some priorities for future features and changes we would like to introduce. The most salient of these are:

Advanced mixes

We are hoping to improve the effectiveness of a mix with Salad by modifying the mix algorithm. There are a few ways to do this, such as delaying a deposit’s participation in a deal for a variable amount of time, or having the same deposit participate in multiple, consequent mixes. This is still in the research stage for us.

Variable Size Mix

Right now, all ethereum-based mixers require users to deposit a fixed amount. This means users often have to mix more or less than they like, and can also mean liquidity is split across different mixing contracts that have different deposit sizes. It can also result in a large number of recipient addresses. For example, if I can only mix 0.1 ETH at a time and I want to mix 0.8 ETH, I will end up with 8 new addresses to manage. This is a big usability problem for making payments later. We’re currently exploring different approaches for enabling variable size mixes.

Liquidity

Participation is key to establishing a good anonymity set. We’re looking into what methods will be most effective for bootstrapping anonymity without predictable behavior that can be easily analyzed and make mixes less anonymous. We’re also looking into methods for alerting users if a mix had a low participation rate, and suggesting that they mix again.

Token mixing

Currently, Salad and other mixers only support mixing Ethereum. However, based on customer input, we are formulating an approach for supporting token mixes as well.

UX and Wallets

In addition to the above features, we are working with wallets to find and implement solutions to common UX problems. Essentially, this boils down to one simple problem: almost every time you mix, you end up with more addresses than you started out with. Check out our issue on Metamask Snaps for a more in-depth discussion.

Address Generation

Right now, it’s not that big of a problem to create a new address every time you want to mix 1 ETH or 0.1 ETH. But, if we want to mix 0.5 ETH, now we have to create 5 addresses and participate in 5 transactions. If a mixing service is able to implement variable size mixes, like Wasabi, the user may need to generate many addresses, not all of which will be used. We think it will be important for wallets to manage the creation of new addresses controlled by the user without requiring manual actions by the user.

Send from multiple addresses

After a mix, you could have 3 wallets with 0.1 ETH instead of one wallet with 0.3 ETH. Now say you need to pay 0.27 for a Gods Unchained card. What’s the best way to make sure these addresses contain a usable amount of ETH? Is there a way we can reduce the cost so it doesn’t require 3+ transactions (without linking every recipient address the user has?)

Representing mixed and non-mixed tokens

Should we have a visual abstraction that enables users to easily see which tokens have been mixed and have not been used since (and so are “unlinked)? Should we be able visually combine all “unlinked” mixed tokens so users can see their assets at a glance, instead of across many addresses with small amounts of ETH?