diff options
author | Jimmy Hu <jimmy.hu@dexon.org> | 2019-01-24 16:37:57 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-24 16:37:57 +0800 |
commit | 2f0e7882df894d4526de0ab6e595cdfb85e43891 (patch) | |
tree | 9dbbdac7e2b645f5244a3ff7786bd4f9827db34d /core | |
parent | b6ca251bcb6e1a19a7276afe68bf37a4372670fa (diff) | |
download | dexon-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar dexon-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.gz dexon-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.bz2 dexon-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.lz dexon-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.xz dexon-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.tar.zst dexon-consensus-2f0e7882df894d4526de0ab6e595cdfb85e43891.zip |
core: reduce rand result rebroadcast (#432)
Diffstat (limited to 'core')
-rw-r--r-- | core/compaction-chain.go | 13 | ||||
-rw-r--r-- | core/consensus.go | 5 |
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 |