Shifting from Zeclite to Zashi

I wanted to share my experience of moving funds out of zeclite wallets into something that’s compatible with the multiple address format, and have a bunch of questions. TLDR: it’s insanely complicated and time consuming, and I’m wondering whether Zashi might consider adding compatibility with zeclite and simplifying/automating the indexing process for users.

  • Importing all my zeclite wallets into Nighthawk was a crazy long process, and only after it was done I realized after that nighthawk wasn’t compatible: I wasn’t seeing all my funds, because i had multiple addresses per wallet with each zeclite wallet I used. @thedesertlynx suggested migrating to y wallet instead because I can index each address manually and hopefully retrieve all funds. (Thanks Joël)

  • Sync to y wallet has also been troublesome. You have to import the same wallet over and over, increasing the index number by an integer each time, in order to get all your addresses swept. I have no idea how many address I created with this wallet (I can’t open the wallet to find out). It seems I’d have to import the same wallet 100 times to make sure I swept all addresses. Even sweeping the same wallet 4 times is crazy, as the process has been taking about 3 days to sync each time.

  • My y wallet sync is taking an insanely long time and keeps pausing itself. Despite the phone being on, the wallet open, and the sync initiated, it keeps pausing on its own. I sometimes get the error message below when it pauses:

status: internal message: “Unexpected EOF decoding stream.” details; [], metadata: MetadataMap { headers: {} }

My solution is to the wallet open next to me at all times and restart it every 3-4 minutes.

My questions:
#1) Is there a way to automate the process of sweeping each index number, in order to migrate what was originally a zeclite wallet to another wallet and make sure all addresses are accounted for
#2) Would the zashi team consider adding that functionality to their wallet? Not just compatibility with zeclite, but also a 1 click that sweeps each index number for you?

#3) any idea why y wallet might be pausing like this? Would love to leave it running all night and get this thing done. I expect syncing just 1 index number of 1 single wallet is going to take me at least a week.

2 Likes

We definitely have multi-account support on our roadmap. Are you referring to the Zecwallet Lite desktop application when you’re talking about having multiple indexes? I don’t recall the mobile Zecwallet Lite supporting this feature, but I don’t really remember.

One question I have is, how would you feel about using a desktop application for recovery, with the option to export a wallet summary file that Zashi (and potentially other wallets) could implement? This is something that we’ve been considering as part of our work towards providing a replacement for the zcashd wallet, and if you have a large number of Sapling addresses I suspect that it would be a better user experience to let the recovery run on your desktop (so that you wouldn’t have to keep your phone open, and could take advantage of more powerful processors etc.), then simply import the wallet data to Zashi for mobile use.

The method that Zecwallet light used to generate new addresses did create it at a different index and also produced a different private key. So the same seed will get it all for you, but you would be better off just importing the private key of the sapling or transparent address into ywallet. Orchard addresses don’t support private keys, and the method of restoring them sequentially was how it was intended to be done in ZWL. No mobile wallet really generates accounts like this anymore. It was very confusing bc people didn’t know that it was creating brand new private keys or why they weren’t automatically getting all of these extra addresses when they restored the seed etc.

The easy way to speed this up is to do the account seed restore for all of the indicies manually BEFORE you begin rescanning ANY of them. That way, you can see which ones that you actually want (If you can correlate which address you want), delete the accounts you don’t want and then just scan the ones you do.

Ywallet supported a method called sub-account restore that would generate all of the addys for the indicies up to one that you define. The way it does now I think is more targeted (b/c of account heft I suppose) with just the account restore and you pick the index (if you need to).
Sweeping transparent legacy keys is a current function called sweep. And that does indexing for the transparent addresses, finds any funds across x of some index theshold and shields them for you.
You could potentially use the older version prior to the latest UI upgrade to access this sub account function. HOWEVER, THE DB OF ANY EXISTING WALLET ON A NEWER VERSION MAY/WILL BE CORRUPTED WHEN REVERTING TO AN OLDER WALLET VERSION. Adviso.
Also, it may not be worth the time vs said way of manually restoring the account indices and then syncing them all at once.

My memory tells me I was able to create multiple addresses for zecwallet lite on mobile too, but I can’t verify coz I can’t open any of these older wallets :frowning:
Super that it’s on your roadmap!
More than happy to use desktop for recovery if that speeds up the process. Do you have an idea of timeline?

Yes, it created new addresses but it also created new private keys and every time you do that, you essentially double the amount of time the wallet takes to decrypt a shieldee transaction. If all of your addresses are generated from one single key then doesn’t matter how many addresses you have.
The thing with the mobile wallet not opening up. Yeah, that just sucks, hang in there. With that I almost think the solution might be having to trick the phone into thinking its actually connected to its target server, and then maybe it’ll open.

Also syncing 6 or 7 accounts with a full scan in ywallet (with minimal transaction history, normal usage) should only take about 3 or 4 hours on a good server. You can check in the settings and find one with a good ping time. It does support background sync, but it goes faster in the foreground for beef-scanning.

Also, it is worth mentioning that zecwallet light on desktop does still work if you change the configuration file so that it talks to a working server. It is outlined here on the forum and I can post the link if you want.
With that, you import the seed, create new addresses just like before you get the same ones that you had. It will take a while to rescan but still supports transacting even though the fees aren’t quite right (the unpaid action limit is not being saturated so you should be ok there).

  1. You should create all the accounts first and then synchronize once. All the accounts are synchronized in a single sweep. However if you have a 100 addresses, that can still take a really long time so make sure you set a birth height.
  2. The error you are getting comes from disconnections from the server.
    We don’t restart when the server aborts so that the user can see the error message. I would suggest trying another one.
3 Likes

Thanks will try another server

question: is it safe downloading the desktop app for this purpose, I presume it’s not being maintained.

1 Like

Correct, it is now archived but the last version release 1.8.8 from Sept 7 2022 is available and as a possible restore option because of the problems with zecwallet light is the only reason I mention it.

This post describes how to navigate to the directories that contain the config.json file and how to edit the server address.

1 Like

Great thread from @zooko about the direction we want to aspire to with UX (Crypto engineering is hard, and I imagine the challenge to get to seamless UX is insane)

TLDR:
We have a lot of awesome, engineering-driven responses from the community for anyone who needs help (thank you, btw!)
Zcash ultimately needs a product person, who says something like:

“Alice saved her seed and birthday from wallet A. Years later, she imports them into wallet B. She doesn’t know what “indexes”, “accounts”, or “keys” are, and she doesn’t remember if wallet A generated any of those for her. Wallet B recovers every single zat of Alice’s without her having to learn about any of those concepts.”

https://x.com/zooko/status/1794911099508457563

3 Likes

+1

Made a video example of using the desktop version of Ywallet. In this example I also have a zebra node + local lightwalletd connected. In my case these wallets are very old with lots of transactions/memos and it finished in about an hour and 15 minutes on my current box. Should also note the ZWL wallet (and sub account) were mobile. Hope this helps :zebra:

CPU: 13th Gen Intel i7-13700 (24) @ 5.100GHz
GPU: Intel Raptor Lake-S GT1 [UHD Graphics 770]
Memory: 14545MiB / 15665MiB

2 Likes

:+1:

Just want to add that you can then export the transfer the synchronized wallet from desktop to mobile securely with the app backup function.

2 Likes

Do you have documentation for the wallet transfer format that you use? It would be valuable for the ecosystem to standardize on such a format.

3 Likes

I remember he kind of covered this (I’ll let him reply) but this covers handling it w age or rage and you can open in sqlite to at least see the format