# Grant Request: ZeWIF Error Handling Update

**URL:** <https://forum.zcashcommunity.com/t/grant-request-zewif-error-handling-update/52299>\
**Category:** Applications\
**Created:** [October 1, 2025, 7:31pm UTC](https://forum.zcashcommunity.com/t/grant-request-zewif-error-handling-update/52299 "2025-10-01T19:31:12Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![BC-Shannon](https://sea2.discourse-cdn.com/zcash/user_avatar/forum.zcashcommunity.com/bc-shannon/32/30022_2.png) [@BC-Shannon](https://forum.zcashcommunity.com/u/BC-Shannon)\
**Post date:** [October 1, 2025, 7:31pm UTC](https://forum.zcashcommunity.com/t/grant-request-zewif-error-handling-update/52299/1 "2025-10-01T19:31:12Z")

</div>

We were asked by ECC to update internal error handling on the ZeWIF crates that we created under a previous grant. The work has been completed, this is a request for reimbursement for engineering costs.

> <https://github.com/ZcashCommunityGrants/zcashcommunitygrants/issues/92>
>
> \### Terms and Conditions
> 
> \- \[x\] I agree to the \[Grant Agreement\](https://9ba4718…c-5c73-47c3-a024-4fc4e5278803.usrfiles.com/ugd/9ba471\_f81ef4e4b5f040038350270590eb2e42.pdf) terms if funded
> \- \[x\] I agree to \[Provide KYC information\](https://9ba4718c-5c73-47c3-a024-4fc4e5278803.usrfiles.com/ugd/9ba471\_7d9e73d16b584a61bae92282b208efc4.pdf) if funded above $50,000 USD
> \- \[x\] I agree to disclose conflicts of interest
> \- \[x\] I agree to adhere to the \[Code of Conduct\](https://forum.zcashcommunity.com/t/zcg-code-of-conduct/41787) and \[Communication Guidelines\](https://forum.zcashcommunity.com/t/zcg-communication-guidelines/44284)
> \- \[x\] I understand all milestone deliverables will be validated and accepted by their intended users or their representatives, who will confirm that the deliverables meet the required quality, functionality, and usability for each user story.
> \- \[x\] 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 \[\`librustzcash\` style guides\](https://github.com/zcash/librustzcash/blob/main/CONTRIBUTING.md#styleguides) as a primary reference.
> \- \[x\] 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\](https://github.com/zcash/librustzcash/blob/main/CONTRIBUTING.md#merge-workflow), \[branch\](https://github.com/zcash/librustzcash/blob/main/CONTRIBUTING.md#branch-history), \[pull request\](https://github.com/zcash/librustzcash/blob/main/CONTRIBUTING.md#pull-request-review), and \[commit\](https://github.com/zcash/librustzcash/blob/main/CONTRIBUTING.md#commit-messages) guidelines as exemplified in the \`librustzcash\` repository.
> \- \[x\] I agree to post request details on the \[Community Forum\](https://forum.zcashcommunity.com/c/grants/33)
> \- \[x\] I understand it is my responsibility to post a link to this issue on the \[Zcash Community Forums\](https://forum.zcashcommunity.com/c/grants/33) after this application has been submitted so the community can give input. I understand this is required in order for ZCG to discuss and vote on this grant application.
> 
> \### Application Owners (@Octocat, @Octocat1)
> 
> @shannona, @ChristopherA 
> 
> \### Organization Name
> 
> Blockchain Commons
> 
> \### How did you learn about Zcash Community Grants
> 
> This is a continuation of our work with ZCG from early in the year.
> 
> \### Requested Grant Amount (USD)
> 
> $4,500
> 
> \### Category
> 
> Wallets
> 
> \### Project Lead
> 
> \`\`\`project-lead.yaml
> Name: Christopher Allen
> Role: Executive Director
> Background: Founder of Blockchain Commons, Co-Author of TLS & DID standards
> Responsibilities: Project Oversight
> \`\`\`
> 
> \### Additional Team Members
> 
> \`\`\`team-members.yaml
> \- Name: Wolf McNally
> Role: Lead Researcher
> Background: Developers for ZeWIF & Most Blockchain Commons software
> Responsibilities: Engineering of ZeWIF Updates
> \`\`\`
> 
> \### Project Summary
> 
> Update of ZeWIF crates & underlying crates to use \`thiserror\` instead of \`anyhow\` to allow for easier programmatic handling of errors.
> 
> \### Project Description
> 
> On September 8, Kris Nuttycombe asked us to make a pass at revising error handling in the ZeWIF libraries (and other elements in our stack). He wanted us to change out "anyhow" to "thiserror" to make the errors more algorithmically accessible.
> 
> We were committed to doing this work because creating interoperability through ZeWIF lies near our own goals of creating user freedom. Since this work was requested by ECC, we also presumed that it was important for the continuing work on the zcashd deprecation.
> 
> We delivered Kris with updated libraries on September 18. Unfortunately, because our previous maintenance grant for ZeWIF was not approved, the work was unfunded: it came out of our pockets. 
> 
> We're hoping that ZCG can fund this work already done to support the Zcash community.
> 
> Here's more details on what was done:
> 
> \### Removed \`anyhow\` dependency in Blockchain Commons library stack
> 
> \- While some of our crates already used \`thiserror\` version 1 in certain cases, ten of the library crates in our stack used \`anyhow\` for ad hoc, string-based error reporting, of which four foundational crates are directly or indirectly dependencies of the \`zewif\`, \`zewif-zcashd\`, \`zewif-zingo\`, and \`zmigrate\` crates:
> - bc-envelope
> - bc-components
> - dcbor
> - bc-crypto
> \- All library crates now exclusively use \`thiserror\` version 2 to report semantic errors. All such crates have had version number bumps and have been updated on https://crates.io.
> \- This was necessary so \`zewif\` crate, based on our stack, would not have (directly or indirectly) any dependency on \`anyhow\`, and all errors thrown are now relatively easy to deal with programatically and to internationalize. Our app-level crates (CLI tools, servers) still use \`anyhow\` as that is its best use. With these modifications, Zcash can adopt any Blockchain Commons library crates without re-introducing dependencies on \`anyhow\`.
> 
> \### zewif
> 
> \- Replaced the blanket \`anyhow\` dependency with a crate-local \`Error\` enum powered by \`thiserror\` v2, plus a \`Result\` alias, so every module now reports precise failure modes instead of opaque \`anyhow::Error\` values (\`src/error.rs\`, widespread signature updates across \`src/\*\`).
> \- Updated all serialization helpers and macros (\`blob\_macro.rs\`, \`data\_macro.rs\`, \`sapling\_\*\`, \`orchard\_\*\`, etc.) to propagate the new typed errors and removed the no-longer-needed \`StringContext\` shim once conversions were in place.
> \- Aligned dependency metadata and removed the crate’s private \`Cargo.lock\`, relying on the workspace lock instead.
> 
> \### zewif-zcashd
> 
> \- Introduced a comprehensive \`Error\` type with contextual variants covering parser underflow, invalid CompactSize encodings, UFVK lookup failures, command execution errors, and more; added \`ResultExt\`/\`OptionExt\` helpers to maintain ergonomic error enrichment (\`src/error.rs\`).
> \- Rewrote the parser macro and supporting modules so every parser returns the new \`Result\`, eliminating \`anyhow\` from the parsing stack and improving diagnostics when decoding Berkeley DB wallet dumps (\`src/parser/parse\_macro.rs\`, \`src/zcashd\_wallet/parseable\_types.rs\`, \`src/zcashd\_parser.rs\`, etc.).
> \- Cleaned up obsolete scaffolding (e.g., removed the stale \`Cargo.lock\`, deprecated registry helpers) and refactored the migration code to surface the richer errors while trimming redundant warnings.
> 
> \### zewif-zingo
> 
> \- Dropped \`anyhow\` in favor of a focused \`ParseError\` enum implemented with \`thiserror\` v2, giving explicit variants for unsupported dump versions, malformed strings, IO failures, and mnemonic entropy errors (\`src/error.rs\`).
> \- Replaced the borrowed \`zewif\` parser stack with a lightweight \`BinaryReader\` wrapper that handles length-checked reads and contextualizes IO errors, yielding clearer parsing boundaries (\`src/binary.rs\`, \`src/zingo\_parser.rs\`, \`src/wallet\_capability.rs\`).
> \- Adjusted \`Cargo.toml\` and module exports so the crate builds solely on the new typed errors while continuing to service the CLI ingest path.
> 
> \### zmigrate
> 
> \- Overhauled the CLI tooling to match the typed-error stack: refreshed the zcashd dump script to validate Berkeley DB tooling before execution and pipe the new \`--from/--to\` interface (\`run\_zcashd\_dumps.sh\`), and re-enabled the Zingo ingestion path with a guarded \`dump\`-only workflow (\`src/main.rs\`, \`src/zingo\_cmd.rs\`).
> \- Refreshed the regression suite to consume the updated APIs from \`zewif\`/\`zewif-zcashd\`, improving reporting for migration coverage and formatting the generated summaries (\`tests/test\_\*\`).
> \- Added an opt-in \`zingo\` Cargo feature so Zingo dependencies, scripts, and tests stay inactive unless explicitly requested, keeping default builds lean (\`Cargo.toml\`, \`run\_zingo\_dumps.sh\`, test modules).
> 
> \### Proposed Problem
> 
> \`anyhow\` error reporting in libraries did not allow full algorithmic integration.
> 
> 
> \### Proposed Solution
> 
> Replace \`anyhow\` with \`thiserror\`.
> 
> 
> \### Solution Format
> 
> Update repos & associated Rust crates.
> 
> The major repos are:
> 
> https://github.com/BlockchainCommons/zewif
> https://github.com/BlockchainCommons/zewif-zcashd
> https://github.com/BlockchainCommons/zewif-zingo
> https://github.com/BlockchainCommons/zmigrate
> 
> \### Dependencies
> 
> The only dependencies were on our previous ZeWIF work.
> 
> 
> \### Technical Approach
> 
> The approach was simply to replace \`anyhow\` usage with \`thiserror\` v2 for any library crates. (CLI crates continue to use \`anyhow\`, as is appropriate.)
> 
> 
> \### Upstream Merge Opportunities
> 
> The main upstream opportunities are supporting the zcashd deprecation and making it easier to move data from zcashd to new wallets, particularly zallet.
> 
> 
> \### Hardware/Software Costs (USD)
> 
> $0
> 
> \### Hardware/Software Justification
> 
> N/A
> 
> \### Service Costs (USD)
> 
> $0
> 
> \### Service Costs Justification
> 
> N/A
> 
> \### Compensation Costs (USD)
> 
> $4,500
> 
> \### Compensation Costs Justification
> 
> We specced this project out at 4 days. It came in slightly lower, at 30 hours. We are requesting repayment of engineer costs at $150/hour (x30 hours = $4,500).
> 
> 
> \### Total Budget (USD)
> 
> $4,500
> 
> \### Previous Funding
> 
> Yes
> 
> \### Previous Funding Details
> 
> This is an extension of work done for "Zcash Extensible Wallet Interchange Format (ZeWiF)", grant request #3
> 
> 
> \### Other Funding Sources
> 
> No
> 
> \### Other Funding Sources Details
> 
> \_No response\_
> 
> \### Implementation Risks
> 
> The only danger in the implementation is that it's a wide-scale update.
> 
> 
> \### Potential Side Effects
> 
> The goal is to make errors more visible to the program, with the linked result that they may be less visible to users, depending on implementation details of specific apps using the libraries.
> 
> 
> \### Success Metrics
> 
> We'll consider this successful if ECC is happy with the results. The last we heard was on September 18, when they said they'd be integrating the work into their crates over the next few days.
> 
> 
> \### Startup Funding (USD)
> 
> $0
> 
> \### Startup Funding Justification
> 
> N/A
> 
> \### Milestone Details
> 
> \`\`\`milestones.yaml
> \- Milestone: 1
> Amount (USD): $4,500
> Expected Completion Date: 2025-09-18
> User Stories:
> - "As an engineer, I want errors that are more programmatic, so that I can integrate them into my own apps easier."
> Deliverables: 
> - Updates to underlying crates: bc-envelope, bc-components, dcbor, bc-crypto
> - Updates to ZeWIF crates: zewif, zewif-zcashd, zewif-zingo, zmigrate
> Acceptance Criteria: Release of repos to GitHub (completed on September 18)
> \`\`\`
> 
> \### Supporting Documents
> 
> \`\`\`files.yaml
> 
> \`\`\`

Thanks!

---

<div class="post-metadata">

**Author:** ![ZCG](https://sea2.discourse-cdn.com/zcash/user_avatar/forum.zcashcommunity.com/zcg/32/33712_2.png) [@ZCG](https://forum.zcashcommunity.com/u/ZCG)\
**Post date:** [October 13, 2025, 2:37pm UTC](https://forum.zcashcommunity.com/t/grant-request-zewif-error-handling-update/52299/2 "2025-10-13T14:37:55Z")

</div>

@BC-Shannon at the most recent meeting, ZCG voted to approve this proposal. Congratulations!

Since this is a retroactive grant request no community updates are required.

Please check your forum inbox for a direct message from FPF with important next steps, including a link to the Milestone Payment Request Form and your unique validation code for submitting payment requests. Thanks!

---

<div class="post-metadata">

**Author:** ![BC-Shannon](https://sea2.discourse-cdn.com/zcash/user_avatar/forum.zcashcommunity.com/bc-shannon/32/30022_2.png) [@BC-Shannon](https://forum.zcashcommunity.com/u/BC-Shannon)\
**Post date:** [October 14, 2025, 12:41am UTC](https://forum.zcashcommunity.com/t/grant-request-zewif-error-handling-update/52299/3 "2025-10-14T00:41:47Z")

</div>

Thanks, folks!
