Bump zk-circuits crates to 4.3.0 (new wormhole verifier) - #684
Conversation
Swaps in the 4.3.0 wormhole verifier: aggregate private-batch fee enforcement (leaf public inputs 21 -> 22) and the private nullifier permutation (7-leaf batch at degree 15). The chain-side companions are already on main; this updates the pins and lockfile.
Matches the 4.3.0 leaf layout (input_amount is now the 22nd public input); the lib compiled but the test initializers still used the old private-side field.
Ran the ignored regenerate_ tests; the 4.2.0-era fixtures no longer deserialize against the 4.3.0 verifier. Full pallet-wormhole suite passes locally (85 passed, 0 failed).
n13
left a comment
There was a problem hiding this comment.
Reviewer model: GPT Sol
Verdict (advisory): Approve
No blocking findings.
The seven 4.3.0 pins resolve as one coherent circuit stack, and the downloaded crates match upstream release commit b224e6dcbb89c03f90fbd26f68674c3b557ef36f. The chain companion is consistent with the new 22-felt leaf layout: input_amount is authenticated by the leaf proof, consumed by the private-batch aggregate fee constraint, and not forwarded by either aggregate proof. The privately permuted nullifier multiset remains compatible with the pallet's per-segment canonical pool tag and replay checks. Both regenerated fixtures deserialize, verify against the newly generated artifacts, and exercise settlement successfully.
Validation:
cargo +nightly fmt --all -- --checkSKIP_WASM_BUILD=1 cargo check --locked -p qp-wormhole -p pallet-wormholeSKIP_WASM_BUILD=1 cargo test --locked -p pallet-wormhole --lib— 85 passed, 3 ignoredcargo test --locked -p qp-zk-circuits-common --lib permutation_switchesand... permute_digests4— 4 passed- Exact upstream
4.3.0source:cargo test --locked --release -p qp-wormhole-aggregator --lib aggregate_fee_regressions— passed git diff --check— passed
GitHub format, dependency-cooldown, clippy/doc, and large-Linux matrix checks are green at this head.
Bumps the seven zk-circuits pins (
qp-wormhole-{aggregator,circuit,circuit-builder,inputs,prover,verifier}andqp-zk-circuits-common) from=4.2.0to=4.3.0.Cargo.toml+ lockfile only; no other crates move.zk-circuits 4.3.0 carries the merged private work: aggregate private-batch fee enforcement (per-segment inequality instead of per-leaf, leaf public inputs 21 -> 22) and the private nullifier permutation (7-leaf private batch back to degree 15). The chain-side companions are already on
main—pallets/wormholesorts nullifiers per private segment for the pool tag and its build script comments assume degree_bits=15 for 7 leaves — so this pin bump is the missing piece that swaps in the new verifier.Verified locally:
cargo check -p qp-wormhole -p pallet-wormholepasses against 4.3.0 and the build script regenerates all circuit binaries; thebatch_configs_match_circuit_crateparity test guards the canonical config in CI.Note: #683 (rusty-crystals 4.1.1) touches the same
Cargo.toml/Cargo.lock; whichever merges second gets a trivial lockfile refresh.Cooldown-bypass-reason: first-party qp-wormhole 4.3.0 crates published today by our own CI; the chain-side code on main already expects the 4.3.0 circuit layout, so holding the pin at 4.2.0 for 30 days blocks the verifier upgrade.
Note for the cooldown gate: apply the
dependency-cooldown-bypasslabel — the check re-runs on labeling and reads the reason line above.