paritytech / paritytech/verifiablejs

Expose multi-ring batch verification (ark-vrf #92)

Open
#21 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement rust
Dominant language
Rust
Stars
1
Forks
1
Avg merge
1h 59m
Merged PRs (30d)
4

Description

Summary

davxy/ark-vrf#92 ("Multi-ring batch proof", merged Apr 2026, shipped in ark-vrf 0.5.0) adds a multi-ring batch verifier: proofs from multiple rings that share the same KZG SRS can be aggregated into a single batched pairing check. This is a verification-speed optimization beyond the single-ring batching we expose today.

This issue tracks adopting that capability and exposing a multi-ring batch binding from verifiablejs.

Where we stand in the dependency chain

verifiablejs (WASM bindings)
  └─ paritytech/verifiable  (pinned rev f65b39df…)
        └─ ark-vrf 0.5.0  ← multi-ring batch already present here
  • ark-vrf 0.5.0 (which contains #92) is already transitively in our build via the pinned verifiable rev. The crypto primitive is compiled in.

  • The blocker is not ark-vrf. It's the verifiable crate's API surface. GenerateVerifiable::batch_validate takes a single members commitment:

    fn batch_validate(
        config: Self::Config,
        members: &Self::Members,            // <-- one ring
        proofs: &[BatchProofItem<Self::Proof>],
    ) -> Result<Vec<Alias>, Error>
    

    So every BatchProofItem is verified against the same ring. Multi-ring batching is not reachable through this signature.

  • Our batch_validate binding (packages/verifiablejs/src/lib.rs:273) inherits the same single-ring limitation.

What's needed (upstream-gated)

  1. paritytech/verifiable must expose a multi-ring batch method on GenerateVerifiable (e.g. accepting &[(Members, Vec<BatchProofItem>)] or equivalent) that calls into ark-vrf's multi-ring BatchVerifier.
  2. Then verifiablejs adds a new binding, e.g. multi_ring_batch_validate, taking multiple SCALE-encoded commitments + their proof items, returning aliases grouped per ring.

Action

  • Open / track a request on paritytech/verifiable to surface the multi-ring batch API.
  • Once available, bump the verifiable rev and add the multi_ring_batch_validate binding + tests.

This is a perf enhancement, not a correctness fix — no urgency. Filing to track until upstream verifiable is ready.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with packages/verifiablejs/src/lib.rs:273 and review the existing single-ring batch_validate binding. Check whether paritytech/verifiable has added the required multi-ring GenerateVerifiable API; the work is blocked until that upstream surface exists. Done means bumping the verifiable revision, adding multi_ring_batch_validate for grouped commitments and proof items, and adding tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust, wasm
Domain
api, cryptography
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.