Skip to content

Pin qr_orchard protocol API#94

Open
czarcas7ic wants to merge 16 commits into
mainfrom
adam/qrorchard-protocol-api
Open

Pin qr_orchard protocol API#94
czarcas7ic wants to merge 16 commits into
mainfrom
adam/qrorchard-protocol-api

Conversation

@czarcas7ic

Copy link
Copy Markdown
Collaborator

Pins orchard to Valar's qr_orchard protocol API revision and updates note construction call sites for the explicit note version API. The README and changelog now describe the forked dependency source.

@czarcas7ic czarcas7ic marked this pull request as ready for review June 14, 2026 16:53

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 84afbc64ac

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread benches/delegation.rs Outdated
continue;
}
let note = Note::from_parts(recipient, value, rho, rseed.unwrap());
let note = Note::from_parts(recipient, value, rho, rseed.unwrap(), NoteVersion::DEFAULT);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use V3 notes in the delegation benchmark

When cargo bench runs this helper, the notes are passed into build_delegation_bundle(...).unwrap() in the same file; in the pinned qr_orchard revision NoteVersion::DEFAULT is still V2, while the builder now rejects every non-V3 real note via UnsupportedNoteVersion. The benchmark therefore panics before measuring keygen/proving; construct these benchmark inputs with NoteVersion::V3 instead.

Useful? React with 👍 / 👎.

Comment thread src/delegation/builder.rs
}
for (index, input) in real_notes.iter().enumerate() {
let note_version = input.note.version();
if note_version != DELEGATION_NOTE_VERSION {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Enforce V3 where proofs are verified

If consumers rely on the new Ironwood/V3-only requirement for accepted delegation proofs, this builder-side check is not sufficient: the verifier never sees note.version(), and the circuit still treats rcm as a private opening of NoteCommit, so a prover using a fork/alternate constructor can produce a valid proof for a legacy V2 note commitment. The version or V3 rcm derivation needs to be enforced by the circuit or by an authenticated verifier-side root/policy, not only by the honest builder path.

Useful? React with 👍 / 👎.

Move the orchard pin from cab7d78 to the head of zcash/orchard#510
(dev/tx-id: the v6 / Ironwood TX-id + Auth-ID work). That branch was
rebased with public-API renames, so this is a source port, not just a
rev bump:

- Note::new reordered to (.., version, rng); swap the two args at every
  call site.
- RandomSeed::rcm -> rcm_v2 (the V2 derivation; qr_rcm -> rcm_v3).
- NoteVersion::DEFAULT removed (it was = V2); replace with V2, except
  real_proof_roundtrip's real delegated note, which must be V3
  (DELEGATION_NOTE_VERSION) — that test was latently red before this
  bump because it built a V2 note the builder rejects.

The new orchard circuit Config rotates the delegation and vote-proof
verifying keys (share-reveal unchanged); update both VK-fingerprint
tripwires accordingly. Intentional VK rotation.

Verified: cargo check --all-targets --all-features clean; 141/141 unit
tests pass; all ignored delegation proving tests pass (happy_path,
real_proof_roundtrip); all three VK fingerprint tripwires green.
Non-breaking orchard update; vote-proof and delegation verifying-key fingerprints are unchanged.
Non-breaking orchard update; vote-proof and delegation verifying-key fingerprints are unchanged.
Move the orchard dep from zcash/orchard 30c4ea27 (feat-ironwood) to
valargroup/orchard adam/pczt-recompute-helpers (HEAD d05e3b41). That branch is
30c4ea27 plus one commit adding the pczt recompute module for omitted derived
fields; it touches only src/pczt*, so no circuit/note APIs change here.

Pinned by branch (not rev) so downstream crates that pin orchard by this same
branch unify on a single orchard node: Cargo treats ?branch= and ?rev= as
distinct sources even at the same commit, which would otherwise duplicate every
orchard type across the dependency boundary.

The rcm derivations were already version-tagged on this line (rcm -> rcm_v2,
qr_rcm -> rcm_v3, upstream b18ce41); the rename is a pure value-preserving
rename for V2 (same PrfExpand::ORCHARD_RCM body, same signature), and this
crate's V2 callsite (delegation/circuit.rs rcm_scalar_for_note_parts) already
calls rcm_v2. Build + tests green.
@czarcas7ic czarcas7ic force-pushed the adam/qrorchard-protocol-api branch from 8f7f74e to 8ed4466 Compare June 27, 2026 03:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant