From: Paladz Date: Mon, 7 Sep 2020 05:28:31 +0000 (+0800) Subject: Merge branch 'master' into add_irreversible_block X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=340b55d1dcc2a73e4a3493e82c7e602da642dc8c;hp=cc504452e1f8af8107a0f2162e591cead284bee4;p=bytom%2Fvapor.git Merge branch 'master' into add_irreversible_block --- diff --git a/netsync/chainmgr/block_keeper.go b/netsync/chainmgr/block_keeper.go index 9cdfe1b0..7707cffc 100644 --- a/netsync/chainmgr/block_keeper.go +++ b/netsync/chainmgr/block_keeper.go @@ -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 } diff --git a/netsync/chainmgr/block_process.go b/netsync/chainmgr/block_process.go index 50a110b6..f7f4619b 100644 --- a/netsync/chainmgr/block_process.go +++ b/netsync/chainmgr/block_process.go @@ -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 diff --git a/protocol/bbft.go b/protocol/bbft.go index 02accaf2..e1fa489a 100644 --- a/protocol/bbft.go +++ b/protocol/bbft.go @@ -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 {