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