Owner: @Daniel Sanchez Quiros & @Mehmet
Reviewers: 🟢@Daniel Kashepava 🟢@Álvaro Castro-Castilla 🟢@Thomas Lavaur 🟢 @Mehmet
This document describes the encoding and verification processes of NomosDA, which is the data availability (DA) solution used by the Nomos blockchain. NomosDA provides an assurance that all data from Nomos zones - referred to as blobs - are accessible and verifiable by every network participant.
This document presents an implementation specification describing how:
Encoder: An encoder is any actor who performs the encoding process described in this document. This involves committing to the data, generating proofs, and submitting the result to the DA layer.
In the Nomos architecture, a Zone executor typically acts as the encoder, but the role is not exclusive to Zones, sovereign rollup sequencers or any actor in the DA layer can also act as encoders.
Verifier: Verifies its portion of the distributed blob data as per the verification protocol. In the Nomos architecture, the DA nodes act as the verifiers.
In the encoding stage, the encoder takes the DA parameters and the padded blob data and creates an initial matrix of data chunks. This matrix is expanded using Reed-Solomon coding and various commitments and proofs are created for the data.
When a verifier receives a sample, it verifies the data it receives from the encoder and broadcasts the information if the data is verified. Finally, the verifier stores the sample data for the required length of time.
The encoder and verifier use the NomosDA cryptographic protocol to carry out their respective functions. These functions are implemented as abstracted and configurable software entities that allow the original data to be encoded and verified via high-level operations.
Name | Description | Representation |
---|---|---|
Commitment |
Commitment as per the ‣ | bytes |
Proof |
Proof as per the ‣ | bytes |
ChunksMatrix |
Matrix of chunked data. Each chunk is 31 bytes. Row and Column sizes depend on the encoding necessities. | List[List[bytes]] |
An encoder takes a set of parameters and the blob data, and creates a matrix of chunks that it uses to compute the necessary cryptographic data. It produces the set of Reed-Solomon (RS) encoded data, the commitments, and the proofs that are needed prior to dispersal.
flowchart LR
A[DaEncoderParams] -->|Input| B(Encoder)
I[31bytes-padded-input] -->|Input| B
B -->|Creates| D[Chunks matrix]
D --> |Input| C[NomosDA <a href='<https://www.notion.so/Cryptographic-Protocol-Details-4bf3bb62cfb64422ab48b5b60aab6a73>'>encoding</a>]
C --> E{Encoded data📄}