Golang implemented sidechain for Bytom
Revision | 340b55d1dcc2a73e4a3493e82c7e602da642dc8c (tree) |
---|---|
Zeit | 2020-09-07 14:28:31 |
Autor | Paladz <yzhu101@uott...> |
Commiter | GitHub |
Merge branch 'master' into add_irreversible_block
@@ -7,8 +7,10 @@ import ( | ||
7 | 7 | |
8 | 8 | "github.com/bytom/vapor/consensus" |
9 | 9 | dbm "github.com/bytom/vapor/database/leveldb" |
10 | + "github.com/bytom/vapor/errors" | |
10 | 11 | "github.com/bytom/vapor/netsync/peers" |
11 | 12 | "github.com/bytom/vapor/p2p/security" |
13 | + "github.com/bytom/vapor/protocol" | |
12 | 14 | "github.com/bytom/vapor/protocol/bc" |
13 | 15 | "github.com/bytom/vapor/protocol/bc/types" |
14 | 16 | ) |
@@ -170,7 +172,9 @@ func (bk *blockKeeper) regularBlockSync() error { | ||
170 | 172 | |
171 | 173 | isOrphan, err := bk.chain.ProcessBlock(block) |
172 | 174 | if err != nil { |
173 | - bk.peers.ProcessIllegal(bk.syncPeer.ID(), security.LevelMsgIllegal, err.Error()) | |
175 | + if errors.Root(err) != protocol.ErrDoubleSignBlock { | |
176 | + bk.peers.ProcessIllegal(bk.syncPeer.ID(), security.LevelMsgIllegal, err.Error()) | |
177 | + } | |
174 | 178 | return err |
175 | 179 | } |
176 | 180 |
@@ -8,6 +8,7 @@ import ( | ||
8 | 8 | "github.com/bytom/vapor/errors" |
9 | 9 | "github.com/bytom/vapor/netsync/peers" |
10 | 10 | "github.com/bytom/vapor/p2p/security" |
11 | + "github.com/bytom/vapor/protocol" | |
11 | 12 | ) |
12 | 13 | |
13 | 14 | var errOrphanBlock = errors.New("fast sync inserting orphan block") |
@@ -33,7 +34,7 @@ func (bp *blockProcessor) insert(blockStorage *blockStorage) error { | ||
33 | 34 | return errOrphanBlock |
34 | 35 | } |
35 | 36 | |
36 | - if err != nil { | |
37 | + if err != nil && errors.Root(err) != protocol.ErrDoubleSignBlock { | |
37 | 38 | bp.peers.ProcessIllegal(blockStorage.peerID, security.LevelMsgIllegal, err.Error()) |
38 | 39 | } |
39 | 40 | return err |
@@ -20,9 +20,9 @@ const ( | ||
20 | 20 | ) |
21 | 21 | |
22 | 22 | var ( |
23 | - errDoubleSignBlock = errors.New("the consensus is double sign in same height of different block") | |
23 | + // ErrDoubleSignBlock represent the consensus is double sign in same height of different block | |
24 | + ErrDoubleSignBlock = errors.New("the consensus is double sign in same height of different block") | |
24 | 25 | errInvalidSignature = errors.New("the signature of block is invalid") |
25 | - errSignForkChain = errors.New("can not sign fork before the irreversible block") | |
26 | 26 | ) |
27 | 27 | |
28 | 28 | func signCacheKey(blockHash, pubkey string) string { |
@@ -53,7 +53,7 @@ func (c *Chain) checkDoubleSign(bh *types.BlockHeader, xPub string) error { | ||
53 | 53 | } |
54 | 54 | |
55 | 55 | if blockHeader.BlockWitness.Get(consensusNode.Order) != nil { |
56 | - return errDoubleSignBlock | |
56 | + return ErrDoubleSignBlock | |
57 | 57 | } |
58 | 58 | } |
59 | 59 | return nil |
@@ -140,7 +140,7 @@ func (c *Chain) validateSign(block *types.Block) error { | ||
140 | 140 | } |
141 | 141 | } |
142 | 142 | |
143 | - if err := c.checkNodeSign(&block.BlockHeader, node, block.Get(node.Order)); err == errDoubleSignBlock { | |
143 | + if err := c.checkNodeSign(&block.BlockHeader, node, block.Get(node.Order)); err == ErrDoubleSignBlock { | |
144 | 144 | log.WithFields(log.Fields{"module": logModule, "blockHash": blockHash.String(), "pubKey": pubKey}).Warn("the consensus node double sign the same height of different block") |
145 | 145 | // if the blocker double sign & become the mainchain, that means |
146 | 146 | // all the side chain will reject the main chain make the chain |
@@ -149,6 +149,8 @@ func (c *Chain) validateSign(block *types.Block) error { | ||
149 | 149 | block.BlockWitness.Delete(node.Order) |
150 | 150 | continue |
151 | 151 | } |
152 | + | |
153 | + return err | |
152 | 154 | } else if err != nil { |
153 | 155 | return err |
154 | 156 | } |
@@ -246,7 +248,7 @@ func (c *Chain) signBlockHeader(blockHeader *types.BlockHeader) ([]byte, error) | ||
246 | 248 | return nil, nil |
247 | 249 | } |
248 | 250 | |
249 | - if err := c.checkDoubleSign(blockHeader, node.XPub.String()); err == errDoubleSignBlock { | |
251 | + if err := c.checkDoubleSign(blockHeader, node.XPub.String()); err == ErrDoubleSignBlock { | |
250 | 252 | log.WithFields(log.Fields{"module": logModule, "blockHash": blockHash.String()}).Warn("current node has double sign the block") |
251 | 253 | return nil, nil |
252 | 254 | } else if err != nil { |