-func (c *Chain) getConsensusNode(prevBlockHash *bc.Hash, pubkey string) (*state.ConsensusNode, error) {
- consensusNodeMap, err := c.getConsensusNodes(prevBlockHash)
- if err != nil {
- return nil, err
- }
-
- node, exist := consensusNodeMap[pubkey]
- if !exist {
- return nil, errNotFoundConsensusNode
- }
- return node, nil
-}
-
-// GetBlocker return blocker by specified timestamp
-func (c *Chain) GetBlocker(prevBlockHash *bc.Hash, timeStamp uint64) (string, error) {
- consensusNodeMap, err := c.getConsensusNodes(prevBlockHash)
- if err != nil {
- return "", err
- }
-
- prevVoteRoundLastBlock, err := c.getPrevRoundLastBlock(prevBlockHash)
- if err != nil {
- return "", err
- }
-
- startTimestamp := prevVoteRoundLastBlock.Timestamp + consensus.BlockTimeInterval
- order := getBlockerOrder(startTimestamp, timeStamp, uint64(len(consensusNodeMap)))
- for xPub, consensusNode := range consensusNodeMap {
- if consensusNode.Order == order {
- return xPub, nil
- }
- }
-
- // impossible occur
- return "", errors.New("can not find blocker by given timestamp")
+func (c *Chain) getBestConsensusResult() (*state.ConsensusResult, error) {
+ bestBlockHeader := c.bestBlockHeader
+ seq := state.CalcVoteSeq(bestBlockHeader.Height)
+ return c.getConsensusResult(seq, bestBlockHeader)