return err
}
- hash := blockHeader.Hash()
- if err := m.saveMovDatabaseState(batch, &common.MovDatabaseState{Height: blockHeader.Height, Hash: &hash}); err != nil {
+ state, err := m.calcNextDatabaseState(blockHeader)
+ if err != nil {
+ return err
+ }
+
+ if err := m.saveMovDatabaseState(batch, state); err != nil {
return err
}
return err
}
- blockHash := header.Hash()
- if (state.Hash.String() == header.PreviousBlockHash.String() && (state.Height+1) == header.Height) || state.Hash.String() == blockHash.String() {
+ if (*state.Hash == header.PreviousBlockHash && (state.Height+1) == header.Height) || *state.Hash == header.Hash() {
return nil
}
batch.Set(bestMatchStore, value)
return nil
}
+
+func (m *MovStore) calcNextDatabaseState(blockHeader *types.BlockHeader) (*common.MovDatabaseState, error) {
+ hash := blockHeader.Hash()
+ height := blockHeader.Height
+
+ state, err := m.GetMovDatabaseState()
+ if err != nil {
+ return nil, err
+ }
+
+ if *state.Hash == hash {
+ hash = blockHeader.PreviousBlockHash
+ height = blockHeader.Height - 1
+ }
+
+ return &common.MovDatabaseState{Height: height, Hash: &hash}, nil
+}