Granted: Full lightwallet functionality for .NET

I’m delighted to (once again) be the recipient of a Zcash Community minor grant. I’ll be adding full lightwallet functionality for .NET to our Nerdbank.Zcash project that was started from the first grant.

Development is taking place at the following GitHub repo:
nerdcash/Nerdbank.Cryptocurrencies: .NET libraries for processing Zcash and other cryptocurrencies. (github.com)

A good deal of functionality beyond the initial grant is already in place. We have key derivation, a few BIPs and ZIPs implemented, and .NET APIs that expose some of the functionality required for .NET to act as a lightwallet client.

In the next month, I hope to implement and stabilize most functionality except for transaction download and creation – the functionality that actually requires interacting with the blockchain. I have prototypes of a very limited set of lightwallet sync functionality, but there’s lots more work to do. I’m consuming ZingoLib (from the Zingo team, also funded by a Community Grant) for some of this functionality, and that team is working through some bugs and features that will be important for this project to consume, so scheduling this work for more than a month out should help our requirements and their features align.

7 Likes

As an update, here is the new functionality for the past month:

  1. Added a function to easily parse a variety of key encodings or seed phrase into a ZIP-32 account.
    Add `ZcashAccount.TryImportAccount` by AArnott · Pull Request #107 · nerdcash/Nerdbank.Cryptocurrencies · GitHub
  2. Refactor some keys:
    Split sapling diversifier from the IVK class by AArnott · Pull Request #109 · nerdcash/Nerdbank.Cryptocurrencies · GitHub
  3. Ensure generated seed phrases have a minimum of 24 words:
    Add requirements about seed length, and document entropy requirements by AArnott · Pull Request #112 · nerdcash/Nerdbank.Cryptocurrencies · GitHub
    Improve enforcement of 256-bit entropy for ZIP-32 by AArnott · Pull Request #113 · nerdcash/Nerdbank.Cryptocurrencies · GitHub
  4. Encodable transparent private keys by AArnott · Pull Request #120 · nerdcash/Nerdbank.Cryptocurrencies · GitHub
  5. Add Yahoo! Finance as a provider of historical prices by AArnott · Pull Request #121 · nerdcash/Nerdbank.Cryptocurrencies · GitHub
  6. Added API so users can tell whether a pair of Zcash addresses refer to the same recipient, assuming the diversification index or transparent address index is the same:
    Add `ZcashAddress.IsMatch` API by AArnott · Pull Request #127 · nerdcash/Nerdbank.Cryptocurrencies · GitHub

In the next month, as expected I’ll be working on sync functionality (download and sending transactions) and balances. I hope to provide APIs by which a wallet app can convey very user-friendly concept balances (i.e. not the same ones I tend to see in wallets today). Here’s an example:

True auto-shielding functionality is also on the backlog, and I hope to get it done in the next 30 days as part of the sync work.

Finally, and this is something of a stretch goal, I hope to include shielded pool balancing functionality so that the wallet app (or user) can decide what proportion of their funds to keep in sapling vs. orchard. When each shielded pool carries a balance, payments are less likely to have to cross the turnstile, revealing the amount (or at least a clue about the amount) in a transaction.

3 Likes