aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-10-16 16:02:38 +0800
committerWei-Ning Huang <aitjcize@gmail.com>2018-10-16 16:02:38 +0800
commitfe0f16007f45232e40320f7b6d9f6f42af40c685 (patch)
treeb0311b4cd4957c153d1040b6ab3762395b0498e8 /core
parentbcf7d396322efae599d03ad7948500e01104e3fb (diff)
downloaddexon-consensus-fe0f16007f45232e40320f7b6d9f6f42af40c685.tar
dexon-consensus-fe0f16007f45232e40320f7b6d9f6f42af40c685.tar.gz
dexon-consensus-fe0f16007f45232e40320f7b6d9f6f42af40c685.tar.bz2
dexon-consensus-fe0f16007f45232e40320f7b6d9f6f42af40c685.tar.lz
dexon-consensus-fe0f16007f45232e40320f7b6d9f6f42af40c685.tar.xz
dexon-consensus-fe0f16007f45232e40320f7b6d9f6f42af40c685.tar.zst
dexon-consensus-fe0f16007f45232e40320f7b6d9f6f42af40c685.zip
core: Fix corner cases (#211)
* leader selector will choose smaller hash if distance to crs is the same * Set initial value of aID in BA before start
Diffstat (limited to 'core')
-rw-r--r--core/agreement-state_test.go1
-rw-r--r--core/agreement.go5
-rw-r--r--core/agreement_test.go1
-rw-r--r--core/leader-selector.go3
4 files changed, 8 insertions, 2 deletions
diff --git a/core/agreement-state_test.go b/core/agreement-state_test.go
index 2178b36..030a295 100644
--- a/core/agreement-state_test.go
+++ b/core/agreement-state_test.go
@@ -115,6 +115,7 @@ func (s *AgreementStateTestSuite) newAgreement(numNode int) *agreement {
leader,
s.auths[s.ID],
)
+ agreement.restart(notarySet, types.Position{})
return agreement
}
diff --git a/core/agreement.go b/core/agreement.go
index aa1d1dc..1b995e7 100644
--- a/core/agreement.go
+++ b/core/agreement.go
@@ -19,6 +19,7 @@ package core
import (
"fmt"
+ "math"
"sync"
"sync/atomic"
"time"
@@ -126,7 +127,9 @@ func newAgreement(
candidateBlock: make(map[common.Hash]*types.Block),
authModule: authModule,
}
- agreement.restart(notarySet, types.Position{})
+ agreement.restart(notarySet, types.Position{
+ ChainID: math.MaxUint32,
+ })
return agreement
}
diff --git a/core/agreement_test.go b/core/agreement_test.go
index db5bd42..047dbe7 100644
--- a/core/agreement_test.go
+++ b/core/agreement_test.go
@@ -104,6 +104,7 @@ func (s *AgreementTestSuite) newAgreement(numNotarySet int) *agreement {
leader,
s.auths[s.ID],
)
+ agreement.restart(notarySet, types.Position{})
s.agreement = append(s.agreement, agreement)
return agreement
}
diff --git a/core/leader-selector.go b/core/leader-selector.go
index de519b0..23b9bb1 100644
--- a/core/leader-selector.go
+++ b/core/leader-selector.go
@@ -97,7 +97,8 @@ func (l *leaderSelector) processBlock(block *types.Block) error {
return ErrIncorrectCRSSignature
}
dist := l.distance(block.CRSSignature)
- if l.minCRSBlock.Cmp(dist) == 1 {
+ cmp := l.minCRSBlock.Cmp(dist)
+ if cmp > 0 || (cmp == 0 && block.Hash.Less(l.minBlockHash)) {
l.minCRSBlock = dist
l.minBlockHash = block.Hash
}