Skip to content
This repository was archived by the owner on Jan 25, 2022. It is now read-only.
This repository was archived by the owner on Jan 25, 2022. It is now read-only.

Mixing-service specific wallet functionality #146

@ainsleys

Description

@ainsleys

We (Enigma) have been working on Salad, a decentralized mixing-service, as well as looking into the usability and functions of other mixers. In this process we have found significant usability issues that arise regardless of the technical approach to mixing (including centralized mixers, ad-hoc mixing behavior (such as sending to and from exchanges), zero-knowledge proof mixers and TEE-based mixers like Salad.)

These usability issues seem most suited to be addressed on the wallet side, as they mainly pertain to the generation of wallets, wallet key management, and the classification and observation of accounts. Fundamentally, when mixing tokens, users usually end up with more addresses than they started with.

Note:
These are all R&D questions for us. In some cases there may be existing EIP work that addresses them, or alternative solutions we’re not aware of. We hope to collaborate both with wallet creators such as Metamask as well as other mixing services on finding solutions that will benefit users the most. We hope this issue helps kick off a conversation. We know there are a lot of points in here, and happy to re-structure these as individual issues moving forward or however makes sense

Terminology
Receiving address / destination address: the address a user specifies that they want funds delivered to after mixing
Fresh address: a newly-generated address with no transaction history
Mixing service: Salad, Tornado Cash, Wasabi: a service that enables users to combine their tokens with other users and obtain a degree of transactional anonymity.
Self-mix: When a user mixes her own tokens and sends them to another address she controls. This is in contrast to a mix-and-send where a user mixes tokens as part of a normal transaction to another user or app.

Creating the right number of “fresh wallets”
Whether a service relies on fixed-amount mixing (i.e., denominations of 1 eth) or variable amount mixing (as we see with Wasabi), users will likely end up with more addresses to manage than they start with. For example, to mix 6 ETH, you may participate in 6 1-ETH mixes and then have 6 wallets, each with 1 ETH in them. Currently, the user needs to generate the required number of wallets herself, and use these destination addresses with the mixing application.

  • Is there a way to automate the process of generating the correct # of fresh wallets with derived keys for a desired mix amount?

Send from multiple
In this issue a user has successfully mixed his or her coins to fresh recipient addresses, but now has say 6-10 addresses with 0.1 ETH in them (users ideally use “fresh” addresses with no prior transactions). How can she make a payment without needing to send 10 transactions, which is burdensome on the user in cost and time? Is there a way to accomplish ‘send from multiple’ that is less expensive? Note: Re-linking addresses by using multiple in one payment also has privacy considerations that should be explored, but this UX issue will persist even if that can be mitigated.

  • How can users make a single payment that draws from multiple addresses?

  • Can a UI abstraction handle multiple transactions but abstract the process from the user (i.e., we accept the fees associated with multiple transactions, but at least the UX is similar to the effort involved in sending a single transaction).

Representing tokens in mixed addresses / account abstraction
This issue touches on what metaphor / abstraction is useful for users sending and receiving with accounts that have received funds from mixers.

  • It should be clear to the user which addresses have been deposited into via a mixing service after they “self-mix” their coins.
  • Is it also important to represent to users after they’ve used one of these wallets in a transaction that it is no longer necessarily anonymous?

Wireframes / Concepts

Here are some very early-stage figma wireframes we’ve been working with as we think through some of the usability issues. These are WIP, and explore two concepts:

  1. Self-mixing with a UI abstraction for “mixed” addresses. This flow (the longer diagram in the figma file) shows a user who is sending coins to a self-owned address. The concept of a “secret briefcase” is an abstraction that lets users send from and receive tokens to mixed addresses, without dealing with potentially hundreds of accounts.
  2. Mix-and-Send: a user who wants to mix tokens on their way to a recipient address, owned by another user or a dapp.

Other issues that came up as we worked with these concept wireframes:

  • In Mix-and-Send payment for goods or services, which address is authorized by this payment?
  • how can we communicate time-frame for mixes to users?
  • how can we communicate degree of anonymity to users? (Mix size)
  • how can we communicate constraints (i.e., fixed-amount send size?)
  • how can we communicate extra costs (i.e., the higher gas cost of sending from 4-5 accounts instead of 1)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions