github.com/badrootd/nibiru-cometbft@v0.37.5-0.20240307173500-2a75559eee9b/docs/architecture/adr-004-historical-validators.md (about) 1 # ADR 004: Historical Validators 2 3 ## Context 4 5 Right now, we can query the present validator set, but there is no history. 6 If you were offline for a long time, there is no way to reconstruct past validators. This is needed for the light client and we agreed needs enhancement of the API. 7 8 ## Decision 9 10 For every block, store a new structure that contains either the latest validator set, 11 or the height of the last block for which the validator set changed. Note this is not 12 the height of the block which returned the validator set change itself, but the next block, 13 ie. the first block it comes into effect for. 14 15 Storing the validators will be handled by the `state` package. 16 17 At some point in the future, we may consider more efficient storage in the case where the validators 18 are updated frequently - for instance by only saving the diffs, rather than the whole set. 19 20 An alternative approach suggested keeping the validator set, or diffs of it, in a merkle IAVL tree. 21 While it might afford cheaper proofs that a validator set has not changed, it would be more complex, 22 and likely less efficient. 23 24 ## Status 25 26 Implemented 27 28 ## Consequences 29 30 ### Positive 31 32 - Can query old validator sets, with proof. 33 34 ### Negative 35 36 - Writes an extra structure to disk with every block. 37 38 ### Neutral