---
# System prepended metadata

title: NEBRA UPA L2 Datasheet

---

# NEBRA L2-UPA Datasheet

> **TL;DR**
> NEBRA L2-UPA is derived from [NEBRA UPA](https://docs.nebra.one/upa-protocol-specification), a protocol deployed on Ethereum L1. NEBRA UPA L2 shared the same core contracts with NEBRA UPA, the main difference is that NEBRA L2-UPA only support off-chain proof submission via RPC, which is much less than the on-chain proof submission would cost.

## NEBRA L2-UPA Workflow
![l2-upa](https://hackmd.io/_uploads/r1iKn5btR.png)

The high level workflow that World App uses NEBRA L2-UPA would be:

1. Submitter (i.e. the World App's supporting infrasctructure) submits the batched proofs and a deadline to NEBRA UPA RPC.
2. NEBRA UPA RPC returns an **Aggregatation commitment** to submitter, which contains:
    - `deadline`: the confirmed deadline, which is the lastest block that the proof batch should be finalized
    - `submission id`
3. NEBRA's offchain prover generates the aggregated proof, and submitted to the L2-UPA contract deployed on WorldChain. 
4. The Worldcoin smart contract now can query the state of NEBRA L2-UPA contract to execute the business logic.

> NOTE: this is a simplified verison which omit the fee processing logic

## NEBRA UPA Versions and Roadmap

Below is the planned NEBRA UPA versions and planned launch time:

- **UPA v1.2/L2-UPA v1.2**: support 3 versions of Groth16 as input, i.e. SnarkJS, Gnark Groth16, Gnark Groth16 with commitment, proof aggregation uses Halo2. UPA 1.2 (on ethereum) supports both onchain and offchain (RPC) proof submission. L2-UPA v1.2 only support offchain proof submission.
- **UPA v2.0/L2-UPA v2.0** support above mentioned 3 versions of Groth16 proofs as input, as well as Plonk, Fflonk, Halo2, Honk (more to be added). UPA v2.0 uses Succinct SP1 + NEBRA customized precompiles. The final aggregated proof is Groth16.


| Version  | Deployed Chain | Status |Launch Time |
| -------- | -------------- | -------|-------- |
| UPA V1.2 |  Ethereum      | Audited | August 7, 2024 |
| UPA V2.0 | Ethereum | Prototype done, Production WIP | September 30, 2024* |
| L2-UPA v1.2 | World Chain | Audit start in August 10 | September 10, 2024* |
| L2-UPA v2.0 | World Chain | WIP | October 10, 2024* |

> Note: * means best estimate

## L2-UPA Gas Cost

- **Projected** L2-UPA v1.2 amortized gas cost per proof and latency with different batch sizes:


| Batch size | Latency (sec) | L1 Gas  | L2 Gas |
| ---------- | --------------| ------- |--------|
| 256        |   673         | 113     | 1,465  |
| 512        | 1,138         | 56      | 732    |
| 1,024      | 1,450         | 28      | 366    |
| 2,048      | 1,950         | 14      | 183    |

- **Projected** L2-UPA v2.0 amortized gas cost per proof with different batch sizes (the latency will be similar to v1.2, more details later):

| Batch size  | L1 Gas  | L2 Gas |
| ----------- |  ------ |--------|
| 256         |  10     | 1,172  |
| 512         |  5      | 586    |
| 1,024       |  3      | 293    |
| 2,048       |  1      | 146    |

- Compare L2-UPA L1 gas cost:

![upa-l1-gas](https://hackmd.io/_uploads/r1wt9jWtR.png)

- Compare L2-UPA L2 gas cost:
![upa-l2-gas](https://hackmd.io/_uploads/B13EoobYC.png)



## Further Read

1. [NEBRA UPA L2 Design](https://hackmd.io/@nebra-one/By53jTJyA)