Owner:  @Daniel Sanchez Quiros & @Mehmet

Reviewers: 🟢@Daniel Kashepava 🟢@Álvaro Castro-Castilla 🟢@Thomas Lavaur 🟢 @Mehmet

Introduction

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:

Definitions

Overview

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.

Construction

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.

Glossary

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]]

Encoder

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📄}