LogoLogo
NEBRA HomeGithub
  • Introduction
    • What is NEBRA UPA?
    • How it works
    • Quickstart
  • Developer Guide
    • Setup
    • Registering applications
    • Submission and verification
    • Proof explorer
    • Gas costs on L1s
    • Gas Costs on L2s
    • Testing workflow
    • Frontend integration
    • Deployments
    • Off-chain verification
  • UPA protocol specification
  • Integrating with zkVMs
    • Integrating with SP1
  • Security and Transparency
Powered by GitBook
On this page

Was this helpful?

  1. Introduction

How it works

PreviousWhat is NEBRA UPA?NextQuickstart

Last updated 9 months ago

Was this helpful?

NEBRA UPA v1 (currently v1.2) aggregates Groth16 proofs (more proof systems to be supported in 2.0) from different sources. After a certain number of proofs (our current batch size is 32) from different parties have been submitted to our address (see Deployments), our off-chain prover network will generate an aggregated proof πagg\pi_{agg}πagg​. This aggregated proof effectively states that all the proofs in this batch have been verified. By only verifying aggregated proofs on-chain, the verification cost of each proof is amortized, bringing up to 10x gas savings (see Gas costs on L1s for details).

The workflow of a blockchain application powered by zero-knowledge proof using NEBRA is as follows:

  1. Register your verification key with NEBRA UPA. This will give you a circuitId (see Registering applications)

  2. Submit your proof to NEBRA UPA together with the public input associated with the proof

  3. Wait for the event indicating that the proof is verified. After this event, application can query isVerified function to execute the application logic

Verified (or rejected) proofs can be viewed at NEBRA proof explorer:

nebrascan.io
NEBRA Overview