aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMission Liao <mission.liao@dexon.org>2019-02-27 15:39:24 +0800
committerGitHub <noreply@github.com>2019-02-27 15:39:24 +0800
commit400c4f2fd9400c0fa01fc416fa1804ee7e87af88 (patch)
treed20d044e94060c0b33759549c115bb14ab09f1d5
parent9e18a2b406b58e4b44eea4d5741f71f689f8022c (diff)
downloaddexon-consensus-400c4f2fd9400c0fa01fc416fa1804ee7e87af88.tar
dexon-consensus-400c4f2fd9400c0fa01fc416fa1804ee7e87af88.tar.gz
dexon-consensus-400c4f2fd9400c0fa01fc416fa1804ee7e87af88.tar.bz2
dexon-consensus-400c4f2fd9400c0fa01fc416fa1804ee7e87af88.tar.lz
dexon-consensus-400c4f2fd9400c0fa01fc416fa1804ee7e87af88.tar.xz
dexon-consensus-400c4f2fd9400c0fa01fc416fa1804ee7e87af88.tar.zst
dexon-consensus-400c4f2fd9400c0fa01fc416fa1804ee7e87af88.zip
core: fix panic by duplicated pending blocks (#460)
-rw-r--r--core/blockchain.go5
-rw-r--r--core/blockchain_test.go6
2 files changed, 9 insertions, 2 deletions
diff --git a/core/blockchain.go b/core/blockchain.go
index 001892e..bc9616c 100644
--- a/core/blockchain.go
+++ b/core/blockchain.go
@@ -451,6 +451,11 @@ func (bc *blockChain) findPendingBlock(p types.Position) *types.Block {
func (bc *blockChain) addPendingBlockRecord(p pendingBlockRecord) {
if err := bc.pendingBlocks.insert(p); err != nil {
+ if err == ErrDuplicatedPendingBlock {
+ // TODO(mission): panic directly once our BA can confirm blocks
+ // uniquely and in sequence.
+ return
+ }
panic(err)
}
if p.block != nil {
diff --git a/core/blockchain_test.go b/core/blockchain_test.go
index 46cb457..4c8fe23 100644
--- a/core/blockchain_test.go
+++ b/core/blockchain_test.go
@@ -419,8 +419,10 @@ func (s *BlockChainTestSuite) TestPendingBlockRecords() {
s.Require().NoError(ps.insert(pendingBlockRecord{bs[2].Position, bs[2]}))
s.Require().NoError(ps.insert(pendingBlockRecord{bs[1].Position, bs[1]}))
s.Require().NoError(ps.insert(pendingBlockRecord{bs[0].Position, bs[0]}))
- s.Require().Equal(ErrDuplicatedPendingBlock.Error(),
- ps.insert(pendingBlockRecord{bs[0].Position, nil}).Error())
+ // TODO(mission): unlock this checking once our BA can confirm blocks
+ // uniquely in sequence.
+ // s.Require().Equal(ErrDuplicatedPendingBlock.Error(),
+ // ps.insert(pendingBlockRecord{bs[0].Position, nil}).Error())
s.Require().True(ps[0].position.Equal(bs[0].Position))
s.Require().True(ps[1].position.Equal(bs[1].Position))
s.Require().True(ps[2].position.Equal(bs[2].Position))