YWallet & Warp Sync

Title:

YWallet & Warp Sync

Applicant name:

hanh

Pitch: A one-liner elevator pitch version of your proposal

Fast Shielded Wallet & Synchronization

Total Request (USD):

$500000.00 USD

Have you previously received a grant from Zcash Community Grants (formerly called ZOMG) or ZF?

Yes

Please provide details:

  • Cold Wallet

  • BTCPayServer Integration

Are you seeking or have you received funding from other sources for this proposed project?

No

Applicant background:

I am the author of YWallet and the creator of Warp Sync. Previously I worked as a Senior Software Engineer at Microsoft and was the CTO of a Hedge Fund in Asia.

Description of Problem or Opportunity:

Part of the grant is retroactive and applies to YWallet. It took over a year of development to reach its current state.

Following on Zooko idea of offering grants for projects that have delivered value to the Zcash ecosystem, I apply for YWallet to receive the first grant of this kind.

Due to increased transaction volume and high block occupancy, most wallets have considerable difficulty in maintaining their operation. Thanks to Warp Sync, YWallet was quite successful in keeping up with the new workload.

I offer to integrate Warp Sync into librustzcash. Other wallets would then benefit from the same technology as YWallet and have their synchronization speed multiplied, in some cases by 100x. Note that WarpSync is currently only for Sapling.

Proposed Solution: Describe the solution at a high level.

Warp Sync code is made of the following parts:

  • Processing pipeline,

  • Adaptative downloader,

  • Parallel batch trial decrypter

  • Optimized witness merkle tree calculator

  • Transaction Detail Processor

  • Database/Storage

These parts would be put into librustzcash and wallet devs would be able to use them. There would be some small work to integrate. But documentation and help will be provided.

Solution Format: What is the exact form of the final deliverable you’re creating?

In librustzcash repo, we would have zcash-warp (or something similar). It should follow the same API as the current synchronization API (but with some deviations when necessary)

Technical Approach: Dive into the how of your project. Describe your approaches, components, workflows, methodology, etc. Bullet points and diagrams are appreciated!

YWallet has a website: https://ywallet.app

Warp Sync is explained in this video: “ZWallet synchronization vs other wallets” - ZWallet synchronization vs other wallets - YouTube

Warp Sync is optional and the current synchronization mechanism in librustzcash will not be removed.

Dependencies: What external entities is your project dependent on? What involvement is required from ZF, ECC, and/or other external organizations? Who would have to incorporate your work in order for it to be usable?

As the maintainers of librustzcash, the ECC devs have the final say in accepting/rejecting the PR. Though, we will work together to make the PR successful.

Execution risks: What obstacles do you expect? What is most likely to go wrong? Which unknown factors could jeopardize success? Who would have to incorporate your work in order for it to be usable?

YWallet is already used by hundreds of users. There is a little risk on this part.

The PR for Warp Sync has to be merged back.

Unintended Consequences: What are the negative ramifications if your project is successful? Consider usability, stability, privacy, integrity, availability, decentralization, interoperability, maintainability, technical debt, requisite education, etc.

I don’t see any negative consequence since we are not removing anything from librustzcash.

Evaluation plan: What metrics for success will you share with the community once you’re done? In addition to quantitative metrics, what qualitative metrics will you commit to report?

TBD

Hardware/Software total budget:

$500000.00 USD

Please provide justification for the total hardware/software budget:

Other Zcash shielded wallets have already received grants totalling ~500k each. YWallet has demonstrated that its performance, stability and features are top notch and deserves similar funding.

  • During the CZ NFT offering, YWallet delivered every subscription without fail,

  • YWallet was the first (and for a while, the only wallet) to work after NU-5

  • YWallet could handle the increased work load affecting Zcash since Jul 2022. All other wallets ceased to work at some point.

Warp Sync is the main reason why YWallet could maintain synchronization. By integrating it into librustzcash, wallets such as Nighthawk, Edge, Unstoppable could also benefit.

(To be clear, the work to integrate other wallets is not part of the grant).

Services total budget (cloud, hosting, etc.):

$0.00 USD

Please provide justification for the total services budget:

N/A

Compensation total budget:

$500000.00 USD

Please provide justification for the total compensation budget:

N/A

Do you require startup funding?

No

Milestone 1 - estimated completion date:

08/01/2022

Milestone 1 - USD value of payout upon completion of deliverables:

$300000.00

Deliverable 1.1

YWallet 1.2.12

Milestone 2 - estimated completion date:

08/01/2022

Milestone 2 - USD value of payout upon completion of deliverables:

$100000.00

Deliverable 2.1

PR of WarpSync (not merged)

Milestone 3 - USD value of payout upon completion of deliverables:

$50000.00

Milestone 3 - estimated completion date:

08/15/2022

Deliverable 3.1

On Boarding Documentation

Milestone 4 - USD value of payout upon completion of deliverables:

$50000.00

Milestone 4 - estimated completion date:

09/07/2022

Deliverable 4.1

PR merged

Total proposed USD value of grant:

$500000.00 USD

How was the project timeline determined?

Milestone 1 is retroactive.

Other milestones estimated based on typical work need for integration.

Application submission date:

07/24/2022

22 Likes

:clap:

I’m 100% supportive of this proposal.

6 Likes

If the Warp Sync will be the one to avoid the stress caused by slow synchronization, I support this great proposal.

6 Likes

It’d be really cool if warp-sync were a librustzcash offering!

5 Likes

Without @hanh’s work, my funds would have basically been stranded for the past few weeks. Or, I would have had to resort to a zcashd full node and spent hours and days moving keys and seed phrases around. I had many light wallets with many secret keys and seed phrases and it has been a bit of a frustrating mess. But, thanks to YWallet and warp sync, not as frustrating as it could have been. I have successfully regained access to all of my funds with the help of hanh’s warp sync. To me, that’s no small thing.

Since my go-to wallets quit functioning and still do not work, I decided to start building my own desktop light wallet. I looked closely at using
zecwallet-light-cli and made a proof-of-concept with it for an electron app similar to ZWL. I also started a similar experiment with @hanh 's zcash-sync repo. Even though it’s my very first journey into writing Rust code (a node FFI to zcash-sync), I’ve had massive success so far using zcash-sync and am almost ready to announce a new desktop lightwallet based on it (ZUULI). Warp sync in node has been running rock solid for days and I just got my first transaction!

Shameless plug, come and help me work on ZUULI - zuu/ex/zuuli at main ¡ free2z/zuu ¡ GitHub

Hanh has helped me get started and has given me a lot of help in using zcash-sync and even started the node FFI for me to build on (ywallet is in dart so the FFI is a little different). zcash-sync is a very elegant library and has been a joy to work with.

Anyways, this is a long-winded, self-promoting way of saying: hanh is one of the top top devs in the community and should be rewarded.

Still, $500k is obviously a decent amount of money! Maybe we can just slightly expand the scope of the grant to design/maintain/document the node FFI for example? :wink: I won’t go so far as to bring up WASM! But, if librustzcash had an off-the-shelf warp sync that built to node, there are many potential uses in the future - things like ZUULI, free2z, new mobile wallets could all benefit greatly.

$500k is a decent amount of money. But, I trust that @hanh will make good decisions on what to work on and that he will be there to support his work. I hope we can squeeze some more good documentation out of him! :smiley: He has done a great job documenting ywallet for users. If he added developer documentation for more people to get going with librustzcash and warp-sync, the $500k would be money well spent.

6 Likes

A big part of the grant is to retroactively sponsor the development of YWallet that took more than a year of work so far.

1 Like

I’ve mostly ignored Ycash and Ywallet this whole time, but now actually I’ve been using Ywallet primarily since a few weeks after Orchard. Nighthawk and Unstoppable couldn’t sync on my phone, and ZecWallet Lite stopped working on the laptop I use as a phone in a pinch Dom Joly style, and I haven’t been able to update zcashd on my server running old linux old glibc. (ZWL is now OK again since recent updates past couple weeks.)

I haven’t read the op proposal carefully, just needed to catalog this personal experience with a post somewhere mostly appropriate so here it goes

10 Likes

Have you carefully considered how much ycash this proposal buys?

I don’t think there is much liquidity at this time.

i was joking. congrats, hanh.

1 Like

Very glad to see this proposal, thank you for submitting @hanh. Ywallet has been a luxury yacht of smooth functioning in a choppy sea of glitchy wallets. Even before the recent issues with spamming, or whatever the heck is going on, I found it to be the fastest and most reliable one out there. You have done great work for the Zcash community and I hope to see that continue in the future.

I too will take some more time to read this carefully but think its a great proposal.

7 Likes

Warp sync is really cool and thank you for creating it and offering to upstream it!

Can this grant include a ZWallet update and continued development? At a high level, majority of the current proposal is retroactive funding for premier Zcash support in a multi-coin wallet that is not Zcash-first.

Two data points:

  • Ycash foundation awarded a $2500 grant to YWallet. (I could not find info about earlier grants if any.) YWallet which is Ycash-first as far as onboarding goes.
  • Over 3 years, Zcash Foundation and ZOMG has awarded $435 000 to support development of ZecWallet Lite mobile and desktop wallets and infrastructure (plus earlier funding in the desktop-only era). ZecWallet Lite is Zcash-first.

The requested retroactive YWallet funding amount here is $300 000 which is 120x more than the Ycash foundation’s grant. It is also not far off from 3 years of ZecWallet mobile, desktop, and infrastructure funding (so quite a lot!).

I’m a happy YWallet user but given the amount of money involved I’d be much happier if the grant included a user-facing Zcash-first deliverable and its continued updates :slight_smile: Can we make that happen?

10 Likes

I’ve always wanted a zcash and ycash wallet/service where you could trade shielded zcash and shielded ycash.

Are we getting closer?

I take issue with you using this as a “data point” without additional context.

You quoted the $2,500 amount without mentioning that the grant will be paid as 25,000 YEC, which is a very large portion of Ycash Development Fund.

A poor man donates one penny. A rich man donates $1.20. The one penny donation is not a very useful “data point” in evaluating the $1.20 donation.

5 Likes

I think the argument still stands that if 99% of external funding were from Zcash (plus, the requested funding amount being quite substantial!) then it would be incongruous to have an end-result that is anything but Zcash-first. Hence the ask to modify the grant to include a user-facing Zcash-first deliverable and its continued updates.

I don’t want to suggest that YWallet should become Zcash-first but I’d be very happy if author’s Zcash-first ZWallet got resurrected and maintained :slight_smile:

10 Likes

I think it’s hilarious - Ywallet has been ‘actively ignored’ by official Zcash channels for over a year, even when there was a standalone ZEC version.

It’s crime, being faster than all the other wallets.

When it became the last wallet standing after NU5, everyone wanted it, but still no recognition as far as I can tell.

Throughout all this, the Ycash people were working with it, using it, testing it, giving feeback…and now you want to ‘de-yecify’ it.

I am ‘officially grumpy’.

10 Likes

@ChileBob form what I read, no one is suggesting Ywallet to de-Yecify itself. What Madars suggested was to build a standalone Zcash app like what Zwallet used to be.

As far as suggestions go, that’s a valid suggestion from a member of the Zcash community.

As a YEC holder, I’m not sure if Ycash is a “friendly” fork anymore.

Note: Not talking as mod here. I have told the forum admin that I’m stepping down as moderator. Cheers!

2 Likes

I was pondering the same sort of thing: a reference implementation that users can download and use and developers can use as an example. Ywallet is great: but, it has many features beyond a reference implementation, is sort of ycash-first and is in dart which is a bit less common than the react stack that ZWL is built on. After tinkering extensively with ZWL and the underlying libraries, I found it would be easier and more fruitful to start a new UI than to retrofit warp sync into the existing ZWL code, hence ZUULI.

I’m reaching out to @hanh to discuss the possibility of committing to collaboration with 2Z (free2z, @birdify and me) as part of this grant. A rock-solid, simple desktop light wallet is an absolute must for Zcash right now and ZUULI with zcash-sync at the core can fit that bill. Let’s see what he says when he comes online!

With a simple reference implementation it would be easy for other developers to customize, fork and extend and build their own versions, almost like a white-label zcash desktop wallet. Node/electron/react is a pretty simple and popular stack. With that in hand as an example, it wouldn’t be too hard to get other flavors and platforms going as well.

2 Likes

I think we can indeed have two wallets. To be clear, you suggest having a rebranding of YWallet. It would have:

  • a different name (not ZWallet, it is taken already on the Apple Store),
  • starts with zcash as selected by default,
  • same functionality and UI,
  • different logo?
  • not published by Ycash Foundation?

As part of the onboarding and dev documentation of deliverable 3.1, I could work with @skyl and help him integrate Warp Sync into ZUULI.

I will offer a REST server version for a wallet reference implementation.

PS:

A bit of history may help clarify.
YWallet and ZWallet co-existed for a while because each could only support one currency. Eventually, I merged both and built ZYWallet. The Problem was the complete lack of user base and now having to support YWallet, ZWallet, and ZYWallet. ZWallet couldn’t be on Apple Store and had to be renamed WarpWallet. It was clearly too much confusion. I kept the app that was the most popular.
The Ycash foundation gave me this award after YWallet was built as a token of appreciation and not a grant. I didn’t request anything. Of course, they also helped with testing and publishing.

17 Likes

Look what @hanh has been able to deliver even without funding! Wow. Sound like @hanh would be a perfect candidate for direct grant funding if you ask me (@ZcashGrants).

7 Likes