Commit 71eeae1c authored by QM's avatar QM

updata

parent 6ebd67fb
......@@ -172,38 +172,26 @@ func (b *blsClient) getLeaderInfo() ([]string, int32, int32, int32, bool) {
return nodes, leaderIdx, baseIdx, offIdx, nodes[leaderIdx] == b.selfID
}
func (b *blsClient) getSupervisionLeaderInfo() ([]string, int32, int32, int32, bool) {
//在未同步前 不处理聚合消息
if !b.paraClient.commitMsgClient.isSync() {
return nil, 0, 0, 0, false
}
supervisionNodes, _ := b.getSupervisionSuperNodes()
if len(supervisionNodes) <= 0 {
return nil, 0, 0, 0, false
}
h := b.paraClient.commitMsgClient.getConsensusHeight()
//间隔的除数再根据nodes取余数,平均覆盖所有节点
baseIdx := int32((h / int64(b.leaderSwitchInt)) % int64(len(supervisionNodes)))
offIdx := atomic.LoadInt32(&b.leaderOffset)
leaderIdx := (baseIdx + offIdx) % int32(len(supervisionNodes))
return supervisionNodes, leaderIdx, baseIdx, offIdx, supervisionNodes[leaderIdx] == b.selfID
}
func (b *blsClient) getSuperNodes() ([]string, string) {
// 获取授权节点
nodeStr, err := b.paraClient.commitMsgClient.getNodeGroupAddrs()
if err != nil {
return nil, ""
if strings.Contains(nodeStr, b.selfID) {
if err != nil {
return nil, ""
}
return strings.Split(nodeStr, ","), nodeStr
}
return strings.Split(nodeStr, ","), nodeStr
}
// 获取监督节点
func (b *blsClient) getSupervisionSuperNodes() ([]string, string) {
nodeStr, err := b.paraClient.commitMsgClient.getSupervisionNodeGroupAddrs()
if err != nil {
return nil, ""
// 获取监督节点
nodeStr, err = b.paraClient.commitMsgClient.getSupervisionNodeGroupAddrs()
if strings.Contains(nodeStr, b.selfID) {
if err != nil {
return nil, ""
}
return strings.Split(nodeStr, ","), nodeStr
}
return strings.Split(nodeStr, ","), nodeStr
return nil, ""
}
func (b *blsClient) isValidNodes(id string) bool {
......
......@@ -547,6 +547,8 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
var commitAddrs, commitSupervisionAddrs, validAddrs, supervisionValidAddrs []string
bIsCommitSuperNode := false
bIsCommitSupervisionNode := false
for _, addr := range nodesArry {
if addr == a.fromaddr {
// 授权节点共识
......@@ -561,6 +563,11 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
}
validAddrs = getValidAddrs(nodesMap, commitAddrs)
if len(validAddrs) <= 0 {
return nil, errors.Wrapf(err, "getValidAddrs nil commitAddrs=%s ", strings.Join(commitAddrs, ","))
}
bIsCommitSuperNode = true
break
}
}
......@@ -571,26 +578,33 @@ func (a *action) Commit(commit *pt.ParacrossCommitAction) (*types.Receipt, error
return nil, errors.Wrap(err, "getSupervisionNodesGroup")
}
for _, addr := range supervisionNodesArry {
if addr == a.fromaddr {
// 监督节点共识
//获取commitAddrs, bls sign 包含多个账户的聚合签名
commitSupervisionAddrs = []string{a.fromaddr}
if commit.Bls != nil {
addrs, err := a.procBlsSign(supervisionNodesArry, commit, pt.ParaCommitSupervisionNode)
if err != nil {
return nil, errors.Wrap(err, "procBlsSign")
if !bIsCommitSuperNode {
for _, addr := range supervisionNodesArry {
if addr == a.fromaddr {
// 监督节点共识
//获取commitAddrs, bls sign 包含多个账户的聚合签名
commitSupervisionAddrs = []string{a.fromaddr}
if commit.Bls != nil {
addrs, err := a.procBlsSign(supervisionNodesArry, commit, pt.ParaCommitSupervisionNode)
if err != nil {
return nil, errors.Wrap(err, "procBlsSign")
}
commitSupervisionAddrs = addrs
}
commitSupervisionAddrs = addrs
}
supervisionValidAddrs = getValidAddrs(supervisionNodesMap, commitSupervisionAddrs)
break
supervisionValidAddrs = getValidAddrs(supervisionNodesMap, commitSupervisionAddrs)
if len(supervisionValidAddrs) <= 0 {
return nil, errors.Wrapf(err, "getValidAddrs nil commitSupervisionAddrs=%s", strings.Join(commitSupervisionAddrs, ","))
}
bIsCommitSupervisionNode = true
break
}
}
}
if len(validAddrs) <= 0 && len(supervisionValidAddrs) <= 0 {
return nil, errors.Wrapf(err, "getValidAddrs nil commitAddrs=%s commitSupervisionAddrs=%s", strings.Join(commitAddrs, ","), strings.Join(commitSupervisionAddrs, ","))
if !bIsCommitSuperNode && !bIsCommitSupervisionNode {
return nil, errors.Wrapf(errors.New("from addr error"), "form addr %s not in SuperNodesGroup, not in SupervisionNodesGroup", a.fromaddr)
}
return a.proCommitMsg(commit.Status, nodesMap, validAddrs, supervisionNodesMap, supervisionValidAddrs)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment