diff options
author | Jimmy Hu <jimmy.hu@dexon.org> | 2018-10-16 16:02:38 +0800 |
---|---|---|
committer | Wei-Ning Huang <aitjcize@gmail.com> | 2018-10-16 16:02:38 +0800 |
commit | fe0f16007f45232e40320f7b6d9f6f42af40c685 (patch) | |
tree | b0311b4cd4957c153d1040b6ab3762395b0498e8 /core | |
parent | bcf7d396322efae599d03ad7948500e01104e3fb (diff) | |
download | dexon-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.go | 1 | ||||
-rw-r--r-- | core/agreement.go | 5 | ||||
-rw-r--r-- | core/agreement_test.go | 1 | ||||
-rw-r--r-- | core/leader-selector.go | 3 |
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 } |