Terms and Conditions
- I agree to the Grant Agreement terms if funded
- I agree to Provide KYC information if funded above $50,000 USD
- I agree to disclose conflicts of interest
- I understand that this grant program is only eligible for completed work, as it is a retroactive grant program. Applications for planned or partially completed work will not be considered. All completed work will be verified and accepted by its intended users or their representatives, who will confirm that the outputs meet the required quality, functionality, and usability before the work is listed as an option for Coinholder voting.
- I agree that for any new open-source software, I will create a CONTRIBUTING.md file that reflects the high standards of Zcash development, using the
librustzcashstyle guides as a primary reference. - I understand when contributing to existing Zcash code, I am required to adhere to the project specific contribution guidelines, paying close attention to any merge, branch, pull request, and commit guidelines as exemplified in the librustzcash repository.
- I understand all grants are valued in USD but will be disbursed in Shielded ZEC. I acknowledge and accept that disbursement amounts may fluctuate based on the ZEC/USD exchange rate at the time of payment.
Application Owners (@octocat, @octocat1)
@AArnott
Organization or Individual Name
Andrew Arnott (nerdcash)
Additional Team Members
None
How did you learn about the Lockbox: Coinholder Retroactive Grants Program?
Zcash Community Forum
Requested Grant Amount (USD)
$16,000
Category
Infrastructure
Project Summary
Kept Nerdbank.Cryptocurrencies, the ZF-funded .NET Zcash light wallet library, working through NU6, Ironwood and NU7. Built faster sync and view-only wallet support in the nerdcash/librustzcash fork that powers it.
Project Description
Nerdbank.Cryptocurrencies, originally funded by two Zcash Foundation Minor Grants, is the only known way for .NET apps to embed a Zcash light wallet. Since the grants ended I have kept it current with each network upgrade, unpaid: adapting to new zcash_client_sqlite releases, preloading Ironwood subtree roots, adding full Ironwood pool support (#713, released in v0.5.53), mempool reporting, NativeAOT builds and signed releases.
To make it fast and useful for watch-only and merchant scenarios, I extended librustzcash in the nerdcash fork with UIVK import and IVK-only scanning (proposed upstream as zcash/librustzcash#3206), a view-only scan mode that skips note commitment trees, an opt-in sandblast spam filter, multicore trial decryption, and faster commitment-tree and nullifier writes. They ship today in the library, which eZcash builds on, and in MoneyStream, which uses the fork directly. NU7 support (zcash_protocol 0.11, branch ID 0x77190AD9) came through upstream merges into the fork.
Technical Approach (how you did it)
C# library over a Rust FFI layer that builds on the nerdcash/librustzcash nerdbank branch, a submodule that merges upstream regularly and is never rebased. Changes ship through reviewed PRs with CI and mainnet benchmarks.
Selected library work (nerdcash/Nerdbank.Cryptocurrencies, all merged after Feb 19, 2024):
- #713 Add missing support for the Ironwood pool (Nov 1, 2026; released in v0.5.53)
- #709 Send a block range end on open GetTaddressTxids requests (Oct 30, 2026)
- #699 Opt-in sandblast trial-decryption filter on sync (Oct 29, 2026)
- #693 Update the librustzcash submodule to the nerdbank tip (Oct 29, 2026)
- #669 Scan view-only wallets without note commitment trees (Oct 28, 2026)
- #646, #647, #650, #658 Sync profiling, faster lightwalletd reads, larger subtree chunks, faster note-commitment tree updates (Oct 27, 2026)
- #649 Preload Ironwood subtree roots so older birthdays finish syncing (Oct 27, 2026)
- #648, #620 Adapt to zcash_client_sqlite 0.23.0 and 0.22.0 (Oct and Sep 2026)
- #632 Authenticode signing (Sep 7, 2026)
- #591 Import UIVK accounts into the light wallet (Jul 31, 2026)
- #575, #506 librustzcash updates, including a fix for zcash/librustzcash#2096 (Jan 2026)
- #568 Incoming payments to a particular address (Jan 24, 2026)
- #561 Report mempool transactions (Jan 12, 2026)
- #541 NativeAOT libraries and tool (Jan 5, 2026)
- #479 Move CI from Azure Pipelines to GitHub Actions (Jan 8, 2025)
Fork-only improvements (nerdcash/librustzcash, merged Oct 27–29, 2026):
- UIVK import and IVK-only account scanning (upstream PR zcash/librustzcash#3206)
- View-only scan mode with no note commitment trees, its own scan queue and optional anchor retention (#8, #9, #14)
- View-only rewind by height and block hash; balances without witnesses (#10, #11)
- Opt-in sandblast spam filter in the scan API (#20)
- Trial decryption across every core, plus a mainnet benchmark (#16, #17)
- Faster commitment-tree writes: cached updates, larger subtree chunks, folded checkpoints (#4, #15)
- Bounded nullifier-map growth; staged nullifier writes off the SQLite writer (#22)
- Idempotent subtree-root appends past a stored prefix, so Ironwood roots can be preloaded (#12)
- pasta_curves 0.6.1 assembly field arithmetic on aarch64 (#23)
Not claimed here: fork commits from Dec 29, 2023 to Feb 17, 2024, which fall under the prior grant, and the separate zcash-payment-service scanner work, which is its own proposal.
Time Period of Work Completion
February 19, 2024 (where the prior grant's work ended) to November 2, 2026 (v0.5.53 release)
Total Budget (USD)
$16,000
Budget Breakdown
- Compensation:
- $(USD): 16,000
- Justification: 40 hours of Nerdbank.Cryptocurrencies upkeep ($8,000) and 40 hours of librustzcash fork improvements ($8,000), including the UIVK import proposed upstream as zcash/librustzcash#3206, at $200/hour.
- Technology/Software:
- $(USD): 0
- Justification: None claimed.
- Infrastructure/Hosting:
- $(USD): 0
- Justification: None claimed.
- Services/Contractors:
- $(USD): 0
- Justification: None claimed.
- Other:
- $(USD): 0
- Justification: None claimed.
- Total $(USD): 16,000
Previous Funding
No
Previous Funding Details
No previous funding from the Coinholder program. For transparency: two Zcash Foundation Minor Grants for this library: $750 (April 2023, Unified Address library) and $18,000 (October 2023 to February 19, 2024, full lightwallet for .NET). This proposal covers only work after those grants were completed.
Other Funding Sources
No
Other Funding Sources Details
None
Success Metrics
- Releases v0.4.1, v0.4.9, v0.4.79, v0.5.29 and v0.5.53 (Ironwood support).
- Upstream PR zcash/librustzcash#3206 proposes the UIVK import work.
- Fork PRs #4 to #23 merged.
- In use by MoneyStream (through the fork) and eZcash (through the library).
Proof of completion
- Repository/Commit:
- Nerdbank.Cryptocurrencies - the .NET library
- Ironwood support PR #713 - full Ironwood pool support
- nerdcash/librustzcash nerdbank branch - the fork
- Fork vs upstream - fork-only changes
- Publication:
- zcash/librustzcash#3206 - UIVK import proposed upstream
- Deployment/Release:
- v0.5.53 - Ironwood release
- All releases - v0.4.1 through v0.5.53
- Other Evidence:
- NU7 in zcash_protocol 0.11.0 - arrived in the fork through upstream merges
Conflict of Interest Disclosure
I own MoneyStream, a paid app that depends on the nerdcash/librustzcash fork, so the fork improvements also benefit that commercial app. MoneyStream does not use Nerdbank.Cryptocurrencies. The improvements are public and open source, and MoneyStream is not a funded deliverable.
Community Forum Posting
- I understand it is my responsibility to post a link to this issue on the Zcash Community Forums after this application has been submitted so the community can give input. I understand this is required in order for the community to discuss and vote on this grant application. Note: If you are unable to post on the forum (for example, due to new user restrictions), please leave a comment below, and we will adjust your posting permissions.