OSDN Git Service

Merge branch 'master' into add_irreversible_block add_irreversible_block
authorPaladz <yzhu101@uottawa.ca>
Mon, 7 Sep 2020 05:28:31 +0000 (13:28 +0800)
committerGitHub <noreply@github.com>
Mon, 7 Sep 2020 05:28:31 +0000 (13:28 +0800)
netsync/chainmgr/block_keeper.go
netsync/chainmgr/block_process.go
protocol/bbft.go

index 9cdfe1b..7707cff 100644 (file)
@@ -7,8 +7,10 @@ import (
 
        "github.com/bytom/vapor/consensus"
        dbm "github.com/bytom/vapor/database/leveldb"
+       "github.com/bytom/vapor/errors"
        "github.com/bytom/vapor/netsync/peers"
        "github.com/bytom/vapor/p2p/security"
+       "github.com/bytom/vapor/protocol"
        "github.com/bytom/vapor/protocol/bc"
        "github.com/bytom/vapor/protocol/bc/types"
 )
@@ -170,7 +172,9 @@ func (bk *blockKeeper) regularBlockSync() error {
 
                isOrphan, err := bk.chain.ProcessBlock(block)
                if err != nil {
-                       bk.peers.ProcessIllegal(bk.syncPeer.ID(), security.LevelMsgIllegal, err.Error())
+                       if errors.Root(err) != protocol.ErrDoubleSignBlock {
+                               bk.peers.ProcessIllegal(bk.syncPeer.ID(), security.LevelMsgIllegal, err.Error())
+                       }
                        return err
                }
 
index 50a110b..f7f4619 100644 (file)
@@ -8,6 +8,7 @@ import (
        "github.com/bytom/vapor/errors"
        "github.com/bytom/vapor/netsync/peers"
        "github.com/bytom/vapor/p2p/security"
+       "github.com/bytom/vapor/protocol"
 )
 
 var errOrphanBlock = errors.New("fast sync inserting orphan block")
@@ -33,7 +34,7 @@ func (bp *blockProcessor) insert(blockStorage *blockStorage) error {
                return errOrphanBlock
        }
 
-       if err != nil {
+       if err != nil && errors.Root(err) != protocol.ErrDoubleSignBlock {
                bp.peers.ProcessIllegal(blockStorage.peerID, security.LevelMsgIllegal, err.Error())
        }
        return err
index 02accaf..e1fa489 100644 (file)
@@ -20,9 +20,9 @@ const (
 )
 
 var (
-       errDoubleSignBlock  = errors.New("the consensus is double sign in same height of different block")
+       // ErrDoubleSignBlock represent the consensus is double sign in same height of different block
+       ErrDoubleSignBlock  = errors.New("the consensus is double sign in same height of different block")
        errInvalidSignature = errors.New("the signature of block is invalid")
-       errSignForkChain    = errors.New("can not sign fork before the irreversible block")
 )
 
 func signCacheKey(blockHash, pubkey string) string {
@@ -53,7 +53,7 @@ func (c *Chain) checkDoubleSign(bh *types.BlockHeader, xPub string) error {
                }
 
                if blockHeader.BlockWitness.Get(consensusNode.Order) != nil {
-                       return errDoubleSignBlock
+                       return ErrDoubleSignBlock
                }
        }
        return nil
@@ -140,7 +140,7 @@ func (c *Chain) validateSign(block *types.Block) error {
                        }
                }
 
-               if err := c.checkNodeSign(&block.BlockHeader, node, block.Get(node.Order)); err == errDoubleSignBlock {
+               if err := c.checkNodeSign(&block.BlockHeader, node, block.Get(node.Order)); err == ErrDoubleSignBlock {
                        log.WithFields(log.Fields{"module": logModule, "blockHash": blockHash.String(), "pubKey": pubKey}).Warn("the consensus node double sign the same height of different block")
                        // if the blocker double sign & become the mainchain, that means
                        // all the side chain will reject the main chain make the chain
@@ -149,6 +149,8 @@ func (c *Chain) validateSign(block *types.Block) error {
                                block.BlockWitness.Delete(node.Order)
                                continue
                        }
+
+                       return err
                } else if err != nil {
                        return err
                }
@@ -246,7 +248,7 @@ func (c *Chain) signBlockHeader(blockHeader *types.BlockHeader) ([]byte, error)
                return nil, nil
        }
 
-       if err := c.checkDoubleSign(blockHeader, node.XPub.String()); err == errDoubleSignBlock {
+       if err := c.checkDoubleSign(blockHeader, node.XPub.String()); err == ErrDoubleSignBlock {
                log.WithFields(log.Fields{"module": logModule, "blockHash": blockHash.String()}).Warn("current node has double sign the block")
                return nil, nil
        } else if err != nil {