MGP 9.1: US$20,000 for BlockX to build a web UI for the Hopper mixer

The ask

The team behind the Argent Wallet have developed a noncustodial Ethereum mixer named Hopper. This proposal seeks funding to grant the BlockX team US $20,000 (72 shares) to develop a web UI for Hopper.

Background

A mixer is a general term for a mechanism which breaks traceability between a sending address and destination address. Mixers are important as Ethereum transactions are public by default and susceptible to chain-analysis. This reduces users’ privacy.

Some mixers, like ETH-Mixer, are custodial, which means that they can spy on users, be shut down, or steal users’ funds. Others, which are under active development, are noncustodial, which means that they allow users to retain full control over their funds while providing privacy via cryptographic techniques.

There currently are two active efforts underway to develop a noncustodial mixer: The Hopper mixer and the Semaphore mixer.

The Hopper mixer contracts are already live on a testnet and have a working iOS user interface. Unfortunately, they do not support desktop browsers. This reduces the number of potential users and, in turn, its anonymity set.

The Semaphore mixer is still under development, and aims to deliver a web UI, smart contracts, and zk-SNARK circuits. The Semaphore team views the Hopper mixer as complementary and they hope to work together to benchmark both approaches, enhance research and development, and ideally converge on a single mixer.

As such, a web UI for Hopper is the lowest-hanging fruit. In the immediate term, it is the most cost-effective way to enhance privacy for the largest number of users in the shortest amount of time.

The selection process

After Vitalik published a technical proposal for a mixer in May 2019,  Ameen put out a call for candidates on social media for developers to be funded to build it. He subsequently got in touch with Wei Jie, who was already working on the Semaphore mixer. They interviewed 7 teams or individuals to understand their technical skills and time availability. They narrowed the field down to two teams, gave them a scope of work, and asked for time and cost estimates. Finally, they compared the quotes and chose BlockX Labs.

Qualifications

BlockX Labs is a Toronto, Canada based blockchain development shop with expertise in pushing technology and product boundaries. They have deployed over a dozen of applications to production for our clients throughout the globe. Below are some of the projects they have  deployed in just the last 12 months:

For this project, Jesse Abramowitz (blockchain developer) will be the main developer and Kush Patel (CTO) will oversee the technical architecture. They will be supported by other blockchain developers from BlockX for brainstorming, solutioning, and debugging of the project.

Share allocation

BlockX Labs’ ETH address to receive funds: 0x3274e22d86cc21778df15836833e147b1894d3e4

Scope of Work

Goals
Anyone with a modern desktop browser (e.g. Chrome 75) and a web3 wallet (MetaMask and WalletConnect) should be able to use a web interface to interact with the Hopper contracts already deployed on mainnet to mix their ETH.
This UI should be static so there’s no need for a backend server. Wei Jie (me) is working on a web UI for the Semaphore-based mixer, and we encourage as much code reuse as possible.

Subgoals (the ultimate goal broken down into parts)
  1. Deploy the Hopper contracts on a testnet and use this web UI to mix testnet ETH.
  1. To integrate this the JS prover which Haarold develops for the Hopper zk-SNARKS.
  1. The JS prover should be able to generate withdrawal proofs to let the user withdraw their funds into the destination address. Collaborate with Haarold on this as they’re the point-person for this component.
  1. Basic unit tests and integration tests of the prover.
  1. Documentation and source code
  1. Anyone running a modern version of Linux (e.g. the latest Ubuntu LTS) should be able to copy and paste up to 5 commands from a README or documentation file to build, run, and deploy the UI. See this README for an example of succinct but complete instructions for developers.
  1. The full source code of everything developed.
  1. A document with step-by-step instructions on how to use the web UI. Assume that the reader already owns ETH and knows how to use MetaMask to make transactions.
  1. Make changes to the web UI which WJ is working on for Semaphore as Hopper requires some custom UI work. WJ’s web UI should include the following and be ready by 12 July:
  1. Basic web3 wallet and network detection
  1. A page to deposit ETH and specify a destination address.
  1. A withdrawal page where the user sees a countdown timer in the UI to schedule withdrawals shortly after midnight UTC. So if the user deposits at 3pm UTC on 1 Jan, it will wait for 9 hours, plus 0-15 minutes, to withdraw the funds. The user has to keep the tab open so that the UI can automatically perform the withdrawal at midnight.