aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2019-01-24 16:37:57 +0800
committerGitHub <noreply@github.com>2019-01-24 16:37:57 +0800
commit2f0e7882df894d4526de0ab6e595cdfb85e43891 (patch)
tree9dbbdac7e2b645f5244a3ff7786bd4f9827db34d /core
parentb6ca251bcb6e1a19a7276afe68bf37a4372670fa (diff)
downloadtangerine-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar
tangerine-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.gz
tangerine-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.bz2
tangerine-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.lz
tangerine-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.xz
tangerine-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.zst
tangerine-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.zip
core: reduce rand result rebroadcast (#432)
Diffstat (limited to 'core')
-rw-r--r--core/compaction-chain.go13
-rw-r--r--core/consensus.go5
2 files changed, 18 insertions, 0 deletions
diff --git a/core/compaction-chain.go b/core/compaction-chain.go
index 8e04429..b0bc236 100644
--- a/core/compaction-chain.go
+++ b/core/compaction-chain.go
@@ -207,6 +207,19 @@ func (cc *compactionChain) processFinalizedBlock(block *types.Block) error {
return nil
}
+func (cc *compactionChain) firstBlockRandomnessResult(
+ rand *types.BlockRandomnessResult) bool {
+ cc.lock.RLock()
+ defer cc.lock.RUnlock()
+ if _, exist := cc.pendingRandomness[rand.BlockHash]; exist {
+ return false
+ }
+ if _, exist := cc.blockRandomness[rand.BlockHash]; exist {
+ return false
+ }
+ return true
+}
+
func (cc *compactionChain) processBlockRandomnessResult(
rand *types.BlockRandomnessResult) error {
ok, err := cc.verifyRandomness(
diff --git a/core/consensus.go b/core/consensus.go
index 3a27b5f..223e5df 100644
--- a/core/consensus.go
+++ b/core/consensus.go
@@ -1095,6 +1095,11 @@ func (con *Consensus) ProcessBlockRandomnessResult(
if rand.Position.Round == 0 {
return nil
}
+ if needBroadcast {
+ if !con.ccModule.firstBlockRandomnessResult(rand) {
+ needBroadcast = false
+ }
+ }
if err := con.ccModule.processBlockRandomnessResult(rand); err != nil {
if err == ErrBlockNotRegistered {
err = nil