A lightweight web wallet for Zcash

Applicant background

Elliot Blanchard is a full stack web developer. He recently launched Zdash.info, a live analytics dashboard for Zcash ecosystem data. He also created Foodbanks.nyc, the first mobile friendly tool to help New Yorkers impacted by the pandemic find food assistance. Elliot will be acting as the team treasurer for the project.

Fireice is a freelance C++ developer. He has experience writing miners for Monero and other cryptonote coins, as well as implementing a webwallet for Ryo currency. In Zcash he is helping out with running Telegram and Reddit communities.

Motivation and overview

A lightweight web wallet for the Zcash ecosystem will provide a simple and intuitive way to make fully shielded transactions - without needing to install an app. We propose a limited approach that minimizes blockchain data requirements and helps to keep local storage and processing requirements low. Encrypted local stores will keep outputs and keys secure - and are never sent to a remote server. This makes the project perfect for low value / high frequency transactions such as receiving mining payouts, sending and receiving tips, and more.

Technical approach

React Frontend

The frontend will be built in React. React is a modern framework that allows for a responsive, full featured user experience. React is extensible, allowing for easy updates and enhancements in the future. Styling will leverage React Bootstrap to avoid cumbersome dependencies like jQuery - React Bootstrap is a set of accessible-by-default components, improving on the older Bootstrap library. These frameworks allow for a UI that works seamlessly across desktop, tablet, and mobile devices.

In addition to the user experience, the frontend will also encrypt wallet data and save it to secure local browser storage.

WASM / C++ Engine

A WASM (WebAssembly) engine will be used to ensure high performance in the browser while also enabling easy communication with the frontend. The WASM engine will handle two primary tasks:

On the Rx side, the engine will receive block data from the frontend, scan this data to find outputs addressed to the user’s wallet, then forward those outputs back to the frontend for local storage in the wallet data file.

On the Tx side, the WASM engine will take known outputs and generate a signed transaction, thus spending them. This transaction will be then broadcast via our lightwalletd proxy

Our limited approach to wallet use cases allow us to minimize blockchain data requirements while also ensuring reasonable resource usage on client devices.

In general WASM is fairly close in performance to native code, so any devices able to run lightwalletd are likely to be able to run the webwallet. We will additionally write performance tests to have well defined performance limits.

Express lightwalletd proxy (Translation Server)

A lightweight proxy server will mediate communications between the client browser and the lightwalletd backend service, translating binary format RPC calls to JSON.

Execution risks / Downsides

Our web wallet shares many of the same risks as other similar wallet initiatives. These risks fall into three main categories.

Despite the efficiency inherent in using a WASM engine, complex transactions will still be constructed locally. This can lead to slow performance for especially complex transactions involving many inputs and outputs on mobile devices and other processing limited clients.

Even though we will be encrypting all local storage, any attacker that gains access to and control of the client device - again, likely a mobile device - will be able to compromise the local data given enough time and resources.

Finally, ongoing operations, costs, infrastructure, and maintenance could become a complicating factor depending on the scale of user adoption.

Evaluation plan

The web wallet will be available online - no need for app store approval or a binary to download and install.

Tasks and schedule

  • Express Proxy: 1 Month
  • React Frontend: 2 Months
  • WASM Engine: 3 Months

Budget and justification

We propose a rate of $15,000 USD per man month as a framework. For the six man months outlined above, the base budget would be $90,000 USD

In addition, we include 100 hours of $100/hr consulting fees to compensate ECC and ZF members who assist the team with technical guidance during the project for a total of $10,000 USD

Finally, we want to include $500 USD for development hosting and infrastructure.

In total:

  • $90,000 USD base development
  • $10,000 USD consulting fees for ECC / ZC member assistance
  • $500 USD hosting + infrastructure
  • $100,500 total

Campaign

Started
a day ago
Requested Funding
$100,500
Open for Community Donations
Proposal was canceled