Commit 23c4e112 authored by mdj33's avatar mdj33 Committed by vipwzw

add bls trigger

parent b57b7c5b
...@@ -19,21 +19,3 @@ jobs: ...@@ -19,21 +19,3 @@ jobs:
run: | run: |
make docker-compose dapp=paracross make docker-compose dapp=paracross
make docker-compose-down dapp=paracross make docker-compose-down dapp=paracross
bls:
name: bls
runs-on: ubuntu-latest
steps:
- name: Set up Golang
uses: actions/setup-go@v2
with:
go-version: 1.15
id: go
- name: set go env
run: export PATH=${PATH}:`go env GOPATH`/bin
- name: checkout
uses: actions/checkout@v2
- name: deploy
run: |
make docker-compose dapp=paracross extra=1
make docker-compose-down dapp=paracross
...@@ -182,7 +182,7 @@ func (b *blsClient) rcvLeaderSyncTx(sync *pt.LeaderSyncInfo) error { ...@@ -182,7 +182,7 @@ func (b *blsClient) rcvLeaderSyncTx(sync *pt.LeaderSyncInfo) error {
if len(nodes) <= 0 { if len(nodes) <= 0 {
return errors.Wrapf(pt.ErrParaNodeGroupNotSet, "id=%s", b.selfID) return errors.Wrapf(pt.ErrParaNodeGroupNotSet, "id=%s", b.selfID)
} }
plog.Info("bls.event.rcvLeaderSyncTx", "from.leader", sync.ID, "self", b.selfID, plog.Info("bls.event.rcvLeaderSync", "from.leader", sync.ID, "self", b.selfID,
"fromBase", sync.BaseIdx, "selfBase", base, "from.Off", sync.Offset, "selfOff", off, "count", sync.Count) "fromBase", sync.BaseIdx, "selfBase", base, "from.Off", sync.Offset, "selfOff", off, "count", sync.Count)
//接受同步数据需要两个节点基本的共识高度相同, 两个共同leader需相同 //接受同步数据需要两个节点基本的共识高度相同, 两个共同leader需相同
if sync.BaseIdx != base { if sync.BaseIdx != base {
...@@ -299,17 +299,17 @@ out: ...@@ -299,17 +299,17 @@ out:
b.clearDonePool(consensHeight) b.clearDonePool(consensHeight)
//支持可配的只部分nodegroup地址参与聚合,另一部分直接发送 //支持可配的只部分nodegroup地址参与聚合,另一部分直接发送
calcNodes := len(nodes) doneNodes := len(nodes)
if b.partNodeGroup > 0 && int(b.partNodeGroup) < calcNodes { if b.partNodeGroup > 0 && int(b.partNodeGroup) < doneNodes {
calcNodes = int(b.partNodeGroup) doneNodes = int(b.partNodeGroup)
} }
//commitsPool里面任一高度满足共识,则认为done //commitsPool里面任一高度满足共识,则认为done
if !isMostCommitDone(calcNodes, b.commitsPool, isLeader, leader) { if !isMostCommitDone(doneNodes, b.commitsPool, isLeader, leader) {
continue continue
} }
//自己是Leader,或共识高度超过阈值则聚合并发送交易 //自己是Leader,或共识高度超过阈值则聚合并发送交易
if isLeader || int32(math.Abs(float64(b.paraClient.commitMsgClient.chainHeight-consensHeight))) > b.consensHeightDiffThreshold { if isLeader || int32(math.Abs(float64(b.paraClient.commitMsgClient.chainHeight-consensHeight))) > b.consensHeightDiffThreshold {
_ = b.sendAggregateTx(nodes) _ = b.sendAggregateTx(nodes, doneNodes)
} }
case <-b.quit: case <-b.quit:
...@@ -318,8 +318,8 @@ out: ...@@ -318,8 +318,8 @@ out:
} }
} }
func (b *blsClient) sendAggregateTx(nodes []string) error { func (b *blsClient) sendAggregateTx(nodes []string, doneNodes int) error {
dones := filterDoneCommits(len(nodes), b.commitsPool) dones := filterDoneCommits(doneNodes, b.commitsPool)
if len(dones) <= 0 { if len(dones) <= 0 {
return nil return nil
} }
...@@ -440,11 +440,11 @@ func isMostCommitDone(nodes int, txsBuff map[int64]*pt.ParaBlsSignSumDetails, is ...@@ -440,11 +440,11 @@ func isMostCommitDone(nodes int, txsBuff map[int64]*pt.ParaBlsSignSumDetails, is
} }
//找出共识并达到2/3的commits, 并去除与共识不同的commits,为后面聚合签名做准备 //找出共识并达到2/3的commits, 并去除与共识不同的commits,为后面聚合签名做准备
func filterDoneCommits(peers int, pool map[int64]*pt.ParaBlsSignSumDetails) []*pt.ParaBlsSignSumDetails { func filterDoneCommits(nodes int, pool map[int64]*pt.ParaBlsSignSumDetails) []*pt.ParaBlsSignSumDetails {
var seq []int64 var seq []int64
for i, v := range pool { for i, v := range pool {
most, hash := util.GetMostCommit(v.Msgs) most, hash := util.GetMostCommit(v.Msgs)
if !util.IsCommitDone(peers, most) { if !util.IsCommitDone(nodes, most) {
continue continue
} }
seq = append(seq, i) seq = append(seq, i)
......
...@@ -194,9 +194,7 @@ func (client *commitMsgClient) createCommitTx() { ...@@ -194,9 +194,7 @@ func (client *commitMsgClient) createCommitTx() {
} }
//如果配置了blsSign 则发送到p2p的leader节点来聚合发送,否则发送到主链 //如果配置了blsSign 则发送到p2p的leader节点来聚合发送,否则发送到主链
if client.paraClient.blsSignCli.blsSignOn { if client.paraClient.blsSignCli.blsSignOn {
plog.Debug("bls.event.para bls commitMs send to p2p", "hash", common.ToHex(tx.Hash())) client.pushCommitTx2P2P(tx)
act := &pt.ParaP2PSubMsg{Ty: P2pSubCommitTx, Value: &pt.ParaP2PSubMsg_CommitTx{CommitTx: tx}}
client.paraClient.SendPubP2PMsg(paraBlsSignTopic, types.Encode(act))
return return
} }
client.pushCommitTx(tx) client.pushCommitTx(tx)
...@@ -255,6 +253,19 @@ func (client *commitMsgClient) pushCommitTx(signTx *types.Transaction) { ...@@ -255,6 +253,19 @@ func (client *commitMsgClient) pushCommitTx(signTx *types.Transaction) {
client.sendMsgCh <- signTx client.sendMsgCh <- signTx
} }
//仍旧setCurrentTx, 这样在几个块之后仍旧会触发重发,重发只是广播,不然发送p2p之后,如果共识没增加,也没有其他触发的条件了
func (client *commitMsgClient) pushCommitTx2P2P(signTx *types.Transaction) {
client.mutex.Lock()
defer client.mutex.Unlock()
client.checkTxCommitTimes = 0
client.setCurrentTx(signTx)
plog.Debug("bls.event.para bls commitMs send to p2p", "hash", common.ToHex(signTx.Hash()))
act := &pt.ParaP2PSubMsg{Ty: P2pSubCommitTx, Value: &pt.ParaP2PSubMsg_CommitTx{CommitTx: signTx}}
client.paraClient.SendPubP2PMsg(paraBlsSignTopic, types.Encode(act))
}
//根据收集的commit action,签名发送, 比如BLS签名后的commit msg //根据收集的commit action,签名发送, 比如BLS签名后的commit msg
func (client *commitMsgClient) sendCommitActions(acts []*pt.ParacrossCommitAction) { func (client *commitMsgClient) sendCommitActions(acts []*pt.ParacrossCommitAction) {
//如果当前正在发送交易,则取消此次发送,待发送被确认或取消后再触发. 考虑到已经聚合共识成功,又收到某节点消息场景,会多发送交易 //如果当前正在发送交易,则取消此次发送,待发送被确认或取消后再触发. 考虑到已经聚合共识成功,又收到某节点消息场景,会多发送交易
......
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