OSDN Git Service

fix_concurrent_sign_block
[bytom/vapor.git] / protocol / bbft.go
index dde4401..cc129bf 100644 (file)
@@ -149,6 +149,8 @@ func (c *Chain) validateSign(block *types.Block) error {
                                block.BlockWitness.Delete(node.Order)
                                continue
                        }
+
+                       return errors.New("current blocker has double signed the block")
                } else if err != nil {
                        return err
                }
@@ -204,21 +206,8 @@ func (c *Chain) ProcessBlockSignature(signature, xPub []byte, blockHash *bc.Hash
        return c.eventDispatcher.Post(event.BlockSignatureEvent{BlockHash: *blockHash, Signature: signature, XPub: xPub})
 }
 
-// SignBlockHeader signing the block if current node is consensus node
-func (c *Chain) SignBlockHeader(blockHeader *types.BlockHeader) error {
-       c.cond.L.Lock()
-       defer c.cond.L.Unlock()
-
-       _, err := c.signBlockHeader(blockHeader)
-       if err != nil {
-               return err
-       }
-
-       return c.store.SaveBlockHeader(blockHeader)
-}
-
 func (c *Chain) applyBlockSign(blockHeader *types.BlockHeader) error {
-       signature, err := c.signBlockHeader(blockHeader)
+       signature, err := c.SignBlockHeader(blockHeader)
        if err != nil {
                return err
        }
@@ -235,7 +224,8 @@ func (c *Chain) applyBlockSign(blockHeader *types.BlockHeader) error {
        return c.eventDispatcher.Post(event.BlockSignatureEvent{BlockHash: blockHeader.Hash(), Signature: signature, XPub: xpub[:]})
 }
 
-func (c *Chain) signBlockHeader(blockHeader *types.BlockHeader) ([]byte, error) {
+// SignBlockHeader signing the block if current node is consensus node
+func (c *Chain) SignBlockHeader(blockHeader *types.BlockHeader) ([]byte, error) {
        xprv := config.CommonConfig.PrivateKey()
        xpub := xprv.XPub()
        node, err := c.getConsensusNode(&blockHeader.PreviousBlockHash, xpub.String())