+func (c *blockCache) lookupVoteResult(seq uint64) (*state.VoteResult, error) {
+ if vr, ok := c.getVoteResult(seq); ok {
+ return vr, nil
+ }
+
+ seqStr := strconv.FormatUint(seq, 10)
+ voteResult, err := c.singleVoteResult.Do(seqStr, func() (interface{}, error) {
+ v, err := c.fillVoteResultFn(seq)
+ if err != nil {
+ return nil, err
+ }
+
+ if v == nil {
+ return nil, fmt.Errorf("There are no vote result with given seq %s", seqStr)
+ }
+
+ c.addVoteResult(v)
+ return v, nil
+ })
+ if err != nil {
+ return nil, err
+ }
+ return voteResult.(*state.VoteResult), nil
+}
+