### 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)
Steven Hart
### Organization Name
@steven_hert
### How did you learn about Zcash Community Grants
Steven_hert
### Requested Grant Amount (USD)
$12,500
### Category
Infrastructure
### Project Lead
```project-lead.yaml
Name: Steven Hert
Role: Project Lead and Software Engineer
Background:
Steven is a software engineer with experience across Python, JavaScript, Rust, Web2/Web3 tooling, Sui, and Arbitrum. His GitHub profile lists 55 public repositories and pinned work across Rust, Go, Move, Solidity, and JavaScript projects.
Responsibilities:
Steven is the sole developer and project lead for this grant. He built the current MVP for the Zcash Reference Flow Kit and will be responsible for implementation, fixture setup, smoke-test commands, CI, documentation, milestone delivery, and reviewer support.
```
### Additional Team Members
```team-members.yaml
Name: Steven Hert
Role: Project Lead and Software Engineer
Background:
Steven is a software engineer with experience across Python, JavaScript, Rust, Web2/Web3 tooling, Sui, and Arbitrum. His GitHub profile lists 55 public repositories and pinned work across Rust, Go, Move, Solidity, and JavaScript projects.
Responsibilities:
Steven is the sole developer and project lead for this grant. He built the current MVP for the Zcash Reference Flow Kit and will be responsible for implementation, fixture setup, smoke-test commands, CI, documentation, milestone delivery, and reviewer support.
```
### Project Summary
The Zcash Reference Flow Kit version 1 is a tool that helps Android developers test the Zcash Android SDK. It's like a practice kit that lets them try out the basics before they start building more complex apps. This kit includes some pre-set versions, test data, and expected results, which makes it easier for developers to see if everything is working as it should. It also has some simple commands that guide them through the process, so they can verify that the Zcash Android SDK is working correctly before they move on to more advanced features
PROJECT MVP: https://github.com/steven3002/zcash-reference-flow-kit
Demo Video: https://drive.google.com/file/d/1-W7awOBCpdzw-JqafVLx6cmaTRPMq_eb/view?usp=sharing
### Project Description
The Zcash Android SDK is a tool that helps Android apps work with Zcash. It's meant for apps that want to add Zcash features. The SDK has everything apps need to get started, including instructions, examples, and a way to connect to the Zcash system. You can find all this on GitHub.
This project isn't meant to replace or change the way the SDK works, or add new features to Zcash. Instead, it's a separate resource that helps someone who's new to integrating Zcash on Android figure out one important thing:
**Can I run a basic Zcash Android SDK flow locally and get the expected result?**
We've already built[ a basic version ](https://github.com/steven3002/zcash-reference-flow-kit) of our project, and it's included with the other materials we're providing. The money from the grant will help us make a final version that's ready for use. We'll use the funds to make our reference guide more robust, improve the way we test smoke paths, add a new feature called shielded-send, set up continuous integration, make sure our outputs are what we expect, and create clear instructions for reviewers and developers.
The final tool will be local-only and will not require real funds, private wallet data, hosted services, public endpoints, or upstream merges.
### Proposed Problem
Developers who make apps for Android can start using the Zcash Android SDK right now. However, to get it working, they have to gather information from various places like the SDK documentation, example projects, setup guides, and testing tools. It's not all in one place, which can make it a bit tricky to get started.
A new integrator may still need to figure out:
* whether their local environment is ready
* which SDK version and fixture setup the reference flow expects
* whether a basic receive/sync path works
* Does a controlled send path work like it's supposed to?
* whether a failure is caused by local setup or by their own app code
We need a simple tool that helps developers check if the Android SDK is working correctly on their system. This tool should be easy to use and provide clear results, so developers can quickly figure out if there's a problem. It should include some basic commands, examples, and tests, as well as a way to run these tests automatically. This will make it easier for developers to verify that the Android SDK is set up properly on their local machine.
### Proposed Solution
This project aims to finish the **Zcash Reference Flow Kit v1**, a separate reference repository that only concentrates on Android SDK smoke testing paths.
The kit will include three commands:
```bash
zrf doctor
zrf smoke-receive
zrf smoke-send
```
`zrf doctor` checks the local environment, pinned version matrix, fixture bundle, and test setup.
`zrf smoke-receive` runs a fixture-backed receive/sync path and compares the result against expected output.
`zrf smoke-send` runs a controlled shielded-send path using test-only fixture material and compares the result against expected output.
The tool is limited in what it can do. It only checks if the reference flow works with specific versions and settings. It doesn't promise that it's ready for real-world use or that it follows all the rules. Also, it doesn't cover everything the software development kit (SDK) can do.
### Solution Format
The project will be delivered as an open-source software repository containing:
* `zrf` command runner
* pinned `reference-matrix.yaml`
* deterministic fixture bundle
* `doctor` command
* `smoke-receive` command
* `smoke-send` command
* expected output snapshots
* CI workflow running all smoke commands
* quickstart guide
* troubleshooting notes
* known limits and non-goals section
We'll keep the documentation simple, just what's necessary to understand and work with the smoke paths. This will help us run and verify everything smoothly.
### Dependencies
* Zcash Android Wallet SDK
* Android/Kotlin development environment
* Gradle
* deterministic fixture data
* local command runner
* GitHub Actions or equivalent CI
The project does **not** require:
* hosted infrastructure
* mainnet or testnet funds
* public lightwallet servers
* private wallet data
* wallet database parsing
* upstream merge into the Android SDK
* modifications to Zebra, Zaino, Zallet, lightwalletd, or `zcashd`
### Technical Approach
### **1. Version-pinned reference matrix**
The repository will have a file called `reference-matrix.yaml` that clearly says what is being tested. This file is important because it defines exactly what the tests are checking.
* Zcash Android SDK version
* Gradle/Kotlin version range
* fixture bundle version
* local backend/test mode
* expected output files
* known limits
The kit won't say it works with everything. It will only say that the smoke paths included in the kit work with the conditions we've listed.
### **2. `zrf doctor`**
The doctor command checks if your local setup can run the reference flow.
It will verify:
* Java version
* Gradle availability
* Android SDK requirements
* pinned dependency version
* fixture bundle presence
* writable output directory
* local test setup readiness
Example output:
```text
PASS Java version supported
PASS Gradle available
PASS Android SDK dependency pinned
PASS Fixture bundle found
PASS Reference flow environment ready
```
### **3. `zrf smoke-receive`**
The `smoke-receive` command is used to run a controlled receive and sync path.
It will:
* initialize a disposable fixture-backed wallet flow
* derive a test address
* start the SDK sync path
* process deterministic fixture data
* compare the result with expected output
This is related to the Android SDK, where developers can start the `Synchronizer` and get the wallet address, you can find more information on this process on GitHub.
### **4. `zrf smoke-send`**
The `smoke-send` command will run a controlled send path.
It will:
* use test-only fixture material
* invoke the Android SDK send path
* include memo-bearing fixture data
* verify transaction status output
* verify expected balance/status output
This maps to the Android SDK consumer documentation showing `sendToAddress(spendingKey, zatoshi, address, memo)`. ([ GitHub][2])
### **5. Expected output snapshots**
Each command will have expected output files, such as:
```text
fixtures/expected/doctor.ok.txt
fixtures/expected/smoke-receive.ok.json
fixtures/expected/smoke-send.ok.json
```
A reviewer should be able to run the commands and compare actual results against the expected outputs.
### **6. CI validation**
The final repository will include CI that runs:
```bash
zrf doctor
zrf smoke-receive
zrf smoke-send
```
When a Continuous Integration test passes, it simply means that the reference flow we're using is working as expected within the given parameters. However, this passing result doesn't necessarily mean that our software development kit, application, or overall production is completely ready or certified.
### Upstream Merge Opportunities
This project doesn't need any changes to be made to the existing Zcash repository.
The main output will be a separate reference repository. This repository will rely on the public Android SDK as a dependency. It will also include links to the official SDK documentation where necessary.
Possible future upstream opportunities may include:
* linking the kit from developer documentation
* reusing fixture patterns in SDK examples
* using common setup failures to improve future docs
This project is still worthwhile even if it doesn't get merged upstream.
## **Explicit Non-Goals**
This project will not include:
* iOS support
* Zaino support
* Zallet support
* Zebra internals
* lightwalletd infrastructure deployment
* hosted devnet
* public endpoints
* public dashboard
* SDK wrapper
* generated SDK package
* conformance testing
* cross-implementation validation
* protocol correctness claims
* wallet recovery
* wallet database parsing
* RPC migration tooling
* exchange integration
* merchant payment tooling
* mainnet fund handling
* testnet fund handling
* user wallet data collection
### Hardware/Software Costs (USD)
$0
### Hardware/Software Justification
n/a
### Service Costs (USD)
$0
### Service Costs Justification
n/a
### Compensation Costs (USD)
$12,500
### Compensation Costs Justification
I already built the basic version of the product. This grant will help me finish the work needed to make it ready for release as a complete version 1 package.
Budget Breakdown:
* MVP hardening, version matrix, and fixture cleanup: **$2,500**
* Get smoke path stabilization and checks for expected output: **$2,500**
* controlled shielded-send smoke path: **$3,500**
* The cost for CI workflow, regression checks, and output snapshots is **$2,000**.
* quickstart, troubleshooting notes, packaging, and review iteration: **$2,000**
### Total Budget (USD)
$12,500
### Previous Funding
No
### Previous Funding Details
n/a
### Other Funding Sources
No
### Other Funding Sources Details
_No response_
### Implementation Risks
### **Risk 1: The project could be mistaken for documentation work**
**Mitigation:**
The deliverable is based on commands, fixtures, expected outputs, and CI. Documentation is limited to setup, command usage, expected results, troubleshooting, and non-goals.
### **Risk 2: The Android SDK may change**
**Mitigation:**
The kit will use a pinned reference matrix. It will only claim that the included smoke paths pass under the stated SDK version, fixture bundle, and local test mode.
### **Risk 3: Fixture-backed flows may not represent production behavior**
**Mitigation:**
This project doesn't promise to cover everything. It just checks a small, local path to make sure things are working okay for onboarding and smoke testing.
### **Risk 4: Scope could expand into a broad Zcash integration framework**
**Mitigation:**
The current version, v1, only works with Android SDK smoke paths. It doesn't support other platforms like iOS. Also, some other things are not included, such as Zaino, Zallet, Zebra, lightwalletd infrastructure, hosted services, and conformance testing. These are outside the scope of what v1 can do.
### **Risk 5: You may ask why this is not inside the SDK repo**
**Mitigation:**
This project doesn't change the SDK itself and doesn't need the people in charge of the SDK to do anything. It's just a helpful tool for developers who use the public Android SDK. The project is separate from the SDK, so it doesn't affect it directly. It's meant to be used by developers as a reference, to make their work easier.
### Potential Side Effects
A developer may overinterpret a passing smoke test as proof that their full app is production-ready.
To make sure everyone understands, the kit will clearly explain that passing the smoke tests only shows that the basic reference flow works with the included fixtures. It doesn't guarantee that the app is secure, that the protocol is correct, or that it's ready for production. It also doesn't test how the whole wallet will behave in real-life situations.
### Success Metrics
The project is successful when:
* a reviewer can clone the repository and run `zrf doctor`
* The doctor checks the local environment and reference matrix to make sure everything is working correctly.
* `zrf smoke-receive` runs the receive/sync reference path and matches expected output
* The `zrf smoke-send` command is used to run the controlled send reference path, which then matches the expected output, ensuring that the system functions as intended.
* fixture data is included and versioned
* expected output snapshots are included
* CI runs all three commands successfully
* documentation explains setup, commands, expected results, limits, and non-goals
* No personal financial information, actual money, or external services are needed, and there's no connection to other systems required.
### Startup Funding (USD)
$0
### Startup Funding Justification
n/a
### Milestone Details
```milestones.yaml
* **Milestone: 1**
**Amount (USD): 3500**
**Expected Completion Date:** 2026-07-12
**User Stories:**
* "When working with Zcash as an Android developer, it's helpful to have a simple way to check if my local setup is ready to go. I'd like a single command that verifies my environment, so I can be sure I'm good to start debugging my app without any issues."
* "I need a setup that includes a pinned matrix and fixtures, so I can verify the project's claims and see exactly what it's supposed to be validating, this way I can have a clear understanding of what's being tested and make sure everything is working as it should."
**Deliverables:**
* hardened `reference-matrix.yaml`
* cleaned fixture bundle structure
* stabilized `zrf doctor` command
* expected output for `doctor`
* updated quickstart for MVP baseline
**Acceptance Criteria:**
* a reviewer can copy the repository, run the command `zrf doctor`, and view the pass or fail results, which are compared to a fixed reference matrix
* **Milestone: 2**
**Amount (USD): 3500**
**Expected Completion Date:** 2026-07-26
**User Stories:**
* "I'm building an Android app and I want to test the smoke detection feature on my local machine, so I can make sure it's working correctly before I start coding my own stuff."
* "As a reviewer, I want fixture-backed expected outputs, so that I can confirm the result without relying on external services."
**Deliverables:**
* disposable fixture-backed wallet setup
* address derivation flow
* fixture-backed sync flow
* stabilized `zrf smoke-receive` command
* expected output snapshot for receive/sync
* output comparison checks
**Acceptance Criteria:**
* You can test `zrf smoke-receive` on your own computer to make sure it works as expected and gives the right result.
* **Milestone: 3**
**Amount (USD): 5500**
**Expected Completion Date:** 2026-08-16
**User Stories:**
* "I need to test the smoke send process on my local setup as an Android developer, so I can make sure the SDK works correctly and does what it's supposed to do in the reference setup."
* "I want to make sure I get clear and straightforward results, so I can easily check if the kit is complete without having to guess or interpret anything."
**Deliverables:**
* fixture-backed shielded-send path
* memo-bearing send fixture flow
* `zrf smoke-send` command
* expected output snapshot for send flow
* CI running `doctor`, `smoke-receive`, and `smoke-send`
* final README
* troubleshooting notes
* non-goals and known-limits section
**Acceptance Criteria:**
* reviewer can run all three commands locally
* CI passes all three commands
* The expected results are provided and they match the command outputs.
* documentation explains setup, outputs, limits, and non-goals
```
### Supporting Documents
```files.yaml
* **MVP repository and demo materials:**
`https://github.com/steven3002/zcash-reference-flow-kit`
* Demo video: https://drive.google.com/file/d/1-W7awOBCpdzw-JqafVLx6cmaTRPMq_eb/view?usp=sharing
* **Zcash Android Wallet SDK repository:**
`https://github.com/zcash/zcash-android-wallet-sdk`
* **Android SDK consumer documentation:**
`https://github.com/zcash/zcash-android-wallet-sdk/blob/main/docs/Consumers.md`
```