OSDN Git Service

get standby nodes (#355)
authoriczc <iczcalan@gmail.com>
Thu, 25 Jul 2019 06:55:23 +0000 (14:55 +0800)
committerPaladz <yzhu101@uottawa.ca>
Thu, 25 Jul 2019 06:55:23 +0000 (14:55 +0800)
* get standby nodes

* use address as parameter

toolbar/apinode/block.go
toolbar/common/consensus.go [new file with mode: 0644]

index d8a1bbf..50ac53f 100644 (file)
@@ -31,11 +31,11 @@ func (n *Node) getRawBlock(req *getRawBlockReq) (*types.Block, error) {
        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})
 }
 
@@ -44,12 +44,12 @@ type getVoteResultReq struct {
        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)
 }
diff --git a/toolbar/common/consensus.go b/toolbar/common/consensus.go
new file mode 100644 (file)
index 0000000..50983b1
--- /dev/null
@@ -0,0 +1,25 @@
+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
+}