Zecwallet lite with Nu6 + zip317 support

Hello friends, how you doing today?
So, I noticed that recently many old zcash users are having some trouble recovering their funds from Zecwallet lite.
I know recently, the user @emersonian released a zecwallet-lite fix with working servers and high transaction fee.

But now with the Nu6 activation, I believe even his version is outdated.

The user @Edicksonjga invited me to a group discussion about recovering ZECs from ZecWallet, and since I have a good experience with zecwallet codebase, I decided to do some more fixes and updates.

Backend fixes:

  • Support for Nu6 branch id / tx version.
  • A naive implementation of proportional fees (zip317).
  • Minor changes on grpc connector.
  • Some UAs causes the lib to panic (unwrap on None), so I added an error handling code.

Frontend fixes:

  • Fixed “Export all private keys” menu item (sapling and transparent, no orchard)
  • A small synchronization logic change.
  • Added a field on recovery screen, that allow the user to determine how many addresses to generate before synching.

Screenshots:

If the user has a zecwallet-light-wallet.dat file, the wallet will start the sync process:

If the user wants to recover a wallet, now they can inform the number of addresses to recover:

Example of a successful transaction:

Export private keys screen was fixed, displaying private key and address:

Drawbacks and issues

  • Naive zip317
    • While the code works, the implementaion is solely based on number of input and output notes.
    • Since we don’t know the fee before selecting the notes, the front-end doesn’t display the fee to the user. The fee will be automatically deduced from the sent amount.
    • I don’t have time, incentive, or even the knowledge to do a proper implementation.
  • gRPC fails
    • Sometimes, specially with large number of addresses, the grpc connector will fail, making the sync process even slower.

Even though every test I did (send sapling, send orchard, send multiple notes, send mixed notes, send with change, send all) worked, I cannot guarantee it will work for everyone.

Source code

The source code is available here: GitHub - james-katz/zecwallet-lite-nu6

I still don’t know if i’m going to release binary / executable files, even though I have some degree of trust by the community, I don’t want to encourage anyone to download random wallets they find online, promising to “recover your funds”. This could be a bad precedence.

But I’ll be more than glad to discuss the code, for anyone who wants to understand what I did, and help compile the code from source, if anyone has any interest in this project.

If anything, I just learned a lot about Rust and librustzcash (though a pretty old version).

That’s all, bye :upside_down_face:

22 Likes

Outstanding! Thank you :heart_eyes: :zebra: :+1: :student:

3 Likes

Thanks for your hard work @james_katz !

3 Likes

James, I’m very happy to see what you’ve achieved with your work, and it’s gratifying to see your development over the years we’ve been in the community, congratulations.

3 Likes

Great work @james_katz :clap:t2:

4 Likes

im calling u now the brazilian hanh (wizard)

7 Likes