func (s *Store) GetVoteResult(seq uint64) (*state.VoteResult, error) {
data := s.db.Get(calcVoteResultKey(seq))
if data == nil {
- return nil, errors.New("can't find the vote result by given sequence")
+ return nil, protocol.ErrNotFoundVoteResult
}
vr := &state.VoteResult{}
}
// SaveChainStatus save the core's newest status && delete old status
-func (s *Store) SaveChainStatus(node *state.BlockNode, view *state.UtxoViewpoint) error {
+func (s *Store) SaveChainStatus(node, irreversibleNode *state.BlockNode, view *state.UtxoViewpoint, voteMap map[uint64]*state.VoteResult) error {
batch := s.db.NewBatch()
if err := saveUtxoView(batch, view); err != nil {
return err
}
- bytes, err := json.Marshal(protocol.BlockStoreState{Height: node.Height, Hash: &node.Hash})
+ if err := saveVoteResult(batch, voteMap); err != nil {
+ return err
+ }
+
+ bytes, err := json.Marshal(protocol.BlockStoreState{
+ Height: node.Height,
+ Hash: &node.Hash,
+ IrreversibleHeight: irreversibleNode.Height,
+ IrreversibleHash: &irreversibleNode.Hash,
+ })
if err != nil {
return err
}
return nil
}
-// SaveVoteResult update the voting results generated by each irreversible block
-func (s *Store) SaveVoteResult(vr *state.VoteResult) error {
- bytes, err := json.Marshal(vr)
- if err != nil {
- return err
- }
+// saveVoteResult update the voting results generated by each irreversible block
+func saveVoteResult(batch dbm.Batch, voteMap map[uint64]*state.VoteResult) error {
+ for _, vote := range voteMap {
+ bytes, err := json.Marshal(vote)
+ if err != nil {
+ return err
+ }
- s.db.Set(calcVoteResultKey(vr.Seq), bytes)
+ batch.Set(calcVoteResultKey(vote.Seq), bytes)
+ }
return nil
}