* Add sync completion status broadcast function
* Del peer unused variable knownStatus
}
func (bk *blockKeeper) syncWorker() {
+ genesisBlock, err := bk.chain.GetBlockByHeight(0)
+ if err != nil {
+ log.WithField("err", err).Error("fail on handleStatusRequestMsg get genesis")
+ return
+ }
syncTicker := time.NewTicker(syncCycle)
for {
<-syncTicker.C
if err := bk.peers.broadcastMinedBlock(block); err != nil {
log.WithField("err", err).Error("fail on syncWorker broadcast new block")
}
+
+ if err = bk.peers.broadcastNewStatus(block, genesisBlock); err != nil {
+ log.WithField("err", err).Error("fail on syncWorker broadcast new status")
+ }
}
}
return nil
}
+func (ps *peerSet) broadcastNewStatus(bestBlock, genesisBlock *types.Block) error {
+ genesisHash := genesisBlock.Hash()
+ msg := NewStatusResponseMessage(&bestBlock.BlockHeader, &genesisHash)
+ for _, peer := range ps.peers {
+ if ok := peer.TrySend(BlockchainChannel, struct{ BlockchainMessage }{msg}); !ok {
+ ps.removePeer(peer.ID())
+ continue
+ }
+ }
+ return nil
+}
+
func (ps *peerSet) broadcastTx(tx *types.Tx) error {
msg, err := NewTransactionMessage(tx)
if err != nil {