params_match_derivation and every testnet receipt check this). Two proofs depend on code
written here. Neither has been reviewed.
1. Claim circuit
vendor/orchard/src/circuit/claim.rs, shipped as a patch to orchard 0.16.0
(vendor/orchard-0.16.0-zceipt.patch).
The fork keeps every Action constraint and adds a Poseidon hash fed by the same
nk cell that
feeds CommitIvk. Two modes: the nullifier public (chain snapshots) or private (published
lists).
Review first: that nk’s cell is the one used by CommitIvk, that making the nullifier
optional drops no constraint, and that domain and tag are the only new public inputs.
Diff against the published crate:
Address::pk_d, Note::esk_bytes, Note::commitment_opening),
precomputed verifier parameters, and nothing that changes the Action circuit.
2. Sibling-account circuit
crates/zceipt-kce. A new Halo 2 circuit that proves two tags come from two hardened ZIP 32
children of one hidden coin-level key. BLAKE2b runs in the circuit, so it is k = 17.
The BLAKE2b gadget is eryxcoop/blake2b_halo2 at
6ed2fa2 (Apache-2.0, licence kept beside it), ported from midnight-proofs to Zcash’s
halo2_proofs 0.4: import paths, the lookup and gate API, and a personalization option for the
initial state. Its authors say it is not audited; neither is the port.
Review first: the port’s diff against upstream, the personalization option, the XOR table
range, and that the derivation matches ZIP 32 (a test checks it against orchard).