From ff266975e6aba0c5a5e1b7f9d56cc322108bab57 Mon Sep 17 00:00:00 2001 From: iczc Date: Thu, 25 Jul 2019 14:55:23 +0800 Subject: [PATCH] get standby nodes (#355) * get standby nodes * use address as parameter --- toolbar/apinode/block.go | 8 ++++---- toolbar/common/consensus.go | 25 +++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 toolbar/common/consensus.go diff --git a/toolbar/apinode/block.go b/toolbar/apinode/block.go index d8a1bbf0..50ac53f8 100644 --- a/toolbar/apinode/block.go +++ b/toolbar/apinode/block.go @@ -31,11 +31,11 @@ func (n *Node) getRawBlock(req *getRawBlockReq) (*types.Block, error) { 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}) } -func (n *Node) GetVoteByHeight(height uint64) ([]api.VoteInfo, error) { +func (n *Node) GetVoteByHeight(height uint64) ([]*api.VoteInfo, error) { return n.getVoteResult(&getVoteResultReq{BlockHeight: height}) } @@ -44,12 +44,12 @@ type getVoteResultReq struct { 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") } - resp := []api.VoteInfo{} + resp := []*api.VoteInfo{} return resp, n.request(url, payload, &resp) } diff --git a/toolbar/common/consensus.go b/toolbar/common/consensus.go new file mode 100644 index 00000000..50983b15 --- /dev/null +++ b/toolbar/common/consensus.go @@ -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 +} -- 2.11.0