X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=blobdiff_plain;f=protocol%2Fbbft.go;h=888ce9996114e8e95b2d66699a32d3c555555881;hp=11dc0db6f20b751a3a2e190183407eca85c79277;hb=68b5591b9e5fddae66ce722c1a540f52dc80c164;hpb=d1b44bca7ba8f4add1c064b459e8dae5810b7339 diff --git a/protocol/bbft.go b/protocol/bbft.go index 11dc0db6..888ce999 100644 --- a/protocol/bbft.go +++ b/protocol/bbft.go @@ -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