aboutsummaryrefslogtreecommitdiffstats
path: root/core/compaction-chain.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-08-20 14:03:18 +0800
committerGitHub <noreply@github.com>2018-08-20 14:03:18 +0800
commit1e71e263e063adbe7e44d48818f9c74924a2945d (patch)
treeb874d8d4d6cc1d0aa6f106f276f83706361f0878 /core/compaction-chain.go
parentd9ba7986a975615fb10790cfd448c48c89c1a7b3 (diff)
downloaddexon-consensus-1e71e263e063adbe7e44d48818f9c74924a2945d.tar
dexon-consensus-1e71e263e063adbe7e44d48818f9c74924a2945d.tar.gz
dexon-consensus-1e71e263e063adbe7e44d48818f9c74924a2945d.tar.bz2
dexon-consensus-1e71e263e063adbe7e44d48818f9c74924a2945d.tar.lz
dexon-consensus-1e71e263e063adbe7e44d48818f9c74924a2945d.tar.xz
dexon-consensus-1e71e263e063adbe7e44d48818f9c74924a2945d.tar.zst
dexon-consensus-1e71e263e063adbe7e44d48818f9c74924a2945d.zip
core: NotaryAck interfaces. (#67)
Diffstat (limited to 'core/compaction-chain.go')
-rw-r--r--core/compaction-chain.go40
1 files changed, 34 insertions, 6 deletions
diff --git a/core/compaction-chain.go b/core/compaction-chain.go
index f2b4d1b..664b692 100644
--- a/core/compaction-chain.go
+++ b/core/compaction-chain.go
@@ -20,24 +20,37 @@
package core
import (
+ "fmt"
"sync"
- //"github.com/dexon-foundation/dexon-consensus-core/common"
"github.com/dexon-foundation/dexon-consensus-core/core/types"
"github.com/dexon-foundation/dexon-consensus-core/crypto"
)
+// Errors for compaction chain.
+var (
+ ErrIncorrectNotaryAck = fmt.Errorf(
+ "compaction chain notary of block is incorrect")
+)
+
type compactionChain struct {
- prevBlock *types.Block
- lock sync.RWMutex
+ prevBlock *types.Block
+ lock sync.RWMutex
+ latestNotaryAcks map[types.ValidatorID]types.NotaryAck
}
func newCompactionChain() *compactionChain {
return &compactionChain{}
}
-func (cc *compactionChain) prepareBlock(
- block *types.Block, prvKey crypto.PrivateKey) (err error) {
+func (cc *compactionChain) sanityCheck(notaryAck types.NotaryAck) bool {
+ return true
+}
+
+func (cc *compactionChain) processBlock(block *types.Block) (err error) {
+ cc.lock.Lock()
+ defer cc.lock.Unlock()
+ cc.prevBlock = block
/*
prevBlock := cc.lastBlock()
if prevBlock != nil {
@@ -51,8 +64,18 @@ func (cc *compactionChain) prepareBlock(
*/
return
}
+func (cc *compactionChain) prepareNotaryAck(prvKey crypto.PrivateKey) (
+ notaryAck types.NotaryAck, err error) {
+ notaryAck.NotaryBlockHash = cc.lastBlock().Hash
+ return
+}
-func (cc *compactionChain) processBlock(block *types.Block) (err error) {
+func (cc *compactionChain) processNotaryAck(notaryAck types.NotaryAck) (
+ err error) {
+ if !cc.sanityCheck(notaryAck) {
+ err = ErrIncorrectNotaryAck
+ return
+ }
/*
prevBlock := cc.lastBlock()
if prevBlock == nil {
@@ -69,9 +92,14 @@ func (cc *compactionChain) processBlock(block *types.Block) (err error) {
defer cc.lock.Unlock()
cc.prevBlock = block
*/
+ cc.latestNotaryAcks[notaryAck.ProposerID] = notaryAck
return
}
+func (cc *compactionChain) notaryAcks() map[types.ValidatorID]types.NotaryAck {
+ return cc.latestNotaryAcks
+}
+
func (cc *compactionChain) lastBlock() *types.Block {
cc.lock.RLock()
defer cc.lock.RUnlock()