From a36423ad0ee4ea970bf9c65b5c06477aa8942564 Mon Sep 17 00:00:00 2001 From: Silas Davis Date: Tue, 23 Feb 2021 13:27:42 +0100 Subject: [PATCH] Normalise GenesisDoc before saving to state (#6059) Co-authored-by: Callum --- CHANGELOG_PENDING.md | 1 + node/node.go | 5 +++++ state/state.go | 2 +- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 77d6f622da2..d3da5274e15 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -68,6 +68,7 @@ Friendly reminder, we have a [bug bounty program](https://hackerone.com/tendermi - [proto] \#9356 Migrate from `gogo/protobuf` to `cosmos/gogoproto` (@julienrbrt) - [rpc] \#9276 Added `header` and `header_by_hash` queries to the RPC client (@samricotta) - [abci] \#5706 Added `AbciVersion` to `RequestInfo` allowing applications to check ABCI version when connecting to Tendermint. (@marbar3778) +- [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 e40b72e9906..96df19665ce 100644 --- a/node/node.go +++ b/node/node.go @@ -1384,6 +1384,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 3e0d89392da..51ce5a3f810 100644 --- a/state/state.go +++ b/state/state.go @@ -317,7 +317,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