OSDN Git Service

Fix BlockSignatureMsg unbroadcast problem (#267)
authoryahtoo <yahtoo.ma@gmail.com>
Fri, 12 Jul 2019 07:04:56 +0000 (15:04 +0800)
committerPaladz <yzhu101@uottawa.ca>
Fri, 12 Jul 2019 07:04:56 +0000 (15:04 +0800)
* Fix BlockSignatureMsg unbroadcast problem

* Fix review bug

netsync/consensusmgr/handle.go
protocol/bbft.go

index db16688..9c8642e 100644 (file)
@@ -67,7 +67,7 @@ func (m *Manager) processMsg(peerID string, msgType byte, msg ConsensusMessage)
                return
        }
 
-       logrus.WithFields(logrus.Fields{"module": logModule, "peer": peerID, "type": reflect.TypeOf(msg), "message": msg.String()}).Info("receive message from peer")
+       logrus.WithFields(logrus.Fields{"module": logModule, "peer": peer.Addr(), "type": reflect.TypeOf(msg), "message": msg.String()}).Info("receive message from peer")
 
        switch msg := msg.(type) {
        case *BlockProposeMsg:
index 11dc0db..888ce99 100644 (file)
@@ -7,6 +7,7 @@ import (
        log "github.com/sirupsen/logrus"
 
        "github.com/vapor/config"
+       "github.com/vapor/crypto/ed25519/chainkd"
        "github.com/vapor/errors"
        "github.com/vapor/event"
        "github.com/vapor/protocol/bc"
@@ -132,6 +133,7 @@ func (c *Chain) validateSign(block *types.Block) error {
                        cachekey := signCacheKey(blockHash.String(), pubKey)
                        if signature, ok := c.signatureCache.Get(cachekey); ok {
                                block.Set(node.Order, signature.([]byte))
+                               c.eventDispatcher.Post(event.BlockSignatureEvent{BlockHash: blockHash, Signature: signature.([]byte), XPub: []byte(pubKey)})
                                c.signatureCache.Remove(cachekey)
                        } else {
                                continue
@@ -165,6 +167,12 @@ func (c *Chain) ProcessBlockSignature(signature, xPub []byte, blockHash *bc.Hash
 
        // save the signature if the block is not exist
        if blockHeader == nil {
+               var xPubKey chainkd.XPub
+               copy(xPub[:], xPub[:])
+               if !xPubKey.Verify(blockHash.Bytes(), signature) {
+                       return errInvalidSignature
+               }
+
                cacheKey := signCacheKey(blockHash.String(), xpubStr)
                c.signatureCache.Add(cacheKey, signature)
                return nil