aboutsummaryrefslogtreecommitdiffstats
path: root/vendor/github.com/dexon-foundation/dexon-consensus/core/compaction-chain.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2019-01-27 10:10:11 +0800
committerWei-Ning Huang <w@byzantine-lab.io>2019-06-12 17:27:21 +0800
commit44b3b292321b69f5f3d4f1a888e84327c978cd08 (patch)
tree83c8352e5540d2d0a169a3c7bb02322d42608585 /vendor/github.com/dexon-foundation/dexon-consensus/core/compaction-chain.go
parent24819d5eb4c2f58a8b63fccfc0d32044f5676e14 (diff)
downloadgo-tangerine-44b3b292321b69f5f3d4f1a888e84327c978cd08.tar
go-tangerine-44b3b292321b69f5f3d4f1a888e84327c978cd08.tar.gz
go-tangerine-44b3b292321b69f5f3d4f1a888e84327c978cd08.tar.bz2
go-tangerine-44b3b292321b69f5f3d4f1a888e84327c978cd08.tar.lz
go-tangerine-44b3b292321b69f5f3d4f1a888e84327c978cd08.tar.xz
go-tangerine-44b3b292321b69f5f3d4f1a888e84327c978cd08.tar.zst
go-tangerine-44b3b292321b69f5f3d4f1a888e84327c978cd08.zip
params: update testnet config (#177)
* vendor:sync to latest core * params: Update config for testnet
Diffstat (limited to 'vendor/github.com/dexon-foundation/dexon-consensus/core/compaction-chain.go')
-rw-r--r--vendor/github.com/dexon-foundation/dexon-consensus/core/compaction-chain.go48
1 files changed, 34 insertions, 14 deletions
diff --git a/vendor/github.com/dexon-foundation/dexon-consensus/core/compaction-chain.go b/vendor/github.com/dexon-foundation/dexon-consensus/core/compaction-chain.go
index 8e044293f..d7c2f8556 100644
--- a/vendor/github.com/dexon-foundation/dexon-consensus/core/compaction-chain.go
+++ b/vendor/github.com/dexon-foundation/dexon-consensus/core/compaction-chain.go
@@ -41,6 +41,7 @@ var (
)
const maxPendingPeriod = 3 * time.Second
+const maxRandomnessCache = 100
type pendingRandomnessResult struct {
receivedTime time.Time
@@ -50,24 +51,26 @@ type pendingRandomnessResult struct {
type finalizedBlockHeap = types.ByFinalizationHeight
type compactionChain struct {
- gov Governance
- chainUnsynced uint32
- tsigVerifier *TSigVerifierCache
- blocks map[common.Hash]*types.Block
- blockRandomness map[common.Hash][]byte
- pendingRandomness map[common.Hash]pendingRandomnessResult
- pendingBlocks []*types.Block
- lock sync.RWMutex
- prevBlock *types.Block
+ gov Governance
+ chainUnsynced uint32
+ tsigVerifier *TSigVerifierCache
+ blocks map[common.Hash]*types.Block
+ blockRandomness map[common.Hash][]byte
+ pendingRandomness map[common.Hash]pendingRandomnessResult
+ processedRandomnessResult map[types.Position]struct{}
+ pendingBlocks []*types.Block
+ lock sync.RWMutex
+ prevBlock *types.Block
}
func newCompactionChain(gov Governance) *compactionChain {
return &compactionChain{
- gov: gov,
- tsigVerifier: NewTSigVerifierCache(gov, 7),
- blocks: make(map[common.Hash]*types.Block),
- blockRandomness: make(map[common.Hash][]byte),
- pendingRandomness: make(map[common.Hash]pendingRandomnessResult),
+ gov: gov,
+ tsigVerifier: NewTSigVerifierCache(gov, 7),
+ blocks: make(map[common.Hash]*types.Block),
+ blockRandomness: make(map[common.Hash][]byte),
+ pendingRandomness: make(map[common.Hash]pendingRandomnessResult),
+ processedRandomnessResult: make(map[types.Position]struct{}, maxRandomnessCache),
}
}
@@ -207,6 +210,23 @@ func (cc *compactionChain) processFinalizedBlock(block *types.Block) error {
return nil
}
+func (cc *compactionChain) touchBlockRandomnessResult(
+ rand *types.BlockRandomnessResult) (first bool) {
+ // DO NOT LOCK THIS FUNCTION!!!!!!!! YOU WILL REGRET IT!!!!!
+ if _, exist := cc.processedRandomnessResult[rand.Position]; !exist {
+ first = true
+ if len(cc.processedRandomnessResult) > maxRandomnessCache {
+ for k := range cc.processedRandomnessResult {
+ // Randomly drop one element.
+ delete(cc.processedRandomnessResult, k)
+ break
+ }
+ }
+ cc.processedRandomnessResult[rand.Position] = struct{}{}
+ }
+ return
+}
+
func (cc *compactionChain) processBlockRandomnessResult(
rand *types.BlockRandomnessResult) error {
ok, err := cc.verifyRandomness(