Nighthawk Wallet Design & Development Grant

Applicant background

Nighthawk Wallet maintains the native apps for Android & iOS platforms along with bug-fixes, user support and security patches.

Since last year’s ZF funding, Nighthawk has:

  • Maintained the Z-address native app for expanding the use of Shielded Transactions (based off ECC Wallet codebase)
  • Provide ongoing support for end-users with bug-fixes via regular releases
  • Added a proxy protected price API to fetch ZEC price without exposing the user’s balance on Android
  • Setup a responsible disclosure policy and handle one incident of fixing reported issue
  • Launched and maintained iOS version on App Store

With this grant, Nighthawk Wallet plans to:

  1. Expand the team & strengthen the underlying ECC codebase
  2. Ship regular updates including NU5 to end users via Nighthawk app on Android & iOS
  3. Improve usability via UX design & app tutorial/FAQs

Motivation and overview

Releasing native wallets on the top 2 mobile platforms makes Zcash available to the majority of smartphone owners around the world and paves the way for easier integration of ZEC usage via the Android & iOS platform APIs.

In addition to maintaining open source mobile wallets, Nighthawk Wallet team plans to contribute to upstream ECC apps & SDKs to help new developers using ECC code to benefit from the work that is funded via ZOMG. There are 50+ open issues on GitHub for iOS/Android wallets & SDKs which we plan to contribute to by working in collaboration with respective ECC developers.

Nighthawk roadmap for 2021 includes:

  1. Redesign the native Zcash wallet with new designs from ECC
  2. Add Payment URI support and Deep Links integration to improve ZEC usage on mobile
  3. Support NU5 release on mobile clients
  4. Publish Nighthawk Wallet on the F-Droid Store
  5. Secure cloud backup of seed words
  6. Document FAQs on the website & app
  7. Add New User tutorial
  8. Support language translations

Lightwalletd improvements:
9. Add in-app message to notify users of any known issues with the app or the network
10. Maintain ZEC/USD price endpoint, add several more currencies

Third-Party integrations:
11. Integrate Flexa SDK when the Flexa SDK is made available
12. Review and implement easy purchase of ZEC via cards & bank accounts

Good to have (with bandwidth)
13. Add Tor support for Android & iOS (preferably via Arti Rust based APIs)
14. Support Unified Addresses & UDAs working with ECC engineers
15. Finish the We accept Zcash project and launch it on the App Store to support businesses to accept Zcash as payment via iPads/iPhones.

Technical approach

  • Collaborate with ECC developers & design
  • Contribute to zcash upstream repos, review & implement new ECC designs & customize them as necessary for Nighthawk
  • Pull down merged changes to Nighthawk Wallet for release on App Store, Play Store & Fdroid
  • Follow up with releases with bug fixes, if required
  • Follow the strict no logging/tracking policy

Design approach

  • Focus on creating an easily understandable and intuitive app experience
  • Conduct competitor analysis and research studies to validate UX concepts and product direction
  • Implement ECC base level designs for NU5 features and updated workflows
  • Perform user studies to validate design decisions
  • Create new UI wireframes and update Nighthawk app

Deliverables

  • Ship Nighthawk Wallet on App Store, Play Store & Fdroid Store with regular updates.
  • All code & designs will be open-sourced with MIT license on GitHub.
  • Updates on nighthawkwallet.com following every Milestone on Zcash Forums.
Feature/Issue Impact Link
Auto-shielding (receive funds on T-addrs and send to Z-addrs) High WIP
ZIP-321 Add Payment URI support + Deep Link integration High zips/zip-0321.rst at master · zcash/zips · GitHub
ZIP-316 NU5 support + Unified Addresses High zips/zip-0316.rst at master · zcash/zips · GitHub
Publish Nighthawk Wallet on the F-Droid Store High Serve APK builds with releases · Issue #15 · nighthawk-apps/nighthawk-wallet-android · GitHub
New User onboarding & tutorial Medium New User Onboarding · Issue #30 · nighthawk-apps/nighthawk-wallet-android · GitHub
Optional backup of seed words Medium Optional backup of seed words · Issue #29 · nighthawk-apps/nighthawk-wallet-android · GitHub
Support language translations for top 10 languages Medium Add language translations · Issue #28 · nighthawk-apps/nighthawk-wallet-android · GitHub
Resolve 0 balance bug on Android High Integrate latest SDK version 1.3.0-* · Issue #27 · nighthawk-apps/nighthawk-wallet-android · GitHub
Add option to Rescan wallet to debug issues High Add "Rescan" option for critical error situations · Issue #223 · zcash/zcash-android-wallet · GitHub
View USD value of ZEC balance Medium Enhancement: View USD value of ZEC balance · Issue #231 · zcash/zcash-android-wallet · GitHub
Update Transaction Details Screen Medium Enhancement: Update confirmations in real time, automatically · Issue #239 · zcash/zcash-android-wallet · GitHub
Refactor Send Transaction flow on Android Medium Tech debt: Refactor SendFragment to be driven by the viewmodel · Issue #245 · zcash/zcash-android-wallet · GitHub
Accessibility fixes on iOS Medium [Accessibility] Home Screen layout broken on large fonts · Issue #252 · zcash/zcash-ios-wallet · GitHub
Add in-app message to notify users of any known issues with the app or the network Low Add in-app message to notify users of any known issues with the app or the network · Issue #31 · nighthawk-apps/nighthawk-wallet-android · GitHub
Integrate Flexa Spend SDK Medium Integrate Flexa Spend SDK · Issue #32 · nighthawk-apps/nighthawk-wallet-android · GitHub
Add exchange support Medium Add exchange support · Issue #33 · nighthawk-apps/nighthawk-wallet-android · GitHub
Finish & Publish “We Accept Zcash” on App Store High GitHub - zcash-hackworks/we-accept-zcash-ios: A Proof-of-Concept on how to build a Small iOS App that lets you accept Zcash as payment
UX Group Study High TBD
Redesign App Theme and elements Medium TBD

Execution risks

  • Balancing priorities between upstream work & feature development.
  • Delays due to unforeseen challenges during development.
  • iOS feature release will follow Android features as we use Android releases for validation.

Downsides

  • Regulations around cryptocurrency wallets in App Store/Play Store at a country level (China bans self-custody apps).
  • HR risks and complexity in ramping up of new developers to the Zcash eco-system.

What are the milestones?

  • Milestone 1: Hire experienced team, setup workflows, work on low-hanging fruits, issues & features, review updated designs.
  • Milestone 2: Ramp up contributions to upstream towards NU5 release, push forward on Nighthawk feature list.
  • Milestone 3: User Study & Design work begins & coding up majority of the work defined for the roadmap.

How will the work we fund support the Zcash mission—i.e. to bring financial privacy to everyone in the world?

  • By shipping high quality apps with a modern design to help build confidence in financial privacy and make it more accessible to a wider audience.

What are the most important things to execute on, to get to the baseline? What about to get to the best-case?

  • Help fix upstream SDK issues in ZcashLightClientKit + zcash-android-wallet-sdk and zcash-ios-wallet + zcash-android-wallet and support backward compatibility for Android with updates for Android 12.

Budget and justification

The 9 month budget funds 1 Designer & 2 Full Time Developers and several part time contributors.

  • $2,000 User Research & UX Study
  • $33,000 200hrs Design Consultation ($165/hr)
  • $12,430 200hrs Lightwalletd Backend API Development ($62.15/hr)
  • $293,800 2,000hrs Development, QA, HR ($146.9/hr includes part time & full time developers)
  • $10,000 in Consulting Fees for Zcash KT/support from ECC staff

Total: $351,230 (includes all software licenses, hardware, currency conversion & taxes)

5 Likes

Third party integration related feature request: Would be awesome to go from USD (bank account) to shielded Zcash in one go.

5 Likes

Out of the two exchange integrations we are reviewing (MoonPay & Transak) only MoonPay has support for Bank Transfers. Also note that exchange integrations will not be part of the app screens, but a separate flow requiring KYC.

I would keep third party integrations low priority for now. Keep wallet usability & improvement features highest priority. I understand that building Zcash mobile wallets is not as simple or straightforward (relatively) as Bitcoin or an Ethereum wallet. Everything else is good-to-have & probably wouldn’t matter for users.

If we can get the Nighthawk design & experience as close to Casa (Bitcoin) or Rainbow (ethereum) then that would be great.

3 Likes

I’m really looking forward to discussing this with everyone tonight at the ZOMG meeting.

Funding wallets is a priority for me, so I’m really happy to see ambitious proposals from wallet teams coming in.

Quick question: would this be payments to ECC? Or are you saying you’d get some consulting fees from ECC as part of this work?

(I think we’re technically not allowed to direct funds back to ECC or ZF, so I think this is a budget item we can’t fund, though I’m open to learning more and might just be being too nit-picky about it.)

I have other questions and feedback too, but I think it can wait until after I discuss with others.

Thanks @holmesworcester

Consulting Fees to ECC staff might seem like a grey area, but they are the real subject matter experts on all things Zcash. And some of the feature implementations for Nighthawk would require consulting with folks who know the ins and out of Zcash and working knowledge on limitations around mobile/privacy fronts.

The Nighthawk team has managed to get all the free help so far, but it doesn’t seem fair to work with experts for hours during off-work and weekends to resolve critical issues without compensation. Also note that this compensation could include non-ECC/ZF experts, but I wanted to put the most likely beneficiaries of the funds in exchange helping out with reaching feature/spec goals of a Zcash Community based project. I am open to any feedback around reservations around this topic.

2 Likes

The concept of the z2z only wallet is awesome. The app for wallet is still buggy. Sometimes it stuck on reconnecting and sometime shows incorrect amount of balance

Hey @aiyadt, we love this bold plan. Nighthawk wallet is an important piece of the Zcash ecosystem, and we’re very glad that you’re proactively moving it forward in a strategic way.

The overall plan sounds good. We’d like to see if there are metrics that we can track as your work carries on. Would you be open to doing a call live next week? @Shawn and @Souptacular may join as well.

I’ll send you a DM with my contact details.

2 Likes

Great to hear! Sure, let’s have a call next week to discuss tracking & reporting KPIs for this long term grant.

The Deliverables section is updated with the features and issues that are the primary targets as part of the grant application. Additionally, several Tech Debt and Refactor items need to be finished & ported from ECC repositories to Nighthawk and tested prior to Release, these issues can be found here for Android & iOS

Feature/Issue Impact Link
Auto-shielding (receive funds on T-addrs and send to Z-addrs) High WIP
ZIP-321 Add Payment URI support + Deep Link integration High zips/zip-0321.rst at master · zcash/zips · GitHub
ZIP-316 NU5 support + Unified Addresses High zips/zip-0316.rst at master · zcash/zips · GitHub
Publish Nighthawk Wallet on the F-Droid Store High Serve APK builds with releases · Issue #15 · nighthawk-apps/nighthawk-wallet-android · GitHub
New User onboarding & tutorial Medium New User Onboarding · Issue #30 · nighthawk-apps/nighthawk-wallet-android · GitHub
Optional backup of seed words Medium Optional backup of seed words · Issue #29 · nighthawk-apps/nighthawk-wallet-android · GitHub
Support language translations for top 10 languages Medium Add language translations · Issue #28 · nighthawk-apps/nighthawk-wallet-android · GitHub
Resolve 0 balance bug on Android High Integrate latest SDK version 1.3.0-* · Issue #27 · nighthawk-apps/nighthawk-wallet-android · GitHub
Add option to Rescan wallet to debug issues High Add "Rescan" option for critical error situations · Issue #223 · zcash/zcash-android-wallet · GitHub
View USD value of ZEC balance Medium Enhancement: View USD value of ZEC balance · Issue #231 · zcash/zcash-android-wallet · GitHub
Update Transaction Details Screen Medium Enhancement: Update confirmations in real time, automatically · Issue #239 · zcash/zcash-android-wallet · GitHub
Refactor Send Transaction flow on Android Medium Tech debt: Refactor SendFragment to be driven by the viewmodel · Issue #245 · zcash/zcash-android-wallet · GitHub
Accessibility fixes on iOS Medium [Accessibility] Home Screen layout broken on large fonts · Issue #252 · zcash/zcash-ios-wallet · GitHub
Add in-app message to notify users of any known issues with the app or the network Low Add in-app message to notify users of any known issues with the app or the network · Issue #31 · nighthawk-apps/nighthawk-wallet-android · GitHub
Integrate Flexa Spend SDK Medium Integrate Flexa Spend SDK · Issue #32 · nighthawk-apps/nighthawk-wallet-android · GitHub
Add exchange support Medium Add exchange support · Issue #33 · nighthawk-apps/nighthawk-wallet-android · GitHub
Finish & Publish “We Accept Zcash” on App Store High GitHub - zcash-hackworks/we-accept-zcash-ios: A Proof-of-Concept on how to build a Small iOS App that lets you accept Zcash as payment
UX Group Study High TBD
Redesign App Theme and elements Medium TBD
9 Likes

This is perfect. Thanks so much for working with us to refine the grant. We’re going to try to get future grants to the same level of quality and specificity.

We will do a final discussion at our upcoming regular Tuesday meeting, though I don’t expect any issues.

6 Likes

@aiyadt is doing an excellent job here :clap: I’m really looking forward to collaborating on this and working to improve the design and experience of the wallet to make financial privacy more accessible to everyone.

Apologies that I couldn’t join the initial call that was set up — I had a conflict with sleep as the meeting happened at 4am local time :sleeping:

4 Likes

Hi @aiyadt, I am very happy to let you know that the ZOMG has approved your grant. We are super excited about this. The call we had last week was illuminating and made the importance/urgency of the grant even more obvious to some of us.

Congrats, and please do keep us updated on this thread as you check off some of the items above! :slight_smile:

9 Likes

This sure is exciting news! :champagne: :clinking_glasses: :tada:

Thank you :pray:

5 Likes

Is securing the app with PIN/biometrics on the roadmap?

1 Like

The app has PIN/Biometrics authentication for sending a transaction and viewing the seed words. There does seem to be an added benefit of having app-level PIN/Biometrics security and not relying on the device level screen lock.

I’ll add it to the internal feature list. Thanks @covfefe

4 Likes

With the completion of Milestone 1 around the corner, I would like to share a link to the ongoing development status of Nighthawk Wallet https://nighthawkwallet.com/changelog/

The status of each deliverable will be updated on every release of the wallet and a history of the Changelog will be made available publicly.

Stay tuned for a follow-up post on Milestone 1 achievements & our plans for the next 3 months.

1 Like

If there’s a new (beta?) version for Android I’d like to try it.

The current version fails with ‘Scan Error’ when importing my test-wallet-from-hell’, its a very old wallet with many (many!) small txns and a nasty test.

1 Like

Sure, will keep you posted on the next Android update. And I’d very much like you to test your wallet with many many small txns against the next release.

1 Like

(moving conversation to Wallet specific thread)

Hey @mika, Contributors usually branch off from the master branch. You’ve linked a work-in-progress branch. If you feel adventurous, feel free build it per the build instructions at nighthawk-wallet-android/README.md at master · nighthawk-apps/nighthawk-wallet-android · GitHub

The public repository is to make available the Nighthawk Wallet codebase open source. Feel free to go through the Contributing Guidelines if you’d like to be involved, like many others who have contributed. nighthawk-wallet-android/CONTRIBUTING.md at master · nighthawk-apps/nighthawk-wallet-android · GitHub

2 Likes