* get standby nodes
* use address as parameter
return resp.RawBlock, n.request(url, payload, resp)
}
return resp.RawBlock, n.request(url, payload, resp)
}
-func (n *Node) GetVoteByHash(hash string) ([]api.VoteInfo, error) {
+func (n *Node) GetVoteByHash(hash string) ([]*api.VoteInfo, error) {
return n.getVoteResult(&getVoteResultReq{BlockHash: hash})
}
return n.getVoteResult(&getVoteResultReq{BlockHash: hash})
}
-func (n *Node) GetVoteByHeight(height uint64) ([]api.VoteInfo, error) {
+func (n *Node) GetVoteByHeight(height uint64) ([]*api.VoteInfo, error) {
return n.getVoteResult(&getVoteResultReq{BlockHeight: height})
}
return n.getVoteResult(&getVoteResultReq{BlockHeight: height})
}
BlockHash string `json:"block_hash"`
}
BlockHash string `json:"block_hash"`
}
-func (n *Node) getVoteResult(req *getVoteResultReq) ([]api.VoteInfo, error) {
+func (n *Node) getVoteResult(req *getVoteResultReq) ([]*api.VoteInfo, error) {
url := "/get-vote-result"
payload, err := json.Marshal(req)
if err != nil {
return nil, errors.Wrap(err, "json marshal")
}
url := "/get-vote-result"
payload, err := json.Marshal(req)
if err != nil {
return nil, errors.Wrap(err, "json marshal")
}
- resp := []api.VoteInfo{}
+ resp := []*api.VoteInfo{}
return resp, n.request(url, payload, &resp)
}
return resp, n.request(url, payload, &resp)
}
--- /dev/null
+package common
+
+import (
+ "sort"
+
+ "github.com/vapor/api"
+ "github.com/vapor/consensus"
+)
+
+const NumOfBPNode = 42
+
+func CalcStandByNodes(voteResult []*api.VoteInfo) []*api.VoteInfo {
+ sort.Slice(voteResult, func(i, j int) bool {
+ return voteResult[i].VoteNum > voteResult[j].VoteNum
+ })
+
+ result := []*api.VoteInfo{}
+ for i := int(consensus.ActiveNetParams.NumOfConsensusNode); i < NumOfBPNode && i < len(voteResult); i++ {
+ if voteResult[i].VoteNum < consensus.ActiveNetParams.MinConsensusNodeVoteNum {
+ break
+ }
+ result = append(result, voteResult[i])
+ }
+ return result
+}