github.com/badrootd/celestia-core@v0.0.0-20240305091328-aa4207a4b25d/docs/celestia-architecture/adr-005-decouple-blockid-and-partsetheader.md (about)

     1  # ADR 005: Decouple the PartSetHeader from the BlockID
     2  
     3  ## Changelog
     4  
     5  - 2021-08-01: Initial Draft
     6  
     7  ## Context
     8  
     9  Celestia has multiple commits to the block data via the `DataHash` and the `PartSetHeader` in the `BlockID`. As stated in the [#184](https://github.com/celestiaorg/lazyledger-core/issues/184), we no longer need the `PartSetHeader` for this additional commitment to the block's data. However, we are still planning to use the `PartSetHeader` for block propagation during consensus in the short-medium term. This means that we will remove the `PartSetHeader` from as many places as possible, but keep it in the `Proposal` struct.
    10  
    11  ## Alternative Approaches
    12  
    13  It’s worth noting that there are proposed changes to remove the `PartSetHeader` entirely, and instead use the already existing commitment to block data, the `DataAvailabilityHeader`, to propagate blocks in parallel during consensus. Discussions regarding the detailed differences entailed in each approach are documented in that ADR's PR. The current direction that is described in this ADR is significantly more conservative in its approach, but it is not strictly an alternative to other designs. This is because other designs would also require removal of the `PartSethHeader`, which is a project in and of itself due to the `BlockID` widespread usage throughout tendermint and the bugs that pop up when attempting to remove it. 
    14  
    15  ## Decision
    16  
    17  While we build other better designs to experiment with, we will continue to implement the design specified here as it is not orthogonal. https://github.com/celestiaorg/lazyledger-core/pull/434#issuecomment-869158788
    18  
    19  ## Detailed Design
    20  
    21  - [X] Decouple the BlockID and the PartSetHeader [#441](https://github.com/celestiaorg/lazyledger-core/pull/441)
    22  - [ ] Remove the BlockID from every possible struct other than the `Proposal`
    23    - [X] Stop signing over the `PartSetHeader` while voting [#457](https://github.com/celestiaorg/lazyledger-core/pull/457)
    24    - [X] Remove the `PartSetHeader` from the Header [#457](https://github.com/celestiaorg/lazyledger-core/pull/457)
    25    - [X] Remove the `PartSetHeader` from `VoteSetBits`, `VoteSetMaj23`, and `state.State` [#479](https://github.com/celestiaorg/lazyledger-core/pull/479)
    26    - [ ] Remove the `PartSetHeader` from other structs
    27  
    28  
    29  ## Status
    30  
    31  Proposed
    32  
    33  ### Positive
    34  
    35  - Conservative and easy to implement
    36  - Acts as a stepping stone for other better designs
    37  - Allows us to use 64kb sized chunks, which are well tested
    38  
    39  ### Negative
    40  
    41  - Not an ideal design as we still have to include an extra commitment to the block's data in the proposal
    42  
    43  ## References
    44  
    45  Alternative ADR [#434](https://github.com/celestiaorg/lazyledger-core/pull/434)  
    46  Alternative implementation [#427](https://github.com/celestiaorg/lazyledger-core/pull/427) and [#443](https://github.com/celestiaorg/lazyledger-core/pull/443)  
    47  [Comment](https://github.com/celestiaorg/lazyledger-core/pull/434#issuecomment-869158788) that summarizes decision