Zkool - The successor to Ywallet

Zkool is a multi-account wallet for Zcash.

What can you do with it?

  • It supports nearly every type of account
    • From 12, 18, 21, 24 words seed phrase with an optional password
    • With internal address derivation for change (Zashi, ZIP 316)
    • From Unified Viewing Key (with complete or partial list of receivers)
    • From legacy shielded extended keys (secret and viewing) of zcashd
    • From transparent xpub/xprv keys (Electrum and BIP 32 compliant wallets)
    • From seed phrase and BIP 44 (Exodus, Ledger, and other transparent wallets)
    • From transparent secret key (any key export from a transparent wallet)
    • and of course Ywallet
  • It handles accounts individually
    • Each account has its own synchronization state and be included or excluded from the global sync. This allows you to “park” accounts by disabling them. They do not slow down sync of your active accounts. If you need them later, you reenable them and bring them up to date.
    • An account can be exported and then imported in a different wallet file. The entire data (notes, spends, witnesses, etc) gets saved into an encrypted file.
    • Wallet files can be also encrypted.
    • Zkool supports more than one account and does not lock you to the list of accounts1
  • Its shielded features are as good as Ywallet. In particular, it will
    • minimize cross pool usage
    • allow you to select your pools
    • can create multi recipient payments
  • and its transparent privacy as good as transparent wallets
    • shielded wallets tend to handle the lack of privacy of transparent addresses by mandating the shielding of transparent funds before they can be spent (Zashi, Zingo, …). Instead, Zkool supports address rotation for the users2

What it does not do well

  • UI is basic. There are only a few screens and nothing flashy. On the flipside, the UI is relatively simple to understand.
  • Some nice to have features are missing
    • No address book. Mainly because Zcash has diversified addresses that make address books useless if used3
  • No keytool
  • No Market Data charts
  • No customization of reference currency (always USD)
  • No pool transfer tool
  • No third party swap integration
  • No spending tracking
  • No auto shielding of any sort

Source code and releases on github

  1. Ywallet can only save and restore all the accounts. :right_arrow_curving_left:
  2. Obviously, not as good as shielding but offers some level of privacy. :right_arrow_curving_left:
  3. The diversified address cannot be matched against the one address recorded in the address book. :right_arrow_curving_left:
14 Likes

Looking very promising, thank you @hanh.

I’m starting to understand that the vision of being able to restore any Zcash passphrase into any Zcash wallet is too optimistic. Hopefully we can have at least one wallet that can find any funds, but for wallets unable to do that, they should be very clear about it. Users thinking they have lost their funds are not those bringing the best PR to the project, to say the least.

1 Like

Oh yes. A real problem. For which we have a solution called the ZexCavator! Milestone 4 (I think) of the ZeWIF grant from Zingo Labs and Blockchain commons.

4 Likes

Looks promising. Looking forward to transparent address rotation.

Am wondering how much work it would be to port the flutter_rust_bridge bindings to uniffi to be able to build a React Native UI on top of this. I’d be open to doing a spike on this, but might need to pair with someone more proficient in Rust.

1 Like

uniffi does not support javascript. It is one of its major flaw IMO.

1 Like

UniFFI should support Node.js and React Native: GitHub - jhugman/uniffi-bindgen-react-native: Make React-Native Turbo Modules out of Rust . Zingo uses UniFFI bindings – zingo-mobile/rust/lib/src/lib.rs at dev · zingolabs/zingo-mobile · GitHub

Not regular ts/js. It’s for react native and pretty early stage afaict according to their docs.

The third party support tends to suck. The GoLang for example, fell behind many versions of Uniffi, making a monorepo approach impossible unless you settle with the older version