From fe0aa4d30e27108b37ba0f4fa0d40d7c5f831623 Mon Sep 17 00:00:00 2001 From: JayT106 Date: Wed, 21 Sep 2022 05:06:13 -0400 Subject: [PATCH] Normalise GenesisDoc before saving to state (#6059) (#9458) --- 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 220028f41..afe35d9c0 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -77,6 +77,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) - [crypto/ed25519] \#5632 Adopt zip215 `ed25519` verification. (@marbar3778) - [crypto/ed25519] \#6526 Use [curve25519-voi](https://github.com/oasisprotocol/curve25519-voi) for `ed25519` signing and verification. (@Yawning) diff --git a/node/node.go b/node/node.go index d6c2bba2e..902943288 100644 --- a/node/node.go +++ b/node/node.go @@ -1385,6 +1385,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 3e0d89392..51ce5a3f8 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