ZODA focuses on ensuring data availability through a three-step process:
Encoding: Encodes data as a matrix $X$ using a code $G$ (e.g., Reed–Solomon), and generates a secondary encoding $Y$ by scaling columns of $X$ with randomness and encoding rows using another code $G'$.
Sampling: Samplers verify correctness by sampling rows from $X$ and columns from $Y$, checking for consistency with the fully encoded matrix $Z$.
Decoding: After successful sampling, nodes can reconstruct the original data $X$ from sampled rows and columns using erasure decoding.
This step ensures that the data is encoded in a way that each row and column acts as proof of correct encoding.
Detailed Steps:
Key Insight: Rows encode columns, and columns encode rows, creating redundancy that allows verification with minimal overhead.
This step allows any node to verify that the encoding is correct by sampling a small number of rows and columns.
Detailed Steps:
Check that each sampled row $X_S$ multiplied by $D_r$ matches the corresponding encoded column in $Y$:
Check that $X_S D_r g'{j} = G Y{S'}$ for each $j \in S'$.
Verify that each sampled column $Y_{S'}$ matches the expected encoding from $Z$.
Verify that $Z_{ij} = g_i^T y_j$ for all $i \in S$ and $j \in S'$.