diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index c39b78551..b84243302 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -65,6 +65,7 @@ Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermi - [consensus] \#5987 Remove `time_iota_ms` from consensus params. Merge `tmproto.ConsensusParams` and `abci.ConsensusParams`. (@marbar3778) - [types] \#5994 Reduce the use of protobuf types in core logic. (@marbar3778) - `ConsensusParams`, `BlockParams`, `ValidatorParams`, `EvidenceParams`, `VersionParams`, `sm.Version` and `version.Consensus` have become native types. They still utilize protobuf when being sent over the wire or written to disk. +- [node] \#6059 Validate and complete genesis doc before saving to state store (@silasdavis) ### BUG FIXES diff --git a/node/node.go b/node/node.go index ed1bb20fe..69e92d4a4 100644 --- a/node/node.go +++ b/node/node.go @@ -1650,6 +1650,11 @@ func LoadStateFromDBOrGenesisDocProvider( if err != nil { return sm.State{}, nil, err } + + err = genDoc.ValidateAndComplete() + if err != nil { + return sm.State{}, nil, fmt.Errorf("error in genesis doc: %w", err) + } // save genesis doc to prevent a certain class of user errors (e.g. when it // was changed, accidentally or not). Also good for audit trail. if err := saveGenesisDoc(stateDB, genDoc); err != nil { diff --git a/state/state.go b/state/state.go index 430dbf88b..80d337e88 100644 --- a/state/state.go +++ b/state/state.go @@ -337,7 +337,7 @@ func MakeGenesisDocFromFile(genDocFile string) (*types.GenesisDoc, error) { func MakeGenesisState(genDoc *types.GenesisDoc) (State, error) { err := genDoc.ValidateAndComplete() if err != nil { - return State{}, fmt.Errorf("error in genesis file: %v", err) + return State{}, fmt.Errorf("error in genesis doc: %w", err) } var validatorSet, nextValidatorSet *types.ValidatorSet