Introduction
This document defines the procedures for assigning DA nodes to NomosDA subnetworks. It covers two main components:
- Initial assignation of nodes to subnetworks upon DA network formation or significant topology change.
- Refresh mechanism, used to reassign nodes after attrition (node churn), while minimizing disruption to stable nodes.
The primary design goal is to ensure that all subnetworks remain sufficiently populated for data redundancy and availability, while minimizing node movement during regular operations.
Parameter |
Description |
Nomos Values |
N_S |
Number of subnetworks |
2048 |
N |
Number of active DA nodes |
|
DeclarationId |
Unique identity of a DA node |
Public key |
SubnetworkId |
Index from 0 to N_S - 1 |
0, 1, ..., 2047 |
minimal_subnet_size |
Desired minimum number of nodes per subnet |
2 or more |
NomosDA relies on distributing encoded blob columns to 2048 virtual subnetworks (N_S = 2048
). DA nodes are assigned to one or more of these subnetworks, where they verify, store, and serve shares. For correctness and liveness, each subnetwork must have at least one healthy node — ideally more, to tolerate node attrition.
The subnetwork assignment must:
- Work when the number of DA nodes
N
is less than, equal to, or greater than N_S
.
- Be deterministic so that clients and DA nodes agree on subnetwork membership.
- Support gradual expansion of the network and stable refreshes with minimal churn.
- Maintain load balance across subnetworks as much as possible.
Initial Assignation
- How important is uniform coverage of subnetworks during normal operation?
- Should we prioritize having exactly the same number of nodes per subnetwork, or is it acceptable if some subnetworks have fewer nodes than others?
- When the total number of nodes is not divisible by the number of subnetworks, how should the surplus nodes be distributed?
- Should we assign extra nodes to the subnetworks with the fewest participants or randomly distribute them?
- When there are fewer nodes than subnetworks, each node must be responsible for multiple subnetworks. How should we select which subnetworks a node is assigned to?