celestiaorg/rsmt2d

Enhance `Codec`'s decoding options

Wondertan opened this issue · 1 comments

Problem

Currently, Decode allows decoding only the entire axis. It requires a 2D bytes slice as input and reconstructs nil shares via non-nil ones. However, we now need an additional use case where we want to reconstruct only particular nil shares and not all of them. This optimization is a part of lazy-extend effort and avoids unnecessary share reconstruction for Codec

Solutions

  • change the Decode slice share inputs to have three states: built, nil, and empty(zero-length). The new empty share slices will signal to Codec that they need to be reconstructed by the provided built, while nil shares will be left untouched.
    • Less explicit and needs to be properly documented
  • add a new DecodeSome method that takes the same shares slice as input + an additional slice of bools with the same line as the shares slice, following klauspost's ReconstructSome method.
    • Allocates additional slice
    • Two code paths for lazy and non-lazy decoding that can be single.

Refs

Blocked on klauspost/reedsolomon#264

I prefer the second proposed solution because it is API additive.