[#1924] Add Android voting snapshot wallet notes and note witnesses#1951
Merged
Conversation
Validate selected bundle note identities, verify generated witnesses before replacing cached rows, and make the delete/store operation atomic. Also document the direct incrementalmerkletree dependency and reuse the existing note scope constants.
Return witness verification as a boolean, make tree-state storage exception-only, and keep BlockHeight/AccountUuid at the typesafe Kotlin boundary. Adds test-only JNI fixture hooks used by the follow-up coverage commit.
Add focused Android JNI coverage for FVK/root extraction, witness verification, Rust-built note/witness arrays, and tree-state storage. Extend typesafe wrapper tests to assert forwarding for tree-state storage and generated witness retrieval.
noop-sk
reviewed
May 12, 2026
noop-sk
reviewed
May 12, 2026
c65067e to
5cc3c41
Compare
greg0x
commented
May 12, 2026
chore: refresh zcash_voting 0.5.11 lock chore: use released zcash_voting 0.5.11
f8c1e31 to
cb040af
Compare
fd4bc88 to
0f3d3f9
Compare
13 tasks
noop-sk
reviewed
May 13, 2026
3aa29c5 to
97925a9
Compare
noop-sk
previously approved these changes
May 13, 2026
nullcopy
reviewed
May 13, 2026
nullcopy
requested changes
May 13, 2026
05e3356 to
a2c049e
Compare
nullcopy
previously approved these changes
May 13, 2026
a2c049e to
35e546f
Compare
35e546f to
de35143
Compare
nullcopy
approved these changes
May 13, 2026
This was referenced May 13, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of zodl-inc/zodl-android#2193.
Slice of #1924 (umbrella draft PR being split into reviewable pieces).
Stacked on #1950 (PR 5 — delegation proof + submission).
Resolves MOB-1109
Why
Sixth slice of the Android shielded-voting integration. PR 5 (#1950) finishes
the delegation half (PIR precompute, proof + progress callback, submission).
This PR introduces the snapshot input-prep path that vote construction will
consume in PR 7: extracting wallet notes at a historical snapshot height,
storing the matching tree state in the voting DB, and generating per-bundle
note witnesses against that snapshot.
No public
Synchronizervoting API is added. Wallet DB access from the votingbackend goes through a new internal
SdkSynchronizer.getWalletDbPathForVoting()rather than a public
getWalletDbPath()accessor (one of the open decisions inthe split plan).
Not included
Review focus
Primary review track: core-dev. Secondary: mobile-app-dev.
getWalletDbPathForVoting()asinternal suspendonSdkSynchronizer—whether this is the right shape, or whether voting note extraction should go
through a narrower SDK API instead.
UFVK, and network binding for
getWalletNotes.voting/notes.rs.extractNcRoot.filtering and stale cached witness replacement behavior.
voting/helpers.rs(Orchard FVK bytes, TreeState bytes, account UUID, witness payload sizes).
JniNoteInfo,JniWitnessData) and how the typesafe layerenforces size/count invariants before handing data back to the SDK.
Validation
cargo check --manifest-path backend-lib/Cargo.toml --lockedcargo fmt --manifest-path backend-lib/Cargo.toml --check./gradlew :backend-lib:compileReleaseKotlin :sdk-lib:compileReleaseKotlin./gradlew ktlint detektAll./gradlew checkPropertiesgit diff --checkAuthor
Reviewer