added nomos/raw/nomosda-encoding.md draft - #156
Conversation
| 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: |
There was a problem hiding this comment.
| This document presents an implementation specification describing how: | |
| This specification describes the following: |
| and broadcasts the information if the data is verified. Finally, | ||
| the verifier stores the sample data for the required length of time. |
There was a problem hiding this comment.
| and broadcasts the information if the data is verified. Finally, | |
| the verifier stores the sample data for the required length of time. | |
| and broadcasts the information if the data is verified. | |
| Finally, the verifier stores the sample data for the required length of time. |
Use sembr throughout the spec.
| verifiers. These functions rely on primitives such as **polynomial commitments** and | ||
| **Reed-Solomon erasure codes**, the details of which are outside the scope of this | ||
| document. |
There was a problem hiding this comment.
Nomos team could add a reference to a relative paper or blog post for polynomial commitments and Reed-Solomon erasure codes. For now it is not important.
| These details, as well as introductions to the cryptographic primitives being used, | ||
| can be found in the NomosDA Cryptographic Protocol: | ||
|
|
||
| [NomosDA Cryptographic Protocol](https://www.notion.so/NomosDA-Cryptographic-Protocol-4bf3bb62cfb64422ab48b5b60aab6a73) |
There was a problem hiding this comment.
The Nomos notion links are private and should be removed. Can just add a statement like, "This specification is a work in progress."
| @@ -0,0 +1,209 @@ | |||
| --- | |||
| title: NOMOSDA-ENCODING | |||
There was a problem hiding this comment.
I suggest when writing a title, start with the project name followed by the short-name of the specification. E.g. NOMOS-DA-ENCODING. The project name should be alone as an identifier within the RFC-index.
This PR rewrites the Mix Protocol RFC for clarity, layering, and implementability. It reorganizes the spec into a modular structure aligned with RFC 7322 and RFC 2119, with clean separation between protocol logic, integration, and pluggable components. ### Goals - Clearly define Mix as a **message-based routing protocol**, not a transport or application-layer solution. - Support **per-message anonymity** via a `mixify` flag and **external integration** through Entry and Exit layers. - Adopt a clean, layered structure: motivation → integration → routing model → cryptographic structure → node behavior. - Use correct RFC formatting, keywords, and SEMBR for implementation clarity. ### Changes Completed in This PR #### Sections 0–5: Foundational Structure and Protocol Layering * [x] **Abstract**: Concise, non-repetitive summary of protocol purpose and scope. * [x] **§1 Introduction**: Cleanly describes protocol role, document scope, and integration model. * [x] **§2 Terminology**: Defines all key terms; includes correct use of `MUST`, `SHOULD`, and informal variants. * [x] **§3 Motivation and Background**: Articulates need for sender anonymity in libp2p; includes `§3.1 Comparison with Tor`. #### Section 4 Mixing Strategy and Packet Format * [x] **§4.1 Mixing Strategy**: Defines continuous-time mixing; justifies choice over batching. * [x] **§4.2 Packet Format Overview**: Defines what a mix packet must achieve; outlines Sphinx format properties and rationale. #### Section 5 Protocol Overview and Integration * [x] **§5 Protocol Overview**: Clean, layered walkthrough of core protocol behavior and layering in libp2p. * [x] **§5.1 Integration with Origin Protocols**: External interface components (Mix Entry/Exit layers). * [x] **§5.2 Mixify Option**: Per-message flag defined. * [x] **§5.3 Why a Protocol, Not a Transport**: Explains why Mix is layered as a libp2p protocol, not a transport. * [x] **§5.4 Protocol Interaction Flow**: Three-phase diagram and explanation (entry → routing → exit). #### Section 6 Pluggable Components * [x] Discovery: advertise Mix support via ENR, X25519 key * [x] Delay strategy: sender-defined per-hop delay * [x] Spam protection: PoW/VDF/RLN options, exit node validation * [x] Cover traffic: periodic loops for unobservability * [x] Incentivization: nodes MUST participate to send #### Section 7 Core Mix Protocol Responsibilities * [x] Define Sender, Intermediary, Exit node roles * [x] Specify lifecycle and message flow per role #### Section 8 Sphinx Packet Format (Detailed Spec) * [ ] Full field definitions (α, β, γ, δ, delays, MACs) * [ ] Encoding and padding behavior #### Section 9 Node Behavior (Mix Protocol Handler) * [ ] Describe sender node logic: path selection, packet wrapping * [ ] Describe intermediary/exit node behavior: decryption, delay, forwarding #### Section 10 Limitations and Future Work * [ ] SURB-based reply support (unimplemented) * [ ] DoS/Sybil attack surface * [ ] Path overlap, message reordering, end-to-end acks #### Appendices * [ ] Appendix A: Proof-of-Work Example * [ ] Appendix B: ENR-Based Discovery Example
Improved x3dh.md in the waku/standards/application/53 folder --------- Co-authored-by: Jimmy Debe <91767824+jimstir@users.noreply.github.com>
danielSanchezQ
left a comment
There was a problem hiding this comment.
I think the info here is not up to the latest document in notion.
| | `aggregated_column_proof` | Proof of the `column_commitment` hash related to the `aggregated_column_commitment` | `Proof` | | ||
| | `row_commitments` | Commitments for each matrix row | `List[Commitment]` | | ||
| | `row_proofs` | Proofs for each chunk in column corresponding to the encoded rows | `List[Proofs]` | | ||
| | `blob_id` | Computed as the hash (`sha3_256`) of `aggregated_column_commitment` + `row_commitments` | `bytes` | |
There was a problem hiding this comment.
This is not updated. We use blake2b for everything.
| def blob_id(self) -> bytes: | ||
| hasher = sha3_256() | ||
| hasher.update(bytes(self.aggregated_column_commitment)) | ||
| for c in self.row_commitments: | ||
| hasher.update(bytes(c)) | ||
| return hasher.digest() |
Created nomosda-encoding.md draft on nomos/raw/ folder